From e79171ec01199ba7100c0ad90576a6ec5705d80c Mon Sep 17 00:00:00 2001 From: Samson <16504129+sagudev@users.noreply.github.com> Date: Thu, 28 Dec 2023 18:32:21 +0100 Subject: [PATCH] Update WebGPU CTS (#30954) * Update WebGPU CTS to https://github.com/gpuweb/cts/commit/ae15a59832989c22982acaeaccdf5d379afced62 * Add internal to GPUErrorFilter to make more test work * No crash in CreateRenderBundleEncoder * getCompilationInfo * Update expectations --- components/script/dom/gpudevice.rs | 10 +- components/script/dom/gpushadermodule.rs | 4 +- components/script/dom/webidls/WebGPU.webidl | 5 +- tests/wpt/webgpu/meta/MANIFEST.json | 2484 +- .../wpt/webgpu/meta/webgpu/cts.https.html.ini | 297942 +++------------ ...lpha_bgra8unorm_opaque_copy.https.html.ini | 2 - ...lpha_bgra8unorm_opaque_draw.https.html.ini | 2 +- ...lpha_rgba8unorm_opaque_copy.https.html.ini | 2 - ...lpha_rgba8unorm_opaque_draw.https.html.ini | 2 - ...ba8unorm_premultiplied_draw.https.html.ini | 2 +- tests/wpt/webgpu/tests/checkout_commit.txt | 2 +- .../webgpu/common/framework/data_cache.js | 112 +- .../tests/webgpu/common/framework/fixture.js | 92 +- .../tests/webgpu/common/framework/metadata.js | 18 +- .../webgpu/common/framework/params_builder.js | 187 +- .../webgpu/common/framework/resources.js | 17 +- .../webgpu/common/framework/test_config.js | 29 +- .../webgpu/common/framework/test_group.js | 4 +- .../webgpu/common/internal/file_loader.js | 70 +- .../common/internal/logging/log_message.js | 8 +- .../webgpu/common/internal/logging/logger.js | 15 +- .../webgpu/common/internal/logging/result.js | 5 +- .../internal/logging/test_case_recorder.js | 80 +- .../webgpu/common/internal/params_utils.js | 73 +- .../webgpu/common/internal/query/compare.js | 32 +- .../internal/query/encode_selectively.js | 9 +- .../common/internal/query/json_param_value.js | 36 +- .../common/internal/query/parseQuery.js | 24 +- .../webgpu/common/internal/query/query.js | 89 +- .../common/internal/query/separators.js | 6 +- .../common/internal/query/stringify_params.js | 22 +- .../common/internal/query/validQueryPart.js | 4 +- .../tests/webgpu/common/internal/stack.js | 10 +- .../webgpu/common/internal/test_group.js | 314 +- .../common/internal/test_suite_listing.js | 7 +- .../tests/webgpu/common/internal/tree.js | 193 +- .../tests/webgpu/common/internal/util.js | 9 +- .../tests/webgpu/common/internal/version.js | 2 +- .../common/internal/websocket_logger.js | 12 +- .../webgpu/common/runtime/helper/options.js | 69 +- .../runtime/helper/test_worker-worker.js | 18 +- .../common/runtime/helper/test_worker.js | 21 +- .../webgpu/tests/webgpu/common/runtime/wpt.js | 40 +- .../webgpu/common/util/collect_garbage.js | 15 +- .../webgpu/tests/webgpu/common/util/colors.js | 72 +- .../webgpu/tests/webgpu/common/util/crc32.js | 57 + .../tests/webgpu/common/util/data_tables.js | 42 +- .../tests/webgpu/common/util/navigator_gpu.js | 15 +- .../tests/webgpu/common/util/parse_imports.js | 36 + .../tests/webgpu/common/util/preprocessor.js | 51 +- .../tests/webgpu/common/util/timeout.js | 6 +- .../webgpu/tests/webgpu/common/util/types.js | 90 +- .../webgpu/tests/webgpu/common/util/util.js | 189 +- .../webgpu/common/util/wpt_reftest_wait.js | 6 +- tests/wpt/webgpu/tests/webgpu/cts.https.html | 83 +- .../external/petamoriken/float16/float16.d.js | 471 +- .../external/petamoriken/float16/float16.js | 414 +- .../tests/webgpu/resources/cache/hashes.json | 106 + .../cache/webgpu/shader/execution/abs.bin | Bin 0 -> 14696 bytes .../cache/webgpu/shader/execution/acos.bin | Bin 0 -> 22200 bytes .../cache/webgpu/shader/execution/acosh.bin | Bin 0 -> 24464 bytes .../cache/webgpu/shader/execution/asin.bin | Bin 0 -> 22200 bytes .../cache/webgpu/shader/execution/asinh.bin | Bin 0 -> 7144 bytes .../cache/webgpu/shader/execution/atan.bin | Bin 0 -> 16648 bytes .../cache/webgpu/shader/execution/atan2.bin | Bin 0 -> 49512 bytes .../cache/webgpu/shader/execution/atanh.bin | Bin 0 -> 16624 bytes .../shader/execution/binary/af_addition.bin | Bin 0 -> 237960 bytes .../shader/execution/binary/af_division.bin | Bin 0 -> 78840 bytes .../shader/execution/binary/af_logical.bin | Bin 0 -> 24744 bytes .../execution/binary/af_matrix_addition.bin | Bin 0 -> 914552 bytes .../binary/af_matrix_subtraction.bin | Bin 0 -> 921752 bytes .../execution/binary/af_multiplication.bin | Bin 0 -> 207864 bytes .../shader/execution/binary/af_remainder.bin | Bin 0 -> 78840 bytes .../execution/binary/af_subtraction.bin | Bin 0 -> 237960 bytes .../shader/execution/binary/f16_addition.bin | Bin 0 -> 169680 bytes .../shader/execution/binary/f16_division.bin | Bin 0 -> 120856 bytes .../shader/execution/binary/f16_logical.bin | Bin 0 -> 31272 bytes .../execution/binary/f16_matrix_addition.bin | Bin 0 -> 557464 bytes .../f16_matrix_matrix_multiplication.bin | Bin 0 -> 1521472 bytes .../f16_matrix_scalar_multiplication.bin | Bin 0 -> 906440 bytes .../binary/f16_matrix_subtraction.bin | Bin 0 -> 534232 bytes .../f16_matrix_vector_multiplication.bin | Bin 0 -> 601680 bytes .../execution/binary/f16_multiplication.bin | Bin 0 -> 171072 bytes .../shader/execution/binary/f16_remainder.bin | Bin 0 -> 118944 bytes .../execution/binary/f16_subtraction.bin | Bin 0 -> 169680 bytes .../shader/execution/binary/f32_addition.bin | Bin 0 -> 279984 bytes .../shader/execution/binary/f32_division.bin | Bin 0 -> 174960 bytes .../shader/execution/binary/f32_logical.bin | Bin 0 -> 37416 bytes .../execution/binary/f32_matrix_addition.bin | Bin 0 -> 991896 bytes .../f32_matrix_matrix_multiplication.bin | Bin 0 -> 2605376 bytes .../f32_matrix_scalar_multiplication.bin | Bin 0 -> 1534768 bytes .../binary/f32_matrix_subtraction.bin | Bin 0 -> 995984 bytes .../f32_matrix_vector_multiplication.bin | Bin 0 -> 950336 bytes .../execution/binary/f32_multiplication.bin | Bin 0 -> 257976 bytes .../shader/execution/binary/f32_remainder.bin | Bin 0 -> 171384 bytes .../execution/binary/f32_subtraction.bin | Bin 0 -> 279968 bytes .../execution/binary/i32_arithmetic.bin | Bin 0 -> 1427640 bytes .../execution/binary/i32_comparison.bin | Bin 0 -> 7568 bytes .../execution/binary/u32_arithmetic.bin | Bin 0 -> 225816 bytes .../execution/binary/u32_comparison.bin | Bin 0 -> 2192 bytes .../cache/webgpu/shader/execution/bitcast.bin | Bin 0 -> 2199656 bytes .../cache/webgpu/shader/execution/ceil.bin | Bin 0 -> 8552 bytes .../cache/webgpu/shader/execution/clamp.bin | Bin 0 -> 1008504 bytes .../cache/webgpu/shader/execution/cos.bin | Bin 0 -> 13272 bytes .../cache/webgpu/shader/execution/cosh.bin | Bin 0 -> 11944 bytes .../cache/webgpu/shader/execution/cross.bin | Bin 0 -> 3690080 bytes .../cache/webgpu/shader/execution/degrees.bin | Bin 0 -> 21640 bytes .../webgpu/shader/execution/determinant.bin | Bin 0 -> 6872 bytes .../webgpu/shader/execution/distance.bin | Bin 0 -> 1619104 bytes .../cache/webgpu/shader/execution/dot.bin | Bin 0 -> 832472 bytes .../cache/webgpu/shader/execution/exp.bin | Bin 0 -> 26480 bytes .../cache/webgpu/shader/execution/exp2.bin | Bin 0 -> 26480 bytes .../webgpu/shader/execution/faceForward.bin | Bin 0 -> 4207088 bytes .../cache/webgpu/shader/execution/floor.bin | Bin 0 -> 16016 bytes .../cache/webgpu/shader/execution/fma.bin | Bin 0 -> 1031288 bytes .../cache/webgpu/shader/execution/fract.bin | Bin 0 -> 8768 bytes .../cache/webgpu/shader/execution/frexp.bin | Bin 0 -> 37680 bytes .../webgpu/shader/execution/inverseSqrt.bin | Bin 0 -> 70440 bytes .../cache/webgpu/shader/execution/ldexp.bin | Bin 0 -> 23552 bytes .../cache/webgpu/shader/execution/length.bin | Bin 0 -> 48640 bytes .../cache/webgpu/shader/execution/log.bin | Bin 0 -> 106968 bytes .../cache/webgpu/shader/execution/log2.bin | Bin 0 -> 106968 bytes .../cache/webgpu/shader/execution/max.bin | Bin 0 -> 2202888 bytes .../cache/webgpu/shader/execution/min.bin | Bin 0 -> 2202888 bytes .../cache/webgpu/shader/execution/mix.bin | Bin 0 -> 8805016 bytes .../cache/webgpu/shader/execution/modf.bin | Bin 0 -> 145936 bytes .../webgpu/shader/execution/normalize.bin | Bin 0 -> 70128 bytes .../webgpu/shader/execution/pack2x16float.bin | Bin 0 -> 1791400 bytes .../cache/webgpu/shader/execution/pow.bin | Bin 0 -> 1282944 bytes .../webgpu/shader/execution/quantizeToF16.bin | Bin 0 -> 8904 bytes .../cache/webgpu/shader/execution/radians.bin | Bin 0 -> 14696 bytes .../cache/webgpu/shader/execution/reflect.bin | Bin 0 -> 205288 bytes .../cache/webgpu/shader/execution/refract.bin | Bin 0 -> 2825192 bytes .../cache/webgpu/shader/execution/round.bin | Bin 0 -> 14816 bytes .../webgpu/shader/execution/saturate.bin | Bin 0 -> 17096 bytes .../cache/webgpu/shader/execution/sign.bin | Bin 0 -> 17136 bytes .../cache/webgpu/shader/execution/sin.bin | Bin 0 -> 13272 bytes .../cache/webgpu/shader/execution/sinh.bin | Bin 0 -> 11944 bytes .../webgpu/shader/execution/smoothstep.bin | Bin 0 -> 502320 bytes .../cache/webgpu/shader/execution/sqrt.bin | Bin 0 -> 9704 bytes .../cache/webgpu/shader/execution/step.bin | Bin 0 -> 905320 bytes .../cache/webgpu/shader/execution/tan.bin | Bin 0 -> 13272 bytes .../cache/webgpu/shader/execution/tanh.bin | Bin 0 -> 6944 bytes .../webgpu/shader/execution/transpose.bin | Bin 0 -> 129192 bytes .../cache/webgpu/shader/execution/trunc.bin | Bin 0 -> 14696 bytes .../shader/execution/unary/af_arithmetic.bin | Bin 0 -> 30376 bytes .../shader/execution/unary/af_assignment.bin | Bin 0 -> 10296 bytes .../execution/unary/bool_conversion.bin | Bin 0 -> 6480 bytes .../shader/execution/unary/f16_arithmetic.bin | Bin 0 -> 15208 bytes .../shader/execution/unary/f16_conversion.bin | Bin 0 -> 74312 bytes .../shader/execution/unary/f32_arithmetic.bin | Bin 0 -> 19544 bytes .../shader/execution/unary/f32_conversion.bin | Bin 0 -> 105744 bytes .../shader/execution/unary/i32_arithmetic.bin | Bin 0 -> 1648 bytes .../shader/execution/unary/i32_complement.bin | Bin 0 -> 1648 bytes .../shader/execution/unary/i32_conversion.bin | Bin 0 -> 6448 bytes .../shader/execution/unary/u32_complement.bin | Bin 0 -> 848 bytes .../shader/execution/unary/u32_conversion.bin | Bin 0 -> 6448 bytes .../shader/execution/unpack2x16float.bin | Bin 0 -> 4832 bytes .../shader/execution/unpack2x16snorm.bin | Bin 0 -> 4968 bytes .../shader/execution/unpack2x16unorm.bin | Bin 0 -> 4968 bytes .../shader/execution/unpack4x8snorm.bin | Bin 0 -> 7416 bytes .../shader/execution/unpack4x8unorm.bin | Bin 0 -> 7416 bytes .../operation/adapter/requestAdapter.spec.js | 80 +- .../adapter/requestAdapterInfo.spec.js | 61 +- .../operation/adapter/requestDevice.spec.js | 641 +- .../webgpu/api/operation/buffers/map.spec.js | 842 +- .../operation/buffers/map_ArrayBuffer.spec.js | 141 +- .../api/operation/buffers/map_detach.spec.js | 127 +- .../api/operation/buffers/map_oom.spec.js | 73 +- .../api/operation/buffers/mapping_test.js | 14 +- .../api/operation/buffers/threading.spec.js | 23 +- .../operation/command_buffer/basic.spec.js | 32 +- .../command_buffer/clearBuffer.spec.js | 73 +- .../command_buffer/copyBufferToBuffer.spec.js | 164 +- .../copyTextureToTexture.spec.js | 2154 +- .../command_buffer/image_copy.spec.js | 1953 +- .../programmable/programmable_state_test.js | 115 +- .../programmable/state_tracking.spec.js | 493 +- .../queries/occlusionQuery.spec.js | 1184 +- .../render/dynamic_state.spec.js | 9 +- .../render/state_tracking.spec.js | 963 +- .../api/operation/compute/basic.spec.js | 166 +- .../compute_pipeline/entry_point_name.spec.js | 9 +- .../compute_pipeline/overrides.spec.js | 702 +- .../webgpu/api/operation/device/lost.spec.js | 111 +- .../webgpu/api/operation/labels.spec.js | 128 +- .../memory_sync/buffer/buffer_sync_test.js | 361 +- .../buffer/multiple_buffers.spec.js | 516 +- .../memory_sync/buffer/single_buffer.spec.js | 384 +- .../memory_sync/operation_context_helper.js | 159 +- .../texture/same_subresource.spec.js | 1020 +- .../memory_sync/texture/texture_sync_test.js | 72 +- .../api/operation/onSubmittedWorkDone.spec.js | 89 +- .../operation/pipeline/default_layout.spec.js | 33 +- .../api/operation/queue/writeBuffer.spec.js | 312 +- .../webgpu/api/operation/reflection.spec.js | 402 +- .../operation/render_pass/clear_value.spec.js | 305 +- .../api/operation/render_pass/resolve.spec.js | 245 +- .../api/operation/render_pass/storeOp.spec.js | 563 +- .../operation/render_pass/storeop2.spec.js | 121 +- .../render_pipeline/culling_tests.spec.js | 436 +- .../render_pipeline/overrides.spec.js | 679 +- .../pipeline_output_targets.spec.js | 804 +- .../primitive_topology.spec.js | 352 +- .../render_pipeline/sample_mask.spec.js | 727 +- .../vertex_only_render_pipeline.spec.js | 17 +- .../api/operation/rendering/basic.spec.js | 420 +- .../rendering/color_target_state.spec.js | 1240 +- .../api/operation/rendering/depth.spec.js | 700 +- .../operation/rendering/depth_bias.spec.js | 316 +- .../rendering/depth_clip_clamp.spec.js | 656 +- .../api/operation/rendering/draw.spec.js | 829 +- .../operation/rendering/indirect_draw.spec.js | 253 +- .../rendering/robust_access_index.spec.js | 9 +- .../api/operation/rendering/stencil.spec.js | 647 +- .../operation/resource_init/buffer.spec.js | 1293 +- .../resource_init/check_texture/by_copy.js | 32 +- .../resource_init/check_texture/by_ds_test.js | 112 +- .../check_texture/by_sampling.js | 110 +- .../resource_init/texture_zero.spec.js | 505 +- .../api/operation/sampling/anisotropy.spec.js | 348 +- .../operation/sampling/filter_mode.spec.js | 1000 +- .../api/operation/sampling/lod_clamp.spec.js | 9 +- .../shader_module/compilation_info.spec.js | 337 +- .../format_reinterpretation.spec.js | 513 +- .../api/operation/texture_view/read.spec.js | 37 +- .../api/operation/texture_view/write.spec.js | 37 +- .../api/operation/uncapturederror.spec.js | 47 +- .../vertex_state/correctness.spec.js | 1467 +- .../vertex_state/index_format.spec.js | 685 +- .../api/validation/buffer/create.spec.js | 175 +- .../api/validation/buffer/destroy.spec.js | 161 +- .../api/validation/buffer/mapping.spec.js | 1921 +- .../api/validation/buffer/threading.spec.js | 9 +- .../features/query_types.spec.js | 143 +- .../features/texture_formats.spec.js | 689 +- .../capability_checks/limits/limit_utils.js | 585 +- .../limits/maxBindGroups.spec.js | 155 +- .../limits/maxBindingsPerBindGroup.spec.js | 134 +- .../limits/maxBufferSize.spec.js | 51 +- .../maxColorAttachmentBytesPerSample.spec.js | 305 +- .../limits/maxColorAttachments.spec.js | 175 +- .../maxComputeInvocationsPerWorkgroup.spec.js | 102 +- .../limits/maxComputeWorkgroupSizeX.spec.js | 27 +- .../limits/maxComputeWorkgroupSizeY.spec.js | 27 +- .../limits/maxComputeWorkgroupSizeZ.spec.js | 27 +- .../maxComputeWorkgroupStorageSize.spec.js | 110 +- .../maxComputeWorkgroupsPerDimension.spec.js | 127 +- ...micStorageBuffersPerPipelineLayout.spec.js | 65 +- ...micUniformBuffersPerPipelineLayout.spec.js | 71 +- .../maxInterStageShaderComponents.spec.js | 147 +- .../maxInterStageShaderVariables.spec.js | 39 +- .../maxSampledTexturesPerShaderStage.spec.js | 199 +- .../limits/maxSamplersPerShaderStage.spec.js | 201 +- .../maxStorageBufferBindingSize.spec.js | 179 +- .../maxStorageBuffersPerShaderStage.spec.js | 250 +- .../maxStorageTexturesPerShaderStage.spec.js | 224 +- .../limits/maxTextureArrayLayers.spec.js | 49 +- .../limits/maxTextureDimension1D.spec.js | 61 +- .../limits/maxTextureDimension2D.spec.js | 211 +- .../limits/maxTextureDimension3D.spec.js | 67 +- .../maxUniformBufferBindingSize.spec.js | 135 +- .../maxUniformBuffersPerShaderStage.spec.js | 199 +- .../limits/maxVertexAttributes.spec.js | 47 +- .../limits/maxVertexBufferArrayStride.spec.js | 101 +- .../limits/maxVertexBuffers.spec.js | 124 +- .../minStorageBufferOffsetAlignment.spec.js | 266 +- .../minUniformBufferOffsetAlignment.spec.js | 267 +- .../api/validation/compute_pipeline.spec.js | 1005 +- .../api/validation/createBindGroup.spec.js | 1911 +- .../validation/createBindGroupLayout.spec.js | 671 +- .../validation/createPipelineLayout.spec.js | 235 +- .../api/validation/createSampler.spec.js | 106 +- .../api/validation/createTexture.spec.js | 2261 +- .../webgpu/api/validation/createView.spec.js | 512 +- .../webgpu/api/validation/debugMarker.spec.js | 123 +- .../encoding/beginComputePass.spec.js | 211 +- .../encoding/beginRenderPass.spec.js | 330 +- .../encoding/cmds/clearBuffer.spec.js | 374 +- .../encoding/cmds/compute_pass.spec.js | 345 +- .../encoding/cmds/copyBufferToBuffer.spec.js | 490 +- .../cmds/copyTextureToTexture.spec.js | 1435 +- .../validation/encoding/cmds/debug.spec.js | 93 +- .../encoding/cmds/index_access.spec.js | 153 +- .../encoding/cmds/render/draw.spec.js | 1342 +- .../cmds/render/dynamic_state.spec.js | 409 +- .../cmds/render/indirect_draw.spec.js | 291 +- .../validation/encoding/cmds/render/render.js | 43 +- .../cmds/render/setIndexBuffer.spec.js | 187 +- .../encoding/cmds/render/setPipeline.spec.js | 97 +- .../cmds/render/setVertexBuffer.spec.js | 215 +- .../cmds/render/state_tracking.spec.js | 79 +- .../encoding/cmds/render_pass.spec.js | 9 +- .../encoding/cmds/setBindGroup.spec.js | 667 +- .../createRenderBundleEncoder.spec.js | 365 +- .../encoding/encoder_open_state.spec.js | 911 +- .../validation/encoding/encoder_state.spec.js | 359 +- .../pipeline_bind_group_compat.spec.js | 1036 +- .../encoding/queries/begin_end.spec.js | 214 +- .../api/validation/encoding/queries/common.js | 47 +- .../encoding/queries/general.spec.js | 256 +- .../queries/pipeline_statistics.spec.js | 15 - .../encoding/queries/resolveQuerySet.spec.js | 278 +- .../validation/encoding/render_bundle.spec.js | 401 +- .../webgpu/api/validation/error_scope.spec.js | 313 +- .../api/validation/getBindGroupLayout.spec.js | 283 +- .../gpu_external_texture_expiration.spec.js | 436 +- .../image_copy/buffer_related.spec.js | 375 +- .../image_copy/buffer_texture_copies.spec.js | 721 +- .../api/validation/image_copy/image_copy.js | 283 +- .../image_copy/layout_related.spec.js | 791 +- .../image_copy/texture_related.spec.js | 831 +- .../validation/layout_shader_compat.spec.js | 9 +- .../api/validation/query_set/create.spec.js | 45 +- .../api/validation/query_set/destroy.spec.js | 39 +- .../validation/queue/buffer_mapped.spec.js | 310 +- .../CopyExternalImageToTexture.spec.js | 1027 +- .../validation/queue/destroyed/buffer.spec.js | 473 +- .../queue/destroyed/query_set.spec.js | 130 +- .../queue/destroyed/texture.spec.js | 491 +- .../api/validation/queue/submit.spec.js | 61 +- .../api/validation/queue/writeBuffer.spec.js | 299 +- .../api/validation/queue/writeTexture.spec.js | 167 +- .../attachment_compatibility.spec.js | 1077 +- .../render_pass_descriptor.spec.js | 1682 +- .../validation/render_pass/resolve.spec.js | 321 +- .../api/validation/render_pipeline/common.js | 70 +- .../depth_stencil_state.spec.js | 492 +- .../render_pipeline/fragment_state.spec.js | 685 +- .../render_pipeline/inter_stage.spec.js | 543 +- .../validation/render_pipeline/misc.spec.js | 162 +- .../render_pipeline/multisample_state.spec.js | 121 +- .../render_pipeline/overrides.spec.js | 765 +- .../render_pipeline/primitive_state.spec.js | 59 +- .../render_pipeline/shader_module.spec.js | 175 +- .../render_pipeline/vertex_state.spec.js | 1175 +- .../buffer/in_pass_encoder.spec.js | 1203 +- .../buffer/in_pass_misc.spec.js | 515 +- .../texture/in_pass_encoder.spec.js | 2374 +- .../texture/in_render_common.spec.js | 1003 +- .../texture/in_render_misc.spec.js | 788 +- .../shader_module/entry_point.spec.js | 361 +- .../shader_module/overrides.spec.js | 91 +- .../state/device_lost/destroy.spec.js | 1816 +- .../texture/bgra8unorm_storage.spec.js | 285 +- .../api/validation/texture/destroy.spec.js | 228 +- .../texture/float32_filterable.spec.js | 90 +- .../texture/rg11b10ufloat_renderable.spec.js | 237 +- .../webgpu/api/validation/validation_test.js | 189 +- .../tests/webgpu/webgpu/capability_info.js | 728 +- .../api/validation/createBindGroup.spec.js | 178 + .../encoding/cmds/copyTextureToBuffer.spec.js | 67 +- .../cmds/copyTextureToTexture.spec.js | 48 + .../pipeline_bind_group_compat.spec.js | 342 +- .../render_pipeline/fragment_state.spec.js | 109 +- .../render_pipeline/shader_module.spec.js | 165 +- .../render_pipeline/vertex_state.spec.js | 125 +- .../validation/texture/createTexture.spec.js | 171 +- .../api/validation/texture/cubeArray.spec.js | 41 +- .../webgpu/compat/compatibility_test.js | 7 +- .../webgpu/tests/webgpu/webgpu/constants.js | 21 +- .../tests/webgpu/webgpu/examples.spec.js | 243 +- .../webgpu/tests/webgpu/webgpu/format_info.js | 1988 +- .../webgpu/tests/webgpu/webgpu/gpu_test.js | 945 +- .../webgpu/webgpu/idl/constants/flags.spec.js | 71 +- .../webgpu/webgpu/idl/constructable.spec.js | 54 + .../tests/webgpu/webgpu/idl/exposed.html.js | 84 +- .../tests/webgpu/webgpu/idl/idl_test.js | 12 +- .../wpt/webgpu/tests/webgpu/webgpu/listing.js | 149 +- .../tests/webgpu/webgpu/multisample_info.js | 75 + .../expression/binary/af_addition.cache.js | 54 + .../expression/binary/af_addition.spec.js | 204 +- .../expression/binary/af_comparison.cache.js | 90 + .../expression/binary/af_comparison.spec.js | 262 +- .../expression/binary/af_division.cache.js | 54 + .../expression/binary/af_division.spec.js | 101 + .../binary/af_matrix_addition.cache.js | 21 + .../binary/af_matrix_addition.spec.js | 77 +- .../binary/af_matrix_subtraction.cache.js | 21 + .../binary/af_matrix_subtraction.spec.js | 77 +- .../binary/af_multiplication.cache.js | 54 + .../binary/af_multiplication.spec.js | 204 +- .../expression/binary/af_remainder.cache.js | 54 + .../expression/binary/af_remainder.spec.js | 101 + .../expression/binary/af_subtraction.cache.js | 54 + .../expression/binary/af_subtraction.spec.js | 204 +- .../execution/expression/binary/binary.js | 17 +- .../expression/binary/bitwise.spec.js | 418 +- .../expression/binary/bitwise_shift.spec.js | 288 +- .../expression/binary/bool_logical.spec.js | 259 +- .../expression/binary/f16_addition.cache.js | 60 + .../expression/binary/f16_addition.spec.js | 303 +- .../expression/binary/f16_comparison.cache.js | 144 + .../expression/binary/f16_comparison.spec.js | 346 +- .../expression/binary/f16_division.cache.js | 60 + .../expression/binary/f16_division.spec.js | 303 +- .../binary/f16_matrix_addition.cache.js | 23 + .../binary/f16_matrix_addition.spec.js | 143 +- .../f16_matrix_matrix_multiplication.cache.js | 25 + .../f16_matrix_matrix_multiplication.spec.js | 169 +- .../f16_matrix_scalar_multiplication.cache.js | 44 + .../f16_matrix_scalar_multiplication.spec.js | 232 +- .../binary/f16_matrix_subtraction.cache.js | 23 + .../binary/f16_matrix_subtraction.spec.js | 143 +- .../f16_matrix_vector_multiplication.cache.js | 44 + .../f16_matrix_vector_multiplication.spec.js | 225 +- .../binary/f16_multiplication.cache.js | 60 + .../binary/f16_multiplication.spec.js | 303 +- .../expression/binary/f16_remainder.cache.js | 60 + .../expression/binary/f16_remainder.spec.js | 304 +- .../binary/f16_subtraction.cache.js | 60 + .../expression/binary/f16_subtraction.spec.js | 303 +- .../expression/binary/f32_addition.cache.js | 60 + .../expression/binary/f32_addition.spec.js | 267 +- .../expression/binary/f32_comparison.cache.js | 144 + .../expression/binary/f32_comparison.spec.js | 310 +- .../expression/binary/f32_division.cache.js | 60 + .../expression/binary/f32_division.spec.js | 267 +- .../binary/f32_matrix_addition.cache.js | 23 + .../binary/f32_matrix_addition.spec.js | 131 +- .../f32_matrix_matrix_multiplication.cache.js | 25 + .../f32_matrix_matrix_multiplication.spec.js | 157 +- .../f32_matrix_scalar_multiplication.cache.js | 44 + .../f32_matrix_scalar_multiplication.spec.js | 214 +- .../binary/f32_matrix_subtraction.cache.js | 23 + .../binary/f32_matrix_subtraction.spec.js | 131 +- .../f32_matrix_vector_multiplication.cache.js | 44 + .../f32_matrix_vector_multiplication.spec.js | 207 +- .../binary/f32_multiplication.cache.js | 60 + .../binary/f32_multiplication.spec.js | 267 +- .../expression/binary/f32_remainder.cache.js | 64 + .../expression/binary/f32_remainder.spec.js | 267 +- .../binary/f32_subtraction.cache.js | 60 + .../expression/binary/f32_subtraction.spec.js | 267 +- .../expression/binary/i32_arithmetic.cache.js | 306 + .../expression/binary/i32_arithmetic.spec.js | 961 +- .../expression/binary/i32_comparison.cache.js | 21 + .../expression/binary/i32_comparison.spec.js | 161 +- .../expression/binary/u32_arithmetic.cache.js | 293 + .../expression/binary/u32_arithmetic.spec.js | 948 +- .../expression/binary/u32_comparison.cache.js | 21 + .../expression/binary/u32_comparison.spec.js | 161 +- .../expression/call/builtin/abs.cache.js | 17 + .../expression/call/builtin/abs.spec.js | 293 +- .../expression/call/builtin/acos.cache.js | 20 + .../expression/call/builtin/acos.spec.js | 88 +- .../expression/call/builtin/acosh.cache.js | 20 + .../expression/call/builtin/acosh.spec.js | 90 +- .../expression/call/builtin/all.spec.js | 139 +- .../expression/call/builtin/any.spec.js | 139 +- .../call/builtin/arrayLength.spec.js | 289 +- .../expression/call/builtin/asin.cache.js | 20 + .../expression/call/builtin/asin.spec.js | 90 +- .../expression/call/builtin/asinh.cache.js | 17 + .../expression/call/builtin/asinh.spec.js | 76 +- .../expression/call/builtin/atan.cache.js | 21 + .../expression/call/builtin/atan.spec.js | 91 +- .../expression/call/builtin/atan2.cache.js | 27 + .../expression/call/builtin/atan2.spec.js | 105 +- .../expression/call/builtin/atanh.cache.js | 28 + .../expression/call/builtin/atanh.spec.js | 97 +- .../call/builtin/atomics/atomicAdd.spec.js | 132 +- .../call/builtin/atomics/atomicAnd.spec.js | 172 +- .../atomics/atomicCompareExchangeWeak.spec.js | 934 +- .../builtin/atomics/atomicExchange.spec.js | 667 +- .../call/builtin/atomics/atomicLoad.spec.js | 258 +- .../call/builtin/atomics/atomicMax.spec.js | 131 +- .../call/builtin/atomics/atomicMin.spec.js | 129 +- .../call/builtin/atomics/atomicOr.spec.js | 167 +- .../call/builtin/atomics/atomicStore.spec.js | 414 +- .../call/builtin/atomics/atomicSub.spec.js | 132 +- .../call/builtin/atomics/atomicXor.spec.js | 172 +- .../call/builtin/atomics/harness.js | 59 +- .../expression/call/builtin/bitcast.cache.js | 797 + .../expression/call/builtin/bitcast.spec.js | 1606 +- .../expression/call/builtin/builtin.js | 19 +- .../expression/call/builtin/ceil.cache.js | 25 + .../expression/call/builtin/ceil.spec.js | 114 +- .../expression/call/builtin/clamp.cache.js | 96 + .../expression/call/builtin/clamp.spec.js | 225 +- .../expression/call/builtin/cos.cache.js | 22 + .../expression/call/builtin/cos.spec.js | 98 +- .../expression/call/builtin/cosh.cache.js | 19 + .../expression/call/builtin/cosh.spec.js | 82 +- .../call/builtin/countLeadingZeros.spec.js | 443 +- .../call/builtin/countOneBits.spec.js | 443 +- .../call/builtin/countTrailingZeros.spec.js | 443 +- .../expression/call/builtin/cross.cache.js | 24 + .../expression/call/builtin/cross.spec.js | 148 +- .../expression/call/builtin/degrees.cache.js | 23 + .../expression/call/builtin/degrees.spec.js | 117 +- .../call/builtin/determinant.cache.js | 84 + .../call/builtin/determinant.spec.js | 167 +- .../expression/call/builtin/distance.cache.js | 41 + .../expression/call/builtin/distance.spec.js | 363 +- .../expression/call/builtin/dot.cache.js | 24 + .../expression/call/builtin/dot.spec.js | 303 +- .../expression/call/builtin/dpdx.spec.js | 19 +- .../call/builtin/dpdxCoarse.spec.js | 19 +- .../expression/call/builtin/dpdxFine.spec.js | 19 +- .../expression/call/builtin/dpdy.spec.js | 19 +- .../call/builtin/dpdyCoarse.spec.js | 19 +- .../expression/call/builtin/dpdyFine.spec.js | 19 +- .../expression/call/builtin/exp.cache.js | 40 + .../expression/call/builtin/exp.spec.js | 102 +- .../expression/call/builtin/exp2.cache.js | 40 + .../expression/call/builtin/exp2.spec.js | 102 +- .../call/builtin/extractBits.spec.js | 531 +- .../call/builtin/faceForward.cache.js | 98 + .../call/builtin/faceForward.spec.js | 351 +- .../call/builtin/firstLeadingBit.spec.js | 627 +- .../call/builtin/firstTrailingBit.spec.js | 443 +- .../expression/call/builtin/floor.cache.js | 26 + .../expression/call/builtin/floor.spec.js | 123 +- .../expression/call/builtin/fma.cache.js | 25 + .../expression/call/builtin/fma.spec.js | 137 +- .../expression/call/builtin/fract.cache.js | 45 + .../expression/call/builtin/fract.spec.js | 116 +- .../expression/call/builtin/frexp.cache.js | 95 + .../expression/call/builtin/frexp.spec.js | 516 +- .../expression/call/builtin/fwidth.spec.js | 19 +- .../call/builtin/fwidthCoarse.spec.js | 19 +- .../call/builtin/fwidthFine.spec.js | 19 +- .../call/builtin/insertBits.spec.js | 691 +- .../call/builtin/inversesqrt.cache.js | 31 + .../call/builtin/inversesqrt.spec.js | 95 +- .../expression/call/builtin/ldexp.cache.js | 61 + .../expression/call/builtin/ldexp.spec.js | 131 +- .../expression/call/builtin/length.cache.js | 37 + .../expression/call/builtin/length.spec.js | 259 +- .../expression/call/builtin/log.cache.js | 26 + .../expression/call/builtin/log.spec.js | 102 +- .../expression/call/builtin/log2.cache.js | 26 + .../expression/call/builtin/log2.spec.js | 102 +- .../expression/call/builtin/max.cache.js | 18 + .../expression/call/builtin/max.spec.js | 204 +- .../expression/call/builtin/min.cache.js | 18 + .../expression/call/builtin/min.spec.js | 200 +- .../expression/call/builtin/mix.cache.js | 51 + .../expression/call/builtin/mix.spec.js | 449 +- .../expression/call/builtin/modf.cache.js | 75 + .../expression/call/builtin/modf.spec.js | 755 +- .../call/builtin/normalize.cache.js | 21 + .../expression/call/builtin/normalize.spec.js | 202 +- .../call/builtin/pack2x16float.cache.js | 55 + .../call/builtin/pack2x16float.spec.js | 91 +- .../call/builtin/pack2x16snorm.spec.js | 55 +- .../call/builtin/pack2x16unorm.spec.js | 55 +- .../call/builtin/pack4x8snorm.spec.js | 62 +- .../call/builtin/pack4x8unorm.spec.js | 62 +- .../expression/call/builtin/pow.cache.js | 20 + .../expression/call/builtin/pow.spec.js | 102 +- .../call/builtin/quantizeToF16.cache.js | 41 + .../call/builtin/quantizeToF16.spec.js | 69 +- .../expression/call/builtin/radians.cache.js | 17 + .../expression/call/builtin/radians.spec.js | 111 +- .../expression/call/builtin/reflect.cache.js | 22 + .../expression/call/builtin/reflect.spec.js | 286 +- .../expression/call/builtin/refract.cache.js | 89 + .../expression/call/builtin/refract.spec.js | 343 +- .../call/builtin/reverseBits.spec.js | 1007 +- .../expression/call/builtin/round.cache.js | 24 + .../expression/call/builtin/round.spec.js | 99 +- .../expression/call/builtin/saturate.cache.js | 18 + .../expression/call/builtin/saturate.spec.js | 126 +- .../expression/call/builtin/select.spec.js | 321 +- .../expression/call/builtin/sign.cache.js | 26 + .../expression/call/builtin/sign.spec.js | 118 +- .../expression/call/builtin/sin.cache.js | 22 + .../expression/call/builtin/sin.spec.js | 98 +- .../expression/call/builtin/sinh.cache.js | 19 + .../expression/call/builtin/sinh.spec.js | 82 +- .../call/builtin/smoothstep.cache.js | 21 + .../call/builtin/smoothstep.spec.js | 106 +- .../expression/call/builtin/sqrt.cache.js | 19 + .../expression/call/builtin/sqrt.spec.js | 82 +- .../expression/call/builtin/step.cache.js | 41 + .../expression/call/builtin/step.spec.js | 99 +- .../call/builtin/storageBarrier.spec.js | 33 +- .../expression/call/builtin/tan.cache.js | 22 + .../expression/call/builtin/tan.spec.js | 92 +- .../expression/call/builtin/tanh.cache.js | 17 + .../expression/call/builtin/tanh.spec.js | 76 +- .../call/builtin/textureDimension.spec.js | 155 +- .../call/builtin/textureGather.spec.js | 235 +- .../call/builtin/textureGatherCompare.spec.js | 115 +- .../call/builtin/textureLoad.spec.js | 182 +- .../call/builtin/textureNumLayers.spec.js | 105 +- .../call/builtin/textureNumLevels.spec.js | 73 +- .../call/builtin/textureNumSamples.spec.js | 33 +- .../call/builtin/textureSample.spec.js | 279 +- .../call/builtin/textureSampleBias.spec.js | 165 +- .../call/builtin/textureSampleCompare.spec.js | 151 +- .../builtin/textureSampleCompareLevel.spec.js | 151 +- .../call/builtin/textureSampleGrad.spec.js | 113 +- .../call/builtin/textureSampleLevel.spec.js | 243 +- .../call/builtin/textureStore.spec.js | 117 +- .../call/builtin/transpose.cache.js | 27 + .../expression/call/builtin/transpose.spec.js | 218 +- .../expression/call/builtin/trunc.cache.js | 17 + .../expression/call/builtin/trunc.spec.js | 89 +- .../call/builtin/unpack2x16float.cache.js | 20 + .../call/builtin/unpack2x16float.spec.js | 48 +- .../call/builtin/unpack2x16snorm.cache.js | 20 + .../call/builtin/unpack2x16snorm.spec.js | 48 +- .../call/builtin/unpack2x16unorm.cache.js | 20 + .../call/builtin/unpack2x16unorm.spec.js | 48 +- .../call/builtin/unpack4x8snorm.cache.js | 20 + .../call/builtin/unpack4x8snorm.spec.js | 48 +- .../call/builtin/unpack4x8unorm.cache.js | 20 + .../call/builtin/unpack4x8unorm.spec.js | 48 +- .../expression/call/builtin/utils.js | 9 +- .../call/builtin/workgroupBarrier.spec.js | 33 +- .../shader/execution/expression/case.js | 247 + .../shader/execution/expression/case_cache.js | 179 +- .../execution/expression/expectation.js | 31 + .../shader/execution/expression/expression.js | 655 +- .../execution/expression/interval_filter.js | 9 + .../expression/unary/af_arithmetic.cache.js | 13 + .../expression/unary/af_arithmetic.spec.js | 47 +- .../expression/unary/af_assignment.cache.js | 51 + .../expression/unary/af_assignment.spec.js | 137 +- .../expression/unary/bool_conversion.cache.js | 54 + .../expression/unary/bool_conversion.spec.js | 190 +- .../expression/unary/bool_logical.spec.js | 35 +- .../expression/unary/f16_arithmetic.cache.js | 13 + .../expression/unary/f16_arithmetic.spec.js | 49 +- .../expression/unary/f16_conversion.cache.js | 109 + .../expression/unary/f16_conversion.spec.js | 378 +- .../expression/unary/f32_arithmetic.cache.js | 13 + .../expression/unary/f32_arithmetic.spec.js | 43 +- .../expression/unary/f32_conversion.cache.js | 79 + .../expression/unary/f32_conversion.spec.js | 319 +- .../expression/unary/i32_arithmetic.cache.js | 11 + .../expression/unary/i32_arithmetic.spec.js | 42 +- .../expression/unary/i32_complement.cache.js | 11 + .../expression/unary/i32_complement.spec.js | 42 +- .../expression/unary/i32_conversion.cache.js | 81 + .../expression/unary/i32_conversion.spec.js | 217 +- .../expression/unary/u32_complement.cache.js | 11 + .../expression/unary/u32_complement.spec.js | 42 +- .../expression/unary/u32_conversion.cache.js | 77 + .../expression/unary/u32_conversion.spec.js | 229 +- .../execution/expression/unary/unary.js | 12 +- .../shader/execution/float_parse.spec.js | 124 +- .../execution/flow_control/call.spec.js | 67 +- .../execution/flow_control/complex.spec.js | 27 +- .../execution/flow_control/eval_order.spec.js | 695 +- .../shader/execution/flow_control/for.spec.js | 227 +- .../shader/execution/flow_control/harness.js | 281 +- .../shader/execution/flow_control/if.spec.js | 87 +- .../execution/flow_control/loop.spec.js | 87 +- .../execution/flow_control/phony.spec.js | 119 +- .../execution/flow_control/return.spec.js | 61 +- .../execution/flow_control/switch.spec.js | 105 +- .../execution/flow_control/while.spec.js | 107 +- .../execution/memory_model/adjacent.spec.js | 272 + .../execution/memory_model/atomicity.spec.js | 77 +- .../execution/memory_model/barrier.spec.js | 318 +- .../execution/memory_model/coherence.spec.js | 487 +- .../memory_model/memory_model_setup.js | 684 +- .../execution/memory_model/weak.spec.js | 356 +- .../webgpu/shader/execution/padding.spec.js | 485 +- .../shader/execution/robust_access.spec.js | 606 +- .../execution/robust_access_vertex.spec.js | 331 +- .../shader_io/compute_builtins.spec.js | 407 +- .../shader_io/fragment_builtins.spec.js | 781 + .../shader_io/shared_structs.spec.js | 443 +- .../webgpu/shader/execution/shadow.spec.js | 264 +- .../statement/increment_decrement.spec.js | 322 +- .../webgpu/shader/execution/zero_init.spec.js | 783 +- .../tests/webgpu/webgpu/shader/types.js | 205 +- .../const_assert/const_assert.spec.js | 292 +- .../shader/validation/decl/const.spec.js | 71 +- .../shader/validation/decl/override.spec.js | 35 +- .../validation/decl/ptr_spelling.spec.js | 189 +- .../webgpu/shader/validation/decl/util.js | 57 +- .../validation/decl/var_access_mode.spec.js | 178 +- .../expression/access/vector.spec.js | 145 +- .../expression/binary/bitwise_shift.spec.js | 223 +- .../expression/call/builtin/abs.spec.js | 67 +- .../expression/call/builtin/acos.spec.js | 97 +- .../expression/call/builtin/acosh.spec.js | 99 +- .../expression/call/builtin/asin.spec.js | 97 +- .../expression/call/builtin/asinh.spec.js | 103 +- .../expression/call/builtin/atan.spec.js | 101 +- .../expression/call/builtin/atan2.spec.js | 144 +- .../expression/call/builtin/atanh.spec.js | 97 +- .../expression/call/builtin/atomics.spec.js | 63 +- .../expression/call/builtin/bitcast.spec.js | 513 +- .../expression/call/builtin/ceil.spec.js | 95 +- .../expression/call/builtin/clamp.spec.js | 73 +- .../call/builtin/const_override_validation.js | 226 +- .../expression/call/builtin/cos.spec.js | 95 +- .../expression/call/builtin/cosh.spec.js | 99 +- .../expression/call/builtin/degrees.spec.js | 99 +- .../call/builtin/dot4I8Packed.spec.js | 59 + .../call/builtin/dot4U8Packed.spec.js | 59 + .../expression/call/builtin/exp.spec.js | 147 +- .../expression/call/builtin/exp2.spec.js | 147 +- .../call/builtin/inverseSqrt.spec.js | 101 +- .../expression/call/builtin/length.spec.js | 308 +- .../expression/call/builtin/log.spec.js | 97 +- .../expression/call/builtin/log2.spec.js | 97 +- .../expression/call/builtin/modf.spec.js | 97 +- .../expression/call/builtin/pack4xI8.spec.js | 58 + .../call/builtin/pack4xI8Clamp.spec.js | 58 + .../expression/call/builtin/pack4xU8.spec.js | 58 + .../call/builtin/pack4xU8Clamp.spec.js | 58 + .../expression/call/builtin/radians.spec.js | 97 +- .../expression/call/builtin/round.spec.js | 109 +- .../expression/call/builtin/saturate.spec.js | 97 +- .../expression/call/builtin/sign.spec.js | 103 +- .../expression/call/builtin/sin.spec.js | 95 +- .../expression/call/builtin/sinh.spec.js | 99 +- .../expression/call/builtin/sqrt.spec.js | 101 +- .../expression/call/builtin/tan.spec.js | 103 +- .../call/builtin/unpack4xI8.spec.js | 56 + .../call/builtin/unpack4xU8.spec.js | 56 + .../functions/alias_analysis.spec.js | 180 +- .../validation/functions/restrictions.spec.js | 410 +- .../shader/validation/parse/align.spec.js | 343 +- .../shader/validation/parse/attribute.spec.js | 53 +- .../validation/parse/binary_ops.spec.js | 53 +- .../validation/parse/blankspace.spec.js | 107 +- .../shader/validation/parse/break.spec.js | 51 +- .../shader/validation/parse/builtin.spec.js | 123 +- .../shader/validation/parse/comments.spec.js | 87 +- .../shader/validation/parse/const.spec.js | 47 +- .../validation/parse/const_assert.spec.js | 25 +- .../validation/parse/diagnostic.spec.js | 314 +- .../shader/validation/parse/discard.spec.js | 45 +- .../shader/validation/parse/enable.spec.js | 47 +- .../validation/parse/identifiers.spec.js | 766 +- .../shader/validation/parse/literal.spec.js | 458 +- .../shader/validation/parse/must_use.spec.js | 111 +- .../validation/parse/pipeline_stage.spec.js | 163 +- .../shader/validation/parse/semicolon.spec.js | 453 +- .../shader/validation/parse/source.spec.js | 37 +- .../shader/validation/parse/unary_ops.spec.js | 33 +- .../validation/parse/var_and_let.spec.js | 163 +- .../validation/shader_io/binding.spec.js | 91 +- .../validation/shader_io/builtins.spec.js | 422 +- .../validation/shader_io/entry_point.spec.js | 103 +- .../shader/validation/shader_io/group.spec.js | 91 +- .../shader_io/group_and_binding.spec.js | 217 +- .../shader/validation/shader_io/id.spec.js | 127 +- .../validation/shader_io/interpolate.spec.js | 295 +- .../validation/shader_io/invariant.spec.js | 84 +- .../validation/shader_io/locations.spec.js | 491 +- .../shader/validation/shader_io/size.spec.js | 135 +- .../shader/validation/shader_io/util.js | 133 +- .../shader_io/workgroup_size.spec.js | 199 +- .../validation/shader_validation_test.js | 47 +- .../shader/validation/types/alias.spec.js | 155 +- .../shader/validation/types/struct.spec.js | 103 +- .../shader/validation/types/vector.spec.js | 39 +- .../validation/uniformity/uniformity.spec.js | 1073 +- .../tests/webgpu/webgpu/shader/values.js | 11 +- .../tests/webgpu/webgpu/util/binary_stream.js | 213 + .../webgpu/tests/webgpu/webgpu/util/buffer.js | 15 +- .../webgpu/webgpu/util/check_contents.js | 183 +- .../webgpu/util/color_space_conversion.js | 79 +- .../webgpu/util/command_buffer_maker.js | 38 +- .../tests/webgpu/webgpu/util/compare.js | 226 +- .../tests/webgpu/webgpu/util/constants.js | 191 +- .../tests/webgpu/webgpu/util/conversion.js | 968 +- .../webgpu/webgpu/util/copy_to_texture.js | 149 +- .../webgpu/webgpu/util/create_elements.js | 40 +- .../tests/webgpu/webgpu/util/device_pool.js | 97 +- .../webgpu/webgpu/util/floating_point.js | 2839 +- .../webgpu/tests/webgpu/webgpu/util/math.js | 1425 +- .../webgpu/tests/webgpu/webgpu/util/memory.js | 11 +- .../webgpu/webgpu/util/pretty_diff_tables.js | 20 +- .../webgpu/tests/webgpu/webgpu/util/prng.js | 24 +- .../tests/webgpu/webgpu/util/reinterpret.js | 118 + .../webgpu/tests/webgpu/webgpu/util/shader.js | 62 +- .../tests/webgpu/webgpu/util/texture.js | 33 +- .../tests/webgpu/webgpu/util/texture/base.js | 172 +- .../webgpu/util/texture/data_generation.js | 13 +- .../webgpu/webgpu/util/texture/layout.js | 160 +- .../webgpu/webgpu/util/texture/subresource.js | 28 +- .../webgpu/webgpu/util/texture/texel_data.js | 539 +- .../webgpu/util/texture/texel_data.spec.js | 433 +- .../webgpu/webgpu/util/texture/texel_view.js | 114 +- .../webgpu/webgpu/util/texture/texture_ok.js | 253 +- .../webgpu/util/texture/texture_ok.spec.js | 273 +- .../webgpu/tests/webgpu/webgpu/util/unions.js | 21 +- .../web_platform/canvas/configure.spec.js | 719 +- .../canvas/context_creation.spec.js | 69 +- .../canvas/getCurrentTexture.spec.js | 577 +- .../canvas/getPreferredCanvasFormat.spec.js | 23 +- .../canvas/readbackFromWebGPUCanvas.spec.js | 475 +- .../copyToTexture/ImageBitmap.spec.js | 826 +- .../copyToTexture/ImageData.spec.js | 315 +- .../web_platform/copyToTexture/canvas.spec.js | 600 +- .../web_platform/copyToTexture/image.spec.js | 387 +- .../webgpu/web_platform/copyToTexture/util.js | 35 +- .../web_platform/copyToTexture/video.spec.js | 202 +- .../external_texture/video.spec.js | 651 +- .../reftests/canvas_clear.html.js | 23 +- .../reftests/canvas_colorspace.html.js | 123 +- .../canvas_colorspace_bgra8unorm.https.html | 1 + .../canvas_colorspace_rgba16float.https.html | 2 +- .../canvas_colorspace_rgba8unorm.https.html | 1 + .../reftests/canvas_complex.html.js | 300 +- .../reftests/canvas_composite_alpha.html.js | 68 +- ...a_bgra8unorm_premultiplied_copy.https.html | 2 +- ...a_bgra8unorm_premultiplied_draw.https.html | 2 +- ..._rgba16float_premultiplied_copy.https.html | 2 +- ..._rgba16float_premultiplied_draw.https.html | 2 +- ...a_rgba8unorm_premultiplied_copy.https.html | 2 +- ...a_rgba8unorm_premultiplied_draw.https.html | 2 +- .../reftests/canvas_image_rendering.html.js | 31 +- .../reftests/create-pattern-data-url.js | 17 +- .../web_platform/reftests/gpu_ref_test.js | 11 +- .../ref/canvas_colorspace-ref.html.js | 48 +- .../reftests/resize_observer.html.js | 45 +- .../tests/webgpu/webgpu/web_platform/util.js | 366 +- .../webgpu/web_platform/worker/worker.js | 29 +- .../webgpu/web_platform/worker/worker.spec.js | 41 +- .../web_platform/worker/worker_launcher.js | 12 +- 822 files changed, 135542 insertions(+), 329305 deletions(-) delete mode 100644 tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_copy.https.html.ini delete mode 100644 tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_copy.https.html.ini delete mode 100644 tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_draw.https.html.ini create mode 100644 tests/wpt/webgpu/tests/webgpu/common/util/crc32.js create mode 100644 tests/wpt/webgpu/tests/webgpu/common/util/parse_imports.js create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/hashes.json create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/abs.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/acos.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/acosh.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/asin.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/asinh.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atan.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atan2.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atanh.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_addition.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_division.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_logical.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_matrix_addition.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_matrix_subtraction.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_remainder.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_subtraction.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_addition.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_division.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_logical.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_addition.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_subtraction.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_remainder.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_subtraction.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_addition.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_division.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_logical.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_addition.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_subtraction.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_multiplication.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_remainder.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_subtraction.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/i32_arithmetic.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/i32_comparison.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/u32_arithmetic.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/u32_comparison.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/bitcast.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/ceil.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/clamp.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cos.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cosh.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cross.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/degrees.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/determinant.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/distance.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/dot.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/exp.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/exp2.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/faceForward.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/floor.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/fma.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/fract.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/frexp.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/inverseSqrt.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/ldexp.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/length.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/log.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/log2.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/max.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/min.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/mix.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/modf.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/normalize.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/pack2x16float.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/pow.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/quantizeToF16.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/radians.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/reflect.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/refract.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/round.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/saturate.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sign.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sin.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sinh.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/smoothstep.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sqrt.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/step.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/tan.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/tanh.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/transpose.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/trunc.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/af_arithmetic.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/af_assignment.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/bool_conversion.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f16_arithmetic.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f16_conversion.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f32_arithmetic.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f32_conversion.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_arithmetic.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_complement.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_conversion.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/u32_complement.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/u32_conversion.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack2x16float.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack2x16snorm.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack2x16unorm.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack4x8snorm.bin create mode 100644 tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack4x8unorm.bin delete mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/pipeline_statistics.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/createBindGroup.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToTexture.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/idl/constructable.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/multisample_info.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expectation.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/interval_filter.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.cache.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/adjacent.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/fragment_builtins.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4I8Packed.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4U8Packed.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8Clamp.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8Clamp.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xI8.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xU8.spec.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/util/binary_stream.js create mode 100644 tests/wpt/webgpu/tests/webgpu/webgpu/util/reinterpret.js diff --git a/components/script/dom/gpudevice.rs b/components/script/dom/gpudevice.rs index 7fe86205e31..515afa3a55d 100644 --- a/components/script/dom/gpudevice.rs +++ b/components/script/dom/gpudevice.rs @@ -1054,10 +1054,12 @@ impl GPUDeviceMethods for GPUDevice { .map(|f| Some(convert_texture_format(*f))) .collect::>(), ), - depth_stencil: Some(wgt::RenderBundleDepthStencil { - format: convert_texture_format(descriptor.parent.depthStencilFormat.unwrap()), - depth_read_only: descriptor.depthReadOnly, - stencil_read_only: descriptor.stencilReadOnly, + depth_stencil: descriptor.parent.depthStencilFormat.map(|dsf| { + wgt::RenderBundleDepthStencil { + format: convert_texture_format(dsf), + depth_read_only: descriptor.depthReadOnly, + stencil_read_only: descriptor.stencilReadOnly, + } }), sample_count: descriptor.parent.sampleCount, multiview: None, diff --git a/components/script/dom/gpushadermodule.rs b/components/script/dom/gpushadermodule.rs index 5fe770a3e45..261f551a27f 100644 --- a/components/script/dom/gpushadermodule.rs +++ b/components/script/dom/gpushadermodule.rs @@ -63,7 +63,7 @@ impl GPUShaderModuleMethods for GPUShaderModule { } /// https://gpuweb.github.io/gpuweb/#dom-gpushadermodule-getcompilationinfo - fn CompilationInfo(&self) -> Fallible> { - todo!() + fn GetCompilationInfo(&self) -> Fallible> { + todo!("Missing in wgpu: https://github.com/gfx-rs/wgpu/issues/2170") } } diff --git a/components/script/dom/webidls/WebGPU.webidl b/components/script/dom/webidls/WebGPU.webidl index 78cf829ef04..2bf60db8b27 100644 --- a/components/script/dom/webidls/WebGPU.webidl +++ b/components/script/dom/webidls/WebGPU.webidl @@ -487,7 +487,7 @@ dictionary GPUPipelineLayoutDescriptor : GPUObjectDescriptorBase { [Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"] interface GPUShaderModule { [Throws] - Promise compilationInfo(); + Promise getCompilationInfo(); }; GPUShaderModule includes GPUObjectBase; @@ -1101,8 +1101,9 @@ interface GPUOutOfMemoryError { typedef (GPUOutOfMemoryError or GPUValidationError) GPUError; enum GPUErrorFilter { + "validation", "out-of-memory", - "validation" + "internal", }; partial interface GPUDevice { diff --git a/tests/wpt/webgpu/meta/MANIFEST.json b/tests/wpt/webgpu/meta/MANIFEST.json index 9b8e75c9351..3aa6f4a4cb0 100644 --- a/tests/wpt/webgpu/meta/MANIFEST.json +++ b/tests/wpt/webgpu/meta/MANIFEST.json @@ -19,20 +19,7 @@ ] ], "canvas_colorspace_bgra8unorm.https.html": [ - "c910c97b1dda05eb9c7c8aa06419b5ed2a7e233c", - [ - null, - [ - [ - "/_webgpu/webgpu/webgpu/web_platform/reftests/ref/canvas_colorspace-ref.html", - "==" - ] - ], - {} - ] - ], - "canvas_colorspace_rgba16float.https.html": [ - "7f57858e491eb7fc3e52cadbc05b19565064f1e1", + "a0068dbf7af7a12468786d652a3249e580cd3491", [ null, [ @@ -47,12 +34,12 @@ null, [ [ - 1, - 1 + 0, + 2 ], [ - 8192, - 8192 + 0, + 9999999 ] ] ] @@ -60,8 +47,8 @@ } ] ], - "canvas_colorspace_rgba8unorm.https.html": [ - "e57e04ef5c8e7eee0a2862b50c887984e9d4a6d4", + "canvas_colorspace_rgba16float.https.html": [ + "b38fef9591f6b178cdb9288fc62dc143307cf2b9", [ null, [ @@ -70,7 +57,52 @@ "==" ] ], - {} + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 2 + ], + [ + 0, + 9999999 + ] + ] + ] + ] + } + ] + ], + "canvas_colorspace_rgba8unorm.https.html": [ + "404aed360c07b951f77f67a11bc03bcd0002a8d8", + [ + null, + [ + [ + "/_webgpu/webgpu/webgpu/web_platform/reftests/ref/canvas_colorspace-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 2 + ], + [ + 0, + 9999999 + ] + ] + ] + ] + } ] ], "canvas_complex_bgra8unorm_copy.https.html": [ @@ -204,7 +236,7 @@ ] ], "canvas_composite_alpha_bgra8unorm_premultiplied_copy.https.html": [ - "70920dc0e6d161949498c05aadfa62b07b5c549f", + "5c3b888feee98696cd3e3b2bfc772303767d4df7", [ null, [ @@ -224,7 +256,7 @@ ], [ 0, - 400 + 9999999 ] ] ] @@ -233,7 +265,7 @@ ] ], "canvas_composite_alpha_bgra8unorm_premultiplied_draw.https.html": [ - "d12751fac211060cf19b20d08f7a68142415b401", + "81335296c0f410e88fbf9b50b7b1427ec96a8ce9", [ null, [ @@ -253,7 +285,7 @@ ], [ 0, - 400 + 9999999 ] ] ] @@ -288,7 +320,7 @@ ] ], "canvas_composite_alpha_rgba16float_premultiplied_copy.https.html": [ - "ed722013c15495c0f1aafc62aa585313985124b3", + "28e2553fed8e6780f12902ba2ca5ab5859e540cd", [ null, [ @@ -308,7 +340,7 @@ ], [ 0, - 400 + 9999999 ] ] ] @@ -317,7 +349,7 @@ ] ], "canvas_composite_alpha_rgba16float_premultiplied_draw.https.html": [ - "8a028b168e1c066aa4bb017cd399ad7431eb400e", + "ca76fac7cdfc48721be00ea24986bb4066b5c18a", [ null, [ @@ -337,7 +369,7 @@ ], [ 0, - 400 + 9999999 ] ] ] @@ -372,7 +404,7 @@ ] ], "canvas_composite_alpha_rgba8unorm_premultiplied_copy.https.html": [ - "fa938aba41f39cffe03b13c662f3feb850a63b16", + "7936e0b81cd3e7208b43fae0b985556414dd468b", [ null, [ @@ -392,7 +424,7 @@ ], [ 0, - 400 + 9999999 ] ] ] @@ -401,7 +433,7 @@ ] ], "canvas_composite_alpha_rgba8unorm_premultiplied_draw.https.html": [ - "b62e71054c2b1c274febc19d56935d812d2d15e2", + "da48abd2be71f983f09fc0b308e511925e16140f", [ null, [ @@ -421,7 +453,7 @@ ], [ 0, - 400 + 9999999 ] ] ] @@ -470,186 +502,194 @@ [] ], "checkout_commit.txt": [ - "5507b2d47d31f13e63856fe50004afbed478abb1", + "bc28bbc4dd3c1fcfce39f3474eac209362d25c92", [] ], "webgpu": { "common": { "framework": { "data_cache.js": [ - "e426ffbbc91953a3ffcb4f96ab3bca9454a5e0fe", + "74d5af8cc2d2451393d41d6cb17a5e93ded28735", [] ], "fixture.js": [ - "34ea469708f8d060ec81f413e69738b2318b4e38", + "d64245f5f89c40aafafe257faea5046da63302e5", [] ], "metadata.js": [ - "daa8b4dbca1e5ef62bbbfcc234a9d9c6afcd0d15", + "7742a9c1ae5c9a9a108a72a5dd00662d146ce296", [] ], "params_builder.js": [ - "63c6431fd2b478c0ced00691bc6fcf69a3a01e60", + "d3d0d45880a841b68715195fc86698e8eb693abf", [] ], "resources.js": [ - "72eabeda4e46abac4e27068695ab407fb2b06fae", + "aa6ac2c1d5cc9ba2b408cfe4852a7ca8a62b3745", [] ], "test_config.js": [ - "c9806c7b6c1e114a5e42112b805a793eb5e57aa8", + "81984dbec5e5065873478d2391e81a8d57843d34", [] ], "test_group.js": [ - "2d1d3c1c07ae7d5815ec2b7db00a0bb4e0eea3e3", + "82b409c614553816d7ac71182a5d9c68e65fe6ca", [] ] }, "internal": { "file_loader.js": [ - "2420782e78b99f0bbdcdfe746c163b35e9760f8a", + "f9f4f17fb460473d5f5f22b2e393217914ff637a", [] ], "logging": { "log_message.js": [ - "3e5fb1c99d8669a1cd1658675e43334df4993c08", + "234b7c2cc909107a992a09b6d1154db75c44e732", [] ], "logger.js": [ - "77b78f0d7588374a2f5d0a13d7894ce4c6d74167", + "224af20ddc58f3d3fd22d8c8ba97bac1bcab6e5c", [] ], "result.js": [ - "9b2db0e1926f9bcf858cf953612b04cba1966f11", + "a7eb281daf366b8585981daf587a35ef1627bb10", [] ], "test_case_recorder.js": [ - "8ca5c0d4d64ca51c6bab1468a392be69d3face5a", + "7b9a5302cec839033c011737d1e7466feece71e7", [] ] }, "params_utils.js": [ - "85b002c16ceeb152d42bb018ff3cb07e9f3b755f", + "68acd1b7bc5403220145ab155e83d37bef69d0fb", [] ], "query": { "compare.js": [ - "7e86f6c0f3b22ffbc3512af1ad507b650a68e59c", + "8af64919a2ed63c10d58863d72b55c78f54527d7", [] ], "encode_selectively.js": [ - "cb365deb4bb688e8ae5eebdef24a2ffcb3d857ef", + "fe7bb1c1a5a4991d21f75b1207cb92c73e4e5801", [] ], "json_param_value.js": [ - "1044a5520375670f4bcd3780ac9a37370b1015c3", + "ce7be0335fb4b6a6052ecda8bdce74a1a4b3cb92", [] ], "parseQuery.js": [ - "b9f5ac2034a529ff1dd2f0900ed19e646617a8d5", + "b66b16ce9162c2b1ac22b0f7ace891fe2b43db98", [] ], "query.js": [ - "b7db9fe4a59d01cf13e90ecefaf6c4be40e13d99", + "e1db8750610e83134c853cbffec945ac1434eb4a", [] ], "separators.js": [ - "8fbaebdf945aaf95301b4d4e213659c152e1b6bc", + "6170cb5002072b6ae8ac70573f50a9c2e126d864", [] ], "stringify_params.js": [ - "b62bc9169368c03b28f3cde6ab351beba38cfe8c", + "74808131a409ad20d0d6f225fcdb1e0d638269eb", [] ], "validQueryPart.js": [ - "ca21627975fc498f2bff550c9a4e9d064c23af38", + "37e5d08073d825fa375422d4ae593fb8f487479d", [] ] }, "stack.js": [ - "98636bd401414c8ad6bb64413c4c84d1f30272fa", + "8db1ff940d6733ac5536b5d35659c0d7df2d3074", [] ], "test_group.js": [ - "b836c78c6127ed77a8c1a3bc51885ab08ba29d96", + "3db409ffe765feb5c869d9947900ff000788edb0", [] ], "test_suite_listing.js": [ - "9b2db0e1926f9bcf858cf953612b04cba1966f11", + "81a15cf7123193973f4f3f3237a855ce4c5b071b", [] ], "tree.js": [ - "0299f35493243d53f9a92636d6e04b992e4202ea", + "8f1e6bad662886ceb541ba861255089278bb4190", [] ], "util.js": [ - "66979fbc30829c106a9682b8ce4dbbc27fff6dc5", + "6e6125474dca357f26acc5b0324143cc3baf02ee", [] ], "version.js": [ - "0cbad1c61d28a7e7260b3d32da4ab55431b4d1e8", + "5a6e67c1cbe845222fadd98cbb6a422df81ae305", [] ], "websocket_logger.js": [ - "1f60801f5c6dc114d58d7e8f7969082f03b815b7", + "7a8f92b1a84b27990004a6a127a4f2d3b0d3eeff", [] ] }, "runtime": { "helper": { "options.js": [ - "953c3280fd42888e5349970841db0d43c4e92b9b", + "139c3bc29f22ae53a946af1885861c65f9f43670", [] ], "test_worker-worker.js": [ - "e8b40222a51b7c26beac37929c4409463cacd0a4", + "a0f13c54afeb57dc14ce69fb8335ed21389fd3bd", [] ], "test_worker.js": [ - "092d4ee88bc1b1c325dcad5b61f08832927481f9", + "1d653941802d3a45ab05094b654d8e369920d57c", [] ] }, "wpt.js": [ - "a66f852194d6033a8834dbe96f04ce19f39297ba", + "97c6a3886ed139e709e7b336606eaab4098c1fe9", [] ] }, "util": { "collect_garbage.js": [ - "2696caf79e08b2c9613e7349c2ed4a5dc022e375", + "9b7ef10af5175ee72c1d7a46a02a31d294ad076b", [] ], "colors.js": [ - "f77ba765562bd8241aa5dce5b4a7fa49a3857107", + "d0716651383d3c0ff21a044a69ccb9047fd54105", + [] + ], + "crc32.js": [ + "392d3b947c602a847660c009e9453a628f6cea3b", [] ], "data_tables.js": [ - "f2c9176ff4da1243839281118a7e9c263ae556b0", + "569af1031d62411ddc692a28e822b9a1c4b51d4c", [] ], "navigator_gpu.js": [ - "63b432b4ebefc47ea948a219ded7261b150d50ac", + "d5db9f936ef57af9bab40bff317afd230482d253", + [] + ], + "parse_imports.js": [ + "bc970572b1d3bcc0083cf3b723751072e219d0f8", [] ], "preprocessor.js": [ - "455406de0682bcddce8ac8fd43dd2230dd5a7e89", + "8783ee16e069433e9a26356d171c6152af28cee6", [] ], "timeout.js": [ - "77605fc8dedd02c28cbf7206bc7a68362786a05e", + "f70472eeee5981edde6470836baddc5e3404d244", [] ], "types.js": [ - "e4aaa93ec9eee6d2c0cc51f47abf541e2a1ff37f", + "0e893ab2fae5a4dd1073ac7887d622f9efda65cb", [] ], "util.js": [ - "248fc2cc35f405cb3a547e19e3a5e934dd618b72", + "34934af6c04bc32bb38031cbd6abf328de91060c", [] ], "wpt_reftest_wait.js": [ - "b41b3cadf9792effb7db6e983ebc912d8dd6d038", + "89b7fd1a9c5d52b6ab4efab3bb6e372ef6713188", [] ] } @@ -658,11 +698,11 @@ "petamoriken": { "float16": { "float16.d.js": [ - "9b2db0e1926f9bcf858cf953612b04cba1966f11", + "138c3378a5285254f3267e606e97e4d95be8935c", [] ], "float16.js": [ - "58f75c873a6bf1bca38e2e6591fe77691d567f19", + "42543cdea172850819c0e50c7ea44d0c03238af9", [] ] } @@ -673,6 +713,438 @@ "824f82b998f2bd7d650b18428f8dd24d715e9e92", [] ], + "cache": { + "hashes.json": [ + "01cfb9dad3ad0d64ba37757708138e3348b7fd8c", + [] + ], + "webgpu": { + "shader": { + "execution": { + "abs.bin": [ + "16111ac66a32c2290a9d7f22be4b0e7d3ef23aab", + [] + ], + "acos.bin": [ + "3765fcd2bef86bea9a6acd30f366dd0317d055b7", + [] + ], + "acosh.bin": [ + "ee127796edb4763828cf6bc4a4d9ab4e1c34428f", + [] + ], + "asin.bin": [ + "439de48fb3f165594370eefc6b01e1c676a1ada2", + [] + ], + "asinh.bin": [ + "eda7179e75974c25204038952373bbf36152b4cc", + [] + ], + "atan.bin": [ + "d15ee8b6b7f20b5e312b205668c7d67fb7f32b12", + [] + ], + "atan2.bin": [ + "2966b4ea155cc9f5621ee0c26802df131374bbe3", + [] + ], + "atanh.bin": [ + "d919b4bcb782602eb2184803c4a1c3b30408dbff", + [] + ], + "binary": { + "af_addition.bin": [ + "ebd757c1b6b194e93c9beb5b0057cbc5bf43a888", + [] + ], + "af_division.bin": [ + "af690dcfb53f1cbadecd6f7bf29a4fe071cb6c6c", + [] + ], + "af_logical.bin": [ + "e386de36b7e828c02101d4889ff1f5fd443d9fef", + [] + ], + "af_matrix_addition.bin": [ + "d387abcd7f208df8c11ad5470307a737ffe8b81d", + [] + ], + "af_matrix_subtraction.bin": [ + "4a1449182109965ae9b9e4ed2a19bb5bb24d5001", + [] + ], + "af_multiplication.bin": [ + "552d8b4892c87a6b7889ebc50773bdadc64acd97", + [] + ], + "af_remainder.bin": [ + "b9cd253ac7ca04b0faa7ece4de628b308398f46e", + [] + ], + "af_subtraction.bin": [ + "6f0be2978587de4c6c5659248a4e180b8a5bdbf6", + [] + ], + "f16_addition.bin": [ + "30f099139dd4703bf48014c94b65d115679f83ad", + [] + ], + "f16_division.bin": [ + "c05b627fa121b60fa8315e191c90c0d4e9bf27f6", + [] + ], + "f16_logical.bin": [ + "558a25ded4500f2fd42630c3a88535e157e0f250", + [] + ], + "f16_matrix_addition.bin": [ + "452376760bd3254a16da56700d22c200351728a1", + [] + ], + "f16_matrix_matrix_multiplication.bin": [ + "6d5f4e1ea1fda694810c430977a2cc51b826b97f", + [] + ], + "f16_matrix_scalar_multiplication.bin": [ + "b48be81ebd2a801185ac3d69671e96ada108cd96", + [] + ], + "f16_matrix_subtraction.bin": [ + "386558c3f76873189f04679c754bc4c19e664636", + [] + ], + "f16_matrix_vector_multiplication.bin": [ + "cbf224a6b638eb8272b0364fa65aba8e48bcd8ce", + [] + ], + "f16_multiplication.bin": [ + "e9d27019a3b4ecdc829a6aadaba9b0f5174b53fe", + [] + ], + "f16_remainder.bin": [ + "d21370aec98c04835be1fd91662f44607c685252", + [] + ], + "f16_subtraction.bin": [ + "97080a8ce54753d536d5f71c324fd540d85a2f7f", + [] + ], + "f32_addition.bin": [ + "be7b997bd8eb768d8fcea2b508c7140dbd00a658", + [] + ], + "f32_division.bin": [ + "f80461c21b480931a0d2694975325b23c268ea17", + [] + ], + "f32_logical.bin": [ + "5a6fbe92d5d21e8db004110e3791afea6e086372", + [] + ], + "f32_matrix_addition.bin": [ + "b1d7179264c691868e2dc13217f6546daa4213f0", + [] + ], + "f32_matrix_matrix_multiplication.bin": [ + "9c36c9e8b5c279dbaddcc46809ff12bbc62d0f2f", + [] + ], + "f32_matrix_scalar_multiplication.bin": [ + "76f867b959ecbcdad244851520331f792a2a800a", + [] + ], + "f32_matrix_subtraction.bin": [ + "0d0fd2460d72c5f5fed869f9692c2eed4deccedb", + [] + ], + "f32_matrix_vector_multiplication.bin": [ + "e139fc9713005fd0b83e50c27daa566e511fd82e", + [] + ], + "f32_multiplication.bin": [ + "1837ce922c56afb4ddc9d7c8fdf8e651284d4ffc", + [] + ], + "f32_remainder.bin": [ + "3febfca1d1cb7f93311676746258a101d5c5d26f", + [] + ], + "f32_subtraction.bin": [ + "32b34f690cc61814f96d20f48336dfdd5217b9fa", + [] + ], + "i32_arithmetic.bin": [ + "55880fdeedede1bc61dd2875ccc48fb71cb8a376", + [] + ], + "i32_comparison.bin": [ + "4bc8882dea9233a3473218f17e95cabb734ff5c9", + [] + ], + "u32_arithmetic.bin": [ + "56ef2928645ac0bbc60dc94dc8940933dd4eb3bf", + [] + ], + "u32_comparison.bin": [ + "5ba639b3cdad2c48943b58381e8ebf4d2a0ec5de", + [] + ] + }, + "bitcast.bin": [ + "d019622c3786390d85136666b0b1bcecd0bcb4b6", + [] + ], + "ceil.bin": [ + "5ec60b6e150d5694fda5f5933f6accd39d76bf2d", + [] + ], + "clamp.bin": [ + "1ceb3f19a10d30cb69ffd5cf37415f5a8e4ab84f", + [] + ], + "cos.bin": [ + "a7951b4470252bbed5e7af6c7b548e0a0ce9903c", + [] + ], + "cosh.bin": [ + "693b2d3230e74e38b599933a7606f15e8245e0f5", + [] + ], + "cross.bin": [ + "64041c731193542451c281ca31fcdc2764cca2c7", + [] + ], + "degrees.bin": [ + "715e6b656f748a0fce3c5b242b30ef9da996ed4d", + [] + ], + "determinant.bin": [ + "cef09cd67bd1e75a9778c97c4687d60e5b2c7c2a", + [] + ], + "distance.bin": [ + "68e892671e1fbd926d853b5bc6bcebc3643601ab", + [] + ], + "dot.bin": [ + "9c243ea4f00401534583569b6d5dfed4b589473c", + [] + ], + "exp.bin": [ + "0c4ed5bfea0a6a59f5bbcf72edbe9c39b4bd55f1", + [] + ], + "exp2.bin": [ + "7ffbb062f1b2ef67ee6f77844daee1f688a58354", + [] + ], + "faceForward.bin": [ + "13436dde01b1008e59c6d6b8d8e8a87db54d7ac4", + [] + ], + "floor.bin": [ + "a4b363825bea4e03beae563fbd046e228948c10c", + [] + ], + "fma.bin": [ + "db54353a526216716895786790abc1bf9452594d", + [] + ], + "fract.bin": [ + "566b95144f3c00cdc4e04e9b01e365fe6f7c5c24", + [] + ], + "frexp.bin": [ + "2e20d4ce033d25c1a12f314eb12b8d1ae7067723", + [] + ], + "inverseSqrt.bin": [ + "731c62903cc20ed648cfe9e95f9cbe24f964211b", + [] + ], + "ldexp.bin": [ + "d441928d1cb7855ec90f293257b4b17ab3f0014b", + [] + ], + "length.bin": [ + "9ecedd7d997fdce8df99b8f5d3e07b5bf8306629", + [] + ], + "log.bin": [ + "5c860bfaa65cae352ae09a2afb7df1415c4e4c24", + [] + ], + "log2.bin": [ + "7f6d35346b33628496b0e7ca5269695b3817f5ca", + [] + ], + "max.bin": [ + "63704eb2330096274b364835f34aeed92dc3addf", + [] + ], + "min.bin": [ + "18b26a3bf8c80d01fe454c61a180fe871a602319", + [] + ], + "mix.bin": [ + "e6d92fc898d54e70e4a846bb304353fd13537786", + [] + ], + "modf.bin": [ + "e5387db46257f1783a78794cbcea77bfe410ad29", + [] + ], + "normalize.bin": [ + "434bbe2dd167c1dbb06074abd9e357de729a156c", + [] + ], + "pack2x16float.bin": [ + "e95227d36e50f1b6f6f66b3de1b4d119aaf9efbd", + [] + ], + "pow.bin": [ + "1f23a1f3818a2a86c256a3b39a4e1d0067af9a45", + [] + ], + "quantizeToF16.bin": [ + "9e4308d5cd301234b2af1e7daf0dad15f87f042c", + [] + ], + "radians.bin": [ + "63c7cc3ccd5be708747bec1cf1e9e48cec76aaca", + [] + ], + "reflect.bin": [ + "6608646fd01ecaeaaa9c78c9decdaeb8e338b64b", + [] + ], + "refract.bin": [ + "934e44e644bcfaf7319dacc7a72f6ee462c367dd", + [] + ], + "round.bin": [ + "c3b30b68f0a113da6a8b01f6ec0ff44aa0ad362c", + [] + ], + "saturate.bin": [ + "39df7169b750d6727701e15ac9270f9b6eb5e69e", + [] + ], + "sign.bin": [ + "2f3b2aa258b22dcee4155780650f6bddbba0aaee", + [] + ], + "sin.bin": [ + "d583876c518cba48505c271089ec7e34514bf2ac", + [] + ], + "sinh.bin": [ + "072c53393f46bfc3084d599a14a7dc4b110f4fda", + [] + ], + "smoothstep.bin": [ + "43aac2b1c46d1acd72edaae1e7196ed0a759f50e", + [] + ], + "sqrt.bin": [ + "f466d2379f65802305e56ea5cf61a3f88a790c7a", + [] + ], + "step.bin": [ + "03f251cb65cfa6c5fddd7e567bba39bc9ae4ba7f", + [] + ], + "tan.bin": [ + "aafb900347d0e40d3536cb35adcd40672a197dcb", + [] + ], + "tanh.bin": [ + "709427217c2629669fea621350b8c86d8d16917b", + [] + ], + "transpose.bin": [ + "d1b6bf04ee7e3bfa95f4a3a7ab48d8b1c9dd9907", + [] + ], + "trunc.bin": [ + "ba81e2ada42743b52200c58f8c0adc970431fe60", + [] + ], + "unary": { + "af_arithmetic.bin": [ + "21d3d702ae9fe8896bf63b37dcbc766688dff9b1", + [] + ], + "af_assignment.bin": [ + "a92279b5ce4e4bc03edbedb040150623f97c2867", + [] + ], + "bool_conversion.bin": [ + "98a90ea45b9ab94b2ad0f4435606f95969753716", + [] + ], + "f16_arithmetic.bin": [ + "acf8a702cee1b8ba86e43be26d54172af032f876", + [] + ], + "f16_conversion.bin": [ + "5b386b070434a14f96c724bbf5d0bc939e85cfde", + [] + ], + "f32_arithmetic.bin": [ + "ebc60029fa6091e18b8d03e473f855c08b12f859", + [] + ], + "f32_conversion.bin": [ + "bdcc0c72988e6a5d01923ddcc39da26aa8172951", + [] + ], + "i32_arithmetic.bin": [ + "4753b020c9651ed7e5339214487cf446a4574242", + [] + ], + "i32_complement.bin": [ + "f7b8bd680c372bc7d016e884c78abc7757cb0f65", + [] + ], + "i32_conversion.bin": [ + "74c5d000e3f631e5b708c46662a4e8fef511a010", + [] + ], + "u32_complement.bin": [ + "526456273e48f6126087dce1c930f33386230e1e", + [] + ], + "u32_conversion.bin": [ + "609caf94fe68795c4a18802aa7e15e7bbd23c89e", + [] + ] + }, + "unpack2x16float.bin": [ + "7f06cb0df6b31c5638117b2f83a3e6a3f245a5c9", + [] + ], + "unpack2x16snorm.bin": [ + "08c6af9e93980593c9385efef42e74c2beb9f5ae", + [] + ], + "unpack2x16unorm.bin": [ + "1bb97b9c556a1df7096d09a5e7ee91a40b76cb60", + [] + ], + "unpack4x8snorm.bin": [ + "1db9856b0562b45486960ec559059dc80b429a4b", + [] + ], + "unpack4x8unorm.bin": [ + "8d1f3dc7fb8f57cc16e3761453c7b222b487c287", + [] + ] + } + } + } + }, "four-colors-h264-bt601-rotate-180.mp4": [ "1f0e9094a5287a1b59de74269f99b844c0a25578", [] @@ -719,319 +1191,319 @@ "operation": { "adapter": { "requestAdapter.spec.js": [ - "df1ad4dd0fda4c0b61a7a29939b72aa987e4a2e8", + "ca97535007f913d5e5661501ff90d7919de3a03c", [] ], "requestAdapterInfo.spec.js": [ - "c00a68176260d8b3e961552f82a22883263cce38", + "170f5c538550e52a3d9c399c615b13468790ddca", [] ], "requestDevice.spec.js": [ - "73c5218507e324a2829e1d2af42b5f92230d545f", + "3d69c132c5581e7c69ae112396e0e13412c62ccc", [] ] }, "buffers": { "map.spec.js": [ - "48ad500e784ae81e54b6a8ab0585c615723f874c", + "2d4408e6c070fbc88f3b66bebd5684d046e883ee", [] ], "map_ArrayBuffer.spec.js": [ - "d006e4048621be7a0c328717b1bec7853d77bd87", + "1a4dab2de93116d3f49af744cc7ff4da3f3f2507", [] ], "map_detach.spec.js": [ - "57d395f7b36a0a9c4f896433f73e8c9cf8220f9e", + "4d8df2634970e06ee696500a63c4486f12445c21", [] ], "map_oom.spec.js": [ - "86fd574199fae3a76776191a372d9977a0ba6545", + "73aa5b73f161eb70204de906230d6302a36914c5", [] ], "mapping_test.js": [ - "7a69968a9f962bc20df3bbfe580d53aa0bc0f72f", + "5f8f20991ba0d666191743241facadd545ca6273", [] ], "threading.spec.js": [ - "d30e5813b36fa9b735e8bc2dced8317d9a628172", + "a665ad7c2823c7b0453a1fbdf48e6da13e9a1c35", [] ] }, "command_buffer": { "basic.spec.js": [ - "55d6ac553550931d71461d1a9c67353a313249bc", + "56b6785a65f2baa8d75be30c3f82ede5759447a8", [] ], "clearBuffer.spec.js": [ - "b721cdcc2bc14554d6e98b018019f64f2a9b4440", + "42a2f63dddc39e5fa301330fbf34632f68c61616", [] ], "copyBufferToBuffer.spec.js": [ - "a08050784bc21b273a4d76c16d65bd5ed1e62360", + "376596a7b7223b83bc91cf10a4e740e9293def55", [] ], "copyTextureToTexture.spec.js": [ - "a85ee333b106039987adf3814ae7dd18682a103d", + "2440cccdd9db68175c9afef102e5f67b635bb80a", [] ], "image_copy.spec.js": [ - "fa391eac04b6d957ef16ab48cfad69c0acc5a9ce", + "52c3b6d01bf72a98cbf1ce048d919f16dbe11e3b", [] ], "programmable": { "programmable_state_test.js": [ - "e263adf8ea6b2367855e4c5a56463de4e50be1d7", + "09d5b988d466d6475467015d1c888901d4d634d9", [] ], "state_tracking.spec.js": [ - "04280d540833a604fc92645ae8262e669f284081", + "865704bdd5ac56b91475dd944e7c81eb4009abcd", [] ] }, "queries": { "occlusionQuery.spec.js": [ - "c142beabc71b17d12ab2343804038f7c0d7cdf37", + "fc25802db43b1ddeea100f6fbbd7193aeb6acb27", [] ] }, "render": { "dynamic_state.spec.js": [ - "69c91e371d4e7ed5efc4281591bac1b60283f755", + "639fbec8249ebde7455087b23e59655ef1aa41a3", [] ], "state_tracking.spec.js": [ - "d50c4f794b4b7d2be6db3cce1b33c673fe115c9d", + "9b3363f3aeacf741b039e7c1ce66b24daceec1fd", [] ] } }, "compute": { "basic.spec.js": [ - "2e5b1279001f422049caaad06433bdf03cd64111", + "2875f8a0ac3afea6a952b4f82316c2539173b9e6", [] ] }, "compute_pipeline": { "entry_point_name.spec.js": [ - "ddd6b8850df4612a68612afd2255296200f9ef20", + "2e675a84d38a62965528ae9e75451eaf027e886f", [] ], "overrides.spec.js": [ - "a323b97eff56e53ce0e31de32c955f20ffd40cce", + "35d8c437fd2dd6b1d56c1f48b2b0a57cf1aca145", [] ] }, "device": { "lost.spec.js": [ - "2b5d7a2d1751dab95d24e5c9b9fdc2c5822960bf", + "e86b009d2358b1194d04b5ad0c74a7c35d02fbbc", [] ] }, "labels.spec.js": [ - "ddd2ab0e15583647ae7ba9d2d0393dbc0b648c26", + "7da653f5ac2fb64b68bcb455d60aa9dd34fa7baf", [] ], "memory_sync": { "buffer": { "buffer_sync_test.js": [ - "e6196c7f609b39b04c7a18003b482155992e2cff", + "7687ba27cd99c62f90adc2053cc3e771d621031d", [] ], "multiple_buffers.spec.js": [ - "49cbba0b7c09303ee23989919fdd5193525685f1", + "01be4c06c7f52619640ddfbe6f859b933c5d0bdf", [] ], "single_buffer.spec.js": [ - "fede1375e83589dc5a50d22ed4a7aae584763b54", + "8a6bb018e860d27fbd656de1df7c4d8e0f6a5bec", [] ] }, "operation_context_helper.js": [ - "222d06fac926165724e0ca1b583c040d0fa012d2", + "f3ddfa12bf986aa3ae4bc69e2a4adbd02fc077c8", [] ], "texture": { "same_subresource.spec.js": [ - "0dcd7f90af40131199193186c235921dd910941b", + "ca575db19bf4f55d74af7007fb775ab242fc1827", [] ], "texture_sync_test.js": [ - "35b868eaa469c53cf3f659a3aebf0200fe4d001e", + "f23af118bb130b086c55e4e91740b8fbbb093851", [] ] } }, "onSubmittedWorkDone.spec.js": [ - "6f549c73adeb38b1553242484f42c228b22e943a", + "e6d6fae9b5607ec508fde42c21a94b2b55c74340", [] ], "pipeline": { "default_layout.spec.js": [ - "7d441d2c9dee5a9121bb6dc19812b9542f659309", + "1886c81b3109bf274c8afcfd4323f52bf5531486", [] ] }, "queue": { "writeBuffer.spec.js": [ - "4e59843c95ed5d5e583d524fb968339ea06670fe", + "261b756a7bb1a74c3648daf96ba8600221a26900", [] ] }, "reflection.spec.js": [ - "f2e53d68f7342e394a0c70ba9e75afbc34a44e15", + "3fd7746ebeda1d5a9f535169a52381a032520fbd", [] ], "render_pass": { "clear_value.spec.js": [ - "7f8749d7edb3bbe8b3a0492e0dd4abdc3b7bec76", + "5c127533ba80cc38ef829241a17a79e36779a405", [] ], "resolve.spec.js": [ - "c9984c65fe0f9265a3c38c3c8353ee0cbcfa01aa", + "abcbe24bd892a39b4728d53362d5c589e42881ca", [] ], "storeOp.spec.js": [ - "9dc3c27f58048c2918f6eb2d7ded591dffab14d8", + "16ce84669937a024bda8d99343bbdd48a3175d17", [] ], "storeop2.spec.js": [ - "61bb1ea5548e71d455b4260818b18246b0b30494", + "07894fcfc05e81d2d1de47c098dfc9e35660fa20", [] ] }, "render_pipeline": { "culling_tests.spec.js": [ - "f03ad7e86f45c74c9e5f778f0105def23b6481f4", + "12e919b64d8068a394f049c4f10d2c6e19ceb659", [] ], "overrides.spec.js": [ - "dcc76eb8d06a87d0c6150cba39017793bee6effe", + "be7a059954eea83d5bffc288eb6d7c1414a587ee", [] ], "pipeline_output_targets.spec.js": [ - "3b124b09e77cf1582f7f44d9cf235898725df309", + "5fdd9a2b669ad3bb4dd8864a58f28bab9747ab8f", [] ], "primitive_topology.spec.js": [ - "bf188dd5f477f275badc72f67a9aab9937daff7f", + "bcdcf5bf0050b1db8708230192e969f4c0ef8476", [] ], "sample_mask.spec.js": [ - "f1f45e98143ec71bfd300d40e3ebbeb8dac16ab6", + "60487998dfdd5d22b3f050b310799381e9353d20", [] ], "vertex_only_render_pipeline.spec.js": [ - "eb6e3611969230a203143b7cf9c54706415a2ec1", + "34a61ca27c1ff2cb9cb72bfc711569fcb79e495f", [] ] }, "rendering": { "basic.spec.js": [ - "a850903b9e1f5864fa5e5b6740161ab2a2f7bf03", + "c549a195a78d059c6932cd74267436f8356d50c8", [] ], "color_target_state.spec.js": [ - "6e55f623da7dad31bbaa1ddf674da96b811311a0", + "4e0a49f507f1c9747cd7a52b115d6b073b66627f", [] ], "depth.spec.js": [ - "53e28bf32b9264da5eb4a03af04559c2361dd762", + "12c88f8dcd6b97ce13c0ae88d8983a47680fca65", [] ], "depth_bias.spec.js": [ - "e1e8f5d285e09f320c83c36b15c5cd4ee46d452e", + "4cae7f53ebe6066ee4d80e6121be2947d97166f2", [] ], "depth_clip_clamp.spec.js": [ - "f9ecfdcedc5cfc2f3d54cd2aea26abcbf15cd1ad", + "28d639990d1cd5714fa4156491e73028f1b5b2a5", [] ], "draw.spec.js": [ - "489975f63f2f3ebbe71cc2cdc5b3626b2a7cdfc7", + "541b87648510f64ad9e9f1bf9089e26c5c8812b3", [] ], "indirect_draw.spec.js": [ - "15d227809a8028bd95e803c7559dbe5d72f8a70c", + "4bc9cf572759da70a830ccb90d02b47f456b6703", [] ], "robust_access_index.spec.js": [ - "6b052b895d4f9fa1b26bb06dd6543b069964181c", + "0e5c1fa8aff807bc530aaceefab1f09ddb78f003", [] ], "stencil.spec.js": [ - "fd4adf84329c661cf7c2a228c4155d1cb40a5614", + "9868fa37c1025940cd67ca860d54af072ebd3204", [] ] }, "resource_init": { "buffer.spec.js": [ - "0008f0dafea639f8b7d0e1d2e4145dd83db7177a", + "fa7cbdbbbab4b8d4bef94d43ac3066749f1fd4e0", [] ], "check_texture": { "by_copy.js": [ - "0f363d25a9b119135c8bd0b1971ce95ed211e30a", + "402546730639008b2609ffa4025a2718b9770559", [] ], "by_ds_test.js": [ - "84d63563ec1b922c4de6bcaaa49e95bd5bb5a13d", + "3a88f02a6add02dbe60b16798ec45ecab6a543c0", [] ], "by_sampling.js": [ - "476b689315f7b3ea0bf24e8398f4e0c70833df18", + "3ab4d42916c432583a64893065630d93284e1b9d", [] ] }, "texture_zero.spec.js": [ - "b2a4c0d2b77a914471ebdffd97c30a5f41911363", + "d7e83601c1b93a42e1c2d337077e71b9120157c4", [] ] }, "sampling": { "anisotropy.spec.js": [ - "43fb17a51eedcac4c6c7ecf19c0929dc6081e611", + "8408f619f4b1eb0a625857d57faf6065bc5d9197", [] ], "filter_mode.spec.js": [ - "f9501fc629fd1d65efb6c649237b3f77301ed608", + "860eb03f8d1e3622dec60d49b40f672e942eff87", [] ], "lod_clamp.spec.js": [ - "b05896a34d9b62f9d36403ed14a4aa47adcf62cf", + "07c36e85aa08c483fea3b95872f3a789b3f3f306", [] ] }, "shader_module": { "compilation_info.spec.js": [ - "26a314fbc795341f19551f2a58941140791fad27", + "9f9a1fcba045b9c5db1111530df81ee8dc8a6f85", [] ] }, "texture_view": { "format_reinterpretation.spec.js": [ - "b4af4f28fd7741831e9a0f2d99f6e28eae1e0aba", + "a3c0c280e9842513a780dc4e75f9c72204b71d74", [] ], "read.spec.js": [ - "96884efec510782ab67b131bb389721296dfa2a8", + "193c3074e1d268f60d97c545e07d5df95fe85c9d", [] ], "write.spec.js": [ - "3a47c0360ebeb94379db9313d08d3dad003c2069", + "5b52d9d0b21c985189e56a26497bd8c6f7b83573", [] ] }, "uncapturederror.spec.js": [ - "acd39ae972f2d1c0fa08e842c406d7490ba5c555", + "3c7615f961156ca0eac1ed27213f241ec939319a", [] ], "vertex_state": { "correctness.spec.js": [ - "4b54604e1aeec65aa6792674d05ca03cd0f73fff", + "0973299a73e6206af228f081adc089fa251f073d", [] ], "index_format.spec.js": [ - "5e06d0705dd1dc2cc5553aa0de4f3b10f96b0082", + "60ffb5bc3695ecaf1ab83996c7d5233788823ddb", [] ] } @@ -1039,1569 +1511,2057 @@ "validation": { "buffer": { "create.spec.js": [ - "0a5a695097e37627ee7c0ee2400c54f23cb0b65d", + "d28cee735aa4ebce86bfdba8daffe90267f8eb7e", [] ], "destroy.spec.js": [ - "13572c50959fe07dccd1c9b6a2d2d4c2af181a6b", + "59b6c9500db4d28cd517fd9b47f302f31d394c07", [] ], "mapping.spec.js": [ - "85e8210708387f8c2dd43205efd90c457a998051", + "3d27f0256768f88c1e6435b61983144ffa453694", [] ], "threading.spec.js": [ - "46256ab73d4f82f7bb095adcb628bb65b0d87076", + "3b22b148798f2cbb68cc9ca934677987edf085aa", [] ] }, "capability_checks": { "features": { "query_types.spec.js": [ - "de90d0bb1b8c7668c6ff34d7cbf1adccc937ad60", + "44097d184c31bc2ae613546e99935d5ec1a4dbf3", [] ], "texture_formats.spec.js": [ - "b281643a12cf0b04e91438332278a3e3f5d8a614", + "4e88bfc4fff0fc91c2b5aacb5aebc7ac7b9f3cf3", [] ] }, "limits": { "limit_utils.js": [ - "350cb07a753081e40ca6318bd3c74170282c1c10", + "10cfffdcefa6c13e38bdb9879535da41431598ed", [] ], "maxBindGroups.spec.js": [ - "bd13235b8b7e223f4e73e6abc31a887200679941", + "ab0eaa3e4bcd22e159ed93a47c18f58fb20dd9f4", [] ], "maxBindingsPerBindGroup.spec.js": [ - "ebc2e8c07d9ae6f44a32826fdc49e87424a2e2b4", + "5c5c6ebcb96d904537f427be204b5016ba7da44d", [] ], "maxBufferSize.spec.js": [ - "2f232776fcce874ef3483854c7bf7c0f9968ec85", + "ab2d5215d5d8cc2959877ef3708254a8a36dffd0", [] ], "maxColorAttachmentBytesPerSample.spec.js": [ - "5d93d1b969e0c7c9c12e7c7e66d7d34c8bdd3497", + "508b436deee981b18b30ef704c2110645663db2f", [] ], "maxColorAttachments.spec.js": [ - "7c291765f80a9df996569cc8d6c8c9651310b86a", + "80fa8fdd7cf3dd4652a9f61cde196bbc9a8fbb37", [] ], "maxComputeInvocationsPerWorkgroup.spec.js": [ - "e68ebf49a0abf3f0a2990ef9827a959dc56c9776", + "6a00ba58053f612416484cf44d93a4cec2150833", [] ], "maxComputeWorkgroupSizeX.spec.js": [ - "877e0cd7c5098e176b67d70039ef26ece11b475c", + "7eaf1e749bf36938d2c0c305381a7cd373a6197e", [] ], "maxComputeWorkgroupSizeY.spec.js": [ - "b4dbd592dedbccf2870c44fb12e40a0bda585d73", + "5a24d646c18f24a7f8de793ba611a21a1f673d3e", [] ], "maxComputeWorkgroupSizeZ.spec.js": [ - "b77ffb9d316c5202d247fc16e81ed8c1b3a8d26b", + "dbd035de10909d575e83f877599254976a0e1e21", [] ], "maxComputeWorkgroupStorageSize.spec.js": [ - "c4f2a3c6c38333fcd4a6aa0110cbb32243963087", + "2034364a5f27d0dea5b9b6f2685c5fd1ab8b75d2", [] ], "maxComputeWorkgroupsPerDimension.spec.js": [ - "f988ac77ee3aa835c1dad983d6ba29dc97113d76", + "6c43c8da1cb46724f5e4c0441a136e943a905921", [] ], "maxDynamicStorageBuffersPerPipelineLayout.spec.js": [ - "db8491c888cc0e53d9f66d8a4522b709ef1fe5ac", + "ffd02e5905bf7c81963af1ce184d3fe01cdbbb67", [] ], "maxDynamicUniformBuffersPerPipelineLayout.spec.js": [ - "546a3e1c95531ea40383b43d94b01c02de4a04fb", + "dba8f547476e4384061696898a6dfe3d8077c7da", [] ], "maxInterStageShaderComponents.spec.js": [ - "d156fc326c564a938749866dd38530ff88802b1a", + "472630a7bf3689866ba5b428de7ff060c2314da8", [] ], "maxInterStageShaderVariables.spec.js": [ - "ccba23d513b2800c0e3e78a101dc4fe998336ae4", + "3fe1b4108d8db91ccdfbc14c64b5c38deb65ab31", [] ], "maxSampledTexturesPerShaderStage.spec.js": [ - "24c19427989dcfe31454eea038defc345ad28522", + "07d19ad59634404681d5127997cae26fc35e719f", [] ], "maxSamplersPerShaderStage.spec.js": [ - "cc53aff55ab01a09e114ffced96d08a8fb7540a6", + "c3bd3428ce980f40fe258c6d9ab64ddde678b799", [] ], "maxStorageBufferBindingSize.spec.js": [ - "b49ba5747c306e5e6bf5a39135093a16d61659ad", + "93052a8d725352de59e0b702d102004db9249710", [] ], "maxStorageBuffersPerShaderStage.spec.js": [ - "866b920f83ab2b96707ab06295d6e0969fb64d36", + "1c09dcfcfd8af87dc43079f6f6f854df3c8a95ff", [] ], "maxStorageTexturesPerShaderStage.spec.js": [ - "c3bef558630a7777e9e4264835c2ab93ada8cab7", + "5005ae35fe0d471e85701ec1e12d2338f2c8f106", [] ], "maxTextureArrayLayers.spec.js": [ - "4ec58b166005c2aaa0b00c6a737283946a85d1e1", + "7a9cc1e23085fa16527a7d6732e455d7a3f895a2", [] ], "maxTextureDimension1D.spec.js": [ - "a7f6ab02713f7a0bbc4e1f1ae087ee574fb01ecb", + "3d4608dde35ff03c580598d0c3d4ea312c9dfe2a", [] ], "maxTextureDimension2D.spec.js": [ - "69313ca15dffaf3cfb9fc1368090fc9e0aed5159", + "5f3b3a4def2f0b9a84df5dc214ee6aa353b093a9", [] ], "maxTextureDimension3D.spec.js": [ - "fa3f13ddf3a8686f8948b5fd0bac73107420efd5", + "74108cc85edcb7899c8053a7f3e4608d126a03ec", [] ], "maxUniformBufferBindingSize.spec.js": [ - "f8c2bfe9871987f4816562831e88094d311ae155", + "40b22ed60bb0a139e49cabc38489c19554f10e90", [] ], "maxUniformBuffersPerShaderStage.spec.js": [ - "a676a05ad60143d7e37a416175ecc4500c93fc00", + "191493046a3232260381dd68ccc381151986df15", [] ], "maxVertexAttributes.spec.js": [ - "79a44956c15d3527a09098ac418951a11888540e", + "8908742821ce694304301bdd32c261acb81d4262", [] ], "maxVertexBufferArrayStride.spec.js": [ - "a4688ac1acf1f9a34bec47aa3fb482908eaf30d5", + "2879e4022d0ae3408eba8bec3081a7db507dab5f", [] ], "maxVertexBuffers.spec.js": [ - "306f2c0523ad773ab5207939304f2f13904edc63", + "860c40687e8ed39cf615aefd0f37c6707f74181d", [] ], "minStorageBufferOffsetAlignment.spec.js": [ - "cb5b9380848c1184e0bebe48e570d0a72dadb54e", + "5735818916e0c0562156914dbf9852c99d13c3bc", [] ], "minUniformBufferOffsetAlignment.spec.js": [ - "c5003d5c1a0a84c037bb55e1b3bfc95ffe9a1321", + "93d2b3eacf7fe5946ed3cef19061b12d77752241", [] ] } }, "compute_pipeline.spec.js": [ - "30f4abc06363f9554d61b06c5f867562cd9ce6f0", + "3d2c5a7641bd9e32f5e7c14b411df197fc6a6ded", [] ], "createBindGroup.spec.js": [ - "ba0ea041c233f8fbdac62817a70f3948dc3b6e71", + "283fe97fd247ba81b76b63e3027264b5f96bc76a", [] ], "createBindGroupLayout.spec.js": [ - "5c9994833ae847ade4accef1411ba1f6f2b243d7", + "b5d98f8d44d2426592eea40e4eb2e825606cd1fe", [] ], "createPipelineLayout.spec.js": [ - "507d14c0d831acc60022998a1efac165e26e69a0", + "3d53eb703bc1226593ac294c6bd496a949bfdac4", [] ], "createSampler.spec.js": [ - "e49ca260fffadbf3381ac67522a6e331230d72da", + "7e198d00e083ef262f682b75cd1e5ceb18a57f52", [] ], "createTexture.spec.js": [ - "b89f528d9a5c8e8a937e641d4606132c358ed6b4", + "9f78c2e25ac75b0e70121377c27468c5857f45ff", [] ], "createView.spec.js": [ - "5341b2a17fe3cfd5db177a48a933cd4f21848a32", + "ed7831fae6e0e14ee708b65094fa1792dea26810", [] ], "debugMarker.spec.js": [ - "f6e247b66b901e0cf330b2647a09c97c3a9910f0", + "c042630d6bf3f86af0b8a5e803edb26071c0974c", [] ], "encoding": { "beginComputePass.spec.js": [ - "662b130bda6dbf53b61f3f289145331383732322", + "6ba98492918027bd7177bea9c9fcaf466ad657fa", [] ], "beginRenderPass.spec.js": [ - "9f0bd59e6b887ba54caa8d5e0ef2da7834a2ff28", + "8003268d991d952f583e4a2dfafba9a64bac8647", [] ], "cmds": { "clearBuffer.spec.js": [ - "c788d2a0de945cd805a944c210d31611728c177f", + "839a82741bfda117b3a4e754e4cbb5bcd597ad07", [] ], "compute_pass.spec.js": [ - "6ee13bd622feedad9a12f32965158fcae01fb0bd", + "d810e8757a87d648457fb61881d914617a614031", [] ], "copyBufferToBuffer.spec.js": [ - "cdd011638744e3248bafc5582ad5eafe5d7948f5", + "a7aa2b5b7914e877ffd5b06dadc897c917e689b6", [] ], "copyTextureToTexture.spec.js": [ - "2cd97907bcccb0583bb9596ed7a9fce5b743c414", + "00bf4e83d8177b162cc46da9e63463c7e7bc5a03", [] ], "debug.spec.js": [ - "f923b68d8dfb90586baf2411e08eb06ed502b624", + "98dcdf2dc0ed7f20228f2a0a04b34c76c0174dfd", [] ], "index_access.spec.js": [ - "1aa7ff1c12d4a1e529a82d8b2b33ef697011eb7e", + "744c7e20de8064196a30618ae17326855ed0f6bd", [] ], "render": { "draw.spec.js": [ - "2b8542b7c7215939ebfd93192eba732aa9083926", + "823a327118f52f83246a75fb342fd541e1c4a005", [] ], "dynamic_state.spec.js": [ - "690c3313a3e8c944a688cc96069d241c1d59fb32", + "048f33029aa5e04abfc7f3de04b38d8e6267b411", [] ], "indirect_draw.spec.js": [ - "2e65bb9555f1516041e4b70bb9e0e1f27f716482", + "476f2ba73ac00fd9e8453092388e59df963e4bea", [] ], "render.js": [ - "ce8cae256e8ee7311eb3cf681aaeb60209953e4b", + "bec9355dda86a9cc89e3cb43569da79913eda79d", [] ], "setIndexBuffer.spec.js": [ - "4bcef96241600efaf3a583937c8c3e8d1abf2679", + "03eea8fce80b9851d24a1760f9f33417d7a00e05", [] ], "setPipeline.spec.js": [ - "1604195b14f6fd8058fd0623cd18d06815e529d5", + "9f1efd9734c8d3c24773c03de9e777c47cca9436", [] ], "setVertexBuffer.spec.js": [ - "7d4151e956ac143af67f9593b90f530714168c3c", + "b5cc30706b76a758e52fb0346b03c8a3e601e03a", [] ], "state_tracking.spec.js": [ - "f560a5693f18c01742f17eba01e71ed55c9895da", + "8d1e0184e7b6d16ca8356217794431538aca99a6", [] ] }, "render_pass.spec.js": [ - "52e2a75514133c51270a66b54d5ff5fb4e261551", + "5374001bfb1bf10fe3c1ebbff6083683fc1124ac", [] ], "setBindGroup.spec.js": [ - "a9bd6fa2e8a6ed5b3e4517f67c3cfa85ee14a7c2", + "bbf30240d12e77b55c6e0107e05fcd2bcd31bc1a", [] ] }, "createRenderBundleEncoder.spec.js": [ - "8849619ffef876c3edc6baa51b30c151acf96264", + "a22353bc0490a6b98f5a6e17100fc12d22527f41", [] ], "encoder_open_state.spec.js": [ - "71741b63c9664b5d5309efc3b751e524f5b36d71", + "b635fe1594d279002292de89d60566d6f1dff4a1", [] ], "encoder_state.spec.js": [ - "fe0333ac21b68e27b359edfe51cbef797858fcf4", + "eec8feb8f3bb2668ce9d28648b0cef424c8f1aed", [] ], "programmable": { "pipeline_bind_group_compat.spec.js": [ - "80528d666e473bd3cae7b7c76fa2e58423c00614", + "b468feda5084048f222ae68d4ec7e1b435cf3fb4", [] ] }, "queries": { "begin_end.spec.js": [ - "040b2790a18980930b00e87f24b1fdec75602237", + "0fd90049d190651c1f8874b3c1c5e76fdead22c8", [] ], "common.js": [ - "4284b2a318d8c5504758740a43d980cbf52e6523", + "bd14a5102439a66b4c5a2029ab40aa770514ebf3", [] ], "general.spec.js": [ - "bb5722d4f06d652905f0634631a246954b914764", - [] - ], - "pipeline_statistics.spec.js": [ - "394c2beb0b405bcb4ed655d9f635c56fe4db6e49", + "984da884301097267d5c7d4dd220de4b9bffaee1", [] ], "resolveQuerySet.spec.js": [ - "54b1b0e11249b2ca64f855545cee7423b55c071c", + "d0b19e4e04f83f786d4a19dba16501611de41f8d", [] ] }, "render_bundle.spec.js": [ - "45b75ae45a831941a68a678197ea170e3b503503", + "bb752533a9c61c8dd6088916a9fa1de8cc4cccc6", [] ] }, "error_scope.spec.js": [ - "8f9278d92e36e1ab54fad2776b15ebda79594fd0", + "cd0fbb4767dc504a91f34586220a61e871e2bf60", [] ], "getBindGroupLayout.spec.js": [ - "96b5675b176142584369c8c19c746b64c31f55ed", + "f6a4addbe3c5f70f67205384d27206894d84d606", [] ], "gpu_external_texture_expiration.spec.js": [ - "39f26111baf983fd66d0c27add63ca10e7097185", + "4afd966260009fe1f6e1fda1aa1cd3aaf7ce89c1", [] ], "image_copy": { "buffer_related.spec.js": [ - "9cd4f423aaca2d82089f08e0f0fd21fa61103822", + "d22e39eecba519adc98b649e91e0dffe3cc3d2c8", [] ], "buffer_texture_copies.spec.js": [ - "be77f994a094c1da96c4b656ce57c08e2afbbcfb", + "9ea44a36d45b43e0b893e223756cb700573c3ca9", [] ], "image_copy.js": [ - "0e2167c1b15558f5d690abaabfda59e91ffb0baf", + "3cffa6b3ce0e05d276d3edf2b30ea2d1f44ae290", [] ], "layout_related.spec.js": [ - "4f0e2810cc3e2a392a406439c3ba8c5fe117bdd0", + "8246aebf289124e0b39f67405720b31bdc73168c", [] ], "texture_related.spec.js": [ - "99365a1c582f69906be6c8ab97101877e4fdf66b", + "7b535935c3cc72542c352578827c6a52fa84b8ea", [] ] }, "layout_shader_compat.spec.js": [ - "376d30f3ff3ef6e632379e3d6a6c3c1ffde78964", + "f579b416d145e2e2b5580d0ff002809f4ef5a119", [] ], "query_set": { "create.spec.js": [ - "762f1880040e8005bd80fe40ec9c45840ba781d3", + "283b92abecd636783c78a9dd574332529d08ff98", [] ], "destroy.spec.js": [ - "197d36e7227f4f173a5ddb1a23a26933f0532b35", + "58e8b03d47a61d4d0a2bc406176a752c92612eba", [] ] }, "queue": { "buffer_mapped.spec.js": [ - "b7a1b8284b57a02323e03e0dbb54bba8e90c9572", + "1647ebd351a0f7f8b38d37a15af065fef00a76a8", [] ], "copyToTexture": { "CopyExternalImageToTexture.spec.js": [ - "20f26672d18382be94e4f4bc2735921000027391", + "a66b9a77472b84cd61e44d6980cde1ad5c778a72", [] ] }, "destroyed": { "buffer.spec.js": [ - "51da169c7a50069e9eef21a431d09bbd674470b8", + "aa740c9200a8e998f5c97b2a5636092545bfeb3f", [] ], "query_set.spec.js": [ - "a7dc93613d8f7091fe1964492c82beb7bbb690c6", + "ac8f810f1608f038a2678df7f9e95d34f70185d3", [] ], "texture.spec.js": [ - "75bce17211be814fc6aa648d9854b40b07bc8a0e", + "eb32232b51a9ddf74ee7d805c967880481b9e05c", [] ] }, "submit.spec.js": [ - "09d36ea983ee104224bd7a0446b6cc9cfd43818b", + "fc31992d58090855f08ef1cf8ef1dfa63492ec79", [] ], "writeBuffer.spec.js": [ - "92e4de6d0c0ed1eb43f26e839b6109a5f8b81835", + "f7cff5bb79c5171e2a97130822a69f043e23874c", [] ], "writeTexture.spec.js": [ - "6882a32b0cd0b8b74aff0a81448d3978f76ce17a", + "31727c7945e3c2e2be30a55d4a41b2eaaa52e657", [] ] }, "render_pass": { "attachment_compatibility.spec.js": [ - "76cb0b23611b4bb6597cc44b9bd41b8e86117d6c", + "6579343b49c4be434ebaf1a1b3461aa0f4b0e2e9", [] ], "render_pass_descriptor.spec.js": [ - "123b97cf2b1cc53043387fbff971c220c4c5918d", + "e8ccb794a1e86a86d9747105046341471becc31e", [] ], "resolve.spec.js": [ - "7f160ec0a737d0d432b554b607b7a85ce6e9c049", + "b9d60091f8fd60b4ef76f9303c6bdb204eebf1b0", [] ] }, "render_pipeline": { "common.js": [ - "0cffe7a60df58becaa62f319ce171b172a16200d", + "2b4283b32c60545eda0019f5f785edfc72e0e592", [] ], "depth_stencil_state.spec.js": [ - "d526b2f18011f66b632562f5fa7a808db5865436", + "d47041b4fc1a3eb07e118ae155715274df56232b", [] ], "fragment_state.spec.js": [ - "76f044e97d58fa1d3b5837c75a7b91b946dce70c", + "6e7a46e943cdb894f9c1360b6e4e973cb8afd37e", [] ], "inter_stage.spec.js": [ - "c081657f82e0b647039fac7dc1a65840d0d89637", + "38691f10a35d30dbfe40fc3ceb99de042c3f7bc8", [] ], "misc.spec.js": [ - "4868df06ccf2b19dfa77bdddfcae5894db6112e5", + "79dddb51e0330a56d26075da6e7e44ea5d3d0cae", [] ], "multisample_state.spec.js": [ - "b9434ec07ac16a4067fe919a2a8e4cdf55ba7a14", + "a4305c1b54ccd99c7363136dbd611ddd85824ea8", [] ], "overrides.spec.js": [ - "bc3d494845874b2aec9d26fa68e95809b542e555", + "e930ecaed6220052fd1414b9af707a9b2c1afcfa", [] ], "primitive_state.spec.js": [ - "16cc827fd2c18bf34587d61d07db0b94cc542584", + "249159a478726cde708ee11ea782a4a631e8ee9b", [] ], "shader_module.spec.js": [ - "d3b7c220930197c505c92b5e85b83c556c3f64d4", + "72b44e6811ebccf883ed86a90f53e04a0b76c69d", [] ], "vertex_state.spec.js": [ - "852f39febd47e32147ffe50df819774921228662", + "c0e23749f96e9c1d567df6b5d1c8b4e5d1251a3d", [] ] }, "resource_usages": { "buffer": { "in_pass_encoder.spec.js": [ - "dc65905d94bbf035de389efa00de3effd4e1a84b", + "d4a6fac4dad8286d1e2f8e9fdac113a7b05dffd8", [] ], "in_pass_misc.spec.js": [ - "aab27f354e967d7098f85f5a5c63a8bf12e556e4", + "189c3be2300e56693bd4640ce22d08eddc64f322", [] ] }, "texture": { "in_pass_encoder.spec.js": [ - "10c74b800614aa93d0b10e8df48731b2471b969f", + "694746123a7617b7e7a249b3aa47bd80e589c12b", [] ], "in_render_common.spec.js": [ - "f8f27fe78b944b351819d5eb0a9f0872ef564b1f", + "eb51f612b43b6b86cd6804754f35f8ce0642acad", [] ], "in_render_misc.spec.js": [ - "83d427982bdcd0efe10a1be2e66e4ebaacf64c98", + "b03f5ea21335a187093a69e7a8c8a2c717ed0090", [] ] } }, "shader_module": { "entry_point.spec.js": [ - "6daa94f6bf6afcf383d790ba0a61ef39b0daa48c", + "c8e7a0109db4ce2277add5ee094d19cf111ea1b5", [] ], "overrides.spec.js": [ - "718c966bd106d1b6738bcf5e10d27c82d15934a9", + "b48066f8a479c6b96f4eaca80bba81beb74afbb6", [] ] }, "state": { "device_lost": { "destroy.spec.js": [ - "b7708dd89d743ee5bd0f49333991ecb7ed8eeae6", + "877044a199e123697eaec09df5b36df75d15925d", [] ] } }, "texture": { "bgra8unorm_storage.spec.js": [ - "7dcb15fb23a8a7dcd2e0e7f621ef9dc95f9ff308", + "57e1c5a23e56913bbdf8d76e23ae150ad91f2fab", [] ], "destroy.spec.js": [ - "056b3529385ab2315fa77f7a4fdb2d7942ad2ba5", + "7f17d0368387bb8882da30e78c4e8ccdf8c6ccd4", [] ], "float32_filterable.spec.js": [ - "1cf5f0a95ea041e48b139dff22e4d4b7d9d1af69", + "05575673f9298b8698e7d55017f51898bf86d743", [] ], "rg11b10ufloat_renderable.spec.js": [ - "174a2b1acbf37d465560719e31a9bf4022fd9139", + "29e796d61852713cb2fcb03aa30ac3a31a804327", [] ] }, "validation_test.js": [ - "b7cbdf040639c27ba61495507136daf599cfcaf8", + "f602556d0a7631ee27d17ee29ab029671d76983e", [] ] } }, "capability_info.js": [ - "e84705448722125266f3d71eab0c983bd269793e", + "3181a498c16bbff8aa8e8b5b5d9afa6569b95ec6", [] ], "compat": { "api": { "validation": { + "createBindGroup.spec.js": [ + "63cc27708830bb38252f74c3f0e6e3b808127090", + [] + ], "encoding": { "cmds": { "copyTextureToBuffer.spec.js": [ - "b2d8d247177ae35144f4dd2f55662957276e4dd1", + "30db0b1a40ff7b141282b89ea8cd8f73f1b4798d", + [] + ], + "copyTextureToTexture.spec.js": [ + "e86639320171f4450ae67ac12d134653e9d57c34", [] ] }, "programmable": { "pipeline_bind_group_compat.spec.js": [ - "33952b9e53b38c43d13e472cf1dc1ba38938d86f", + "8a3d64fe5494431f8e4fff99e62d75a7535dddf3", [] ] } }, "render_pipeline": { "fragment_state.spec.js": [ - "b3c79f67528544a8cb80e2cbd81ff3c74b89c48b", + "b3c41daafa0563885a2f00b5727a92c79fa727a3", [] ], "shader_module.spec.js": [ - "b20e11b3ae4d9c04e793447c9b1085d24ed15d52", + "da7a35dfd287a78f6c2345c4ed0c289b94fd27b8", [] ], "vertex_state.spec.js": [ - "c1c12910812a113fd2bd537269089bfe4cdb6e89", + "d5ba060e8366d7402fc099ecb38dc7a5ce90143b", [] ] }, "texture": { "createTexture.spec.js": [ - "9104a4293fafe309a97ad72ab367cb6dec816c81", + "6a108c6da11e39fd938c4f339569070886f24b30", [] ], "cubeArray.spec.js": [ - "9222c336c0f905c1d2aa38e2c57307be8e44b8da", + "ed3c96ec346938e3433a3e0ebed9a8c7509a5cea", [] ] } } }, "compatibility_test.js": [ - "f611626d4f0cd29ad2d5f02f2863169fb065ad94", + "217dbc0ac10d534dac6c286c1966314d1248d13d", [] ] }, "constants.js": [ - "ff512c3f6bcf43b2d095c7d0066e175fe41a70e5", + "1a01173428aac450bfca95c6bc1e9c25ab961a55", [] ], "examples.spec.js": [ - "ef61d3a40d08679543f12f0bda0f11b8cb089867", + "ca72493de6758a0c84a79ad7d62bf3220c90dc3f", [] ], "format_info.js": [ - "5a69d983b900d9711989950730d76ce48a295c8b", + "f23a11356a95a5ddd2233e14194c671504102060", [] ], "gpu_test.js": [ - "003552c545913c7edff0a731d994b432bc9057cb", + "e1ea24169b5814416a76eef12a138e95e7ed36b5", [] ], "idl": { "constants": { "flags.spec.js": [ - "3002c49b231e53310cac415879d9902c97d8da79", + "f7005eea26120ea26ea8c77d642fa85b1a209d1e", [] ] }, + "constructable.spec.js": [ + "7104b2e812b8f595472683c414f5b5063cdd9bff", + [] + ], "exposed.html.js": [ - "7ac9f2ef50b0a0f937c6bb45db1843dea85394fb", + "a62aeff86334525c2b7c8d658fa3d420aa417c94", [] ], "idl_test.js": [ - "ae6de5376ee52b90bcbbd6c9455ba02e5c33efc2", + "147266da65bca2bc088d19907bddbf462e6fde0e", [] ] }, "listing.js": [ - "e0dbc7a51f83393b46948936f94dc9814e341bb9", + "f9128482160929c2d8888a0cbcf6f834e7f14297", + [] + ], + "multisample_info.js": [ + "5473d4ca742cf209889266ab99bb8601775c88a1", [] ], "shader": { "execution": { "expression": { "binary": { + "af_addition.cache.js": [ + "402fd1add81d9680b7ba9991e7439a28ce77d590", + [] + ], "af_addition.spec.js": [ - "7fa06b47e4faaf725ecbd41b633cc0dcc4e6ee10", + "44259f01729ea006af14b001fa605f52b1bb83e4", + [] + ], + "af_comparison.cache.js": [ + "382c8f59dd475f41350c57da4919c15d9f501565", [] ], "af_comparison.spec.js": [ - "1d3e2a3314b9660a471e3b98d7448b45b491f1a1", + "e5205ccf1d6c5a2367c690b67bd96cfdd4af3604", + [] + ], + "af_division.cache.js": [ + "867a448b26ab68850095ae004a98de26494cce5c", + [] + ], + "af_division.spec.js": [ + "eea1086518081bff47fec9daf33f37f62d5fe72d", + [] + ], + "af_matrix_addition.cache.js": [ + "3af576a50891e15d817ebc002745f375a7d3dc27", [] ], "af_matrix_addition.spec.js": [ - "420ec0361f229970e4921f12b2aa325c525d1d7b", + "6007298df0b8c7c37000a9d0f4a39573a9a948f9", + [] + ], + "af_matrix_subtraction.cache.js": [ + "ffbe51b3f3cb059df90e85d4c5d15670bcc67f13", [] ], "af_matrix_subtraction.spec.js": [ - "9cd5a1fe53314dd40dcaa221944a82660a730a31", + "8ea6bcbdfb3c2530af25894bfdbb4de8f7ad94f7", + [] + ], + "af_multiplication.cache.js": [ + "210aab7752b5bd7c76afcaa487ac8d1bf0d13985", [] ], "af_multiplication.spec.js": [ - "314f1aa96d7e6dc1bba1087048ed0cf38fe0706c", + "c9e6926635af582b639c63b7c02d56e13e3fef82", + [] + ], + "af_remainder.cache.js": [ + "d75ddd8c72f46e040e97103954f88b7844348e87", + [] + ], + "af_remainder.spec.js": [ + "4abf5d88d50b4d2c57d0d39044511a04d7267cef", + [] + ], + "af_subtraction.cache.js": [ + "ea2adc302f7a3d16ef53970026061fbc93ce5b91", [] ], "af_subtraction.spec.js": [ - "d202c3c4dc923cf64e1a1a6f3afe686e65a5fdb0", + "f1d510c4e6065a93aeccfef4d4b6a1d5de71da54", [] ], "binary.js": [ - "a9a6bd2733c43200a81fc0f0a564686ba357fbdc", + "f3f84db87c9898e5f20af34b54688f8f3ad1ab6d", [] ], "bitwise.spec.js": [ - "f982cc05df4aac150b665619debaff6cc8647e8b", + "c442f5cfa45cf62633bac341ab1710182079dc0c", [] ], "bitwise_shift.spec.js": [ - "be96969d79d6c1a0b3cbfeb27f4cea7c29f72a03", + "ab766ba672a128eda4b521e9928239ec0049875c", [] ], "bool_logical.spec.js": [ - "4dc5ebe3cc375ed2c399acf05129f984a958ab3f", + "52cbe17222e22066a23617d7081924163ca53633", + [] + ], + "f16_addition.cache.js": [ + "deefe3744e4c967d942bdad739078bcde18c235d", [] ], "f16_addition.spec.js": [ - "73d9dba092e8a4355a59225923267fec3daa7aba", + "5f06e3725786d6c04a2629659584451862770915", + [] + ], + "f16_comparison.cache.js": [ + "2c5edd5027352d8edfbf5fac947eb77b82c8b96b", [] ], "f16_comparison.spec.js": [ - "e1a8d983ece19ceb5345b9ade9cbfa8325e6378b", + "b0ca63693167b39a01dc93d10bf49e4ee6c87f41", + [] + ], + "f16_division.cache.js": [ + "bd3335f681ee6fca46c9960e93a817593a4cb6fa", [] ], "f16_division.spec.js": [ - "e10519dfe7f10b49c2f266a78ef97c8a4c1bc07a", + "8284b4550f26cf31fa107008fd3fb319108c874c", + [] + ], + "f16_matrix_addition.cache.js": [ + "fb3140a58ab0dba299453b52fc62faa581bdcb22", [] ], "f16_matrix_addition.spec.js": [ - "1c21bfbdb85df72fc7a2dcb0a8fd96280c96c31a", + "cf9cedd8d5eaf76b49a4860e50a2ffc4ad8efcea", + [] + ], + "f16_matrix_matrix_multiplication.cache.js": [ + "356c64e3e0901fec9dbce3af133f20e64c913a8a", [] ], "f16_matrix_matrix_multiplication.spec.js": [ - "2e9c94d0aac168a1d68e3d590238815d538d9709", + "a310e0eab6856ce0b5cbec05c8bac8ec1fee4ed4", + [] + ], + "f16_matrix_scalar_multiplication.cache.js": [ + "43776ca14a4bdb68cb5795d365f0c087c81f9268", [] ], "f16_matrix_scalar_multiplication.spec.js": [ - "8c111ab4ed3e4da00e8f95f1360f0982cb5fff52", + "2587945a76143cf104144c23c561f014435aa2da", + [] + ], + "f16_matrix_subtraction.cache.js": [ + "f759832ae7072d9fe176e565d72188246bbc8483", [] ], "f16_matrix_subtraction.spec.js": [ - "236da564d783813c06ba23905298a1e3e1d07630", + "9a458db528b2969c4ec57306b1585f5df5cd6215", + [] + ], + "f16_matrix_vector_multiplication.cache.js": [ + "81b117512a140247fcaf3e3d15d1b0c09a2e65c8", [] ], "f16_matrix_vector_multiplication.spec.js": [ - "dcfe2118fc8edd2f31efe25694f95bac9e8ce417", + "f7be6036f3a5e184d00db764571b6453dc358e5e", + [] + ], + "f16_multiplication.cache.js": [ + "35ad00642604915e65a81d404f4732d7ed673ab8", [] ], "f16_multiplication.spec.js": [ - "a6ce77c433b4dc7917c18869eed316ce75cd7b05", + "acb36d472e81d615a244aacc20bab910b3222382", + [] + ], + "f16_remainder.cache.js": [ + "816fd1d5101bb84172c2807f1339088057c04587", [] ], "f16_remainder.spec.js": [ - "31068964f8d68098d3193d751b905c119adfeb2f", + "8d9437d103369abee478b2e6c5a9fbbb86aeec6e", + [] + ], + "f16_subtraction.cache.js": [ + "65ff0d7f18392be3b4781c37350a843a5850919b", [] ], "f16_subtraction.spec.js": [ - "195cf7d7627546b104dffc6fe23e08a244ca6390", + "90fe379dc2974f9bb6f355a19efdb94b410e1644", + [] + ], + "f32_addition.cache.js": [ + "65c280ce3bf491018256e411f5e451283388e808", [] ], "f32_addition.spec.js": [ - "50a134831545b38a128a7687c67a22b01a3e4715", + "d1372b80273c7bf25df1f5c8cc602b1f9fcdf57e", + [] + ], + "f32_comparison.cache.js": [ + "6ed518e519f3bacbc84e60c47e7521fbbb9d5105", [] ], "f32_comparison.spec.js": [ - "17f83c7f5b65efb58f1c26d9faba296493abf262", + "95990ebc16784431ce13fe8e525be9e974f8fde7", + [] + ], + "f32_division.cache.js": [ + "987cb3676f2e38cb0f359ac6ddb41e0102557b10", [] ], "f32_division.spec.js": [ - "9f5d4dc53eabe119b8fbc347b1fa4e247ea58694", + "a9180e950c77ded3240a65a5bcce22148be839ca", + [] + ], + "f32_matrix_addition.cache.js": [ + "b3c7bec49224eca5e63d9b75600ad63f062de8a7", [] ], "f32_matrix_addition.spec.js": [ - "119099de6166c417a57e6299eea5a97ddbd6dd80", + "14cba2293ef1137a4cc58777f9bdc888ce30eb99", + [] + ], + "f32_matrix_matrix_multiplication.cache.js": [ + "4d5382f6495480e2e23d2ad308fedad4167dae29", [] ], "f32_matrix_matrix_multiplication.spec.js": [ - "df119808726f2ef8355cc5902a752bbd096f8503", + "ada32250a7647c231a052ee35293702ada5d5c6b", + [] + ], + "f32_matrix_scalar_multiplication.cache.js": [ + "cc3321acb703b7cfd4eda83b434358613a17bcd9", [] ], "f32_matrix_scalar_multiplication.spec.js": [ - "82edc6eb2b1dfacc195793ef0b655314ff8f62bc", + "d7c0c2b04f742f2ea4d0a2a892776bb919cec034", + [] + ], + "f32_matrix_subtraction.cache.js": [ + "61a60d8e493e2c50e3a77ce5a5fe3907d71a2535", [] ], "f32_matrix_subtraction.spec.js": [ - "4a5eb65e6f0cd12d22847048a6b4f475360cfe83", + "beb7d0dac26f259d85ec20460a4d3a23918817ef", + [] + ], + "f32_matrix_vector_multiplication.cache.js": [ + "778c0500f832cd23e0bb84ca350f41d273af01bf", [] ], "f32_matrix_vector_multiplication.spec.js": [ - "0ec422536dc0d52773a16e906a9e2be34bd10af5", + "ed1f21028d73d3d4a3d093f7625a416192fff9b8", + [] + ], + "f32_multiplication.cache.js": [ + "3135f87b29aa90e92c79ff62b05d4c69b2b5f1d1", [] ], "f32_multiplication.spec.js": [ - "59fb529e66e853b8823ee37fe68cae6a307079d6", + "0420096d7a061baccbc575bfa73d2abf7bc6f632", + [] + ], + "f32_remainder.cache.js": [ + "62f9c4f85cf5ea34323f3087d96e84186e6ec1b8", [] ], "f32_remainder.spec.js": [ - "41008bdd2bcf1b24f901bd840d3673d7bc88a839", + "6e7d4cffc55b0b35dc5da9611f3b183ee95746b2", + [] + ], + "f32_subtraction.cache.js": [ + "d328133b14d1c70d4214204689a734da292bf790", [] ], "f32_subtraction.spec.js": [ - "d6d6ab216f717a41ad5491d7e1d6f80d4ca57c05", + "dd4dab1c8f0f78fc2f274e82e0857196ddb29f9c", + [] + ], + "i32_arithmetic.cache.js": [ + "c1ceca4ec68a4e86db7e656af669dd30d11100b9", [] ], "i32_arithmetic.spec.js": [ - "2c92f729d430b5f0fda92f9cae5c5720771bb5ca", + "c2abea5b26a2af8d3cf9cf7ed355014b8aeedc63", + [] + ], + "i32_comparison.cache.js": [ + "4576051d1ddf0d62c981662f4ee1c3a539ac92ce", [] ], "i32_comparison.spec.js": [ - "d02a96b073057cbd56292eb1c9c6ddea91b4326c", + "4c9d7d664292273cc7e338b8289ec1e0b15f4083", + [] + ], + "u32_arithmetic.cache.js": [ + "cf7ffcf99ed6290897d2e857015ea23c101928cf", [] ], "u32_arithmetic.spec.js": [ - "16a7fd3d39034b3de7bedc64d796f61dd2873b2a", + "ef1c480e5c4b753b0e2fc47de1f327eb587b9a01", + [] + ], + "u32_comparison.cache.js": [ + "cd4e4c067eecbee30a2f6c3ce5513926380bc651", [] ], "u32_comparison.spec.js": [ - "47a67b18e94674f5acc95e76d9e0de39c5cb8ed9", + "917371129e88ba3b44f721256765f972912500f7", [] ] }, "call": { "builtin": { + "abs.cache.js": [ + "8e2e0ea58f54153a543e9064e55faf83bbbd1841", + [] + ], "abs.spec.js": [ - "f342db70547445de4abf7086772dcec3a079bab1", + "6069839777f88702f3afd29374edd3193ddb67d3", + [] + ], + "acos.cache.js": [ + "d71dcffc6ddb81e6ef35af7348ece59288556299", [] ], "acos.spec.js": [ - "9079adbd9efb7024d46481f96ab78a260f9babb7", + "a36a7a88f7865d9ea7253f993ac618aacddbabc6", + [] + ], + "acosh.cache.js": [ + "acd8029a17ed793e18d3bbfdec7490b3548fd335", [] ], "acosh.spec.js": [ - "fe537ba3ce0ff4788934484f1d3a9553c50a0b4f", + "5b6074692631e451829f4d8e9aafcc370b3110e4", [] ], "all.spec.js": [ - "cb8b32953fff1ab75347997d63d23a9fc6204200", + "09bbb7c02e04f6c8d8efb3289b2ea6c94eef5718", [] ], "any.spec.js": [ - "9f5b4524f1197dbacb26e210d33a551533fbf829", + "119efbb2be971afd7b4870d0cd4a4113e146f185", [] ], "arrayLength.spec.js": [ - "e31fbd832a00c91e44f6a9b62a043458c059dc53", + "460332e6916a9ace6a4d5e08a381cc85b4b44032", + [] + ], + "asin.cache.js": [ + "c7991c9bc851870e45441a0fcdef358304a9c13e", [] ], "asin.spec.js": [ - "0426a9bd423747926c131431faefa880e3f35f49", + "0519361a7149578f0bebecc9e471017092fd4240", + [] + ], + "asinh.cache.js": [ + "b45ca00e39a7de6ec1a9c98f151c8dcbd07a8c57", [] ], "asinh.spec.js": [ - "988abf62b5aa7bed8a0f9a5956dfe641af8eb3d3", + "6e2bd6f9b5af5bc824c205f4cc8b25e7113de63e", + [] + ], + "atan.cache.js": [ + "97ce4e70cc19060c8f017fa4c2182491b2235754", [] ], "atan.spec.js": [ - "d14a4a2f82dbf52606fc4d583ca09e0b681b2763", + "2ede98c62374e430f5539be47f1ec903229e42b0", + [] + ], + "atan2.cache.js": [ + "5363a81fd7f603e8373de845e4d418596bf90359", [] ], "atan2.spec.js": [ - "185d104062b353bcdc2b31894593a09f008475a1", + "da3cd9fe2872ef702cc9b2ef98b604f2fa2aa358", + [] + ], + "atanh.cache.js": [ + "d34cd70b75bb0a80b3aab27cd650e0fff7f4e939", [] ], "atanh.spec.js": [ - "1d74bb11a2cb8bb40c5a3fa0f6c15afa6d7c3d1a", + "b3a150bd70df1e8bbc6a41dec54df49638a8e2d4", [] ], "atomics": { "atomicAdd.spec.js": [ - "96287e29989e7615e14a0934a5e54b502de45da0", + "3fc910b3405049466e54a1d1c1e5d21bd422faba", [] ], "atomicAnd.spec.js": [ - "e6acf52beeacd6a847c5c52243c65742b0f7f619", + "ebc125b3fbb804285fd3c0b3941af7b5288c9e97", [] ], "atomicCompareExchangeWeak.spec.js": [ - "de35fb06c144b1ab0b27d1d7b2b19fe99a723292", + "60d1488c0bab224482c5a5427bc32a04ac54968d", [] ], "atomicExchange.spec.js": [ - "34a9be654e8c2b55506c31871843b73bc65cc758", + "92717005f7a9d4fcaf91f7c52b4fd5a79028f223", [] ], "atomicLoad.spec.js": [ - "1bcc8bc560142f243c5b4cfbb09d96356890bdda", + "dca1a6b9d92aa323b5ca8c189d0044a5400ddead", [] ], "atomicMax.spec.js": [ - "74213806fc0b06daece9964b0e0f7de8815f605a", + "ae058e909c57c420efb899acfb06724b475dc1f6", [] ], "atomicMin.spec.js": [ - "9f898123ae72733b4e3a9d786300cfa720833865", + "7d6052c2b17ba0459208925b311842ce1b99de2a", [] ], "atomicOr.spec.js": [ - "f707d23b9bf4124724ca98190f8038bbea333970", + "32c92d21cca42b35b50933e3eb9c0a0fc5b98cfc", [] ], "atomicStore.spec.js": [ - "0958a35ef94f36bd8df152925f239769c4f5f6ee", + "1b9b7f70bd977227a3f94aa178de49c7ad8d70b3", [] ], "atomicSub.spec.js": [ - "20847e48d122d9c3e41cec3b13dbb648178352c2", + "47b1ff8ec5ad2c7b091a6aca906b1988de76383a", [] ], "atomicXor.spec.js": [ - "7ecb7586e903aef53979bcedba5fabe94df454a1", + "88d96211b8384c2590ca7ed07983be2ceb553ad4", [] ], "harness.js": [ - "f5f7d83fcf6f3d223362238339dae16230156e11", + "986814d425e0c8d2a65a3d23c974e8464d72c191", [] ] }, + "bitcast.cache.js": [ + "21311e2f8789b7d0a96243986b453f971686eb59", + [] + ], "bitcast.spec.js": [ - "0165d0121e39c26c4d13360d3f72426112044724", + "d39ed4f6ce10408043ac0ef83d465b9a6d02482e", [] ], "builtin.js": [ - "54b9bcc3f377c6725ed1ea1826d1ca935b4ea950", + "cd3e52298c0efd3a7b2e978b1ef2a3061b87609f", + [] + ], + "ceil.cache.js": [ + "9faa6b897267227b0d441684b2b34fcc89ebabf3", [] ], "ceil.spec.js": [ - "e8d9bedc8dd063e3e6c219e6e1fd70c03d883016", + "f634fcdcbec87b909a4d3f8d9bc73bfdd3122cb9", + [] + ], + "clamp.cache.js": [ + "189518963dfbd6cca5f7fbcba7d5fc2b706c0d6a", [] ], "clamp.spec.js": [ - "49559fc382b9b585c9e9dee088c1a083e5c3362f", + "51ff607c6db684f8a67c037509a76a8d154460f4", + [] + ], + "cos.cache.js": [ + "3e24070aad31c9e1c2a5b4bb285f7d7f49c72c2a", [] ], "cos.spec.js": [ - "c82efe4fd46577d10f2ff3a28dc57ce8cf0abfb6", + "4e2edf6e2f8aa1fb446852f9d7ad6f0c687b1f80", + [] + ], + "cosh.cache.js": [ + "fca56714d1db5c21ce5eeebc75f30af5629464ec", [] ], "cosh.spec.js": [ - "e478587408cbd6d4bd100987a18eb5d54cd98c89", + "756f23dcbdcf15113b07cc0c17c6b56ed54be561", [] ], "countLeadingZeros.spec.js": [ - "51a7a5ee1ee57fc9775ac8714746df311a0bfad9", + "8622bef96e5e0ec2554d9437c0352f7e2da88ef8", [] ], "countOneBits.spec.js": [ - "b6a82da5e5f7b12ea98c4f1d2cdc53dedff193ec", + "500b02ba61518c542a861c9b7a4b5f4824be6d4d", [] ], "countTrailingZeros.spec.js": [ - "e0a0421702d0fef9f92a48a577cd88adecc4f10b", + "ca3f78ee0518e1da3c27bdb23dbbfcfcfdc12d22", + [] + ], + "cross.cache.js": [ + "12cee9a67fa5751485b526e9d61a1de1168f79a1", [] ], "cross.spec.js": [ - "22a07688c17cd9db5d87ab213b866b73dfea009e", + "f192ac8947092739d26e428a1980c8b4624ce246", + [] + ], + "degrees.cache.js": [ + "c9d3faca94a599410a5feaa208dbbf1d91f7c749", [] ], "degrees.spec.js": [ - "818d0d8adea003bca07ad4880b69e8dff7a0dad4", + "4e3d42b6d6b61eeb5d0265dea84e69365412ef66", + [] + ], + "determinant.cache.js": [ + "729d86ad795f60aa7c708d996f55e8c2c923eb38", [] ], "determinant.spec.js": [ - "9f4ca71e685c68c6dadd93ee9e27bf5e79d75549", + "1791ed754ee0afd515496f296325bada8d5b4ab8", + [] + ], + "distance.cache.js": [ + "faeab44a9b092441b8ebe00a041eec037bc938c4", [] ], "distance.spec.js": [ - "b03ec5bd9f1d011bae33905628d567039b0a4304", + "72f6b686c241411616f87466282e5d819c0f5768", + [] + ], + "dot.cache.js": [ + "56d12bef598babdc7e0e5eaeacdc382d90568626", [] ], "dot.spec.js": [ - "0c4a04ea842c8f76a7c17c17de973ecba36fd19a", + "c23848f11f48228c9a634eb1f89539a14c7b99dd", [] ], "dpdx.spec.js": [ - "c4d5413b70159eaeb931f7c1e755a6e9442ad500", + "9d595f7d23667b9836967319ff5cf5fc354aeab5", [] ], "dpdxCoarse.spec.js": [ - "8b37d1982bdbfa51558325d5fb658166cb79f72f", + "db31f42df169b0677ab6398ec8d77fe23de19e98", [] ], "dpdxFine.spec.js": [ - "57c1f49b4771e8737f151e34acc1ca41438dce53", + "5eaf79243913827b24f05c629044e6142f0c8e15", [] ], "dpdy.spec.js": [ - "9e9debdf5829aa2d6884559fc3b3503ea777eac5", + "edba9b14c14c2de7e861e695664d8115ee483c1e", [] ], "dpdyCoarse.spec.js": [ - "f477a883305e5a6dbdb79199cdadf27e7260d77c", + "f002a587b6b781105f0d4215b48a63ba348c025a", [] ], "dpdyFine.spec.js": [ - "dc986daeec85ed37c34f77382984842f188c7a91", + "405914acf19d14c1c79b38071dbb846a17dbc222", + [] + ], + "exp.cache.js": [ + "6fff05ae76848814783e165a486e8caa32734ab5", [] ], "exp.spec.js": [ - "cc71398ef9f1f3eba6cde9b77bfdcef01ce6abaf", + "e06613beb26d8064eb186b65a72c54174a52763b", + [] + ], + "exp2.cache.js": [ + "df2b9edd41a72e3df9cdc65b6d8eaf840a1d74d5", [] ], "exp2.spec.js": [ - "59fe1646befdb1299117cfd7fc02f1fe5f06c263", + "04f381730c6688fa0e65f3cc12601e98463b8e54", [] ], "extractBits.spec.js": [ - "cc6b466092f5255add594932f69d4f1fcf20c7cb", + "3faccc58a7bfad67faf76eca41aef9b00f72d880", + [] + ], + "faceForward.cache.js": [ + "cd3b559955b2eca01489559ca69e8e68a600b488", [] ], "faceForward.spec.js": [ - "125fd0ec2b44b3c8d9dd59395848dfb76b8e67bd", + "ab96642124d3f63c6907271843dacc2fb67f2144", [] ], "firstLeadingBit.spec.js": [ - "c5d58bfb39781bc35040c0010058df2ddcc3a694", + "fd6b6359f124834b231dbad3c5b3fe51d1a288dc", [] ], "firstTrailingBit.spec.js": [ - "29c46690b6abe77cd4addc4e7c23d053eb4c1137", + "73071c38085350769d1b97f831ed2599ef70e9b6", + [] + ], + "floor.cache.js": [ + "a15ef4c952faa4c5dfee8a69fd43bdd8aa71b00d", [] ], "floor.spec.js": [ - "edde8ce867eeba9cddc882422250caf6b51c0a5d", + "dbb2704de205ac55243887c8860d71e7122b5d78", + [] + ], + "fma.cache.js": [ + "c4da19cfa84425e28de3b33013f1e9ea4fe021eb", [] ], "fma.spec.js": [ - "ee4e4ef8590e977db8d16945aa7ad83b8fafd146", + "b9f114ee4049aa15e8d44c51763e4df9e78016dd", + [] + ], + "fract.cache.js": [ + "fbb928745309488431790734fbc85f202e836f8e", [] ], "fract.spec.js": [ - "f03da3bf0e6ab623f9a1e2bb16546910c90be0b4", + "c5a649bd17a3d533ad2d279e4cef2a05696e59a0", + [] + ], + "frexp.cache.js": [ + "2de29328383b71ea9742f3fff65531cfaa9a5664", [] ], "frexp.spec.js": [ - "4c37f33f29ba839cbdb9bad4a4aaa11c068d451d", + "10fa6e72d2f23d1618488b6469c31f851d42546f", [] ], "fwidth.spec.js": [ - "ee33a68ab497d706eca3f8b7a3977cde18025b05", + "2ec40557bbb9fb7dbde4a27f89ab3e7fc56732b7", [] ], "fwidthCoarse.spec.js": [ - "d5df428ebcf7d70ae32769fd2ab8ff4111717c78", + "21c4cce923963f6befe62b951cf81848fc14169f", [] ], "fwidthFine.spec.js": [ - "0bd0ad33d33b023762fd971254b344518fece77d", + "637967371e9aed1bcb67ee01ea9bc42e1fa97031", [] ], "insertBits.spec.js": [ - "262aaa199aaa9f469926fb2967b9876b3cad577e", + "1af24a518991b860e76c8b5c181636bd96fabe64", + [] + ], + "inversesqrt.cache.js": [ + "8d8a9254972b5bd380dfb72f7c92eb60d3adcd8e", [] ], "inversesqrt.spec.js": [ - "74ef5c1c03c5d61ed8cf71f554373b3fa3b93dc5", + "d72b14e2e6e3ca92b0366e3436b31fb4a2d9e5a2", + [] + ], + "ldexp.cache.js": [ + "1c04b45ec25324f6a990d015179a0ce90d9e60da", [] ], "ldexp.spec.js": [ - "49a846c85871162b9859c43d02efc0a2b62024a7", + "0935b09eecbee35ba61986e7b1140de93497c722", + [] + ], + "length.cache.js": [ + "f1bbfeb095199bcd6190f89d3b7bde131b333a37", [] ], "length.spec.js": [ - "f82db383cdb67874971f0e5a47b8041bc6f4b41a", + "ee4138312bc12df01be1e9f7ff888f9da7979ace", + [] + ], + "log.cache.js": [ + "c71324eb1c33f5e05a1be3275f2939f4900f0810", [] ], "log.spec.js": [ - "25f1861086763f6715ab4a68bc70415357e62a4f", + "b49df93f568397eeaca830af2f1580be4dbd9a8b", + [] + ], + "log2.cache.js": [ + "f12e8308173cf97dd8c688f87c0891e7ffc246f5", [] ], "log2.spec.js": [ - "e8ab356cf77236b9c8c8a214c70acd9d35354d1a", + "8fd0dfec1cf7129a4393d7e86831839afd1d06df", + [] + ], + "max.cache.js": [ + "afb67586a3893079fee250d594ff39bc6edf59cd", [] ], "max.spec.js": [ - "e7e7250fe514808380be84f3070cb680925cd8f8", + "d5674b63b135e27340b4130895d0e803c7d7d087", + [] + ], + "min.cache.js": [ + "f77b544f3f633c6ad8bd4f9f5a6c2a92226fcef7", [] ], "min.spec.js": [ - "814211697af7d8a1b28ba39478d5ce1c673e0240", + "bf9116fa5ff4a6338c994e11b8e00761937c6a78", + [] + ], + "mix.cache.js": [ + "88579af0ad522e9af62b1534fe6cce2073587a7a", [] ], "mix.spec.js": [ - "5f58060330bf18cb479bcd9a00697183781beb8d", + "7a6d93eaa6c3a55880f0f45829bc7007e924ef16", + [] + ], + "modf.cache.js": [ + "63f90ec346be384d226fce497b7c9d5c67322325", [] ], "modf.spec.js": [ - "190c02ec86e36fa2a5eacfe6bce05e007780b52c", + "2c88c8bb9cb39b574c9de0b9ab8a91d84bf81737", + [] + ], + "normalize.cache.js": [ + "decd583a70f46886028c29a30e81c571b91a2c56", [] ], "normalize.spec.js": [ - "418e7065856029351abd3e3b9b43e61afb675653", + "ce13fea99b8f19adc8303ae7844f98ade325b1b3", + [] + ], + "pack2x16float.cache.js": [ + "ca204e03b6d7ace316b80cacac78a57e341b356d", [] ], "pack2x16float.spec.js": [ - "591a78eed2406ce14d6355decf083d8b72963d3e", + "317966986b834fef78e803f4d1d3593eb85ba2a1", [] ], "pack2x16snorm.spec.js": [ - "7f6b72bb0271e0b9146ae493cc8bf0295cd37c0d", + "eb73eb4cb3890c271100697bcdacc06afd4928eb", [] ], "pack2x16unorm.spec.js": [ - "5819c25618b33616361046fdebd9ed7568dbb170", + "2648353ada8323d9495eae739e4bb2c3cf5dc8f4", [] ], "pack4x8snorm.spec.js": [ - "f2696b8d6fe57a58ed3ac2d246dfd9b0b207b3fb", + "6668427241c64364d0761e053caf926391e838c7", [] ], "pack4x8unorm.spec.js": [ - "c12cf779445d313baf7a3e8e2684f98b76258761", + "8c23e47719bce3dde57c53a15a6a4a2486c7c85a", + [] + ], + "pow.cache.js": [ + "b166e35b6301864e2ad9e8db004363bb4bd141a6", [] ], "pow.spec.js": [ - "29ebde32908cb0216614b92868d65995622bc3c5", + "3b677b9cb1395a2a6d54d712a16520e31f694423", + [] + ], + "quantizeToF16.cache.js": [ + "1613f4514349caa35c9c08a98ae1bc81b9d1e62c", [] ], "quantizeToF16.spec.js": [ - "d0f37bd04791a28cc29176e37ebbc15aa7b9502a", + "40f5b2f132e39a608788e17637b75305d5a51f79", + [] + ], + "radians.cache.js": [ + "582338e976a8a67c8e93f02d98b1e3b9f3e91a09", [] ], "radians.spec.js": [ - "3da132557e06fdd517ec68dc5e2ac23608ce8603", + "480cd55d5c3e5c61f2654b711ce98841a2152ce4", + [] + ], + "reflect.cache.js": [ + "dbde213306350a317346b8f8e67ecef15575144a", [] ], "reflect.spec.js": [ - "9d93cfd7b5b826519d8deaac7ac24f8de65b28dc", + "a6a59f071047f3f1a37ecd3125c306545eb35992", + [] + ], + "refract.cache.js": [ + "6b2c4b182e998fc5d6d4e256f29aea06381b8152", [] ], "refract.spec.js": [ - "53e77288d007e9896de40360394d6d6bd74ddc36", + "90e39fa252238202abfae590e2d0ce3b385c75e2", [] ], "reverseBits.spec.js": [ - "41f72419dfd10e7caf8329ac52fb1fc84b703b30", + "fc99867f1087a11b87d85d5805ffba7e74309400", + [] + ], + "round.cache.js": [ + "12184af16a28f16139f2d79b2586ea8cc14b56d8", [] ], "round.spec.js": [ - "d6366e5bba242b98a9ae3b79525158a523bf3cc4", + "570f60ed9e80348e0ebe1bacfcfcaf5f3b51bbf3", + [] + ], + "saturate.cache.js": [ + "5552284c2e40e8b3637eb54027eb3628630454ed", [] ], "saturate.spec.js": [ - "f2d997d487d723783dec0d4f3d87dd9195f6b0b7", + "2b63e3305465a36c95b4915ba7ee573e0dd0d55b", [] ], "select.spec.js": [ - "0718bebefd647beea3052590b84663cd038323a5", + "4c681e49cdf5e20762b242b591c47291a56c8dc5", + [] + ], + "sign.cache.js": [ + "a090c5c83dcc508483d89ff706d0aa8a6dad0760", [] ], "sign.spec.js": [ - "4526f52f387c90074dea28d413542278b0f37671", + "aeddf2b558136efb71687c3ea58ceb1f1ac9ccd0", + [] + ], + "sin.cache.js": [ + "67825c91c6f546f4f6a7c8ce2292cbcffd872c5f", [] ], "sin.spec.js": [ - "8883c65bad06cde31d5e1f37e51b7deabad667d3", + "76224e1cace4eabc48accaa4b506a67e5558362e", + [] + ], + "sinh.cache.js": [ + "4dadd1e1e3cd9780c99b2851811048faa1c83d89", [] ], "sinh.spec.js": [ - "62d3f63a16a6221daf9dfd916ec2908d0604d955", + "ffe701e6161745a3eb8e97258864908afa1eb95f", + [] + ], + "smoothstep.cache.js": [ + "5af2eea9f017ea25eb3b6c5a2e1be03c3f868151", [] ], "smoothstep.spec.js": [ - "33f29dcdbf9910269651af3817e8acb07b454415", + "52bda2bf77e5d9b6bf2ed8504d32ecf80ea41b00", + [] + ], + "sqrt.cache.js": [ + "514a734274b8c749fb7d7ee5bffac387f48bd018", [] ], "sqrt.spec.js": [ - "1f80ab40ef64fc008863a6b4950ff53d889ec4bd", + "e01df292609b11c7dc6148c9f8a926792b250295", + [] + ], + "step.cache.js": [ + "96ac3a4f28795673a57a6a9ccdaf9b891426e99b", [] ], "step.spec.js": [ - "100696aab2940b29ec83218b14d128c6d23136fe", + "15ab23462f9431811837b5564e7832f4ada8ea6a", [] ], "storageBarrier.spec.js": [ - "ac7519ea92124194178d00a1fe95d27e2ba02279", + "f5f305c11820ef2163301ffefcd3493016a36cff", + [] + ], + "tan.cache.js": [ + "205cb6d6cfecfaf57353b4264e2185d190127242", [] ], "tan.spec.js": [ - "206d62b2e99657711aba03c8ffef193ff583a77b", + "335e0e229e47258dbd4d0ecccca4f31fa7a30107", + [] + ], + "tanh.cache.js": [ + "d38767af979e960b2977b6d1bcf3f33f4282b810", [] ], "tanh.spec.js": [ - "b10e9f3f0f3a5c98b81609d455ad2143c307fae1", + "8e0d6bbe3ea47478b0e6105927619fa883656259", [] ], "textureDimension.spec.js": [ - "9a5ef4d829d8c349ab5224b0ef214acee03deb97", + "8ed1e289ee46e7361be9ba9a81ae7860bad46d57", [] ], "textureGather.spec.js": [ - "1ecd1283d1d7c7052b03f06c46963dd4b20a4c04", + "162832708f025979c1c089945081aacc2aff91c8", [] ], "textureGatherCompare.spec.js": [ - "ddb24c472e50a8ef1b82c5e84ee6651033e2de7e", + "d029c8cdf5eb65b2f71a8a57ae0bf1e52f91339f", [] ], "textureLoad.spec.js": [ - "c11d20554b581932ef787c548db0bdcf53f43ddc", + "269f841850b441fda26f726964ca0a34408b89fb", [] ], "textureNumLayers.spec.js": [ - "5b0372289da957ca7cdb07dfc8347a22536be758", + "30eeed0e8824db107c4ef4e84041b2f5e8df8b7a", [] ], "textureNumLevels.spec.js": [ - "ae59dd99bbeb1225150f968c9678a127429b03a1", + "69af41b79eccce5afe17ffeb434cb5f92929d4a1", [] ], "textureNumSamples.spec.js": [ - "620d1a7e9dc0f5313da9f330deef2d60837fe6dd", + "c192bffe04b1d7e25c19f2008e0d879d01a66338", [] ], "textureSample.spec.js": [ - "6d39c22531d141bccf7ae6a6480dec2e22dfd72b", + "7e4bbd77441656eaf3dc64338086d57281ea72a7", [] ], "textureSampleBias.spec.js": [ - "f74b3a0ba0d1e39fa4c12360a5a3f81b78ac64c7", + "7594f3ad5ab5b44e89c23486453142f03e00a60a", [] ], "textureSampleCompare.spec.js": [ - "c0a4c2b68aab7e205ebb836659daa756ce783c37", + "9f90e69f6330f379b9ba09be97891c2fee2d3fb2", [] ], "textureSampleCompareLevel.spec.js": [ - "24e7453b6dab9538830bfc9fccfcbaafcd65a3fe", + "f3db871107c893edae4e229602cc690f54c2b41f", [] ], "textureSampleGrad.spec.js": [ - "bb77a66a2722751e41c15ef61f5ff716322820c7", + "dcf121f03885d166d9591306943691afc2f84121", [] ], "textureSampleLevel.spec.js": [ - "5d3b8ca78cf280b9b68cebf5ccab3bdc74c05f17", + "e2cdfff8038e06d01d2f54e6a17a6779ea3dea79", [] ], "textureStore.spec.js": [ - "cd555f429bd0382dfdb4ce6da28c8d9b9193709e", + "24ee130577fb95c9524616b48a521dc49c89febb", + [] + ], + "transpose.cache.js": [ + "a1d6c0d6f6a2df3c64d067a5bc218950875dd61b", [] ], "transpose.spec.js": [ - "ffcf4535714f54854c7c2b2eba75242efbae7039", + "5a919d82ec4ed7b0e6a4a23879dd9d3ab7f2a8dd", + [] + ], + "trunc.cache.js": [ + "33b77ee5d097bb647424b4427a6fdcfabb828ffd", [] ], "trunc.spec.js": [ - "0660e566619059231056125b10b5dfc3578c15a8", + "ddd7549a70f453c1b37aca062606d880126f0be4", + [] + ], + "unpack2x16float.cache.js": [ + "d6415bb6d6f7756c64c27a4fe2e4f0174a9bce08", [] ], "unpack2x16float.spec.js": [ - "21cf6729ee37c99f9c7802a10da7ddaa887a9d72", + "47fdf10edd795a9c57c6565e2e6dd007d96a6d48", + [] + ], + "unpack2x16snorm.cache.js": [ + "f29307ae602efdca7c2352b8890e2ba14a714216", [] ], "unpack2x16snorm.spec.js": [ - "6675690f82434cf1760e01100da0f9900c6fc253", + "7c832f3d6bd7af83f33712fe7bbdd4bcf15ce722", + [] + ], + "unpack2x16unorm.cache.js": [ + "ba72ff60a7eca24b2bc2ffdbd3c9baf89d30525a", [] ], "unpack2x16unorm.spec.js": [ - "9b115299ebdfc72ca80145a2624e494414451355", + "0f50805c78382c5707c4bb1531d15a98392dd056", + [] + ], + "unpack4x8snorm.cache.js": [ + "aa9331fa490376893abc382f9a6ffa81b5af9cca", [] ], "unpack4x8snorm.spec.js": [ - "430316d14f930665ced45fdb51a375e6aa4a380c", + "f46549c33d7b19b354cc21f07846995b65e36bca", + [] + ], + "unpack4x8unorm.cache.js": [ + "c012505d3a78a83c2e8aa3366a4225e9cbd43c50", [] ], "unpack4x8unorm.spec.js": [ - "ce465152145409a3c29211687aa5f680dfd7a861", + "faffee422901f6267fcf650a8376235fb1c9918b", [] ], "utils.js": [ - "cdc7d1a985079d9c170842127b3409d81c461975", + "448d369d7f18c6e50621aff0bf3c696d96550c11", [] ], "workgroupBarrier.spec.js": [ - "7bc3ecf3a4b7042aad924e01ce3b739833f3438b", + "96848767ffe2ef99fa58915b5264e4055692f980", [] ] } }, + "case.js": [ + "e361bf370db07639c20a2e42668c8e42af5a4d8a", + [] + ], "case_cache.js": [ - "ee2f36423d6009f6f4f659caa5404700c1760bb7", + "261c55d762a5945b6bbf488f58988b4095406e5e", + [] + ], + "expectation.js": [ + "f5c2726bbac6f8dc2c310d11c8aba8dc722b944a", [] ], "expression.js": [ - "602353daa2eeeb387b78878a27e6be132cb93a1b", + "834d022d0778dd461a8551659fd81d00d98e699e", + [] + ], + "interval_filter.js": [ + "d70e087a74c7bf305c25554ba1cc3a0df66c3abf", [] ], "unary": { + "af_arithmetic.cache.js": [ + "97917cb2a32bd45f553e7b4a8fd8ecc08d2dde56", + [] + ], "af_arithmetic.spec.js": [ - "faeeb97245e5f636301f6bc0a54112a4fbefecfa", + "868057236bfdcdf50075d597a82f829337b9f15c", + [] + ], + "af_assignment.cache.js": [ + "70d50ca609a20806e7445b8f70c315979f5251c6", [] ], "af_assignment.spec.js": [ - "0428a97e70b553f3192693133324767b6a51a4e9", + "fdd793e1825f4f9b4dd053f67c4d0b4830428fb6", + [] + ], + "bool_conversion.cache.js": [ + "f0ca9057744878447fc2b3da0c42749d9ba794b4", [] ], "bool_conversion.spec.js": [ - "a56b6850fd3c7c5dee38c38568ee1990bd113dda", + "22ff61aa00d98c769f4c221530f253c5f5ba56c4", [] ], "bool_logical.spec.js": [ - "fb281d04b5020961eeab0365d961ec6f3b6b2f5d", + "ac8da84846d98fd31b597c3f747e9a57805fed55", + [] + ], + "f16_arithmetic.cache.js": [ + "5c68b275cb0845b23fcc82f287061eeab9b8655d", [] ], "f16_arithmetic.spec.js": [ - "78ce83b41973bc866a10aa02e4cfadd0cf066ec2", + "fd85be26dd99e0c9e9434c583f0aa2fe5d11ada1", + [] + ], + "f16_conversion.cache.js": [ + "e7ffcd20180afad4c47e5aae71660ddd5d727847", [] ], "f16_conversion.spec.js": [ - "169dd8bf42468df06a0cc9584e27247f18987018", + "562b68b339609c63e3b39ad328311f9567ba30b8", + [] + ], + "f32_arithmetic.cache.js": [ + "cdd991a4f9b4f980062d78c290e824cd81c483ac", [] ], "f32_arithmetic.spec.js": [ - "bbd8c8afc966079a1be7b6f791aa65a75bd0f7d9", + "bb6861b1d66d8e699a7986e396d19ec3644906f5", + [] + ], + "f32_conversion.cache.js": [ + "eb8fbe2c790b6f0a779a7d76f1d87a097d40740e", [] ], "f32_conversion.spec.js": [ - "b1902e4d51d4b48302530c21f1b516063d9faee5", + "6cb4c32294973d98e9488233486f5101363d814e", + [] + ], + "i32_arithmetic.cache.js": [ + "84708efa74632d92b991b8ec5f1e9520eae19556", [] ], "i32_arithmetic.spec.js": [ - "d2afcec3acd291f8f338446971a4493eae86b390", + "56a50f0814d870315aa5c0656f7b646cca5df846", + [] + ], + "i32_complement.cache.js": [ + "00c8dd8019488fba0348e2c2f7631807655c9d9a", [] ], "i32_complement.spec.js": [ - "25b0bbce6ccdc24db55a31461ea336d28ed11037", + "f3f4c71e8bb54b0996a05889fdeb391efd3759cd", + [] + ], + "i32_conversion.cache.js": [ + "39abb6a1cc067f75b0beeba59eb71cb03eec6ae5", [] ], "i32_conversion.spec.js": [ - "b76b7e1466d6e04d0784403123f415dae4c66a12", + "797df86bba7f17169511600e2aa875e07820b483", + [] + ], + "u32_complement.cache.js": [ + "816093a7db5a9dc6216023fc89c20a8f3af895dd", [] ], "u32_complement.spec.js": [ - "ce189d434d0a5429e2dfc40d17ff9b17dc811aa8", + "214e856c8809b38e1ed110c5b6ab374ea1425c70", + [] + ], + "u32_conversion.cache.js": [ + "33317a6e918a00e90ed01c64faee1f142331da02", [] ], "u32_conversion.spec.js": [ - "573d9478d900a9ed33440a5e880fb55ff600d4aa", + "7a9894d7dadd293750a8cf05efd74aff2b5b30b7", [] ], "unary.js": [ - "1bd494f92fc84e519462694dd595a3e9ac3f294e", + "914d9fed4c64cedafa27dec668b0d9e826161f4e", [] ] } }, "float_parse.spec.js": [ - "19e0476ba1f521aa5b8ae202311f63862db98e29", + "076c3d8a0f2dd00bfe7b66b00d9b8280d84c4dd8", [] ], "flow_control": { "call.spec.js": [ - "d7c7f5ed0767495119cfb9b430f192407d86359f", + "43897ca432b0269ad22fc974e090ce50b13447ca", [] ], "complex.spec.js": [ - "a5c2f9f981938c97416e41a2313f5548df0b1468", + "33c4fa3b8958159fb6e536af48771741d28264a0", [] ], "eval_order.spec.js": [ - "5c4aed2ae8a76910908a8dd9e2bb7143141632e6", + "afba3c3dd074d6e0dd28a322de6a238395f0dff6", [] ], "for.spec.js": [ - "0af28aa8e41297c49913c0d47cf234cbd35a9e7d", + "182f1e999ae009b58476feb3e06f4d92130e116e", [] ], "harness.js": [ - "2d8996cc2d2e40156102ad66b665a4e0811e91d9", + "bb2869833f4ff9f7a9547721b6f6e8937716f79c", [] ], "if.spec.js": [ - "54507da07da1d1d2f32602be62fe853cb8f8aead", + "4f48b2beb374e44fac9613756a8f5a462bab5711", [] ], "loop.spec.js": [ - "3897c6977b88995d29351ff7229011f3357f199b", + "adb5e0916df63ca5a6307850c0c4d3a57585ddd1", [] ], "phony.spec.js": [ - "1f2628cb0445a4b07c07de208e02bef3af82a26e", + "a21698b57fbc6d8d5a7ad2b08e2efa9ec7da416a", [] ], "return.spec.js": [ - "a6089f1c13ea00161ddcc3d9988727ea124c2c49", + "270e75845ee1193a086593b39f950418368dc329", [] ], "switch.spec.js": [ - "4f34141d33b9ffe9d5c5b7ff13ef55e9f6401386", + "09664a067eac6229367338e3fb805bade6e4c1ba", [] ], "while.spec.js": [ - "c424309572175f863eaa487c7b94757d82cbff08", + "f4bbc942ef591b50be54fb3e71b8f97d88a76ce1", [] ] }, "memory_model": { + "adjacent.spec.js": [ + "c049664e862781f740446cd7f448e4e130f0de69", + [] + ], "atomicity.spec.js": [ - "0286cf42d5234b6b978dc9484e275d4670609662", + "175948859d9692f3b58ce229d7a1fb5b1a2ec81c", [] ], "barrier.spec.js": [ - "dbf90149e3ea73b9c0e5d2d3e5e63326f31b757c", + "f5e41440bb922bbe08b260698cdbea8824a244df", [] ], "coherence.spec.js": [ - "00dca4f9c7f52f4c75216792a5918185a18c8571", + "725bf4cf0093dbbcbf28d3aaa723ef7762510c35", [] ], "memory_model_setup.js": [ - "d0daa9a8f3b99989a89e177f3a070a7f25e0de2e", + "c5af090176299d6a693e9d81378b4708eab53800", [] ], "weak.spec.js": [ - "a9f7e60ce1a7f818fb1137ff85312e70cc84107a", + "57458afd7ae065ca4d5e070c6ade7d5628afa8bc", [] ] }, "padding.spec.js": [ - "40bc330bf4efa51c963701e13619ab8f88a7a181", + "56a64d60843ab192eb2c5adeee4e961c53e7076e", [] ], "robust_access.spec.js": [ - "903637ef4d279984464362970360534372baa120", + "8e6cd5c80b37c6aed7122daa718e373bd5cbfb3d", [] ], "robust_access_vertex.spec.js": [ - "527c69819a990691f0c0f7b752726c5090517cfc", + "d6321790085cf03d5d8fd7df5fa267894a9988b1", [] ], "shader_io": { "compute_builtins.spec.js": [ - "01700647a19a9e94cdc880b45403888cf6986dbd", + "68eebacc05fa6b645eaf8b1fd822030c090f149a", + [] + ], + "fragment_builtins.spec.js": [ + "b7372745597ac034496cea98036e642504f8a61e", [] ], "shared_structs.spec.js": [ - "88bff95442fe59ff6b2ccac4eb55bd4f07b7653f", + "4582f615cedb620bf700e17553a7a87aa77c603d", [] ] }, "shadow.spec.js": [ - "47ea93cffc416763b867584d6c4657368a0e39ac", + "1bb04d550991d7b71c36c567b03743397f74f470", [] ], "statement": { "increment_decrement.spec.js": [ - "899d488c24c2016ee337871aa88535e6a880e105", + "9ed58742835253696bfec1d53c10bf5fb6b24040", [] ] }, "zero_init.spec.js": [ - "98f3edf5209b0f27aa01bfe6b8634fbff8a839e0", + "c7b21d5699e4f929c132b28027e334708b89a593", [] ] }, "types.js": [ - "0c8cf724bb51f75086936d53119e0b1943e0ba93", + "5810b8e9f1cc226443e67c54e5a02c6b286cb9fd", [] ], "validation": { "const_assert": { "const_assert.spec.js": [ - "b7b7a89136c0097b2e5139bbf811798c13db43ba", + "13e7e687f8a8eb915b12f60dc4ed5d645703726f", [] ] }, "decl": { "const.spec.js": [ - "547aa93be818803ecc48262c8e636c17ddd2f655", + "2ab34e65bf59ca66ac7a50fc7bfb944a655abba9", [] ], "override.spec.js": [ - "96a26f20fd65db43021c6c1582e0c3888528ffdd", + "561527a622540cb7ead1a83c5d8a27419af73e3a", [] ], "ptr_spelling.spec.js": [ - "f06b81188e8a9bafa627531fa31b271f990a88e7", + "14e578b24409f2b4c63af4bd7425805d01199d04", [] ], "util.js": [ - "6fee41f7002a6a41221f1bd9eb5f588d4ac7ea12", + "23e083b71eb00b0df6539c966a4c95178a1e1b23", [] ], "var_access_mode.spec.js": [ - "9ee10da3622f230647e8de41e614c0c606c685e2", + "466c9e32cd5a68985755ce9d1f7153eacf2852d3", [] ] }, "expression": { "access": { "vector.spec.js": [ - "59961c89da5a3e1d093bdda6081c2d153d3f2743", + "7408ea2b0417daeb78b31ce5edeac07f1efa498e", [] ] }, "binary": { "bitwise_shift.spec.js": [ - "5c29a1858cd2bf007b7c9a0411f80eba6bfd5d08", + "ff3e1ae525819bf06848aec3120a3a73e457dbf3", [] ] }, "call": { "builtin": { "abs.spec.js": [ - "0c0ade4df7dff0e0f3754b9d3d0e7287ca503a52", + "255c8ab2e24079c07fd9ef64b1185b512c2463d3", [] ], "acos.spec.js": [ - "788b32cb84f7bc26e67ca866f80c04e03017ad98", + "d7caeca828b8e87a79340149190f2a47faf1dd35", [] ], "acosh.spec.js": [ - "b3cb566eec96275ed25e59533098955092a77cbd", + "037d058fb6e7d0c923e5865e247ba062058d11a0", [] ], "asin.spec.js": [ - "5221aff37a2d89bfb5e5baca3b1b428d7ce0b456", + "ec5c51fe15ba186991f8d6aa45ee768daa6936de", [] ], "asinh.spec.js": [ - "6b4af70cb3562f1483dad5cace698e87253d775b", + "ccc73de0fce8230900a718edda703f1e8b2e964e", [] ], "atan.spec.js": [ - "e4d280a437eeee67bff6fdb93196a91af3f2a863", + "2cd971e678dba1c682f39fa8d5a470e457651cdd", [] ], "atan2.spec.js": [ - "f7048707cbde89faaf7448f0b78de32729b1462a", + "e0fded50b14b41d36ac7386719b636818797c073", [] ], "atanh.spec.js": [ - "10ec7a6d093e271dbdac377084cbee8e73a90428", + "e252551219b4fd53ded597dd8bf05c58ab270bbf", [] ], "atomics.spec.js": [ - "fb3bf6bd4043b7e046ca640509ddbc9dbd347a26", + "3d51650c95d942ff48d47fe628d0f0c4311cd072", [] ], "bitcast.spec.js": [ - "06281d06e77ff93db350917adcf54a419785b1aa", + "71ef456929d85518ffc269d07bbd03d2cf76157c", [] ], "ceil.spec.js": [ - "80dd07d236f6cb21a0e5d0e05506611faa075789", + "9d6fb1e30c4aab5ba1d1b07042c71c5c9d107f52", [] ], "clamp.spec.js": [ - "406793612c3a547c7da7e50afa868d0a5cb0e66a", + "ae83f29898c7174723ee478787b1b00acfd24983", [] ], "const_override_validation.js": [ - "273659a8a7cbbf43aa6bfe0e2a21fe53d683a5c0", + "0b61930d7242060033326bbe5ae4a4b3a724fd62", [] ], "cos.spec.js": [ - "df6fee7feb547533cbda6b08d4fad53168935dd3", + "4f3a485b5f493c984a99e727fee5c10937a377be", [] ], "cosh.spec.js": [ - "e4f5705f743076efdbc0c7dad99748c57ca78e64", + "27f975252c7f9ed7ddc79dd9c1148c4041a5f051", [] ], "degrees.spec.js": [ - "c42518c4d490076c28b20a79d6758216ff739916", + "10aac98de2c2e760794500eac08220a8ec33a8b0", + [] + ], + "dot4I8Packed.spec.js": [ + "6b1f642b4da479985bf40e3b1279c5a098dc10bf", + [] + ], + "dot4U8Packed.spec.js": [ + "4ef94671edf62c579bce055adad456ae79c9c741", [] ], "exp.spec.js": [ - "579f9349cc3d41ac8f5b1fbe301b85abf22b0470", + "74a88161140907659bbb6736e1a9e9300f179ea2", [] ], "exp2.spec.js": [ - "91cee438b1e0c8f747855f9ea9d05c58cfbe3aa8", + "c38d5f90ef9f1e9210ddbddd36cc4ff9eefa793e", [] ], "inverseSqrt.spec.js": [ - "f111baeb58d17b74e0e8acdb86a569177bc8f6ae", + "bb6c089450f861a39c611f91245a6efacb790da1", [] ], "length.spec.js": [ - "97b0ba8f31be753568f1d92e8e399a6862dd5e21", + "12a28233e55051a431d4b215086c82d3aeefa5de", [] ], "log.spec.js": [ - "bc9bc15dc602d7f35d8dff366932d39c6ae1a591", + "fb911b418832dd13116bfcb710649f2a38660d9c", [] ], "log2.spec.js": [ - "be3e8768e1854765b99de6d085644d8a4a80baa8", + "4e538fbb77695ef8f7d784baef5089ed07274688", [] ], "modf.spec.js": [ - "908ef7a3e41b19aeb7a184091239b9853e844b3d", + "d3937bc4f3473d46e432b0bb38c74099703def3d", + [] + ], + "pack4xI8.spec.js": [ + "e335321cba38c53f38a97025dde539fb84cfafcd", + [] + ], + "pack4xI8Clamp.spec.js": [ + "d3791b2da33a1dbf58914012bbd49f842f95118b", + [] + ], + "pack4xU8.spec.js": [ + "211c9f9a334d68e994006407e37d2286ade24e48", + [] + ], + "pack4xU8Clamp.spec.js": [ + "78aa0ffdf5a9d4ddf46629fca19ebb0c99daca60", [] ], "radians.spec.js": [ - "1564ae7a581f71023ba7b5b29f2c9486a4f1c550", + "51e1c451a317eed6149b39fde8c99d7331eeccb5", [] ], "round.spec.js": [ - "100439a242f3dbb7573709cc8a90053a58121ba7", + "a90c17e10c9bd5a8edcabb63587f27377b930cf3", [] ], "saturate.spec.js": [ - "d67ccaed853167503df5b8c9b5779fbfce282dca", + "acf8bb059fe480278ef484e0ece3ff76760fcb8e", [] ], "sign.spec.js": [ - "7a4cb16419ee837c37ce741efe993fae9ca42382", + "7a08bac5f9328b71a00640ae53c97d34ad46e2fc", [] ], "sin.spec.js": [ - "c05c8665688b1821aef1bedff661251507b8c1b1", + "716311f20ce850261e7c74b0355298e943cd2dbf", [] ], "sinh.spec.js": [ - "388afbddc578643bf3a7eaeb453e3d8999f55b40", + "c65413296080348d7e0c053189ad11fa0877cea6", [] ], "sqrt.spec.js": [ - "a2c63e122795dbddf466e8154859745549600ded", + "4a2f254fef583023f8611d238eb3c0366f5125a8", [] ], "tan.spec.js": [ - "80bbe17cbe59795a5441ea4b27101981799805a4", + "91cee003edc32d9a82cbba8e0db0c1e3055cdca6", + [] + ], + "unpack4xI8.spec.js": [ + "10b22073c72b5e169db594162663c57d3d483e68", + [] + ], + "unpack4xU8.spec.js": [ + "d8a906b74d35680e0ff69cd6783cbf52990a5402", [] ] } @@ -2609,370 +3569,378 @@ }, "functions": { "alias_analysis.spec.js": [ - "45af2c7dfd5c472e123ea4a0ed10a5226f48a18b", + "ab5d7c3327b5d4c6b717808b4bddd11edeee2ad4", [] ], "restrictions.spec.js": [ - "84167312ac842b6ebd55b4b7dcacf8fc6402d3a2", + "94e38837d95815ede05b75fe16e7bc2fb5127f3a", [] ] }, "parse": { "align.spec.js": [ - "9fd1987a756d811ef066c550596ad87617eebfc1", + "e0fae5a6930612a93c43feaac4b0d5291961c06c", [] ], "attribute.spec.js": [ - "618fb719f7c753199ef3fe524b54eb6c41e3ade5", + "3d8a1ba9c9f52398a1ed82a68cdc3a36f20a326f", [] ], "binary_ops.spec.js": [ - "8f5bc12b0078b53c9ae91f00f2aa84a03246d3fb", + "d605a76293802570dc5b935eca93044564717ad9", [] ], "blankspace.spec.js": [ - "bdee7324021968b0f0745e33f221624c4e971591", + "e5e07597aedc259175a6a0642e189bbef32d28e4", [] ], "break.spec.js": [ - "bc615dde45cea7d33a9ad50585f4e6728313e0f8", + "bfdb0fc27916f62461ee88661d529a87b3f80f1c", [] ], "builtin.spec.js": [ - "083e1614fbf0d0bdc7e0e8e45b0339fc9d7ffd92", + "4d6dc7652b9c256048f8479247ee1bcfdbc6e291", [] ], "comments.spec.js": [ - "748e70bb2af87dd1864da625071d914b9b9c4b52", + "9d23bbe2025e7b5e4d6df6d12d571451d37f9430", [] ], "const.spec.js": [ - "894ab80eb63d78994bb45464864262f7d11f2aa2", + "fcc431a82a7a7a6f042b664c0a6beccd97fc7efa", [] ], "const_assert.spec.js": [ - "f57412e34e017ac34d36343260e493b1fd5d4dea", + "ba19057ecc34ff729a32b4109a5dbbaacd3b6642", [] ], "diagnostic.spec.js": [ - "42530a004be2089ee8ee75a00d7b96c16d5ae317", + "8c05c6607f1f5df7a0667dfa28e425f0cbf9fc59", [] ], "discard.spec.js": [ - "c2694bda16de47afd6bfc2e9242e2574e7d062d2", + "d7e76f6bc6d99797d92f67335f856342fb84ae3f", [] ], "enable.spec.js": [ - "6a94805e90072ad0fbefadb77f95d739c3e6bc00", + "a95ea54acf9fbbec8a51409c32ff32b07a2e968b", [] ], "identifiers.spec.js": [ - "2478ff096a1a5f587f0e28a8daec675cd0f50098", + "d7510cc5b002301a9c414360b4ddc3482e2ee6f6", [] ], "literal.spec.js": [ - "3d5b74ccd5b3272c17f96bff4fa3a530363ff95d", + "de1dde69c7db4614e60b85f6de94c030fe78d880", [] ], "must_use.spec.js": [ - "75191aeab83b2c093984c3a886f197492a7a7eaf", + "2bff48a4ab1fa7ef71186d025f41b697a63e7820", [] ], "pipeline_stage.spec.js": [ - "167d7f875e0753f9642a204e5f3f4b87cffb8f4d", + "4a94012262dc2a3492fb2baaf13659cb522f6189", [] ], "semicolon.spec.js": [ - "619cb25587c33a1662ff5ffe1b5d0d7e1b64a201", + "f7af6a0b3eee65ee9960d376306b76b32a76bd21", [] ], "source.spec.js": [ - "b4cfe94b24747d19245a7ad18d909c9d3713feb9", + "11f28d904a60357a1e0faa615e252d14bd4bbc98", [] ], "unary_ops.spec.js": [ - "83322ccf16792cd8d70be64a522a7a1612cfc891", + "952cb9a8ed2bd048b3bd8353f6a716bb1df1e2b5", [] ], "var_and_let.spec.js": [ - "93a11517100596ccf5aa1094760425f69c4e518d", + "75bf64e7eb13d9455a09e0f609782f80f9e8756e", [] ] }, "shader_io": { "binding.spec.js": [ - "d75aa1ccaa2088b978e8c6bc1c0e2a22c60ef27e", + "d87af51d30b9ba07b628bd7cfd6a4108a4307af9", [] ], "builtins.spec.js": [ - "13bdbd7fb76cfe0415294fbdef12969e361bc70d", + "07ea75828e779cc541996c5ebfdee65662512cd8", [] ], "entry_point.spec.js": [ - "982e4e3dc90133a1d6fea6138f5c62482cf1c09f", + "d56b69811a57f15716164dc75de1496370eedded", [] ], "group.spec.js": [ - "4737f00f593117712f30c9024136c56ebf579ef5", + "4c6a691e521256a48bdfe8e2b48f5e5c18a9c3bb", [] ], "group_and_binding.spec.js": [ - "615187ed24845856beb306b723d45c8d197e03e8", + "d5547004749dabac77d101a0839de401162ab372", [] ], "id.spec.js": [ - "4bd1c13d5878926cbb785c45f1749bacdc5864a4", + "4faca0391abdd85c0ccd76ecaedf5c62f9431f7b", [] ], "interpolate.spec.js": [ - "413a60c9cad70226728fb21987d8b7d10bb1fb1f", + "ec9adc012967accef61309d17d550c0d718d03b3", [] ], "invariant.spec.js": [ - "cb2e4c5909cca302804f33556eb7f5303466f7c8", + "567fabdaf63d624bb4b2548d8067b636124ba364", [] ], "locations.spec.js": [ - "c40d895ec4c11480bf96228a1a237728cb21943e", + "7dd5492283c3c2ab7ea221a35a04e154c71fb346", [] ], "size.spec.js": [ - "4a21f6b3b90af73a7802df1b273f3e9419494947", + "74caf19e6d8039918937032767cc14d1d7bbaae2", [] ], "util.js": [ - "8a9e85ae047004c7cca5e8dfd1e4e525c6f05c24", + "934016eaeabdc7c0be44e2696b536dd903d8086d", [] ], "workgroup_size.spec.js": [ - "f40d3b4428b0c8c47e5f799ea2d28a5ad664765f", + "4c8396bff085cc69519f4a4873b492a6f61ebb26", [] ] }, "shader_validation_test.js": [ - "5736b788fc5b361a66c6fa9ec5d24dec7182cfa3", + "efbfe6e00906988c53f88ccd2000671763e05822", [] ], "types": { "alias.spec.js": [ - "d5a6e3f57a7d53b351aff79d607c4e247c3f2125", + "012652df4ba9d3c155c210e7057449a77ef6566d", [] ], "struct.spec.js": [ - "a4926ed1efd6d9dcebd229adb5ae84b6905b38a0", + "80a60642321d8c9da3f621dabc09c6dcc3948517", [] ], "vector.spec.js": [ - "74e687aab5685c41e338997a0aea8b5190de70ac", + "7002bde6240210800f38f9f764c5f5b473f40c47", [] ] }, "uniformity": { "uniformity.spec.js": [ - "140cc26d475c4d083ef36ac4b18374e8170c6745", + "a656f731f52d514e16078c35cb14048d48dfe118", [] ] } }, "values.js": [ - "9ca24c64b99eafcbc9ea9a05e6f49ce063968a49", + "4c75635ea934274716440388db1aa36da6f862ee", [] ] }, "util": { + "binary_stream.js": [ + "cd90821ea4ff86a0ef1fc461298a8dc8b5fc63e5", + [] + ], "buffer.js": [ - "1da50c26993aa486d9a152b62e4907d3e712ba9c", + "0ce8bd858d8df11c51c7b14cbbf88ed5eb751fd5", [] ], "check_contents.js": [ - "f45054677d8c518cb2a8b9ce3276872a1bbd6074", + "645d78de55d451e96cec45b90157e5eec03299df", [] ], "color_space_conversion.js": [ - "4f456fb7c530c2c8a2354fbd4740dcfec81b5766", + "d61da9475fe5a9d3f5838da3cf966929792a3c6c", [] ], "command_buffer_maker.js": [ - "b3e0463fb2fee9b03ba60d5036558402dff44087", + "7c54c35c2d9f310527f43827634f8fd8e3876cac", [] ], "compare.js": [ - "c4435042980398b7ea2dfb707b35ace6664d683f", + "e884e9a01f6f593b772c1bc3eee2587b7ea95c61", [] ], "constants.js": [ - "da63af2bcae22533cdedd47fb927dffb69af3bed", + "b46a2b178b57098650979b678f95264c54caaaa4", [] ], "conversion.js": [ - "d49cdc1f057b9c463f72780952ec391b9c792210", + "a56c09b3b70e169fe25187c590fe0be9d78eb303", [] ], "copy_to_texture.js": [ - "e58df6b7cdabc27c1540a7b51154be0c15ec03ca", + "beaad649fee49cb5e9d5d49281ff5b6e7481bd18", [] ], "create_elements.js": [ - "b255f85ceb4f4a58d1ae89d52da3958a8f48d6f2", + "722808c8b00a5636e9d392ed6df928dece759a93", [] ], "device_pool.js": [ - "ab2f6350fc4588cf79af7ecfbaeff5857db0c1e5", + "84345c9e5a31987806bf186b995f294963c23c2c", [] ], "floating_point.js": [ - "2cc5159c0aa0355f3de32f6ccb65c550a790c728", + "1770721d295f78587af2c23745dc2a5bc396ea61", [] ], "math.js": [ - "bb2846f883917720fe88543f0ca9f481180af747", + "0aa27b87aa937fc8fcb19bb32367ae6277764062", [] ], "memory.js": [ - "6fcc2385deb813b766841112c38f195be9d1379a", + "e48ab32fc989b31751faca094c3bd65baedde87b", [] ], "pretty_diff_tables.js": [ - "41d519f6b3666b0ad36cc4b1fbb213deb0052383", + "3803540fe9f387c0f697b4887311e7c22d6d7afa", [] ], "prng.js": [ - "791af58b22f95b98de87b7e94d17c896770fd71a", + "9e456d734ea557fa7f64673b33d19f94ee2325de", + [] + ], + "reinterpret.js": [ + "69eebb1e8c2775003fb71489d51447d7b2113f79", [] ], "shader.js": [ - "2763d30a390aa5c36f6fff58262d1b677a34fb72", + "51029e0c829b778e4f9737c1e0022799bb0c4a62", [] ], "texture": { "base.js": [ - "4c331f1ff0c74abd24629c6247d17e3cd3936b2b", + "99636b9ad906422dc6326a784f1227d28a9dafa4", [] ], "data_generation.js": [ - "b92dbd2bbdd8ac19f79db7efdfb5c94b4c30c9b5", + "5ab5338014d0c53c7e8aa8acdb97669919aeb900", [] ], "layout.js": [ - "17d9ba90b216cb3c8b320ca3fc468ebb51fb1cd1", + "36603a1df47f44a3b78cb255678787ae15a92bfd", [] ], "subresource.js": [ - "db9f637d44832721c99252b686b9d728c0b9c664", + "c6f9563262349f3fb11a6dec67710fb7ab211971", [] ], "texel_data.js": [ - "5896d594bc1fa6aa5b2863690ae321fd9317d961", + "602d642724f11e3c5a8b7f765aee3349c7075ca8", [] ], "texel_data.spec.js": [ - "a4bdb34b18664ea1a6ceb1fab06315de1df62d26", + "ae985b0e844b4c067ec64910213927658ccb44c2", [] ], "texel_view.js": [ - "1bfee89f71f485fd504b90f5f1146b98cf0ceb75", + "d5b0bd4b2a6cc1ca7146e7a692370bb7ecc14cf2", [] ], "texture_ok.js": [ - "bd329bac4430fa50105bbedbb0acd9fb44457b62", + "c2047df878372265dc4cbc5b705e04ef86187847", [] ], "texture_ok.spec.js": [ - "00ef1663f9461d4df0442433279c1d226aa0b9c0", + "76198cb3b6bd37dc7fc1bd1a5ecd0f736071496f", [] ] }, "texture.js": [ - "53d78839f21e022f1e1aaa0bde34f35f5a34dd7a", + "c2c980c975efab53791376cc721d6612fe2f17fa", [] ], "unions.js": [ - "8dd7e23ad58a69aec29db953d12c94fcc2e94767", + "0f850786074d350e4f07ce2a04de8353ac1d809c", [] ] }, "web_platform": { "canvas": { "configure.spec.js": [ - "171f8036c3de8c6c2fb06cb7971eb60353b62338", + "30acc8c9a7ec73b3324fd3e250f82a6fb4d31908", [] ], "context_creation.spec.js": [ - "eb4cb7df8e06df0a70eb0b72bf6ff253ddc38834", + "d165f7d03a70c542ae8a5648876937f72c33e8c8", [] ], "getCurrentTexture.spec.js": [ - "b256be3275d1a56ce0592315bf42a220c92cae1a", + "00e8c3ec24f6e813c975519377f74a362b39efff", [] ], "getPreferredCanvasFormat.spec.js": [ - "f358fe7188f7563b3921a3a3c1caf6b3b18fb7b2", + "6c9819398202f031325c947de3921a225cb076a3", [] ], "readbackFromWebGPUCanvas.spec.js": [ - "353f217440ffe8a42aa43eed20647f330860f3db", + "05b422f8ea06bc800ea832cf245e0b0da8da98f8", [] ] }, "copyToTexture": { "ImageBitmap.spec.js": [ - "2f7677a492f48bd875ee09dafecabf8751c3f040", + "e5340e1872bd8aa37c15ca1f270899a3f3bbbff1", [] ], "ImageData.spec.js": [ - "fc0bbc51cf44a1223dd02f570d59334fc3249cd0", + "b285afa6cc286dbbc4954cff0345a0a1126b7638", [] ], "canvas.spec.js": [ - "c52f7af58795120f7fd2af8c3dd11e5a64040133", + "a8176f0613a92de609fe54bef34d7dfd35ab38a5", [] ], "image.spec.js": [ - "88a630a9d57b187bb50fbc9b15d5b043f745614a", + "173bc9bbb700034162eb49255399033c3a9f5efc", [] ], "util.js": [ - "2471edbfa3d2f77be2cda2071389d91344d278ea", + "d392f94d3dc39505d4a64f2dbea3080b7b7bc364", [] ], "video.spec.js": [ - "b9ee472a618b70acb7114a954dda1c638857ce2b", + "1a7b21f1fbf1fdd5fbc7824c4dc6ec10b84e226c", [] ] }, "external_texture": { "video.spec.js": [ - "53f395d1ad80eb2e8940b769f1da5dc24bf7767a", + "6eded52a06d750fc52a9ac13f1db307c8160da61", [] ] }, "reftests": { "canvas_clear.html.js": [ - "f9bb584c36216d1877e97dde768d0c1b7d1cd9d0", + "20ef1ec3a4f9bd95e1d056b359e1f75abc144e6e", [] ], "canvas_colorspace.html.js": [ - "f4ef05b12981f323be98e3335adc70f20e632d86", + "7f579ae70db2eebd561ccecb8598c4209cdc30f8", [] ], "canvas_complex.html.js": [ - "2ecafe12e06fe13f6f7392a23a1c589596f44655", + "cc65c8985c3171d1a76dbe3cf320dd0db975ba15", [] ], "canvas_composite_alpha.html.js": [ - "93d323f1ec1920a2bbe86482ce8b2f1dbe1c59f1", + "81a424690656cd9c0dd7142b93bbd32bb1f16097", [] ], "canvas_image_rendering.html.js": [ - "a7c488e8b2d9534348575d6cac96efb8ccfc4e53", + "c1c2fcf975ee4a2f560aaef5e334c1091967b0b8", [] ], "create-pattern-data-url.js": [ - "e6e9019851f3f8c7152e8fbe2426af89268ca1df", + "dfb7690696a3775f9fa634be68c24dc414086999", [] ], "gpu_ref_test.js": [ - "56ac1f2a3315500120230bf285f8e49e2a34f2c9", + "ae7c29d98c3b353adf33ded8de8dbe242bb989be", [] ], "ref": { @@ -2985,7 +3953,7 @@ [] ], "canvas_colorspace-ref.html.js": [ - "77e7610b75206aad699de877bbb89641663f1583", + "e87a1ba1706a5f0b141a181044cd95f8e43f3944", [] ], "canvas_complex-ref.html": [ @@ -3010,25 +3978,25 @@ ] }, "resize_observer.html.js": [ - "0b4d35bdecdbc8601b84c2edcbba3faba978e6fd", + "3e5bb3b4ae1a9edfbdd9f6daa376c9e7703b1af7", [] ] }, "util.js": [ - "6a6856ad12bf0d676d4e2874348f82d879ee79fb", + "693ad6291cde772e4347f74de1e6707770cfd1e0", [] ], "worker": { "worker.js": [ - "22392afc7b5d2f3c7a8919b7acbe75dda1b33814", + "8eff1ae8cdbcd510d593134d276f87cd0546578c", [] ], "worker.spec.js": [ - "497441485216b9137d484f0d261a9adfca94e0f7", + "56d07640e4402ac574482973faad6c06ccb3b3dd", [] ], "worker_launcher.js": [ - "f3e83528ad0935e8051a0cc024b5ff9864367fd1", + "11c4a4e7e381f95c3826c409ad10e1d4359748c0", [] ] } @@ -3039,7 +4007,7 @@ "testharness": { "webgpu": { "cts.https.html": [ - "60d93b5a8d15bfa527b0f56fa0073eb2d3d35245", + "6aeaac3b1da36153990c02ff856774c1c5b7a3d8", [ "webgpu/cts.https.html?q=webgpu:api,operation,adapter,requestAdapter:requestAdapter:*", {} @@ -3076,6 +4044,10 @@ "webgpu/cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,better_than_supported:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,out_of_range:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,worse_than_default:*", {} @@ -3472,14 +4444,26 @@ "webgpu/cts.https.html?q=webgpu:api,operation,queue,writeBuffer:multiple_writes_at_different_offsets_and_sizes:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,operation,reflection:buffer_creation_from_reflection:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,operation,reflection:buffer_reflection_attributes:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,operation,reflection:query_set_creation_from_reflection:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,operation,reflection:query_set_reflection_attributes:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,operation,reflection:texture_creation_from_reflection:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,operation,reflection:texture_reflection_attributes:*", {} @@ -4097,7 +5081,7 @@ {} ], [ - "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,features,query_types:writeTimestamp:*", + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,features,query_types:timestamp:*", {} ], [ @@ -4108,6 +5092,10 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:canvas_configuration_view_formats:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:check_capability_guarantees:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:depth_stencil_state:*", {} @@ -4140,6 +5128,10 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:setBindGroup,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:validate,maxBindGroupsPlusVertexBuffers:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:createBindGroupLayout,at_over:*", {} @@ -4196,14 +5188,26 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeX:createComputePipeline,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeX:validate,maxComputeInvocationsPerWorkgroup:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeY:createComputePipeline,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeY:validate,maxComputeInvocationsPerWorkgroup:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeZ:createComputePipeline,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeZ:validate,maxComputeInvocationsPerWorkgroup:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupStorageSize:createComputePipeline,at_over:*", {} @@ -4212,6 +5216,10 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupsPerDimension:dispatchWorkgroups,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupsPerDimension:validate:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxDynamicStorageBuffersPerPipelineLayout:createBindGroupLayout,at_over:*", {} @@ -4260,6 +5268,10 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBufferBindingSize:validate,maxBufferSize:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBufferBindingSize:validate:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createBindGroupLayout,at_over:*", {} @@ -4336,6 +5348,10 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBufferArrayStride:createRenderPipeline,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBufferArrayStride:validate:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:createRenderPipeline,at_over:*", {} @@ -4344,6 +5360,10 @@ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:setVertexBuffer,at_over:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:validate,maxBindGroupsPlusVertexBuffers:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:createBindGroup,at_over:*", {} @@ -5068,10 +6088,6 @@ "webgpu/cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:depth_stencil_readonly:*", {} ], - [ - "webgpu/cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:depth_stencil_readonly_with_undefined_depth:*", - {} - ], [ "webgpu/cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:valid_texture_formats:*", {} @@ -5173,15 +6189,15 @@ {} ], [ - "webgpu/cts.https.html?q=webgpu:api,validation,encoding,queries,general:timestamp_query,device_mismatch:*", + "webgpu/cts.https.html?q=webgpu:api,validation,encoding,queries,general:writeTimestamp,device_mismatch:*", {} ], [ - "webgpu/cts.https.html?q=webgpu:api,validation,encoding,queries,general:timestamp_query,invalid_query_set:*", + "webgpu/cts.https.html?q=webgpu:api,validation,encoding,queries,general:writeTimestamp,invalid_query_set:*", {} ], [ - "webgpu/cts.https.html?q=webgpu:api,validation,encoding,queries,general:timestamp_query,query_type_and_index:*", + "webgpu/cts.https.html?q=webgpu:api,validation,encoding,queries,general:writeTimestamp,query_type_and_index:*", {} ], [ @@ -5521,7 +6537,7 @@ {} ], [ - "webgpu/cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:writeTimestamp:*", + "webgpu/cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:timestamps:*", {} ], [ @@ -5744,6 +6760,14 @@ "webgpu/cts.https.html?q=webgpu:api,validation,render_pass,resolve:resolve_attachment:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depthCompare_optional:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depthWriteEnabled_optional:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_test:*", {} @@ -6096,14 +7120,26 @@ "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,entry_point:compute:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,entry_point:compute_undefined_entry_point_and_extra_stage:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,entry_point:fragment:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,entry_point:fragment_undefined_entry_point_and_extra_stage:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,entry_point:vertex:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,entry_point:vertex_undefined_entry_point_and_extra_stage:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:api,validation,shader_module,overrides:id_conflict:*", {} @@ -6308,10 +7344,18 @@ "webgpu/cts.https.html?q=webgpu:api,validation,texture,rg11b10ufloat_renderable:create_texture:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:compat,api,validation,createBindGroup:viewDimension_matches_textureBindingViewDimension:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:compat,api,validation,encoding,cmds,copyTextureToBuffer:compressed:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:compat,api,validation,encoding,cmds,copyTextureToTexture:compressed:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:compat,api,validation,encoding,programmable,pipeline_bind_group_compat:twoDifferentTextureViews,compute_pass,unused:*", {} @@ -6332,6 +7376,10 @@ "webgpu/cts.https.html?q=webgpu:compat,api,validation,render_pipeline,fragment_state:colorState:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:compat,api,validation,render_pipeline,shader_module:interpolate:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:compat,api,validation,render_pipeline,shader_module:sample_mask:*", {} @@ -6340,6 +7388,18 @@ "webgpu/cts.https.html?q=webgpu:compat,api,validation,render_pipeline,vertex_state:maxVertexAttributesVertexIndexInstanceIndex:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:compat,api,validation,texture,createTexture:depthOrArrayLayers_incompatible_with_textureBindingViewDimension:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:compat,api,validation,texture,createTexture:format_reinterpretation:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:compat,api,validation,texture,createTexture:invalidTextureBindingViewDimension:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:compat,api,validation,texture,createTexture:unsupportedTextureFormats:*", {} @@ -6444,6 +7504,18 @@ "webgpu/cts.https.html?q=webgpu:idl,constants,flags:TextureUsage,values:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:idl,constructable:gpu_errors:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:idl,constructable:pipeline_errors:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:idl,constructable:uncaptured_error_event:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:scalar:*", {} @@ -6484,6 +7556,22 @@ "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:not_equals:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:scalar:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:scalar_vector:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:vector:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:vector_scalar:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_matrix_addition:matrix:*", {} @@ -6508,6 +7596,22 @@ "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:vector_scalar:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:scalar:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:scalar_vector:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:vector:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:vector_scalar:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:scalar:*", {} @@ -9356,6 +10460,10 @@ "webgpu/cts.https.html?q=webgpu:shader,execution,flow_control,while:while_nested_continue:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,memory_model,adjacent:f16:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,execution,memory_model,atomicity:atomicity:*", {} @@ -9460,6 +10568,14 @@ "webgpu/cts.https.html?q=webgpu:shader,execution,shader_io,compute_builtins:inputs:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,shader_io,fragment_builtins:inputs,interStage:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,execution,shader_io,fragment_builtins:inputs,position:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,execution,shader_io,shared_structs:shared_between_stages:*", {} @@ -9748,6 +10864,10 @@ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atomics:stage:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_const_to_f16:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_const_to_f32:*", {} @@ -9812,6 +10932,38 @@ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,degrees:values:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4I8Packed:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4I8Packed:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4I8Packed:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4I8Packed:unsupported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4U8Packed:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4U8Packed:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4U8Packed:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4U8Packed:unsupported:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp2:integer_argument:*", {} @@ -9880,6 +11032,70 @@ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,modf:values:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8:unsupported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8Clamp:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8Clamp:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8Clamp:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8Clamp:unsupported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8:unsupported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8Clamp:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8Clamp:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8Clamp:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8Clamp:unsupported:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,radians:integer_argument:*", {} @@ -9944,6 +11160,38 @@ "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,tan:values:*", {} ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xI8:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xI8:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xI8:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xI8:unsupported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xU8:bad_args:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xU8:must_use:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xU8:supported:*", + {} + ], + [ + "webgpu/cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xU8:unsupported:*", + {} + ], [ "webgpu/cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:aliasing_inside_function:*", {} @@ -10936,10 +12184,6 @@ "webgpu/cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sample:*", {} ], - [ - "webgpu/cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sampleWithRotationMetadata:*", - {} - ], [ "webgpu/cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sampleWithVideoFrameWithVisibleRectParam:*", {} diff --git a/tests/wpt/webgpu/meta/webgpu/cts.https.html.ini b/tests/wpt/webgpu/meta/webgpu/cts.https.html.ini index 05093d1c89e..7e160a6cffa 100644 --- a/tests/wpt/webgpu/meta/webgpu/cts.https.html.ini +++ b/tests/wpt/webgpu/meta/webgpu/cts.https.html.ini @@ -1,801 +1,88 @@ -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:not_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec4_fract:*] + expected: CRASH - [:inputSource="const";vectorize=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asinh:integer_argument:*] + expected: CRASH - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompare:control_flow:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec4_element_decrement:*] +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:validate,kMaxColorAttachmentsToTest:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:buffer_state:*] - [:srcBufferState="valid";dstBufferState="valid"] - expected: FAIL - - [:srcBufferState="valid";dstBufferState="invalid"] - expected: FAIL - - [:srcBufferState="valid";dstBufferState="destroyed"] - expected: FAIL - - [:srcBufferState="invalid";dstBufferState="valid"] - expected: FAIL - - [:srcBufferState="invalid";dstBufferState="invalid"] - expected: FAIL - - [:srcBufferState="invalid";dstBufferState="destroyed"] - expected: FAIL - - [:srcBufferState="destroyed";dstBufferState="valid"] - expected: FAIL - - [:srcBufferState="destroyed";dstBufferState="invalid"] - expected: FAIL - - [:srcBufferState="destroyed";dstBufferState="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleGrad:sampled_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:maximum_binding_limit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,disjointRanges:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:greater_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBufferSize:createBuffer,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec4h_to_vec2i:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_compound:*] + expected: CRASH - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:scalar_compound:*] + expected: CRASH - [:inputSource="storage_rw";vectorize="_undef_";alias=false] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_storage_advanced:*] + [:workgroupSize=1;scalarType="u32"] expected: FAIL - [:inputSource="storage_rw";vectorize="_undef_";alias=true] + [:workgroupSize=1;scalarType="i32"] expected: FAIL - [:inputSource="storage_rw";vectorize=2;alias=false] + [:workgroupSize=2;scalarType="u32"] expected: FAIL - [:inputSource="storage_rw";vectorize=2;alias=true] + [:workgroupSize=2;scalarType="i32"] expected: FAIL - [:inputSource="storage_rw";vectorize=3;alias=false] + [:workgroupSize=4;scalarType="u32"] expected: FAIL - [:inputSource="storage_rw";vectorize=3;alias=true] + [:workgroupSize=4;scalarType="i32"] expected: FAIL - [:inputSource="storage_rw";vectorize=4;alias=false] + [:workgroupSize=8;scalarType="u32"] expected: FAIL - [:inputSource="storage_rw";vectorize=4;alias=true] + [:workgroupSize=8;scalarType="i32"] expected: FAIL - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:u32:*] - [:inputSource="const";vectorize="_undef_"] + [:workgroupSize=16;scalarType="u32"] expected: FAIL - [:inputSource="const";vectorize=2] + [:workgroupSize=16;scalarType="i32"] expected: FAIL - [:inputSource="const";vectorize=3] + [:workgroupSize=32;scalarType="u32"] expected: FAIL - [:inputSource="const";vectorize=4] + [:workgroupSize=32;scalarType="i32"] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] + [:workgroupSize=64;scalarType="u32"] expected: FAIL - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:device_mismatch:*] - [:copyType="CopyB2T"] - expected: FAIL - - [:copyType="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBufferBindingSize:validate,maxBufferSize:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:bool:*] - [:inputSource="const";vectorize="_undef_"] + [:workgroupSize=64;scalarType="i32"] expected: FAIL - [:inputSource="const";vectorize=2] + [:workgroupSize=128;scalarType="u32"] expected: FAIL - [:inputSource="const";vectorize=3] + [:workgroupSize=128;scalarType="i32"] expected: FAIL - [:inputSource="const";vectorize=4] + [:workgroupSize=256;scalarType="u32"] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] + [:workgroupSize=256;scalarType="i32"] expected: FAIL - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,buffer_mapped:copyBufferToTexture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:store_array_2d_coords:*] - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,index_format:index_format,change_pipeline_after_setIndexBuffer:*] - [:setPipelineBeforeSetIndexBuffer=false] - expected: FAIL - - [:setPipelineBeforeSetIndexBuffer=true] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division:*] + expected: CRASH -[cts.https.html?q=webgpu:api,validation,gpu_external_texture_expiration:import_multiple_times_in_same_task_scope:*] - [:sourceType="VideoElement"] +[cts.https.html?q=webgpu:shader,execution,flow_control,return:return_conditional_false:*] + [:preventValueOptimizations=true] expected: FAIL - [:sourceType="VideoFrame"] + [:preventValueOptimizations=false] expected: FAIL [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicAnd:and_storage:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] expected: FAIL @@ -989,6783 +276,109 @@ expected: FAIL -[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,3d_texture,uncompressed_format:*] - [:format="r8unorm"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,misc:pipeline_layout,device_mismatch:*] + expected: CRASH - [:format="r8snorm"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,multisample_state:count:*] + expected: CRASH - [:format="r8uint"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:valid_only_with_vertex_position_builtin:*] + expected: CRASH - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachmentBytesPerSample,aligned:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:*] - [:encoderType="compute%20pass";dynamicOffsets=[256,0\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[256,0\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[1,2\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[1,2\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[256,0,0\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[256,0,0\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[256\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[256\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[512,0\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[512,0\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[1024,0\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[1024,0\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[4294967295,0\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[4294967295,0\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[0,512\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[0,512\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[0,1024\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[0,1024\];useU32array=true] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[0,4294967295\];useU32array=false] - expected: FAIL - - [:encoderType="compute%20pass";dynamicOffsets=[0,4294967295\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[256,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[256,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[1,2\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[1,2\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[256,0,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[256,0,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[256\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[256\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[512,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[512,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[1024,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[1024,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[4294967295,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[4294967295,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[0,512\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[0,512\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[0,1024\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[0,1024\];useU32array=true] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[0,4294967295\];useU32array=false] - expected: FAIL - - [:encoderType="render%20pass";dynamicOffsets=[0,4294967295\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[256,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[256,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[1,2\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[1,2\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[256,0,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[256,0,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[256\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[256\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[512,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[512,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[1024,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[1024,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[4294967295,0\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[4294967295,0\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[0,512\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[0,512\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[0,1024\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[0,1024\];useU32array=true] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[0,4294967295\];useU32array=false] - expected: FAIL - - [:encoderType="render%20bundle";dynamicOffsets=[0,4294967295\];useU32array=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,ceil:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:limits,workgroup_storage_size:*] - [:isAsync=true;type="vec4%3Cf32%3E"] - expected: FAIL - - [:isAsync=true;type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:isAsync=false;type="vec4%3Cf32%3E"] - expected: FAIL - - [:isAsync=false;type="mat4x4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,select:scalar:*] - [:inputSource="const";component="b";overload="scalar"] - expected: FAIL - - [:inputSource="const";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="const";component="f";overload="scalar"] - expected: FAIL - - [:inputSource="const";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="const";component="i";overload="scalar"] - expected: FAIL - - [:inputSource="const";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="const";component="u";overload="scalar"] - expected: FAIL - - [:inputSource="const";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="u";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="scalar"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="scalar"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="scalar"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="scalar"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="scalar"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="scalar"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="scalar"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="scalar"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="scalar"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="scalar"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="scalar"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="scalar"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="vec4"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:aspect:*] - [:format="r8unorm";aspect="all"] - expected: FAIL - - [:format="r8unorm";aspect="depth-only"] - expected: FAIL - - [:format="r8unorm";aspect="stencil-only"] - expected: FAIL - - [:format="r8snorm";aspect="all"] - expected: FAIL - - [:format="r8snorm";aspect="depth-only"] - expected: FAIL - - [:format="r8snorm";aspect="stencil-only"] - expected: FAIL - - [:format="r8uint";aspect="all"] - expected: FAIL - - [:format="r8uint";aspect="depth-only"] - expected: FAIL - - [:format="r8uint";aspect="stencil-only"] - expected: FAIL - - [:format="r8sint";aspect="all"] - expected: FAIL - - [:format="r8sint";aspect="depth-only"] - expected: FAIL - - [:format="r8sint";aspect="stencil-only"] - expected: FAIL - - [:format="rg8unorm";aspect="all"] - expected: FAIL - - [:format="rg8unorm";aspect="depth-only"] - expected: FAIL - - [:format="rg8unorm";aspect="stencil-only"] - expected: FAIL - - [:format="rg8snorm";aspect="all"] - expected: FAIL - - [:format="rg8snorm";aspect="depth-only"] - expected: FAIL - - [:format="rg8snorm";aspect="stencil-only"] - expected: FAIL - - [:format="rg8uint";aspect="all"] - expected: FAIL - - [:format="rg8uint";aspect="depth-only"] - expected: FAIL - - [:format="rg8uint";aspect="stencil-only"] - expected: FAIL - - [:format="rg8sint";aspect="all"] - expected: FAIL - - [:format="rg8sint";aspect="depth-only"] - expected: FAIL - - [:format="rg8sint";aspect="stencil-only"] - expected: FAIL - - [:format="rgba8unorm";aspect="all"] - expected: FAIL - - [:format="rgba8unorm";aspect="depth-only"] - expected: FAIL - - [:format="rgba8unorm";aspect="stencil-only"] - expected: FAIL - - [:format="rgba8unorm-srgb";aspect="all"] - expected: FAIL - - [:format="rgba8unorm-srgb";aspect="depth-only"] - expected: FAIL - - [:format="rgba8unorm-srgb";aspect="stencil-only"] - expected: FAIL - - [:format="rgba8snorm";aspect="all"] - expected: FAIL - - [:format="rgba8snorm";aspect="depth-only"] - expected: FAIL - - [:format="rgba8snorm";aspect="stencil-only"] - expected: FAIL - - [:format="rgba8uint";aspect="all"] - expected: FAIL - - [:format="rgba8uint";aspect="depth-only"] - expected: FAIL - - [:format="rgba8uint";aspect="stencil-only"] - expected: FAIL - - [:format="rgba8sint";aspect="all"] - expected: FAIL - - [:format="rgba8sint";aspect="depth-only"] - expected: FAIL - - [:format="rgba8sint";aspect="stencil-only"] - expected: FAIL - - [:format="bgra8unorm";aspect="all"] - expected: FAIL - - [:format="bgra8unorm";aspect="depth-only"] - expected: FAIL - - [:format="bgra8unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bgra8unorm-srgb";aspect="all"] - expected: FAIL - - [:format="bgra8unorm-srgb";aspect="depth-only"] - expected: FAIL - - [:format="bgra8unorm-srgb";aspect="stencil-only"] - expected: FAIL - - [:format="r16uint";aspect="all"] - expected: FAIL - - [:format="r16uint";aspect="depth-only"] - expected: FAIL - - [:format="r16uint";aspect="stencil-only"] - expected: FAIL - - [:format="r16sint";aspect="all"] - expected: FAIL - - [:format="r16sint";aspect="depth-only"] - expected: FAIL - - [:format="r16sint";aspect="stencil-only"] - expected: FAIL - - [:format="r16float";aspect="all"] - expected: FAIL - - [:format="r16float";aspect="depth-only"] - expected: FAIL - - [:format="r16float";aspect="stencil-only"] - expected: FAIL - - [:format="rg16uint";aspect="all"] - expected: FAIL - - [:format="rg16uint";aspect="depth-only"] - expected: FAIL - - [:format="rg16uint";aspect="stencil-only"] - expected: FAIL - - [:format="rg16sint";aspect="all"] - expected: FAIL - - [:format="rg16sint";aspect="depth-only"] - expected: FAIL - - [:format="rg16sint";aspect="stencil-only"] - expected: FAIL - - [:format="rg16float";aspect="all"] - expected: FAIL - - [:format="rg16float";aspect="depth-only"] - expected: FAIL - - [:format="rg16float";aspect="stencil-only"] - expected: FAIL - - [:format="rgba16uint";aspect="all"] - expected: FAIL - - [:format="rgba16uint";aspect="depth-only"] - expected: FAIL - - [:format="rgba16uint";aspect="stencil-only"] - expected: FAIL - - [:format="rgba16sint";aspect="all"] - expected: FAIL - - [:format="rgba16sint";aspect="depth-only"] - expected: FAIL - - [:format="rgba16sint";aspect="stencil-only"] - expected: FAIL - - [:format="rgba16float";aspect="all"] - expected: FAIL - - [:format="rgba16float";aspect="depth-only"] - expected: FAIL - - [:format="rgba16float";aspect="stencil-only"] - expected: FAIL - - [:format="r32uint";aspect="all"] - expected: FAIL - - [:format="r32uint";aspect="depth-only"] - expected: FAIL - - [:format="r32uint";aspect="stencil-only"] - expected: FAIL - - [:format="r32sint";aspect="all"] - expected: FAIL - - [:format="r32sint";aspect="depth-only"] - expected: FAIL - - [:format="r32sint";aspect="stencil-only"] - expected: FAIL - - [:format="r32float";aspect="all"] - expected: FAIL - - [:format="r32float";aspect="depth-only"] - expected: FAIL - - [:format="r32float";aspect="stencil-only"] - expected: FAIL - - [:format="rg32uint";aspect="all"] - expected: FAIL - - [:format="rg32uint";aspect="depth-only"] - expected: FAIL - - [:format="rg32uint";aspect="stencil-only"] - expected: FAIL - - [:format="rg32sint";aspect="all"] - expected: FAIL - - [:format="rg32sint";aspect="depth-only"] - expected: FAIL - - [:format="rg32sint";aspect="stencil-only"] - expected: FAIL - - [:format="rg32float";aspect="all"] - expected: FAIL - - [:format="rg32float";aspect="depth-only"] - expected: FAIL - - [:format="rg32float";aspect="stencil-only"] - expected: FAIL - - [:format="rgba32uint";aspect="all"] - expected: FAIL - - [:format="rgba32uint";aspect="depth-only"] - expected: FAIL - - [:format="rgba32uint";aspect="stencil-only"] - expected: FAIL - - [:format="rgba32sint";aspect="all"] - expected: FAIL - - [:format="rgba32sint";aspect="depth-only"] - expected: FAIL - - [:format="rgba32sint";aspect="stencil-only"] - expected: FAIL - - [:format="rgba32float";aspect="all"] - expected: FAIL - - [:format="rgba32float";aspect="depth-only"] - expected: FAIL - - [:format="rgba32float";aspect="stencil-only"] - expected: FAIL - - [:format="rgb10a2unorm";aspect="all"] - expected: FAIL - - [:format="rgb10a2unorm";aspect="depth-only"] - expected: FAIL - - [:format="rgb10a2unorm";aspect="stencil-only"] - expected: FAIL - - [:format="rg11b10ufloat";aspect="all"] - expected: FAIL - - [:format="rg11b10ufloat";aspect="depth-only"] - expected: FAIL - - [:format="rg11b10ufloat";aspect="stencil-only"] - expected: FAIL - - [:format="rgb9e5ufloat";aspect="all"] - expected: FAIL - - [:format="rgb9e5ufloat";aspect="depth-only"] - expected: FAIL - - [:format="rgb9e5ufloat";aspect="stencil-only"] - expected: FAIL - - [:format="stencil8";aspect="all"] - expected: FAIL - - [:format="stencil8";aspect="depth-only"] - expected: FAIL - - [:format="stencil8";aspect="stencil-only"] - expected: FAIL - - [:format="depth16unorm";aspect="all"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only"] - expected: FAIL - - [:format="depth16unorm";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float";aspect="all"] - expected: FAIL - - [:format="depth32float";aspect="depth-only"] - expected: FAIL - - [:format="depth32float";aspect="stencil-only"] - expected: FAIL - - [:format="depth24plus";aspect="all"] - expected: FAIL - - [:format="depth24plus";aspect="depth-only"] - expected: FAIL - - [:format="depth24plus";aspect="stencil-only"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="all"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="depth-only"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="all"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="depth-only"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only"] - expected: FAIL - - [:format="bc1-rgba-unorm";aspect="all"] - expected: FAIL - - [:format="bc1-rgba-unorm";aspect="depth-only"] - expected: FAIL - - [:format="bc1-rgba-unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";aspect="all"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";aspect="depth-only"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";aspect="stencil-only"] - expected: FAIL - - [:format="bc2-rgba-unorm";aspect="all"] - expected: FAIL - - [:format="bc2-rgba-unorm";aspect="depth-only"] - expected: FAIL - - [:format="bc2-rgba-unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";aspect="all"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";aspect="depth-only"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";aspect="stencil-only"] - expected: FAIL - - [:format="bc3-rgba-unorm";aspect="all"] - expected: FAIL - - [:format="bc3-rgba-unorm";aspect="depth-only"] - expected: FAIL - - [:format="bc3-rgba-unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";aspect="all"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";aspect="depth-only"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";aspect="stencil-only"] - expected: FAIL - - [:format="bc4-r-unorm";aspect="all"] - expected: FAIL - - [:format="bc4-r-unorm";aspect="depth-only"] - expected: FAIL - - [:format="bc4-r-unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc4-r-snorm";aspect="all"] - expected: FAIL - - [:format="bc4-r-snorm";aspect="depth-only"] - expected: FAIL - - [:format="bc4-r-snorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc5-rg-unorm";aspect="all"] - expected: FAIL - - [:format="bc5-rg-unorm";aspect="depth-only"] - expected: FAIL - - [:format="bc5-rg-unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc5-rg-snorm";aspect="all"] - expected: FAIL - - [:format="bc5-rg-snorm";aspect="depth-only"] - expected: FAIL - - [:format="bc5-rg-snorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc6h-rgb-ufloat";aspect="all"] - expected: FAIL - - [:format="bc6h-rgb-ufloat";aspect="depth-only"] - expected: FAIL - - [:format="bc6h-rgb-ufloat";aspect="stencil-only"] - expected: FAIL - - [:format="bc6h-rgb-float";aspect="all"] - expected: FAIL - - [:format="bc6h-rgb-float";aspect="depth-only"] - expected: FAIL - - [:format="bc6h-rgb-float";aspect="stencil-only"] - expected: FAIL - - [:format="bc7-rgba-unorm";aspect="all"] - expected: FAIL - - [:format="bc7-rgba-unorm";aspect="depth-only"] - expected: FAIL - - [:format="bc7-rgba-unorm";aspect="stencil-only"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";aspect="all"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";aspect="depth-only"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";aspect="stencil-only"] - expected: FAIL - - [:format="rgb10a2uint";aspect="all"] - expected: FAIL - - [:format="rgb10a2uint";aspect="depth-only"] - expected: FAIL - - [:format="rgb10a2uint";aspect="stencil-only"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:indirect_dispatch_buffer_state:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_assignment:*] [:] expected: FAIL -[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:multiple_frames:*] - [:canvasType="onscreen"] +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asin:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,texture,destroy:submit_a_destroyed_texture_as_attachment:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,index_access:out_of_bounds_zero_sized_index_buffer:*] + [:indexCount=3;firstIndex=1;instanceCount=1] expected: FAIL - [:canvasType="offscreen"] + [:indexCount=3;firstIndex=1;instanceCount=10000] + expected: FAIL + + [:indexCount=3;firstIndex=0;instanceCount=1] + expected: FAIL + + [:indexCount=3;firstIndex=0;instanceCount=10000] + expected: FAIL + + [:indexCount=0;firstIndex=1;instanceCount=1] + expected: FAIL + + [:indexCount=0;firstIndex=1;instanceCount=10000] + expected: FAIL + + [:indexCount=0;firstIndex=0;instanceCount=1] + expected: FAIL + + [:indexCount=0;firstIndex=0;instanceCount=10000] expected: FAIL -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,value,validation_error:*] - [:isAsync=true;constants={"cu":0}] +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:shader_stages_and_visibility,storage_write:*] + [:compute=false] expected: FAIL - [:isAsync=true;constants={"cu":-1}] - expected: FAIL - - [:isAsync=true;constants={"cu":4294967295}] - expected: FAIL - - [:isAsync=true;constants={"cu":4294967296}] - expected: FAIL - - [:isAsync=true;constants={"ci":-2147483648}] - expected: FAIL - - [:isAsync=true;constants={"ci":-2147483649}] - expected: FAIL - - [:isAsync=true;constants={"ci":2147483647}] - expected: FAIL - - [:isAsync=true;constants={"ci":2147483648}] - expected: FAIL - - [:isAsync=true;constants={"cf":-3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=true;constants={"cf":-3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=true;constants={"cf":3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=true;constants={"cf":3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=true;constants={"cb":1.7976931348623157e%2B308}] - expected: FAIL - - [:isAsync=true;constants={"cb":-2147483649}] - expected: FAIL - - [:isAsync=false;constants={"cu":0}] - expected: FAIL - - [:isAsync=false;constants={"cu":-1}] - expected: FAIL - - [:isAsync=false;constants={"cu":4294967295}] - expected: FAIL - - [:isAsync=false;constants={"cu":4294967296}] - expected: FAIL - - [:isAsync=false;constants={"ci":-2147483648}] - expected: FAIL - - [:isAsync=false;constants={"ci":-2147483649}] - expected: FAIL - - [:isAsync=false;constants={"ci":2147483647}] - expected: FAIL - - [:isAsync=false;constants={"ci":2147483648}] - expected: FAIL - - [:isAsync=false;constants={"cf":-3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=false;constants={"cf":-3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=false;constants={"cf":3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=false;constants={"cf":3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=false;constants={"cb":1.7976931348623157e%2B308}] - expected: FAIL - - [:isAsync=false;constants={"cb":-2147483649}] + [:compute=true] expected: FAIL -[cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sampleWithRotationMetadata:*] - [:sourceType="VideoElement";videoName="four-colors-h264-bt601-rotate-90.mp4"] +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:buffer_usage:*] + [:] expected: FAIL - [:sourceType="VideoElement";videoName="four-colors-h264-bt601-rotate-180.mp4"] + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:buffer,device_mismatch:*] + [:] expected: FAIL - [:sourceType="VideoElement";videoName="four-colors-h264-bt601-rotate-270.mp4"] + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:let_ptr_explicit_type_matches_var:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_vector_multiplication:vector_matrix:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:conflicting_attribute_same_location:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,sampling,anisotropy:anisotropic_filter_mipmap_color:*] + [:maxAnisotropy=1] expected: FAIL - [:sourceType="VideoFrame";videoName="four-colors-h264-bt601-rotate-90.mp4"] + [:maxAnisotropy=4] expected: FAIL - [:sourceType="VideoFrame";videoName="four-colors-h264-bt601-rotate-180.mp4"] - expected: FAIL - [:sourceType="VideoFrame";videoName="four-colors-h264-bt601-rotate-270.mp4"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:scalar:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_vector_scalar:*] + expected: CRASH [cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL + expected: CRASH - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createPipelineLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:location,subset:*] - [:isAsync=false] - expected: FAIL - - [:isAsync=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompare:stage:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,mipmap_level_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:cowr:*] - [:memType="atomic_storage";testType="inter_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,color_attachment_and_bind_group:*] - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="storage";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1;bgUsage="texture";inSamePass=false] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=true] - expected: FAIL - - [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2;bgUsage="texture";inSamePass=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:setVertexBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:resolveQuerySet:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:uninitialized,vertex:*] - [:isAsync=true;vertexConstants={}] - expected: FAIL - - [:isAsync=true;vertexConstants={"x":1,"y":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"x":1,"z":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"x":1,"y":1,"z":1,"w":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={}] - expected: FAIL - - [:isAsync=false;vertexConstants={"x":1,"y":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"x":1,"z":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"x":1,"y":1,"z":1,"w":1}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestampWrites,query_index:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,resource_interface,bindings:single_entry_point:*] - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_return:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestamp_query_set,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:matching_abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,log:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_multiple_case_default:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_continue:*] [:preventValueOptimizations=true] expected: FAIL @@ -7773,785 +386,12 @@ expected: FAIL -[cts.https.html?q=webgpu:shader,validation,parse,binary_ops:all:*] - [:stmt="and_bool_literal_bool_literal"] - expected: FAIL - - [:stmt="and_bool_expr_bool_expr"] - expected: FAIL - - [:stmt="and_bool_literal_bool_expr"] - expected: FAIL - - [:stmt="and_bool_expr_bool_literal"] - expected: FAIL - - [:stmt="and_bool_literal_int_literal"] - expected: FAIL - - [:stmt="and_int_literal_bool_literal"] - expected: FAIL - - [:stmt="and_bool_expr_int_literal"] - expected: FAIL - - [:stmt="and_int_literal_bool_expr"] - expected: FAIL - - [:stmt="or_bool_literal_bool_literal"] - expected: FAIL - - [:stmt="or_bool_expr_bool_expr"] - expected: FAIL - - [:stmt="or_bool_literal_bool_expr"] - expected: FAIL - - [:stmt="or_bool_expr_bool_literal"] - expected: FAIL - - [:stmt="or_bool_literal_int_literal"] - expected: FAIL - - [:stmt="or_int_literal_bool_literal"] - expected: FAIL - - [:stmt="or_bool_expr_int_literal"] - expected: FAIL - - [:stmt="or_int_literal_bool_expr"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_depthFailOp_operation:*] - [:format="depth24plus-stencil8";depthFailOp="keep";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="zero";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="replace";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="invert";initialStencil=240] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="decrement-wrap";initialStencil=2] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthFailOp="decrement-wrap";initialStencil=0] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="keep";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="zero";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="replace";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="invert";initialStencil=240] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="decrement-wrap";initialStencil=2] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";depthFailOp="decrement-wrap";initialStencil=0] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_assignment:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:vec4_constructor:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,shader_io,shared_structs:shared_with_non_entry_point_function:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:offset_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:sampleCount,valid_sampleCount_with_other_parameter_varies:*] - [:dimension="_undef_";format="r8unorm"] - expected: FAIL - - [:dimension="_undef_";format="r8snorm"] - expected: FAIL - - [:dimension="_undef_";format="r8uint"] - expected: FAIL - - [:dimension="_undef_";format="r8sint"] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8uint"] - expected: FAIL - - [:dimension="_undef_";format="rg8sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="r16uint"] - expected: FAIL - - [:dimension="_undef_";format="r16sint"] - expected: FAIL - - [:dimension="_undef_";format="r16float"] - expected: FAIL - - [:dimension="_undef_";format="rg16uint"] - expected: FAIL - - [:dimension="_undef_";format="rg16sint"] - expected: FAIL - - [:dimension="_undef_";format="rg16float"] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16float"] - expected: FAIL - - [:dimension="_undef_";format="r32uint"] - expected: FAIL - - [:dimension="_undef_";format="r32sint"] - expected: FAIL - - [:dimension="_undef_";format="r32float"] - expected: FAIL - - [:dimension="_undef_";format="rg32uint"] - expected: FAIL - - [:dimension="_undef_";format="rg32sint"] - expected: FAIL - - [:dimension="_undef_";format="rg32float"] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32float"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm"] - expected: FAIL - - [:dimension="_undef_";format="depth32float"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r8unorm"] - expected: FAIL - - [:dimension="1d";format="r8snorm"] - expected: FAIL - - [:dimension="1d";format="r8uint"] - expected: FAIL - - [:dimension="1d";format="r8sint"] - expected: FAIL - - [:dimension="1d";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";format="rg8uint"] - expected: FAIL - - [:dimension="1d";format="rg8sint"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r16uint"] - expected: FAIL - - [:dimension="1d";format="r16sint"] - expected: FAIL - - [:dimension="1d";format="r16float"] - expected: FAIL - - [:dimension="1d";format="rg16uint"] - expected: FAIL - - [:dimension="1d";format="rg16sint"] - expected: FAIL - - [:dimension="1d";format="rg16float"] - expected: FAIL - - [:dimension="1d";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";format="rgba16float"] - expected: FAIL - - [:dimension="1d";format="r32uint"] - expected: FAIL - - [:dimension="1d";format="r32sint"] - expected: FAIL - - [:dimension="1d";format="r32float"] - expected: FAIL - - [:dimension="1d";format="rg32uint"] - expected: FAIL - - [:dimension="1d";format="rg32sint"] - expected: FAIL - - [:dimension="1d";format="rg32float"] - expected: FAIL - - [:dimension="1d";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";format="rgba32float"] - expected: FAIL - - [:dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="r8unorm"] - expected: FAIL - - [:dimension="2d";format="r8snorm"] - expected: FAIL - - [:dimension="2d";format="r8uint"] - expected: FAIL - - [:dimension="2d";format="r8sint"] - expected: FAIL - - [:dimension="2d";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";format="rg8uint"] - expected: FAIL - - [:dimension="2d";format="rg8sint"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r16uint"] - expected: FAIL - - [:dimension="2d";format="r16sint"] - expected: FAIL - - [:dimension="2d";format="r16float"] - expected: FAIL - - [:dimension="2d";format="rg16uint"] - expected: FAIL - - [:dimension="2d";format="rg16sint"] - expected: FAIL - - [:dimension="2d";format="rg16float"] - expected: FAIL - - [:dimension="2d";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";format="rgba16float"] - expected: FAIL - - [:dimension="2d";format="r32uint"] - expected: FAIL - - [:dimension="2d";format="r32sint"] - expected: FAIL - - [:dimension="2d";format="r32float"] - expected: FAIL - - [:dimension="2d";format="rg32uint"] - expected: FAIL - - [:dimension="2d";format="rg32sint"] - expected: FAIL - - [:dimension="2d";format="rg32float"] - expected: FAIL - - [:dimension="2d";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";format="rgba32float"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="stencil8"] - expected: FAIL - - [:dimension="2d";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";format="depth32float"] - expected: FAIL - - [:dimension="2d";format="depth24plus"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r8unorm"] - expected: FAIL - - [:dimension="3d";format="r8snorm"] - expected: FAIL - - [:dimension="3d";format="r8uint"] - expected: FAIL - - [:dimension="3d";format="r8sint"] - expected: FAIL - - [:dimension="3d";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";format="rg8uint"] - expected: FAIL - - [:dimension="3d";format="rg8sint"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r16uint"] - expected: FAIL - - [:dimension="3d";format="r16sint"] - expected: FAIL - - [:dimension="3d";format="r16float"] - expected: FAIL - - [:dimension="3d";format="rg16uint"] - expected: FAIL - - [:dimension="3d";format="rg16sint"] - expected: FAIL - - [:dimension="3d";format="rg16float"] - expected: FAIL - - [:dimension="3d";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";format="rgba16float"] - expected: FAIL - - [:dimension="3d";format="r32uint"] - expected: FAIL - - [:dimension="3d";format="r32sint"] - expected: FAIL - - [:dimension="3d";format="r32float"] - expected: FAIL - - [:dimension="3d";format="rg32uint"] - expected: FAIL - - [:dimension="3d";format="rg32sint"] - expected: FAIL - - [:dimension="3d";format="rg32float"] - expected: FAIL - - [:dimension="3d";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";format="rgba32float"] - expected: FAIL - - [:dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,shader_module:device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:configure,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:max_buffers_and_attribs:*] +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:vertex_buffer_used_multiple_times_overlapped:*] [:format="uint8x2"] expected: FAIL @@ -8642,20052 +482,41 @@ [:format="sint32x4"] expected: FAIL - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dpdxFine:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,different_size:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,debug:debug_group:*] - [:encoderType="non-pass"] - expected: FAIL - - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:matching_f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,stencil:*] - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_gl_context_canvas:*] - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:not_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeBuffer:buffer_state:*] - [:bufferState="valid"] - expected: FAIL - - [:bufferState="invalid"] - expected: FAIL - - [:bufferState="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:format:*] - [:isAsync=false;format="r8unorm"] - expected: FAIL - - [:isAsync=false;format="r8snorm"] - expected: FAIL - - [:isAsync=false;format="r8uint"] - expected: FAIL - - [:isAsync=false;format="r8sint"] - expected: FAIL - - [:isAsync=false;format="rg8unorm"] - expected: FAIL - - [:isAsync=false;format="rg8snorm"] - expected: FAIL - - [:isAsync=false;format="rg8uint"] - expected: FAIL - - [:isAsync=false;format="rg8sint"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="rgba8snorm"] - expected: FAIL - - [:isAsync=false;format="rgba8uint"] - expected: FAIL - - [:isAsync=false;format="rgba8sint"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="r16uint"] - expected: FAIL - - [:isAsync=false;format="r16sint"] - expected: FAIL - - [:isAsync=false;format="r16float"] - expected: FAIL - - [:isAsync=false;format="rg16uint"] - expected: FAIL - - [:isAsync=false;format="rg16sint"] - expected: FAIL - - [:isAsync=false;format="rg16float"] - expected: FAIL - - [:isAsync=false;format="rgba16uint"] - expected: FAIL - - [:isAsync=false;format="rgba16sint"] - expected: FAIL - - [:isAsync=false;format="rgba16float"] - expected: FAIL - - [:isAsync=false;format="r32uint"] - expected: FAIL - - [:isAsync=false;format="r32sint"] - expected: FAIL - - [:isAsync=false;format="r32float"] - expected: FAIL - - [:isAsync=false;format="rg32uint"] - expected: FAIL - - [:isAsync=false;format="rg32sint"] - expected: FAIL - - [:isAsync=false;format="rg32float"] - expected: FAIL - - [:isAsync=false;format="rgba32uint"] - expected: FAIL - - [:isAsync=false;format="rgba32sint"] - expected: FAIL - - [:isAsync=false;format="rgba32float"] - expected: FAIL - - [:isAsync=false;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=false;format="rg11b10ufloat"] - expected: FAIL - - [:isAsync=false;format="rgb9e5ufloat"] - expected: FAIL - - [:isAsync=false;format="stencil8"] - expected: FAIL - - [:isAsync=false;format="depth16unorm"] - expected: FAIL - - [:isAsync=false;format="depth32float"] - expected: FAIL - - [:isAsync=false;format="depth24plus"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8"] - expected: FAIL - - [:isAsync=false;format="bc1-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="bc2-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="bc3-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="bc4-r-unorm"] - expected: FAIL - - [:isAsync=false;format="bc4-r-snorm"] - expected: FAIL - - [:isAsync=false;format="bc5-rg-unorm"] - expected: FAIL - - [:isAsync=false;format="bc5-rg-snorm"] - expected: FAIL - - [:isAsync=false;format="bc6h-rgb-ufloat"] - expected: FAIL - - [:isAsync=false;format="bc6h-rgb-float"] - expected: FAIL - - [:isAsync=false;format="bc7-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="r8unorm"] - expected: FAIL - - [:isAsync=true;format="r8snorm"] - expected: FAIL - - [:isAsync=true;format="r8uint"] - expected: FAIL - - [:isAsync=true;format="r8sint"] - expected: FAIL - - [:isAsync=true;format="rg8unorm"] - expected: FAIL - - [:isAsync=true;format="rg8snorm"] - expected: FAIL - - [:isAsync=true;format="rg8uint"] - expected: FAIL - - [:isAsync=true;format="rg8sint"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="rgba8snorm"] - expected: FAIL - - [:isAsync=true;format="rgba8uint"] - expected: FAIL - - [:isAsync=true;format="rgba8sint"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="r16uint"] - expected: FAIL - - [:isAsync=true;format="r16sint"] - expected: FAIL - - [:isAsync=true;format="r16float"] - expected: FAIL - - [:isAsync=true;format="rg16uint"] - expected: FAIL - - [:isAsync=true;format="rg16sint"] - expected: FAIL - - [:isAsync=true;format="rg16float"] - expected: FAIL - - [:isAsync=true;format="rgba16uint"] - expected: FAIL - - [:isAsync=true;format="rgba16sint"] - expected: FAIL - - [:isAsync=true;format="rgba16float"] - expected: FAIL - - [:isAsync=true;format="r32uint"] - expected: FAIL - - [:isAsync=true;format="r32sint"] - expected: FAIL - - [:isAsync=true;format="r32float"] - expected: FAIL - - [:isAsync=true;format="rg32uint"] - expected: FAIL - - [:isAsync=true;format="rg32sint"] - expected: FAIL - - [:isAsync=true;format="rg32float"] - expected: FAIL - - [:isAsync=true;format="rgba32uint"] - expected: FAIL - - [:isAsync=true;format="rgba32sint"] - expected: FAIL - - [:isAsync=true;format="rgba32float"] - expected: FAIL - - [:isAsync=true;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=true;format="rg11b10ufloat"] - expected: FAIL - - [:isAsync=true;format="rgb9e5ufloat"] - expected: FAIL - - [:isAsync=true;format="stencil8"] - expected: FAIL - - [:isAsync=true;format="depth16unorm"] - expected: FAIL - - [:isAsync=true;format="depth32float"] - expected: FAIL - - [:isAsync=true;format="depth24plus"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8"] - expected: FAIL - - [:isAsync=true;format="bc1-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="bc2-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="bc3-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="bc4-r-unorm"] - expected: FAIL - - [:isAsync=true;format="bc4-r-snorm"] - expected: FAIL - - [:isAsync=true;format="bc5-rg-unorm"] - expected: FAIL - - [:isAsync=true;format="bc5-rg-snorm"] - expected: FAIL - - [:isAsync=true;format="bc6h-rgb-ufloat"] - expected: FAIL - - [:isAsync=true;format="bc6h-rgb-float"] - expected: FAIL - - [:isAsync=true;format="bc7-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="rgb10a2uint"] - expected: FAIL - - [:isAsync=true;format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,effective_buffer_binding_size:*] - [:type="uniform"] - expected: FAIL - - [:type="storage"] - expected: FAIL - - [:type="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleBias:stage:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:unmap,state,mappingPending:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:drawTo2DCanvas:*] - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="onscreen";canvas2DType="offscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="onscreen"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";webgpuCanvasType="offscreen";canvas2DType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeBuffer:ranges:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:setBindGroup:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:abstract_int:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:usage:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,video:copy_from_video_element:*] - [:videoName="four-colors-vp8-bt601.webm";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp8-bt601.webm";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm";srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setViewport,x_y_width_height_nonnegative:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,clear_value:srgb:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_disabled:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:without_work:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,storeop2:storeOp_controls_whether_1x1_drawn_quad_is_stored:*] - [:storeOp="store"] - expected: FAIL - - [:storeOp="discard"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:compute_pass_commands:*] - [:command="setBindGroup"] - expected: FAIL - - [:command="setPipeline"] - expected: FAIL - - [:command="dispatchWorkgroups"] - expected: FAIL - - [:command="dispatchWorkgroupsIndirect"] - expected: FAIL - - [:command="pushDebugGroup"] - expected: FAIL - - [:command="popDebugGroup"] - expected: FAIL - - [:command="insertDebugMarker"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:max_vertex_attribute_limit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,pass_boundary,render:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_exclusive_or_compound:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_write_disabled:*] - [:depthWriteEnabled=false;lastDepth=0] - expected: FAIL - - [:depthWriteEnabled=false;lastDepth=1] - expected: FAIL - - [:depthWriteEnabled=true;lastDepth=0] - expected: FAIL - - [:depthWriteEnabled=true;lastDepth=1] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,debugMarker:push_pop_call_count_unbalance,command_encoder:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:resize:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute,basic:large_dispatch:*] - [:dispatchSize=256] - expected: FAIL - - [:dispatchSize=2048] - expected: FAIL - - [:dispatchSize=315] - expected: FAIL - - [:dispatchSize=628] - expected: FAIL - - [:dispatchSize=2179] - expected: FAIL - - [:dispatchSize=65535] - expected: FAIL - - [:dispatchSize="maximum"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,query_set,destroy:invalid_queryset:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cosh:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:basic:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_complex_condition:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,empty_color_formats:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createSampler:maxAnisotropy:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bind_groups_and_pipeline_layout_mismatch:*] - [:encoderType="compute%20pass";call="dispatch";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatch";callWithZero=false] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec2_whole:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,destroy:all_usages:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,read,typedArrayAccess:*] - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="minimal"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,device,lost:same_object:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:*] - [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="1d"] - expected: FAIL - - [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="3d"] - expected: FAIL - - [:srcFormat="r8uint";dstFormat="r8uint";dimension="1d"] - expected: FAIL - - [:srcFormat="r8uint";dstFormat="r8uint";dimension="2d"] - expected: FAIL - - [:srcFormat="r8uint";dstFormat="r8uint";dimension="3d"] - expected: FAIL - - [:srcFormat="r8sint";dstFormat="r8sint";dimension="1d"] - expected: FAIL - - [:srcFormat="r8sint";dstFormat="r8sint";dimension="2d"] - expected: FAIL - - [:srcFormat="r8sint";dstFormat="r8sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="1d"] - expected: FAIL - - [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="1d"] - expected: FAIL - - [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="r16uint";dstFormat="r16uint";dimension="1d"] - expected: FAIL - - [:srcFormat="r16uint";dstFormat="r16uint";dimension="2d"] - expected: FAIL - - [:srcFormat="r16uint";dstFormat="r16uint";dimension="3d"] - expected: FAIL - - [:srcFormat="r16sint";dstFormat="r16sint";dimension="1d"] - expected: FAIL - - [:srcFormat="r16sint";dstFormat="r16sint";dimension="2d"] - expected: FAIL - - [:srcFormat="r16sint";dstFormat="r16sint";dimension="3d"] - expected: FAIL - - [:srcFormat="r16float";dstFormat="r16float";dimension="1d"] - expected: FAIL - - [:srcFormat="r16float";dstFormat="r16float";dimension="2d"] - expected: FAIL - - [:srcFormat="r16float";dstFormat="r16float";dimension="3d"] - expected: FAIL - - [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="1d"] - expected: FAIL - - [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg16float";dstFormat="rg16float";dimension="1d"] - expected: FAIL - - [:srcFormat="rg16float";dstFormat="rg16float";dimension="2d"] - expected: FAIL - - [:srcFormat="rg16float";dstFormat="rg16float";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="3d"] - expected: FAIL - - [:srcFormat="r32uint";dstFormat="r32uint";dimension="1d"] - expected: FAIL - - [:srcFormat="r32uint";dstFormat="r32uint";dimension="2d"] - expected: FAIL - - [:srcFormat="r32uint";dstFormat="r32uint";dimension="3d"] - expected: FAIL - - [:srcFormat="r32sint";dstFormat="r32sint";dimension="1d"] - expected: FAIL - - [:srcFormat="r32sint";dstFormat="r32sint";dimension="2d"] - expected: FAIL - - [:srcFormat="r32sint";dstFormat="r32sint";dimension="3d"] - expected: FAIL - - [:srcFormat="r32float";dstFormat="r32float";dimension="1d"] - expected: FAIL - - [:srcFormat="r32float";dstFormat="r32float";dimension="2d"] - expected: FAIL - - [:srcFormat="r32float";dstFormat="r32float";dimension="3d"] - expected: FAIL - - [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="1d"] - expected: FAIL - - [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg32float";dstFormat="rg32float";dimension="1d"] - expected: FAIL - - [:srcFormat="rg32float";dstFormat="rg32float";dimension="2d"] - expected: FAIL - - [:srcFormat="rg32float";dstFormat="rg32float";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="1d"] - expected: FAIL - - [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="3d"] - expected: FAIL - - [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:duplicate_compute_on_function:*] - [:dupe=""] - expected: FAIL - - [:dupe="%40compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,usage:*] - [:type="uniform"] - expected: FAIL - - [:type="storage"] - expected: FAIL - - [:type="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_misc:subresources,reset_buffer_usage_before_dispatch:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="uniform";usage1="indirect"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="storage"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="indirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:multiple_pairs_of_draws_in_one_render_bundle:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec4h_to_vec2u:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,storageBarrier:stage:*] - [:stage="vertex"] - expected: FAIL - - [:stage="fragment"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:texture_descriptor_view_formats:*] - [:format="depth32float-stencil8";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-snorm";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-snorm";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-snorm";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-snorm";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-float";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-float";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11unorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11snorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11unorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11snorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm-srgb";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,general:occlusion_query,invalid_query_set:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:copy_depth_stencil:*] - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:matrix_index_via_ptr:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack2x16snorm:unpack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:vector_scalar_compound:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec3_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,pass_boundary,compute:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,call:call_basic:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompare:3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:alpha_mode:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,compressed,non_array:*] - [:srcFormat="bc1-rgba-unorm";dstFormat="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc1-rgba-unorm";dstFormat="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc1-rgba-unorm-srgb";dstFormat="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc1-rgba-unorm-srgb";dstFormat="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc4-r-unorm";dstFormat="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc4-r-snorm";dstFormat="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc5-rg-unorm";dstFormat="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc5-rg-snorm";dstFormat="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc6h-rgb-ufloat";dstFormat="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:srcFormat="bc6h-rgb-float";dstFormat="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_or:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,basic:empty:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_return_type:*] - [:target_stage=""] - expected: FAIL - - [:target_stage="vertex"] - expected: FAIL - - [:target_stage="fragment"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:bool:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:identifier,fragment:*] - [:isAsync=true;fragmentConstants={}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"r":1,"g":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"1":1,"1000":1,"r":1,"g":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"r%5Cu0000":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"xxx":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"1":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"2":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"b":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"a":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"1":1,"b":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"%E6%95%B0":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"s%C3%A9quen%C3%A7age":0}] - expected: FAIL - - [:isAsync=false;fragmentConstants={}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"r":1,"g":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"1":1,"1000":1,"r":1,"g":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"r%5Cu0000":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"xxx":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"1":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"2":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"b":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"a":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"1":1,"b":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"%E6%95%B0":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"s%C3%A9quen%C3%A7age":0}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,format_supports_resolve:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,exp:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,locations:duplicates:*] - [:first="p1";second="p2"] - expected: FAIL - - [:first="p1";second="s1b"] - expected: FAIL - - [:first="p1";second="s2b"] - expected: FAIL - - [:first="p1";second="rb"] - expected: FAIL - - [:first="s1a";second="p2"] - expected: FAIL - - [:first="s1a";second="s1b"] - expected: FAIL - - [:first="s1a";second="s2b"] - expected: FAIL - - [:first="s1a";second="rb"] - expected: FAIL - - [:first="s2a";second="p2"] - expected: FAIL - - [:first="s2a";second="s1b"] - expected: FAIL - - [:first="s2a";second="s2b"] - expected: FAIL - - [:first="s2a";second="rb"] - expected: FAIL - - [:first="ra";second="p2"] - expected: FAIL - - [:first="ra";second="s1b"] - expected: FAIL - - [:first="ra";second="s2b"] - expected: FAIL - - [:first="ra";second="rb"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,programmable,state_tracking:bind_group_indices:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:vertex_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_and_compound:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth_clip_clamp:depth_test_input_clamped:*] - [:format="depth16unorm";unclippedDepth=false;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=false;multisampled=true] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=true;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=true;multisampled=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,shader_module,overrides:id_conflict:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,break:placement:*] - [:stmt="loop_break"] - expected: FAIL - - [:stmt="loop_if_break"] - expected: FAIL - - [:stmt="continuing_break_if"] - expected: FAIL - - [:stmt="while_break"] - expected: FAIL - - [:stmt="while_if_break"] - expected: FAIL - - [:stmt="for_break"] - expected: FAIL - - [:stmt="for_if_break"] - expected: FAIL - - [:stmt="switch_case_break"] - expected: FAIL - - [:stmt="switch_case_if_break"] - expected: FAIL - - [:stmt="break"] - expected: FAIL - - [:stmt="return_break"] - expected: FAIL - - [:stmt="if_break"] - expected: FAIL - - [:stmt="continuing_break"] - expected: FAIL - - [:stmt="continuing_if_break"] - expected: FAIL - - [:stmt="switch_break"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:wr:*] - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_increment_overflow:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeTexture:sample_count:*] - [:sampleCount=1] - expected: FAIL - - [:sampleCount=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,any:bool:*] - [:inputSource="const";overload="scalar"] - expected: FAIL - - [:inputSource="const";overload="vec2"] - expected: FAIL - - [:inputSource="const";overload="vec3"] - expected: FAIL - - [:inputSource="const";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";overload="scalar"] - expected: FAIL - - [:inputSource="uniform";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";overload="scalar"] - expected: FAIL - - [:inputSource="storage_r";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";overload="scalar"] - expected: FAIL - - [:inputSource="storage_rw";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";overload="vec4"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:abstract_float:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,usage:*] - [:usage=3] - expected: FAIL - - [:usage=12] - expected: FAIL - - [:usage=8] - expected: FAIL - - [:usage=20] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension3D:createTexture,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:color_write_mask,blending_disabled:*] - [:disabled=false] - expected: FAIL - - [:disabled=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompareLevel:2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:copy_rectangle:*] - [:method="WriteTexture";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:not_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:stencil_write:*] - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="stencil8";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="stencil8";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="frontPassOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backDepthFailOp";op="decrement-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="keep"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="zero"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="replace"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="invert"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="increment-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="decrement-clamp"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="increment-wrap"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";faceAndOpType="backPassOp";op="decrement-wrap"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countOneBits:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shader_io,shared_structs:shared_between_stages:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,destroy:base:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec4_element_increment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mappingPending:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,validation_error,vertex:*] - [:isAsync=true;vertexConstants={"cu":0}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cu":-1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cu":4294967295}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cu":4294967296}] - expected: FAIL - - [:isAsync=true;vertexConstants={"ci":-2147483648}] - expected: FAIL - - [:isAsync=true;vertexConstants={"ci":-2147483649}] - expected: FAIL - - [:isAsync=true;vertexConstants={"ci":2147483647}] - expected: FAIL - - [:isAsync=true;vertexConstants={"ci":2147483648}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":-3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":-3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cb":1.7976931348623157e%2B308}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cb":-2147483649}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cu":0}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cu":-1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cu":4294967295}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cu":4294967296}] - expected: FAIL - - [:isAsync=false;vertexConstants={"ci":-2147483648}] - expected: FAIL - - [:isAsync=false;vertexConstants={"ci":-2147483649}] - expected: FAIL - - [:isAsync=false;vertexConstants={"ci":2147483647}] - expected: FAIL - - [:isAsync=false;vertexConstants={"ci":2147483648}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":-3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":-3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cb":1.7976931348623157e%2B308}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cb":-2147483649}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,destroy:invalid_texture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:not_implemented_yet,with_plan:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texture_ok:norm:*] - [:mode="bytes";format="r8unorm"] - expected: FAIL - - [:mode="bytes";format="r8snorm"] - expected: FAIL - - [:mode="colors";format="r8unorm"] - expected: FAIL - - [:mode="colors";format="r8snorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dpdyFine:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:*] - [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="3d"] - expected: FAIL - - [:srcFormat="r8uint";dstFormat="r8uint";dimension="2d"] - expected: FAIL - - [:srcFormat="r8uint";dstFormat="r8uint";dimension="3d"] - expected: FAIL - - [:srcFormat="r8sint";dstFormat="r8sint";dimension="2d"] - expected: FAIL - - [:srcFormat="r8sint";dstFormat="r8sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:srcFormat="r16uint";dstFormat="r16uint";dimension="2d"] - expected: FAIL - - [:srcFormat="r16uint";dstFormat="r16uint";dimension="3d"] - expected: FAIL - - [:srcFormat="r16sint";dstFormat="r16sint";dimension="2d"] - expected: FAIL - - [:srcFormat="r16sint";dstFormat="r16sint";dimension="3d"] - expected: FAIL - - [:srcFormat="r16float";dstFormat="r16float";dimension="2d"] - expected: FAIL - - [:srcFormat="r16float";dstFormat="r16float";dimension="3d"] - expected: FAIL - - [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg16float";dstFormat="rg16float";dimension="2d"] - expected: FAIL - - [:srcFormat="rg16float";dstFormat="rg16float";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="3d"] - expected: FAIL - - [:srcFormat="r32uint";dstFormat="r32uint";dimension="2d"] - expected: FAIL - - [:srcFormat="r32uint";dstFormat="r32uint";dimension="3d"] - expected: FAIL - - [:srcFormat="r32sint";dstFormat="r32sint";dimension="2d"] - expected: FAIL - - [:srcFormat="r32sint";dstFormat="r32sint";dimension="3d"] - expected: FAIL - - [:srcFormat="r32float";dstFormat="r32float";dimension="2d"] - expected: FAIL - - [:srcFormat="r32float";dstFormat="r32float";dimension="3d"] - expected: FAIL - - [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rg32float";dstFormat="rg32float";dimension="2d"] - expected: FAIL - - [:srcFormat="rg32float";dstFormat="rg32float";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="3d"] - expected: FAIL - - [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="2d"] - expected: FAIL - - [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="3d"] - expected: FAIL - - [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,sizeAndOffsetOOB,mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:multiple_pairs_of_draws_in_one_render_pass:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:monmatching_f16:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:sampled_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack4x8snorm:unpack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:beginOcclusionQuery:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:ww:*] - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"write-texture","in":"queue"};second={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-store","in":"command-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-store","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-store","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-store","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-store","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-store","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"render-pass-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"render-pass-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"render-pass-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"render-bundle-encoder"};second={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"render-bundle-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";first={"op":"storage","in":"render-bundle-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"b2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"t2t-copy","in":"command-encoder"};second={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"attachment-resolve","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"render-pass-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"render-pass-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"render-bundle-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";first={"op":"storage","in":"render-bundle-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="pass";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="dispatch";first={"op":"storage","in":"compute-pass-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:coww:*] - [:memType="atomic_storage";testType="inter_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:non_pass_commands:*] - [:command="beginComputePass"] - expected: FAIL - - [:command="beginRenderPass"] - expected: FAIL - - [:command="clearBuffer"] - expected: FAIL - - [:command="copyBufferToBuffer"] - expected: FAIL - - [:command="copyBufferToTexture"] - expected: FAIL - - [:command="copyTextureToBuffer"] - expected: FAIL - - [:command="copyTextureToTexture"] - expected: FAIL - - [:command="insertDebugMarker"] - expected: FAIL - - [:command="popDebugGroup"] - expected: FAIL - - [:command="pushDebugGroup"] - expected: FAIL - - [:command="writeTimestamp"] - expected: FAIL - - [:command="resolveQuerySet"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,invalid_mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeBuffer:usages:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:compute_parsing:*] - [:val=""] - expected: FAIL - - [:val="%40compute"] - expected: FAIL - - [:val="%40%5Ctcompute"] - expected: FAIL - - [:val="%40%2F%5Ecomment%5E%2Fcompute"] - expected: FAIL - - [:val="%40mcompute"] - expected: FAIL - - [:val="%40compute()"] - expected: FAIL - - [:val="%40compute%20)"] - expected: FAIL - - [:val="%40compute("] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bgl_binding_mismatch:*] - [:encoderType="compute%20pass";call="dispatch";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatch";callWithZero=false] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth_clip_clamp:depth_clamp_and_clip:*] - [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=false;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=false;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=false;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=false;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=true;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=true;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=true;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth16unorm";unclippedDepth=true;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth="_undef_";writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth="_undef_";writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth="_undef_";writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth="_undef_";writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth=false;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth=false;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth=false;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth=false;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth=true;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth=true;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float";unclippedDepth=true;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float";unclippedDepth=true;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth="_undef_";writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth="_undef_";writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth="_undef_";writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth="_undef_";writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth=false;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth=false;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth=false;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth=false;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth=true;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth=true;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus";unclippedDepth=true;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus";unclippedDepth=true;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=true;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=false;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=false;multisampled=true] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=true;multisampled=false] - expected: FAIL - - [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=true;multisampled=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fwidthFine:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:or:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:sampled_2d:*] - [:C="i32";coords="in-bounds";level=-1] - expected: FAIL - - [:C="i32";coords="in-bounds";level=0] - expected: FAIL - - [:C="i32";coords="in-bounds";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="in-bounds";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level=0] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level=0] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level=0] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level=0] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level=0] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level=0] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level=0] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level=0] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="in-bounds";level=-1] - expected: FAIL - - [:C="u32";coords="in-bounds";level=0] - expected: FAIL - - [:C="u32";coords="in-bounds";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="in-bounds";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level=0] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level=0] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level=0] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level=0] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level=0] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level=0] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level=0] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level=0] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level="numlevels"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:valid:*] - [:method="WriteTexture";textureState="valid";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="WriteTexture";textureState="valid";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="WriteTexture";textureState="valid";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="WriteTexture";textureState="valid";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="WriteTexture";textureState="invalid";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="WriteTexture";textureState="invalid";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="WriteTexture";textureState="invalid";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="WriteTexture";textureState="invalid";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="WriteTexture";textureState="destroyed";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="WriteTexture";textureState="destroyed";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="WriteTexture";textureState="destroyed";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="WriteTexture";textureState="destroyed";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";textureState="valid";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyB2T";textureState="valid";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyB2T";textureState="valid";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";textureState="valid";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";textureState="invalid";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyB2T";textureState="invalid";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyB2T";textureState="invalid";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";textureState="invalid";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";textureState="destroyed";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyB2T";textureState="destroyed";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyB2T";textureState="destroyed";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";textureState="destroyed";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";textureState="valid";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyT2B";textureState="valid";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyT2B";textureState="valid";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";textureState="valid";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";textureState="invalid";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyT2B";textureState="invalid";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyT2B";textureState="invalid";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";textureState="invalid";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";textureState="destroyed";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyT2B";textureState="destroyed";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyT2B";textureState="destroyed";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";textureState="destroyed";dimension="3d";size=[4,4,3\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,destroyed:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createSampler:lodMinAndMaxClamp:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:sampled_3d:*] - [:C="i32";coords="in-bounds";level=-1] - expected: FAIL - - [:C="i32";coords="in-bounds";level=0] - expected: FAIL - - [:C="i32";coords="in-bounds";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="in-bounds";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level=0] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level=0] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level=0] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level=0] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level=0] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-min-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level=0] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-min-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level=0] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-max-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level=0] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="y-max-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="z-min-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="z-min-wrap";level=0] - expected: FAIL - - [:C="i32";coords="z-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="z-min-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="z-min-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="z-min-boundary";level=0] - expected: FAIL - - [:C="i32";coords="z-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="z-min-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="z-max-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="z-max-wrap";level=0] - expected: FAIL - - [:C="i32";coords="z-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="z-max-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="z-max-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="z-max-boundary";level=0] - expected: FAIL - - [:C="i32";coords="z-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="z-max-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="in-bounds";level=-1] - expected: FAIL - - [:C="u32";coords="in-bounds";level=0] - expected: FAIL - - [:C="u32";coords="in-bounds";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="in-bounds";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level=0] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level=0] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level=0] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level=0] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level=0] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-min-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level=0] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-min-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level=0] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-max-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level=0] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="y-max-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="z-min-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="z-min-wrap";level=0] - expected: FAIL - - [:C="u32";coords="z-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="z-min-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="z-min-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="z-min-boundary";level=0] - expected: FAIL - - [:C="u32";coords="z-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="z-min-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="z-max-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="z-max-wrap";level=0] - expected: FAIL - - [:C="u32";coords="z-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="z-max-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="z-max-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="z-max-boundary";level=0] - expected: FAIL - - [:C="u32";coords="z-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="z-max-boundary";level="numlevels"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:overlapping_attributes:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createPipelineLayout:*] - [:entry={"buffer":{"type":"uniform"}}] - expected: FAIL - - [:entry={"buffer":{"type":"storage"}}] - expected: FAIL - - [:entry={"buffer":{"type":"read-only-storage"}}] - expected: FAIL - - [:entry={"sampler":{"type":"comparison"}}] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}}] - expected: FAIL - - [:entry={"sampler":{"type":"non-filtering"}}] - expected: FAIL - - [:entry={"texture":{"multisampled":false}}] - expected: FAIL - - [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}}] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - [:entry={"buffer":{"type":"uniform"}};awaitLost=true] - expected: FAIL - - [:entry={"buffer":{"type":"uniform"}};awaitLost=false] - expected: FAIL - - [:entry={"buffer":{"type":"storage"}};awaitLost=true] - expected: FAIL - - [:entry={"buffer":{"type":"storage"}};awaitLost=false] - expected: FAIL - - [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=true] - expected: FAIL - - [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=false] - expected: FAIL - - [:entry={"sampler":{"type":"comparison"}};awaitLost=true] - expected: FAIL - - [:entry={"sampler":{"type":"comparison"}};awaitLost=false] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}};awaitLost=true] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}};awaitLost=false] - expected: FAIL - - [:entry={"sampler":{"type":"non-filtering"}};awaitLost=true] - expected: FAIL - - [:entry={"sampler":{"type":"non-filtering"}};awaitLost=false] - expected: FAIL - - [:entry={"texture":{"multisampled":false}};awaitLost=true] - expected: FAIL - - [:entry={"texture":{"multisampled":false}};awaitLost=false] - expected: FAIL - - [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=true] - expected: FAIL - - [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=false] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}};awaitLost=true] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}};awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:copy_buffer_to_texture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,floor:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:mapped_at_creation_whole_buffer:*] - [:bufferUsage=9] - expected: FAIL - - [:bufferUsage=6] - expected: FAIL - - [:bufferUsage=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,error_scope:balanced_siblings:*] - [:errorFilter="internal";numErrors=1] - expected: FAIL - - [:errorFilter="internal";numErrors=10] - expected: FAIL - - [:errorFilter="internal";numErrors=100] - expected: FAIL - - [:errorFilter="internal";numErrors=1000] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_unconfigured_nonzero_size:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:abstract_float:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_compare_func:*] - [:format="stencil8";stencilCompare="always";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="always";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="always";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="equal";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="equal";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="equal";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="greater";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="greater";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="greater";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="greater-equal";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="greater-equal";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="greater-equal";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="less";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="less";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="less";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="less-equal";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="less-equal";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="less-equal";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="never";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="never";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="never";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";stencilCompare="not-equal";stencilRefValue=0] - expected: FAIL - - [:format="stencil8";stencilCompare="not-equal";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";stencilCompare="not-equal";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="always";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="always";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="always";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="equal";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="equal";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="equal";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="greater";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="greater";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="greater";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="greater-equal";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="greater-equal";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="greater-equal";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="less";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="less";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="less";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="less-equal";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="less-equal";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="less-equal";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="never";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="never";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="never";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="not-equal";stencilRefValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="not-equal";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";stencilCompare="not-equal";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="always";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="always";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="always";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="equal";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="equal";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="equal";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="greater";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="greater";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="greater";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="greater-equal";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="greater-equal";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="greater-equal";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="less";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="less";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="less";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="less-equal";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="less-equal";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="less-equal";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="never";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="never";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="never";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="not-equal";stencilRefValue=0] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="not-equal";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";stencilCompare="not-equal";stencilRefValue=2] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:empty_bind_group_layouts_requires_empty_bind_groups,compute_pass:*] - [:bindGroupLayoutEntryCount=3;computeCommand="dispatchIndirect"] - expected: FAIL - - [:bindGroupLayoutEntryCount=3;computeCommand="dispatch"] - expected: FAIL - - [:bindGroupLayoutEntryCount=4;computeCommand="dispatchIndirect"] - expected: FAIL - - [:bindGroupLayoutEntryCount=4;computeCommand="dispatch"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:depth_stencil_attachment,sample_counts_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_addition:matrix:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dpdyCoarse:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBufferBindingSize:validate,maxBufferSize:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec3_whole:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_none:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,locations:stage_inout:*] - [:use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_matrix_multiplication:matrix_matrix_compound:*] - [:inputSource="const";common_dim=2;x_rows=2] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=3] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=4] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=2] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=3] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=4] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=2] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=3] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=4] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=2] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=3] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=4] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=2] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=3] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=4] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=2] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=3] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:max_vertex_buffer_array_stride_limit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:exchange:*] - [:SC="storage";T="i32"] - expected: FAIL - - [:SC="storage";T="u32"] - expected: FAIL - - [:SC="uniform";T="i32"] - expected: FAIL - - [:SC="uniform";T="u32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fma:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:map_partial_buffer:*] - [:mapMode=1] - expected: FAIL - - [:mapMode=2] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_nested_break:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pipelineType="withLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pipelineType="withoutLocations"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pipelineType="withLocations"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fract:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,different_format:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,empty:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:sample_count:*] - [:copyType="CopyB2T"] - expected: FAIL - - [:copyType="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:scalar:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:sampled_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blend_constant,initial:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:rw:*] - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:require_location:*] - [:stage="vertex";attribute="%40location(0)";use_struct=true] - expected: FAIL - - [:stage="vertex";attribute="%40location(0)";use_struct=false] - expected: FAIL - - [:stage="vertex";attribute="%40builtin(position)";use_struct=true] - expected: FAIL - - [:stage="vertex";attribute="%40builtin(position)";use_struct=false] - expected: FAIL - - [:stage="fragment";attribute="%40location(0)";use_struct=true] - expected: FAIL - - [:stage="fragment";attribute="%40location(0)";use_struct=false] - expected: FAIL - - [:stage="fragment";attribute="%40builtin(position)";use_struct=true] - expected: FAIL - - [:stage="fragment";attribute="%40builtin(position)";use_struct=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,compressed,array:*] - [:srcFormat="bc1-rgba-unorm";dstFormat="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc1-rgba-unorm";dstFormat="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc1-rgba-unorm-srgb";dstFormat="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc1-rgba-unorm-srgb";dstFormat="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc4-r-unorm";dstFormat="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc4-r-snorm";dstFormat="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc5-rg-unorm";dstFormat="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc5-rg-snorm";dstFormat="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc6h-rgb-ufloat";dstFormat="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:srcFormat="bc6h-rgb-float";dstFormat="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,unary_ops:all:*] - [:stmt="not_bool_literal"] - expected: FAIL - - [:stmt="not_bool_expr"] - expected: FAIL - - [:stmt="not_not_bool_literal"] - expected: FAIL - - [:stmt="not_not_bool_expr"] - expected: FAIL - - [:stmt="not_int_literal"] - expected: FAIL - - [:stmt="not_int_expr"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,error_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createPipelineLayout:bind_group_layouts,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:duplicate_fragment_on_function:*] - [:dupe=""] - expected: FAIL - - [:dupe="%40fragment"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,call:call_nested:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:copyTextureToBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:depth_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,misc:basic:*] - [:isAsync=false] - expected: FAIL - - [:isAsync=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureDimension:sampled:*] - [:texture_type="texture_1d"] - expected: FAIL - - [:texture_type="texture_2d"] - expected: FAIL - - [:texture_type="texture_2d_array"] - expected: FAIL - - [:texture_type="texture_3d"] - expected: FAIL - - [:texture_type="texture_cube"] - expected: FAIL - - [:texture_type="texture_cube_array"] - expected: FAIL - - [:texture_type="texture_multisampled_2d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atan:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:single_element:*] - [:type="u32";stride=4] - expected: FAIL - - [:type="i32";stride=4] - expected: FAIL - - [:type="f32";stride=4] - expected: FAIL - - [:type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:type="ElemStruct";stride=4] - expected: FAIL - - [:type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,gpu_external_texture_expiration:import_and_use_in_different_task:*] - [:sourceType="VideoElement"] - expected: FAIL - - [:sourceType="VideoFrame"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_condition:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,clearBuffer:clear:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_exp:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:binding_subregion:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec2_element_increment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:bind_group,device_mismatch:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:integral_types:*] - [:stage="vertex";type="i32";use_struct=true;attribute=""] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute=""] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="i32";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute=""] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute=""] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="u32";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute=""] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute=""] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute=""] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute=""] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="vertex";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute=""] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute=""] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="i32";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute=""] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute=""] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="u32";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute=""] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute=""] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec2%3Ci32%3E";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute=""] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=true;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute=""] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(flat)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear,%20center)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear,%20centroid)"] - expected: FAIL - - [:stage="fragment";type="vec4%3Cu32%3E";use_struct=false;attribute="%40interpolate(linear,%20sample)"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:multisampled:*] - [:texture_type="texture_multisampled_2d"] - expected: FAIL - - [:texture_type="texture_depth_multisampled_2d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,mapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:invalid_use_of_parameters:*] - [:suffix=""] - expected: FAIL - - [:suffix="()"] - expected: FAIL - - [:suffix="(0)"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,write,unchanged_ranges_preserved:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec2h_to_u32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeBuffer:buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_continuing:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,writeBuffer:*] - [:numElements=4] - expected: FAIL - - [:numElements=8] - expected: FAIL - - [:numElements=16] - expected: FAIL - - [:numElements=4;awaitLost=true] - expected: FAIL - - [:numElements=4;awaitLost=false] - expected: FAIL - - [:numElements=8;awaitLost=true] - expected: FAIL - - [:numElements=8;awaitLost=false] - expected: FAIL - - [:numElements=16;awaitLost=true] - expected: FAIL - - [:numElements=16;awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_exclusive_or:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f16:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_increment_overflow:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxDynamicStorageBuffersPerPipelineLayout:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,if:if_true:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:or_short_circuit:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:array_layers:*] - [:textureDimension="1d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="1d";viewDimension="1d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="2d";viewDimension="2d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="2d-array"] - expected: FAIL - - [:textureDimension="2d";viewDimension="cube"] - expected: FAIL - - [:textureDimension="2d";viewDimension="cube-array"] - expected: FAIL - - [:textureDimension="3d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="3d";viewDimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:origin_alignment:*] - [:method="WriteTexture";format="r8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=1;dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=1;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=3;dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=3;dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,resolve:resolve_attachment:*] - [:] - expected: FAIL - - [:colorAttachmentSamples=1] - expected: FAIL - - [:resolveTargetSamples=4] - expected: FAIL - - [:resolveTargetUsage=1] - expected: FAIL - - [:resolveTargetViewBaseMipLevel=1;resolveTargetHeight=4;resolveTargetWidth=4] - expected: FAIL - - [:resolveTargetViewBaseMipLevel=1;resolveTargetViewMipCount=2;resolveTargetHeight=4;resolveTargetWidth=4] - expected: FAIL - - [:resolveTargetInvalid=true] - expected: FAIL - - [:resolveTargetViewMipCount=2] - expected: FAIL - - [:resolveTargetViewBaseArrayLayer=1] - expected: FAIL - - [:resolveTargetViewBaseArrayLayer=1;resolveTargetViewArrayLayerCount=2] - expected: FAIL - - [:resolveTargetViewArrayLayerCount=2] - expected: FAIL - - [:otherAttachmentFormat="bgra8unorm"] - expected: FAIL - - [:colorAttachmentFormat="bgra8unorm"] - expected: FAIL - - [:colorAttachmentFormat="rgba8unorm-srgb"] - expected: FAIL - - [:resolveTargetFormat="bgra8unorm"] - expected: FAIL - - [:resolveTargetFormat="rgba8unorm-srgb"] - expected: FAIL - - [:colorAttachmentHeight=4] - expected: FAIL - - [:colorAttachmentWidth=4] - expected: FAIL - - [:resolveTargetHeight=4] - expected: FAIL - - [:resolveTargetWidth=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:render_bundle_commands:*] - [:command="draw"] - expected: FAIL - - [:command="drawIndexed"] - expected: FAIL - - [:command="drawIndexedIndirect"] - expected: FAIL - - [:command="drawIndirect"] - expected: FAIL - - [:command="setPipeline"] - expected: FAIL - - [:command="setBindGroup"] - expected: FAIL - - [:command="setIndexBuffer"] - expected: FAIL - - [:command="setVertexBuffer"] - expected: FAIL - - [:command="pushDebugGroup"] - expected: FAIL - - [:command="popDebugGroup"] - expected: FAIL - - [:command="insertDebugMarker"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:timestamp_query_set,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,tan:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:depth_stencil_attachment,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:setIndexBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:builtin_fn_args:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_vec4_constructor:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:many_attributes_overlapping:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:visibility,VERTEX_shader_stage_buffer_type:*] - [:shaderStage=0] - expected: FAIL - - [:shaderStage=1] - expected: FAIL - - [:shaderStage=2] - expected: FAIL - - [:shaderStage=3] - expected: FAIL - - [:shaderStage=4] - expected: FAIL - - [:shaderStage=5] - expected: FAIL - - [:shaderStage=6] - expected: FAIL - - [:shaderStage=7] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:with_work:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:test_name:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleBias:sampled_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:index_buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,color_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_nested_continue:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,const:placement:*] - [:scope="private-var"] - expected: FAIL - - [:scope="storage-var"] - expected: FAIL - - [:scope="struct-member"] - expected: FAIL - - [:scope="fn-decl"] - expected: FAIL - - [:scope="fn-param"] - expected: FAIL - - [:scope="fn-var"] - expected: FAIL - - [:scope="fn-return"] - expected: FAIL - - [:scope="while-stmt"] - expected: FAIL - - [:scope="_undef_"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,type_error,vertex:*] - [:isAsync=true;vertexConstants={"cf":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":"_nan_"}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":"_posinfinity_"}] - expected: FAIL - - [:isAsync=true;vertexConstants={"cf":"_neginfinity_"}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":"_nan_"}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":"_posinfinity_"}] - expected: FAIL - - [:isAsync=false;vertexConstants={"cf":"_neginfinity_"}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:source_imageBitmap,state:*] - [:closed=false] - expected: FAIL - - [:closed=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,threading:serialize:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleGrad:sampled_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:rowsPerImage_and_bytesPerRow:*] - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_C_R_C_C:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,resource_offset:*] - [:type="uniform"] - expected: FAIL - - [:type="storage"] - expected: FAIL - - [:type="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:unmap,state,destroyed:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:declaration:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:matching_f16:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_basic:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_for:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:setBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="underLimit"] - expected: FAIL - - [:limitTest="overDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overDefault";testValueName="underLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMinimum";testValueName="underLimit"] - expected: FAIL - - [:limitTest="atMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMinimum";testValueName="underLimit"] - expected: FAIL - - [:limitTest="underMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underMinimum";testValueName="underLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_bitmaprenderer_context_canvas:*] - [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + [:format="unorm10-10-10-2"] expected: FAIL - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:offset_alignment:*] - [:method="WriteTexture";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] +[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_invalid_order:*] + [:pass0Type="compute";pass1Type="compute"] expected: FAIL - [:method="WriteTexture";format="rgba8snorm";dimension="1d"] + [:pass0Type="compute";pass1Type="render"] expected: FAIL - [:method="WriteTexture";format="rgba8snorm";dimension="2d"] + [:pass0Type="render";pass1Type="compute"] expected: FAIL - [:method="WriteTexture";format="rgba8snorm";dimension="3d"] + [:pass0Type="render";pass1Type="render"] expected: FAIL - [:method="WriteTexture";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="3d"] - expected: FAIL - [:method="WriteTexture";format="rgba32float";dimension="1d"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,determinant:f32:*] + expected: CRASH - [:method="WriteTexture";format="rgba32float";dimension="2d"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:scalar:*] + expected: CRASH - [:method="WriteTexture";format="rgba32float";dimension="3d"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depthWriteEnabled_optional:*] + expected: CRASH - [:method="WriteTexture";format="rgb10a2unorm";dimension="1d"] +[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:rows_per_image_alignment:*] + [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] expected: FAIL - [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] + [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] + [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] expected: FAIL [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] @@ -28714,46 +543,156 @@ [:method="WriteTexture";format="depth16unorm";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] + [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] expected: FAIL - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] + [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] + [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] expected: FAIL - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] + [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] expected: FAIL - [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] + [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] + [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] expected: FAIL - [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] + [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] expected: FAIL - [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] + [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] + [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] expected: FAIL - [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] + [:method="CopyB2T";format="stencil8";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] + [:method="CopyB2T";format="depth16unorm";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] + [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] expected: FAIL - [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] + [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] + [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="depth16unorm";dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,invalidBuffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,literal:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:compute_pass_commands:*] + [:command="setBindGroup"] + expected: FAIL + + [:command="setPipeline"] + expected: FAIL + + [:command="dispatchWorkgroups"] + expected: FAIL + + [:command="dispatchWorkgroupsIndirect"] + expected: FAIL + + [:command="pushDebugGroup"] + expected: FAIL + + [:command="popDebugGroup"] + expected: FAIL + + [:command="insertDebugMarker"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:missing_vertex_position:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_basic:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_blend:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,quantizeToF16:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:bytes_per_row_alignment:*] + [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="depth16unorm";dimension="2d"] expected: FAIL [:method="CopyB2T";format="r8unorm";dimension="1d"] @@ -29053,6 +992,15 @@ [:method="CopyB2T";format="rgba32float";dimension="3d"] expected: FAIL + [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] + expected: FAIL + [:method="CopyB2T";format="rgb10a2unorm";dimension="1d"] expected: FAIL @@ -29425,6 +1373,15 @@ [:method="CopyT2B";format="rgba32float";dimension="3d"] expected: FAIL + [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] + expected: FAIL + [:method="CopyT2B";format="rgb10a2unorm";dimension="1d"] expected: FAIL @@ -29458,9 +1415,6 @@ [:method="CopyT2B";format="depth16unorm";dimension="2d"] expected: FAIL - [:method="CopyT2B";format="depth32float";dimension="2d"] - expected: FAIL - [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] expected: FAIL @@ -29503,449 +1457,13 @@ [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] expected: FAIL - [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,comments:line_comment_terminators:*] - [:blankspace=["%20","space"\]] - expected: FAIL - - [:blankspace=["%5Ct","tab"\]] - expected: FAIL - - [:blankspace=["%5Cn","line_feed"\]] - expected: FAIL - - [:blankspace=["%5Cu000b","vertical_tab"\]] - expected: FAIL - - [:blankspace=["%5Cf","form_feed"\]] - expected: FAIL - - [:blankspace=["%5Cr","carriage_return"\]] - expected: FAIL - - [:blankspace=["%5Cr%5Cn","carriage_return_line_feed"\]] - expected: FAIL - - [:blankspace=["%C2%85","next_line"\]] - expected: FAIL - - [:blankspace=["%E2%80%A8","line_separator"\]] - expected: FAIL - - [:blankspace=["%E2%80%A9","paragraph_separator"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:abstract_int:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_offset_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:uniform_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:buffer_state:*] - [:bufferState="valid"] - expected: FAIL - - [:bufferState="invalid"] - expected: FAIL - - [:bufferState="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,acosh:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - [:inputSource="uniform";vectorize=4] +[cts.https.html?q=webgpu:api,validation,queue,writeTexture:sample_count:*] + [:sampleCount=4] expected: FAIL - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicOr:or_workgroup:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_workgroup_basic:*] [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] expected: FAIL @@ -30139,1849 +1657,11199 @@ expected: FAIL -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAtCreation:*] +[cts.https.html?q=webgpu:shader,validation,shader_io,size:size:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index_via_struct_members:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:vector_scalar:*] + expected: CRASH - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_shaderLocation_limit:*] +[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,empty_color_formats:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:sample_count:*] +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupsPerDimension:dispatchWorkgroups,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_builtin_fn_args:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,operation,rendering,draw:vertex_attributes,basic:*] - [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="uint32";step_mode="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log2:integer_argument:*] + expected: CRASH - [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:setVertexBuffer,at_over:*] + expected: CRASH - [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_return_type_struct:*] + expected: CRASH - [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:function_pointer_parameters:*] + expected: CRASH - [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] - expected: FAIL +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:features,known:*] + expected: CRASH - [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,renderPass,renderBundle:*] + expected: TIMEOUT + [:stage="finish";awaitLost=true] + expected: TIMEOUT - [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="uint32";step_mode="_undef_"] - expected: FAIL + [:stage="finish";awaitLost=false] + expected: NOTRUN - [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] - expected: FAIL + [:stage="submit";awaitLost=true] + expected: NOTRUN - [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] - expected: FAIL + [:stage="submit";awaitLost=false] + expected: NOTRUN - [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] - expected: FAIL - [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="_undef_"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="vertex"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="mixed"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="_undef_"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="vertex"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="mixed"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:placement:*] + expected: CRASH - [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="uint32";step_mode="_undef_"] +[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:bound_on_bytes_per_row:*] + [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] + [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] + [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] + [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] + [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] + [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="_undef_"] + [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="vertex"] + [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="instance"] + [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="mixed"] + [:method="WriteTexture";format="stencil8";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="_undef_"] + [:method="WriteTexture";format="depth16unorm";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="vertex"] + [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="instance"] + [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="mixed"] + [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="_undef_"] + [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="vertex"] + [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="instance"] + [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="mixed"] + [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="_undef_"] + [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="vertex"] + [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="instance"] + [:method="CopyB2T";format="stencil8";dimension="2d"] expected: FAIL - [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="mixed"] + [:method="CopyB2T";format="depth16unorm";dimension="2d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="uint32";step_mode="_undef_"] + [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] + [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] + [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] + [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] + [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] + [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="_undef_"] + [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="vertex"] + [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="instance"] + [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="mixed"] + [:method="CopyT2B";format="stencil8";dimension="2d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="_undef_"] + [:method="CopyT2B";format="depth16unorm";dimension="2d"] expected: FAIL - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="vertex"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="mixed"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="_undef_"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="vertex"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="mixed"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="_undef_"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="vertex"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="instance"] - expected: FAIL - - [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="mixed"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec2h_to_i32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_right_concrete:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_exp:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_complement:u32_complement:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:abstract_int:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - [:inputSource="const";vectorize=2] +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:texture_view_descriptor:*] + [:format="depth32float-stencil8";enable_required_feature=true] expected: FAIL - [:inputSource="const";vectorize=3] + [:format="bc1-rgba-unorm";enable_required_feature=false] expected: FAIL - [:inputSource="const";vectorize=4] + [:format="bc1-rgba-unorm-srgb";enable_required_feature=false] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] + [:format="bc2-rgba-unorm";enable_required_feature=false] expected: FAIL - [:inputSource="uniform";vectorize=2] + [:format="bc2-rgba-unorm-srgb";enable_required_feature=false] expected: FAIL - [:inputSource="uniform";vectorize=3] + [:format="bc3-rgba-unorm";enable_required_feature=false] expected: FAIL - [:inputSource="uniform";vectorize=4] + [:format="bc3-rgba-unorm-srgb";enable_required_feature=false] expected: FAIL - [:inputSource="storage_r";vectorize="_undef_"] + [:format="bc4-r-unorm";enable_required_feature=false] expected: FAIL - [:inputSource="storage_r";vectorize=2] + [:format="bc4-r-snorm";enable_required_feature=false] expected: FAIL - [:inputSource="storage_r";vectorize=3] + [:format="bc5-rg-unorm";enable_required_feature=false] expected: FAIL - [:inputSource="storage_r";vectorize=4] + [:format="bc5-rg-snorm";enable_required_feature=false] expected: FAIL - [:inputSource="storage_rw";vectorize="_undef_"] + [:format="bc6h-rgb-ufloat";enable_required_feature=false] expected: FAIL - [:inputSource="storage_rw";vectorize=2] + [:format="bc6h-rgb-float";enable_required_feature=false] expected: FAIL - [:inputSource="storage_rw";vectorize=3] + [:format="bc7-rgba-unorm";enable_required_feature=false] expected: FAIL - [:inputSource="storage_rw";vectorize=4] + [:format="bc7-rgba-unorm-srgb";enable_required_feature=false] expected: FAIL -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeAlignment:*] +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:texture,device_mismatch:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f16:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:user_fn_args:*] + [:] expected: FAIL -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:origins_and_extents:*] +[cts.https.html?q=webgpu:shader,validation,parse,must_use:builtin_must_use:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,radians:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:two_draws_in_the_same_render_bundle:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_failOp_operation:*] + [:format="stencil8";failOp="keep";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="zero";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="replace";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="invert";initialStencil=240] + expected: FAIL + + [:format="stencil8";failOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="stencil8";failOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="stencil8";failOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="stencil8";failOp="decrement-wrap";initialStencil=2] + expected: FAIL + + [:format="stencil8";failOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="stencil8";failOp="decrement-wrap";initialStencil=0] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="keep";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="zero";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="replace";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="invert";initialStencil=240] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="decrement-wrap";initialStencil=2] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";failOp="decrement-wrap";initialStencil=0] + expected: FAIL + + [:format="depth32float-stencil8";failOp="keep";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="zero";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="replace";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="invert";initialStencil=240] + expected: FAIL + + [:format="depth32float-stencil8";failOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="depth32float-stencil8";failOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="depth32float-stencil8";failOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="depth32float-stencil8";failOp="decrement-wrap";initialStencil=2] + expected: FAIL + + [:format="depth32float-stencil8";failOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";failOp="decrement-wrap";initialStencil=0] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_module_var_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,depth:reverse_depth:*] + [:reversed=false] + expected: FAIL + + [:reversed=true] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec2_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,degrees:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f32_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sample:*] + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";dstColorSpace="display-p3"] + expected: FAIL + + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";dstColorSpace="srgb"] + expected: FAIL + + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";dstColorSpace="display-p3"] + expected: FAIL + + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";dstColorSpace="srgb"] + expected: FAIL + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";dstColorSpace="display-p3"] + expected: FAIL + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";dstColorSpace="srgb"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createComputePipelineAsync:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asinh:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:aliasing_inside_function:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createView,2d,compressed_format:*] + expected: TIMEOUT + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: TIMEOUT + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createTexture,2d,uncompressed_format:*] + expected: TIMEOUT + [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: TIMEOUT + + [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:web_platform,canvas,configure:defaults:*] + [:canvasType="onscreen"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:duplicate_compute_on_function:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_right_vec_size_mismatch:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,primitive_state:strip_index_format:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,sizeAndOffsetOOB,mappedAtCreation:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createTexture:mipLevelCount,format:*] + [:dimension="_undef_";format="rgb10a2uint"] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="_undef_";format="stencil8"] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm"] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="stencil8"] + expected: FAIL + + [:dimension="2d";format="depth16unorm"] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="3d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="3d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="3d";format="rgb9e5ufloat"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,type_error,fragment:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,transpose:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:not_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_or_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,stencil:*] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack4x8unorm:unpack:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:matrix_index:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:struct_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:offset_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,shader_io,fragment_builtins:inputs,position:*] + [:nearFar=[0,1\];sampleCount=1;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=1;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=1;interpolation={"type":"flat"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=4;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=4;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=4;interpolation={"type":"flat"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=1;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=1;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=1;interpolation={"type":"flat"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=4;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=4;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=4;interpolation={"type":"flat"}] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countTrailingZeros:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:*] + expected: TIMEOUT + [:dimension="1d";readMethod="CopyToBuffer";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="CopyToBuffer";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="CopyToBuffer";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="CopyToTexture";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="CopyToTexture";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="CopyToTexture";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="depth16unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="depth32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToBuffer";format="depth32float-stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="depth16unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="depth32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="CopyToTexture";format="depth32float-stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="Sample";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="DepthTest";format="depth16unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="DepthTest";format="depth32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="DepthTest";format="depth24plus"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="DepthTest";format="depth24plus-stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="DepthTest";format="depth32float-stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="StencilTest";format="stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="StencilTest";format="depth24plus-stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="2d";readMethod="StencilTest";format="depth32float-stencil8"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToBuffer";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="CopyToTexture";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba8snorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba8uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba8sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="bgra8unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="bgra8unorm-srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba16uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba16sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba16float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="r32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgba32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgb10a2uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgb10a2unorm"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rg11b10ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="3d";readMethod="Sample";format="rgb9e5ufloat"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg32uint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg32sint"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:dimension="1d";readMethod="Sample";format="rg32float"] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,saturate:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:state_and_binding_index:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:createRenderBundle,at_over:*] + [:limitTest="atDefault";testValueName="atLimit"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:workgroup_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:offsets_and_sizes:*] + expected: TIMEOUT [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] expected: FAIL [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL + expected: TIMEOUT [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL + expected: NOTRUN [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,operation,rendering,draw:arguments:*] + expected: TIMEOUT + [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: FAIL + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] + expected: NOTRUN + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] + expected: [TIMEOUT, NOTRUN, FAIL] + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:examples:gpu,with_texture_compression,bc:*] + [:textureCompressionBC=false] expected: FAIL -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setPipeline:invalid_pipeline:*] +[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:render_bundle_commands:*] + [:command="draw"] + expected: FAIL + + [:command="drawIndexed"] + expected: FAIL + + [:command="drawIndexedIndirect"] + expected: FAIL + + [:command="drawIndirect"] + expected: FAIL + + [:command="setPipeline"] + expected: FAIL + + [:command="setBindGroup"] + expected: FAIL + + [:command="setIndexBuffer"] + expected: FAIL + + [:command="setVertexBuffer"] + expected: FAIL + + [:command="pushDebugGroup"] + expected: FAIL + + [:command="popDebugGroup"] + expected: FAIL + + [:command="insertDebugMarker"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setViewport,x_y_width_height_nonnegative:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,gpu_external_texture_expiration:import_from_different_video_frame:*] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec4_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:resolve_buffer_oob:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:createBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] +[cts.https.html?q=webgpu:api,validation,createBindGroup:binding_must_contain_resource_defined_in_layout:*] + [:resourceType="uniformBuf";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] expected: FAIL - [:limitTest="atDefault";testValueName="underLimit"] + [:resourceType="uniformBuf";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] expected: FAIL - [:limitTest="overDefault";testValueName="atLimit"] + [:resourceType="storageBuf";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] expected: FAIL - [:limitTest="overDefault";testValueName="underLimit"] + [:resourceType="storageBuf";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] expected: FAIL - [:limitTest="betweenDefaultAndMinimum";testValueName="atLimit"] + [:resourceType="filtSamp";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] expected: FAIL - [:limitTest="betweenDefaultAndMinimum";testValueName="underLimit"] + [:resourceType="filtSamp";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] expected: FAIL - [:limitTest="atMinimum";testValueName="atLimit"] + [:resourceType="nonFiltSamp";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] expected: FAIL - [:limitTest="atMinimum";testValueName="underLimit"] + [:resourceType="nonFiltSamp";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] expected: FAIL - [:limitTest="underMinimum";testValueName="atLimit"] + [:resourceType="compareSamp";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] expected: FAIL - [:limitTest="underMinimum";testValueName="underLimit"] + [:resourceType="compareSamp";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="sampledTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="sampledTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="sampledTexMS";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="sampledTexMS";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="readonlyStorageTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="readonlyStorageTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="writeonlyStorageTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="writeonlyStorageTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="readwriteStorageTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="readwriteStorageTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="errorBuf";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="errorBuf";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="errorSamp";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="errorSamp";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:resourceType="errorTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:resourceType="errorTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}}] expected: FAIL -[cts.https.html?q=webgpu:api,operation,shader_module,compilation_info:offset_and_length:*] - [:valid=true;name="ascii"] +[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:multi_entry_points:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createComputePipeline:*] + expected: TIMEOUT + [:awaitLost=true] + expected: TIMEOUT + + [:awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_subtraction:matrix:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:interpolation_validation:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:module_const_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32_vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan2:integer_argument_y:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:configured:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,debug:debug_group:*] + [:encoderType="non-pass"] expected: FAIL - [:valid=true;name="unicode"] + [:encoderType="compute%20pass"] expected: FAIL - [:valid=false;name="ascii"] + [:encoderType="render%20pass"] expected: FAIL - [:valid=false;name="unicode"] - expected: FAIL - - [:valid=false;name="carriage-return"] + [:encoderType="render%20bundle"] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,memory_model,weak:load_buffer:*] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_storage_advanced:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,af_assignment:abstract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,subrange,mappedAtCreation:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicOr:or_workgroup:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f32_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,call:call_repeated:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,zero_init:compute,zero_init:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_fragment_shader:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:write_access:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:mip_level:*] + [:method="WriteTexture";dimension="1d";size=[32,1,1\]] + expected: FAIL + + [:method="WriteTexture";dimension="2d";size=[32,32,1\]] + expected: FAIL + + [:method="WriteTexture";dimension="2d";size=[32,32,3\]] + expected: FAIL + + [:method="WriteTexture";dimension="3d";size=[32,32,3\]] + expected: FAIL + + [:method="CopyB2T";dimension="1d";size=[32,1,1\]] + expected: FAIL + + [:method="CopyB2T";dimension="2d";size=[32,32,1\]] + expected: FAIL + + [:method="CopyB2T";dimension="2d";size=[32,32,3\]] + expected: FAIL + + [:method="CopyB2T";dimension="3d";size=[32,32,3\]] + expected: FAIL + + [:method="CopyT2B";dimension="1d";size=[32,1,1\]] + expected: FAIL + + [:method="CopyT2B";dimension="2d";size=[32,32,1\]] + expected: FAIL + + [:method="CopyT2B";dimension="2d";size=[32,32,3\]] + expected: FAIL + + [:method="CopyT2B";dimension="3d";size=[32,32,3\]] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,misc:basic:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,round:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,texture_view,format_reinterpretation:render_and_resolve_attachment:*] + [:format="rgba8unorm";viewFormat="rgba8unorm-srgb";sampleCount=4] + expected: FAIL + + [:format="rgba8unorm-srgb";viewFormat="rgba8unorm";sampleCount=1] + expected: FAIL + + [:format="rgba8unorm-srgb";viewFormat="rgba8unorm";sampleCount=4] + expected: FAIL + + [:format="bgra8unorm";viewFormat="bgra8unorm-srgb";sampleCount=1] + expected: FAIL + + [:format="bgra8unorm";viewFormat="bgra8unorm-srgb";sampleCount=4] + expected: FAIL + + [:format="bgra8unorm-srgb";viewFormat="bgra8unorm";sampleCount=1] + expected: FAIL + + [:format="bgra8unorm-srgb";viewFormat="bgra8unorm";sampleCount=4] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop_continue:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_workgroup_basic:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setViewport,depth_rangeAndOrder:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,decl,const:no_direct_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,loop:loop_continuing_basic:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:util,texture,texel_data:snorm_texel_data_in_shader:*] + [:format="r8snorm"] + expected: FAIL + + [:format="rg8snorm"] + expected: FAIL + + [:format="rgba8snorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_buffer,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:util,texture,texel_data:uint_texel_data_in_shader:*] + [:format="r8uint"] + expected: FAIL + + [:format="rg8uint"] + expected: FAIL + + [:format="rgba8uint"] + expected: FAIL + + [:format="r16uint"] + expected: FAIL + + [:format="rg16uint"] + expected: FAIL + + [:format="rgba16uint"] + expected: FAIL + + [:format="r32uint"] + expected: FAIL + + [:format="rg32uint"] + expected: FAIL + + [:format="rgba32uint"] + expected: FAIL + + [:format="rgb10a2uint"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:createRenderBundle,at_over:*] + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createTexture:texture_usage:*] + [:dimension="_undef_";format="rgb10a2uint"] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="_undef_";format="stencil8"] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm"] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="stencil8"] + expected: FAIL + + [:dimension="2d";format="depth16unorm"] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="3d";format="r8unorm"] + expected: FAIL + + [:dimension="3d";format="r8uint"] + expected: FAIL + + [:dimension="3d";format="r8sint"] + expected: FAIL + + [:dimension="3d";format="rg8unorm"] + expected: FAIL + + [:dimension="3d";format="rg8uint"] + expected: FAIL + + [:dimension="3d";format="rg8sint"] + expected: FAIL + + [:dimension="3d";format="rgba8unorm-srgb"] + expected: FAIL + + [:dimension="3d";format="bgra8unorm"] + expected: FAIL + + [:dimension="3d";format="bgra8unorm-srgb"] + expected: FAIL + + [:dimension="3d";format="r16uint"] + expected: FAIL + + [:dimension="3d";format="r16sint"] + expected: FAIL + + [:dimension="3d";format="r16float"] + expected: FAIL + + [:dimension="3d";format="rg16uint"] + expected: FAIL + + [:dimension="3d";format="rg16sint"] + expected: FAIL + + [:dimension="3d";format="rg16float"] + expected: FAIL + + [:dimension="3d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="3d";format="rgb10a2unorm"] + expected: FAIL + + [:dimension="3d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="3d";format="rgb9e5ufloat"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_and:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,depth_stencil_read_only_write_state:*] + [:encoderType="render%20pass";format="stencil8"] + expected: FAIL + + [:encoderType="render%20pass";format="depth16unorm"] + expected: FAIL + + [:encoderType="render%20pass";format="depth32float"] + expected: FAIL + + [:encoderType="render%20pass";format="depth24plus"] + expected: FAIL + + [:encoderType="render%20pass";format="depth24plus-stencil8"] + expected: FAIL + + [:encoderType="render%20pass";format="depth32float-stencil8"] + expected: FAIL + + [:encoderType="render%20bundle";format="stencil8"] + expected: FAIL + + [:encoderType="render%20bundle";format="depth16unorm"] + expected: FAIL + + [:encoderType="render%20bundle";format="depth32float"] + expected: FAIL + + [:encoderType="render%20bundle";format="depth24plus"] + expected: FAIL + + [:encoderType="render%20bundle";format="depth24plus-stencil8"] + expected: FAIL + + [:encoderType="render%20bundle";format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:stencil_test:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f32_vec2:*] + expected: [CRASH, TIMEOUT] + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:bitwise_or:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,render_pipeline,sample_mask:fragment_output_mask:*] + expected: TIMEOUT + [:interpolated=false;sampleCount=1;rasterizationMask=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=1;rasterizationMask=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=5] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=6] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=7] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=8] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=10] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=11] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=12] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=13] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=14] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=false;sampleCount=4;rasterizationMask=15] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=1;rasterizationMask=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=1;rasterizationMask=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=0] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=8] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=9] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=10] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=11] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=12] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=13] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=14] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=15] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=5] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=6] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:interpolated=true;sampleCount=4;rasterizationMask=7] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:max_vertex_buffer_limit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:greater_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_C_C_R_C:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log2:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:vec3:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestamp_query_set,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:call_after_successful_finish:*] + [:callCmd="beginComputePass"] + expected: FAIL + + [:callCmd="beginRenderPass"] + expected: FAIL + + [:callCmd="insertDebugMarker"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,memory_model,weak:store:*] + expected: TIMEOUT [:memType="atomic_workgroup"] - expected: FAIL + expected: TIMEOUT [:memType="atomic_storage"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_decrement:*] + [:] expected: FAIL -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blending,clamping:*] - [:format="rgba8unorm";srcValue=0.4;dstValue=0.2] +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,source:invalid_source:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension1D:createTexture,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:valid:*] + [:method="WriteTexture";textureState="invalid";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="rgba8unorm";srcValue=0.4;dstValue=0.4] + [:method="WriteTexture";textureState="invalid";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="rgba8unorm";srcValue=0.6;dstValue=0.2] + [:method="WriteTexture";textureState="invalid";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="rgba8unorm";srcValue=0.6;dstValue=0.4] + [:method="WriteTexture";textureState="invalid";dimension="3d";size=[4,4,3\]] expected: FAIL - [:format="rgba8unorm";srcValue=0.8;dstValue=0.2] + [:method="WriteTexture";textureState="destroyed";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="rgba8unorm";srcValue=0.8;dstValue=0.4] + [:method="WriteTexture";textureState="destroyed";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="rgba8unorm";srcValue=1;dstValue=0.2] + [:method="WriteTexture";textureState="destroyed";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="rgba8unorm";srcValue=1;dstValue=0.4] + [:method="WriteTexture";textureState="destroyed";dimension="3d";size=[4,4,3\]] expected: FAIL - [:format="rg16float";srcValue=0.4;dstValue=0.2] + [:method="CopyB2T";textureState="invalid";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="rg16float";srcValue=0.4;dstValue=0.4] + [:method="CopyB2T";textureState="invalid";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="rg16float";srcValue=0.6;dstValue=0.2] + [:method="CopyB2T";textureState="invalid";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="rg16float";srcValue=0.6;dstValue=0.4] + [:method="CopyB2T";textureState="invalid";dimension="3d";size=[4,4,3\]] expected: FAIL - [:format="rg16float";srcValue=0.8;dstValue=0.2] + [:method="CopyB2T";textureState="destroyed";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="rg16float";srcValue=0.8;dstValue=0.4] + [:method="CopyB2T";textureState="destroyed";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="rg16float";srcValue=1;dstValue=0.2] + [:method="CopyB2T";textureState="destroyed";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="rg16float";srcValue=1;dstValue=0.4] + [:method="CopyB2T";textureState="destroyed";dimension="3d";size=[4,4,3\]] expected: FAIL + [:method="CopyT2B";textureState="invalid";dimension="1d";size=[4,1,1\]] + expected: FAIL + + [:method="CopyT2B";textureState="invalid";dimension="2d";size=[4,4,1\]] + expected: FAIL + + [:method="CopyT2B";textureState="invalid";dimension="2d";size=[4,4,3\]] + expected: FAIL + + [:method="CopyT2B";textureState="invalid";dimension="3d";size=[4,4,3\]] + expected: FAIL + + [:method="CopyT2B";textureState="destroyed";dimension="1d";size=[4,1,1\]] + expected: FAIL + + [:method="CopyT2B";textureState="destroyed";dimension="2d";size=[4,4,1\]] + expected: FAIL + + [:method="CopyT2B";textureState="destroyed";dimension="2d";size=[4,4,3\]] + expected: FAIL + + [:method="CopyT2B";textureState="destroyed";dimension="3d";size=[4,4,3\]] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_struct_attribute:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageData:from_ImageData:*] + expected: TIMEOUT + [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:vertex_returns_position:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,query_set,create:count:*] + [:type="occlusion"] + expected: FAIL + + [:type="timestamp"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_bind_group_on_same_index_color_texture:*] + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="sampled-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="sampled-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="writeonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="writeonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="sampled-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="sampled-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="writeonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="writeonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=true;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="sampled-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="sampled-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="writeonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="writeonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=0;view1Binding="readwrite-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="sampled-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="sampled-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="writeonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="writeonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readonly-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="sampled-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="writeonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="readonly-storage-texture"] + expected: FAIL + + [:useDifferentTextureAsTexture2=false;baseLayer2=1;view1Binding="readwrite-storage-texture";view2Binding="readwrite-storage-texture"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,debugMarker:push_pop_call_count_unbalance,command_encoder:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:buffer_binding_overlap:*] + [:drawType="draw"] + expected: FAIL + + [:drawType="drawIndexed"] + expected: FAIL + + [:drawType="drawIndirect"] + expected: FAIL + + [:drawType="drawIndexedIndirect"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,any:bool:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:occlusion_query,begin_end_invalid_nesting:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_bad_store_type:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,usage:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAgain:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:createRenderPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,tan:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,color_count:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,2d_texture,uncompressed_format:*] + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:resolveQuerySet:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:overflow:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:function_scope_texture:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,padding:matCx3:*] + [:columns=2;use_struct=true] + expected: FAIL + + [:columns=2;use_struct=false] + expected: FAIL + + [:columns=3;use_struct=true] + expected: FAIL + + [:columns=3;use_struct=false] + expected: FAIL + + [:columns=4;use_struct=true] + expected: FAIL + + [:columns=4;use_struct=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:max_vertex_buffer_array_stride_limit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,reflection:texture_reflection_attributes:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:multiple_frames:*] + expected: ERROR + [:canvasType="onscreen"] + expected: TIMEOUT + + [:canvasType="offscreen"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,value,validation_error:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,effective_buffer_binding_size:*] + [:type="storage"] + expected: FAIL + + [:type="read-only-storage"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:minFilter,linear:*] + [:format="r8unorm"] + expected: FAIL + + [:format="rg8unorm"] + expected: FAIL + + [:format="rgba8unorm"] + expected: FAIL + + [:format="rgba8unorm-srgb"] + expected: FAIL + + [:format="bgra8unorm"] + expected: FAIL + + [:format="bgra8unorm-srgb"] + expected: FAIL + + [:format="r16float"] + expected: FAIL + + [:format="rg16float"] + expected: FAIL + + [:format="rgba16float"] + expected: FAIL + + [:format="rgb10a2unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:default_args:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,compressed,array:*] + [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc4-r-unorm";dstFormat="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc4-r-snorm";dstFormat="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc5-rg-unorm";dstFormat="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc5-rg-snorm";dstFormat="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc6h-rgb-ufloat";dstFormat="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:srcFormat="bc6h-rgb-float";dstFormat="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cosh:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_write,frag_depth:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:createBindGroupLayout,at_over:*] + [:limitTest="atDefault";testValueName="overLimit"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,padding:struct_implicit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,write:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cos:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:index_buffer_state:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f32_vec3:*] + expected: [TIMEOUT, CRASH] + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,round:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_if:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,color_attachment_only:*] + [:colorFormat="r8unorm";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r8unorm";storeOperation="store"] + expected: FAIL + + [:colorFormat="r8uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r8uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="r8sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r8sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg8unorm";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg8unorm";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg8uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg8uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg8sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg8sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba8unorm";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba8unorm";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba8unorm-srgb";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba8unorm-srgb";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba8uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba8uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba8sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba8sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="bgra8unorm";storeOperation="discard"] + expected: FAIL + + [:colorFormat="bgra8unorm";storeOperation="store"] + expected: FAIL + + [:colorFormat="bgra8unorm-srgb";storeOperation="discard"] + expected: FAIL + + [:colorFormat="bgra8unorm-srgb";storeOperation="store"] + expected: FAIL + + [:colorFormat="r16uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r16uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="r16sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r16sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="r16float";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r16float";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg16uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg16uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg16sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg16sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg16float";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg16float";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba16uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba16uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba16sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba16sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba16float";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba16float";storeOperation="store"] + expected: FAIL + + [:colorFormat="r32uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r32uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="r32sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r32sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="r32float";storeOperation="discard"] + expected: FAIL + + [:colorFormat="r32float";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg32uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg32uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg32sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg32sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rg32float";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rg32float";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba32uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba32uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba32sint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba32sint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgba32float";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgba32float";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgb10a2uint";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgb10a2uint";storeOperation="store"] + expected: FAIL + + [:colorFormat="rgb10a2unorm";storeOperation="discard"] + expected: FAIL + + [:colorFormat="rgb10a2unorm";storeOperation="store"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_nested_continue:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_matrix_addition:matrix:*] + expected: CRASH [cts.https.html?q=webgpu:api,validation,image_copy,layout_related:bound_on_rows_per_image:*] [:method="WriteTexture";dimension="1d";size=[4,1,1\]] @@ -32021,7086 +12889,1568 @@ expected: FAIL -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:vertex_buffer_used_multiple_times_interleaved:*] - [:format="uint8x2"] +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:no_direct_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_nonmatching_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,texture_view,format_reinterpretation:texture_binding:*] + [:format="rgba8unorm-srgb";viewFormat="rgba8unorm"] expected: FAIL - [:format="uint8x4"] + [:format="bgra8unorm";viewFormat="bgra8unorm-srgb"] expected: FAIL - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] + [:format="bgra8unorm-srgb";viewFormat="bgra8unorm"] expected: FAIL -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,depth_format:*] - [:passFeature="_undef_";bundleFeature="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atan:f32:*] + expected: CRASH - [:passFeature="_undef_";bundleFeature="depth32float-stencil8"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,multisample_state:alpha_to_coverage,count:*] + expected: CRASH - [:passFeature="depth32float-stencil8";bundleFeature="_undef_"] - expected: FAIL - - [:passFeature="depth32float-stencil8";bundleFeature="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:texture_buffer_usages:*] - [:copyType="CopyB2T"] - expected: FAIL - - [:copyType="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:destination_texture,state:*] - [:state="valid"] - expected: FAIL - - [:state="invalid"] - expected: FAIL - - [:state="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,clear_value:stored:*] +[cts.https.html?q=webgpu:shader,execution,padding:array_of_struct:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec3_fract:*] + expected: CRASH - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:u32array_start_and_length:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_struct_constructor:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,operation,queue,writeBuffer:array_types:*] - [:arrayType="Uint8Array";useArrayBuffer=false] +[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,3d_texture,uncompressed_format:*] + [:format="rgb10a2uint"] expected: FAIL - [:arrayType="Uint8Array";useArrayBuffer=true] + [:format="rg11b10ufloat"] expected: FAIL - [:arrayType="Uint16Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Uint16Array";useArrayBuffer=true] - expected: FAIL - - [:arrayType="Uint32Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Uint32Array";useArrayBuffer=true] - expected: FAIL - - [:arrayType="Int8Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Int8Array";useArrayBuffer=true] - expected: FAIL - - [:arrayType="Int16Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Int16Array";useArrayBuffer=true] - expected: FAIL - - [:arrayType="Int32Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Int32Array";useArrayBuffer=true] - expected: FAIL - - [:arrayType="Float32Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Float32Array";useArrayBuffer=true] - expected: FAIL - - [:arrayType="Float64Array";useArrayBuffer=false] - expected: FAIL - - [:arrayType="Float64Array";useArrayBuffer=true] + [:format="rgb9e5ufloat"] expected: FAIL -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:vertex_buffer,device_mismatch:*] +[cts.https.html?q=webgpu:shader,execution,padding:array_of_matCx3:*] + [:columns=2;use_struct=true] + expected: FAIL + + [:columns=2;use_struct=false] + expected: FAIL + + [:columns=3;use_struct=true] + expected: FAIL + + [:columns=3;use_struct=false] + expected: FAIL + + [:columns=4;use_struct=true] + expected: FAIL + + [:columns=4;use_struct=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createPipelineLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:not_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:depth_stencil_attachment,depth_clear_value:*] + [:depthLoadOp="clear";depthClearValue="_undef_"] + expected: FAIL + + [:depthLoadOp="clear";depthClearValue=-1] + expected: FAIL + + [:depthLoadOp="clear";depthClearValue=1.5] + expected: FAIL + + [:depthLoadOp="_undef_";depthClearValue="_undef_"] + expected: FAIL + + [:depthLoadOp="_undef_";depthClearValue=-1] + expected: FAIL + + [:depthLoadOp="_undef_";depthClearValue=0] + expected: FAIL + + [:depthLoadOp="_undef_";depthClearValue=0.5] + expected: FAIL + + [:depthLoadOp="_undef_";depthClearValue=1] + expected: FAIL + + [:depthLoadOp="_undef_";depthClearValue=1.5] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:limits,workgroup_storage_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:from_ImageData:*] + expected: TIMEOUT + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [TIMEOUT, NOTRUN, FAIL] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:greater_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_storage_basic:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,literal:abstract_int:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:without_work:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_vector_multiplication:vector_matrix:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:occlusion_query,begin_end_balance:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:depth:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,robust_access:linear_memory:*] - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read";access="read";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="uniform";access="read";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="read";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="private";access="write";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="read";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="function";access="write";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="read";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:storageClass="workgroup";access="write";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read";access="read";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="read";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="storage";storageMode="read_write";access="write";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=false;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="uniform";access="read";dynamicOffset=true;containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="read";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="private";access="write";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="read";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="function";access="write";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="read";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="array";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="array";shadowingMode="none";isAtomic=true] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="array";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="array";shadowingMode="module-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="array";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="array";shadowingMode="function-scope";isAtomic=true] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="matrix";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="matrix";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="matrix";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="vector";shadowingMode="none";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="vector";shadowingMode="module-scope";isAtomic=false] - expected: FAIL - - [:addressSpace="workgroup";access="write";containerType="vector";shadowingMode="function-scope";isAtomic=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension1D:createTexture,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec2i_to_vec4h:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:attachments,color_depth_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:*] - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="vertexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=false;indirect=true;drawCallTestParameter="firstVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=false;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="vertexCountInIndexBuffer";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="indexCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="instanceCount";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x2";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x3";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=0;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=false;errorScale=1000000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=0] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=4] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=100] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=10000] - expected: FAIL - - [:indexed=true;indirect=true;drawCallTestParameter="firstIndex";type="float32x4";additionalBuffers=4;partialLastNumber=true;offsetVertexBuffer=true;errorScale=1000000] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:interpolation_type:*] - [:isAsync=false;output="";input=""] - expected: FAIL - - [:isAsync=false;output="";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=false;output="";input="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:isAsync=false;output="";input="%40interpolate(linear)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective)";input=""] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(linear)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(linear)";input="%40interpolate(flat)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(flat)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(linear,%20center)";input="%40interpolate(linear,%20center)"] - expected: FAIL - - [:isAsync=true;output="";input=""] - expected: FAIL - - [:isAsync=true;output="";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=true;output="";input="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:isAsync=true;output="";input="%40interpolate(linear)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective)";input=""] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(linear)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(linear)";input="%40interpolate(flat)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(flat)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(linear,%20center)";input="%40interpolate(linear,%20center)"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:nested_for_break:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:index_buffer_usage:*] +[cts.https.html?q=webgpu:api,operation,reflection:query_set_reflection_attributes:*] [:] expected: FAIL @@ -39110,15800 +14460,541 @@ expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_left_concrete:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop_break_if:*] + expected: CRASH - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,align:parsing:*] + expected: CRASH - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sinh:f32:*] + expected: CRASH - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_vector_scalar_compound:*] + expected: CRASH - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_for:*] + expected: CRASH - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:type:*] - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="bool"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="u32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="i32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="f32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_type="MyStruct"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="bool"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="u32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="i32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="f32"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec2%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec2%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec2%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec3%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec3%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec3%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec4%3Cbool%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec4%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec4%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="vec4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="atomic%3Cu32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="atomic%3Ci32%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="array%3Cbool,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="array%3Cu32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="array%3Ci32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="array%3Cf32,4%3E"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_type="MyStruct"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,exp:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:max_components_count,input:*] - [:isAsync=false;numScalarDelta=0;useExtraBuiltinInputs=false] - expected: FAIL - - [:isAsync=false;numScalarDelta=0;useExtraBuiltinInputs=true] - expected: FAIL - - [:isAsync=false;numScalarDelta=1;useExtraBuiltinInputs=false] - expected: FAIL - - [:isAsync=false;numScalarDelta=-3;useExtraBuiltinInputs=true] - expected: FAIL - - [:isAsync=false;numScalarDelta=-2;useExtraBuiltinInputs=true] - expected: FAIL - - [:isAsync=true;numScalarDelta=0;useExtraBuiltinInputs=false] - expected: FAIL - - [:isAsync=true;numScalarDelta=0;useExtraBuiltinInputs=true] - expected: FAIL - - [:isAsync=true;numScalarDelta=1;useExtraBuiltinInputs=false] - expected: FAIL - - [:isAsync=true;numScalarDelta=-3;useExtraBuiltinInputs=true] - expected: FAIL - - [:isAsync=true;numScalarDelta=-2;useExtraBuiltinInputs=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_whole:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texture_ok:float32:*] - [:format="rgba32float"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,abstract_float_assignment:f32:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth_bias:depth_bias:*] - [:quadAngle=0;bias=8388608;biasSlopeScale=0;biasClamp=0] - expected: FAIL - - [:quadAngle=0;bias=8388608;biasSlopeScale=0;biasClamp=0.125] - expected: FAIL - - [:quadAngle=0;bias=-8388608;biasSlopeScale=0;biasClamp=0.125] - expected: FAIL - - [:quadAngle=0;bias=-8388608;biasSlopeScale=0;biasClamp=-0.125] - expected: FAIL - - [:quadAngle=1;bias=0;biasSlopeScale=0;biasClamp=0] - expected: FAIL - - [:quadAngle=1;bias=0;biasSlopeScale=1;biasClamp=0] - expected: FAIL - - [:quadAngle=1;bias=0;biasSlopeScale=-0.5;biasClamp=0] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec2u_to_vec4h:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_default_case_break:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack2x16float:unpack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,exp2:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeOOB:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,general:timestamp_query,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_module_const_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,depth_format:*] - [:encoderType="render%20pass";encoderFormatFeature="_undef_";pipelineFormatFeature="_undef_"] - expected: FAIL - - [:encoderType="render%20pass";encoderFormatFeature="_undef_";pipelineFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:encoderType="render%20pass";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="_undef_"] - expected: FAIL - - [:encoderType="render%20pass";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:encoderType="render%20bundle";encoderFormatFeature="_undef_";pipelineFormatFeature="_undef_"] - expected: FAIL - - [:encoderType="render%20bundle";encoderFormatFeature="_undef_";pipelineFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:encoderType="render%20bundle";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="_undef_"] - expected: FAIL - - [:encoderType="render%20bundle";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dpdxCoarse:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,locations:type:*] - [:use_struct=true;type="f32"] - expected: FAIL - - [:use_struct=true;type="i32"] - expected: FAIL - - [:use_struct=true;type="u32"] - expected: FAIL - - [:use_struct=true;type="vec2%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="vec2%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="vec2%3Cu32%3E"] - expected: FAIL - - [:use_struct=true;type="vec3%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="vec3%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="vec3%3Cu32%3E"] - expected: FAIL - - [:use_struct=true;type="vec4%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="vec4%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="vec4%3Cu32%3E"] - expected: FAIL - - [:use_struct=true;type="vec2f"] - expected: FAIL - - [:use_struct=true;type="vec2i"] - expected: FAIL - - [:use_struct=true;type="vec2u"] - expected: FAIL - - [:use_struct=true;type="vec3f"] - expected: FAIL - - [:use_struct=true;type="vec3i"] - expected: FAIL - - [:use_struct=true;type="vec3u"] - expected: FAIL - - [:use_struct=true;type="vec4f"] - expected: FAIL - - [:use_struct=true;type="vec4i"] - expected: FAIL - - [:use_struct=true;type="vec4u"] - expected: FAIL - - [:use_struct=true;type="MyAlias"] - expected: FAIL - - [:use_struct=true;type="bool"] - expected: FAIL - - [:use_struct=true;type="vec2%3Cbool%3E"] - expected: FAIL - - [:use_struct=true;type="vec3%3Cbool%3E"] - expected: FAIL - - [:use_struct=true;type="vec4%3Cbool%3E"] - expected: FAIL - - [:use_struct=true;type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="mat2x2f"] - expected: FAIL - - [:use_struct=true;type="mat2x3f"] - expected: FAIL - - [:use_struct=true;type="mat2x4f"] - expected: FAIL - - [:use_struct=true;type="mat3x2f"] - expected: FAIL - - [:use_struct=true;type="mat3x3f"] - expected: FAIL - - [:use_struct=true;type="mat3x4f"] - expected: FAIL - - [:use_struct=true;type="mat4x2f"] - expected: FAIL - - [:use_struct=true;type="mat4x3f"] - expected: FAIL - - [:use_struct=true;type="mat4x4f"] - expected: FAIL - - [:use_struct=true;type="array%3Cf32,%2012%3E"] - expected: FAIL - - [:use_struct=true;type="array%3Ci32,%2012%3E"] - expected: FAIL - - [:use_struct=true;type="array%3Cu32,%2012%3E"] - expected: FAIL - - [:use_struct=true;type="array%3Cbool,%2012%3E"] - expected: FAIL - - [:use_struct=true;type="atomic%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="atomic%3Cu32%3E"] - expected: FAIL - - [:use_struct=true;type="MyStruct"] - expected: FAIL - - [:use_struct=true;type="texture_1d%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_2d%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_2d_array%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_3d%3Cf32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_cube%3Cu32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_cube_array%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_multisampled_2d%3Ci32%3E"] - expected: FAIL - - [:use_struct=true;type="texture_external"] - expected: FAIL - - [:use_struct=true;type="texture_storage_1d%3Crgba8unorm,%20write%3E"] - expected: FAIL - - [:use_struct=true;type="texture_storage_2d%3Crg32float,%20write%3E"] - expected: FAIL - - [:use_struct=true;type="texture_storage_2d_array%3Cr32float,%20write%3E"] - expected: FAIL - - [:use_struct=true;type="texture_storage_3d%3Cr32float,%20write%3E"] - expected: FAIL - - [:use_struct=true;type="texture_depth_2d"] - expected: FAIL - - [:use_struct=true;type="texture_depth_2d_array"] - expected: FAIL - - [:use_struct=true;type="texture_depth_cube"] - expected: FAIL - - [:use_struct=true;type="texture_depth_cube_array"] - expected: FAIL - - [:use_struct=true;type="texture_depth_multisampled_2d"] - expected: FAIL - - [:use_struct=true;type="sampler"] - expected: FAIL - - [:use_struct=true;type="sampler_comparison"] - expected: FAIL - - [:use_struct=false;type="f32"] - expected: FAIL - - [:use_struct=false;type="i32"] - expected: FAIL - - [:use_struct=false;type="u32"] - expected: FAIL - - [:use_struct=false;type="vec2%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="vec2%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="vec2%3Cu32%3E"] - expected: FAIL - - [:use_struct=false;type="vec3%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="vec3%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="vec3%3Cu32%3E"] - expected: FAIL - - [:use_struct=false;type="vec4%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="vec4%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="vec4%3Cu32%3E"] - expected: FAIL - - [:use_struct=false;type="vec2f"] - expected: FAIL - - [:use_struct=false;type="vec2i"] - expected: FAIL - - [:use_struct=false;type="vec2u"] - expected: FAIL - - [:use_struct=false;type="vec3f"] - expected: FAIL - - [:use_struct=false;type="vec3i"] - expected: FAIL - - [:use_struct=false;type="vec3u"] - expected: FAIL - - [:use_struct=false;type="vec4f"] - expected: FAIL - - [:use_struct=false;type="vec4i"] - expected: FAIL - - [:use_struct=false;type="vec4u"] - expected: FAIL - - [:use_struct=false;type="MyAlias"] - expected: FAIL - - [:use_struct=false;type="bool"] - expected: FAIL - - [:use_struct=false;type="vec2%3Cbool%3E"] - expected: FAIL - - [:use_struct=false;type="vec3%3Cbool%3E"] - expected: FAIL - - [:use_struct=false;type="vec4%3Cbool%3E"] - expected: FAIL - - [:use_struct=false;type="mat2x2%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat2x3%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat2x4%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat3x2%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat3x3%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat3x4%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat4x2%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat4x3%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat4x4%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="mat2x2f"] - expected: FAIL - - [:use_struct=false;type="mat2x3f"] - expected: FAIL - - [:use_struct=false;type="mat2x4f"] - expected: FAIL - - [:use_struct=false;type="mat3x2f"] - expected: FAIL - - [:use_struct=false;type="mat3x3f"] - expected: FAIL - - [:use_struct=false;type="mat3x4f"] - expected: FAIL - - [:use_struct=false;type="mat4x2f"] - expected: FAIL - - [:use_struct=false;type="mat4x3f"] - expected: FAIL - - [:use_struct=false;type="mat4x4f"] - expected: FAIL - - [:use_struct=false;type="array%3Cf32,%2012%3E"] - expected: FAIL - - [:use_struct=false;type="array%3Ci32,%2012%3E"] - expected: FAIL - - [:use_struct=false;type="array%3Cu32,%2012%3E"] - expected: FAIL - - [:use_struct=false;type="array%3Cbool,%2012%3E"] - expected: FAIL - - [:use_struct=false;type="atomic%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="atomic%3Cu32%3E"] - expected: FAIL - - [:use_struct=false;type="MyStruct"] - expected: FAIL - - [:use_struct=false;type="texture_1d%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_2d%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_2d_array%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_3d%3Cf32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_cube%3Cu32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_cube_array%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_multisampled_2d%3Ci32%3E"] - expected: FAIL - - [:use_struct=false;type="texture_external"] - expected: FAIL - - [:use_struct=false;type="texture_storage_1d%3Crgba8unorm,%20write%3E"] - expected: FAIL - - [:use_struct=false;type="texture_storage_2d%3Crg32float,%20write%3E"] - expected: FAIL - - [:use_struct=false;type="texture_storage_2d_array%3Cr32float,%20write%3E"] - expected: FAIL - - [:use_struct=false;type="texture_storage_3d%3Cr32float,%20write%3E"] - expected: FAIL - - [:use_struct=false;type="texture_depth_2d"] - expected: FAIL - - [:use_struct=false;type="texture_depth_2d_array"] - expected: FAIL - - [:use_struct=false;type="texture_depth_cube"] - expected: FAIL - - [:use_struct=false;type="texture_depth_cube_array"] - expected: FAIL - - [:use_struct=false;type="texture_depth_multisampled_2d"] - expected: FAIL - - [:use_struct=false;type="sampler"] - expected: FAIL - - [:use_struct=false;type="sampler_comparison"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,select:vector:*] - [:inputSource="const";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="const";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="const";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="const";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="const";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="const";component="u";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";component="u";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";component="u";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="b";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="f";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="i";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";component="u";overload="vec4"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,value,type_error:*] - [:isAsync=true;constants={"cf":1}] - expected: FAIL - - [:isAsync=true;constants={"cf":"_nan_"}] - expected: FAIL - - [:isAsync=true;constants={"cf":"_posinfinity_"}] - expected: FAIL - - [:isAsync=true;constants={"cf":"_neginfinity_"}] - expected: FAIL - - [:isAsync=false;constants={"cf":1}] - expected: FAIL - - [:isAsync=false;constants={"cf":"_nan_"}] - expected: FAIL - - [:isAsync=false;constants={"cf":"_posinfinity_"}] - expected: FAIL - - [:isAsync=false;constants={"cf":"_neginfinity_"}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_default_only:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:duplicate_vertex_on_function:*] - [:dupe=""] - expected: FAIL - - [:dupe="%40vertex"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:array_of_struct:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,renderPass,renderBundle:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:logical_and:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,general:timestamp_query,query_type_and_index:*] - [:type="occlusion"] - expected: FAIL - - [:type="timestamp"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atan2:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index_lhs_member_assignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:invalid:*] +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,renderPass,draw:*] expected: TIMEOUT - [:] + [:stage="finish";awaitLost=true] expected: TIMEOUT - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:vertex_buffer_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createQuerySet:*] - [:type="occlusion"] - expected: FAIL - - [:type="timestamp"] - expected: FAIL - - [:type="occlusion";awaitLost=true] - expected: FAIL - - [:type="occlusion";awaitLost=false] - expected: FAIL - - [:type="timestamp";awaitLost=true] - expected: FAIL - - [:type="timestamp";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createPipelineLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_nested:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:precision:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:struct_nested:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:texture_descriptor:*] - [:format="depth32float-stencil8";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-snorm";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-snorm";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-snorm";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-snorm";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-float";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-float";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11unorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11snorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11unorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11snorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm-srgb";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:writeTimestamp:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,write:format:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_type_alias_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:abstract_int:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,plain_cases:*] - [:x=2;y=2] - expected: FAIL - - [:x=-10;y=-10] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_misc:subresources,reset_buffer_usage_before_draw:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="uniform";usage1="vertex"] - expected: FAIL - - [:usage0="uniform";usage1="index"] - expected: FAIL - - [:usage0="uniform";usage1="indirect"] - expected: FAIL - - [:usage0="uniform";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="storage"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="vertex"] - expected: FAIL - - [:usage0="storage";usage1="index"] - expected: FAIL - - [:usage0="storage";usage1="indirect"] - expected: FAIL - - [:usage0="storage";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="vertex"] - expected: FAIL - - [:usage0="read-only-storage";usage1="index"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="vertex";usage1="uniform"] - expected: FAIL - - [:usage0="vertex";usage1="storage"] - expected: FAIL - - [:usage0="vertex";usage1="read-only-storage"] - expected: FAIL - - [:usage0="vertex";usage1="vertex"] - expected: FAIL - - [:usage0="vertex";usage1="index"] - expected: FAIL - - [:usage0="vertex";usage1="indirect"] - expected: FAIL - - [:usage0="vertex";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="index";usage1="uniform"] - expected: FAIL - - [:usage0="index";usage1="storage"] - expected: FAIL - - [:usage0="index";usage1="read-only-storage"] - expected: FAIL - - [:usage0="index";usage1="vertex"] - expected: FAIL - - [:usage0="index";usage1="index"] - expected: FAIL - - [:usage0="index";usage1="indexedIndirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,destroy:while_mapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:loop:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_subtraction:matrix_compound:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dpdy:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:copyBufferToTexture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestampWrites,invalid_query_set:*] - [:querySetState="valid"] - expected: FAIL - - [:querySetState="invalid"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:abstract_int:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec3_element_decrement:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:destination_texture,sample_count:*] - [:sampleCount=1] - expected: FAIL - - [:sampleCount=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:partial_write_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_f32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_unused_bind_group:*] - [:inRenderPass=true;hasConflict=true] - expected: FAIL - - [:inRenderPass=true;hasConflict=false] - expected: FAIL - - [:inRenderPass=false;hasConflict=true] - expected: FAIL - - [:inRenderPass=false;hasConflict=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,render,state_tracking:set_index_buffer_without_changing_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:empty_bind_group_layouts_requires_empty_bind_groups,render_pass:*] - [:bindGroupLayoutEntryCount=3;renderCommand="draw"] - expected: FAIL - - [:bindGroupLayoutEntryCount=3;renderCommand="drawIndexed"] - expected: FAIL - - [:bindGroupLayoutEntryCount=3;renderCommand="drawIndirect"] - expected: FAIL - - [:bindGroupLayoutEntryCount=3;renderCommand="drawIndexedIndirect"] - expected: FAIL - - [:bindGroupLayoutEntryCount=4;renderCommand="draw"] - expected: FAIL - - [:bindGroupLayoutEntryCount=4;renderCommand="drawIndexed"] - expected: FAIL - - [:bindGroupLayoutEntryCount=4;renderCommand="drawIndirect"] - expected: FAIL - - [:bindGroupLayoutEntryCount=4;renderCommand="drawIndexedIndirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleBias:arrayed_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createView,2d,compressed_format:*] - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sampleWithVideoFrameWithVisibleRectParam:*] - [:videoName="four-colors-vp8-bt601.webm"] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv"] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4"] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm"] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atanh:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,pipeline,default_layout:layout:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fma:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,computePass,dispatch:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - [:stage="finish";awaitLost=false] - expected: FAIL + expected: NOTRUN [:stage="submit";awaitLost=true] - expected: FAIL + expected: NOTRUN [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_case:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:buffer_binding,render_pipeline:*] - [:type="uniform"] - expected: FAIL - - [:type="storage"] - expected: FAIL - - [:type="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:function_body_single:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,builder_subcases:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:size_alignment:*] - [:method="WriteTexture";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL + expected: NOTRUN - [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setViewport,depth_rangeAndOrder:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:f32_mat:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_arithmetic:negation:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_or_compound:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_buffer_state:*] + expected: CRASH - [:type="u32";inputSource="uniform";vectorize=2] +[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:magFilter,linear:*] + [:format="r8unorm"] expected: FAIL - [:type="u32";inputSource="uniform";vectorize=3] + [:format="rg8unorm"] expected: FAIL - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumSamples:sampled:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:binding_must_contain_resource_defined_in_layout:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:copy_buffer_to_buffer_copy_source:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,state_tracking:all_needed_vertex_buffer_should_be_bound:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:store_2d_coords:*] [:format="rgba8unorm"] expected: FAIL - [:format="rgba8snorm"] + [:format="rgba8unorm-srgb"] expected: FAIL - [:format="rgba8uint"] + [:format="bgra8unorm"] expected: FAIL - [:format="rgba8sint"] + [:format="bgra8unorm-srgb"] expected: FAIL - [:format="rgba16uint"] + [:format="r16float"] expected: FAIL - [:format="rgba16sint"] + [:format="rg16float"] expected: FAIL [:format="rgba16float"] expected: FAIL - [:format="r32uint"] + [:format="rgb10a2unorm"] expected: FAIL - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:abstract_int:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:format:*] - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="r32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgba32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="r32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgba32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="stencil8"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="depth16unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="r32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgba32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="stencil8"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="depth16unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba8uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba8sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba16uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba16sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba16float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="r32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba32uint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba32sint"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgba32float"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="r32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgba32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="r32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgba32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="stencil8"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="depth16unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="r32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgba32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="stencil8"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="depth16unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba8uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba8sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba16uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba16sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba16float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="r32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba32uint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba32sint"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgba32float"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="r32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgba32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r16float"] - expected: FAIL - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="r32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgba32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="stencil8"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="depth16unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="depth32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="r32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgba32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="stencil8"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="depth16unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="depth32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba8uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba8sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba16uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba16sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba16float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="r32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba32uint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba32sint"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgba32float"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg11b10ufloat"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:read_access:*] + expected: CRASH - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgb9e5ufloat"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,color_sparse:*] + expected: CRASH - [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgb10a2uint"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:*] + expected: CRASH - [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgb10a2uint"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createShaderModule:*] + expected: TIMEOUT + [:stage="VERTEX";awaitLost=true] + expected: TIMEOUT - [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgb10a2uint"] - expected: FAIL + [:stage="VERTEX";awaitLost=false] + expected: NOTRUN - [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgb10a2uint"] - expected: FAIL + [:stage="FRAGMENT";awaitLost=true] + expected: NOTRUN - [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgb10a2uint"] - expected: FAIL + [:stage="FRAGMENT";awaitLost=false] + expected: NOTRUN - [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgb10a2uint"] - expected: FAIL + [:stage="COMPUTE";awaitLost=true] + expected: NOTRUN - [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgb10a2uint"] - expected: FAIL + [:stage="COMPUTE";awaitLost=false] + expected: NOTRUN - [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgb10a2uint"] - expected: FAIL - [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgb10a2uint"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_format_renderable:*] + expected: CRASH - [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgb10a2uint"] +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,limits,maxColorAttachmentBytesPerSample,unaligned:*] + [:formats=["r8unorm","r32float","rgba8unorm","rgba32float","r8unorm"\]] expected: FAIL - [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgb10a2uint"] + [:formats=["r32float","rgba8unorm","rgba32float","r8unorm","r8unorm"\]] expected: FAIL - [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgb10a2uint"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:scalar_vector:*] + expected: CRASH [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countLeadingZeros:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL + expected: CRASH - [:inputSource="const";vectorize=4] +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:sample_count:*] + [:copyType="CopyB2T"] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:conflicting_attribute_different_location:*] + expected: CRASH - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:i32:*] - [:val="0x123"] - expected: FAIL - - [:val="123"] - expected: FAIL - - [:val="0"] - expected: FAIL - - [:val="0x3f"] - expected: FAIL - - [:val="2147483647"] - expected: FAIL - - [:val="-0x123"] - expected: FAIL - - [:val="-123"] - expected: FAIL - - [:val="-0x3f"] - expected: FAIL - - [:val="-2147483647"] - expected: FAIL - - [:val="-2147483648"] - expected: FAIL - - [:val="94i"] - expected: FAIL - - [:val="2147483647i"] - expected: FAIL - - [:val="-2147483647i"] - expected: FAIL - - [:val="i32(-2147483648)"] - expected: FAIL - - [:val="42u"] - expected: FAIL - - [:val="0u"] - expected: FAIL - - [:val="4294967295u"] - expected: FAIL - - [:val="2147483648"] - expected: FAIL - - [:val="2147483648i"] - expected: FAIL - - [:val="-2147483649"] - expected: FAIL - - [:val="-2147483649i"] - expected: FAIL - - [:val="1.0"] - expected: FAIL - - [:val="1.0f"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_vector_scalar_compound:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_arithmetic:negation:*] + expected: CRASH -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:onscreenCanvas,snapshot:*] - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="toDataURL"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="toBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="toDataURL"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="toBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="toDataURL"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="toBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="toDataURL"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="toBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="toDataURL"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="toBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp2:integer_argument:*] + expected: CRASH -[cts.https.html?q=webgpu:api,operation,command_buffer,basic:b2t2t2b:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_write_mask:*] - [:isAsync=false;writeMask=0] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:functions:*] + expected: CRASH - [:isAsync=false;writeMask=15] - expected: FAIL +[cts.https.html?q=webgpu:web_platform,copyToTexture,video:copy_from_video:*] + expected: TIMEOUT + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] - [:isAsync=false;writeMask=16] - expected: FAIL + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] - [:isAsync=false;writeMask=2147483649] - expected: FAIL + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] - [:isAsync=true;writeMask=0] - expected: FAIL + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] - [:isAsync=true;writeMask=15] - expected: FAIL + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] - [:isAsync=true;writeMask=16] - expected: FAIL + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] - [:isAsync=true;writeMask=2147483649] - expected: FAIL + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-90.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-180.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true;dstColorSpace="srgb"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="display-p3"] + expected: NOTRUN + + [:videoName="four-colors-h264-bt601-rotate-270.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false;dstColorSpace="srgb"] + expected: NOTRUN -[cts.https.html?q=webgpu:api,operation,rendering,draw:largeish_buffer:*] +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:and:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,multisample_state:alpha_to_coverage,sample_mask:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_const_to_f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:less_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:corw1:*] + expected: TIMEOUT + [:memType="atomic_storage";testType="inter_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAtCreation:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,memory_model,weak:store:*] - [:memType="atomic_workgroup"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_scalar_multiplication:scalar_matrix:*] + expected: CRASH - [:memType="atomic_storage"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createSampler:*] + expected: TIMEOUT + [:awaitLost=true] + expected: TIMEOUT + + [:awaitLost=false] + expected: NOTRUN -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:vec4_constructor:*] +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:fragment_builtin_values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,writeTexture:texture,device_mismatch:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_compound_assignment:*] - [:] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_matching:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:non_normalized:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:depth_stencil_state:*] + [:isAsync=false;format="depth32float-stencil8";enable_required_feature=true] + expected: FAIL + + [:isAsync=true;format="depth32float-stencil8";enable_required_feature=true] + expected: FAIL + + [:isAsync=true;format="depth32float-stencil8";enable_required_feature=false] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:f32:*] - [:inputSource="const";vectorize="_undef_"] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_exp:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:max_draw_count:*] + [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=0] expected: FAIL - [:inputSource="const";vectorize=2] + [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=1] expected: FAIL - [:inputSource="const";vectorize=3] + [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=4] expected: FAIL - [:inputSource="const";vectorize=4] + [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=16] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] + [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=0] expected: FAIL - [:inputSource="uniform";vectorize=2] + [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=1] expected: FAIL - [:inputSource="uniform";vectorize=3] + [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=4] expected: FAIL - [:inputSource="uniform";vectorize=4] + [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=16] expected: FAIL - [:inputSource="storage_r";vectorize="_undef_"] + [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=0] expected: FAIL - [:inputSource="storage_r";vectorize=2] + [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=1] expected: FAIL - [:inputSource="storage_r";vectorize=3] + [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=4] expected: FAIL - [:inputSource="storage_r";vectorize=4] + [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=16] expected: FAIL - [:inputSource="storage_rw";vectorize="_undef_"] + [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=0] expected: FAIL - [:inputSource="storage_rw";vectorize=2] + [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=1] expected: FAIL - [:inputSource="storage_rw";vectorize=3] + [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=4] expected: FAIL - [:inputSource="storage_rw";vectorize=4] + [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=16] expected: FAIL -[cts.https.html?q=webgpu:api,operation,command_buffer,programmable,state_tracking:bind_group_order:*] +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atomics:stage:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop_break:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,align:placement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:less_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_param_struct:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:bind_group,device_mismatch:*] [:encoderType="compute%20pass"] expected: FAIL - [:encoderType="render%20pass"] - expected: FAIL - [:encoderType="render%20bundle"] - expected: FAIL +[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:drawTo2DCanvas:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:vector:*] + expected: CRASH -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_increment:*] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f32_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_return:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:pipeline,device_mismatch:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,reflection:query_set_reflection_attributes:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,tan:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:less_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth_bias:depth_bias_24bit_format:*] - [:format="depth24plus";quadAngle=0;bias=8388608;biasSlopeScale=0;biasClamp=0] - expected: FAIL - - [:format="depth24plus";quadAngle=0;bias=8388608;biasSlopeScale=0;biasClamp=0.1] - expected: FAIL - - [:format="depth24plus";quadAngle=1;bias=8388608;biasSlopeScale=1;biasClamp=0] - expected: FAIL - - [:format="depth24plus-stencil8";quadAngle=0;bias=8388608;biasSlopeScale=0;biasClamp=0] - expected: FAIL - - [:format="depth24plus-stencil8";quadAngle=0;bias=8388608;biasSlopeScale=0;biasClamp=0.1] - expected: FAIL - - [:format="depth24plus-stencil8";quadAngle=1;bias=8388608;biasSlopeScale=1;biasClamp=0] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:function_body_multiple:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:storage_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:rw,single_pass,load_store:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,builder_subcases_short:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,unmapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:texture_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:nested_for_continue:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:less_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,source:invalid_source:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:copyBufferToBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:not_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:location,mismatch:*] - [:isAsync=false;outputs=["%40location(0)%20__:%20f32"\];inputs=["%40location(0)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=false;outputs=["%40location(0)%20__:%20f32"\];inputs=["%40location(1)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=false;outputs=["%40location(1)%20__:%20f32"\];inputs=["%40location(0)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=false;outputs=["%40location(0)%20__:%20f32","%40location(1)%20__:%20f32"\];inputs=["%40location(1)%20__:%20f32","%40location(0)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=false;outputs=["%40location(1)%20__:%20f32","%40location(0)%20__:%20f32"\];inputs=["%40location(0)%20__:%20f32","%40location(1)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=true;outputs=["%40location(0)%20__:%20f32"\];inputs=["%40location(0)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=true;outputs=["%40location(0)%20__:%20f32"\];inputs=["%40location(1)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=true;outputs=["%40location(1)%20__:%20f32"\];inputs=["%40location(0)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=true;outputs=["%40location(0)%20__:%20f32","%40location(1)%20__:%20f32"\];inputs=["%40location(1)%20__:%20f32","%40location(0)%20__:%20f32"\]] - expected: FAIL - - [:isAsync=true;outputs=["%40location(1)%20__:%20f32","%40location(0)%20__:%20f32"\];inputs=["%40location(0)%20__:%20f32","%40location(1)%20__:%20f32"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,multiple_color_attachments:*] - [:storeOperation1="discard";storeOperation2="discard"] - expected: FAIL - - [:storeOperation1="discard";storeOperation2="store"] - expected: FAIL - - [:storeOperation1="store";storeOperation2="discard"] - expected: FAIL - - [:storeOperation1="store";storeOperation2="store"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:valid_only_with_vertex_position_builtin:*] - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_logical:negation:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicLoad:load:*] - [:SC="storage";T="i32"] - expected: FAIL - - [:SC="storage";T="u32"] - expected: FAIL - - [:SC="uniform";T="i32"] - expected: FAIL - - [:SC="uniform";T="u32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countLeadingZeros:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:u32:*] - [:val="0x123"] - expected: FAIL - - [:val="123"] - expected: FAIL - - [:val="0"] - expected: FAIL - - [:val="0x3f"] - expected: FAIL - - [:val="2147483647"] - expected: FAIL - - [:val="42u"] - expected: FAIL - - [:val="0u"] - expected: FAIL - - [:val="4294967295u"] - expected: FAIL - - [:val="4294967295"] - expected: FAIL - - [:val="-0x123"] - expected: FAIL - - [:val="-123"] - expected: FAIL - - [:val="-0x3f"] - expected: FAIL - - [:val="-2147483647"] - expected: FAIL - - [:val="-2147483648"] - expected: FAIL - - [:val="94i"] - expected: FAIL - - [:val="2147483647i"] - expected: FAIL - - [:val="-2147483647i"] - expected: FAIL - - [:val="i32(-2147483648)"] - expected: FAIL - - [:val="4294967296"] - expected: FAIL - - [:val="4294967296u"] - expected: FAIL - - [:val="-1"] - expected: FAIL - - [:val="1.0"] - expected: FAIL - - [:val="1.0f"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,resource_binding_size:*] - [:type="uniform"] - expected: FAIL - - [:type="storage"] - expected: FAIL - - [:type="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_write,frag_depth:*] - [:isAsync=false;format="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8"] - expected: FAIL - - [:isAsync=false;format="depth16unorm"] - expected: FAIL - - [:isAsync=false;format="depth32float"] - expected: FAIL - - [:isAsync=false;format="depth24plus"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8"] - expected: FAIL - - [:isAsync=true;format="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8"] - expected: FAIL - - [:isAsync=true;format="depth16unorm"] - expected: FAIL - - [:isAsync=true;format="depth32float"] - expected: FAIL - - [:isAsync=true;format="depth24plus"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,if:else_if:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_read_write_mask:*] - [:format="stencil8";maskType="write";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";maskType="write";stencilRefValue=2] - expected: FAIL - - [:format="stencil8";maskType="read";stencilRefValue=1] - expected: FAIL - - [:format="stencil8";maskType="read";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";maskType="write";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";maskType="write";stencilRefValue=2] - expected: FAIL - - [:format="depth24plus-stencil8";maskType="read";stencilRefValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";maskType="read";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";maskType="write";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";maskType="write";stencilRefValue=2] - expected: FAIL - - [:format="depth32float-stencil8";maskType="read";stencilRefValue=1] - expected: FAIL - - [:format="depth32float-stencil8";maskType="read";stencilRefValue=2] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:depth_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,sample_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:writeTexture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:compound_statement_multiple:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,buffer_mapped:copyTextureToBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:shader_stages_and_visibility,storage_write:*] - [:compute=false] - expected: FAIL - - [:compute=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,bgra8unorm_storage:configure_storage_usage_on_canvas_context_without_bgra8unorm_storage:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,multisample_state:count:*] - [:isAsync=false] - expected: FAIL - - [:isAsync=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,builtin:placement:*] - [:scope="private-var";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="storage-var";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="struct-member";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="non-ep-param";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="non-ep-ret";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="fn-decl";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="fn-var";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="while-stmt";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="_undef_";attribute={"private-var":false,"storage-var":false,"struct-member":true,"non-ep-param":false,"non-ep-ret":false,"fn-decl":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:occlusion_query_set,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumLayers:arrayed:*] - [:texture_type="texture_depth_2d_array"] - expected: FAIL - - [:texture_type="texture_depth_cube_array"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_fn_var_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setScissorRect,xy_rect_contained_in_attachment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,threading:destroyed:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,extractBits:u32:*] - [:inputSource="const";width=1] - expected: FAIL - - [:inputSource="const";width=2] - expected: FAIL - - [:inputSource="const";width=3] - expected: FAIL - - [:inputSource="const";width=4] - expected: FAIL - - [:inputSource="uniform";width=1] - expected: FAIL - - [:inputSource="uniform";width=2] - expected: FAIL - - [:inputSource="uniform";width=3] - expected: FAIL - - [:inputSource="uniform";width=4] - expected: FAIL - - [:inputSource="storage_r";width=1] - expected: FAIL - - [:inputSource="storage_r";width=2] - expected: FAIL - - [:inputSource="storage_r";width=3] - expected: FAIL - - [:inputSource="storage_r";width=4] - expected: FAIL - - [:inputSource="storage_rw";width=1] - expected: FAIL - - [:inputSource="storage_rw";width=2] - expected: FAIL - - [:inputSource="storage_rw";width=3] - expected: FAIL - - [:inputSource="storage_rw";width=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,2d_texture,compressed_format:*] - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";size=[4,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8188,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8188,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8192,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8196,1,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[8196,4,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,8188,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,8196,1\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,1,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,4,255\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,1,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,4,256\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,1,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[1,4,257\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";size=[4,4,257\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":-4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":1,"add":4},{"mult":0,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":-4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":1,"add":4},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":-1}\]] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:setBindGroup,at_over:*] + expected: CRASH - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":-1}\]] +[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:fragment_undefined_entry_point_and_extra_stage:*] + [:isAsync=true;extraShaderModuleStage="compute"] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] + [:isAsync=true;extraShaderModuleStage="vertex"] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":0}\]] + [:isAsync=true;extraShaderModuleStage="fragment"] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":0}\]] + [:isAsync=false;extraShaderModuleStage="compute"] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":0}\]] + [:isAsync=false;extraShaderModuleStage="vertex"] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] + [:isAsync=false;extraShaderModuleStage="fragment"] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cos:f32:*] + expected: CRASH - [:dimension="2d";format="bc7-rgba-unorm-srgb";sizeVariant=[{"mult":0,"add":4},{"mult":0,"add":4},{"mult":1,"add":1}\]] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_left_concrete:*] + expected: CRASH +[cts.https.html?q=webgpu:api,validation,compute_pipeline:shader_module,invalid:*] + expected: CRASH -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f16:*] - [:inputSource="const";vectorize="_undef_"] +[cts.https.html?q=webgpu:api,operation,render_pass,clear_value:stencil_clear_value:*] + [:stencilFormat="stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="const";vectorize=2] + [:stencilFormat="stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="const";vectorize=3] + [:stencilFormat="stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="const";vectorize=4] + [:stencilFormat="stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] + [:stencilFormat="stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="uniform";vectorize=2] + [:stencilFormat="stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="uniform";vectorize=3] + [:stencilFormat="stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="uniform";vectorize=4] + [:stencilFormat="stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="storage_r";vectorize="_undef_"] + [:stencilFormat="stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="storage_r";vectorize=2] + [:stencilFormat="stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="storage_r";vectorize=3] + [:stencilFormat="depth32float-stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="storage_r";vectorize=4] + [:stencilFormat="depth32float-stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="storage_rw";vectorize="_undef_"] + [:stencilFormat="depth32float-stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="storage_rw";vectorize=2] + [:stencilFormat="depth32float-stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:inputSource="storage_rw";vectorize=3] + [:stencilFormat="depth32float-stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:inputSource="storage_rw";vectorize=4] + [:stencilFormat="depth32float-stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompareLevel:stage:*] - [:stage="fragment"] + [:stencilFormat="depth32float-stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - [:stage="vertex"] + [:stencilFormat="depth32float-stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL - [:stage="compute"] + [:stencilFormat="depth32float-stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=true] expected: FAIL - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureDimension:external:*] - [:] + [:stencilFormat="depth32float-stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=false] expected: FAIL [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicAdd:add_workgroup:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] expected: FAIL @@ -55001,192 +15092,3892 @@ expected: FAIL -[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_param:*] - [:target_stage=""] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_f32:*] + expected: CRASH - [:target_stage="vertex"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstLeadingBit:u32:*] + expected: CRASH - [:target_stage="fragment"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:alias_name:*] + expected: CRASH - [:target_stage="compute"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,validation_error,vertex:*] + expected: CRASH +[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:shared_shader_module:*] + expected: CRASH -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:bitwise_and:*] +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,color_format:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createCommandEncoder:*] - [:] +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_array_element:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:binary_expressions:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:timestampWrites,query_set_type:*] + [:queryType="occlusion"] expected: FAIL - [:awaitLost=true] - expected: FAIL - - [:awaitLost=false] + [:queryType="timestamp"] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,asin:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:unmap,state,mapped:*] +[cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:beginOcclusionQuery:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,createTexture:sampleCount,various_sampleCount_with_all_formats:*] - [:dimension="_undef_";format="r8unorm"] +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,non_array:*] + expected: TIMEOUT + [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8uint";dstFormat="r8uint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8uint";dstFormat="r8uint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8sint";dstFormat="r8sint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8sint";dstFormat="r8sint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="1d"] + expected: [TIMEOUT, NOTRUN] + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r16uint";dstFormat="r16uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="r16uint";dstFormat="r16uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r16uint";dstFormat="r16uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r16sint";dstFormat="r16sint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="r16sint";dstFormat="r16sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r16sint";dstFormat="r16sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r16float";dstFormat="r16float";dimension="1d"] + expected: NOTRUN + + [:srcFormat="r16float";dstFormat="r16float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r16float";dstFormat="r16float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg16float";dstFormat="rg16float";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg16float";dstFormat="rg16float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg16float";dstFormat="rg16float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r32uint";dstFormat="r32uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="r32uint";dstFormat="r32uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r32uint";dstFormat="r32uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r32sint";dstFormat="r32sint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="r32sint";dstFormat="r32sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r32sint";dstFormat="r32sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r32float";dstFormat="r32float";dimension="1d"] + expected: NOTRUN + + [:srcFormat="r32float";dstFormat="r32float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r32float";dstFormat="r32float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg32float";dstFormat="rg32float";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg32float";dstFormat="rg32float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg32float";dstFormat="rg32float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="1d"] + expected: [PASS, TIMEOUT, NOTRUN] + + [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="1d"] + expected: [PASS, NOTRUN] + + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:setVertexBuffer:*] + [:] expected: FAIL - [:dimension="_undef_";format="r8snorm"] + +[cts.https.html?q=webgpu:shader,execution,memory_model,weak:2_plus_2_write:*] + expected: TIMEOUT + [:memType="atomic_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_ranges:*] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="r8uint"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="r8sint"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="rg8unorm"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="rg8snorm"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="rg8uint"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="rg8sint"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="rgba8unorm"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="rgba8unorm-srgb"] + [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="rgba8snorm"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="rgba8uint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="rgba8sint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="bgra8unorm"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="bgra8unorm-srgb"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="r16uint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="r16sint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="r16float"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="rg16uint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="rg16sint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="rg16float"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="rgba16uint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="rgba16sint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="rgba16float"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="r32uint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=0] expected: FAIL - [:dimension="_undef_";format="r32sint"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=1] expected: FAIL - [:dimension="_undef_";format="r32float"] + [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=3] expected: FAIL - [:dimension="_undef_";format="rg32uint"] + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,basic:*] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] expected: FAIL - [:dimension="_undef_";format="rg32sint"] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] expected: FAIL - [:dimension="_undef_";format="rg32float"] + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] expected: FAIL - [:dimension="_undef_";format="rgba32uint"] + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] expected: FAIL - [:dimension="_undef_";format="rgba32sint"] + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] expected: FAIL - [:dimension="_undef_";format="rgba32float"] + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] expected: FAIL - [:dimension="_undef_";format="rgb10a2unorm"] + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_let_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,exp:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:one_pointer_one_module_scope:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:no_entry_point_provided:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_shader_input_location_in_vertex_state:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,unmapped:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:unmap,state,mappingPending:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cos:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_with_invalid_or_destroyed_texture:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limits,supported:*] + [:limit="maxBindGroupsPlusVertexBuffers"] + expected: FAIL + + [:limit="maxInterStageShaderVariables"] + expected: FAIL + + [:limit="maxColorAttachments"] + expected: FAIL + + [:limit="maxColorAttachmentBytesPerSample"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cross:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,shadow:declaration:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asin:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createBuffer:*] + expected: TIMEOUT + [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: TIMEOUT + + [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] + expected: NOTRUN + + [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bgl_resource_type_mismatch:*] + [:encoderType="compute%20pass";call="dispatch";callWithZero=true] + expected: FAIL + + [:encoderType="compute%20pass";call="dispatch";callWithZero=false] + expected: FAIL + + [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20pass";call="draw";callWithZero=true] + expected: FAIL + + [:encoderType="render%20pass";call="draw";callWithZero=false] + expected: FAIL + + [:encoderType="render%20pass";call="drawIndexed";callWithZero=true] + expected: FAIL + + [:encoderType="render%20pass";call="drawIndexed";callWithZero=false] + expected: FAIL + + [:encoderType="render%20pass";call="drawIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20pass";call="drawIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="draw";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="draw";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countOneBits:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:subresources_and_binding_types_combination_for_color:*] + [:compute=false;type0="sampled-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:compute=false;type0="sampled-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=false;type0="writeonly-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=false;type0="readonly-storage-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:compute=false;type0="readonly-storage-texture";type1="writeonly-storage-texture"] + expected: FAIL + + [:compute=false;type0="readonly-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=false;type0="readonly-storage-texture";type1="render-target"] + expected: FAIL + + [:compute=false;type0="readwrite-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=false;type0="readwrite-storage-texture";type1="render-target"] + expected: FAIL + + [:compute=false;type0="render-target";type1="render-target"] + expected: FAIL + + [:compute=true;type0="sampled-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:compute=true;type0="sampled-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=true;type0="writeonly-storage-texture";type1="writeonly-storage-texture"] + expected: FAIL + + [:compute=true;type0="writeonly-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=true;type0="readonly-storage-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:compute=true;type0="readonly-storage-texture";type1="writeonly-storage-texture"] + expected: FAIL + + [:compute=true;type0="readonly-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:compute=true;type0="readwrite-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,getBindGroupLayout:index_range,explicit_layout:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:*] + [:encoderType="render%20bundle";dynamicOffsets=[512,0\];useU32array=false] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[512,0\];useU32array=true] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[1024,0\];useU32array=false] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[1024,0\];useU32array=true] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[0,512\];useU32array=false] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[0,512\];useU32array=true] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[0,1024\];useU32array=false] + expected: FAIL + + [:encoderType="render%20bundle";dynamicOffsets=[0,1024\];useU32array=true] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:vertex_parsing:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroup:binding_resources,device_mismatch:*] + [:entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_none:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blend_constant,not_inherited:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depthCompare_optional:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,shader_io,shared_structs:shared_between_stages:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_right_concrete:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,log2:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,loop:loop_break:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f32_vec3:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,builtin:placement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicAnd:and_workgroup:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_direct_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_workgroup_basic:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countTrailingZeros:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:validate,maxBindGroupsPlusVertexBuffers:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:and_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,degrees:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:nested_for_break:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:bound_on_offset:*] + [:method="WriteTexture"] + expected: FAIL + + [:method="CopyB2T"] + expected: FAIL + + [:method="CopyT2B"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:vertex_buffer_used_multiple_times_interleaved:*] + [:format="uint8x2"] + expected: FAIL + + [:format="uint8x4"] + expected: FAIL + + [:format="sint8x2"] + expected: FAIL + + [:format="sint8x4"] + expected: FAIL + + [:format="unorm8x2"] + expected: FAIL + + [:format="unorm8x4"] + expected: FAIL + + [:format="snorm8x2"] + expected: FAIL + + [:format="snorm8x4"] + expected: FAIL + + [:format="uint16x2"] + expected: FAIL + + [:format="uint16x4"] + expected: FAIL + + [:format="sint16x2"] + expected: FAIL + + [:format="sint16x4"] + expected: FAIL + + [:format="unorm16x2"] + expected: FAIL + + [:format="unorm16x4"] + expected: FAIL + + [:format="snorm16x2"] + expected: FAIL + + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:different_entry_points:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:type:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:discontiguous_location_and_attribs:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,must_use:builtin_no_must_use:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:compute_builtin_values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,binary_ops:all:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,depth_format:*] + [:encoderType="render%20pass";encoderFormatFeature="_undef_";pipelineFormatFeature="_undef_"] + expected: FAIL + + [:encoderType="render%20pass";encoderFormatFeature="_undef_";pipelineFormatFeature="depth32float-stencil8"] + expected: FAIL + + [:encoderType="render%20pass";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="_undef_"] + expected: FAIL + + [:encoderType="render%20pass";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="depth32float-stencil8"] + expected: FAIL + + [:encoderType="render%20bundle";encoderFormatFeature="_undef_";pipelineFormatFeature="_undef_"] + expected: FAIL + + [:encoderType="render%20bundle";encoderFormatFeature="_undef_";pipelineFormatFeature="depth32float-stencil8"] + expected: FAIL + + [:encoderType="render%20bundle";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="_undef_"] + expected: FAIL + + [:encoderType="render%20bundle";encoderFormatFeature="depth32float-stencil8";pipelineFormatFeature="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:mipmapFilter:*] + [:format="r8unorm"] + expected: FAIL + + [:format="rg8unorm"] + expected: FAIL + + [:format="rgba8unorm"] + expected: FAIL + + [:format="rgba8unorm-srgb"] + expected: FAIL + + [:format="bgra8unorm"] + expected: FAIL + + [:format="bgra8unorm-srgb"] + expected: FAIL + + [:format="r16float"] + expected: FAIL + + [:format="rg16float"] + expected: FAIL + + [:format="rgba16float"] + expected: FAIL + + [:format="rgb10a2unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp2:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:resolve_query_set_to_partial_buffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:usage:*] + [:method="CopyB2T"] + expected: FAIL + + [:method="CopyT2B"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:setVertexBuffer_offset_and_attribute_offset:*] + [:format="uint8x2"] + expected: FAIL + + [:format="uint8x4"] + expected: FAIL + + [:format="sint8x2"] + expected: FAIL + + [:format="sint8x4"] + expected: FAIL + + [:format="unorm8x2"] + expected: FAIL + + [:format="unorm8x4"] + expected: FAIL + + [:format="snorm8x2"] + expected: FAIL + + [:format="snorm8x4"] + expected: FAIL + + [:format="uint16x2"] + expected: FAIL + + [:format="uint16x4"] + expected: FAIL + + [:format="sint16x2"] + expected: FAIL + + [:format="sint16x4"] + expected: FAIL + + [:format="unorm16x2"] + expected: FAIL + + [:format="unorm16x4"] + expected: FAIL + + [:format="snorm16x2"] + expected: FAIL + + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,format_supports_resolve:*] + [:format="rgb10a2uint"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,queue,writeBuffer:array_types:*] + [:arrayType="Uint16Array";useArrayBuffer=false] + expected: FAIL + + [:arrayType="Uint32Array";useArrayBuffer=false] + expected: FAIL + + [:arrayType="Int16Array";useArrayBuffer=false] + expected: FAIL + + [:arrayType="Int32Array";useArrayBuffer=false] + expected: FAIL + + [:arrayType="Float32Array";useArrayBuffer=false] + expected: FAIL + + [:arrayType="Float64Array";useArrayBuffer=false] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageData:copy_subrect_from_ImageData:*] + [:srcDoFlipYDuringCopy=true;dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstPremultiplied=false] + expected: FAIL + + [:srcDoFlipYDuringCopy=false;dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=false;dstPremultiplied=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_handle_space_invalid:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:bindings_in_bundle:*] + [:type0="render-target";type1="readonly-storage-texture"] + expected: FAIL + + [:type0="render-target";type1="readwrite-storage-texture"] + expected: FAIL + + [:type0="sampled-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:type0="sampled-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:type0="writeonly-storage-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:type0="writeonly-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:type0="readonly-storage-texture";type1="render-target"] + expected: FAIL + + [:type0="readonly-storage-texture";type1="sampled-texture"] + expected: FAIL + + [:type0="readonly-storage-texture";type1="writeonly-storage-texture"] + expected: FAIL + + [:type0="readonly-storage-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:type0="readonly-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + [:type0="readwrite-storage-texture";type1="render-target"] + expected: FAIL + + [:type0="readwrite-storage-texture";type1="sampled-texture"] + expected: FAIL + + [:type0="readwrite-storage-texture";type1="writeonly-storage-texture"] + expected: FAIL + + [:type0="readwrite-storage-texture";type1="readonly-storage-texture"] + expected: FAIL + + [:type0="readwrite-storage-texture";type1="readwrite-storage-texture"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:occlusion_query,begin_end_balance:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:copy_multisampled_color:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:uniform_buffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_compound_assignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,round:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,id:id:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_let_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cosh:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:pipeline_output_targets:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxDynamicUniformBuffersPerPipelineLayout:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,round:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pipeline,pipeline_output_targets:color,attachments:*] + [:format="r8unorm"] + expected: FAIL + + [:format="r8uint"] + expected: FAIL + + [:format="r8sint"] + expected: FAIL + + [:format="rg8unorm"] + expected: FAIL + + [:format="rg8uint"] + expected: FAIL + + [:format="rg8sint"] + expected: FAIL + + [:format="rgba8unorm"] + expected: FAIL + + [:format="rgba8unorm-srgb"] + expected: FAIL + + [:format="rgba8uint"] + expected: FAIL + + [:format="rgba8sint"] + expected: FAIL + + [:format="bgra8unorm"] + expected: FAIL + + [:format="bgra8unorm-srgb"] + expected: FAIL + + [:format="r16uint"] + expected: FAIL + + [:format="r16sint"] + expected: FAIL + + [:format="r16float"] + expected: FAIL + + [:format="rg16uint"] + expected: FAIL + + [:format="rg16sint"] + expected: FAIL + + [:format="rg16float"] + expected: FAIL + + [:format="rgba16uint"] + expected: FAIL + + [:format="rgba16sint"] + expected: FAIL + + [:format="rgba16float"] + expected: FAIL + + [:format="r32uint"] + expected: FAIL + + [:format="r32sint"] + expected: FAIL + + [:format="r32float"] + expected: FAIL + + [:format="rg32uint"] + expected: FAIL + + [:format="rg32sint"] + expected: FAIL + + [:format="rg32float"] + expected: FAIL + + [:format="rgba32uint"] + expected: FAIL + + [:format="rgba32sint"] + expected: FAIL + + [:format="rgba32float"] + expected: FAIL + + [:format="rgb10a2uint"] + expected: FAIL + + [:format="rgb10a2unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:multi_entry_points:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:multiple_pairs_of_draws_in_one_render_pass:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:uninitialized,vertex:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:multiple_pairs_of_dispatches_in_one_compute_pass:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:or:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_passOp_operation:*] + [:format="stencil8";passOp="keep";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="zero";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="replace";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="invert";initialStencil=240] + expected: FAIL + + [:format="stencil8";passOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="stencil8";passOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="stencil8";passOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="stencil8";passOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="stencil8";passOp="decrement-wrap";initialStencil=0] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="keep";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="zero";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="replace";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="invert";initialStencil=240] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";passOp="decrement-wrap";initialStencil=0] + expected: FAIL + + [:format="depth32float-stencil8";passOp="keep";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="zero";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="replace";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="invert";initialStencil=240] + expected: FAIL + + [:format="depth32float-stencil8";passOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="depth32float-stencil8";passOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="depth32float-stencil8";passOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="depth32float-stencil8";passOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";passOp="decrement-wrap";initialStencil=0] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,buffers,map_ArrayBuffer:postMessage:*] + [:transfer=false;mapMode="READ"] + expected: FAIL + + [:transfer=true;mapMode="READ"] + expected: FAIL + + [:transfer=true;mapMode="WRITE"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,clearBuffer:*] + [:stage="finish";awaitLost=true] + expected: FAIL + + [:stage="finish";awaitLost=false] + expected: FAIL + + [:stage="submit";awaitLost=true] + expected: FAIL + + [:stage="submit";awaitLost=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createRenderPipelineAsync:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,shader_io,fragment_builtins:inputs,interStage:*] + [:nearFar=[0,1\];sampleCount=1;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=1;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=1;interpolation={"type":"flat"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=4;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=4;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0,1\];sampleCount=4;interpolation={"type":"flat"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=1;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=1;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=1;interpolation={"type":"flat"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=4;interpolation={"type":"perspective","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=4;interpolation={"type":"linear","sampling":"center"}] + expected: FAIL + + [:nearFar=[0.25,0.75\];sampleCount=4;interpolation={"type":"flat"}] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:rw:*] + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:createPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_left_concrete_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,locations:stage_inout:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:function_variables:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec2_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createTexture,2d,compressed_format:*] + expected: TIMEOUT + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: TIMEOUT + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,createTexture:dimension_type_and_format_compatibility:*] + [:dimension="_undef_";format="rgb10a2uint"] expected: FAIL [:dimension="_undef_";format="rg11b10ufloat"] @@ -55201,160 +18992,28 @@ [:dimension="_undef_";format="depth16unorm"] expected: FAIL - [:dimension="_undef_";format="depth32float"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - [:dimension="_undef_";format="depth32float-stencil8"] expected: FAIL - [:dimension="_undef_";format="bc1-rgba-unorm"] + [:dimension="1d";format="rgb10a2uint"] expected: FAIL - [:dimension="_undef_";format="bc1-rgba-unorm-srgb"] + [:dimension="1d";format="rg11b10ufloat"] expected: FAIL - [:dimension="_undef_";format="bc2-rgba-unorm"] + [:dimension="1d";format="rgb9e5ufloat"] expected: FAIL - [:dimension="_undef_";format="bc2-rgba-unorm-srgb"] + [:dimension="1d";format="stencil8"] expected: FAIL - [:dimension="_undef_";format="bc3-rgba-unorm"] + [:dimension="1d";format="depth16unorm"] expected: FAIL - [:dimension="_undef_";format="bc3-rgba-unorm-srgb"] + [:dimension="1d";format="depth32float-stencil8"] expected: FAIL - [:dimension="_undef_";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r8unorm"] - expected: FAIL - - [:dimension="2d";format="r8snorm"] - expected: FAIL - - [:dimension="2d";format="r8uint"] - expected: FAIL - - [:dimension="2d";format="r8sint"] - expected: FAIL - - [:dimension="2d";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";format="rg8uint"] - expected: FAIL - - [:dimension="2d";format="rg8sint"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r16uint"] - expected: FAIL - - [:dimension="2d";format="r16sint"] - expected: FAIL - - [:dimension="2d";format="r16float"] - expected: FAIL - - [:dimension="2d";format="rg16uint"] - expected: FAIL - - [:dimension="2d";format="rg16sint"] - expected: FAIL - - [:dimension="2d";format="rg16float"] - expected: FAIL - - [:dimension="2d";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";format="rgba16float"] - expected: FAIL - - [:dimension="2d";format="r32uint"] - expected: FAIL - - [:dimension="2d";format="r32sint"] - expected: FAIL - - [:dimension="2d";format="r32float"] - expected: FAIL - - [:dimension="2d";format="rg32uint"] - expected: FAIL - - [:dimension="2d";format="rg32sint"] - expected: FAIL - - [:dimension="2d";format="rg32float"] - expected: FAIL - - [:dimension="2d";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";format="rgba32float"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] + [:dimension="2d";format="rgb10a2uint"] expected: FAIL [:dimension="2d";format="rg11b10ufloat"] @@ -55369,183 +19028,17490 @@ [:dimension="2d";format="depth16unorm"] expected: FAIL - [:dimension="2d";format="depth32float"] - expected: FAIL - - [:dimension="2d";format="depth24plus"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - [:dimension="2d";format="depth32float-stencil8"] expected: FAIL - [:dimension="2d";format="bc1-rgba-unorm"] + [:dimension="3d";format="rgb10a2uint"] expected: FAIL - [:dimension="2d";format="bc1-rgba-unorm-srgb"] + [:dimension="3d";format="rg11b10ufloat"] expected: FAIL - [:dimension="2d";format="bc2-rgba-unorm"] + [:dimension="3d";format="rgb9e5ufloat"] expected: FAIL - [:dimension="2d";format="bc2-rgba-unorm-srgb"] + [:dimension="3d";format="stencil8"] expected: FAIL - [:dimension="2d";format="bc3-rgba-unorm"] + [:dimension="3d";format="depth16unorm"] expected: FAIL - [:dimension="2d";format="bc3-rgba-unorm-srgb"] + [:dimension="3d";format="depth32float-stencil8"] expected: FAIL - [:dimension="2d";format="bc4-r-unorm"] + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createBindGroupLayout:*] + expected: TIMEOUT + [:entry={"buffer":{"type":"uniform"}};awaitLost=true] + expected: TIMEOUT + + [:entry={"buffer":{"type":"uniform"}};awaitLost=false] + expected: NOTRUN + + [:entry={"buffer":{"type":"storage"}};awaitLost=true] + expected: NOTRUN + + [:entry={"buffer":{"type":"storage"}};awaitLost=false] + expected: NOTRUN + + [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=true] + expected: NOTRUN + + [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=false] + expected: NOTRUN + + [:entry={"sampler":{"type":"comparison"}};awaitLost=true] + expected: NOTRUN + + [:entry={"sampler":{"type":"comparison"}};awaitLost=false] + expected: NOTRUN + + [:entry={"sampler":{"type":"filtering"}};awaitLost=true] + expected: NOTRUN + + [:entry={"sampler":{"type":"filtering"}};awaitLost=false] + expected: NOTRUN + + [:entry={"sampler":{"type":"non-filtering"}};awaitLost=true] + expected: NOTRUN + + [:entry={"sampler":{"type":"non-filtering"}};awaitLost=false] + expected: NOTRUN + + [:entry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"write-only","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"write-only","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-only","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-only","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-write","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-write","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:basic:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:override_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,general:writeTimestamp,device_mismatch:*] + [:] expected: FAIL - [:dimension="2d";format="bc4-r-snorm"] + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:logical_or:*] + [:] expected: FAIL - [:dimension="2d";format="bc5-rg-unorm"] + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupStorageSize:createComputePipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:beginRenderPass:*] + [:] expected: FAIL - [:dimension="2d";format="bc5-rg-snorm"] + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xI8:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_test:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:valid_params:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,writeTimestamp:*] + [:type="occlusion";stage="finish";awaitLost=true] expected: FAIL - [:dimension="2d";format="bc6h-rgb-ufloat"] + [:type="occlusion";stage="finish";awaitLost=false] expected: FAIL - [:dimension="2d";format="bc6h-rgb-float"] + [:type="occlusion";stage="submit";awaitLost=true] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm"] + [:type="occlusion";stage="submit";awaitLost=false] expected: FAIL - [:dimension="2d";format="bc7-rgba-unorm-srgb"] + [:type="timestamp";stage="finish";awaitLost=true] expected: FAIL + [:type="timestamp";stage="finish";awaitLost=false] + expected: FAIL + + [:type="timestamp";stage="submit";awaitLost=true] + expected: FAIL + + [:type="timestamp";stage="submit";awaitLost=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fract:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,comments:line_comment_eof:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:depth_stencil_format,copy_usage_and_aspect:*] + [:format="stencil8"] + expected: FAIL + + [:format="depth16unorm"] + expected: FAIL + + [:format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createBindGroup:*] + expected: TIMEOUT + [:resourceType="uniformBuf";entry={"buffer":{"type":"uniform"}};awaitLost=true] + expected: TIMEOUT + + [:resourceType="uniformBuf";entry={"buffer":{"type":"uniform"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="storageBuf";entry={"buffer":{"type":"storage"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="storageBuf";entry={"buffer":{"type":"storage"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="storageBuf";entry={"buffer":{"type":"read-only-storage"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="storageBuf";entry={"buffer":{"type":"read-only-storage"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="filtSamp";entry={"sampler":{"type":"filtering"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="filtSamp";entry={"sampler":{"type":"filtering"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="nonFiltSamp";entry={"sampler":{"type":"filtering"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="nonFiltSamp";entry={"sampler":{"type":"filtering"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="nonFiltSamp";entry={"sampler":{"type":"non-filtering"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="nonFiltSamp";entry={"sampler":{"type":"non-filtering"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="compareSamp";entry={"sampler":{"type":"comparison"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="compareSamp";entry={"sampler":{"type":"comparison"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="sampledTex";entry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="sampledTex";entry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="sampledTexMS";entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="sampledTexMS";entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="readonlyStorageTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="readonlyStorageTex";entry={"storageTexture":{"access":"read-only","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="writeonlyStorageTex";entry={"storageTexture":{"access":"write-only","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="writeonlyStorageTex";entry={"storageTexture":{"access":"write-only","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + [:resourceType="readwriteStorageTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:resourceType="readwriteStorageTex";entry={"storageTexture":{"access":"read-write","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:storage_texture,formats:*] + [:format="rgba8unorm";access="read-only"] + expected: FAIL + + [:format="rgba8unorm";access="read-write"] + expected: FAIL + + [:format="rgba8snorm";access="read-only"] + expected: FAIL + + [:format="rgba8snorm";access="read-write"] + expected: FAIL + + [:format="rgba8uint";access="read-only"] + expected: FAIL + + [:format="rgba8uint";access="read-write"] + expected: FAIL + + [:format="rgba8sint";access="read-only"] + expected: FAIL + + [:format="rgba8sint";access="read-write"] + expected: FAIL + + [:format="rgba16uint";access="read-only"] + expected: FAIL + + [:format="rgba16uint";access="read-write"] + expected: FAIL + + [:format="rgba16sint";access="read-only"] + expected: FAIL + + [:format="rgba16sint";access="read-write"] + expected: FAIL + + [:format="rgba16float";access="read-only"] + expected: FAIL + + [:format="rgba16float";access="read-write"] + expected: FAIL + + [:format="r32uint";access="read-only"] + expected: FAIL + + [:format="r32uint";access="read-write"] + expected: FAIL + + [:format="r32sint";access="read-only"] + expected: FAIL + + [:format="r32sint";access="read-write"] + expected: FAIL + + [:format="r32float";access="read-only"] + expected: FAIL + + [:format="r32float";access="read-write"] + expected: FAIL + + [:format="rg32uint";access="read-only"] + expected: FAIL + + [:format="rg32uint";access="read-write"] + expected: FAIL + + [:format="rg32sint";access="read-only"] + expected: FAIL + + [:format="rg32sint";access="read-write"] + expected: FAIL + + [:format="rg32float";access="read-only"] + expected: FAIL + + [:format="rg32float";access="read-write"] + expected: FAIL + + [:format="rgba32uint";access="read-only"] + expected: FAIL + + [:format="rgba32uint";access="read-write"] + expected: FAIL + + [:format="rgba32sint";access="read-only"] + expected: FAIL + + [:format="rgba32sint";access="read-write"] + expected: FAIL + + [:format="rgba32float";access="read-only"] + expected: FAIL + + [:format="rgba32float";access="read-write"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:precision:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:depth_stencil_format,copy_buffer_offset:*] + [:format="stencil8";aspect="stencil-only";copyType="CopyB2T"] + expected: FAIL + + [:format="stencil8";aspect="stencil-only";copyType="CopyT2B"] + expected: FAIL + + [:format="stencil8";aspect="stencil-only";copyType="WriteTexture"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only";copyType="CopyB2T"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only";copyType="CopyT2B"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only";copyType="WriteTexture"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="depth-only";copyType="CopyT2B"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyB2T"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyT2B"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only";copyType="WriteTexture"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_twice,basic:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_increment_overflow:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,radians:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acos:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:shader_stages_and_visibility,attachment_write:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,writeTexture:texture_state:*] + expected: TIMEOUT + [:textureState="valid"] + expected: FAIL + + [:textureState="invalid"] + expected: TIMEOUT + + [:textureState="destroyed"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec3_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bgl_visibility_mismatch:*] + [:encoderType="render%20bundle";call="draw";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="draw";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:limits,invocations_per_workgroup:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:offset_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,ldexp:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createSampler:maxAnisotropy:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_decrement_underflow:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_default_case_break:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,must_use:call:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,primitive_state:unclipped_depth:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:subresources_and_binding_types_combination_for_aspect:*] + [:compute=false;binding0InBundle=false;binding1InBundle=false;format="stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth16unorm"] + expected: FAIL + + [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth32float-stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=false;binding1InBundle=true;format="stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth16unorm"] + expected: FAIL + + [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth32float-stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=true;binding1InBundle=false;format="stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth16unorm"] + expected: FAIL + + [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth32float-stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=true;binding1InBundle=true;format="stencil8"] + expected: FAIL + + [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth16unorm"] + expected: FAIL + + [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth32float-stencil8"] + expected: FAIL + + [:compute=true;binding0InBundle=false;binding1InBundle=false;format="stencil8"] + expected: FAIL + + [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth16unorm"] + expected: FAIL + + [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,mappingPending:*] + expected: ERROR + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,copyToTexture,image:copy_subrect_from_2D_Canvas:*] + [:srcDoFlipYDuringCopy=true;dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstPremultiplied=false] + expected: FAIL + + [:srcDoFlipYDuringCopy=false;dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=false;dstPremultiplied=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:destination_offset_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32_vec3:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:not_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,memory_model,weak:load_buffer:*] + expected: TIMEOUT + [:memType="atomic_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_vector_multiplication:matrix_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,literal:bools:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:greater_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cosh:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map:mappedAtCreation,mapState:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,debug:debug_marker:*] + [:encoderType="non-pass"] + expected: FAIL + + [:encoderType="compute%20pass"] + expected: FAIL + + [:encoderType="render%20pass"] + expected: FAIL + + [:encoderType="render%20bundle"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:compound_statement_single:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f32_vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,reflection:buffer_reflection_attributes:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4U8Packed:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMax:max_workgroup:*] + [:workgroupSize=1;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,modf:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_vector_element:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroup:texture,resource_state:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:render_bundle_encoder_descriptor_depth_stencil_format:*] + [:format="depth32float-stencil8";enable_required_feature=true] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_offset_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_shaderLocation_unique:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,size:size_non_struct:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,struct:no_direct_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:two_draws_in_the_same_render_pass:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,worse_than_default:*] + [:limit="maxTextureDimension1D"] + expected: FAIL + + [:limit="maxTextureDimension2D"] + expected: FAIL + + [:limit="maxTextureDimension3D"] + expected: FAIL + + [:limit="maxTextureArrayLayers"] + expected: FAIL + + [:limit="maxBindGroups"] + expected: FAIL + + [:limit="maxBindGroupsPlusVertexBuffers"] + expected: FAIL + + [:limit="maxBindingsPerBindGroup"] + expected: FAIL + + [:limit="maxDynamicUniformBuffersPerPipelineLayout"] + expected: FAIL + + [:limit="maxDynamicStorageBuffersPerPipelineLayout"] + expected: FAIL + + [:limit="maxSampledTexturesPerShaderStage"] + expected: FAIL + + [:limit="maxSamplersPerShaderStage"] + expected: FAIL + + [:limit="maxStorageBuffersPerShaderStage"] + expected: FAIL + + [:limit="maxStorageTexturesPerShaderStage"] + expected: FAIL + + [:limit="maxUniformBuffersPerShaderStage"] + expected: FAIL + + [:limit="maxUniformBufferBindingSize"] + expected: FAIL + + [:limit="maxStorageBufferBindingSize"] + expected: FAIL + + [:limit="minUniformBufferOffsetAlignment"] + expected: FAIL + + [:limit="minStorageBufferOffsetAlignment"] + expected: FAIL + + [:limit="maxVertexBuffers"] + expected: FAIL + + [:limit="maxBufferSize"] + expected: FAIL + + [:limit="maxVertexAttributes"] + expected: FAIL + + [:limit="maxVertexBufferArrayStride"] + expected: FAIL + + [:limit="maxInterStageShaderComponents"] + expected: FAIL + + [:limit="maxInterStageShaderVariables"] + expected: FAIL + + [:limit="maxColorAttachments"] + expected: FAIL + + [:limit="maxColorAttachmentBytesPerSample"] + expected: FAIL + + [:limit="maxComputeWorkgroupStorageSize"] + expected: FAIL + + [:limit="maxComputeInvocationsPerWorkgroup"] + expected: FAIL + + [:limit="maxComputeWorkgroupSizeX"] + expected: FAIL + + [:limit="maxComputeWorkgroupSizeY"] + expected: FAIL + + [:limit="maxComputeWorkgroupSizeZ"] + expected: FAIL + + [:limit="maxComputeWorkgroupsPerDimension"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_write_mask:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:createRenderPipeline,at_over:*] + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:call_arg_types_match_params:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:validate,maxColorAttachmentBytesPerSample:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestampWrites,invalid_query_set:*] + [:querySetState="valid"] + expected: FAIL + + [:querySetState="invalid"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,color_format:*] + [:encoderType="render%20pass"] + expected: FAIL + + [:encoderType="render%20bundle"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,empty:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:features,unknown:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyTextureToTexture:*] + expected: TIMEOUT + [:stage="finish";awaitLost=true] + expected: TIMEOUT + + [:stage="finish";awaitLost=false] + expected: NOTRUN + + [:stage="submit";awaitLost=true] + expected: NOTRUN + + [:stage="submit";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,operation,queue,writeBuffer:multiple_writes_at_different_offsets_and_sizes:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,degrees:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pow:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:or_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:unary_expressions:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:greater_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:location,subset:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,copyExternalImageToTexture,canvas:*] + [:canvasType="onscreen";contextType="2d";awaitLost=true] + expected: FAIL + + [:canvasType="onscreen";contextType="2d";awaitLost=false] + expected: FAIL + + [:canvasType="onscreen";contextType="webgl";awaitLost=true] + expected: FAIL + + [:canvasType="onscreen";contextType="webgl";awaitLost=false] + expected: FAIL + + [:canvasType="onscreen";contextType="webgpu";awaitLost=true] + expected: FAIL + + [:canvasType="onscreen";contextType="webgpu";awaitLost=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:query_set_buffer,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:invalid_severity:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,query_set,destroy:invalid_queryset:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:ww:*] + [:boundary="queue-op";writeOps=["write-buffer","write-buffer"\];contexts=["queue","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","b2b-copy"\];contexts=["queue","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","t2b-copy"\];contexts=["queue","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["compute-pass-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-pass-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-bundle-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="pass";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="dispatch";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:multiple_elements:*] + [:buffer_size=640;type="i32";stride=4] + expected: FAIL + + [:buffer_size=640;type="f32";stride=4] + expected: FAIL + + [:buffer_size=640;type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:buffer_size=640;type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:buffer_size=640;type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=640;type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:buffer_size=640;type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=640;type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:buffer_size=640;type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:buffer_size=640;type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:buffer_size=640;type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=640;type="ElemStruct";stride=4] + expected: FAIL + + [:buffer_size=640;type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:buffer_size=640;type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + [:buffer_size=1004;type="u32";stride=4] + expected: FAIL + + [:buffer_size=1004;type="i32";stride=4] + expected: FAIL + + [:buffer_size=1004;type="f32";stride=4] + expected: FAIL + + [:buffer_size=1004;type="vec2%3Cu32%3E";stride=8] + expected: FAIL + + [:buffer_size=1004;type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:buffer_size=1004;type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:buffer_size=1004;type="vec3%3Cu32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="mat2x3%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=1004;type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=1004;type="mat3x2%3Cf32%3E";stride=24] + expected: FAIL + + [:buffer_size=1004;type="mat3x3%3Cf32%3E";stride=48] + expected: FAIL + + [:buffer_size=1004;type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:buffer_size=1004;type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=1004;type="mat4x3%3Cf32%3E";stride=64] + expected: FAIL + + [:buffer_size=1004;type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:buffer_size=1004;type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:buffer_size=1004;type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:buffer_size=1004;type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=1004;type="ElemStruct";stride=4] + expected: FAIL + + [:buffer_size=1004;type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:buffer_size=1004;type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + [:buffer_size=1048576;type="u32";stride=4] + expected: FAIL + + [:buffer_size=1048576;type="i32";stride=4] + expected: FAIL + + [:buffer_size=1048576;type="f32";stride=4] + expected: FAIL + + [:buffer_size=1048576;type="vec2%3Cu32%3E";stride=8] + expected: FAIL + + [:buffer_size=1048576;type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:buffer_size=1048576;type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:buffer_size=1048576;type="vec3%3Cu32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="mat2x3%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=1048576;type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=1048576;type="mat3x2%3Cf32%3E";stride=24] + expected: FAIL + + [:buffer_size=1048576;type="mat3x3%3Cf32%3E";stride=48] + expected: FAIL + + [:buffer_size=1048576;type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:buffer_size=1048576;type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:buffer_size=1048576;type="mat4x3%3Cf32%3E";stride=64] + expected: FAIL + + [:buffer_size=1048576;type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:buffer_size=1048576;type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:buffer_size=1048576;type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:buffer_size=1048576;type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="ElemStruct";stride=4] + expected: FAIL + + [:buffer_size=1048576;type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:buffer_size=1048576;type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_lhs_const:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:texture_descriptor_view_formats:*] + [:format="depth32float-stencil8";enable_required_feature=true] + expected: FAIL + + [:format="bc1-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc1-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + [:format="bc2-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc2-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + [:format="bc3-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc3-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + [:format="bc4-r-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc4-r-snorm";enable_required_feature=false] + expected: FAIL + + [:format="bc5-rg-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc5-rg-snorm";enable_required_feature=false] + expected: FAIL + + [:format="bc6h-rgb-ufloat";enable_required_feature=false] + expected: FAIL + + [:format="bc6h-rgb-float";enable_required_feature=false] + expected: FAIL + + [:format="bc7-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc7-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_names_must_differ:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:let_ptr_writes:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:less_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,acosh:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,misc:vertex_state_only:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_right_concrete_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,multi_resolve:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeZ:createComputePipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_increment_overflow:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_array_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_twice,render_pass_invalid:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,writeTexture,2d,uncompressed_format:*] + expected: TIMEOUT + [:format="r8unorm";awaitLost=true] + expected: TIMEOUT + + [:format="r8unorm";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";awaitLost=false] + expected: NOTRUN + + [:format="r16float";awaitLost=true] + expected: NOTRUN + + [:format="r16float";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";awaitLost=false] + expected: NOTRUN + + [:format="r32float";awaitLost=true] + expected: NOTRUN + + [:format="r32float";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_complex_condition:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:greater_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:single_frames:*] + [:canvasType="onscreen"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:many,parallel:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:copyTextureToBuffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:sample_count:*] + [:method="WriteTexture"] + expected: FAIL + + [:method="CopyB2T"] + expected: FAIL + + [:method="CopyT2B"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,earlyRejection:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_scope_is_function_body:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeX:createComputePipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,limits,maxColorAttachmentBytesPerSample,aligned:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sinh:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,builtin:parse:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec4_element_decrement:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:numeric_id:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_vector_multiplication:vector_matrix_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_aspects:*] + [:format="stencil8"] + expected: FAIL + + [:format="depth16unorm"] + expected: FAIL + + [:format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:minFilter,nearest:*] + [:format="r8unorm"] + expected: FAIL + + [:format="rg8unorm"] + expected: FAIL + + [:format="rgba8unorm"] + expected: FAIL + + [:format="rgba8unorm-srgb"] + expected: FAIL + + [:format="bgra8unorm"] + expected: FAIL + + [:format="bgra8unorm-srgb"] + expected: FAIL + + [:format="r16float"] + expected: FAIL + + [:format="rg16float"] + expected: FAIL + + [:format="rgba16float"] + expected: FAIL + + [:format="rgb10a2unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createPipelineLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,ceil:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:depth_stencil_attachment,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,all:bool:*] + expected: CRASH + +[cts.https.html?q=webgpu:idl,constructable:gpu_errors:*] + [:errorType="GPUInternalError"] + expected: FAIL + + [:errorType="GPUOutOfMemoryError"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:mip_levels:*] + expected: TIMEOUT + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: FAIL + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: TIMEOUT + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_case:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_test_fail:*] + [:secondDepth=1;lastDepth=2] + expected: FAIL + + [:secondDepth=0;lastDepth=2] + expected: FAIL + + [:secondDepth=2;lastDepth=0.9] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f32_vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,mappedAtCreation:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,general:writeTimestamp,invalid_query_set:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,writeTexture,2d,compressed_format:*] + expected: TIMEOUT + [:format="bc1-rgba-unorm";awaitLost=true] + expected: TIMEOUT + + [:format="bc1-rgba-unorm";awaitLost=false] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="bc1-rgba-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm";awaitLost=false] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="bc2-rgba-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm";awaitLost=false] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="bc3-rgba-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-unorm";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-unorm";awaitLost=false] + expected: NOTRUN + + [:format="bc4-r-snorm";awaitLost=true] + expected: NOTRUN + + [:format="bc4-r-snorm";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-unorm";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-unorm";awaitLost=false] + expected: NOTRUN + + [:format="bc5-rg-snorm";awaitLost=true] + expected: NOTRUN + + [:format="bc5-rg-snorm";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-ufloat";awaitLost=false] + expected: NOTRUN + + [:format="bc6h-rgb-float";awaitLost=true] + expected: NOTRUN + + [:format="bc6h-rgb-float";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm";awaitLost=false] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="bc7-rgba-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgb8a1unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm";awaitLost=false] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="etc2-rgba8unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11unorm";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11unorm";awaitLost=false] + expected: NOTRUN + + [:format="eac-r11snorm";awaitLost=true] + expected: NOTRUN + + [:format="eac-r11snorm";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11unorm";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11unorm";awaitLost=false] + expected: NOTRUN + + [:format="eac-rg11snorm";awaitLost=true] + expected: NOTRUN + + [:format="eac-rg11snorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-4x4-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x4-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-5x5-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x5-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-6x6-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x5-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x6-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-8x8-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x5-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x6-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x8-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-10x10-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x10-unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm";awaitLost=false] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="astc-12x12-unorm-srgb";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:util,texture,texel_data:float_texel_data_in_shader:*] + [:format="r16float"] + expected: FAIL + + [:format="rg16float"] + expected: FAIL + + [:format="rgba16float"] + expected: FAIL + + [:format="r32float"] + expected: FAIL + + [:format="rg32float"] + expected: FAIL + + [:format="rgba32float"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:createRenderPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:rw:*] + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:storage_buffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,default_value_and_smallest_size,uncompressed_format:*] [:dimension="_undef_";format="rgb10a2uint"] expected: FAIL + [:dimension="_undef_";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="_undef_";format="stencil8"] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm"] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + [:dimension="2d";format="rgb10a2uint"] expected: FAIL - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:max_draw_count:*] - [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=0] + [:dimension="2d";format="rg11b10ufloat"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=1] + [:dimension="2d";format="rgb9e5ufloat"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=4] + [:dimension="2d";format="stencil8"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=false;maxDrawCount=16] + [:dimension="2d";format="depth16unorm"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=0] + [:dimension="2d";format="depth32float-stencil8"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=1] + [:dimension="3d";format="rgb10a2uint"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=4] + [:dimension="3d";format="rg11b10ufloat"] expected: FAIL - [:bundleFirstHalf=false;bundleSecondHalf=true;maxDrawCount=16] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=0] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=1] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=4] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=false;maxDrawCount=16] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=0] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=1] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=4] - expected: FAIL - - [:bundleFirstHalf=true;bundleSecondHalf=true;maxDrawCount=16] + [:dimension="3d";format="rgb9e5ufloat"] expected: FAIL -[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:nesting:*] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:fragment:*] + [:isAsync=true;shaderModuleStage="compute"] + expected: FAIL + + [:isAsync=true;shaderModuleStage="vertex"] + expected: FAIL + + [:isAsync=true;shaderModuleStage="fragment"] + expected: FAIL + + [:isAsync=false;shaderModuleStage="compute"] + expected: FAIL + + [:isAsync=false;shaderModuleStage="vertex"] + expected: FAIL + + [:isAsync=false;shaderModuleStage="fragment"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,empty:*] +[cts.https.html?q=webgpu:shader,validation,parse,const:placement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:conflicting_directive:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_R_C_C_C:*] [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,createBindGroup:bind_group_layout,device_mismatch:*] +[cts.https.html?q=webgpu:shader,execution,memory_model,weak:read:*] + expected: TIMEOUT + [:memType="atomic_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,validation_error,fragment:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:visibility:*] + [:visibility=0] + expected: FAIL + + [:visibility=1] + expected: FAIL + + [:visibility=2] + expected: FAIL + + [:visibility=3] + expected: FAIL + + [:visibility=4] + expected: FAIL + + [:visibility=5] + expected: FAIL + + [:visibility=6] + expected: FAIL + + [:visibility=7] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec3_element_increment:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,trunc:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createRenderPipeline:*] + expected: TIMEOUT + [:awaitLost=true] + expected: TIMEOUT + + [:awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:single_entry_point:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_condition:*] + [:preventValueOptimizations=true] expected: FAIL - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] + [:preventValueOptimizations=false] expected: FAIL -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createView,2d,uncompressed_format:*] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,select:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:destination_buffer_usage:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:compute_undefined_entry_point_and_extra_stage:*] + [:isAsync=true;extraShaderModuleStage="compute"] + expected: FAIL + + [:isAsync=true;extraShaderModuleStage="vertex"] + expected: FAIL + + [:isAsync=true;extraShaderModuleStage="fragment"] + expected: FAIL + + [:isAsync=false;extraShaderModuleStage="compute"] + expected: FAIL + + [:isAsync=false;extraShaderModuleStage="vertex"] + expected: FAIL + + [:isAsync=false;extraShaderModuleStage="fragment"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:slot:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:array_stride_zero:*] + [:format="uint8x2"] + expected: FAIL + + [:format="uint8x4"] + expected: FAIL + + [:format="sint8x2"] + expected: FAIL + + [:format="sint8x4"] + expected: FAIL + + [:format="unorm8x2"] + expected: FAIL + + [:format="unorm8x4"] + expected: FAIL + + [:format="snorm8x2"] + expected: FAIL + + [:format="snorm8x4"] + expected: FAIL + + [:format="uint16x2"] + expected: FAIL + + [:format="uint16x4"] + expected: FAIL + + [:format="sint16x2"] + expected: FAIL + + [:format="sint16x4"] + expected: FAIL + + [:format="unorm16x2"] + expected: FAIL + + [:format="unorm16x4"] + expected: FAIL + + [:format="snorm16x2"] + expected: FAIL + + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,locations:duplicates:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:integral_types:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxDynamicStorageBuffersPerPipelineLayout:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:util,texture,texel_data:sint_texel_data_in_shader:*] + [:format="r8sint"] + expected: FAIL + + [:format="rg8sint"] + expected: FAIL + + [:format="rgba8sint"] + expected: FAIL + + [:format="r16sint"] + expected: FAIL + + [:format="rg16sint"] + expected: FAIL + + [:format="rgba16sint"] + expected: FAIL + + [:format="r32sint"] + expected: FAIL + + [:format="rg32sint"] + expected: FAIL + + [:format="rgba32sint"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,locations:validation:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_write_disabled:*] + [:depthWriteEnabled=false;lastDepth=0] + expected: FAIL + + [:depthWriteEnabled=false;lastDepth=1] + expected: FAIL + + [:depthWriteEnabled=true;lastDepth=0] + expected: FAIL + + [:depthWriteEnabled=true;lastDepth=1] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,shader_module:device_mismatch:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicSub:sub_storage:*] + [:workgroupSize=1;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index_via_ptrs:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,break:placement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_for_break:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_write:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,var_and_let:var_access_mode_bad_other_template_contents:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,initial:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_if_else:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mappingPending:*] + expected: ERROR + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:resolveQuerySet:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:idl,constructable:pipeline_errors:*] + [:msg="_undef_";options={"reason":"validation"}] + expected: FAIL + + [:msg="_undef_";options={"reason":"internal"}] + expected: FAIL + + [:msg="some%20msg";options={"reason":"validation"}] + expected: FAIL + + [:msg="some%20msg";options={"reason":"internal"}] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,workgroup_size,limits:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createPipelineLayout:*] + expected: TIMEOUT + [:entry={"buffer":{"type":"uniform"}};awaitLost=true] + expected: TIMEOUT + + [:entry={"buffer":{"type":"uniform"}};awaitLost=false] + expected: NOTRUN + + [:entry={"buffer":{"type":"storage"}};awaitLost=true] + expected: NOTRUN + + [:entry={"buffer":{"type":"storage"}};awaitLost=false] + expected: NOTRUN + + [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=true] + expected: NOTRUN + + [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=false] + expected: NOTRUN + + [:entry={"sampler":{"type":"comparison"}};awaitLost=true] + expected: NOTRUN + + [:entry={"sampler":{"type":"comparison"}};awaitLost=false] + expected: NOTRUN + + [:entry={"sampler":{"type":"filtering"}};awaitLost=true] + expected: NOTRUN + + [:entry={"sampler":{"type":"filtering"}};awaitLost=false] + expected: NOTRUN + + [:entry={"sampler":{"type":"non-filtering"}};awaitLost=true] + expected: NOTRUN + + [:entry={"sampler":{"type":"non-filtering"}};awaitLost=false] + expected: NOTRUN + + [:entry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"write-only","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"write-only","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-only","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-only","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-write","format":"r32float"}};awaitLost=true] + expected: NOTRUN + + [:entry={"storageTexture":{"access":"read-write","format":"r32float"}};awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:greater_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:multisampled_copy_restrictions:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,rendering,basic:large_draw:*] + [:indexed=true;indirect=true] + expected: FAIL + + [:indexed=true;indirect=false] + expected: FAIL + + [:indexed=false;indirect=true] + expected: FAIL + + [:indexed=false;indirect=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:readonly_storage_buffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack2x16unorm:unpack:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec2_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f32_vec3:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cross:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atanh:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:timestampWrite,query_index:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:implicit_access_mode:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,ceil:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_no_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sin:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,override:no_indirect_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,value,type_error:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,debug:debug_group_balanced:*] + [:encoderType="non-pass"] + expected: FAIL + + [:encoderType="compute%20pass"] + expected: FAIL + + [:encoderType="render%20pass"] + expected: FAIL + + [:encoderType="render%20bundle"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sqrt:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_nested_must_use:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_rhs_const:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:rowsPerImage_and_bytesPerRow_depth_stencil:*] + [:format="stencil8";copyMethod="WriteTexture";aspect="stencil-only"] + expected: FAIL + + [:format="stencil8";copyMethod="CopyB2T";aspect="stencil-only"] + expected: FAIL + + [:format="stencil8";copyMethod="CopyT2B";aspect="stencil-only"] + expected: FAIL + + [:format="depth16unorm";copyMethod="CopyT2B";aspect="depth-only"] + expected: FAIL + + [:format="depth32float";copyMethod="CopyT2B";aspect="depth-only"] + expected: FAIL + + [:format="depth24plus-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] + expected: FAIL + + [:format="depth24plus-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] + expected: FAIL + + [:format="depth24plus-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="depth-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec4_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBufferSize:createBuffer,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:default:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:depth_stencil_formats_mismatch:*] + [:bundleFormat="depth24plus";passFormat="depth16unorm"] + expected: FAIL + + [:bundleFormat="stencil8";passFormat="depth24plus-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeY:createComputePipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_atomic:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_matrix_subtraction:matrix:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:two_dispatches_in_the_same_compute_pass:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,compute:*] + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";dstColorSpace="display-p3"] + expected: FAIL + + [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";dstColorSpace="srgb"] + expected: FAIL + + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";dstColorSpace="display-p3"] + expected: FAIL + + [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";dstColorSpace="srgb"] + expected: FAIL + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";dstColorSpace="display-p3"] + expected: FAIL + + [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";dstColorSpace="srgb"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,attribute:expressions:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,floor:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pass,resolve:render_pass_resolve:*] + [:storeOperation="discard"] + expected: FAIL + + [:storeOperation="store"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:buffer,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,texture_usages_in_copy_and_render_pass:*] + [:usage0="copy-src";usage1="readonly-storage-texture"] + expected: FAIL + + [:usage0="copy-src";usage1="readwrite-storage-texture"] + expected: FAIL + + [:usage0="copy-dst";usage1="readonly-storage-texture"] + expected: FAIL + + [:usage0="copy-dst";usage1="readwrite-storage-texture"] + expected: FAIL + + [:usage0="readonly-storage-texture";usage1="copy-src"] + expected: FAIL + + [:usage0="readonly-storage-texture";usage1="copy-dst"] + expected: FAIL + + [:usage0="readwrite-storage-texture";usage1="copy-src"] + expected: FAIL + + [:usage0="readwrite-storage-texture";usage1="copy-dst"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_case_break:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,shader_io,compute_builtins:inputs:*] + [:method="param";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] + expected: FAIL + + [:method="param";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="param";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] + expected: FAIL + + [:method="param";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="param";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] + expected: FAIL + + [:method="param";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="param";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] + expected: FAIL + + [:method="struct";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="struct";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] + expected: FAIL + + [:method="struct";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="struct";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] + expected: FAIL + + [:method="struct";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="struct";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] + expected: FAIL + + [:method="struct";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="struct";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] + expected: FAIL + + [:method="mixed";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="mixed";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] + expected: FAIL + + [:method="mixed";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="mixed";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] + expected: FAIL + + [:method="mixed";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="mixed";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] + expected: FAIL + + [:method="mixed";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] + expected: FAIL + + [:method="mixed";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_array_element:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atanh:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,depth_format:*] + [:passFeature="_undef_";bundleFeature="_undef_"] + expected: FAIL + + [:passFeature="_undef_";bundleFeature="depth32float-stencil8"] + expected: FAIL + + [:passFeature="depth32float-stencil8";bundleFeature="_undef_"] + expected: FAIL + + [:passFeature="depth32float-stencil8";bundleFeature="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:multiple_pairs_of_draws_in_one_render_bundle:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:writeBuffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blend_constant,initial:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_right_concrete:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:basic:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_matrix_multiplication:matrix_matrix_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,canvas,configure:viewFormats:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_nonmatching_vec4:*] + expected: [TIMEOUT, CRASH] + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:canvas_configuration_view_formats:*] + [:viewFormats=["depth32float-stencil8"\];canvasType="onscreen";enable_required_feature=true] + expected: FAIL + + [:viewFormats=["bc1-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc1-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc2-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc2-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc3-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc3-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc4-r-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc4-r-snorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc5-rg-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc5-rg-snorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc6h-rgb-ufloat"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc6h-rgb-float"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc7-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc7-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bgra8unorm","bc1-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + [:viewFormats=["bc1-rgba-unorm","bgra8unorm"\];canvasType="onscreen";enable_required_feature=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:struct_constructor:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:unused_bindings_in_pipeline:*] + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=false;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] + expected: FAIL + + [:compute=true;readOnlyUsage="readonly-storage-texture";writableUsage="writeonly-storage-texture";useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_complex_initalizer:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxInterStageShaderVariables:createRenderPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_compare_func:*] + [:format="stencil8";stencilCompare="always";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="always";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="always";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="equal";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="equal";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="equal";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="greater";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="greater";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="greater";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="greater-equal";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="greater-equal";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="greater-equal";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="less";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="less";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="less";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="less-equal";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="less-equal";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="less-equal";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="never";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="never";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="never";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";stencilCompare="not-equal";stencilRefValue=0] + expected: FAIL + + [:format="stencil8";stencilCompare="not-equal";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";stencilCompare="not-equal";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="always";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="always";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="always";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="equal";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="equal";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="equal";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="greater";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="greater";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="greater";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="greater-equal";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="greater-equal";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="greater-equal";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="less";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="less";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="less";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="less-equal";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="less-equal";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="less-equal";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="never";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="never";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="never";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="not-equal";stencilRefValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="not-equal";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";stencilCompare="not-equal";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="always";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="always";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="always";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="equal";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="equal";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="equal";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="greater";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="greater";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="greater";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="greater-equal";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="greater-equal";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="greater-equal";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="less";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="less";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="less";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="less-equal";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="less-equal";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="less-equal";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="never";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="never";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="never";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="not-equal";stencilRefValue=0] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="not-equal";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";stencilCompare="not-equal";stencilRefValue=2] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,degrees:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:many,serial:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,canvas,configure:size_zero_before_configure:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:buffer_state:*] + [:method="CopyB2T";state="invalid"] + expected: FAIL + + [:method="CopyT2B";state="invalid"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:texture_format_compatibility:*] + [:srcFormatFeature="_undef_";dstFormatFeature="_undef_"] + expected: FAIL + + [:srcFormatFeature="_undef_";dstFormatFeature="depth32float-stencil8"] + expected: FAIL + + [:srcFormatFeature="_undef_";dstFormatFeature="texture-compression-bc"] + expected: FAIL + + [:srcFormatFeature="depth32float-stencil8";dstFormatFeature="_undef_"] + expected: FAIL + + [:srcFormatFeature="depth32float-stencil8";dstFormatFeature="depth32float-stencil8"] + expected: FAIL + + [:srcFormatFeature="depth32float-stencil8";dstFormatFeature="texture-compression-bc"] + expected: FAIL + + [:srcFormatFeature="texture-compression-bc";dstFormatFeature="_undef_"] + expected: FAIL + + [:srcFormatFeature="texture-compression-bc";dstFormatFeature="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:duplicate_vertex_on_function:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,reflection:query_set_creation_from_reflection:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:corw2:*] + expected: TIMEOUT + [:memType="atomic_storage";testType="inter_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_decrement:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:uninitialized,fragment:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,inverseSqrt:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,extractBits:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,memory_model,barrier:workgroup_barrier_store_store:*] + [:accessValueType="u32";memType="non_atomic_storage";accessPair="ww"] + expected: FAIL + + [:accessValueType="u32";memType="non_atomic_workgroup";accessPair="ww"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,color_attachment_and_bind_group:*] + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=0;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:colorAttachmentLevel=1;colorAttachmentLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2;bgUsage="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_compare_func:*] + [:format="depth16unorm";depthCompare="never";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="never";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="never";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="less";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="less";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="less";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="less-equal";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="less-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="less-equal";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="equal";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="equal";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="not-equal";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="not-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="not-equal";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="greater-equal";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="greater-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="greater-equal";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="greater";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="greater";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="greater";depthClearValue=0] + expected: FAIL + + [:format="depth16unorm";depthCompare="always";depthClearValue=1] + expected: FAIL + + [:format="depth16unorm";depthCompare="always";depthClearValue=0.5001] + expected: FAIL + + [:format="depth16unorm";depthCompare="always";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="never";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="never";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="never";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="less";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="less";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="less";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="less-equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="less-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="less-equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="not-equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="not-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="not-equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="greater-equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="greater-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="greater-equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="greater";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="greater";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="greater";depthClearValue=0] + expected: FAIL + + [:format="depth32float";depthCompare="always";depthClearValue=1] + expected: FAIL + + [:format="depth32float";depthCompare="always";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float";depthCompare="always";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="never";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="never";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="never";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="less";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="less";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="less";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="less-equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="less-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="less-equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="not-equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="not-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="not-equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="greater-equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="greater-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="greater-equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="greater";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="greater";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="greater";depthClearValue=0] + expected: FAIL + + [:format="depth24plus";depthCompare="always";depthClearValue=1] + expected: FAIL + + [:format="depth24plus";depthCompare="always";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus";depthCompare="always";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="never";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="never";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="never";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="less";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="less";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="less";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="less-equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="less-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="less-equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="not-equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="not-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="not-equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="greater-equal";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="greater-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="greater-equal";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="greater";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="greater";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="greater";depthClearValue=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="always";depthClearValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="always";depthClearValue=0.5001] + expected: FAIL + + [:format="depth24plus-stencil8";depthCompare="always";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="never";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="never";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="never";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="less";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="less";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="less";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="less-equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="less-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="less-equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="not-equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="not-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="not-equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="greater-equal";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="greater-equal";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="greater-equal";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="greater";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="greater";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="greater";depthClearValue=0] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="always";depthClearValue=1] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="always";depthClearValue=0.5001] + expected: FAIL + + [:format="depth32float-stencil8";depthCompare="always";depthClearValue=0] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,shader_module,compilation_info:getCompilationInfo_returns:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMin:min_workgroup:*] + [:workgroupSize=1;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:corr:*] + expected: TIMEOUT + [:memType="atomic_storage";testType="inter_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,error_scope:simple:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_vertex_shader:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:occlusion_query,disjoint_queries_with_same_query_index:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_ptr_store_type:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_nested:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:createPipelineLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createTexture:sampleCount,valid_sampleCount_with_other_parameter_varies:*] + [:dimension="_undef_";format="rgb10a2uint"] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="_undef_";format="stencil8"] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm"] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="stencil8"] + expected: FAIL + + [:dimension="2d";format="depth16unorm"] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="3d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="3d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="3d";format="rgb9e5ufloat"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createCommandEncoder:*] + expected: TIMEOUT + [:awaitLost=true] + expected: TIMEOUT + + [:awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,mapped:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:greater_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:origin_alignment:*] + [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-snorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-snorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-snorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-snorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-float";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-float";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-snorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-snorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-snorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-snorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-float";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-float";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";depthOrArrayLayers=3;dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-snorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-snorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-snorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-snorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-ufloat";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-ufloat";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-float";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-float";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=1;dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm-srgb";depthOrArrayLayers=3;dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,tanh:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,insertBits:integer:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:private_module_scope:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:duplicate_fragment_on_function:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:multisampled_validation:*] + [:viewDimension="1d"] + expected: FAIL + + [:viewDimension="2d-array"] + expected: FAIL + + [:viewDimension="cube"] + expected: FAIL + + [:viewDimension="cube-array"] + expected: FAIL + + [:viewDimension="3d"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_addition:matrix:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:vertex_undefined_entry_point_and_extra_stage:*] + [:isAsync=true;extraShaderModuleStage="compute"] + expected: FAIL + + [:isAsync=true;extraShaderModuleStage="vertex"] + expected: FAIL + + [:isAsync=true;extraShaderModuleStage="fragment"] + expected: FAIL + + [:isAsync=false;extraShaderModuleStage="compute"] + expected: FAIL + + [:isAsync=false;extraShaderModuleStage="vertex"] + expected: FAIL + + [:isAsync=false;extraShaderModuleStage="fragment"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pipeline,primitive_topology:unaligned_vertex_count:*] + [:topology="line-list";indirect=false;drawCount=5] + expected: FAIL + + [:topology="line-list";indirect=true;drawCount=5] + expected: FAIL + + [:topology="triangle-list";indirect=false;drawCount=5] + expected: FAIL + + [:topology="triangle-list";indirect=false;drawCount=4] + expected: FAIL + + [:topology="triangle-list";indirect=true;drawCount=5] + expected: FAIL + + [:topology="triangle-list";indirect=true;drawCount=4] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atanh:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sinh:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:stale:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:frexp_exp_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:function_scope:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,subrange,mapped:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,scissor:*] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,buffer_mapped:writeBuffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_var:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,pass_boundary,render:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,writeBuffer:*] + expected: TIMEOUT + [:numElements=4;awaitLost=true] + expected: TIMEOUT + + [:numElements=4;awaitLost=false] + expected: NOTRUN + + [:numElements=8;awaitLost=true] + expected: NOTRUN + + [:numElements=8;awaitLost=false] + expected: NOTRUN + + [:numElements=16;awaitLost=true] + expected: NOTRUN + + [:numElements=16;awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_type_alias_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:copy_subrect_from_2D_Canvas:*] + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,reflection:buffer_creation_from_reflection:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,padding:struct_explicit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:less_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:indirect_buffer_for_dispatch_indirect:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:replaced_binding:*] + [:compute=false;callDrawOrDispatch=false;entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:compute=false;callDrawOrDispatch=false;entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:compute=false;callDrawOrDispatch=true;entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:compute=false;callDrawOrDispatch=true;entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:compute=true;callDrawOrDispatch=false;entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:compute=true;callDrawOrDispatch=false;entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + [:compute=true;callDrawOrDispatch=true;entry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:compute=true;callDrawOrDispatch=true;entry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,literal:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_address_space_never_uses_access_mode:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_exp:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_storage_advanced:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_or_no_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,offsetAndSizeAlignment,mapped:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pipeline,pipeline_output_targets:color,component_count:*] + [:format="rgb10a2uint"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:depth_stencil_copy_restrictions:*] + [:format="stencil8"] + expected: FAIL + + [:format="depth16unorm"] + expected: FAIL + + [:format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:device_mismatch:*] + [:copyType="CopyB2T"] + expected: FAIL + + [:copyType="CopyT2B"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicXor:xor_storage:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:limits,invocations_per_workgroup,each_component:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:copy_texture_to_partial_buffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack2x16float:pack:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:configure,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:duplicate:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,if:nested_if_else:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:depth_stencil_readonly_mismatch:*] + [:depthStencilFormat="stencil8"] + expected: FAIL + + [:depthStencilFormat="depth16unorm"] + expected: FAIL + + [:depthStencilFormat="depth32float"] + expected: FAIL + + [:depthStencilFormat="depth24plus"] + expected: FAIL + + [:depthStencilFormat="depth24plus-stencil8"] + expected: FAIL + + [:depthStencilFormat="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,group:group_without_binding:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_return_type:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:depth_stencil_readonly:*] + [:depthStencilFormat="stencil8"] + expected: FAIL + + [:depthStencilFormat="depth16unorm"] + expected: FAIL + + [:depthStencilFormat="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyBufferToBuffer:*] + expected: TIMEOUT + [:stage="finish";awaitLost=true] + expected: TIMEOUT + + [:stage="finish";awaitLost=false] + expected: NOTRUN + + [:stage="submit";awaitLost=true] + expected: NOTRUN + + [:stage="submit";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_and_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_depthFailOp_operation:*] + [:format="depth24plus-stencil8";depthFailOp="keep";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="zero";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="replace";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="invert";initialStencil=240] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="decrement-wrap";initialStencil=2] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="depth24plus-stencil8";depthFailOp="decrement-wrap";initialStencil=0] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="keep";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="zero";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="replace";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="invert";initialStencil=240] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="increment-clamp";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="increment-clamp";initialStencil=255] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="increment-wrap";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="increment-wrap";initialStencil=255] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="decrement-clamp";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="decrement-clamp";initialStencil=0] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="decrement-wrap";initialStencil=2] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="decrement-wrap";initialStencil=1] + expected: FAIL + + [:format="depth32float-stencil8";depthFailOp="decrement-wrap";initialStencil=0] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:coww:*] + expected: TIMEOUT + [:memType="atomic_storage";testType="inter_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:bool:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:non_pass_commands:*] + [:command="beginComputePass"] + expected: FAIL + + [:command="beginRenderPass"] + expected: FAIL + + [:command="clearBuffer"] + expected: FAIL + + [:command="copyBufferToBuffer"] + expected: FAIL + + [:command="copyBufferToTexture"] + expected: FAIL + + [:command="copyTextureToBuffer"] + expected: FAIL + + [:command="copyTextureToTexture"] + expected: FAIL + + [:command="insertDebugMarker"] + expected: FAIL + + [:command="popDebugGroup"] + expected: FAIL + + [:command="pushDebugGroup"] + expected: FAIL + + [:command="writeTimestamp"] + expected: FAIL + + [:command="resolveQuerySet"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bind_groups_and_pipeline_layout_mismatch:*] + [:encoderType="render%20bundle";call="draw";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="draw";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:short_circuit_expressions:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:copyBufferToTexture:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_and_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,transpose:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:setBindGroup:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,blankspace:bom:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bgl_binding_mismatch:*] + [:encoderType="render%20bundle";call="draw";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="draw";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] + expected: FAIL + + [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reverseBits:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,radians:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_C_R_C_C:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_within_same_texture:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createQuerySet:*] + [:type="occlusion";awaitLost=true] + expected: FAIL + + [:type="occlusion";awaitLost=false] + expected: FAIL + + [:type="timestamp";awaitLost=true] + expected: FAIL + + [:type="timestamp";awaitLost=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,sizeUnspecifiedOOB:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,multiple_bind_groups:*] + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="writeonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="writeonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readonly-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="readwrite-storage-texture";bgUsage1="sampled-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readonly-storage-texture";inSamePass=false] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=true] + expected: FAIL + + [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="sampled-texture";bgUsage1="readwrite-storage-texture";inSamePass=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:copyBufferToBuffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:bitwise_and:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,error_scope:current_scope:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,resolveQuerySet:*] + [:stage="finish";awaitLost=true] + expected: FAIL + + [:stage="finish";awaitLost=false] + expected: FAIL + + [:stage="submit";awaitLost=true] + expected: FAIL + + [:stage="submit";awaitLost=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipelineLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,limits,maxColorAttachmentBytesPerSample,aligned:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:compound_statement_multiple:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8Clamp:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestampWrites,query_index:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,worker,worker:worker:*] + expected: ERROR + [:] + expected: TIMEOUT + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_fn_var_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_assignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,sizeAndOffsetOOB,mapped:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_module_const_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_var_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,padding:array_of_vec3:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,if:else_if:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:undefined_params:*] + expected: TIMEOUT + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";dimension="1d"] + expected: FAIL + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";dimension="2d"] + expected: TIMEOUT + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";dimension="3d"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:precision:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_nonmatching_vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:offset_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_left_concrete:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_storage_basic:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:duplicates:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeInvocationsPerWorkgroup:createComputePipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:buffer,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,query_set:timestamps:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,workgroup_size,limits,workgroup_storage_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:copy_rectangle:*] + [:method="WriteTexture";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";dimension="3d"] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,canvas,configure:size_zero_after_configure:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:wr:*] + [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"t2t-copy","in":"command-encoder"}] + expected: FAIL + + [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"sample","in":"compute-pass-encoder"}] + expected: FAIL + + [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] + expected: FAIL + + [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] + expected: FAIL + + [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] + expected: FAIL + + [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,call:call_basic:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:module_scope_multiple:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,compute,basic:large_dispatch:*] + [:dispatchSize=256] + expected: FAIL + + [:dispatchSize=2048] + expected: FAIL + + [:dispatchSize=315] + expected: FAIL + + [:dispatchSize=628] + expected: FAIL + + [:dispatchSize=2179] + expected: FAIL + + [:dispatchSize="maximum"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec2_element_decrement:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_complement:i32_complement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:wr:*] + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_break:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_buffer_array_stride_limit_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_multiple_case_default:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:not_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:less_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,type_error,vertex:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,loop:nested_loops:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:vertex_format_to_shader_format_conversion:*] + expected: TIMEOUT + [:format="uint8x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint8x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint8x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm8x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm8x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint16x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint16x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm16x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="snorm16x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float16x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x3";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x3";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x3";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x3";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="float32x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x3";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x3";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x3";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x3";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x3";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x3";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x3";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x3";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x4";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x4";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x4";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="sint32x4";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm10-10-10-2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm10-10-10-2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm10-10-10-2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="unorm10-10-10-2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x2";shaderComponentCount=1] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x2";shaderComponentCount=2] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x2";shaderComponentCount=3] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:format="uint32x2";shaderComponentCount=4] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachments:*] + [:isAsync=false;targetsLengthVariant={"mult":1,"add":0}] + expected: FAIL + + [:isAsync=false;targetsLengthVariant={"mult":1,"add":1}] + expected: FAIL + + [:isAsync=true;targetsLengthVariant={"mult":1,"add":0}] + expected: FAIL + + [:isAsync=true;targetsLengthVariant={"mult":1,"add":1}] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,id:id_in_function:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:less_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:visibility,VERTEX_shader_stage_storage_texture_access:*] + [:shaderStage=0] + expected: FAIL + + [:shaderStage=1] + expected: FAIL + + [:shaderStage=2] + expected: FAIL + + [:shaderStage=3] + expected: FAIL + + [:shaderStage=4] + expected: FAIL + + [:shaderStage=5] + expected: FAIL + + [:shaderStage=6] + expected: FAIL + + [:shaderStage=7] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexAttributes:createRenderPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,comments:comments:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,out_of_range:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createView:aspect:*] + [:format="rgb10a2uint";aspect="all"] + expected: FAIL + + [:format="rgb10a2uint";aspect="depth-only"] + expected: FAIL + + [:format="rgb10a2uint";aspect="stencil-only"] + expected: FAIL + + [:format="rg11b10ufloat";aspect="all"] + expected: FAIL + + [:format="rg11b10ufloat";aspect="depth-only"] + expected: FAIL + + [:format="rg11b10ufloat";aspect="stencil-only"] + expected: FAIL + + [:format="rgb9e5ufloat";aspect="all"] + expected: FAIL + + [:format="rgb9e5ufloat";aspect="depth-only"] + expected: FAIL + + [:format="rgb9e5ufloat";aspect="stencil-only"] + expected: FAIL + + [:format="stencil8";aspect="all"] + expected: FAIL + + [:format="stencil8";aspect="depth-only"] + expected: FAIL + + [:format="stencil8";aspect="stencil-only"] + expected: FAIL + + [:format="depth16unorm";aspect="all"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only"] + expected: FAIL + + [:format="depth16unorm";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="all"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="depth-only"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_exp:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_basic:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:warning_unknown_rule:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acos:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_param_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,if:if_false:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:member_accessors:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_compound_assignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:require_location:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_continuing:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_or:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:setBindGroup,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan2:integer_argument_x:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:offset_and_size_oob:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:nesting:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:location,mismatch:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:depth_stencil_attachment,loadOp_storeOp_match_depthReadOnly_stencilReadOnly:*] + [:format="stencil8"] + expected: FAIL + + [:format="depth16unorm"] + expected: FAIL + + [:format="depth32float"] + expected: FAIL + + [:format="depth24plus"] + expected: FAIL + + [:format="depth24plus-stencil8"] + expected: FAIL + + [:format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:compute_parsing:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,var_and_let:initializer_type:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,destroyed:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map_detach:while_mapped:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,select:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,read,typedArrayAccess:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_struct_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:color_target_exists:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:max_buffers_and_attribs:*] + [:format="uint8x4"] + expected: FAIL + + [:format="sint8x2"] + expected: FAIL + + [:format="sint8x4"] + expected: FAIL + + [:format="unorm8x2"] + expected: FAIL + + [:format="unorm8x4"] + expected: FAIL + + [:format="snorm8x2"] + expected: FAIL + + [:format="snorm8x4"] + expected: FAIL + + [:format="uint16x2"] + expected: FAIL + + [:format="uint16x4"] + expected: FAIL + + [:format="sint16x2"] + expected: FAIL + + [:format="sint16x4"] + expected: FAIL + + [:format="unorm16x2"] + expected: FAIL + + [:format="unorm16x4"] + expected: FAIL + + [:format="snorm16x2"] + expected: FAIL + + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeOOB:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:two_pointers:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,decl,override:no_direct_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:shader_module,compute:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:less_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_format_filterable:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,indirect_draw:basics:*] + [:isIndexed=true] + expected: FAIL + + [:isIndexed=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:or_short_circuit:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_contained_in_stride:*] + expected: [TIMEOUT, OK] + [:format="uint8x2"] + expected: FAIL + + [:format="uint8x4"] + expected: FAIL + + [:format="sint8x2"] + expected: FAIL + + [:format="sint8x4"] + expected: FAIL + + [:format="unorm8x2"] + expected: FAIL + + [:format="unorm8x4"] + expected: FAIL + + [:format="snorm8x2"] + expected: FAIL + + [:format="snorm8x4"] + expected: FAIL + + [:format="uint16x2"] + expected: FAIL + + [:format="uint16x4"] + expected: FAIL + + [:format="sint16x2"] + expected: FAIL + + [:format="sint16x4"] + expected: FAIL + + [:format="unorm16x2"] + expected: FAIL + + [:format="unorm16x4"] + expected: FAIL + + [:format="snorm16x2"] + expected: FAIL + + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,align:multi_align:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_matrix_element:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,color_count:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,shader_module,compilation_info:line_number_and_position:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,shadow:while:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,decl,const:no_indirect_recursion_via_struct_attribute:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:createBindGroup,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mapped:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,asin:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,workgroup_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension3D:createTexture,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:origins_and_extents:*] + expected: TIMEOUT + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:matrix_index_via_ptr:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:vertex_buffer_OOB:*] + [:type="draw";VBSize="exact";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="zero";AStride="zero"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="zero";AStride="exact"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="zero";AStride="oversize"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="oneTooSmall";AStride="zero"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="oneTooSmall";AStride="exact"] + expected: FAIL + + [:type="draw";VBSize="exact";IBSize="oneTooSmall";AStride="oversize"] + expected: FAIL + + [:type="draw";VBSize="zero";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="draw";VBSize="zero";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="draw";VBSize="zero";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="draw";VBSize="oneTooSmall";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="draw";VBSize="oneTooSmall";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="draw";VBSize="oneTooSmall";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="zero";AStride="zero"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="zero";AStride="exact"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="zero";AStride="oversize"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="oneTooSmall";AStride="zero"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="oneTooSmall";AStride="exact"] + expected: FAIL + + [:type="drawIndexed";VBSize="exact";IBSize="oneTooSmall";AStride="oversize"] + expected: FAIL + + [:type="drawIndexed";VBSize="zero";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndexed";VBSize="zero";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndexed";VBSize="zero";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndexed";VBSize="oneTooSmall";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndexed";VBSize="oneTooSmall";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndexed";VBSize="oneTooSmall";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="zero";AStride="zero"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="zero";AStride="exact"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="zero";AStride="oversize"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="oneTooSmall";AStride="zero"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="oneTooSmall";AStride="exact"] + expected: FAIL + + [:type="drawIndirect";VBSize="exact";IBSize="oneTooSmall";AStride="oversize"] + expected: FAIL + + [:type="drawIndirect";VBSize="zero";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndirect";VBSize="zero";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndirect";VBSize="zero";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndirect";VBSize="oneTooSmall";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndirect";VBSize="oneTooSmall";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndirect";VBSize="oneTooSmall";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="zero";AStride="zero"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="zero";AStride="exact"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="zero";AStride="oversize"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="oneTooSmall";AStride="zero"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="oneTooSmall";AStride="exact"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="exact";IBSize="oneTooSmall";AStride="oversize"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="zero";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="zero";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="zero";IBSize="exact";AStride="oversize"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="oneTooSmall";IBSize="exact";AStride="zero"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="oneTooSmall";IBSize="exact";AStride="exact"] + expected: FAIL + + [:type="drawIndexedIndirect";VBSize="oneTooSmall";IBSize="exact";AStride="oversize"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,depth_stencil_attachment_and_bind_group:*] + [:dsLevel=0;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1] + expected: FAIL + + [:dsLevel=0;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1] + expected: FAIL + + [:dsLevel=0;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2] + expected: FAIL + + [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1] + expected: FAIL + + [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1] + expected: FAIL + + [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1] + expected: FAIL + + [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2] + expected: FAIL + + [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1] + expected: FAIL + + [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:util,texture,texel_data:unorm_texel_data_in_shader:*] + [:format="r8unorm"] + expected: FAIL + + [:format="rg8unorm"] + expected: FAIL + + [:format="rgba8unorm"] + expected: FAIL + + [:format="rgba8unorm-srgb"] + expected: FAIL + + [:format="bgra8unorm"] + expected: FAIL + + [:format="bgra8unorm-srgb"] + expected: FAIL + + [:format="rgb10a2unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:pointers:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:greater_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,literal:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_division:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_while:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_fn_args:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:texture,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,blankspace:null_characters:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countLeadingZeros:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createPipelineLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:setBindGroup:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:fragment_parsing:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachmentBytesPerSample,aligned:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,if:if_true:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,memory_model,barrier:workgroup_barrier_store_load:*] + [:accessValueType="u32";memType="non_atomic_storage";accessPair="wr"] + expected: FAIL + + [:accessValueType="u32";memType="non_atomic_workgroup";accessPair="wr"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,clearBuffer:clear:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,decl,const:no_indirect_recursion_via_array_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_switch:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_left_vec_size_mismatch:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,sample_mask:*] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,depth:*] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,general:occlusion_query,query_index:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,device,lost:same_object:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,smoothstep:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec2_element_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:max_components_count,input:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,general:occlusion_query,query_type:*] + [:type="_undef_"] + expected: FAIL + + [:type="occlusion"] + expected: FAIL + + [:type="timestamp"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countOneBits:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_offset_alignment:*] + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":6}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":12}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-14}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":6}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":12}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-14}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":16}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-24}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-20}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":16}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-24}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-20}] + expected: FAIL + + [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":6}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":12}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-14}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":6}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":12}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-14}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":16}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-24}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-20}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":16}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-24}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-20}] + expected: FAIL + + [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":6}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":12}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-14}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":6}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":12}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-14}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":16}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-24}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-20}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":16}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-24}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-20}] + expected: FAIL + + [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] + expected: FAIL + + [:format="unorm10-10-10-2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:offset_alignment:*] + [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="depth16unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="depth16unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="depth16unorm";dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f32_vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:buffers_with_varying_step_mode:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sign:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:size_alignment:*] + [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limits,unknown:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:writeTexture:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,shader_module,overrides:id_conflict:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,uninitialized:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:many,parallel_order:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachmentBytesPerSample,unaligned:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,ceil:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,must_use:declaration:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,writeBuffer:ranges:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_complex_continuing:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,discard:placement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_number_matches_call:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,identifier:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,source:empty:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_parenthesized_expr:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,depth_stencil_attachment_only:*] + [:depthStencilFormat="stencil8";storeOperation="discard"] + expected: FAIL + + [:depthStencilFormat="stencil8";storeOperation="store"] + expected: FAIL + + [:depthStencilFormat="depth16unorm";storeOperation="discard"] + expected: FAIL + + [:depthStencilFormat="depth16unorm";storeOperation="store"] + expected: FAIL + + [:depthStencilFormat="depth32float";storeOperation="discard"] + expected: FAIL + + [:depthStencilFormat="depth32float";storeOperation="store"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,computePass,dispatch:*] + expected: TIMEOUT + [:stage="finish";awaitLost=true] + expected: TIMEOUT + + [:stage="finish";awaitLost=false] + expected: NOTRUN + + [:stage="submit";awaitLost=true] + expected: NOTRUN + + [:stage="submit";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,flow_control,return:return_conditional_true:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,better_than_supported:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,locations:type:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,step:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,abs:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,call:call_nested:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,shadow:loop:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_scalar_multiplication:matrix_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:setIndexBuffer:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reverseBits:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_shader_input_location_limit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,copyBufferToBuffer:single:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack4x8snorm:unpack:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map_oom:mappedAtCreation:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:struct_member:*] + [:member_offset=0;type="i32";stride=4] + expected: FAIL + + [:member_offset=0;type="f32";stride=4] + expected: FAIL + + [:member_offset=0;type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:member_offset=0;type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:member_offset=0;type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=0;type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:member_offset=0;type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=0;type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:member_offset=0;type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:member_offset=0;type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:member_offset=0;type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:member_offset=0;type="ElemStruct";stride=4] + expected: FAIL + + [:member_offset=0;type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:member_offset=0;type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + [:member_offset=4;type="u32";stride=4] + expected: FAIL + + [:member_offset=4;type="i32";stride=4] + expected: FAIL + + [:member_offset=4;type="f32";stride=4] + expected: FAIL + + [:member_offset=4;type="vec2%3Cu32%3E";stride=8] + expected: FAIL + + [:member_offset=4;type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:member_offset=4;type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:member_offset=4;type="vec3%3Cu32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="mat2x3%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=4;type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=4;type="mat3x2%3Cf32%3E";stride=24] + expected: FAIL + + [:member_offset=4;type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:member_offset=4;type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=4;type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:member_offset=4;type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:member_offset=4;type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:member_offset=4;type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:member_offset=4;type="ElemStruct";stride=4] + expected: FAIL + + [:member_offset=4;type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:member_offset=4;type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + [:member_offset=20;type="u32";stride=4] + expected: FAIL + + [:member_offset=20;type="i32";stride=4] + expected: FAIL + + [:member_offset=20;type="f32";stride=4] + expected: FAIL + + [:member_offset=20;type="vec2%3Cu32%3E";stride=8] + expected: FAIL + + [:member_offset=20;type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:member_offset=20;type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:member_offset=20;type="vec3%3Cu32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="mat2x3%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=20;type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=20;type="mat3x2%3Cf32%3E";stride=24] + expected: FAIL + + [:member_offset=20;type="mat3x3%3Cf32%3E";stride=48] + expected: FAIL + + [:member_offset=20;type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:member_offset=20;type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:member_offset=20;type="mat4x3%3Cf32%3E";stride=64] + expected: FAIL + + [:member_offset=20;type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:member_offset=20;type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:member_offset=20;type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:member_offset=20;type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:member_offset=20;type="ElemStruct";stride=4] + expected: FAIL + + [:member_offset=20;type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:member_offset=20;type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_multiple_case:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyBufferToTexture:*] + expected: TIMEOUT + [:stage="finish";awaitLost=true] + expected: TIMEOUT + + [:stage="finish";awaitLost=false] + expected: NOTRUN + + [:stage="submit";awaitLost=true] + expected: NOTRUN + + [:stage="submit";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:color_write_mask,channel_work:*] + [:mask=1] + expected: FAIL + + [:mask=2] + expected: FAIL + + [:mask=3] + expected: FAIL + + [:mask=4] + expected: FAIL + + [:mask=5] + expected: FAIL + + [:mask=6] + expected: FAIL + + [:mask=7] + expected: FAIL + + [:mask=8] + expected: FAIL + + [:mask=9] + expected: FAIL + + [:mask=10] + expected: FAIL + + [:mask=11] + expected: FAIL + + [:mask=12] + expected: FAIL + + [:mask=13] + expected: FAIL + + [:mask=14] + expected: FAIL + + [:mask=15] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_parameter_types:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_scalar_multiplication:matrix_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_vec4_constructor:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:interpolation_sampling:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,group:group:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_const_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,padding:vec3:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,alpha_to_coverage:*] + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=1] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] + expected: FAIL + + [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:valid_texture_formats:*] [:format="r8unorm"] expected: FAIL @@ -55645,6 +36611,9 @@ [:format="rgba32float"] expected: FAIL + [:format="rgb10a2uint"] + expected: FAIL + [:format="rgb10a2unorm"] expected: FAIL @@ -55654,2652 +36623,326 @@ [:format="rgb9e5ufloat"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=true] + [:format="stencil8"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=false] + [:format="depth16unorm"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=true] + [:format="depth32float"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=false] + [:format="depth24plus"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + [:format="depth24plus-stencil8"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + [:format="depth32float-stencil8"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + [:format="bc1-rgba-unorm"] expected: FAIL - [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + [:format="bc1-rgba-unorm-srgb"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=true] + [:format="bc2-rgba-unorm"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=false] + [:format="bc2-rgba-unorm-srgb"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=true] + [:format="bc3-rgba-unorm"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=false] + [:format="bc3-rgba-unorm-srgb"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=true] + [:format="bc4-r-unorm"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=false] + [:format="bc4-r-snorm"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + [:format="bc5-rg-unorm"] expected: FAIL - [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + [:format="bc5-rg-snorm"] expected: FAIL - [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=true] + [:format="bc6h-rgb-ufloat"] expected: FAIL - [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=false] + [:format="bc6h-rgb-float"] expected: FAIL - [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=true] + [:format="bc7-rgba-unorm"] expected: FAIL - [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=false] + [:format="bc7-rgba-unorm-srgb"] expected: FAIL - [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL +[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:shared_shader_module:*] + expected: CRASH - [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=true] +[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:rw:*] + [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"render-bundle-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=false] + [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"write-texture","in":"queue"}] expected: FAIL - [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=true] + [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"attachment-store","in":"command-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=false] + [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"render-bundle-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=true] + [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=false] + [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=true] + [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"attachment-store","in":"command-encoder"}] expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL +[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:onscreenCanvas,snapshot:*] + expected: CRASH - [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=false] +[cts.https.html?q=webgpu:shader,execution,memory_model,barrier:workgroup_barrier_load_store:*] + [:accessValueType="u32";memType="non_atomic_storage";accessPair="rw"] expected: FAIL - [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=true] + [:accessValueType="u32";memType="non_atomic_workgroup";accessPair="rw"] expected: FAIL - [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_f32:*] + expected: CRASH - [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:identifier,vertex:*] + expected: CRASH - [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,shader_io,locations:nesting:*] + expected: CRASH - [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_matching:*] + expected: CRASH - [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] +[cts.https.html?q=webgpu:api,validation,debugMarker:push_pop_call_count_unbalance,render_compute_pass:*] + [:passType="compute"] expected: FAIL - [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + [:passType="render"] expected: FAIL - [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_not_instantiable:*] + expected: CRASH - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL +[cts.https.html?q=webgpu:api,operation,labels:object_has_descriptor_label:*] + expected: CRASH - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=false] +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_initalizer:*] + [:preventValueOptimizations=true] expected: FAIL - [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + [:preventValueOptimizations=false] expected: FAIL - [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,saturate:abstract_float:*] + expected: CRASH - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xU8Clamp:unsupported:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec4_whole:*] + expected: CRASH -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_increment:*] +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,destroyed:*] + expected: [ERROR, OK] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,validation,parse,align:placement:*] - [:scope="private-var";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="storage-var";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="struct-member";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="fn-decl";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="fn-param";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="fn-var";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="fn-return";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="while-stmt";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - [:scope="_undef_";attribute={"private-var":false,"storage-var":false,"struct-member":true,"fn-decl":false,"fn-param":false,"fn-var":false,"fn-return":false,"while-stmt":false}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:vertex_format_to_shader_format_conversion:*] - [:format="uint8x2";shaderComponentCount=1] - expected: FAIL - - [:format="uint8x2";shaderComponentCount=2] - expected: FAIL - - [:format="uint8x2";shaderComponentCount=3] - expected: FAIL - - [:format="uint8x2";shaderComponentCount=4] - expected: FAIL - - [:format="uint8x4";shaderComponentCount=1] - expected: FAIL - - [:format="uint8x4";shaderComponentCount=2] - expected: FAIL - - [:format="uint8x4";shaderComponentCount=3] - expected: FAIL - - [:format="uint8x4";shaderComponentCount=4] - expected: FAIL - - [:format="sint8x2";shaderComponentCount=1] - expected: FAIL - - [:format="sint8x2";shaderComponentCount=2] - expected: FAIL - - [:format="sint8x2";shaderComponentCount=3] - expected: FAIL - - [:format="sint8x2";shaderComponentCount=4] - expected: FAIL - - [:format="sint8x4";shaderComponentCount=1] - expected: FAIL - - [:format="sint8x4";shaderComponentCount=2] - expected: FAIL - - [:format="sint8x4";shaderComponentCount=3] - expected: FAIL - - [:format="sint8x4";shaderComponentCount=4] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_scalar_vector:*] + expected: CRASH - [:format="unorm8x2";shaderComponentCount=1] +[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:render_pass_commands:*] + [:command="draw"] expected: FAIL - [:format="unorm8x2";shaderComponentCount=2] + [:command="drawIndexed"] expected: FAIL - [:format="unorm8x2";shaderComponentCount=3] + [:command="drawIndexedIndirect"] expected: FAIL - [:format="unorm8x2";shaderComponentCount=4] + [:command="drawIndirect"] expected: FAIL - [:format="unorm8x4";shaderComponentCount=1] + [:command="setIndexBuffer"] expected: FAIL - [:format="unorm8x4";shaderComponentCount=2] + [:command="setBindGroup"] expected: FAIL - [:format="unorm8x4";shaderComponentCount=3] + [:command="setVertexBuffer"] expected: FAIL - [:format="unorm8x4";shaderComponentCount=4] + [:command="setPipeline"] expected: FAIL - [:format="snorm8x2";shaderComponentCount=1] + [:command="setViewport"] expected: FAIL - [:format="snorm8x2";shaderComponentCount=2] + [:command="setScissorRect"] expected: FAIL - [:format="snorm8x2";shaderComponentCount=3] + [:command="setBlendConstant"] expected: FAIL - [:format="snorm8x2";shaderComponentCount=4] + [:command="setStencilReference"] expected: FAIL - [:format="snorm8x4";shaderComponentCount=1] + [:command="beginOcclusionQuery"] expected: FAIL - [:format="snorm8x4";shaderComponentCount=2] + [:command="endOcclusionQuery"] expected: FAIL - [:format="snorm8x4";shaderComponentCount=3] + [:command="executeBundles"] expected: FAIL - [:format="snorm8x4";shaderComponentCount=4] + [:command="pushDebugGroup"] expected: FAIL - [:format="uint16x2";shaderComponentCount=1] + [:command="popDebugGroup"] expected: FAIL - [:format="uint16x2";shaderComponentCount=2] + [:command="insertDebugMarker"] expected: FAIL - [:format="uint16x2";shaderComponentCount=3] - expected: FAIL - - [:format="uint16x2";shaderComponentCount=4] - expected: FAIL - - [:format="uint16x4";shaderComponentCount=1] - expected: FAIL - - [:format="uint16x4";shaderComponentCount=2] - expected: FAIL - - [:format="uint16x4";shaderComponentCount=3] - expected: FAIL - - [:format="uint16x4";shaderComponentCount=4] - expected: FAIL - - [:format="sint16x2";shaderComponentCount=1] - expected: FAIL - - [:format="sint16x2";shaderComponentCount=2] - expected: FAIL - - [:format="sint16x2";shaderComponentCount=3] - expected: FAIL - - [:format="sint16x2";shaderComponentCount=4] - expected: FAIL - - [:format="sint16x4";shaderComponentCount=1] - expected: FAIL - - [:format="sint16x4";shaderComponentCount=2] - expected: FAIL - - [:format="sint16x4";shaderComponentCount=3] - expected: FAIL - [:format="sint16x4";shaderComponentCount=4] +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:usage:*] + [:method="WriteTexture";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="unorm16x2";shaderComponentCount=1] + [:method="WriteTexture";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="unorm16x2";shaderComponentCount=2] + [:method="WriteTexture";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="unorm16x2";shaderComponentCount=3] + [:method="WriteTexture";dimension="3d";size=[4,4,3\]] expected: FAIL - [:format="unorm16x2";shaderComponentCount=4] + [:method="CopyB2T";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="unorm16x4";shaderComponentCount=1] + [:method="CopyB2T";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="unorm16x4";shaderComponentCount=2] + [:method="CopyB2T";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="unorm16x4";shaderComponentCount=3] + [:method="CopyB2T";dimension="3d";size=[4,4,3\]] expected: FAIL - [:format="unorm16x4";shaderComponentCount=4] + [:method="CopyT2B";dimension="1d";size=[4,1,1\]] expected: FAIL - [:format="snorm16x2";shaderComponentCount=1] + [:method="CopyT2B";dimension="2d";size=[4,4,1\]] expected: FAIL - [:format="snorm16x2";shaderComponentCount=2] + [:method="CopyT2B";dimension="2d";size=[4,4,3\]] expected: FAIL - [:format="snorm16x2";shaderComponentCount=3] + [:method="CopyT2B";dimension="3d";size=[4,4,3\]] expected: FAIL - [:format="snorm16x2";shaderComponentCount=4] - expected: FAIL - [:format="snorm16x4";shaderComponentCount=1] +[cts.https.html?q=webgpu:api,validation,createTexture:viewFormats:*] + [:formatFeature="_undef_";viewFormatFeature="_undef_"] expected: FAIL - [:format="snorm16x4";shaderComponentCount=2] + [:formatFeature="_undef_";viewFormatFeature="depth32float-stencil8"] expected: FAIL - [:format="snorm16x4";shaderComponentCount=3] + [:formatFeature="_undef_";viewFormatFeature="texture-compression-bc"] expected: FAIL - [:format="snorm16x4";shaderComponentCount=4] + [:formatFeature="depth32float-stencil8";viewFormatFeature="_undef_"] expected: FAIL - [:format="float16x2";shaderComponentCount=1] + [:formatFeature="depth32float-stencil8";viewFormatFeature="depth32float-stencil8"] expected: FAIL - [:format="float16x2";shaderComponentCount=2] + [:formatFeature="depth32float-stencil8";viewFormatFeature="texture-compression-bc"] expected: FAIL - [:format="float16x2";shaderComponentCount=3] + [:formatFeature="texture-compression-bc";viewFormatFeature="_undef_"] expected: FAIL - [:format="float16x2";shaderComponentCount=4] + [:formatFeature="texture-compression-bc";viewFormatFeature="depth32float-stencil8"] expected: FAIL - [:format="float16x4";shaderComponentCount=1] - expected: FAIL - [:format="float16x4";shaderComponentCount=2] - expected: FAIL +[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,mapState:*] + expected: CRASH - [:format="float16x4";shaderComponentCount=3] +[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_basic:*] + [:preventValueOptimizations=true] expected: FAIL - [:format="float16x4";shaderComponentCount=4] + [:preventValueOptimizations=false] expected: FAIL - [:format="float32";shaderComponentCount=1] - expected: FAIL - [:format="float32";shaderComponentCount=2] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxInterStageShaderComponents:createRenderPipeline,at_over:*] + expected: CRASH - [:format="float32";shaderComponentCount=3] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:equals:*] + expected: CRASH - [:format="float32";shaderComponentCount=4] - expected: FAIL - - [:format="float32x2";shaderComponentCount=1] - expected: FAIL - - [:format="float32x2";shaderComponentCount=2] - expected: FAIL - - [:format="float32x2";shaderComponentCount=3] - expected: FAIL - - [:format="float32x2";shaderComponentCount=4] - expected: FAIL - - [:format="float32x3";shaderComponentCount=1] - expected: FAIL - - [:format="float32x3";shaderComponentCount=2] - expected: FAIL - - [:format="float32x3";shaderComponentCount=3] - expected: FAIL - - [:format="float32x3";shaderComponentCount=4] - expected: FAIL - - [:format="float32x4";shaderComponentCount=1] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,shader_io,binding:binding:*] + expected: CRASH - [:format="float32x4";shaderComponentCount=2] - expected: FAIL - - [:format="float32x4";shaderComponentCount=3] - expected: FAIL - - [:format="float32x4";shaderComponentCount=4] - expected: FAIL - - [:format="uint32";shaderComponentCount=1] - expected: FAIL - - [:format="uint32";shaderComponentCount=2] - expected: FAIL - - [:format="uint32";shaderComponentCount=3] - expected: FAIL - - [:format="uint32";shaderComponentCount=4] - expected: FAIL - - [:format="uint32x2";shaderComponentCount=1] - expected: FAIL - - [:format="uint32x2";shaderComponentCount=2] - expected: FAIL - - [:format="uint32x2";shaderComponentCount=3] - expected: FAIL - - [:format="uint32x2";shaderComponentCount=4] - expected: FAIL - - [:format="uint32x3";shaderComponentCount=1] - expected: FAIL - - [:format="uint32x3";shaderComponentCount=2] - expected: FAIL - - [:format="uint32x3";shaderComponentCount=3] - expected: FAIL - - [:format="uint32x3";shaderComponentCount=4] - expected: FAIL - - [:format="uint32x4";shaderComponentCount=1] - expected: FAIL - - [:format="uint32x4";shaderComponentCount=2] - expected: FAIL - - [:format="uint32x4";shaderComponentCount=3] - expected: FAIL - - [:format="uint32x4";shaderComponentCount=4] - expected: FAIL - - [:format="sint32";shaderComponentCount=1] - expected: FAIL - - [:format="sint32";shaderComponentCount=2] - expected: FAIL - - [:format="sint32";shaderComponentCount=3] - expected: FAIL - - [:format="sint32";shaderComponentCount=4] - expected: FAIL - - [:format="sint32x2";shaderComponentCount=1] - expected: FAIL - - [:format="sint32x2";shaderComponentCount=2] - expected: FAIL - - [:format="sint32x2";shaderComponentCount=3] - expected: FAIL - - [:format="sint32x2";shaderComponentCount=4] - expected: FAIL - - [:format="sint32x3";shaderComponentCount=1] - expected: FAIL - - [:format="sint32x3";shaderComponentCount=2] - expected: FAIL - - [:format="sint32x3";shaderComponentCount=3] - expected: FAIL - - [:format="sint32x3";shaderComponentCount=4] - expected: FAIL - - [:format="sint32x4";shaderComponentCount=1] - expected: FAIL - - [:format="sint32x4";shaderComponentCount=2] - expected: FAIL - - [:format="sint32x4";shaderComponentCount=3] - expected: FAIL - - [:format="sint32x4";shaderComponentCount=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureArrayLayers:createTexture,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,color_attachment_with_depth_stencil_attachment:*] - [:colorStoreOperation="discard";depthStencilStoreOperation="discard"] - expected: FAIL - - [:colorStoreOperation="discard";depthStencilStoreOperation="store"] - expected: FAIL - - [:colorStoreOperation="store";depthStencilStoreOperation="discard"] - expected: FAIL - - [:colorStoreOperation="store";depthStencilStoreOperation="store"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,trunc:abstract_float:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acosh:integer_argument:*] + expected: CRASH -[cts.https.html?q=webgpu:api,validation,gpu_external_texture_expiration:webcodec_video_frame_close_expire_immediately:*] +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,empty:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:abstract_int:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,render_pipeline,shader_module:invalid,fragment:*] + expected: CRASH - [:inputSource="const";vectorize=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstTrailingBit:i32:*] + expected: CRASH - [:inputSource="const";vectorize=3] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_exclusive_or:*] + expected: CRASH - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,programmable,state_tracking:bind_group_before_pipeline:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMin:min_workgroup:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_compound:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicSub:sub_workgroup:*] [:workgroupSize=1;dispatchSize=1;scalarType="u32"] expected: FAIL @@ -58397,145 +37040,3437 @@ expected: FAIL -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:buffers_with_varying_step_mode:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:logical_and:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:module_scope_multiple:*] +[cts.https.html?q=webgpu:api,validation,texture,bgra8unorm_storage:create_shader_module_without_bgra8unorm_storage:*] + [:shaderType="fragment"] + expected: FAIL + + [:shaderType="compute"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:basic:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,non_compressed,array:*] + expected: TIMEOUT + [:srcFormat="r8unorm";dstFormat="r8unorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8snorm";dstFormat="r8snorm";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8uint";dstFormat="r8uint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8uint";dstFormat="r8uint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8sint";dstFormat="r8sint";dimension="2d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="r8sint";dstFormat="r8sint";dimension="3d"] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg8unorm";dstFormat="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg8snorm";dstFormat="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg8uint";dstFormat="rg8uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg8sint";dstFormat="rg8sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm";dstFormat="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8unorm-srgb";dstFormat="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8snorm";dstFormat="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8uint";dstFormat="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba8sint";dstFormat="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm";dstFormat="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:srcFormat="bgra8unorm-srgb";dstFormat="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r16uint";dstFormat="r16uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r16uint";dstFormat="r16uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r16sint";dstFormat="r16sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r16sint";dstFormat="r16sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r16float";dstFormat="r16float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r16float";dstFormat="r16float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg16uint";dstFormat="rg16uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg16sint";dstFormat="rg16sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg16float";dstFormat="rg16float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg16float";dstFormat="rg16float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba16uint";dstFormat="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba16sint";dstFormat="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba16float";dstFormat="rgba16float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r32uint";dstFormat="r32uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r32uint";dstFormat="r32uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r32sint";dstFormat="r32sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r32sint";dstFormat="r32sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="r32float";dstFormat="r32float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="r32float";dstFormat="r32float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg32uint";dstFormat="rg32uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg32sint";dstFormat="rg32sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg32float";dstFormat="rg32float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg32float";dstFormat="rg32float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba32uint";dstFormat="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba32sint";dstFormat="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgba32float";dstFormat="rgba32float";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgb10a2uint";dstFormat="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgb10a2unorm";dstFormat="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rg11b10ufloat";dstFormat="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:srcFormat="rgb9e5ufloat";dstFormat="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:indirect_dispatch_buffer,device_mismatch:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] +[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_continue:*] + [:preventValueOptimizations=true] expected: FAIL - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] + [:preventValueOptimizations=false] expected: FAIL -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop_break_if:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_constructor:*] [:] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_lhs_const:*] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index_lhs_member_assignment:*] [:] expected: FAIL -[cts.https.html?q=webgpu:examples:gpu,with_texture_compression,bc:*] - [:textureCompressionBC=false] +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:invalid_locations:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:beginRenderPass,at_over:*] + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] expected: FAIL - [:textureCompressionBC=true] + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,acosh:f32:*] - [:inputSource="const";vectorize="_undef_"] +[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:subcalls:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:non_zero_array_stride_and_attribute_offset:*] + [:format="uint8x2"] expected: FAIL - [:inputSource="const";vectorize=2] + [:format="uint8x4"] expected: FAIL - [:inputSource="const";vectorize=3] + [:format="sint8x2"] expected: FAIL - [:inputSource="const";vectorize=4] + [:format="sint8x4"] expected: FAIL - [:inputSource="uniform";vectorize="_undef_"] + [:format="unorm8x2"] expected: FAIL - [:inputSource="uniform";vectorize=2] + [:format="unorm8x4"] expected: FAIL - [:inputSource="uniform";vectorize=3] + [:format="snorm8x2"] expected: FAIL - [:inputSource="uniform";vectorize=4] + [:format="snorm8x4"] expected: FAIL - [:inputSource="storage_r";vectorize="_undef_"] + [:format="uint16x2"] expected: FAIL - [:inputSource="storage_r";vectorize=2] + [:format="uint16x4"] expected: FAIL - [:inputSource="storage_r";vectorize=3] + [:format="sint16x2"] expected: FAIL - [:inputSource="storage_r";vectorize=4] + [:format="sint16x4"] expected: FAIL - [:inputSource="storage_rw";vectorize="_undef_"] + [:format="unorm16x2"] expected: FAIL - [:inputSource="storage_rw";vectorize=2] + [:format="unorm16x4"] expected: FAIL - [:inputSource="storage_rw";vectorize=3] + [:format="snorm16x2"] expected: FAIL - [:inputSource="storage_rw";vectorize=4] + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] expected: FAIL -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createRenderPipeline:*] +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,shader_io,shared_structs:shared_with_non_entry_point_function:*] [:] expected: FAIL - [:awaitLost=true] + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,complex:continue_in_switch_in_for_loop:*] + [:preventValueOptimizations=true] expected: FAIL - [:awaitLost=false] + [:preventValueOptimizations=false] expected: FAIL -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:mipmap_level:*] - [:dimension="1d"] +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeAlignment:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,memory_model,weak:message_passing:*] + expected: TIMEOUT + [:memType="atomic_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,color_attachments:*] + [:layer0=0;level0=0;layer1=0;level1=0;inSamePass=true] expected: FAIL - [:dimension="2d"] + [:layer0=0;level0=1;layer1=0;level1=1;inSamePass=true] expected: FAIL - [:dimension="3d"] + [:layer0=1;level0=0;layer1=1;level1=0;inSamePass=true] + expected: FAIL + + [:layer0=1;level0=1;layer1=1;level1=1;inSamePass=true] expected: FAIL -[cts.https.html?q=webgpu:api,validation,query_set,create:count:*] +[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:let_ptr_reads:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicXor:xor_workgroup:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBufferArrayStride:createRenderPipeline,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,var_and_let:var_access_mode_bad_template_delim:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,float_parse:valid:*] + [:value="small_pos_non_zero_exp"] + expected: FAIL + + [:value="pos_exp_neg_result"] + expected: FAIL + + [:value="no_exp"] + expected: FAIL + + [:value="large_number_small_exp"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setViewport,xy_rect_contained_in_attachment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,depth_clip_clamp:depth_test_input_clamped:*] + [:format="depth16unorm";unclippedDepth=false;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=false;multisampled=true] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=true;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=true;multisampled=true] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:function_body_multiple:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_fn_const_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:sample_count:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:stencil_write:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,clamp:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createView,2d,uncompressed_format:*] + expected: TIMEOUT + [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: TIMEOUT + + [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=false] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] + expected: NOTRUN + + [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:evaluation_stage:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createPipelineLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:wr:*] + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] + expected: FAIL + + [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,extractBits:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,memory_model,atomicity:atomicity:*] + expected: TIMEOUT + [:memType="atomic_storage";testType="inter_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,general:writeTimestamp,query_type_and_index:*] [:type="occlusion"] expected: FAIL @@ -58543,11 +40478,8698 @@ expected: FAIL +[cts.https.html?q=webgpu:api,validation,encoding,cmds,index_access:out_of_bounds:*] + [:indexCount=4294967295;firstIndex=2;instanceCount=1] + expected: FAIL + + [:indexCount=4294967295;firstIndex=2;instanceCount=10000] + expected: FAIL + + [:indexCount=2;firstIndex=4294967295;instanceCount=1] + expected: FAIL + + [:indexCount=2;firstIndex=4294967295;instanceCount=10000] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blend_constant,setting:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sqrt:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pipeline,primitive_topology:basic:*] + [:topology="point-list";indirect=false;primitiveRestart=false] + expected: FAIL + + [:topology="point-list";indirect=true;primitiveRestart=false] + expected: FAIL + + [:topology="line-list";indirect=false;primitiveRestart=false] + expected: FAIL + + [:topology="line-list";indirect=true;primitiveRestart=false] + expected: FAIL + + [:topology="line-strip";indirect=false;primitiveRestart=false] + expected: FAIL + + [:topology="line-strip";indirect=false;primitiveRestart=true] + expected: FAIL + + [:topology="line-strip";indirect=true;primitiveRestart=false] + expected: FAIL + + [:topology="line-strip";indirect=true;primitiveRestart=true] + expected: FAIL + + [:topology="triangle-list";indirect=false;primitiveRestart=false] + expected: FAIL + + [:topology="triangle-list";indirect=true;primitiveRestart=false] + expected: FAIL + + [:topology="triangle-strip";indirect=false;primitiveRestart=false] + expected: FAIL + + [:topology="triangle-strip";indirect=false;primitiveRestart=true] + expected: FAIL + + [:topology="triangle-strip";indirect=true;primitiveRestart=false] + expected: FAIL + + [:topology="triangle-strip";indirect=true;primitiveRestart=true] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,abort_over_invalid_error:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sin:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,pack4xI8:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:texture_descriptor:*] + [:format="depth32float-stencil8";enable_required_feature=true] + expected: FAIL + + [:format="bc1-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc1-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + [:format="bc2-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc2-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + [:format="bc3-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc3-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + [:format="bc4-r-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc4-r-snorm";enable_required_feature=false] + expected: FAIL + + [:format="bc5-rg-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc5-rg-snorm";enable_required_feature=false] + expected: FAIL + + [:format="bc6h-rgb-ufloat";enable_required_feature=false] + expected: FAIL + + [:format="bc6h-rgb-float";enable_required_feature=false] + expected: FAIL + + [:format="bc7-rgba-unorm";enable_required_feature=false] + expected: FAIL + + [:format="bc7-rgba-unorm-srgb";enable_required_feature=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,shader_module:invalid,vertex:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_bind_group_layout:*] + [:maxedEntry={"storageTexture":{"access":"read-only","format":"r32float"}}] + expected: FAIL + + [:maxedEntry={"storageTexture":{"access":"read-write","format":"r32float"}}] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureArrayLayers:createTexture,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:private_function_scope:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_default:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,render_pipeline,culling_tests:culling:*] + [:frontFace="ccw";cullMode="none"] + expected: FAIL + + [:frontFace="ccw";cullMode="front"] + expected: FAIL + + [:frontFace="ccw";cullMode="back"] + expected: FAIL + + [:frontFace="cw";cullMode="none"] + expected: FAIL + + [:frontFace="cw";cullMode="front"] + expected: FAIL + + [:frontFace="cw";cullMode="back"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:valid_locations:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,loop:loop_continue:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:magFilter,nearest:*] + [:format="r8unorm"] + expected: FAIL + + [:format="rg8unorm"] + expected: FAIL + + [:format="rgba8unorm"] + expected: FAIL + + [:format="rgba8unorm-srgb"] + expected: FAIL + + [:format="bgra8unorm"] + expected: FAIL + + [:format="bgra8unorm-srgb"] + expected: FAIL + + [:format="r16float"] + expected: FAIL + + [:format="rg16float"] + expected: FAIL + + [:format="rgba16float"] + expected: FAIL + + [:format="rgb10a2unorm"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:overlapping_attributes:*] + [:format="uint8x4"] + expected: FAIL + + [:format="sint8x2"] + expected: FAIL + + [:format="sint8x4"] + expected: FAIL + + [:format="unorm8x2"] + expected: FAIL + + [:format="unorm8x4"] + expected: FAIL + + [:format="snorm8x2"] + expected: FAIL + + [:format="snorm8x4"] + expected: FAIL + + [:format="uint16x2"] + expected: FAIL + + [:format="uint16x4"] + expected: FAIL + + [:format="sint16x2"] + expected: FAIL + + [:format="sint16x4"] + expected: FAIL + + [:format="unorm16x2"] + expected: FAIL + + [:format="unorm16x4"] + expected: FAIL + + [:format="snorm16x2"] + expected: FAIL + + [:format="snorm16x4"] + expected: FAIL + + [:format="float16x2"] + expected: FAIL + + [:format="float16x4"] + expected: FAIL + + [:format="float32"] + expected: FAIL + + [:format="float32x2"] + expected: FAIL + + [:format="float32x3"] + expected: FAIL + + [:format="float32x4"] + expected: FAIL + + [:format="uint32"] + expected: FAIL + + [:format="uint32x2"] + expected: FAIL + + [:format="uint32x3"] + expected: FAIL + + [:format="uint32x4"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="sint32x2"] + expected: FAIL + + [:format="sint32x3"] + expected: FAIL + + [:format="sint32x4"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_member:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:vertex_buffer_state:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:same_pointer_read_and_write:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fma:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer_offset_and_size_for_bind_groups_match:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,decl,const:no_indirect_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,inversesqrt:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:nested_for_continue:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_parameter_matching:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_type_nonconstructible:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBufferBindingSize:createBindGroup,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestampWrites,query_set_type:*] + [:queryType="occlusion"] + expected: FAIL + + [:queryType="timestamp"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:max_components_count,output:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,robust_access:linear_memory:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:resize:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:maximum_binding_limit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_workgroup_advanced:*] + [:workgroupSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;scalarType="i32"] + expected: FAIL + + [:workgroupSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;scalarType="i32"] + expected: FAIL + + [:workgroupSize=128;scalarType="u32"] + expected: FAIL + + [:workgroupSize=128;scalarType="i32"] + expected: FAIL + + [:workgroupSize=256;scalarType="u32"] + expected: FAIL + + [:workgroupSize=256;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_or_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:offsets_and_sizes_copy_depth_stencil:*] + [:format="stencil8";copyMethod="WriteTexture";aspect="stencil-only"] + expected: FAIL + + [:format="stencil8";copyMethod="CopyB2T";aspect="stencil-only"] + expected: FAIL + + [:format="stencil8";copyMethod="CopyT2B";aspect="stencil-only"] + expected: FAIL + + [:format="depth16unorm";copyMethod="CopyT2B";aspect="depth-only"] + expected: FAIL + + [:format="depth32float";copyMethod="CopyT2B";aspect="depth-only"] + expected: FAIL + + [:format="depth24plus-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] + expected: FAIL + + [:format="depth24plus-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] + expected: FAIL + + [:format="depth24plus-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="depth-only"] + expected: FAIL + + [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:canvas_configuration:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:queryset_and_destination_buffer_state:*] + [:querySetState="valid";destinationState="valid"] + expected: FAIL + + [:querySetState="valid";destinationState="invalid"] + expected: FAIL + + [:querySetState="valid";destinationState="destroyed"] + expected: FAIL + + [:querySetState="invalid";destinationState="valid"] + expected: FAIL + + [:querySetState="invalid";destinationState="invalid"] + expected: FAIL + + [:querySetState="invalid";destinationState="destroyed"] + expected: FAIL + + [:querySetState="destroyed";destinationState="valid"] + expected: FAIL + + [:querySetState="destroyed";destinationState="invalid"] + expected: FAIL + + [:querySetState="destroyed";destinationState="destroyed"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,createView:texture_state:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:basics:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,binding:binding_without_group:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,asinh:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_default_only:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_shader_type_matches_attribute_format:*] + [:format="uint32"] + expected: FAIL + + [:format="sint32"] + expected: FAIL + + [:format="unorm10-10-10-2"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map:mappedAtCreation:*] + [:mappable=false] + expected: FAIL + + [:mappable=true] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_while_break:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec4_element_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,access,vector:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:size_alignment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_must_use:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f32_vec3:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:source_image,crossOrigin:*] + [:sourceImage="canvas";isOriginClean=true] + expected: FAIL + + [:sourceImage="offscreenCanvas";isOriginClean=true] + expected: FAIL + + [:sourceImage="imageBitmap";isOriginClean=true] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_gl_context_canvas:*] + expected: TIMEOUT + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="r32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rg32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="bgra8unorm-srgb";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgb10a2unorm";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba16float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: NOTRUN + + [:canvasType="offscreen";contextName="webgl2";dstColorFormat="rgba32float";srcPremultiplied=false;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: NOTRUN + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:canvasType="onscreen";contextName="webgl";dstColorFormat="rg32float";srcPremultiplied=true;dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,af_arithmetic:negation:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,shader_module,compilation_info:offset_and_length:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_array_size:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:copy_subrect_from_ImageData:*] + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] + expected: FAIL + + [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,inverseSqrt:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec2_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:single_element:*] + [:type="i32";stride=4] + expected: FAIL + + [:type="f32";stride=4] + expected: FAIL + + [:type="vec2%3Ci32%3E";stride=8] + expected: FAIL + + [:type="vec2%3Cf32%3E";stride=8] + expected: FAIL + + [:type="vec3%3Ci32%3E";stride=16] + expected: FAIL + + [:type="vec3%3Cf32%3E";stride=16] + expected: FAIL + + [:type="vec4%3Cu32%3E";stride=16] + expected: FAIL + + [:type="vec4%3Ci32%3E";stride=16] + expected: FAIL + + [:type="vec4%3Cf32%3E";stride=16] + expected: FAIL + + [:type="mat2x2%3Cf32%3E";stride=16] + expected: FAIL + + [:type="mat2x4%3Cf32%3E";stride=32] + expected: FAIL + + [:type="mat3x4%3Cf32%3E";stride=48] + expected: FAIL + + [:type="mat4x2%3Cf32%3E";stride=32] + expected: FAIL + + [:type="mat4x4%3Cf32%3E";stride=64] + expected: FAIL + + [:type="atomic%3Cu32%3E";stride=4] + expected: FAIL + + [:type="atomic%3Ci32%3E";stride=4] + expected: FAIL + + [:type="array%3Cu32,4%3E";stride=16] + expected: FAIL + + [:type="array%3Ci32,4%3E";stride=16] + expected: FAIL + + [:type="array%3Cf32,4%3E";stride=16] + expected: FAIL + + [:type="ElemStruct";stride=4] + expected: FAIL + + [:type="ElemStruct_ImplicitPadding";stride=16] + expected: FAIL + + [:type="ElemStruct_ExplicitPadding";stride=32] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:pipeline_layout,device_mismatch:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sign:unsigned_integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack2x16float:unpack:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:bool:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,radians:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:stage_inout:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:dispatch_sizes:*] + expected: TIMEOUT + [:dispatchType="indirect";largeDimValueVariant={"mult":0,"add":2147483647}] + expected: FAIL + + [:dispatchType="indirect";largeDimValueVariant={"mult":0,"add":4294967295}] + expected: TIMEOUT + + +[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:occlusionQuerySet,query_set_type:*] + [:queryType="occlusion"] + expected: FAIL + + [:queryType="timestamp"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:cowr:*] + expected: TIMEOUT + [:memType="atomic_storage";testType="inter_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup"] + expected: NOTRUN + + [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,validation,parse,unary_ops:all:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acosh:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:no_indirect_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:getCurrentTexture,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_2d_context_canvas:*] + [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,log:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:required_bytes_in_copy:*] + [:method="WriteTexture";format="r8unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r8unorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r8snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r8snorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r8uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r8uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r8sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r8sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg8unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg8unorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg8snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg8snorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg8uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg8uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg8sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg8sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8unorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8snorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba8sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="bgra8unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bgra8unorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r16uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r16uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r16sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r16sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r16float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r16float";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg16uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg16uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg16sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg16sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg16float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg16float";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba16uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba16uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba16sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba16sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba16float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba16float";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r32uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r32uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r32sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r32sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="r32float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="r32float";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg32uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg32uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg32sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg32sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg32float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg32float";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba32uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba32uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba32sint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba32sint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgba32float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgba32float";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="WriteTexture";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="depth16unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r8snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r8snorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r8uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r8uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r8sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r8sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg8snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg8snorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg8uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg8uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg8sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg8sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8unorm-srgb";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8snorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba8sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="bgra8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bgra8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="bgra8unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bgra8unorm-srgb";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r16uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r16uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r16sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r16sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r16float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r16float";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg16uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg16uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg16sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg16sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg16float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg16float";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba16uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba16uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba16sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba16sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba16float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba16float";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r32uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r32uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r32sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r32sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="r32float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="r32float";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg32uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg32uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg32sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg32sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg32float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg32float";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba32uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba32uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba32sint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba32sint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgba32float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgba32float";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb10a2unorm";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyB2T";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="depth16unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r8snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r8snorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r8uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r8uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r8sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r8sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg8snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg8snorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg8uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg8uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg8sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg8sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8snorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba8sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="bgra8unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bgra8unorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r16uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r16uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r16sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r16sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r16float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r16float";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg16uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg16uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg16sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg16sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg16float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg16float";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba16uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba16uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba16sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba16sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba16float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba16float";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r32uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r32uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r32sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r32sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="r32float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="r32float";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg32uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg32uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg32sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg32sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg32float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg32float";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba32uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba32uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba32sint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba32sint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgba32float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgba32float";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: FAIL + + [:method="CopyT2B";format="stencil8";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="depth16unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,unpack4xU8:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:buffer_state:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:not_equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:ww:*] + [:boundary="queue-op";writeOps=["write-buffer","write-buffer"\];contexts=["queue","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","b2b-copy"\];contexts=["queue","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","t2b-copy"\];contexts=["queue","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["compute-pass-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-pass-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-bundle-encoder","queue"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="queue-op";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] + expected: FAIL + + [:boundary="command-buffer";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="pass";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + [:boundary="dispatch";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_nested_break:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,dot4I8Packed:unsupported:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:format:*] + [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="stencil8"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=1;dimension="2d";format="depth16unorm"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="stencil8"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=3;dimension="2d";format="depth16unorm"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgb10a2uint"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rg11b10ufloat"] + expected: FAIL + + [:method="WriteTexture";depthOrArrayLayers=32;dimension="3d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="stencil8"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=1;dimension="2d";format="depth16unorm"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="stencil8"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=3;dimension="2d";format="depth16unorm"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyB2T";depthOrArrayLayers=32;dimension="3d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="1d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="stencil8"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=1;dimension="2d";format="depth16unorm"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="stencil8"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=3;dimension="2d";format="depth16unorm"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgb10a2uint"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rg11b10ufloat"] + expected: FAIL + + [:method="CopyT2B";depthOrArrayLayers=32;dimension="3d";format="rgb9e5ufloat"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,comments:unterminated_block_comment:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBufferBindingSize:createBindGroup,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_storage_basic:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_struct_attribute:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:bool:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createTexture:sampleCount,various_sampleCount_with_all_formats:*] + [:dimension="_undef_";format="rgb10a2uint"] + expected: FAIL + + [:dimension="_undef_";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="_undef_";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="_undef_";format="stencil8"] + expected: FAIL + + [:dimension="_undef_";format="depth16unorm"] + expected: FAIL + + [:dimension="_undef_";format="depth32float-stencil8"] + expected: FAIL + + [:dimension="2d";format="rgb10a2uint"] + expected: FAIL + + [:dimension="2d";format="rg11b10ufloat"] + expected: FAIL + + [:dimension="2d";format="rgb9e5ufloat"] + expected: FAIL + + [:dimension="2d";format="stencil8"] + expected: FAIL + + [:dimension="2d";format="depth16unorm"] + expected: FAIL + + [:dimension="2d";format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,getBindGroupLayout:index_range,auto_layout:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,resource_init,buffer:map_partial_buffer:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_matrix_multiplication:matrix_matrix:*] + expected: [CRASH, TIMEOUT] + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstTrailingBit:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,image:from_image:*] + expected: TIMEOUT + [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] + expected: FAIL + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] + expected: [TIMEOUT, NOTRUN, FAIL] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] + expected: [TIMEOUT, NOTRUN, FAIL] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec3_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createBindGroupLayout,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicOr:or_storage:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,reflection:texture_creation_from_reflection:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,id:id_non_override:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,depth_clip_clamp:depth_clamp_and_clip:*] + [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth="_undef_";writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=false;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=false;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=false;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=false;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=true;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=true;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=true;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth16unorm";unclippedDepth=true;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth="_undef_";writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth="_undef_";writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth="_undef_";writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth=false;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth=false;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth=false;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth=false;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth=true;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth=true;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float";unclippedDepth=true;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float";unclippedDepth=true;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth="_undef_";writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth="_undef_";writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth="_undef_";writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth="_undef_";writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth=false;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth=false;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth=false;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth=false;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth=true;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth=true;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus";unclippedDepth=true;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus";unclippedDepth=true;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=false;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth24plus-stencil8";unclippedDepth=true;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth="_undef_";writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=false;writeDepth=true;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=false;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=false;multisampled=true] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=true;multisampled=false] + expected: FAIL + + [:format="depth32float-stencil8";unclippedDepth=true;writeDepth=true;multisampled=true] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_compound_statement:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,resource_state:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,query_set,destroy:twice:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:bool:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:color_textures,compressed,non_array:*] + [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc2-rgba-unorm";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc2-rgba-unorm-srgb";dstFormat="bc2-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc3-rgba-unorm-srgb";dstFormat="bc3-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc4-r-unorm";dstFormat="bc4-r-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc4-r-snorm";dstFormat="bc4-r-snorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc5-rg-unorm";dstFormat="bc5-rg-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc5-rg-snorm";dstFormat="bc5-rg-snorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc6h-rgb-ufloat";dstFormat="bc6h-rgb-ufloat";dimension="2d"] + expected: FAIL + + [:srcFormat="bc6h-rgb-float";dstFormat="bc6h-rgb-float";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm";dimension="2d"] + expected: FAIL + + [:srcFormat="bc7-rgba-unorm-srgb";dstFormat="bc7-rgba-unorm-srgb";dimension="2d"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_reference_initialized:*] + [:format="stencil8"] + expected: FAIL + + [:format="depth24plus-stencil8"] + expected: FAIL + + [:format="depth32float-stencil8"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,exp2:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,tan:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_complement:u32_complement:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_increment:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,acos:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,id:id_struct_member:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicLoad:load_workgroup:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan2:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,pass_boundary,compute:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sin:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_and_no_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:format:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:pipeline_output_targets,blend:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,align:required_alignment:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,vector:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:with_work:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_builtin:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,general:occlusion_query,invalid_query_set:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:parsing:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_exp:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_gpu_context_canvas:*] + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] + expected: FAIL + + [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_shaderLocation_limit:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_arithmetic:negation:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:compute:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,af_assignment:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec3_element_decrement:*] + [:] + expected: FAIL + + [cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:offset_and_size_oob:*] [:] expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_logical:negation:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f32_vec4:*] + expected: [TIMEOUT, CRASH] + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:depth_stencil_format,copy_buffer_size:*] + [:format="stencil8";aspect="stencil-only";copyType="CopyB2T"] + expected: FAIL + + [:format="stencil8";aspect="stencil-only";copyType="CopyT2B"] + expected: FAIL + + [:format="stencil8";aspect="stencil-only";copyType="WriteTexture"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only";copyType="CopyB2T"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only";copyType="CopyT2B"] + expected: FAIL + + [:format="depth16unorm";aspect="depth-only";copyType="WriteTexture"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="depth-only";copyType="CopyT2B"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyB2T"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyT2B"] + expected: FAIL + + [:format="depth32float-stencil8";aspect="stencil-only";copyType="WriteTexture"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,tan:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,identifiers:module_var_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,basic,render:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMax:max_storage:*] + [:workgroupSize=1;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:scalar_vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_C_C_C_R:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:occlusion_query_set,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:max_shader_variable_location:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,saturate:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:web_platform,canvas,configure:usage:*] + [:canvasType="onscreen"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fma:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,draw:default_arguments:*] + [:mode="draw"] + expected: FAIL + + [:mode="drawIndexed"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack2x16snorm:unpack:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,createBindGroup:texture_binding_must_have_correct_usage:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_return_types:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,modf:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,features,query_types:createQuerySet:*] + [:type="occlusion";featureContainsTimestampQuery=false] + expected: FAIL + + [:type="occlusion";featureContainsTimestampQuery=true] + expected: FAIL + + [:type="timestamp";featureContainsTimestampQuery=true] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:setBindGroup,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:createBindGroup,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,render_pipeline,sample_mask:alpha_to_coverage_mask:*] + [:interpolated=false;sampleCount=4;rasterizationMask=0] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=1] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=2] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=3] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=4] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=5] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=6] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=7] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=8] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=9] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=10] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=11] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=12] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=13] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=14] + expected: FAIL + + [:interpolated=false;sampleCount=4;rasterizationMask=15] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=0] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=1] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=2] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=3] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=4] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=5] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=6] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=7] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=8] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=9] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=10] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=11] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=12] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=13] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=14] + expected: FAIL + + [:interpolated=true;sampleCount=4;rasterizationMask=15] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_offset_oob:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:from_canvas:*] + expected: TIMEOUT + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: FAIL + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: [FAIL, NOTRUN, TIMEOUT] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: [TIMEOUT, NOTRUN, FAIL] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: [FAIL, TIMEOUT, NOTRUN] + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] + expected: NOTRUN + + [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,memory_model,weak:store_buffer:*] + expected: TIMEOUT + [:memType="atomic_workgroup"] + expected: TIMEOUT + + [:memType="atomic_storage"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,limits,maxColorAttachments:*] + expected: CRASH + +[cts.https.html?q=webgpu:util,texture,texel_data:ufloat_texel_data_in_shader:*] + [:format="rg11b10ufloat"] + expected: FAIL + + [:format="rgb9e5ufloat"] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:onscreenCanvas,uploadToWebGL:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_break:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32_vec4:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blending,clamping:*] + [:format="rgba8unorm";srcValue=1;dstValue=0.2] + expected: FAIL + + [:format="rgba8unorm";srcValue=1;dstValue=0.4] + expected: FAIL + + [:format="rg16float";srcValue=1;dstValue=0.2] + expected: FAIL + + [:format="rg16float";srcValue=1;dstValue=0.4] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyTextureToBuffer:*] + expected: TIMEOUT + [:stage="finish";awaitLost=true] + expected: TIMEOUT + + [:stage="finish";awaitLost=false] + expected: NOTRUN + + [:stage="submit";awaitLost=true] + expected: NOTRUN + + [:stage="submit";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:invalid:*] + expected: TIMEOUT + [:] + expected: TIMEOUT + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_nonmatching_vec2:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:f32_mat:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_assignment:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_function:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,literal:u32:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:beginRenderPass,at_over:*] + [:limitTest="atDefault";testValueName="atLimit"] + expected: FAIL + + [:limitTest="atDefault";testValueName="overLimit"] + expected: FAIL + + [:limitTest="underDefault";testValueName="atLimit"] + expected: FAIL + + [:limitTest="underDefault";testValueName="overLimit"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] + expected: FAIL + + [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] + expected: FAIL + + [:limitTest="atMaximum";testValueName="overLimit"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="atLimit"] + expected: FAIL + + [:limitTest="overMaximum";testValueName="overLimit"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_continuing:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:not_valid_on_user_defined_io:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,saturate:integer_argument:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:timestamp_query_set,device_mismatch:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec3_whole:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:copyTextureToTexture:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,queue,writeBuffer:buffer_state:*] + [:bufferState="destroyed"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:and_short_circuit:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:reuse_builtin_name:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_workgroup_advanced:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,return:return:*] + [:preventValueOptimizations=true] + expected: FAIL + + [:preventValueOptimizations=false] + expected: FAIL + + +[cts.https.html?q=webgpu:web_platform,canvas,configure:format:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp:values:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_type_constructible:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atan2:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_vector_scalar:*] + expected: CRASH + +[cts.https.html?q=webgpu:examples:gpu,async:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:out_of_bounds:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:equals:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_addition:matrix_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_unused_bind_group:*] + [:inRenderPass=true;textureUsage0="sampled-texture";textureUsage1="sampled-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="sampled-texture";textureUsage1="writeonly-storage-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="sampled-texture";textureUsage1="readonly-storage-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="writeonly-storage-texture";textureUsage1="sampled-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="writeonly-storage-texture";textureUsage1="writeonly-storage-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="writeonly-storage-texture";textureUsage1="readonly-storage-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="readonly-storage-texture";textureUsage1="sampled-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="readonly-storage-texture";textureUsage1="writeonly-storage-texture"] + expected: FAIL + + [:inRenderPass=true;textureUsage0="readonly-storage-texture";textureUsage1="readonly-storage-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="sampled-texture";textureUsage1="sampled-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="sampled-texture";textureUsage1="writeonly-storage-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="sampled-texture";textureUsage1="readonly-storage-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="writeonly-storage-texture";textureUsage1="sampled-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="writeonly-storage-texture";textureUsage1="writeonly-storage-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="writeonly-storage-texture";textureUsage1="readonly-storage-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="readonly-storage-texture";textureUsage1="sampled-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="readonly-storage-texture";textureUsage1="writeonly-storage-texture"] + expected: FAIL + + [:inRenderPass=false;textureUsage0="readonly-storage-texture";textureUsage1="readonly-storage-texture"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_param:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:type_and_sampling:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_disabled:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,functions,restrictions:entry_point_call_target:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:interpolation_type:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:type:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:abstract_float:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,draw:vertex_attributes,basic:*] + [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=1;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="uint32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=4;vertex_buffer_count=4;vertex_format="float32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="uint32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=4;vertex_format="float32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="uint32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=8;vertex_buffer_count=8;vertex_format="float32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=1;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="uint32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=4;vertex_format="float32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="uint32";step_mode="mixed"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="_undef_"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="vertex"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="instance"] + expected: FAIL + + [:vertex_attribute_count=16;vertex_buffer_count=8;vertex_format="float32";step_mode="mixed"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sqrt:f32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMin:min_storage:*] + [:workgroupSize=1;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,const_assert:parse:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicAdd:add_storage:*] + [:workgroupSize=1;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:first_query_and_query_count:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:validate,maxBindGroupsPlusVertexBuffers:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:builtin_fn_args:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:buffer_state:*] + [:bufferState="valid"] + expected: FAIL + + [:bufferState="invalid"] + expected: FAIL + + [:bufferState="destroyed"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_exclusive_or_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,color_sparse:*] + expected: [TIMEOUT, CRASH] + [:encoderType="render%20pass";attachmentCount=1] + expected: TIMEOUT + + [:encoderType="render%20pass";attachmentCount=2] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=3] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=4] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=5] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=6] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=7] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=8] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=9] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=10] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=11] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=12] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=13] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=14] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=15] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=16] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=17] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=18] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=19] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=20] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=21] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=22] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=23] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=24] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=25] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=26] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=27] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=28] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=29] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=30] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=31] + expected: NOTRUN + + [:encoderType="render%20pass";attachmentCount=32] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=1] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=2] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=3] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=4] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=5] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=6] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=7] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=8] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=9] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=10] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=11] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=12] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=13] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=14] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=15] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=16] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=17] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=18] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=19] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=20] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=21] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=22] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=23] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=24] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=25] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=26] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=27] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=28] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=29] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=30] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=31] + expected: NOTRUN + + [:encoderType="render%20bundle";attachmentCount=32] + expected: NOTRUN + + +[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,dispatch:*] + [:dispatch="none";usage1="sampled-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="none";usage1="readonly-storage-texture";usage2="writeonly-storage-texture"] + expected: FAIL + + [:dispatch="none";usage1="readonly-storage-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="none";usage1="writeonly-storage-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="direct";usage1="sampled-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="direct";usage1="readonly-storage-texture";usage2="writeonly-storage-texture"] + expected: FAIL + + [:dispatch="direct";usage1="readonly-storage-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="direct";usage1="writeonly-storage-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="indirect";usage1="sampled-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="indirect";usage1="readonly-storage-texture";usage2="writeonly-storage-texture"] + expected: FAIL + + [:dispatch="indirect";usage1="readonly-storage-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + [:dispatch="indirect";usage1="writeonly-storage-texture";usage2="readwrite-storage-texture"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,error_scope:parent_scope:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:u32array_start_and_length:*] + [:] + expected: FAIL + + +[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:vertex:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f32_vec3:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,source:valid_source:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:identifier,fragment:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:rowsPerImage_and_bytesPerRow:*] + expected: TIMEOUT + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] + expected: FAIL + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: TIMEOUT + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgb8a1unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="etc2-rgba8unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-r11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="eac-rg11snorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-4x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x4-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-5x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-6x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-8x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x5-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x6-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x8-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-10x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x10-unorm-srgb";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm";dimension="2d"] + expected: NOTRUN + + [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="astc-12x12-unorm-srgb";dimension="2d"] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_workgroup_advanced:*] + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + expected: FAIL + + [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:vector:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:vector_scalar_compound:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_default_case:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:createTexture,at_over:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,write,unchanged_ranges_preserved:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_func_decl:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,compute_pipeline:shader_module,device_mismatch:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:less_than:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:indirect_dispatch_buffer_state:*] + expected: CRASH + [cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blending,GPUBlendComponent:*] [:component="color";srcFactor="zero";dstFactor="zero";operation="add"] expected: FAIL @@ -61604,26457 +52226,323 @@ expected: FAIL -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sin:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createBuffer:*] - [:usageType="MAP_READ"] - expected: FAIL - - [:usageType="MAP_WRITE"] - expected: FAIL - - [:usageType="INDEX"] - expected: FAIL - - [:usageType="VERTEX"] - expected: FAIL - - [:usageType="UNIFORM"] - expected: FAIL - - [:usageType="STORAGE"] - expected: FAIL - - [:usageType="INDIRECT"] - expected: FAIL - - [:usageType="QUERY_RESOLVE"] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_READ";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="MAP_WRITE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="VERTEX";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="UNIFORM";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="STORAGE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="INDIRECT";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_NONE";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=true;mappedAtCreation=false] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=true] - expected: FAIL - - [:usageType="QUERY_RESOLVE";usageCopy="COPY_SRC_DST";awaitLost=false;mappedAtCreation=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createComputePipeline:*] - [:] - expected: FAIL - - [:awaitLost=true] - expected: FAIL - - [:awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,abort_over_invalid_error:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:greater_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_encoder:subresources,buffer_usage_in_one_compute_pass_with_no_dispatch:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="storage"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:set_pipeline:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:scalar:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,destroy:error_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_compound_statement:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,tanh:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,builder_cases:*] - [:x=1;y=1] - expected: FAIL - - [:x=1;y=2] - expected: FAIL - - [:x=2;y=1] - expected: FAIL - - [:x=2;y=2] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,inversesqrt:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:undefined_params:*] - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,saturate:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:corw2:*] - [:memType="atomic_storage";testType="inter_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:depth_stencil_format,copy_buffer_offset:*] - [:format="stencil8";aspect="stencil-only";copyType="CopyB2T"] - expected: FAIL - - [:format="stencil8";aspect="stencil-only";copyType="CopyT2B"] - expected: FAIL - - [:format="stencil8";aspect="stencil-only";copyType="WriteTexture"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only";copyType="CopyB2T"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only";copyType="WriteTexture"] - expected: FAIL - - [:format="depth32float";aspect="depth-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only";copyType="CopyB2T"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only";copyType="WriteTexture"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="depth-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyB2T"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only";copyType="WriteTexture"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,ceil:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:setVertexBuffer_offset_and_attribute_offset:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_compound_assignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,culling_tests:culling:*] - [:frontFace="ccw";cullMode="none"] - expected: FAIL - - [:frontFace="ccw";cullMode="front"] - expected: FAIL - - [:frontFace="ccw";cullMode="back"] - expected: FAIL - - [:frontFace="cw";cullMode="none"] - expected: FAIL - - [:frontFace="cw";cullMode="front"] - expected: FAIL - - [:frontFace="cw";cullMode="back"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_contained_in_stride:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,render,state_tracking:change_pipeline_before_and_after_vertex_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,pipeline,default_layout:getBindGroupLayout_js_object:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texel_data:snorm_texel_data_in_shader:*] - [:format="r8snorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:vector_scalar_compound:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_matrix_multiplication:matrix_matrix:*] - [:inputSource="const";common_dim=2;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=2;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=3;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="const";common_dim=4;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=2;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=3;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="uniform";common_dim=4;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=2;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=3;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="storage_r";common_dim=4;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=2;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=3;x_rows=4;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=2;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=2;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=2;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=3;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=3;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=3;y_cols=4] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=4;y_cols=2] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=4;y_cols=3] - expected: FAIL - - [:inputSource="storage_rw";common_dim=4;x_rows=4;y_cols=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:indirect_buffer_for_dispatch_indirect:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,round:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack2x16float:pack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mappedAtCreation,mapState:*] - [:usageType="invalid";afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";afterUnmap=true;afterDestroy=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:copy_multisampled_depth:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:less_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:destination_texture,format:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8snorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:createBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="underLimit"] - expected: FAIL - - [:limitTest="overDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overDefault";testValueName="underLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMinimum";testValueName="underLimit"] - expected: FAIL - - [:limitTest="atMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMinimum";testValueName="underLimit"] - expected: FAIL - - [:limitTest="underMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underMinimum";testValueName="underLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_param_struct:*] - [:target_stage=""] - expected: FAIL - - [:target_stage="vertex"] - expected: FAIL - - [:target_stage="fragment"] - expected: FAIL - - [:target_stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,identifier:*] - [:isAsync=true;constants={}] - expected: FAIL - - [:isAsync=true;constants={"c0":0}] - expected: FAIL - - [:isAsync=true;constants={"c0":0,"c1":1}] - expected: FAIL - - [:isAsync=true;constants={"c0%5Cu0000":0}] - expected: FAIL - - [:isAsync=true;constants={"c9":0}] - expected: FAIL - - [:isAsync=true;constants={"1":0}] - expected: FAIL - - [:isAsync=true;constants={"c3":0}] - expected: FAIL - - [:isAsync=true;constants={"2":0}] - expected: FAIL - - [:isAsync=true;constants={"1000":0}] - expected: FAIL - - [:isAsync=true;constants={"9999":0}] - expected: FAIL - - [:isAsync=true;constants={"1000":0,"c2":0}] - expected: FAIL - - [:isAsync=true;constants={"%E6%95%B0":0}] - expected: FAIL - - [:isAsync=true;constants={"se%CC%81quen%C3%A7age":0}] - expected: FAIL - - [:isAsync=false;constants={}] - expected: FAIL - - [:isAsync=false;constants={"c0":0}] - expected: FAIL - - [:isAsync=false;constants={"c0":0,"c1":1}] - expected: FAIL - - [:isAsync=false;constants={"c0%5Cu0000":0}] - expected: FAIL - - [:isAsync=false;constants={"c9":0}] - expected: FAIL - - [:isAsync=false;constants={"1":0}] - expected: FAIL - - [:isAsync=false;constants={"c3":0}] - expected: FAIL - - [:isAsync=false;constants={"2":0}] - expected: FAIL - - [:isAsync=false;constants={"1000":0}] - expected: FAIL - - [:isAsync=false;constants={"9999":0}] - expected: FAIL - - [:isAsync=false;constants={"1000":0,"c2":0}] - expected: FAIL - - [:isAsync=false;constants={"%E6%95%B0":0}] - expected: FAIL - - [:isAsync=false;constants={"se%CC%81quen%C3%A7age":0}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createShaderModule:*] - [:stage="VERTEX"] - expected: FAIL - - [:stage="FRAGMENT"] - expected: FAIL - - [:stage="COMPUTE"] - expected: FAIL - - [:stage="VERTEX";awaitLost=true] - expected: FAIL - - [:stage="VERTEX";awaitLost=false] - expected: FAIL - - [:stage="FRAGMENT";awaitLost=true] - expected: FAIL - - [:stage="FRAGMENT";awaitLost=false] - expected: FAIL - - [:stage="COMPUTE";awaitLost=true] - expected: FAIL - - [:stage="COMPUTE";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fwidth:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBuffers:setVertexBuffer,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:copy_out_of_bounds:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:basic:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,write:dimension:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:array_of_vec3:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,initial:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_struct_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:not_valid_on_user_defined_io:*] - [:use_invariant=true] - expected: FAIL - - [:use_invariant=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:resolveQuerySet:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_exp:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_assignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setPipeline:pipeline,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:and_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:viewFormats:*] - [:formatFeature="_undef_";viewFormatFeature="_undef_"] - expected: FAIL - - [:formatFeature="_undef_";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:formatFeature="_undef_";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:formatFeature="depth32float-stencil8";viewFormatFeature="_undef_"] - expected: FAIL - - [:formatFeature="depth32float-stencil8";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:formatFeature="depth32float-stencil8";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:formatFeature="texture-compression-bc";viewFormatFeature="_undef_"] - expected: FAIL - - [:formatFeature="texture-compression-bc";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:formatFeature="texture-compression-bc";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,clear_value:loaded:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupsPerDimension:dispatchWorkgroups,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=0] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=1] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";pipelineType="createComputePipeline";axis=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=0] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=1] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";pipelineType="createComputePipelineAsync";axis=2] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:copyTextureToTexture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:shared_shader_module:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:zero_sized:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_multiple_case:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,1d_texture:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8snorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureDimension:depth:*] - [:texture_type="texture_depth_2d"] - expected: FAIL - - [:texture_type="texture_depth_2d_array"] - expected: FAIL - - [:texture_type="texture_depth_cube"] - expected: FAIL - - [:texture_type="texture_depth_cube_array"] - expected: FAIL - - [:texture_type="texture_depth_multisampled_2d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,multisample_state:alpha_to_coverage,count:*] - [:isAsync=false;alphaToCoverageEnabled=false] - expected: FAIL - - [:isAsync=false;alphaToCoverageEnabled=true] - expected: FAIL - - [:isAsync=true;alphaToCoverageEnabled=false] - expected: FAIL - - [:isAsync=true;alphaToCoverageEnabled=true] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texel_data:unorm_texel_data_in_shader:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:texture_format_compatibility:*] - [:srcFormatFeature="_undef_";dstFormatFeature="_undef_"] - expected: FAIL - - [:srcFormatFeature="_undef_";dstFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:srcFormatFeature="_undef_";dstFormatFeature="texture-compression-bc"] - expected: FAIL - - [:srcFormatFeature="depth32float-stencil8";dstFormatFeature="_undef_"] - expected: FAIL - - [:srcFormatFeature="depth32float-stencil8";dstFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:srcFormatFeature="depth32float-stencil8";dstFormatFeature="texture-compression-bc"] - expected: FAIL - - [:srcFormatFeature="texture-compression-bc";dstFormatFeature="_undef_"] - expected: FAIL - - [:srcFormatFeature="texture-compression-bc";dstFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:srcFormatFeature="texture-compression-bc";dstFormatFeature="texture-compression-bc"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reverseBits:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:sampler_binding,render_pipeline:*] - [:bglType="filtering";bgType="filtering"] - expected: FAIL - - [:bglType="filtering";bgType="non-filtering"] - expected: FAIL - - [:bglType="filtering";bgType="comparison"] - expected: FAIL - - [:bglType="non-filtering";bgType="filtering"] - expected: FAIL - - [:bglType="non-filtering";bgType="non-filtering"] - expected: FAIL - - [:bglType="non-filtering";bgType="comparison"] - expected: FAIL - - [:bglType="comparison";bgType="filtering"] - expected: FAIL - - [:bglType="comparison";bgType="non-filtering"] - expected: FAIL - - [:bglType="comparison";bgType="comparison"] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texel_data:sint_texel_data_in_shader:*] - [:format="r8sint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:scalar:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:buffer_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_builtin_fn_args:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:vertex:*] - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint=""] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000a"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%20"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="ma%20in"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cn"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mian";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mian";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mainmain";stageEntryPoint="mainmain"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mainmain";stageEntryPoint="foo"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V3"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V5"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="_main_t12V3"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="s%C3%A9quen%C3%A7age"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="se%CC%81quen%C3%A7age"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint=""] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000a"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%20"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="ma%20in"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cn"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mian";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mian";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mainmain";stageEntryPoint="mainmain"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mainmain";stageEntryPoint="foo"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V3"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V5"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="_main_t12V3"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="s%C3%A9quen%C3%A7age"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="se%CC%81quen%C3%A7age"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec2_element_decrement:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_exp:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,degrees:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,extractBits:i32:*] - [:inputSource="const";width=1] - expected: FAIL - - [:inputSource="const";width=2] - expected: FAIL - - [:inputSource="const";width=3] - expected: FAIL - - [:inputSource="const";width=4] - expected: FAIL - - [:inputSource="uniform";width=1] - expected: FAIL - - [:inputSource="uniform";width=2] - expected: FAIL - - [:inputSource="uniform";width=3] - expected: FAIL - - [:inputSource="uniform";width=4] - expected: FAIL - - [:inputSource="storage_r";width=1] - expected: FAIL - - [:inputSource="storage_r";width=2] - expected: FAIL - - [:inputSource="storage_r";width=3] - expected: FAIL - - [:inputSource="storage_r";width=4] - expected: FAIL - - [:inputSource="storage_rw";width=1] - expected: FAIL - - [:inputSource="storage_rw";width=2] - expected: FAIL - - [:inputSource="storage_rw";width=3] - expected: FAIL - - [:inputSource="storage_rw";width=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:corr:*] - [:memType="atomic_storage";testType="inter_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="inter_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup";extraFlags="rmw_variant"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,create:limit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:struct_member:*] - [:member_offset=0;type="u32";stride=4] - expected: FAIL - - [:member_offset=0;type="i32";stride=4] - expected: FAIL - - [:member_offset=0;type="f32";stride=4] - expected: FAIL - - [:member_offset=0;type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:member_offset=0;type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:member_offset=0;type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:member_offset=0;type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=0;type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=0;type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:member_offset=0;type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:member_offset=0;type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:member_offset=0;type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=0;type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:member_offset=0;type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:member_offset=0;type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:member_offset=0;type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:member_offset=0;type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:member_offset=0;type="ElemStruct";stride=4] - expected: FAIL - - [:member_offset=0;type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:member_offset=0;type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - [:member_offset=4;type="u32";stride=4] - expected: FAIL - - [:member_offset=4;type="i32";stride=4] - expected: FAIL - - [:member_offset=4;type="f32";stride=4] - expected: FAIL - - [:member_offset=4;type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:member_offset=4;type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:member_offset=4;type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:member_offset=4;type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=4;type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=4;type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:member_offset=4;type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:member_offset=4;type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:member_offset=4;type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=4;type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:member_offset=4;type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:member_offset=4;type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:member_offset=4;type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:member_offset=4;type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:member_offset=4;type="ElemStruct";stride=4] - expected: FAIL - - [:member_offset=4;type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:member_offset=4;type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - [:member_offset=20;type="u32";stride=4] - expected: FAIL - - [:member_offset=20;type="i32";stride=4] - expected: FAIL - - [:member_offset=20;type="f32";stride=4] - expected: FAIL - - [:member_offset=20;type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:member_offset=20;type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:member_offset=20;type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:member_offset=20;type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=20;type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=20;type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:member_offset=20;type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:member_offset=20;type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:member_offset=20;type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:member_offset=20;type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:member_offset=20;type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:member_offset=20;type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:member_offset=20;type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:member_offset=20;type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:member_offset=20;type="ElemStruct";stride=4] - expected: FAIL - - [:member_offset=20;type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:member_offset=20;type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,attribute:expressions:*] - [:value="val";attribute="align"] - expected: FAIL - - [:value="val";attribute="binding"] - expected: FAIL - - [:value="val";attribute="group"] - expected: FAIL - - [:value="val";attribute="id"] - expected: FAIL - - [:value="val";attribute="location"] - expected: FAIL - - [:value="val";attribute="size"] - expected: FAIL - - [:value="val";attribute="workgroup_size"] - expected: FAIL - - [:value="expr";attribute="align"] - expected: FAIL - - [:value="expr";attribute="binding"] - expected: FAIL - - [:value="expr";attribute="group"] - expected: FAIL - - [:value="expr";attribute="id"] - expected: FAIL - - [:value="expr";attribute="location"] - expected: FAIL - - [:value="expr";attribute="size"] - expected: FAIL - - [:value="expr";attribute="workgroup_size"] - expected: FAIL - - [:value="override";attribute="align"] - expected: FAIL - - [:value="override";attribute="binding"] - expected: FAIL - - [:value="override";attribute="group"] - expected: FAIL - - [:value="override";attribute="id"] - expected: FAIL - - [:value="override";attribute="location"] - expected: FAIL - - [:value="override";attribute="size"] - expected: FAIL - - [:value="override";attribute="workgroup_size"] - expected: FAIL - - [:value="user_func";attribute="align"] - expected: FAIL - - [:value="user_func";attribute="binding"] - expected: FAIL - - [:value="user_func";attribute="group"] - expected: FAIL - - [:value="user_func";attribute="id"] - expected: FAIL - - [:value="user_func";attribute="location"] - expected: FAIL - - [:value="user_func";attribute="size"] - expected: FAIL - - [:value="user_func";attribute="workgroup_size"] - expected: FAIL - - [:value="const_func";attribute="align"] - expected: FAIL - - [:value="const_func";attribute="binding"] - expected: FAIL - - [:value="const_func";attribute="group"] - expected: FAIL - - [:value="const_func";attribute="id"] - expected: FAIL - - [:value="const_func";attribute="location"] - expected: FAIL - - [:value="const_func";attribute="size"] - expected: FAIL - - [:value="const_func";attribute="workgroup_size"] - expected: FAIL - - [:value="const";attribute="align"] - expected: FAIL - - [:value="const";attribute="binding"] - expected: FAIL - - [:value="const";attribute="group"] - expected: FAIL - - [:value="const";attribute="id"] - expected: FAIL - - [:value="const";attribute="location"] - expected: FAIL - - [:value="const";attribute="size"] - expected: FAIL - - [:value="const";attribute="workgroup_size"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:identifier,vertex:*] - [:isAsync=true;vertexConstants={}] - expected: FAIL - - [:isAsync=true;vertexConstants={"x":1,"y":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"1":1,"1000":1,"x":1,"y":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"x%5Cu0000":1,"y":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"xxx":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"1":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"2":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"z":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"w":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"1":1,"z":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"%E6%95%B0":1}] - expected: FAIL - - [:isAsync=true;vertexConstants={"se%CC%81quen%C3%A7age":0}] - expected: FAIL - - [:isAsync=false;vertexConstants={}] - expected: FAIL - - [:isAsync=false;vertexConstants={"x":1,"y":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"1":1,"1000":1,"x":1,"y":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"x%5Cu0000":1,"y":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"xxx":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"1":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"2":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"z":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"w":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"1":1,"z":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"%E6%95%B0":1}] - expected: FAIL - - [:isAsync=false;vertexConstants={"se%CC%81quen%C3%A7age":0}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,create:size:*] - [:mappedAtCreation=false] - expected: FAIL - - [:mappedAtCreation=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_right_vec_size_mismatch:*] - [:vectorize_lhs=2;vectorize_rhs=2] - expected: FAIL - - [:vectorize_lhs=2;vectorize_rhs=3] - expected: FAIL - - [:vectorize_lhs=2;vectorize_rhs=4] - expected: FAIL - - [:vectorize_lhs=3;vectorize_rhs=2] - expected: FAIL - - [:vectorize_lhs=3;vectorize_rhs=3] - expected: FAIL - - [:vectorize_lhs=3;vectorize_rhs=4] - expected: FAIL - - [:vectorize_lhs=4;vectorize_rhs=2] - expected: FAIL - - [:vectorize_lhs=4;vectorize_rhs=3] - expected: FAIL - - [:vectorize_lhs=4;vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginComputePass:timestampWrites,query_set_type:*] - [:queryType="occlusion"] - expected: FAIL - - [:queryType="timestamp"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:mipLevelCount,bound_check:*] - [:format="rgba8unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:vertex_buffer_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,weak:message_passing:*] - [:memType="atomic_workgroup"] - expected: FAIL - - [:memType="atomic_storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_offset_oob:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:copyBufferToTexture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:depth_stencil_attachment,loadOp_storeOp_match_depthReadOnly_stencilReadOnly:*] - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blend_constant,setting:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:call_after_successful_finish:*] - [:callCmd="beginComputePass"] - expected: FAIL - - [:callCmd="beginRenderPass"] - expected: FAIL - - [:callCmd="insertDebugMarker"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limits,supported:*] - [:limit="maxInterStageShaderVariables"] - expected: FAIL - - [:limit="maxColorAttachments"] - expected: FAIL - - [:limit="maxColorAttachmentBytesPerSample"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,debug:debug_marker:*] - [:encoderType="non-pass"] - expected: FAIL - - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:validate,greaterThanOrEqualTo32:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,labels:wrappers_do_not_share_labels:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAgain:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeInvocationsPerWorkgroup:createComputePipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange:*] - [:SC="storage";T="i32"] - expected: FAIL - - [:SC="storage";T="u32"] - expected: FAIL - - [:SC="uniform";T="i32"] - expected: FAIL - - [:SC="uniform";T="u32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec2f_to_vec4h:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMax:max_storage:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,barrier:workgroup_barrier_store_store:*] - [:memType="non_atomic_storage"] - expected: FAIL - - [:memType="non_atomic_workgroup"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:depth_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_increment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_scalar_multiplication:matrix_scalar:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_case_break:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,call:call_repeated:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,insertBits:integer:*] - [:inputSource="const";signed=false;width=1] - expected: FAIL - - [:inputSource="const";signed=false;width=2] - expected: FAIL - - [:inputSource="const";signed=false;width=3] - expected: FAIL - - [:inputSource="const";signed=false;width=4] - expected: FAIL - - [:inputSource="const";signed=true;width=1] - expected: FAIL - - [:inputSource="const";signed=true;width=2] - expected: FAIL - - [:inputSource="const";signed=true;width=3] - expected: FAIL - - [:inputSource="const";signed=true;width=4] - expected: FAIL - - [:inputSource="uniform";signed=false;width=1] - expected: FAIL - - [:inputSource="uniform";signed=false;width=2] - expected: FAIL - - [:inputSource="uniform";signed=false;width=3] - expected: FAIL - - [:inputSource="uniform";signed=false;width=4] - expected: FAIL - - [:inputSource="uniform";signed=true;width=1] - expected: FAIL - - [:inputSource="uniform";signed=true;width=2] - expected: FAIL - - [:inputSource="uniform";signed=true;width=3] - expected: FAIL - - [:inputSource="uniform";signed=true;width=4] - expected: FAIL - - [:inputSource="storage_r";signed=false;width=1] - expected: FAIL - - [:inputSource="storage_r";signed=false;width=2] - expected: FAIL - - [:inputSource="storage_r";signed=false;width=3] - expected: FAIL - - [:inputSource="storage_r";signed=false;width=4] - expected: FAIL - - [:inputSource="storage_r";signed=true;width=1] - expected: FAIL - - [:inputSource="storage_r";signed=true;width=2] - expected: FAIL - - [:inputSource="storage_r";signed=true;width=3] - expected: FAIL - - [:inputSource="storage_r";signed=true;width=4] - expected: FAIL - - [:inputSource="storage_rw";signed=false;width=1] - expected: FAIL - - [:inputSource="storage_rw";signed=false;width=2] - expected: FAIL - - [:inputSource="storage_rw";signed=false;width=3] - expected: FAIL - - [:inputSource="storage_rw";signed=false;width=4] - expected: FAIL - - [:inputSource="storage_rw";signed=true;width=1] - expected: FAIL - - [:inputSource="storage_rw";signed=true;width=2] - expected: FAIL - - [:inputSource="storage_rw";signed=true;width=3] - expected: FAIL - - [:inputSource="storage_rw";signed=true;width=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,basic:fullscreen_quad:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_f32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:interpolation_sampling:*] - [:isAsync=false;output="%40interpolate(perspective)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective)";input="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective)";input="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(linear,%20center)";input="%40interpolate(linear)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(flat)";input="%40interpolate(flat)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective,%20center)";input="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective,%20center)";input="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:isAsync=false;output="%40interpolate(perspective,%20centroid)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective)";input="%40interpolate(perspective)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective)";input="%40interpolate(perspective,%20center)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective)";input="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(linear,%20center)";input="%40interpolate(linear)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(flat)";input="%40interpolate(flat)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective,%20center)";input="%40interpolate(perspective,%20sample)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective,%20center)";input="%40interpolate(perspective,%20centroid)"] - expected: FAIL - - [:isAsync=true;output="%40interpolate(perspective,%20centroid)";input="%40interpolate(perspective)"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,format_reinterpretation:render_and_resolve_attachment:*] - [:format="rgba8unorm";viewFormat="rgba8unorm-srgb";sampleCount=1] - expected: FAIL - - [:format="rgba8unorm";viewFormat="rgba8unorm-srgb";sampleCount=4] - expected: FAIL - - [:format="rgba8unorm-srgb";viewFormat="rgba8unorm";sampleCount=1] - expected: FAIL - - [:format="rgba8unorm-srgb";viewFormat="rgba8unorm";sampleCount=4] - expected: FAIL - - [:format="bgra8unorm";viewFormat="bgra8unorm-srgb";sampleCount=1] - expected: FAIL - - [:format="bgra8unorm";viewFormat="bgra8unorm-srgb";sampleCount=4] - expected: FAIL - - [:format="bgra8unorm-srgb";viewFormat="bgra8unorm";sampleCount=1] - expected: FAIL - - [:format="bgra8unorm-srgb";viewFormat="bgra8unorm";sampleCount=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_3d_coords:*] - [:texture_type="texture_3d"] - expected: FAIL - - [:texture_type="texture_cube"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:copy_multisampled_color:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:canvas_configuration:*] - [:format="depth32float-stencil8";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="depth32float-stencil8";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-unorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-unorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-snorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-snorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-snorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-snorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-unorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-unorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-snorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-snorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-snorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-snorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-float";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-float";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-float";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-float";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11snorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11snorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11snorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11snorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm-srgb";canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm-srgb";canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:createTexture,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:sampled_3d_coords:*] - [:texture_type="texture_3d"] - expected: FAIL - - [:texture_type="texture_cube"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:vertex_buffer_OOB:*] - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="draw";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexed";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="zero";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="exile";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="zero";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="exile";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=false;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=false;AStride="oversize";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="zero";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="exact";offset=7] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=0] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=1] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=2] - expected: FAIL - - [:type="drawIndexedIndirect";VBSize="enough";IBSize="enough";VStride0=true;IStride0=true;AStride="oversize";offset=7] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:usage:*] - [:method="CopyB2T"] - expected: FAIL - - [:method="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_u32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,bgra8unorm_storage:create_shader_module_without_bgra8unorm_storage:*] - [:shaderType="fragment"] - expected: FAIL - - [:shaderType="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:binding_count_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_assignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,loop:nested_loops:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:module_scope_single:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:unmap,state,unmapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:empty_bundle_list:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipelineLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,indirect_draw:basics:*] - [:isIndexed=true] - expected: FAIL - - [:isIndexed=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:numeric_id:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicSub:sub_workgroup:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:first_query_and_query_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyBufferToBuffer:single:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:switch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop_continue:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:getCurrentTexture,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";canvasType="offscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";canvasType="onscreen"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:texture,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,writeTexture,2d,compressed_format:*] - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc1-rgba-unorm";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumLevels:depth:*] - [:texture_type="texture_depth_2d"] - expected: FAIL - - [:texture_type="texture_depth_2d_array"] - expected: FAIL - - [:texture_type="texture_depth_cube"] - expected: FAIL - - [:texture_type="texture_depth_cube_array"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:stage_inout:*] - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;target_stage="compute";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="vertex";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="vertex";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="fragment";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="fragment";target_io="out"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="compute";target_io="in"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;target_stage="compute";target_io="out"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureDimension:storage:*] - [:texel_format="rgba8unorm"] - expected: FAIL - - [:texel_format="rgba8snorm"] - expected: FAIL - - [:texel_format="rgba8uint"] - expected: FAIL - - [:texel_format="rgba8sint"] - expected: FAIL - - [:texel_format="rgba16uint"] - expected: FAIL - - [:texel_format="rgba16sint"] - expected: FAIL - - [:texel_format="rgba16float"] - expected: FAIL - - [:texel_format="r32uint"] - expected: FAIL - - [:texel_format="r32sint"] - expected: FAIL - - [:texel_format="r32float"] - expected: FAIL - - [:texel_format="rg32uint"] - expected: FAIL - - [:texel_format="rg32sint"] - expected: FAIL - - [:texel_format="rg32float"] - expected: FAIL - - [:texel_format="rgba32uint"] - expected: FAIL - - [:texel_format="rgba32sint"] - expected: FAIL - - [:texel_format="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,programmable,state_tracking:bind_group_multiple_sets:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_right_concrete:*] - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:missing_attribute_on_return_type_struct:*] - [:target_stage=""] - expected: FAIL - - [:target_stage="vertex"] - expected: FAIL - - [:target_stage="fragment"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:struct_implicit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,blankspace:blankspace:*] - [:blankspace=["%20","space"\]] - expected: FAIL - - [:blankspace=["%5Ct","horizontal_tab"\]] - expected: FAIL - - [:blankspace=["%5Cn","line_feed"\]] - expected: FAIL - - [:blankspace=["%5Cu000b","vertical_tab"\]] - expected: FAIL - - [:blankspace=["%5Cf","form_feed"\]] - expected: FAIL - - [:blankspace=["%5Cr","carriage_return"\]] - expected: FAIL - - [:blankspace=["%C2%85","next_line"\]] - expected: FAIL - - [:blankspace=["%E2%80%8E","left_to_right_mark"\]] - expected: FAIL - - [:blankspace=["%E2%80%8F","right_to_left_mark"\]] - expected: FAIL - - [:blankspace=["%E2%80%A8","line_separator"\]] - expected: FAIL - - [:blankspace=["%E2%80%A9","paragraph_separator"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompareLevel:control_flow:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,u32_conversion:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:less_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:fragment_builtin_values:*] - [:builtin="position";type="vec4%3Cf32%3E"] - expected: FAIL - - [:builtin="front_facing";type="bool"] - expected: FAIL - - [:builtin="sample_index";type="u32"] - expected: FAIL - - [:builtin="sample_mask";type="u32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,loop:loop_break:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,index_format:index_format,setIndexBuffer_before_setPipeline:*] - [:setIndexBufferBeforeSetPipeline=false] - expected: FAIL - - [:setIndexBufferBeforeSetPipeline=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:unmap,state,mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,render,state_tracking:set_vertex_buffer_without_changing_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeY:createComputePipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_buffer_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,weak:read:*] - [:memType="atomic_workgroup"] - expected: FAIL - - [:memType="atomic_storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cosh:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,write:*] - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="minimal"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_shader_type_matches_attribute_format:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,color_attachment_only:*] - [:colorFormat="r8unorm";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r8unorm";storeOperation="store"] - expected: FAIL - - [:colorFormat="r8uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r8uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="r8sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r8sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg8unorm";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg8unorm";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg8uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg8uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg8sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg8sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba8unorm";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba8unorm";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba8unorm-srgb";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba8unorm-srgb";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba8uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba8uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba8sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba8sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="bgra8unorm";storeOperation="discard"] - expected: FAIL - - [:colorFormat="bgra8unorm";storeOperation="store"] - expected: FAIL - - [:colorFormat="bgra8unorm-srgb";storeOperation="discard"] - expected: FAIL - - [:colorFormat="bgra8unorm-srgb";storeOperation="store"] - expected: FAIL - - [:colorFormat="r16uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r16uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="r16sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r16sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="r16float";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r16float";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg16uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg16uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg16sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg16sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg16float";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg16float";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba16uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba16uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba16sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba16sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba16float";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba16float";storeOperation="store"] - expected: FAIL - - [:colorFormat="r32uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r32uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="r32sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r32sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="r32float";storeOperation="discard"] - expected: FAIL - - [:colorFormat="r32float";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg32uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg32uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg32sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg32sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rg32float";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rg32float";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba32uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba32uint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba32sint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba32sint";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgba32float";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgba32float";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgb10a2unorm";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgb10a2unorm";storeOperation="store"] - expected: FAIL - - [:colorFormat="rgb10a2uint";storeOperation="discard"] - expected: FAIL - - [:colorFormat="rgb10a2uint";storeOperation="store"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,draw:default_arguments:*] - [:mode="draw"] - expected: FAIL - - [:mode="drawIndexed"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:indirect_dispatch_buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:mip_levels:*] - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth:reverse_depth:*] - [:reversed=false] - expected: FAIL - - [:reversed=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:2d_array_constructor:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:copy_within_same_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:resolve_buffer_oob:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blending,formats:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:offset_and_size_oob:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,weak:2_plus_2_write:*] - [:memType="atomic_workgroup"] - expected: FAIL - - [:memType="atomic_storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:vertex_parsing:*] - [:val=""] - expected: FAIL - - [:val="%40vertex"] - expected: FAIL - - [:val="%40%5Ctvertex"] - expected: FAIL - - [:val="%40%2F%5Ecomment%5E%2Fvertex"] - expected: FAIL - - [:val="%40mvertex"] - expected: FAIL - - [:val="%40vertex()"] - expected: FAIL - - [:val="%40vertex%20)"] - expected: FAIL - - [:val="%40vertex("] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch_default:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,render,state_tracking:set_vertex_buffer_but_not_used_in_draw:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,depth_stencil_attachment_and_bind_group:*] - [:dsLevel=0;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=0;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=0;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=0;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=1;bgLayer=1;bgLayerCount=2] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=0;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=1] - expected: FAIL - - [:dsLevel=1;dsLayer=1;bgLevel=1;bgLevelCount=2;bgLayer=1;bgLayerCount=2] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:max_dynamic_buffers:*] - [:type="uniform"] - expected: FAIL - - [:type="storage"] - expected: FAIL - - [:type="read-only-storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:default:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_ranges:*] - [:dimension="1d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="2d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":1,"y":0,"z":0,"width":-1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":1,"z":0,"width":0,"height":-1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":1,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":1,"height":0,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":1,"depthOrArrayLayers":-2};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":1};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":0,"width":0,"height":0,"depthOrArrayLayers":0};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":1,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=0;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=1;dstCopyLevel=3] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=0] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=1] - expected: FAIL - - [:dimension="3d";copyBoxOffsets={"x":0,"y":0,"z":2,"width":0,"height":0,"depthOrArrayLayers":-1};srcCopyLevel=3;dstCopyLevel=3] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,smoothstep:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_vec2h:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,read:*] - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="minimal"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_3d_coords:*] - [:texture_type="texture_depth_cube"] - expected: FAIL - - [:texture_type="texture_depth_cube_array"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,step:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:destination_texture,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_let_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_increment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:if:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,invalidBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicSub:sub_storage:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGatherCompare:sampled_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:identifiers:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstLeadingBit:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_failOp_operation:*] - [:format="stencil8";failOp="keep";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="zero";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="replace";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="invert";initialStencil=240] - expected: FAIL - - [:format="stencil8";failOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="stencil8";failOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="stencil8";failOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="stencil8";failOp="decrement-wrap";initialStencil=2] - expected: FAIL - - [:format="stencil8";failOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="stencil8";failOp="decrement-wrap";initialStencil=0] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="keep";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="zero";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="replace";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="invert";initialStencil=240] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="decrement-wrap";initialStencil=2] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";failOp="decrement-wrap";initialStencil=0] - expected: FAIL - - [:format="depth32float-stencil8";failOp="keep";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="zero";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="replace";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="invert";initialStencil=240] - expected: FAIL - - [:format="depth32float-stencil8";failOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="depth32float-stencil8";failOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="depth32float-stencil8";failOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="depth32float-stencil8";failOp="decrement-wrap";initialStencil=2] - expected: FAIL - - [:format="depth32float-stencil8";failOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";failOp="decrement-wrap";initialStencil=0] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_u32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:color_target_exists:*] - [:isAsync=false] - expected: FAIL - - [:isAsync=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:ww:*] - [:boundary="queue-op";writeOps=["write-buffer","write-buffer"\];contexts=["queue","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","b2b-copy"\];contexts=["queue","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","t2b-copy"\];contexts=["queue","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["compute-pass-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-pass-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-bundle-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="pass";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="dispatch";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_buffer_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_decrement_underflow:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:query_set_buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBufferBindingSize:createBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:source_canvas,state:*] - [:state="nocontext"] - expected: FAIL - - [:state="placeholder-nocontext"] - expected: FAIL - - [:state="placeholder-hascontext"] - expected: FAIL - - [:state="valid"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,sample_mask:fragment_output_mask:*] - [:interpolated=false;sampleCount=1;rasterizationMask=0] - expected: FAIL - - [:interpolated=false;sampleCount=1;rasterizationMask=1] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=0] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=1] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=2] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=3] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=4] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=5] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=6] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=7] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=8] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=9] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=10] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=11] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=12] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=13] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=14] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=15] - expected: FAIL - - [:interpolated=true;sampleCount=1;rasterizationMask=0] - expected: FAIL - - [:interpolated=true;sampleCount=1;rasterizationMask=1] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=0] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=1] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=2] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=3] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=4] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=5] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=6] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=7] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=8] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=9] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=10] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=11] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=12] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=13] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=14] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=15] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:offscreenCanvas,snapshot:*] - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="convertToBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="convertToBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="convertToBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="convertToBlob"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="srgb";snapshotType="imageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="convertToBlob"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="transferToImageBitmap"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";colorSpace="display-p3";snapshotType="imageBitmap"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createPipelineLayout:number_of_bind_group_layouts_exceeds_the_maximum_value:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store:*] - [:SC="storage";T="i32"] - expected: FAIL - - [:SC="storage";T="u32"] - expected: FAIL - - [:SC="uniform";T="i32"] - expected: FAIL - - [:SC="uniform";T="u32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:type:*] - [:isAsync=false;output="f32";input="f32"] - expected: FAIL - - [:isAsync=false;output="f32";input="vec2%3Cf32%3E"] - expected: FAIL - - [:isAsync=false;output="i32";input="f32"] - expected: FAIL - - [:isAsync=false;output="i32";input="u32"] - expected: FAIL - - [:isAsync=false;output="u32";input="f32"] - expected: FAIL - - [:isAsync=false;output="u32";input="i32"] - expected: FAIL - - [:isAsync=false;output="vec2%3Cf32%3E";input="vec2%3Cf32%3E"] - expected: FAIL - - [:isAsync=false;output="vec2%3Cf32%3E";input="vec3%3Cf32%3E"] - expected: FAIL - - [:isAsync=false;output="vec2%3Cf32%3E";input="f32"] - expected: FAIL - - [:isAsync=false;output="vec3%3Cf32%3E";input="vec2%3Cf32%3E"] - expected: FAIL - - [:isAsync=true;output="f32";input="f32"] - expected: FAIL - - [:isAsync=true;output="f32";input="vec2%3Cf32%3E"] - expected: FAIL - - [:isAsync=true;output="i32";input="f32"] - expected: FAIL - - [:isAsync=true;output="i32";input="u32"] - expected: FAIL - - [:isAsync=true;output="u32";input="f32"] - expected: FAIL - - [:isAsync=true;output="u32";input="i32"] - expected: FAIL - - [:isAsync=true;output="vec2%3Cf32%3E";input="vec2%3Cf32%3E"] - expected: FAIL - - [:isAsync=true;output="vec2%3Cf32%3E";input="vec3%3Cf32%3E"] - expected: FAIL - - [:isAsync=true;output="vec2%3Cf32%3E";input="f32"] - expected: FAIL - - [:isAsync=true;output="vec3%3Cf32%3E";input="vec2%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,builtin:parse:*] - [:builtin="pos"] - expected: FAIL - - [:builtin="trailing_comma"] - expected: FAIL - - [:builtin="newline_in_attr"] - expected: FAIL - - [:builtin="whitespace_in_attr"] - expected: FAIL - - [:builtin="invalid_name"] - expected: FAIL - - [:builtin="no_params"] - expected: FAIL - - [:builtin="missing_param"] - expected: FAIL - - [:builtin="missing_parens"] - expected: FAIL - - [:builtin="missing_lparen"] - expected: FAIL - - [:builtin="missing_rparen"] - expected: FAIL - - [:builtin="multiple_params"] - expected: FAIL - - [:builtin="ident_param"] - expected: FAIL - - [:builtin="number_param"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_right_concrete_compound:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexBufferArrayStride:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,index_access:out_of_bounds:*] - [:indexCount=6;firstIndex=0;instanceCount=1] - expected: FAIL - - [:indexCount=6;firstIndex=0;instanceCount=10000] - expected: FAIL - - [:indexCount=6;firstIndex=1;instanceCount=1] - expected: FAIL - - [:indexCount=6;firstIndex=1;instanceCount=10000] - expected: FAIL - - [:indexCount=6;firstIndex=10000;instanceCount=1] - expected: FAIL - - [:indexCount=6;firstIndex=10000;instanceCount=10000] - expected: FAIL - - [:indexCount=5;firstIndex=1;instanceCount=1] - expected: FAIL - - [:indexCount=5;firstIndex=1;instanceCount=10000] - expected: FAIL - - [:indexCount=1;firstIndex=5;instanceCount=1] - expected: FAIL - - [:indexCount=1;firstIndex=5;instanceCount=10000] - expected: FAIL - - [:indexCount=1;firstIndex=6;instanceCount=1] - expected: FAIL - - [:indexCount=1;firstIndex=6;instanceCount=10000] - expected: FAIL - - [:indexCount=0;firstIndex=6;instanceCount=1] - expected: FAIL - - [:indexCount=0;firstIndex=6;instanceCount=10000] - expected: FAIL - - [:indexCount=0;firstIndex=7;instanceCount=1] - expected: FAIL - - [:indexCount=0;firstIndex=7;instanceCount=10000] - expected: FAIL - - [:indexCount=7;firstIndex=0;instanceCount=1] - expected: FAIL - - [:indexCount=7;firstIndex=0;instanceCount=10000] - expected: FAIL - - [:indexCount=10000;firstIndex=0;instanceCount=1] - expected: FAIL - - [:indexCount=10000;firstIndex=0;instanceCount=10000] - expected: FAIL - - [:indexCount=4294967295;firstIndex=4294967295;instanceCount=1] - expected: FAIL - - [:indexCount=4294967295;firstIndex=4294967295;instanceCount=10000] - expected: FAIL - - [:indexCount=4294967295;firstIndex=2;instanceCount=1] - expected: FAIL - - [:indexCount=4294967295;firstIndex=2;instanceCount=10000] - expected: FAIL - - [:indexCount=2;firstIndex=4294967295;instanceCount=1] - expected: FAIL - - [:indexCount=2;firstIndex=4294967295;instanceCount=10000] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:rw:*] - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"render-pass-encoder"};write={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"render-pass-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"render-pass-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"render-bundle-encoder"};write={"op":"write-texture","in":"queue"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"render-bundle-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";read={"op":"sample","in":"render-bundle-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2b-copy","in":"command-encoder"};write={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"storage","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"t2t-copy","in":"command-encoder"};write={"op":"storage","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"attachment-store","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"attachment-resolve","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"render-pass-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"render-pass-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"render-bundle-encoder"};write={"op":"b2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";read={"op":"sample","in":"render-bundle-encoder"};write={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="pass";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="dispatch";read={"op":"sample","in":"compute-pass-encoder"};write={"op":"storage","in":"compute-pass-encoder"}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:store_1d_coords:*] - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,determinant:abstract_float:*] - [:inputSource="const";dimension=2] - expected: FAIL - - [:inputSource="const";dimension=3] - expected: FAIL - - [:inputSource="const";dimension=4] - expected: FAIL - - [:inputSource="uniform";dimension=2] - expected: FAIL - - [:inputSource="uniform";dimension=3] - expected: FAIL - - [:inputSource="uniform";dimension=4] - expected: FAIL - - [:inputSource="storage_r";dimension=2] - expected: FAIL - - [:inputSource="storage_r";dimension=3] - expected: FAIL - - [:inputSource="storage_r";dimension=4] - expected: FAIL - - [:inputSource="storage_rw";dimension=2] - expected: FAIL - - [:inputSource="storage_rw";dimension=3] - expected: FAIL - - [:inputSource="storage_rw";dimension=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:two_dispatches_in_the_same_compute_pass:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,writeTexture,2d,uncompressed_format:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8snorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - [:format="r8unorm";awaitLost=true] - expected: FAIL - - [:format="r8unorm";awaitLost=false] - expected: FAIL - - [:format="r8snorm";awaitLost=true] - expected: FAIL - - [:format="r8snorm";awaitLost=false] - expected: FAIL - - [:format="r8uint";awaitLost=true] - expected: FAIL - - [:format="r8uint";awaitLost=false] - expected: FAIL - - [:format="r8sint";awaitLost=true] - expected: FAIL - - [:format="r8sint";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";awaitLost=false] - expected: FAIL - - [:format="rg8uint";awaitLost=true] - expected: FAIL - - [:format="rg8uint";awaitLost=false] - expected: FAIL - - [:format="rg8sint";awaitLost=true] - expected: FAIL - - [:format="rg8sint";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="r16uint";awaitLost=true] - expected: FAIL - - [:format="r16uint";awaitLost=false] - expected: FAIL - - [:format="r16sint";awaitLost=true] - expected: FAIL - - [:format="r16sint";awaitLost=false] - expected: FAIL - - [:format="r16float";awaitLost=true] - expected: FAIL - - [:format="r16float";awaitLost=false] - expected: FAIL - - [:format="rg16uint";awaitLost=true] - expected: FAIL - - [:format="rg16uint";awaitLost=false] - expected: FAIL - - [:format="rg16sint";awaitLost=true] - expected: FAIL - - [:format="rg16sint";awaitLost=false] - expected: FAIL - - [:format="rg16float";awaitLost=true] - expected: FAIL - - [:format="rg16float";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";awaitLost=false] - expected: FAIL - - [:format="rgba16float";awaitLost=true] - expected: FAIL - - [:format="rgba16float";awaitLost=false] - expected: FAIL - - [:format="r32uint";awaitLost=true] - expected: FAIL - - [:format="r32uint";awaitLost=false] - expected: FAIL - - [:format="r32sint";awaitLost=true] - expected: FAIL - - [:format="r32sint";awaitLost=false] - expected: FAIL - - [:format="r32float";awaitLost=true] - expected: FAIL - - [:format="r32float";awaitLost=false] - expected: FAIL - - [:format="rg32uint";awaitLost=true] - expected: FAIL - - [:format="rg32uint";awaitLost=false] - expected: FAIL - - [:format="rg32sint";awaitLost=true] - expected: FAIL - - [:format="rg32sint";awaitLost=false] - expected: FAIL - - [:format="rg32float";awaitLost=true] - expected: FAIL - - [:format="rg32float";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";awaitLost=false] - expected: FAIL - - [:format="rgba32float";awaitLost=true] - expected: FAIL - - [:format="rgba32float";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";awaitLost=false] - expected: FAIL - - [:format="rg11b10ufloat";awaitLost=true] - expected: FAIL - - [:format="rg11b10ufloat";awaitLost=false] - expected: FAIL - - [:format="rgb9e5ufloat";awaitLost=true] - expected: FAIL - - [:format="rgb9e5ufloat";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:multiplication_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:stencil_test:*] - [:isAsync=false;format="stencil8";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="never"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="less"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="greater"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="front";compare="always"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="never"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="less"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="greater"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";face="back";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="front";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";face="back";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="front";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";face="back";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="front";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";face="back";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="front";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";face="back";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="front";compare="always"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="never"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="less"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="greater"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";face="back";compare="always"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="never"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="less"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="greater"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="front";compare="always"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="never"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="less"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="greater"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";face="back";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="front";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";face="back";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="front";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";face="back";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="front";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";face="back";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="front";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";face="back";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="front";compare="always"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="_undef_"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="never"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="less"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="greater"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";face="back";compare="always"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,loop:loop_continue:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,align:required_alignment:*] - [:address_space="storage";align=1;type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=1;type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=2;type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align="alignment";type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="storage";align=32;type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=1;type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=2;type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align="alignment";type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"i32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"u32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"f32","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"atomic%3Ci32%3E","storage":4,"uniform":4}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"vec2%3Ci32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"vec3%3Cu32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"vec4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat2x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat3x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat4x2%3Cf32%3E","storage":8,"uniform":8}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat2x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat3x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat4x3%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat2x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat3x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"mat4x4%3Cf32%3E","storage":16,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"array%3Cvec2%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"array%3Cvec4%3Ci32%3E,%202%3E","storage":8,"uniform":16}] - expected: FAIL - - [:address_space="uniform";align=32;type={"name":"S","storage":8,"uniform":16}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dpdx:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompareLevel:arrayed_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setViewport,xy_rect_contained_in_attachment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyBufferToBuffer:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:texture_must_have_correct_dimension:*] - [:usage=4;viewDimension="1d"] - expected: FAIL - - [:usage=4;viewDimension="2d"] - expected: FAIL - - [:usage=4;viewDimension="2d-array"] - expected: FAIL - - [:usage=4;viewDimension="cube"] - expected: FAIL - - [:usage=4;viewDimension="cube-array"] - expected: FAIL - - [:usage=4;viewDimension="3d"] - expected: FAIL - - [:usage=8;viewDimension="1d"] - expected: FAIL - - [:usage=8;viewDimension="2d"] - expected: FAIL - - [:usage=8;viewDimension="2d-array"] - expected: FAIL - - [:usage=8;viewDimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:color_formats_mismatch:*] - [:bundleFormats=["bgra8unorm","rg8unorm"\];passFormats=["bgra8unorm","rg8unorm"\]] - expected: FAIL - - [:bundleFormats=["bgra8unorm","rg8unorm"\];passFormats=["bgra8unorm","bgra8unorm"\]] - expected: FAIL - - [:bundleFormats=["bgra8unorm","rg8unorm"\];passFormats=["rg8unorm","bgra8unorm"\]] - expected: FAIL - - [:bundleFormats=["bgra8unorm","rg8unorm"\];passFormats=["rg8unorm","bgra8unorm","rgba8unorm"\]] - expected: FAIL - - [:bundleFormats=["bgra8unorm","rg8unorm","rgba8unorm"\];passFormats=["rg8unorm","bgra8unorm"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,mapState:*] - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="invalid";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="read";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="READ";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=false;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=false;afterUnmap=true;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=false;afterDestroy=true] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=false] - expected: FAIL - - [:usageType="write";mapModeType="WRITE";beforeUnmap=true;beforeDestroy=true;afterUnmap=true;afterDestroy=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBufferBindingSize:createBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";bufferPart="wholeBuffer"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";bufferPart="biggerBufferWithOffset"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,asinh:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:size_zero_before_configure:*] - [:canvasType="onscreen";zeroDimension="width"] - expected: FAIL - - [:canvasType="onscreen";zeroDimension="height"] - expected: FAIL - - [:canvasType="offscreen";zeroDimension="width"] - expected: FAIL - - [:canvasType="offscreen";zeroDimension="height"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:dimension:*] - [:textureDimension="1d";viewDimension="1d"] - expected: FAIL - - [:textureDimension="1d";viewDimension="2d"] - expected: FAIL - - [:textureDimension="1d";viewDimension="2d-array"] - expected: FAIL - - [:textureDimension="1d";viewDimension="cube"] - expected: FAIL - - [:textureDimension="1d";viewDimension="cube-array"] - expected: FAIL - - [:textureDimension="1d";viewDimension="3d"] - expected: FAIL - - [:textureDimension="1d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="2d";viewDimension="1d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="2d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="2d-array"] - expected: FAIL - - [:textureDimension="2d";viewDimension="cube"] - expected: FAIL - - [:textureDimension="2d";viewDimension="cube-array"] - expected: FAIL - - [:textureDimension="2d";viewDimension="3d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="3d";viewDimension="1d"] - expected: FAIL - - [:textureDimension="3d";viewDimension="2d"] - expected: FAIL - - [:textureDimension="3d";viewDimension="2d-array"] - expected: FAIL - - [:textureDimension="3d";viewDimension="cube"] - expected: FAIL - - [:textureDimension="3d";viewDimension="cube-array"] - expected: FAIL - - [:textureDimension="3d";viewDimension="3d"] - expected: FAIL - - [:textureDimension="3d";viewDimension="_undef_"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:beginRenderPass,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:*] - [:dimension="1d";readMethod="CopyToBuffer";format="r8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r8uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r8sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg8uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg8sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r16uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r16sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r16float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg16uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg16sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg16float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba16float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r32uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r32sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="r32float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg32uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg32sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg32float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgba32float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r8uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r8sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg8uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg8sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r16uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r16sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r16float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg16uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg16sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg16float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba16float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r32uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r32sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="r32float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg32uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg32sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg32float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgba32float"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r8uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r8sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg8uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg8sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r16uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r16sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r16float"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg16uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg16sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg16float"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba16float"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r32uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r32sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="r32float"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg32uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg32sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg32float"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgba32float"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r8uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r8sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg8uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg8sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r16uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r16sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r16float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg16uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg16sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg16float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba16float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r32uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r32sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="r32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg32uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg32sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgba32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="depth32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r8uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r8sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg8uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg8sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r16uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r16sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r16float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg16uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg16sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg16float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba16float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r32uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r32sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="r32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg32uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg32sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgba32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="depth32float"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r8uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r8sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg8uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg8sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r16uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r16sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r16float"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg16uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg16sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg16float"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba16float"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r32uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r32sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="r32float"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg32uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg32sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg32float"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgba32float"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";readMethod="DepthTest";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";readMethod="DepthTest";format="depth32float"] - expected: FAIL - - [:dimension="2d";readMethod="DepthTest";format="depth24plus"] - expected: FAIL - - [:dimension="2d";readMethod="DepthTest";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="DepthTest";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="StencilTest";format="stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="StencilTest";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";readMethod="StencilTest";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r8uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r8sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg8uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg8sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r16uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r16sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r16float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg16uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg16sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg16float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba16float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r32uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r32sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="r32float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg32uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg32sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg32float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgba32float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r8uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r8sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg8uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg8sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r16uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r16sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r16float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg16uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg16sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg16float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba16float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r32uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r32sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="r32float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg32uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg32sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg32float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgba32float"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r8uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r8sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg8uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg8sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r16uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r16sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r16float"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg16uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg16sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg16float"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba16float"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r32uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r32sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="r32float"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg32uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg32sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg32float"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgba32float"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToBuffer";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";readMethod="CopyToTexture";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";readMethod="Sample";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToBuffer";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";readMethod="CopyToTexture";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";readMethod="Sample";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToBuffer";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";readMethod="CopyToTexture";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";readMethod="Sample";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:vertex_buffer_used_multiple_times_overlapped:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_u32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] +[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_constructor:*] + [:] expected: FAIL -[cts.https.html?q=webgpu:api,validation,error_scope:simple:*] +[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:explicit_access_mode:*] expected: CRASH -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:arrayed:*] - [:texture_type="texture_2d_array"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,trunc:f32:*] + expected: CRASH - [:texture_type="texture_depth_2d_array"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f32_vec2:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,validation,parse,comments:line_comment_terminators:*] + expected: CRASH -[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_arithmetic:negation:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,floor:abstract_float:*] + expected: CRASH - [:inputSource="const";vectorize=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f32_vec4:*] + expected: CRASH - [:inputSource="const";vectorize=3] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication:*] + expected: CRASH - [:inputSource="const";vectorize=4] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:vector_scalar_compound:*] + expected: CRASH - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_subtraction:matrix_compound:*] + expected: CRASH - [:inputSource="uniform";vectorize=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_struct_member_nested_in_alias:*] + expected: CRASH - [:inputSource="uniform";vectorize=3] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_discard:*] + expected: CRASH - [:inputSource="uniform";vectorize=4] - expected: FAIL +[cts.https.html?q=webgpu:api,operation,buffers,map:remapped_for_write:*] + expected: CRASH - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_struct_member:*] + expected: CRASH - [:inputSource="storage_r";vectorize=2] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,af_remainder:vector_scalar:*] + expected: CRASH - [:inputSource="storage_r";vectorize=3] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:unused_buffer_bound:*] + expected: CRASH - [:inputSource="storage_r";vectorize=4] - expected: FAIL +[cts.https.html?q=webgpu:api,operation,command_buffer,copyTextureToTexture:copy_depth_stencil:*] + expected: TIMEOUT - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:binding_attributes:*] + expected: CRASH - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,float_parse:valid:*] - [:value="small_pos_zero_exp"] - expected: FAIL - - [:value="small_pos_non_zero_exp"] - expected: FAIL - - [:value="pos_exp_neg_result"] - expected: FAIL - - [:value="no_exp"] - expected: FAIL - - [:value="large_number_small_exp"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setIndexBuffer:index_buffer_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:minBindingSize:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:sampled_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_bind_group_on_same_index_depth_stencil_texture:*] - [:bindAspect="depth-only";depthStencilReadOnly=true] - expected: FAIL - - [:bindAspect="depth-only";depthStencilReadOnly=false] - expected: FAIL - - [:bindAspect="stencil-only";depthStencilReadOnly=true] - expected: FAIL - - [:bindAspect="stencil-only";depthStencilReadOnly=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:required_bytes_in_copy:*] - [:method="WriteTexture";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:i32:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_continue:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,pipeline_output_targets:color,component_count,blend:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:f32:*] - [:val="0f"] - expected: FAIL - - [:val="0.0f"] - expected: FAIL - - [:val="12.223f"] - expected: FAIL - - [:val="12.f"] - expected: FAIL - - [:val=".12f"] - expected: FAIL - - [:val="2.4e%2B4f"] - expected: FAIL - - [:val="2.4e-2f"] - expected: FAIL - - [:val="2.e%2B4f"] - expected: FAIL - - [:val="1e-4f"] - expected: FAIL - - [:val="0x1P%2B4f"] - expected: FAIL - - [:val="0.0"] - expected: FAIL - - [:val=".0"] - expected: FAIL - - [:val="12."] - expected: FAIL - - [:val="00012."] - expected: FAIL - - [:val=".12"] - expected: FAIL - - [:val="1.2e2"] - expected: FAIL - - [:val="1.2E2"] - expected: FAIL - - [:val="1.2e%2B2"] - expected: FAIL - - [:val="2.4e-2"] - expected: FAIL - - [:val=".1e-2"] - expected: FAIL - - [:val="0x.3"] - expected: FAIL - - [:val="0X.3"] - expected: FAIL - - [:val="0xa.fp%2B2"] - expected: FAIL - - [:val="0xa.fP%2B2"] - expected: FAIL - - [:val="0xE.fp%2B2"] - expected: FAIL - - [:val="0X1.fp-4"] - expected: FAIL - - [:val="1"] - expected: FAIL - - [:val="-1"] - expected: FAIL - - [:val="1u"] - expected: FAIL - - [:val="1i"] - expected: FAIL - - [:val=".f"] - expected: FAIL - - [:val=".e-2"] - expected: FAIL - - [:val="1.e%262f"] - expected: FAIL - - [:val="1.ef"] - expected: FAIL - - [:val="1.e%2Bf"] - expected: FAIL - - [:val="0x.p2"] - expected: FAIL - - [:val="0x1p"] - expected: FAIL - - [:val="0x1p%5E"] - expected: FAIL - - [:val="1.0e%2B999999999999f"] - expected: FAIL - - [:val="0x1.0p%2B999999999999f"] - expected: FAIL - - [:val="0x1.00000001pf0"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:default_args:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_vector_multiplication:vector_matrix_compound:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,log:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:matCx3:*] - [:columns=2;use_struct=true] - expected: FAIL - - [:columns=2;use_struct=false] - expected: FAIL - - [:columns=3;use_struct=true] - expected: FAIL - - [:columns=3;use_struct=false] - expected: FAIL - - [:columns=4;use_struct=true] - expected: FAIL - - [:columns=4;use_struct=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:depth_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:attachments,one_depth_stencil_attachment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression:*] - [:case="true_literal";scope="module"] - expected: FAIL - - [:case="true_literal";scope="function"] - expected: FAIL - - [:case="not_false";scope="module"] - expected: FAIL - - [:case="not_false";scope="function"] - expected: FAIL - - [:case="const_eq_literal_int";scope="module"] - expected: FAIL - - [:case="const_eq_literal_int";scope="function"] - expected: FAIL - - [:case="const_eq_literal_float";scope="module"] - expected: FAIL - - [:case="const_eq_literal_float";scope="function"] - expected: FAIL - - [:case="binary_op_eq_const";scope="module"] - expected: FAIL - - [:case="binary_op_eq_const";scope="function"] - expected: FAIL - - [:case="any";scope="module"] - expected: FAIL - - [:case="any";scope="function"] - expected: FAIL - - [:case="min_max";scope="module"] - expected: FAIL - - [:case="min_max";scope="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_C_C_R_C:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,if:if_false:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,sample_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index_via_struct_members:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:render_bundle_encoder_descriptor_depth_stencil_format:*] - [:format="depth32float-stencil8";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,source:valid_source:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cross:abstract_float:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:matrix_index:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:sampled_1d:*] - [:C="i32";coords="in-bounds";level=-1] - expected: FAIL - - [:C="i32";coords="in-bounds";level=0] - expected: FAIL - - [:C="i32";coords="in-bounds";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="in-bounds";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level=0] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-min-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level=0] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-min-boundary";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level=-1] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level=0] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-max-wrap";level="numlevels"] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level=-1] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level=0] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="i32";coords="x-max-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="in-bounds";level=-1] - expected: FAIL - - [:C="u32";coords="in-bounds";level=0] - expected: FAIL - - [:C="u32";coords="in-bounds";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="in-bounds";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level=0] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-min-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level=0] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-min-boundary";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level=-1] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level=0] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-max-wrap";level="numlevels"] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level=-1] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level=0] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level="numlevels-1"] - expected: FAIL - - [:C="u32";coords="x-max-boundary";level="numlevels"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,return:return:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,gpu_external_texture_expiration:use_import_to_refresh:*] - [:sourceType="VideoElement"] - expected: FAIL - - [:sourceType="VideoFrame"] - expected: FAIL - - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:sampled_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:workgroup_size:*] - [:isAsync=true;type="u32";size=3;v="x"] - expected: FAIL - - [:isAsync=true;type="u32";size=3;v="y"] - expected: FAIL - - [:isAsync=true;type="u32";size=3;v="z"] - expected: FAIL - - [:isAsync=true;type="u32";size=16;v="x"] - expected: FAIL - - [:isAsync=true;type="u32";size=16;v="y"] - expected: FAIL - - [:isAsync=true;type="u32";size=16;v="z"] - expected: FAIL - - [:isAsync=true;type="u32";size=64;v="x"] - expected: FAIL - - [:isAsync=true;type="u32";size=64;v="y"] - expected: FAIL - - [:isAsync=true;type="u32";size=64;v="z"] - expected: FAIL - - [:isAsync=true;type="i32";size=3;v="x"] - expected: FAIL - - [:isAsync=true;type="i32";size=3;v="y"] - expected: FAIL - - [:isAsync=true;type="i32";size=3;v="z"] - expected: FAIL - - [:isAsync=true;type="i32";size=16;v="x"] - expected: FAIL - - [:isAsync=true;type="i32";size=16;v="y"] - expected: FAIL - - [:isAsync=true;type="i32";size=16;v="z"] - expected: FAIL - - [:isAsync=true;type="i32";size=64;v="x"] - expected: FAIL - - [:isAsync=true;type="i32";size=64;v="y"] - expected: FAIL - - [:isAsync=true;type="i32";size=64;v="z"] - expected: FAIL - - [:isAsync=false;type="u32";size=3;v="x"] - expected: FAIL - - [:isAsync=false;type="u32";size=3;v="y"] - expected: FAIL - - [:isAsync=false;type="u32";size=3;v="z"] - expected: FAIL - - [:isAsync=false;type="u32";size=16;v="x"] - expected: FAIL - - [:isAsync=false;type="u32";size=16;v="y"] - expected: FAIL - - [:isAsync=false;type="u32";size=16;v="z"] - expected: FAIL - - [:isAsync=false;type="u32";size=64;v="x"] - expected: FAIL - - [:isAsync=false;type="u32";size=64;v="y"] - expected: FAIL - - [:isAsync=false;type="u32";size=64;v="z"] - expected: FAIL - - [:isAsync=false;type="i32";size=3;v="x"] - expected: FAIL - - [:isAsync=false;type="i32";size=3;v="y"] - expected: FAIL - - [:isAsync=false;type="i32";size=3;v="z"] - expected: FAIL - - [:isAsync=false;type="i32";size=16;v="x"] - expected: FAIL - - [:isAsync=false;type="i32";size=16;v="y"] - expected: FAIL - - [:isAsync=false;type="i32";size=16;v="z"] - expected: FAIL - - [:isAsync=false;type="i32";size=64;v="x"] - expected: FAIL - - [:isAsync=false;type="i32";size=64;v="y"] - expected: FAIL - - [:isAsync=false;type="i32";size=64;v="z"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,general:occlusion_query,query_index:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,submit:command_buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,limits,maxColorAttachments:*] - [:colorAttachmentsCount=8] - expected: FAIL - - [:colorAttachmentsCount=9] - expected: FAIL - - [:colorAttachmentsCountVariant={"mult":1,"add":0}] - expected: FAIL - - [:colorAttachmentsCountVariant={"mult":1,"add":1}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeX:createComputePipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:beginRenderPass,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,blankspace:bom:*] - [:include_bom=true] - expected: FAIL - - [:include_bom=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxInterStageShaderVariables:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,query_types:createQuerySet:*] - [:type="occlusion";featureContainsTimestampQuery=false] - expected: FAIL - - [:type="occlusion";featureContainsTimestampQuery=true] - expected: FAIL - - [:type="timestamp";featureContainsTimestampQuery=false] - expected: FAIL - - [:type="timestamp";featureContainsTimestampQuery=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:OOB,source:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:mip_level:*] - [:method="WriteTexture";dimension="1d";size=[32,1,1\]] - expected: FAIL - - [:method="WriteTexture";dimension="2d";size=[32,32,1\]] - expected: FAIL - - [:method="WriteTexture";dimension="2d";size=[32,32,3\]] - expected: FAIL - - [:method="WriteTexture";dimension="3d";size=[32,32,3\]] - expected: FAIL - - [:method="CopyB2T";dimension="1d";size=[32,1,1\]] - expected: FAIL - - [:method="CopyB2T";dimension="2d";size=[32,32,1\]] - expected: FAIL - - [:method="CopyB2T";dimension="2d";size=[32,32,3\]] - expected: FAIL - - [:method="CopyB2T";dimension="3d";size=[32,32,3\]] - expected: FAIL - - [:method="CopyT2B";dimension="1d";size=[32,1,1\]] - expected: FAIL - - [:method="CopyT2B";dimension="2d";size=[32,32,1\]] - expected: FAIL - - [:method="CopyT2B";dimension="2d";size=[32,32,3\]] - expected: FAIL - - [:method="CopyT2B";dimension="3d";size=[32,32,3\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,color_format:*] - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:sample_count,1d_2d_array_3d:*] - [:dimension="2d";size=[4,4,1\];shouldError=false] - expected: FAIL - - [:dimension="2d";size=[4,4,4\];shouldError=true] - expected: FAIL - - [:dimension="2d";size=[4,4,6\];shouldError=true] - expected: FAIL - - [:dimension="1d";size=[4,1,1\];shouldError=true] - expected: FAIL - - [:dimension="3d";size=[4,4,4\];shouldError=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:index_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:greater_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_f32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:depth_stencil_format,copy_buffer_size:*] - [:format="stencil8";aspect="stencil-only";copyType="CopyB2T"] - expected: FAIL - - [:format="stencil8";aspect="stencil-only";copyType="CopyT2B"] - expected: FAIL - - [:format="stencil8";aspect="stencil-only";copyType="WriteTexture"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only";copyType="CopyB2T"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth16unorm";aspect="depth-only";copyType="WriteTexture"] - expected: FAIL - - [:format="depth32float";aspect="depth-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only";copyType="CopyB2T"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth24plus-stencil8";aspect="stencil-only";copyType="WriteTexture"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="depth-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyB2T"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only";copyType="CopyT2B"] - expected: FAIL - - [:format="depth32float-stencil8";aspect="stencil-only";copyType="WriteTexture"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:gc_behavior,mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:non_zero_array_stride_and_attribute_offset:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:greater_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:vector_scalar_compound:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:storage_texture,layout_dimension:*] - [:viewDimension="_undef_"] - expected: FAIL - - [:viewDimension="1d"] - expected: FAIL - - [:viewDimension="2d"] - expected: FAIL - - [:viewDimension="2d-array"] - expected: FAIL - - [:viewDimension="cube"] - expected: FAIL - - [:viewDimension="cube-array"] - expected: FAIL - - [:viewDimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,clear_value:layout:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_member:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:binding_resources,device_mismatch:*] - [:entry={"buffer":{"type":"storage"}}] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}}] - expected: FAIL - - [:entry={"texture":{"multisampled":false}}] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_zero_size:*] - [:configure=true] - expected: FAIL - - [:configure=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_with_invalid_or_destroyed_texture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGatherCompare:sampled_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,read:aspect:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,destroy:twice:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_for_break:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:copy_texture_to_partial_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:validate,greaterThanOrEqualTo32:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,barrier:workgroup_barrier_load_store:*] - [:memType="non_atomic_storage"] - expected: FAIL - - [:memType="non_atomic_workgroup"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,scissor:*] - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:pipeline_layout,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,worker,worker:worker:*] - expected: ERROR - [:] +[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createRenderBundleEncoder:*] + expected: TIMEOUT + [:format="r8unorm";awaitLost=true] expected: TIMEOUT + [:format="r8unorm";awaitLost=false] + expected: NOTRUN -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:copy_size_alignment:*] + [:format="r8uint";awaitLost=true] + expected: NOTRUN + + [:format="r8uint";awaitLost=false] + expected: NOTRUN + + [:format="r8sint";awaitLost=true] + expected: NOTRUN + + [:format="r8sint";awaitLost=false] + expected: NOTRUN + + [:format="rg8unorm";awaitLost=true] + expected: NOTRUN + + [:format="rg8unorm";awaitLost=false] + expected: NOTRUN + + [:format="rg8uint";awaitLost=true] + expected: NOTRUN + + [:format="rg8uint";awaitLost=false] + expected: NOTRUN + + [:format="rg8sint";awaitLost=true] + expected: NOTRUN + + [:format="rg8sint";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm";awaitLost=false] + expected: NOTRUN + + [:format="rgba8unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="rgba8unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="rgba8uint";awaitLost=true] + expected: NOTRUN + + [:format="rgba8uint";awaitLost=false] + expected: NOTRUN + + [:format="rgba8sint";awaitLost=true] + expected: NOTRUN + + [:format="rgba8sint";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm";awaitLost=false] + expected: NOTRUN + + [:format="bgra8unorm-srgb";awaitLost=true] + expected: NOTRUN + + [:format="bgra8unorm-srgb";awaitLost=false] + expected: NOTRUN + + [:format="r16uint";awaitLost=true] + expected: NOTRUN + + [:format="r16uint";awaitLost=false] + expected: NOTRUN + + [:format="r16sint";awaitLost=true] + expected: NOTRUN + + [:format="r16sint";awaitLost=false] + expected: NOTRUN + + [:format="r16float";awaitLost=true] + expected: NOTRUN + + [:format="r16float";awaitLost=false] + expected: NOTRUN + + [:format="rg16uint";awaitLost=true] + expected: NOTRUN + + [:format="rg16uint";awaitLost=false] + expected: NOTRUN + + [:format="rg16sint";awaitLost=true] + expected: NOTRUN + + [:format="rg16sint";awaitLost=false] + expected: NOTRUN + + [:format="rg16float";awaitLost=true] + expected: NOTRUN + + [:format="rg16float";awaitLost=false] + expected: NOTRUN + + [:format="rgba16uint";awaitLost=true] + expected: NOTRUN + + [:format="rgba16uint";awaitLost=false] + expected: NOTRUN + + [:format="rgba16sint";awaitLost=true] + expected: NOTRUN + + [:format="rgba16sint";awaitLost=false] + expected: NOTRUN + + [:format="rgba16float";awaitLost=true] + expected: NOTRUN + + [:format="rgba16float";awaitLost=false] + expected: NOTRUN + + [:format="r32uint";awaitLost=true] + expected: NOTRUN + + [:format="r32uint";awaitLost=false] + expected: NOTRUN + + [:format="r32sint";awaitLost=true] + expected: NOTRUN + + [:format="r32sint";awaitLost=false] + expected: NOTRUN + + [:format="r32float";awaitLost=true] + expected: NOTRUN + + [:format="r32float";awaitLost=false] + expected: NOTRUN + + [:format="rg32uint";awaitLost=true] + expected: NOTRUN + + [:format="rg32uint";awaitLost=false] + expected: NOTRUN + + [:format="rg32sint";awaitLost=true] + expected: NOTRUN + + [:format="rg32sint";awaitLost=false] + expected: NOTRUN + + [:format="rg32float";awaitLost=true] + expected: NOTRUN + + [:format="rg32float";awaitLost=false] + expected: NOTRUN + + [:format="rgba32uint";awaitLost=true] + expected: NOTRUN + + [:format="rgba32uint";awaitLost=false] + expected: NOTRUN + + [:format="rgba32sint";awaitLost=true] + expected: NOTRUN + + [:format="rgba32sint";awaitLost=false] + expected: NOTRUN + + [:format="rgba32float";awaitLost=true] + expected: NOTRUN + + [:format="rgba32float";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2uint";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2uint";awaitLost=false] + expected: NOTRUN + + [:format="rgb10a2unorm";awaitLost=true] + expected: NOTRUN + + [:format="rgb10a2unorm";awaitLost=false] + expected: NOTRUN + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:function_body_single:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_read_write_mask:*] + [:format="stencil8";maskType="write";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";maskType="write";stencilRefValue=2] + expected: FAIL + + [:format="stencil8";maskType="read";stencilRefValue=1] + expected: FAIL + + [:format="stencil8";maskType="read";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";maskType="write";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";maskType="write";stencilRefValue=2] + expected: FAIL + + [:format="depth24plus-stencil8";maskType="read";stencilRefValue=1] + expected: FAIL + + [:format="depth24plus-stencil8";maskType="read";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";maskType="write";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";maskType="write";stencilRefValue=2] + expected: FAIL + + [:format="depth32float-stencil8";maskType="read";stencilRefValue=1] + expected: FAIL + + [:format="depth32float-stencil8";maskType="read";stencilRefValue=2] + expected: FAIL + + +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_fn_const_assert:*] + expected: CRASH + +[cts.https.html?q=webgpu:api,operation,buffers,map:mapAsync,read:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:multiple_entry_points:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstLeadingBit:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:i32:*] + expected: CRASH + +[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_decrement_underflow:*] [:] expected: FAIL -[cts.https.html?q=webgpu:examples:gpu,with_texture_compression,etc2:*] - [:textureCompressionETC2=false] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_scalar_vector:*] + expected: CRASH - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_module_var_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:sampled_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:depth_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:unused_bindings_in_pipeline:*] - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=false;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=false;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=false;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="common";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="before";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="middle";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="after";callDrawOrDispatch=true] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=false] - expected: FAIL - - [:compute=true;useBindGroup0=true;useBindGroup1=true;setBindGroupsOrder="reversed";setPipeline="none";callDrawOrDispatch=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setStencilReference:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bgl_visibility_mismatch:*] - [:encoderType="compute%20pass";call="dispatch";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatch";callWithZero=false] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:valid_texture_formats:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8snorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] +[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,1d_texture:*] + [:format="rgb10a2uint"] expected: FAIL [:format="rg11b10ufloat"] @@ -88063,3777 +52551,16 @@ [:format="rgb9e5ufloat"] expected: FAIL - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_vec2h:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_pipeline_layout:*] - [:maxedEntry={"buffer":{"type":"uniform"}}] - expected: FAIL - - [:maxedEntry={"buffer":{"type":"storage"}}] - expected: FAIL - - [:maxedEntry={"buffer":{"type":"read-only-storage"}}] - expected: FAIL - - [:maxedEntry={"sampler":{"type":"comparison"}}] - expected: FAIL - - [:maxedEntry={"sampler":{"type":"filtering"}}] - expected: FAIL - - [:maxedEntry={"sampler":{"type":"non-filtering"}}] - expected: FAIL - - [:maxedEntry={"texture":{"multisampled":false}}] - expected: FAIL - - [:maxedEntry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}}] - expected: FAIL - - [:maxedEntry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:uninitialized,fragment:*] - [:isAsync=true;fragmentConstants={}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"r":1,"g":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"r":1,"b":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"r":1,"g":1,"b":1,"a":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"r":1,"g":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"r":1,"b":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"r":1,"g":1,"b":1,"a":1}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_if_else:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,pipeline_output_targets:color,component_count:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fract:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,pipeline,default_layout:incompatible_with_explicit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,buffer_mapped:map_command_recording_order:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:source_image,crossOrigin:*] - [:sourceImage="canvas";isOriginClean=true] - expected: FAIL - - [:sourceImage="canvas";isOriginClean=false] - expected: FAIL - - [:sourceImage="offscreenCanvas";isOriginClean=true] - expected: FAIL - - [:sourceImage="offscreenCanvas";isOriginClean=false] - expected: FAIL - - [:sourceImage="imageBitmap";isOriginClean=true] - expected: FAIL - - [:sourceImage="imageBitmap";isOriginClean=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,workgroupBarrier:stage:*] - [:stage="vertex"] - expected: FAIL - - [:stage="fragment"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shader_io,shared_structs:shared_with_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyBufferToBuffer:copy_order:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,error_scope:parent_scope:*] - [:errorFilter="out-of-memory";stackDepth=1] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=10] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=100] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=1000] - expected: FAIL - - [:errorFilter="validation";stackDepth=1] - expected: FAIL - - [:errorFilter="validation";stackDepth=10] - expected: FAIL - - [:errorFilter="validation";stackDepth=100] - expected: FAIL - - [:errorFilter="validation";stackDepth=1000] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,distance:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:map_whole_buffer:*] - [:mapMode=1] - expected: FAIL - - [:mapMode=2] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:format:*] - [:textureFormatFeature="_undef_";viewFormatFeature="_undef_"] - expected: FAIL - - [:textureFormatFeature="_undef_";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:textureFormatFeature="_undef_";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:textureFormatFeature="depth32float-stencil8";viewFormatFeature="_undef_"] - expected: FAIL - - [:textureFormatFeature="depth32float-stencil8";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:textureFormatFeature="depth32float-stencil8";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:textureFormatFeature="texture-compression-bc";viewFormatFeature="_undef_"] - expected: FAIL - - [:textureFormatFeature="texture-compression-bc";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:textureFormatFeature="texture-compression-bc";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:multisampled_validation:*] - [:multisampled=true] - expected: FAIL - - [:multisampled=false] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texture_ok:snorm_min:*] - [:mode="bytes";format="r8snorm"] - expected: FAIL - - [:mode="colors";format="r8snorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:for_loop:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:location,superset:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texel_data:uint_texel_data_in_shader:*] - [:format="r8uint"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxDynamicUniformBuffersPerPipelineLayout:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_twice,render_pass_invalid:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:timestampWrites,query_set_type:*] - [:queryType="occlusion"] - expected: FAIL - - [:queryType="timestamp"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createRenderBundleEncoder:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="r8unorm";awaitLost=true] - expected: FAIL - - [:format="r8unorm";awaitLost=false] - expected: FAIL - - [:format="r8uint";awaitLost=true] - expected: FAIL - - [:format="r8uint";awaitLost=false] - expected: FAIL - - [:format="r8sint";awaitLost=true] - expected: FAIL - - [:format="r8sint";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";awaitLost=false] - expected: FAIL - - [:format="rg8uint";awaitLost=true] - expected: FAIL - - [:format="rg8uint";awaitLost=false] - expected: FAIL - - [:format="rg8sint";awaitLost=true] - expected: FAIL - - [:format="rg8sint";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";awaitLost=false] - expected: FAIL - - [:format="r16uint";awaitLost=true] - expected: FAIL - - [:format="r16uint";awaitLost=false] - expected: FAIL - - [:format="r16sint";awaitLost=true] - expected: FAIL - - [:format="r16sint";awaitLost=false] - expected: FAIL - - [:format="r16float";awaitLost=true] - expected: FAIL - - [:format="r16float";awaitLost=false] - expected: FAIL - - [:format="rg16uint";awaitLost=true] - expected: FAIL - - [:format="rg16uint";awaitLost=false] - expected: FAIL - - [:format="rg16sint";awaitLost=true] - expected: FAIL - - [:format="rg16sint";awaitLost=false] - expected: FAIL - - [:format="rg16float";awaitLost=true] - expected: FAIL - - [:format="rg16float";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";awaitLost=false] - expected: FAIL - - [:format="rgba16float";awaitLost=true] - expected: FAIL - - [:format="rgba16float";awaitLost=false] - expected: FAIL - - [:format="r32uint";awaitLost=true] - expected: FAIL - - [:format="r32uint";awaitLost=false] - expected: FAIL - - [:format="r32sint";awaitLost=true] - expected: FAIL - - [:format="r32sint";awaitLost=false] - expected: FAIL - - [:format="r32float";awaitLost=true] - expected: FAIL - - [:format="r32float";awaitLost=false] - expected: FAIL - - [:format="rg32uint";awaitLost=true] - expected: FAIL - - [:format="rg32uint";awaitLost=false] - expected: FAIL - - [:format="rg32sint";awaitLost=true] - expected: FAIL - - [:format="rg32sint";awaitLost=false] - expected: FAIL - - [:format="rg32float";awaitLost=true] - expected: FAIL - - [:format="rg32float";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";awaitLost=false] - expected: FAIL - - [:format="rgba32float";awaitLost=true] - expected: FAIL - - [:format="rgba32float";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,atomicity:atomicity:*] - [:memType="atomic_storage";testType="inter_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,depth_stencil_texture_in_bind_groups:*] - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":0,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":1};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":0,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":1};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":0,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":1};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":0,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":1};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="depth-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="depth-only";inSamePass=false] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=true] - expected: FAIL - - [:view0Levels={"base":1,"count":2};view0Layers={"base":1,"count":2};view1Levels={"base":1,"count":2};view1Layers={"base":1,"count":2};aspect0="stencil-only";aspect1="stencil-only";inSamePass=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setBlendConstant:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:mappedAtCreation:*] - [:mappable=false] - expected: FAIL - - [:mappable=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack4x8unorm:unpack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,log2:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompare:arrayed_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,renderPass,draw:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,comments:unterminated_block_comment:*] - [:terminated=true] - expected: FAIL - - [:terminated=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompareLevel:3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,return:return_conditional_false:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_comparison:greater_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,array_layer_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shader_io,compute_builtins:inputs:*] - [:method="param";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="param";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] - expected: FAIL - - [:method="param";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="param";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] - expected: FAIL - - [:method="param";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="param";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] - expected: FAIL - - [:method="param";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="param";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] - expected: FAIL - - [:method="struct";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="struct";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] - expected: FAIL - - [:method="struct";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="struct";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] - expected: FAIL - - [:method="struct";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="struct";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] - expected: FAIL - - [:method="struct";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="struct";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] - expected: FAIL - - [:method="mixed";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="mixed";dispatch="direct";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] - expected: FAIL - - [:method="mixed";dispatch="direct";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="mixed";dispatch="direct";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] - expected: FAIL - - [:method="mixed";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="mixed";dispatch="indirect";groupSize={"x":1,"y":1,"z":1};numGroups={"x":8,"y":4,"z":2}] - expected: FAIL - - [:method="mixed";dispatch="indirect";groupSize={"x":8,"y":4,"z":2};numGroups={"x":1,"y":1,"z":1}] - expected: FAIL - - [:method="mixed";dispatch="indirect";groupSize={"x":3,"y":7,"z":5};numGroups={"x":13,"y":9,"z":11}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:importExternalTexture:*] - [:sourceType="VideoElement"] - expected: FAIL - - [:sourceType="VideoFrame"] - expected: FAIL - - [:sourceType="VideoElement";awaitLost=true] - expected: FAIL - - [:sourceType="VideoElement";awaitLost=false] - expected: FAIL - - [:sourceType="VideoFrame";awaitLost=true] - expected: FAIL - - [:sourceType="VideoFrame";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_scalar_multiplication:scalar_matrix:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:struct_explicit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:createPipelineLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,limits,maxColorAttachmentBytesPerSample,unaligned:*] - [:formats=["r8unorm","r32float","rgba8unorm","rgba32float","r8unorm"\]] - expected: FAIL - - [:formats=["r32float","rgba8unorm","rgba32float","r8unorm","r8unorm"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_encoder:subresources,buffer_usage_in_one_render_pass_with_one_draw:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="uniform";usage1="vertex"] - expected: FAIL - - [:usage0="uniform";usage1="index"] - expected: FAIL - - [:usage0="uniform";usage1="indirect"] - expected: FAIL - - [:usage0="uniform";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="vertex"] - expected: FAIL - - [:usage0="storage";usage1="index"] - expected: FAIL - - [:usage0="storage";usage1="indirect"] - expected: FAIL - - [:usage0="storage";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="vertex"] - expected: FAIL - - [:usage0="read-only-storage";usage1="index"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="vertex";usage1="uniform"] - expected: FAIL - - [:usage0="vertex";usage1="storage"] - expected: FAIL - - [:usage0="vertex";usage1="read-only-storage"] - expected: FAIL - - [:usage0="vertex";usage1="vertex"] - expected: FAIL - - [:usage0="vertex";usage1="index"] - expected: FAIL - - [:usage0="vertex";usage1="indirect"] - expected: FAIL - - [:usage0="vertex";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="index";usage1="uniform"] - expected: FAIL - - [:usage0="index";usage1="storage"] - expected: FAIL - - [:usage0="index";usage1="read-only-storage"] - expected: FAIL - - [:usage0="index";usage1="vertex"] - expected: FAIL - - [:usage0="index";usage1="index"] - expected: FAIL - - [:usage0="index";usage1="indirect"] - expected: FAIL - - [:usage0="index";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="indirect";usage1="uniform"] - expected: FAIL - - [:usage0="indirect";usage1="storage"] - expected: FAIL - - [:usage0="indirect";usage1="read-only-storage"] - expected: FAIL - - [:usage0="indirect";usage1="vertex"] - expected: FAIL - - [:usage0="indirect";usage1="index"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="uniform"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="storage"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="read-only-storage"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="vertex"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="index"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map:remapped_for_write:*] - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="default-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="explicit-expand";mapAsyncRegionRight="minimal"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="default-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="explicit-expand"] - expected: FAIL - - [:mapAsyncRegionLeft="minimal";mapAsyncRegionRight="minimal"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:texture_binding_must_have_correct_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:writeBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,state,destroyed:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,resource_interface,bindings:binding_attributes:*] - [:stage="vertex";has_group=true;has_binding=true] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false] - expected: FAIL - [:stage="compute";has_group=false;has_binding=true] +[cts.https.html?q=webgpu:api,validation,capability_checks,features,query_types:timestamp:*] + [:featureContainsTimestampQuery=false] expected: FAIL - [:stage="compute";has_group=false;has_binding=false] + [:featureContainsTimestampQuery=true] expected: FAIL -[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_2d_context_canvas:*] +[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_bitmaprenderer_context_canvas:*] [:canvasType="onscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] expected: FAIL @@ -91990,14914 +52717,8 @@ [:canvasType="onscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] expected: FAIL - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="r32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rg32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="bgra8unorm-srgb";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgb10a2unorm";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba16float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";dstColorFormat="rgba32float";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:depth_stencil_state:*] - [:format="depth32float-stencil8";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:reuse_builtin_name:*] - [:name="vertex_index";stage="vertex";io="in";type="u32";use="alias"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use="struct"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use="function"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use="module-var"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use="function-var"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use="alias"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use="struct"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use="function"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use="module-var"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use="function-var"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use="alias"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use="struct"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use="function"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use="module-var"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use="function-var"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use="alias"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use="struct"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use="function"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use="module-var"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use="function-var"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use="alias"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use="struct"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use="function"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use="module-var"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use="function-var"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use="alias"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use="struct"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use="function"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use="module-var"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use="function-var"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="alias"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="struct"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="function"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="module-var"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="function-var"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use="alias"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use="struct"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use="function"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use="module-var"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use="function-var"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="alias"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="struct"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="function"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="module-var"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="function-var"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="alias"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="struct"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="function"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="module-var"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use="function-var"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use="alias"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use="struct"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use="function"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use="module-var"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use="function-var"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use="alias"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use="struct"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use="function"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use="module-var"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use="function-var"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use="alias"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use="struct"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use="function"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use="module-var"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use="function-var"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use="alias"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use="struct"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use="function"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use="module-var"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use="function-var"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,color_format:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:read_only:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,sizeUnspecifiedOOB:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,asinh:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createBindGroup:*] - [:resourceType="uniformBuf";entry={"buffer":{"type":"uniform"}}] - expected: FAIL - - [:resourceType="storageBuf";entry={"buffer":{"type":"storage"}}] - expected: FAIL - - [:resourceType="storageBuf";entry={"buffer":{"type":"read-only-storage"}}] - expected: FAIL - - [:resourceType="filtSamp";entry={"sampler":{"type":"filtering"}}] - expected: FAIL - - [:resourceType="nonFiltSamp";entry={"sampler":{"type":"filtering"}}] - expected: FAIL - - [:resourceType="nonFiltSamp";entry={"sampler":{"type":"non-filtering"}}] - expected: FAIL - - [:resourceType="compareSamp";entry={"sampler":{"type":"comparison"}}] - expected: FAIL - - [:resourceType="sampledTex";entry={"texture":{"multisampled":false}}] - expected: FAIL - - [:resourceType="sampledTexMS";entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}}] - expected: FAIL - - [:resourceType="storageTex";entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - [:resourceType="uniformBuf";entry={"buffer":{"type":"uniform"}};awaitLost=true] - expected: FAIL - - [:resourceType="uniformBuf";entry={"buffer":{"type":"uniform"}};awaitLost=false] - expected: FAIL - - [:resourceType="storageBuf";entry={"buffer":{"type":"storage"}};awaitLost=true] - expected: FAIL - - [:resourceType="storageBuf";entry={"buffer":{"type":"storage"}};awaitLost=false] - expected: FAIL - - [:resourceType="storageBuf";entry={"buffer":{"type":"read-only-storage"}};awaitLost=true] - expected: FAIL - - [:resourceType="storageBuf";entry={"buffer":{"type":"read-only-storage"}};awaitLost=false] - expected: FAIL - - [:resourceType="filtSamp";entry={"sampler":{"type":"filtering"}};awaitLost=true] - expected: FAIL - - [:resourceType="filtSamp";entry={"sampler":{"type":"filtering"}};awaitLost=false] - expected: FAIL - - [:resourceType="nonFiltSamp";entry={"sampler":{"type":"filtering"}};awaitLost=true] - expected: FAIL - - [:resourceType="nonFiltSamp";entry={"sampler":{"type":"filtering"}};awaitLost=false] - expected: FAIL - - [:resourceType="nonFiltSamp";entry={"sampler":{"type":"non-filtering"}};awaitLost=true] - expected: FAIL - - [:resourceType="nonFiltSamp";entry={"sampler":{"type":"non-filtering"}};awaitLost=false] - expected: FAIL - - [:resourceType="compareSamp";entry={"sampler":{"type":"comparison"}};awaitLost=true] - expected: FAIL - - [:resourceType="compareSamp";entry={"sampler":{"type":"comparison"}};awaitLost=false] - expected: FAIL - - [:resourceType="sampledTex";entry={"texture":{"multisampled":false}};awaitLost=true] - expected: FAIL - - [:resourceType="sampledTex";entry={"texture":{"multisampled":false}};awaitLost=false] - expected: FAIL - - [:resourceType="sampledTexMS";entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=true] - expected: FAIL - - [:resourceType="sampledTexMS";entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=false] - expected: FAIL - - [:resourceType="storageTex";entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}};awaitLost=true] - expected: FAIL - - [:resourceType="storageTex";entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}};awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,color_count:*] - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:storage_texture,formats:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8snorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createTexture,2d,compressed_format:*] - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc4-r-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc4-r-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc5-rg-snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc6h-rgb-float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:cube_faces_square:*] - [:dimension="2d";size=[4,4,6\]] - expected: FAIL - - [:dimension="2d";size=[5,5,6\]] - expected: FAIL - - [:dimension="2d";size=[4,5,6\]] - expected: FAIL - - [:dimension="2d";size=[4,8,6\]] - expected: FAIL - - [:dimension="2d";size=[8,4,6\]] - expected: FAIL - - [:dimension="cube";size=[4,4,6\]] - expected: FAIL - - [:dimension="cube";size=[5,5,6\]] - expected: FAIL - - [:dimension="cube";size=[4,5,6\]] - expected: FAIL - - [:dimension="cube";size=[4,8,6\]] - expected: FAIL - - [:dimension="cube";size=[8,4,6\]] - expected: FAIL - - [:dimension="cube-array";size=[4,4,6\]] - expected: FAIL - - [:dimension="cube-array";size=[5,5,6\]] - expected: FAIL - - [:dimension="cube-array";size=[4,5,6\]] - expected: FAIL - - [:dimension="cube-array";size=[4,8,6\]] - expected: FAIL - - [:dimension="cube-array";size=[8,4,6\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,shader_module,compilation_info:getCompilationInfo_returns:*] - [:valid=true;name="ascii"] - expected: FAIL - - [:valid=true;name="unicode"] - expected: FAIL - - [:valid=false;name="ascii"] - expected: FAIL - - [:valid=false;name="unicode"] - expected: FAIL - - [:valid=false;name="carriage-return"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleBias:control_flow:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,misc:vertex_state_only:*] - [:isAsync=false] - expected: FAIL - - [:isAsync=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,step:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,limits,maxColorAttachmentBytesPerSample,aligned:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:copy_overflow:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createTexture,2d,uncompressed_format:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8snorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8snorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r8sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8snorm";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba8sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r16float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg16float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba16float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="r32float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg32float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32sint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="storage";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgba32float";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb10a2uint";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb10a2unorm";usageType="render";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rg11b10ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=true] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="none";awaitLost=false] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=true] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src";awaitLost=false] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=true] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="dst";awaitLost=false] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=true] - expected: FAIL - - [:format="rgb9e5ufloat";usageType="texture";usageCopy="src-dest";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:stale:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:usage:*] - [:method="WriteTexture";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="WriteTexture";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="WriteTexture";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="WriteTexture";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyB2T";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyB2T";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyB2T";dimension="3d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";dimension="1d";size=[4,1,1\]] - expected: FAIL - - [:method="CopyT2B";dimension="2d";size=[4,4,1\]] - expected: FAIL - - [:method="CopyT2B";dimension="2d";size=[4,4,3\]] - expected: FAIL - - [:method="CopyT2B";dimension="3d";size=[4,4,3\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec2_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,copyBufferToBuffer:state_transitions:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:attachments,layer_count:*] - [:arrayLayerCount=5;baseArrayLayer=0] - expected: FAIL - - [:arrayLayerCount=1;baseArrayLayer=0] - expected: FAIL - - [:arrayLayerCount=1;baseArrayLayer=9] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:replaced_binding:*] - [:compute=false;callDrawOrDispatch=false;entry={"texture":{}}] - expected: FAIL - - [:compute=false;callDrawOrDispatch=false;entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - [:compute=false;callDrawOrDispatch=true;entry={"texture":{}}] - expected: FAIL - - [:compute=false;callDrawOrDispatch=true;entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - [:compute=true;callDrawOrDispatch=false;entry={"texture":{}}] - expected: FAIL - - [:compute=true;callDrawOrDispatch=false;entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - [:compute=true;callDrawOrDispatch=true;entry={"texture":{}}] - expected: FAIL - - [:compute=true;callDrawOrDispatch=true;entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicOr:or_storage:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atan:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_format_filterable:*] - [:isAsync=false;format="r8unorm"] - expected: FAIL - - [:isAsync=false;format="r8uint"] - expected: FAIL - - [:isAsync=false;format="r8sint"] - expected: FAIL - - [:isAsync=false;format="rg8unorm"] - expected: FAIL - - [:isAsync=false;format="rg8uint"] - expected: FAIL - - [:isAsync=false;format="rg8sint"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="rgba8uint"] - expected: FAIL - - [:isAsync=false;format="rgba8sint"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="r16uint"] - expected: FAIL - - [:isAsync=false;format="r16sint"] - expected: FAIL - - [:isAsync=false;format="r16float"] - expected: FAIL - - [:isAsync=false;format="rg16uint"] - expected: FAIL - - [:isAsync=false;format="rg16sint"] - expected: FAIL - - [:isAsync=false;format="rg16float"] - expected: FAIL - - [:isAsync=false;format="rgba16uint"] - expected: FAIL - - [:isAsync=false;format="rgba16sint"] - expected: FAIL - - [:isAsync=false;format="rgba16float"] - expected: FAIL - - [:isAsync=false;format="r32uint"] - expected: FAIL - - [:isAsync=false;format="r32sint"] - expected: FAIL - - [:isAsync=false;format="r32float"] - expected: FAIL - - [:isAsync=false;format="rg32uint"] - expected: FAIL - - [:isAsync=false;format="rg32sint"] - expected: FAIL - - [:isAsync=false;format="rg32float"] - expected: FAIL - - [:isAsync=false;format="rgba32uint"] - expected: FAIL - - [:isAsync=false;format="rgba32sint"] - expected: FAIL - - [:isAsync=false;format="rgba32float"] - expected: FAIL - - [:isAsync=false;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=true;format="r8unorm"] - expected: FAIL - - [:isAsync=true;format="r8uint"] - expected: FAIL - - [:isAsync=true;format="r8sint"] - expected: FAIL - - [:isAsync=true;format="rg8unorm"] - expected: FAIL - - [:isAsync=true;format="rg8uint"] - expected: FAIL - - [:isAsync=true;format="rg8sint"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="rgba8uint"] - expected: FAIL - - [:isAsync=true;format="rgba8sint"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="r16uint"] - expected: FAIL - - [:isAsync=true;format="r16sint"] - expected: FAIL - - [:isAsync=true;format="r16float"] - expected: FAIL - - [:isAsync=true;format="rg16uint"] - expected: FAIL - - [:isAsync=true;format="rg16sint"] - expected: FAIL - - [:isAsync=true;format="rg16float"] - expected: FAIL - - [:isAsync=true;format="rgba16uint"] - expected: FAIL - - [:isAsync=true;format="rgba16sint"] - expected: FAIL - - [:isAsync=true;format="rgba16float"] - expected: FAIL - - [:isAsync=true;format="r32uint"] - expected: FAIL - - [:isAsync=true;format="r32sint"] - expected: FAIL - - [:isAsync=true;format="r32float"] - expected: FAIL - - [:isAsync=true;format="rg32uint"] - expected: FAIL - - [:isAsync=true;format="rg32sint"] - expected: FAIL - - [:isAsync=true;format="rg32float"] - expected: FAIL - - [:isAsync=true;format="rgba32uint"] - expected: FAIL - - [:isAsync=true;format="rgba32sint"] - expected: FAIL - - [:isAsync=true;format="rgba32float"] - expected: FAIL - - [:isAsync=true;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=false;format="rgb10a2uint"] - expected: FAIL - - [:isAsync=true;format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_shader_input_location_limit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:not_implemented_yet,without_plan:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:pipeline,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicAdd:add_storage:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,anisotropy:anisotropic_filter_mipmap_color:*] - [:maxAnisotropy=1] - expected: FAIL - - [:maxAnisotropy=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:addition:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,resolve:render_pass_resolve:*] - [:storeOperation="discard"] - expected: FAIL - - [:storeOperation="store"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,barrier:workgroup_barrier_store_load:*] - [:memType="non_atomic_storage"] - expected: FAIL - - [:memType="non_atomic_workgroup"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_addition:matrix_compound:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:multi_entry_points:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,sample_mask:alpha_to_coverage_mask:*] - [:interpolated=false;sampleCount=4;rasterizationMask=0] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=1] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=2] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=3] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=4] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=5] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=6] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=7] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=8] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=9] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=10] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=11] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=12] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=13] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=14] - expected: FAIL - - [:interpolated=false;sampleCount=4;rasterizationMask=15] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=0] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=1] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=2] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=3] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=4] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=5] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=6] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=7] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=8] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=9] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=10] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=11] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=12] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=13] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=14] - expected: FAIL - - [:interpolated=true;sampleCount=4;rasterizationMask=15] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createPipelineLayout:number_of_dynamic_buffers_exceeds_the_maximum_value:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,log2:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_test:*] - [:isAsync=false;format="stencil8";depthCompare="never"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="less"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="greater"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="stencil8";depthCompare="always"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="never"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="less"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="greater"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthCompare="always"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="never"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="less"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="greater"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float";depthCompare="always"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="never"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="less"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="greater"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthCompare="always"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="never"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="less"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="greater"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthCompare="always"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="never"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="less"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="greater"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthCompare="always"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="never"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="less"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="greater"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="stencil8";depthCompare="always"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="never"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="less"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="greater"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthCompare="always"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="never"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="less"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="greater"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float";depthCompare="always"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="never"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="less"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="greater"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthCompare="always"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="never"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="less"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="greater"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthCompare="always"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="never"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="less"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="less-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="greater"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="not-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="greater-equal"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthCompare="always"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:depth_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:depth_stencil_copy_restrictions:*] - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pow:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise:bitwise_and:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec4_whole:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,create:usage:*] - [:usage1=0;usage2=0] - expected: FAIL - - [:usage1=0;usage2=1] - expected: FAIL - - [:usage1=0;usage2=2] - expected: FAIL - - [:usage1=0;usage2=4] - expected: FAIL - - [:usage1=0;usage2=8] - expected: FAIL - - [:usage1=0;usage2=16] - expected: FAIL - - [:usage1=0;usage2=32] - expected: FAIL - - [:usage1=0;usage2=64] - expected: FAIL - - [:usage1=0;usage2=128] - expected: FAIL - - [:usage1=0;usage2=256] - expected: FAIL - - [:usage1=0;usage2=512] - expected: FAIL - - [:usage1=0;usage2=32768] - expected: FAIL - - [:usage1=1;usage2=0] - expected: FAIL - - [:usage1=1;usage2=1] - expected: FAIL - - [:usage1=1;usage2=2] - expected: FAIL - - [:usage1=1;usage2=4] - expected: FAIL - - [:usage1=1;usage2=8] - expected: FAIL - - [:usage1=1;usage2=16] - expected: FAIL - - [:usage1=1;usage2=32] - expected: FAIL - - [:usage1=1;usage2=64] - expected: FAIL - - [:usage1=1;usage2=128] - expected: FAIL - - [:usage1=1;usage2=256] - expected: FAIL - - [:usage1=1;usage2=512] - expected: FAIL - - [:usage1=1;usage2=32768] - expected: FAIL - - [:usage1=2;usage2=0] - expected: FAIL - - [:usage1=2;usage2=1] - expected: FAIL - - [:usage1=2;usage2=2] - expected: FAIL - - [:usage1=2;usage2=4] - expected: FAIL - - [:usage1=2;usage2=8] - expected: FAIL - - [:usage1=2;usage2=16] - expected: FAIL - - [:usage1=2;usage2=32] - expected: FAIL - - [:usage1=2;usage2=64] - expected: FAIL - - [:usage1=2;usage2=128] - expected: FAIL - - [:usage1=2;usage2=256] - expected: FAIL - - [:usage1=2;usage2=512] - expected: FAIL - - [:usage1=2;usage2=32768] - expected: FAIL - - [:usage1=4;usage2=0] - expected: FAIL - - [:usage1=4;usage2=1] - expected: FAIL - - [:usage1=4;usage2=2] - expected: FAIL - - [:usage1=4;usage2=4] - expected: FAIL - - [:usage1=4;usage2=8] - expected: FAIL - - [:usage1=4;usage2=16] - expected: FAIL - - [:usage1=4;usage2=32] - expected: FAIL - - [:usage1=4;usage2=64] - expected: FAIL - - [:usage1=4;usage2=128] - expected: FAIL - - [:usage1=4;usage2=256] - expected: FAIL - - [:usage1=4;usage2=512] - expected: FAIL - - [:usage1=4;usage2=32768] - expected: FAIL - - [:usage1=8;usage2=0] - expected: FAIL - - [:usage1=8;usage2=1] - expected: FAIL - - [:usage1=8;usage2=2] - expected: FAIL - - [:usage1=8;usage2=4] - expected: FAIL - - [:usage1=8;usage2=8] - expected: FAIL - - [:usage1=8;usage2=16] - expected: FAIL - - [:usage1=8;usage2=32] - expected: FAIL - - [:usage1=8;usage2=64] - expected: FAIL - - [:usage1=8;usage2=128] - expected: FAIL - - [:usage1=8;usage2=256] - expected: FAIL - - [:usage1=8;usage2=512] - expected: FAIL - - [:usage1=8;usage2=32768] - expected: FAIL - - [:usage1=16;usage2=0] - expected: FAIL - - [:usage1=16;usage2=1] - expected: FAIL - - [:usage1=16;usage2=2] - expected: FAIL - - [:usage1=16;usage2=4] - expected: FAIL - - [:usage1=16;usage2=8] - expected: FAIL - - [:usage1=16;usage2=16] - expected: FAIL - - [:usage1=16;usage2=32] - expected: FAIL - - [:usage1=16;usage2=64] - expected: FAIL - - [:usage1=16;usage2=128] - expected: FAIL - - [:usage1=16;usage2=256] - expected: FAIL - - [:usage1=16;usage2=512] - expected: FAIL - - [:usage1=16;usage2=32768] - expected: FAIL - - [:usage1=32;usage2=0] - expected: FAIL - - [:usage1=32;usage2=1] - expected: FAIL - - [:usage1=32;usage2=2] - expected: FAIL - - [:usage1=32;usage2=4] - expected: FAIL - - [:usage1=32;usage2=8] - expected: FAIL - - [:usage1=32;usage2=16] - expected: FAIL - - [:usage1=32;usage2=32] - expected: FAIL - - [:usage1=32;usage2=64] - expected: FAIL - - [:usage1=32;usage2=128] - expected: FAIL - - [:usage1=32;usage2=256] - expected: FAIL - - [:usage1=32;usage2=512] - expected: FAIL - - [:usage1=32;usage2=32768] - expected: FAIL - - [:usage1=64;usage2=0] - expected: FAIL - - [:usage1=64;usage2=1] - expected: FAIL - - [:usage1=64;usage2=2] - expected: FAIL - - [:usage1=64;usage2=4] - expected: FAIL - - [:usage1=64;usage2=8] - expected: FAIL - - [:usage1=64;usage2=16] - expected: FAIL - - [:usage1=64;usage2=32] - expected: FAIL - - [:usage1=64;usage2=64] - expected: FAIL - - [:usage1=64;usage2=128] - expected: FAIL - - [:usage1=64;usage2=256] - expected: FAIL - - [:usage1=64;usage2=512] - expected: FAIL - - [:usage1=64;usage2=32768] - expected: FAIL - - [:usage1=128;usage2=0] - expected: FAIL - - [:usage1=128;usage2=1] - expected: FAIL - - [:usage1=128;usage2=2] - expected: FAIL - - [:usage1=128;usage2=4] - expected: FAIL - - [:usage1=128;usage2=8] - expected: FAIL - - [:usage1=128;usage2=16] - expected: FAIL - - [:usage1=128;usage2=32] - expected: FAIL - - [:usage1=128;usage2=64] - expected: FAIL - - [:usage1=128;usage2=128] - expected: FAIL - - [:usage1=128;usage2=256] - expected: FAIL - - [:usage1=128;usage2=512] - expected: FAIL - - [:usage1=128;usage2=32768] - expected: FAIL - - [:usage1=256;usage2=0] - expected: FAIL - - [:usage1=256;usage2=1] - expected: FAIL - - [:usage1=256;usage2=2] - expected: FAIL - - [:usage1=256;usage2=4] - expected: FAIL - - [:usage1=256;usage2=8] - expected: FAIL - - [:usage1=256;usage2=16] - expected: FAIL - - [:usage1=256;usage2=32] - expected: FAIL - - [:usage1=256;usage2=64] - expected: FAIL - - [:usage1=256;usage2=128] - expected: FAIL - - [:usage1=256;usage2=256] - expected: FAIL - - [:usage1=256;usage2=512] - expected: FAIL - - [:usage1=256;usage2=32768] - expected: FAIL - - [:usage1=512;usage2=0] - expected: FAIL - - [:usage1=512;usage2=1] - expected: FAIL - - [:usage1=512;usage2=2] - expected: FAIL - - [:usage1=512;usage2=4] - expected: FAIL - - [:usage1=512;usage2=8] - expected: FAIL - - [:usage1=512;usage2=16] - expected: FAIL - - [:usage1=512;usage2=32] - expected: FAIL - - [:usage1=512;usage2=64] - expected: FAIL - - [:usage1=512;usage2=128] - expected: FAIL - - [:usage1=512;usage2=256] - expected: FAIL - - [:usage1=512;usage2=512] - expected: FAIL - - [:usage1=512;usage2=32768] - expected: FAIL - - [:usage1=32768;usage2=0] - expected: FAIL - - [:usage1=32768;usage2=1] - expected: FAIL - - [:usage1=32768;usage2=2] - expected: FAIL - - [:usage1=32768;usage2=4] - expected: FAIL - - [:usage1=32768;usage2=8] - expected: FAIL - - [:usage1=32768;usage2=16] - expected: FAIL - - [:usage1=32768;usage2=32] - expected: FAIL - - [:usage1=32768;usage2=64] - expected: FAIL - - [:usage1=32768;usage2=128] - expected: FAIL - - [:usage1=32768;usage2=256] - expected: FAIL - - [:usage1=32768;usage2=512] - expected: FAIL - - [:usage1=32768;usage2=32768] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_complex_initalizer:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:shader_module,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:basic:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:destination_offset_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:abstract_int:*] - [:val="0x123"] - expected: FAIL - - [:val="123"] - expected: FAIL - - [:val="0"] - expected: FAIL - - [:val="0x3f"] - expected: FAIL - - [:val="2147483647"] - expected: FAIL - - [:val="-0x123"] - expected: FAIL - - [:val="-123"] - expected: FAIL - - [:val="-0x3f"] - expected: FAIL - - [:val="-2147483647"] - expected: FAIL - - [:val="-2147483648"] - expected: FAIL - - [:val="94i"] - expected: FAIL - - [:val="2147483647i"] - expected: FAIL - - [:val="-2147483647i"] - expected: FAIL - - [:val="i32(-2147483648)"] - expected: FAIL - - [:val="42u"] - expected: FAIL - - [:val="0u"] - expected: FAIL - - [:val="4294967295u"] - expected: FAIL - - [:val="0123"] - expected: FAIL - - [:val="2147483648i"] - expected: FAIL - - [:val="-2147483649i"] - expected: FAIL - - [:val="4294967295"] - expected: FAIL - - [:val="4294967295i"] - expected: FAIL - - [:val="4294967296u"] - expected: FAIL - - [:val="-1u"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyBufferToBuffer:copy_offset_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:rowsPerImage_and_bytesPerRow_depth_stencil:*] - [:format="stencil8";copyMethod="WriteTexture";aspect="stencil-only"] - expected: FAIL - - [:format="stencil8";copyMethod="CopyB2T";aspect="stencil-only"] - expected: FAIL - - [:format="stencil8";copyMethod="CopyT2B";aspect="stencil-only"] - expected: FAIL - - [:format="depth16unorm";copyMethod="CopyT2B";aspect="depth-only"] - expected: FAIL - - [:format="depth32float";copyMethod="CopyT2B";aspect="depth-only"] - expected: FAIL - - [:format="depth24plus-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] - expected: FAIL - - [:format="depth24plus-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] - expected: FAIL - - [:format="depth24plus-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="depth-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:offset_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:multiple_pairs_of_dispatches_in_one_compute_pass:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicAnd:and_workgroup:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,buffer_mapped:copyBufferToBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:many,parallel_order:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atanh:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:non_normalized:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,copyExternalImageToTexture,imageBitmap:*] - [:] - expected: FAIL - - [:awaitLost=true] - expected: FAIL - - [:awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_passOp_operation:*] - [:format="stencil8";passOp="keep";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="zero";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="replace";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="invert";initialStencil=240] - expected: FAIL - - [:format="stencil8";passOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="stencil8";passOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="stencil8";passOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="stencil8";passOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="stencil8";passOp="decrement-wrap";initialStencil=0] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="keep";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="zero";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="replace";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="invert";initialStencil=240] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="depth24plus-stencil8";passOp="decrement-wrap";initialStencil=0] - expected: FAIL - - [:format="depth32float-stencil8";passOp="keep";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="zero";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="replace";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="invert";initialStencil=240] - expected: FAIL - - [:format="depth32float-stencil8";passOp="increment-clamp";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="increment-clamp";initialStencil=255] - expected: FAIL - - [:format="depth32float-stencil8";passOp="increment-wrap";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="increment-wrap";initialStencil=255] - expected: FAIL - - [:format="depth32float-stencil8";passOp="decrement-clamp";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="decrement-clamp";initialStencil=0] - expected: FAIL - - [:format="depth32float-stencil8";passOp="decrement-wrap";initialStencil=1] - expected: FAIL - - [:format="depth32float-stencil8";passOp="decrement-wrap";initialStencil=0] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:texture,resource_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,offsetAndSizeAlignment,mapped:*] - [:mapMode=1] - expected: FAIL - - [:mapMode=2] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:and:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,align:multi_align:*] - [:multi=true] - expected: FAIL - - [:multi=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:setBindGroup:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sinh:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_misc:subresources,buffer_usages_in_copy_and_pass:*] - [:usage0="copy-src";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="uniform";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="uniform";pass="compute"] - expected: FAIL - - [:usage0="copy-src";usage1="storage";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="storage";pass="compute"] - expected: FAIL - - [:usage0="copy-src";usage1="read-only-storage";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="read-only-storage";pass="compute"] - expected: FAIL - - [:usage0="copy-src";usage1="vertex";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="index";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="indirect";pass="render"] - expected: FAIL - - [:usage0="copy-src";usage1="indirect";pass="compute"] - expected: FAIL - - [:usage0="copy-src";usage1="indexedIndirect";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="uniform";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="uniform";pass="compute"] - expected: FAIL - - [:usage0="copy-dst";usage1="storage";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="storage";pass="compute"] - expected: FAIL - - [:usage0="copy-dst";usage1="read-only-storage";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="read-only-storage";pass="compute"] - expected: FAIL - - [:usage0="copy-dst";usage1="vertex";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="index";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="indirect";pass="render"] - expected: FAIL - - [:usage0="copy-dst";usage1="indirect";pass="compute"] - expected: FAIL - - [:usage0="copy-dst";usage1="indexedIndirect";pass="render"] - expected: FAIL - - [:usage0="uniform";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="uniform";usage1="copy-src";pass="compute"] - expected: FAIL - - [:usage0="uniform";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="uniform";usage1="copy-dst";pass="compute"] - expected: FAIL - - [:usage0="storage";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="storage";usage1="copy-src";pass="compute"] - expected: FAIL - - [:usage0="storage";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="storage";usage1="copy-dst";pass="compute"] - expected: FAIL - - [:usage0="read-only-storage";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="read-only-storage";usage1="copy-src";pass="compute"] - expected: FAIL - - [:usage0="read-only-storage";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="read-only-storage";usage1="copy-dst";pass="compute"] - expected: FAIL - - [:usage0="vertex";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="vertex";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="index";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="index";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="indirect";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="indirect";usage1="copy-src";pass="compute"] - expected: FAIL - - [:usage0="indirect";usage1="copy-dst";pass="render"] - expected: FAIL - - [:usage0="indirect";usage1="copy-dst";pass="compute"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="copy-src";pass="render"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="copy-dst";pass="render"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_left_vec_size_mismatch:*] - [:vectorize_lhs=2;vectorize_rhs=2] - expected: FAIL - - [:vectorize_lhs=2;vectorize_rhs=3] - expected: FAIL - - [:vectorize_lhs=2;vectorize_rhs=4] - expected: FAIL - - [:vectorize_lhs=3;vectorize_rhs=2] - expected: FAIL - - [:vectorize_lhs=3;vectorize_rhs=3] - expected: FAIL - - [:vectorize_lhs=3;vectorize_rhs=4] - expected: FAIL - - [:vectorize_lhs=4;vectorize_rhs=2] - expected: FAIL - - [:vectorize_lhs=4;vectorize_rhs=3] - expected: FAIL - - [:vectorize_lhs=4;vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindGroups:setBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";encoderType="render"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";encoderType="renderBundle"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";encoderType="compute"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";encoderType="render"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";encoderType="renderBundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,weak:store_buffer:*] - [:memType="atomic_workgroup"] - expected: FAIL - - [:memType="atomic_storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:or_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,switch:switch:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:compute_builtin_values:*] - [:builtin="local_invocation_id";type="vec3%3Cf32%3E";uniform=false] - expected: FAIL - - [:builtin="local_invocation_index";type="u32";uniform=false] - expected: FAIL - - [:builtin="global_invocation_id";type="vec3%3Cu32%3E";uniform=false] - expected: FAIL - - [:builtin="workgroup_id";type="vec3%3Cu32%3E";uniform=true] - expected: FAIL - - [:builtin="num_workgroups";type="vec3%3Cu32%3E";uniform=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeTexture:texture_state:*] - [:textureState="valid"] - expected: FAIL - - [:textureState="invalid"] - expected: FAIL - - [:textureState="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:texture,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,exp2:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,multi_resolve:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_comparison:less_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:1d_array_constructor:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,if:nested_if_else:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,read:format:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompare:arrayed_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,general:occlusion_query,query_type:*] - [:type="_undef_"] - expected: FAIL - - [:type="occlusion"] - expected: FAIL - - [:type="timestamp"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,texture_usages_in_copy_and_render_pass:*] - [:usage0="copy-src";usage1="copy-src"] - expected: FAIL - - [:usage0="copy-src";usage1="copy-dst"] - expected: FAIL - - [:usage0="copy-src";usage1="texture"] - expected: FAIL - - [:usage0="copy-src";usage1="storage"] - expected: FAIL - - [:usage0="copy-src";usage1="color-attachment"] - expected: FAIL - - [:usage0="copy-dst";usage1="copy-src"] - expected: FAIL - - [:usage0="copy-dst";usage1="copy-dst"] - expected: FAIL - - [:usage0="copy-dst";usage1="texture"] - expected: FAIL - - [:usage0="copy-dst";usage1="storage"] - expected: FAIL - - [:usage0="copy-dst";usage1="color-attachment"] - expected: FAIL - - [:usage0="texture";usage1="copy-src"] - expected: FAIL - - [:usage0="texture";usage1="copy-dst"] - expected: FAIL - - [:usage0="storage";usage1="copy-src"] - expected: FAIL - - [:usage0="storage";usage1="copy-dst"] - expected: FAIL - - [:usage0="color-attachment";usage1="copy-src"] - expected: FAIL - - [:usage0="color-attachment";usage1="copy-dst"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_discard:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,state_tracking:vertex_buffers_inherit_from_previous_pipeline:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:sample_count_mismatch:*] - [:bundleSamples=1;passSamples=1] - expected: FAIL - - [:bundleSamples=4;passSamples=4] - expected: FAIL - - [:bundleFormat=4;passFormat=1] - expected: FAIL - - [:bundleFormat=1;passFormat=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,workgroupBarrier:barrier:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,memory_model,coherence:corw1:*] - [:memType="atomic_storage";testType="inter_workgroup"] - expected: FAIL - - [:memType="atomic_storage";testType="intra_workgroup"] - expected: FAIL - - [:memType="atomic_workgroup";testType="intra_workgroup"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_i32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_shader_input_location_in_vertex_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureLoad:external:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_blend:*] - [:isAsync=false;component="color"] - expected: FAIL - - [:isAsync=false;component="alpha"] - expected: FAIL - - [:isAsync=true;component="color"] - expected: FAIL - - [:isAsync=true;component="alpha"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,primitive_state:strip_index_format:*] - [:isAsync=false;topology="_undef_";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=false;topology="_undef_";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=false;topology="_undef_";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=false;topology="point-list";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=false;topology="point-list";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=false;topology="point-list";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=false;topology="line-list";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=false;topology="line-list";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=false;topology="line-list";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=false;topology="line-strip";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=false;topology="line-strip";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=false;topology="line-strip";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=false;topology="triangle-list";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=false;topology="triangle-list";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=false;topology="triangle-list";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=false;topology="triangle-strip";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=false;topology="triangle-strip";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=false;topology="triangle-strip";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=true;topology="_undef_";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=true;topology="_undef_";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=true;topology="_undef_";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=true;topology="point-list";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=true;topology="point-list";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=true;topology="point-list";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=true;topology="line-list";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=true;topology="line-list";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=true;topology="line-list";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=true;topology="line-strip";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=true;topology="line-strip";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=true;topology="line-strip";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=true;topology="triangle-list";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=true;topology="triangle-list";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=true;topology="triangle-list";stripIndexFormat="uint32"] - expected: FAIL - - [:isAsync=true;topology="triangle-strip";stripIndexFormat="_undef_"] - expected: FAIL - - [:isAsync=true;topology="triangle-strip";stripIndexFormat="uint16"] - expected: FAIL - - [:isAsync=true;topology="triangle-strip";stripIndexFormat="uint32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec2h_to_f32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:mapped_at_creation_partial_buffer:*] - [:bufferUsage=9] - expected: FAIL - - [:bufferUsage=6] - expected: FAIL - - [:bufferUsage=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,uninitialized:*] - [:isAsync=true;constants={}] - expected: FAIL - - [:isAsync=true;constants={"c0":0,"c2":0,"c8":0}] - expected: FAIL - - [:isAsync=true;constants={"c0":0,"c2":0,"c5":0,"c8":0}] - expected: FAIL - - [:isAsync=true;constants={"c0":0,"c2":0,"c5":0,"c8":0,"c1":0}] - expected: FAIL - - [:isAsync=false;constants={}] - expected: FAIL - - [:isAsync=false;constants={"c0":0,"c2":0,"c8":0}] - expected: FAIL - - [:isAsync=false;constants={"c0":0,"c2":0,"c5":0,"c8":0}] - expected: FAIL - - [:isAsync=false;constants={"c0":0,"c2":0,"c5":0,"c8":0,"c1":0}] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:builtin:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:many,parallel:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,basic:*] - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:gpu,buffers:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,acos:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,index_format:index_format,uint16:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cos:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,draw:arguments:*] - [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=0;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=0;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=3;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=0;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=0;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=1;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=false;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=0;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=false;indirect=true;vertex_buffer_offset=32;index_buffer_offset="_undef_";base_vertex="_undef_"] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=false;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=0;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=0;base_vertex=9] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=0] - expected: FAIL - - [:first=3;count=6;first_instance=2;instance_count=4;indexed=true;indirect=true;vertex_buffer_offset=32;index_buffer_offset=16;base_vertex=9] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,index_format:primitive_restart:*] - [:indexFormat="uint16";primitiveTopology="point-list"] - expected: FAIL - - [:indexFormat="uint16";primitiveTopology="line-list"] - expected: FAIL - - [:indexFormat="uint16";primitiveTopology="line-strip"] - expected: FAIL - - [:indexFormat="uint16";primitiveTopology="triangle-list"] - expected: FAIL - - [:indexFormat="uint16";primitiveTopology="triangle-strip"] - expected: FAIL - - [:indexFormat="uint32";primitiveTopology="point-list"] - expected: FAIL - - [:indexFormat="uint32";primitiveTopology="line-list"] - expected: FAIL - - [:indexFormat="uint32";primitiveTopology="line-strip"] - expected: FAIL - - [:indexFormat="uint32";primitiveTopology="triangle-list"] - expected: FAIL - - [:indexFormat="uint32";primitiveTopology="triangle-strip"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,onSubmittedWorkDone:many,serial:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,query_types:writeTimestamp:*] - [:featureContainsTimestampQuery=false] - expected: FAIL - - [:featureContainsTimestampQuery=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:duplicate:*] - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;attr=""] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;attr=""] - expected: FAIL - - [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;attr=""] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;attr=""] - expected: FAIL - - [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;attr=""] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;attr=""] - expected: FAIL - - [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;attr=""] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;attr=""] - expected: FAIL - - [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;attr=""] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;attr=""] - expected: FAIL - - [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;attr=""] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;attr=""] - expected: FAIL - - [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr=""] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr=""] - expected: FAIL - - [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;attr=""] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;attr=""] - expected: FAIL - - [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr=""] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr=""] - expected: FAIL - - [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr=""] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr=""] - expected: FAIL - - [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr=""] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr=""] - expected: FAIL - - [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;attr=""] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;attr=""] - expected: FAIL - - [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;attr=""] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;attr=""] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false;attr="%40invariant"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;attr=""] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true;attr="%40invariant"] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;attr=""] - expected: FAIL - - [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false;attr="%40invariant"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:features,unknown:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMax:max_workgroup:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumLayers:storage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:destination_texture,usage:*] - [:usage=1] - expected: FAIL - - [:usage=2] - expected: FAIL - - [:usage=4] - expected: FAIL - - [:usage=8] - expected: FAIL - - [:usage=16] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompareLevel:arrayed_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,quantizeToF16:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createPipelineLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:destination_texture,mipLevel:*] - [:mipLevel=0] - expected: FAIL - - [:mipLevel=5] - expected: FAIL - - [:mipLevel=6] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:two_draws_in_the_same_render_pass:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,clear_value:stencil_clear_value:*] - [:stencilFormat="stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth24plus-stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=0;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=1;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=255;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=258;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=true] - expected: FAIL - - [:stencilFormat="depth32float-stencil8";stencilClearValue=65539;applyStencilClearValueAsStencilReferenceValue=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,draw:vertex_attributes,formats:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,trunc:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,shadow:while:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:abstract_float:*] - [:val="0f"] - expected: FAIL - - [:val="0.0f"] - expected: FAIL - - [:val="12.223f"] - expected: FAIL - - [:val="12.f"] - expected: FAIL - - [:val=".12f"] - expected: FAIL - - [:val="2.4e%2B4f"] - expected: FAIL - - [:val="2.4e-2f"] - expected: FAIL - - [:val="2.e%2B4f"] - expected: FAIL - - [:val="1e-4f"] - expected: FAIL - - [:val="0x1P%2B4f"] - expected: FAIL - - [:val="0.0"] - expected: FAIL - - [:val=".0"] - expected: FAIL - - [:val="12."] - expected: FAIL - - [:val="00012."] - expected: FAIL - - [:val=".12"] - expected: FAIL - - [:val="1.2e2"] - expected: FAIL - - [:val="1.2E2"] - expected: FAIL - - [:val="1.2e%2B2"] - expected: FAIL - - [:val="2.4e-2"] - expected: FAIL - - [:val=".1e-2"] - expected: FAIL - - [:val="0x.3"] - expected: FAIL - - [:val="0X.3"] - expected: FAIL - - [:val="0xa.fp%2B2"] - expected: FAIL - - [:val="0xa.fP%2B2"] - expected: FAIL - - [:val="0xE.fp%2B2"] - expected: FAIL - - [:val="0X1.fp-4"] - expected: FAIL - - [:val=".f"] - expected: FAIL - - [:val=".e-2"] - expected: FAIL - - [:val="1.e%262f"] - expected: FAIL - - [:val="1.ef"] - expected: FAIL - - [:val="1.e%2Bf"] - expected: FAIL - - [:val="0x.p2"] - expected: FAIL - - [:val="0x1p"] - expected: FAIL - - [:val="0x1p%5E"] - expected: FAIL - - [:val="1.0e%2B999999999999f"] - expected: FAIL - - [:val="0x1.0p%2B999999999999f"] - expected: FAIL - - [:val="0x1.00000001pf0"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:stage:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,stencil:stencil_reference_initialized:*] - [:format="stencil8"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:sampled_array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_switch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:subresources_and_binding_types_combination_for_aspect:*] - [:compute=false;binding0InBundle=false;binding1InBundle=false;format="stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth16unorm"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth32float"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth24plus"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth24plus-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=false;format="depth32float-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=true;format="stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth16unorm"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth32float"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth24plus"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth24plus-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=false;binding1InBundle=true;format="depth32float-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=false;format="stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth16unorm"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth32float"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth24plus"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth24plus-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=false;format="depth32float-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=true;format="stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth16unorm"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth32float"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth24plus"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth24plus-stencil8"] - expected: FAIL - - [:compute=false;binding0InBundle=true;binding1InBundle=true;format="depth32float-stencil8"] - expected: FAIL - - [:compute=true;binding0InBundle=false;binding1InBundle=false;format="stencil8"] - expected: FAIL - - [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth16unorm"] - expected: FAIL - - [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth32float"] - expected: FAIL - - [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth24plus"] - expected: FAIL - - [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth24plus-stencil8"] - expected: FAIL - - [:compute=true;binding0InBundle=false;binding1InBundle=false;format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_basic:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:evaluation_stage:*] - [:scope="module";stage="constant"] - expected: FAIL - - [:scope="module";stage="override"] - expected: FAIL - - [:scope="module";stage="runtime"] - expected: FAIL - - [:scope="function";stage="constant"] - expected: FAIL - - [:scope="function";stage="override"] - expected: FAIL - - [:scope="function";stage="runtime"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:limits,invocations_per_workgroup,each_component:*] - [:isAsync=true;size=[64\]] - expected: FAIL - - [:isAsync=true;size=[256,1,1\]] - expected: FAIL - - [:isAsync=true;size=[257,1,1\]] - expected: FAIL - - [:isAsync=true;size=[1,256,1\]] - expected: FAIL - - [:isAsync=true;size=[1,257,1\]] - expected: FAIL - - [:isAsync=true;size=[1,1,63\]] - expected: FAIL - - [:isAsync=true;size=[1,1,64\]] - expected: FAIL - - [:isAsync=true;size=[1,1,65\]] - expected: FAIL - - [:isAsync=false;size=[64\]] - expected: FAIL - - [:isAsync=false;size=[256,1,1\]] - expected: FAIL - - [:isAsync=false;size=[257,1,1\]] - expected: FAIL - - [:isAsync=false;size=[1,256,1\]] - expected: FAIL - - [:isAsync=false;size=[1,257,1\]] - expected: FAIL - - [:isAsync=false;size=[1,1,63\]] - expected: FAIL - - [:isAsync=false;size=[1,1,64\]] - expected: FAIL - - [:isAsync=false;size=[1,1,65\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,state_tracking:all_needed_index_buffer_should_be_bound:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_call:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:abstract_float:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createBindGroupLayout:*] - [:entry={"buffer":{"type":"uniform"}}] - expected: FAIL - - [:entry={"buffer":{"type":"storage"}}] - expected: FAIL - - [:entry={"buffer":{"type":"read-only-storage"}}] - expected: FAIL - - [:entry={"sampler":{"type":"comparison"}}] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}}] - expected: FAIL - - [:entry={"sampler":{"type":"non-filtering"}}] - expected: FAIL - - [:entry={"texture":{"multisampled":false}}] - expected: FAIL - - [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}}] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] - expected: FAIL - - [:entry={"buffer":{"type":"uniform"}};awaitLost=true] - expected: FAIL - - [:entry={"buffer":{"type":"uniform"}};awaitLost=false] - expected: FAIL - - [:entry={"buffer":{"type":"storage"}};awaitLost=true] - expected: FAIL - - [:entry={"buffer":{"type":"storage"}};awaitLost=false] - expected: FAIL - - [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=true] - expected: FAIL - - [:entry={"buffer":{"type":"read-only-storage"}};awaitLost=false] - expected: FAIL - - [:entry={"sampler":{"type":"comparison"}};awaitLost=true] - expected: FAIL - - [:entry={"sampler":{"type":"comparison"}};awaitLost=false] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}};awaitLost=true] - expected: FAIL - - [:entry={"sampler":{"type":"filtering"}};awaitLost=false] - expected: FAIL - - [:entry={"sampler":{"type":"non-filtering"}};awaitLost=true] - expected: FAIL - - [:entry={"sampler":{"type":"non-filtering"}};awaitLost=false] - expected: FAIL - - [:entry={"texture":{"multisampled":false}};awaitLost=true] - expected: FAIL - - [:entry={"texture":{"multisampled":false}};awaitLost=false] - expected: FAIL - - [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=true] - expected: FAIL - - [:entry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}};awaitLost=false] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}};awaitLost=true] - expected: FAIL - - [:entry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}};awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_compare_func:*] - [:format="depth16unorm";depthCompare="never";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="never";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="never";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="less";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="less";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="less";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="less-equal";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="less-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="less-equal";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="equal";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="equal";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="not-equal";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="not-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="not-equal";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="greater-equal";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="greater-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="greater-equal";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="greater";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="greater";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="greater";depthClearValue=0] - expected: FAIL - - [:format="depth16unorm";depthCompare="always";depthClearValue=1] - expected: FAIL - - [:format="depth16unorm";depthCompare="always";depthClearValue=0.5001] - expected: FAIL - - [:format="depth16unorm";depthCompare="always";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="never";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="never";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="never";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="less";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="less";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="less";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="less-equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="less-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="less-equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="not-equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="not-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="not-equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="greater-equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="greater-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="greater-equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="greater";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="greater";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="greater";depthClearValue=0] - expected: FAIL - - [:format="depth32float";depthCompare="always";depthClearValue=1] - expected: FAIL - - [:format="depth32float";depthCompare="always";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float";depthCompare="always";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="never";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="never";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="never";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="less";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="less";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="less";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="less-equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="less-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="less-equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="not-equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="not-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="not-equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="greater-equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="greater-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="greater-equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="greater";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="greater";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="greater";depthClearValue=0] - expected: FAIL - - [:format="depth24plus";depthCompare="always";depthClearValue=1] - expected: FAIL - - [:format="depth24plus";depthCompare="always";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus";depthCompare="always";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="never";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="never";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="never";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="less";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="less";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="less";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="less-equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="less-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="less-equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="not-equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="not-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="not-equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="greater-equal";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="greater-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="greater-equal";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="greater";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="greater";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="greater";depthClearValue=0] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="always";depthClearValue=1] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="always";depthClearValue=0.5001] - expected: FAIL - - [:format="depth24plus-stencil8";depthCompare="always";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="never";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="never";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="never";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="less";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="less";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="less";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="less-equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="less-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="less-equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="not-equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="not-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="not-equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="greater-equal";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="greater-equal";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="greater-equal";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="greater";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="greater";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="greater";depthClearValue=0] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="always";depthClearValue=1] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="always";depthClearValue=0.5001] - expected: FAIL - - [:format="depth32float-stencil8";depthCompare="always";depthClearValue=0] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,workgroup_size,limits,workgroup_storage_size:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reverseBits:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:defaults:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,async:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:gc_behavior,mapAsync:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:texture_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:shader_module,invalid:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,index_format:index_format,setIndexBuffer_different_formats:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:placement:*] - [:scope="private-var";attr="%40compute"] - expected: FAIL - - [:scope="private-var";attr="%40fragment"] - expected: FAIL - - [:scope="private-var";attr="%40vertex"] - expected: FAIL - - [:scope="storage-var";attr="%40compute"] - expected: FAIL - - [:scope="storage-var";attr="%40fragment"] - expected: FAIL - - [:scope="storage-var";attr="%40vertex"] - expected: FAIL - - [:scope="struct-member";attr="%40compute"] - expected: FAIL - - [:scope="struct-member";attr="%40fragment"] - expected: FAIL - - [:scope="struct-member";attr="%40vertex"] - expected: FAIL - - [:scope="fn-param";attr="%40compute"] - expected: FAIL - - [:scope="fn-param";attr="%40fragment"] - expected: FAIL - - [:scope="fn-param";attr="%40vertex"] - expected: FAIL - - [:scope="fn-var";attr="%40compute"] - expected: FAIL - - [:scope="fn-var";attr="%40fragment"] - expected: FAIL - - [:scope="fn-var";attr="%40vertex"] - expected: FAIL - - [:scope="fn-return";attr="%40compute"] - expected: FAIL - - [:scope="fn-return";attr="%40fragment"] - expected: FAIL - - [:scope="fn-return";attr="%40vertex"] - expected: FAIL - - [:scope="while-stmt";attr="%40compute"] - expected: FAIL - - [:scope="while-stmt";attr="%40fragment"] - expected: FAIL - - [:scope="while-stmt";attr="%40vertex"] - expected: FAIL - - [:scope="_undef_";attr="%40compute"] - expected: FAIL - - [:scope="_undef_";attr="%40fragment"] - expected: FAIL - - [:scope="_undef_";attr="%40vertex"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:depth_stencil_readonly_with_undefined_depth:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachments:*] - [:isAsync=false;targetsLength=8] - expected: FAIL - - [:isAsync=false;targetsLength=9] - expected: FAIL - - [:isAsync=true;targetsLength=8] - expected: FAIL - - [:isAsync=true;targetsLength=9] - expected: FAIL - - [:isAsync=false;targetsLengthVariant={"mult":1,"add":0}] - expected: FAIL - - [:isAsync=false;targetsLengthVariant={"mult":1,"add":1}] - expected: FAIL - - [:isAsync=true;targetsLengthVariant={"mult":1,"add":0}] - expected: FAIL - - [:isAsync=true;targetsLengthVariant={"mult":1,"add":1}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:slot:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,single_sample_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sinh:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:scalar_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:scalar:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:type_and_sampling:*] - [:stage="vertex";io="in";use_struct=true;type="";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="flat";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="linear";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="center";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=true;type="sample";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="flat";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="linear";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="center";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling=""] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling="center"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="in";use_struct=false;type="sample";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="flat";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="linear";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="center";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=true;type="sample";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="flat";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="linear";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="center";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling=""] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling="center"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling="sample"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling="flat"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="vertex";io="out";use_struct=false;type="sample";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="flat";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="linear";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="center";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=true;type="sample";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="flat";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="linear";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="center";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling=""] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling="center"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="in";use_struct=false;type="sample";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="flat";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="linear";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="center";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=true;type="sample";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="flat";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="perspective";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="linear";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="center";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="centroid";sampling="linear"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling=""] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling="center"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling="centroid"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling="sample"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling="flat"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling="perspective"] - expected: FAIL - - [:stage="fragment";io="out";use_struct=false;type="sample";sampling="linear"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,degrees:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:logical_or:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cross:f32:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,writeTimestamp:*] - [:type="occlusion"] - expected: FAIL - - [:type="timestamp"] - expected: FAIL - - [:type="occlusion";stage="finish";awaitLost=true] - expected: FAIL - - [:type="occlusion";stage="finish";awaitLost=false] - expected: FAIL - - [:type="occlusion";stage="submit";awaitLost=true] - expected: FAIL - - [:type="occlusion";stage="submit";awaitLost=false] - expected: FAIL - - [:type="timestamp";stage="finish";awaitLost=true] - expected: FAIL - - [:type="timestamp";stage="finish";awaitLost=false] - expected: FAIL - - [:type="timestamp";stage="submit";awaitLost=true] - expected: FAIL - - [:type="timestamp";stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumLevels:sampled:*] - [:texture_type="texture_1d"] - expected: FAIL - - [:texture_type="texture_2d"] - expected: FAIL - - [:texture_type="texture_2d_array"] - expected: FAIL - - [:texture_type="texture_3d"] - expected: FAIL - - [:texture_type="texture_cube"] - expected: FAIL - - [:texture_type="texture_cube_array%60"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:binding_must_be_present_in_layout:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,validation_error,fragment:*] - [:isAsync=true;fragmentConstants={"cu":0}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cu":-1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cu":4294967295}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cu":4294967296}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"ci":-2147483648}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"ci":-2147483649}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"ci":2147483647}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"ci":2147483648}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":-3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":-3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cb":1.7976931348623157e%2B308}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cb":-2147483649}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cu":0}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cu":-1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cu":4294967295}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cu":4294967296}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"ci":-2147483648}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"ci":-2147483649}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"ci":2147483647}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"ci":2147483648}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":-3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":-3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":3.4028234663852886e%2B38}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":3.4028235677973366e%2B38}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cb":1.7976931348623157e%2B308}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cb":-2147483649}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,limits,maxColorAttachmentBytesPerSample,unaligned:*] - [:formats=["r8unorm","r32float","rgba8unorm","rgba32float","r8unorm"\]] - expected: FAIL - - [:formats=["r32float","rgba8unorm","rgba32float","r8unorm","r8unorm"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,all:bool:*] - [:inputSource="const";overload="scalar"] - expected: FAIL - - [:inputSource="const";overload="vec2"] - expected: FAIL - - [:inputSource="const";overload="vec3"] - expected: FAIL - - [:inputSource="const";overload="vec4"] - expected: FAIL - - [:inputSource="uniform";overload="scalar"] - expected: FAIL - - [:inputSource="uniform";overload="vec2"] - expected: FAIL - - [:inputSource="uniform";overload="vec3"] - expected: FAIL - - [:inputSource="uniform";overload="vec4"] - expected: FAIL - - [:inputSource="storage_r";overload="scalar"] - expected: FAIL - - [:inputSource="storage_r";overload="vec2"] - expected: FAIL - - [:inputSource="storage_r";overload="vec3"] - expected: FAIL - - [:inputSource="storage_r";overload="vec4"] - expected: FAIL - - [:inputSource="storage_rw";overload="scalar"] - expected: FAIL - - [:inputSource="storage_rw";overload="vec2"] - expected: FAIL - - [:inputSource="storage_rw";overload="vec3"] - expected: FAIL - - [:inputSource="storage_rw";overload="vec4"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:nesting:*] - [:target_stage="fragment";target_io="in"] - expected: FAIL - - [:target_stage="fragment";target_io="out"] - expected: FAIL - - [:target_stage="";target_io="in"] - expected: FAIL - - [:target_stage="";target_io="out"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:pipeline_output_targets:*] - [:isAsync=false;format="_undef_"] - expected: FAIL - - [:isAsync=false;format="r8unorm"] - expected: FAIL - - [:isAsync=false;format="r8uint"] - expected: FAIL - - [:isAsync=false;format="r8sint"] - expected: FAIL - - [:isAsync=false;format="rg8unorm"] - expected: FAIL - - [:isAsync=false;format="rg8uint"] - expected: FAIL - - [:isAsync=false;format="rg8sint"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="rgba8uint"] - expected: FAIL - - [:isAsync=false;format="rgba8sint"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="r16uint"] - expected: FAIL - - [:isAsync=false;format="r16sint"] - expected: FAIL - - [:isAsync=false;format="r16float"] - expected: FAIL - - [:isAsync=false;format="rg16uint"] - expected: FAIL - - [:isAsync=false;format="rg16sint"] - expected: FAIL - - [:isAsync=false;format="rg16float"] - expected: FAIL - - [:isAsync=false;format="rgba16uint"] - expected: FAIL - - [:isAsync=false;format="rgba16sint"] - expected: FAIL - - [:isAsync=false;format="rgba16float"] - expected: FAIL - - [:isAsync=false;format="r32uint"] - expected: FAIL - - [:isAsync=false;format="r32sint"] - expected: FAIL - - [:isAsync=false;format="r32float"] - expected: FAIL - - [:isAsync=false;format="rg32uint"] - expected: FAIL - - [:isAsync=false;format="rg32sint"] - expected: FAIL - - [:isAsync=false;format="rg32float"] - expected: FAIL - - [:isAsync=false;format="rgba32uint"] - expected: FAIL - - [:isAsync=false;format="rgba32sint"] - expected: FAIL - - [:isAsync=false;format="rgba32float"] - expected: FAIL - - [:isAsync=false;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=true;format="_undef_"] - expected: FAIL - - [:isAsync=true;format="r8unorm"] - expected: FAIL - - [:isAsync=true;format="r8uint"] - expected: FAIL - - [:isAsync=true;format="r8sint"] - expected: FAIL - - [:isAsync=true;format="rg8unorm"] - expected: FAIL - - [:isAsync=true;format="rg8uint"] - expected: FAIL - - [:isAsync=true;format="rg8sint"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="rgba8uint"] - expected: FAIL - - [:isAsync=true;format="rgba8sint"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="r16uint"] - expected: FAIL - - [:isAsync=true;format="r16sint"] - expected: FAIL - - [:isAsync=true;format="r16float"] - expected: FAIL - - [:isAsync=true;format="rg16uint"] - expected: FAIL - - [:isAsync=true;format="rg16sint"] - expected: FAIL - - [:isAsync=true;format="rg16float"] - expected: FAIL - - [:isAsync=true;format="rgba16uint"] - expected: FAIL - - [:isAsync=true;format="rgba16sint"] - expected: FAIL - - [:isAsync=true;format="rgba16float"] - expected: FAIL - - [:isAsync=true;format="r32uint"] - expected: FAIL - - [:isAsync=true;format="r32sint"] - expected: FAIL - - [:isAsync=true;format="r32float"] - expected: FAIL - - [:isAsync=true;format="rg32uint"] - expected: FAIL - - [:isAsync=true;format="rg32sint"] - expected: FAIL - - [:isAsync=true;format="rg32float"] - expected: FAIL - - [:isAsync=true;format="rgba32uint"] - expected: FAIL - - [:isAsync=true;format="rgba32sint"] - expected: FAIL - - [:isAsync=true;format="rgba32float"] - expected: FAIL - - [:isAsync=true;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=false;format="rgb10a2uint"] - expected: FAIL - - [:isAsync=true;format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,const_assert:parse:*] - [:case="no_parentheses"] - expected: FAIL - - [:case="left_parenthesis_only"] - expected: FAIL - - [:case="right_parenthesis_only"] - expected: FAIL - - [:case="both_parentheses"] - expected: FAIL - - [:case="condition_on_newline"] - expected: FAIL - - [:case="multiline_with_parentheses"] - expected: FAIL - - [:case="invalid_expression"] - expected: FAIL - - [:case="no_condition_no_parentheses"] - expected: FAIL - - [:case="no_condition_with_parentheses"] - expected: FAIL - - [:case="not_a_boolean"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,radians:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:scalar:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:compute:*] - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint=""] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000a"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%20"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="ma%20in"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cn"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mian";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mian";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mainmain";stageEntryPoint="mainmain"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mainmain";stageEntryPoint="foo"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V3"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V5"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="_main_t12V3"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="s%C3%A9quen%C3%A7age"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="se%CC%81quen%C3%A7age"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint=""] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000a"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%20"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="ma%20in"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cn"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mian";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mian";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mainmain";stageEntryPoint="mainmain"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mainmain";stageEntryPoint="foo"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V3"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V5"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="_main_t12V3"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="s%C3%A9quen%C3%A7age"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="se%CC%81quen%C3%A7age"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_bind_group_layout:*] +[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_pipeline_layout:*] [:maxedEntry={"buffer":{"type":"uniform"}}] expected: FAIL @@ -106916,118619 +52737,38 @@ [:maxedEntry={"sampler":{"type":"non-filtering"}}] expected: FAIL - [:maxedEntry={"texture":{"multisampled":false}}] + [:maxedEntry={"texture":{"multisampled":false,"sampleType":"unfilterable-float"}}] expected: FAIL [:maxedEntry={"texture":{"multisampled":true,"sampleType":"unfilterable-float"}}] expected: FAIL - [:maxedEntry={"storageTexture":{"access":"write-only","format":"rgba8unorm"}}] + [:maxedEntry={"storageTexture":{"access":"write-only","format":"r32float"}}] expected: FAIL - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:discontiguous_location_and_attribs:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyTextureToTexture:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:missing_vertex_position:*] - [:use_struct=true;attribute="%40builtin(position)"] - expected: FAIL - - [:use_struct=true;attribute="%40location(0)"] - expected: FAIL - - [:use_struct=false;attribute="%40builtin(position)"] - expected: FAIL - - [:use_struct=false;attribute="%40location(0)"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,getBindGroupLayout:unique_js_object,auto_layout:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,loop:loop_continuing_basic:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:storage_texture,format:*] - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8unorm";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8snorm";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8uint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba8sint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16uint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16sint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba16float";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="r32uint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="r32sint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="r32float";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rg32uint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rg32sint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rg32float";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32uint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32sint";resourceFormat="rgba32float"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba8unorm"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba8snorm"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba8uint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba8sint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba16uint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba16sint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba16float"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="r32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="r32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="r32float"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rg32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rg32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rg32float"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba32uint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba32sint"] - expected: FAIL - - [:storageTextureFormat="rgba32float";resourceFormat="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,labels:object_has_descriptor_label:*] - [:name="createBuffer"] - expected: FAIL - - [:name="requestDevice"] - expected: FAIL - - [:name="createTexture"] - expected: FAIL - - [:name="createSampler"] - expected: FAIL - - [:name="createBindGroupLayout"] - expected: FAIL - - [:name="createPipelineLayout"] - expected: FAIL - - [:name="createBindGroup"] - expected: FAIL - - [:name="createShaderModule"] - expected: FAIL - - [:name="createComputePipeline"] - expected: FAIL - - [:name="createRenderPipeline"] - expected: FAIL - - [:name="createComputePipelineAsync"] - expected: FAIL - - [:name="createRenderPipelineAsync"] - expected: FAIL - - [:name="createCommandEncoder"] - expected: FAIL - - [:name="createRenderBundleEncoder"] - expected: FAIL - - [:name="createQuerySet"] - expected: FAIL - - [:name="beginRenderPass"] - expected: FAIL - - [:name="beginComputePass"] - expected: FAIL - - [:name="finish"] - expected: FAIL - - [:name="createView"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:from_canvas:*] - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:bytes_per_row_alignment:*] - [:method="WriteTexture";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,ldexp:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:occlusionQuerySet,query_set_type:*] - [:queryType="occlusion"] - expected: FAIL - - [:queryType="timestamp"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bool_logical:and_short_circuit:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyBufferToTexture:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,discard:placement:*] - [:place="compute"] - expected: FAIL - - [:place="vertex"] - expected: FAIL - - [:place="fragment"] - expected: FAIL - - [:place="module"] - expected: FAIL - - [:place="subfrag"] - expected: FAIL - - [:place="subvert"] - expected: FAIL - - [:place="subcomp"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f16:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,shader_module,overrides:name_conflict:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_encoder:subresources,buffer_usage_in_compute_pass_with_two_dispatches:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="uniform";usage1="indirect"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="storage"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="indirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indirect"] - expected: FAIL - - [:usage0="indirect";usage1="uniform"] - expected: FAIL - - [:usage0="indirect";usage1="storage"] - expected: FAIL - - [:usage0="indirect";usage1="read-only-storage"] - expected: FAIL - - [:usage0="indirect";usage1="indirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_decrement:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:fragment_parsing:*] - [:val=""] - expected: FAIL - - [:val="%40fragment"] - expected: FAIL - - [:val="%40%5Ctfragment"] - expected: FAIL - - [:val="%40%2F%5Ecomment%5E%2Ffragment"] - expected: FAIL - - [:val="%40mfragment"] - expected: FAIL - - [:val="%40fragment()"] - expected: FAIL - - [:val="%40fragment%20)"] - expected: FAIL - - [:val="%40fragment("] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_while:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:blend_constant,not_inherited:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:max_components_count,output:*] - [:isAsync=false;numScalarDelta=0;topology="triangle-list"] - expected: FAIL - - [:isAsync=false;numScalarDelta=0;topology="point-list"] - expected: FAIL - - [:isAsync=false;numScalarDelta=1;topology="triangle-list"] - expected: FAIL - - [:isAsync=false;numScalarDelta=-1;topology="point-list"] - expected: FAIL - - [:isAsync=true;numScalarDelta=0;topology="triangle-list"] - expected: FAIL - - [:isAsync=true;numScalarDelta=0;topology="point-list"] - expected: FAIL - - [:isAsync=true;numScalarDelta=1;topology="triangle-list"] - expected: FAIL - - [:isAsync=true;numScalarDelta=-1;topology="point-list"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_break:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:validate,maxColorAttachmentBytesPerSample:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countTrailingZeros:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:multisampled_validation:*] - [:viewDimension="_undef_"] - expected: FAIL - - [:viewDimension="1d"] - expected: FAIL - - [:viewDimension="2d"] - expected: FAIL - - [:viewDimension="2d-array"] - expected: FAIL - - [:viewDimension="cube"] - expected: FAIL - - [:viewDimension="cube-array"] - expected: FAIL - - [:viewDimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:validate,powerOf2:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,getBindGroupLayout:index_range,auto_layout:*] - [:index=0] - expected: FAIL - - [:index=1] - expected: FAIL - - [:index=2] - expected: FAIL - - [:index=3] - expected: FAIL - - [:index=4] - expected: FAIL - - [:index=5] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,programmable,pipeline_bind_group_compat:bgl_resource_type_mismatch:*] - [:encoderType="compute%20pass";call="dispatch";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatch";callWithZero=false] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="compute%20pass";call="dispatchIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20pass";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="draw";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexed";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndirect";callWithZero=false] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=true] - expected: FAIL - - [:encoderType="render%20bundle";call="drawIndexedIndirect";callWithZero=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,binary,bitwise_shift:shift_left_concrete:*] - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"31u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"32u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"33u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"1000u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0u","rhs":"0xFFFFFFFFu","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"31u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"32u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"33u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"1000u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"0i","rhs":"0xFFFFFFFFu","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1073741824i","rhs":"1u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1073741824i","rhs":"1u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1073741824i","rhs":"1u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1073741824i","rhs":"1u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"2147483647i","rhs":"1u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"2147483647i","rhs":"1u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"2147483647i","rhs":"1u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"2147483647i","rhs":"1u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1i","rhs":"31u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1i","rhs":"31u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1i","rhs":"31u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1i","rhs":"31u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1073741824u","rhs":"1u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1073741824u","rhs":"1u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"1073741824u","rhs":"1u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"1073741824u","rhs":"1u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"2147483647u","rhs":"1u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"2147483647u","rhs":"1u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"2147483647u","rhs":"1u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"2147483647u","rhs":"1u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"1u","rhs":"31u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1u","rhs":"31u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"1u","rhs":"31u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"1u","rhs":"31u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"3221225472u","rhs":"1u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"3221225472u","rhs":"1u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"3221225472u","rhs":"1u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"3221225472u","rhs":"1u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"1u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"1u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"1u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"1u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"31u","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"31u","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"31u","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"4294967295u","rhs":"31u","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"-1073741824i","rhs":"1u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"-1073741824i","rhs":"1u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"-1073741824i","rhs":"1u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"-1073741824i","rhs":"1u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"1u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"1u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"1u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"1u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"31u","pass":true};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"31u","pass":true};vectorize=2] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"31u","pass":true};vectorize=3] - expected: FAIL - - [:case={"lhs":"-1i","rhs":"31u","pass":true};vectorize=4] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1","rhs":"-1","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1i","rhs":"-1","pass":false};vectorize=4] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize="_undef_"] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize=2] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize=3] - expected: FAIL - - [:case={"lhs":"1u","rhs":"-1","pass":false};vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,color_sparse:*] - expected: TIMEOUT - [:encoderType="render%20pass";attachmentCount=1] - expected: TIMEOUT - - [:encoderType="render%20pass";attachmentCount=2] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=3] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=4] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=5] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=6] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=7] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=8] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=1] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=2] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=3] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=4] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=5] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=6] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=7] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=8] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=9] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=10] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=11] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=12] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=13] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=14] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=15] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=16] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=17] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=18] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=19] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=20] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=21] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=22] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=23] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=24] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=25] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=26] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=27] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=28] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=29] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=30] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=31] - expected: NOTRUN - - [:encoderType="render%20pass";attachmentCount=32] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=9] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=10] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=11] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=12] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=13] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=14] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=15] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=16] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=17] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=18] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=19] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=20] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=21] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=22] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=23] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=24] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=25] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=26] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=27] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=28] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=29] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=30] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=31] - expected: NOTRUN - - [:encoderType="render%20bundle";attachmentCount=32] - expected: NOTRUN - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,setVertexBuffer:offset_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,determinant:f16:*] - [:inputSource="const";dimension=2] - expected: FAIL - - [:inputSource="const";dimension=3] - expected: FAIL - - [:inputSource="const";dimension=4] - expected: FAIL - - [:inputSource="uniform";dimension=2] - expected: FAIL - - [:inputSource="uniform";dimension=3] - expected: FAIL - - [:inputSource="uniform";dimension=4] - expected: FAIL - - [:inputSource="storage_r";dimension=2] - expected: FAIL - - [:inputSource="storage_r";dimension=3] - expected: FAIL - - [:inputSource="storage_r";dimension=4] - expected: FAIL - - [:inputSource="storage_rw";dimension=2] - expected: FAIL - - [:inputSource="storage_rw";dimension=3] - expected: FAIL - - [:inputSource="storage_rw";dimension=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,state_tracking:vertex_buffers_do_not_inherit_between_render_passes:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,queue,writeBuffer:multiple_writes_at_different_offsets_and_sizes:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupStorageSize:createComputePipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;wgslType="S3"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="f16"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="f32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="i32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="u32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="S1"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="S2"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;wgslType="S3"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="f16"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf16%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="f32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="i32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="u32"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec2%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec3%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Ci32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="vec4%3Cu32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat2x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat3x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat4x2%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat2x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat3x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat4x3%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat2x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat3x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="mat4x4%3Cf32%3E"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="S1"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="S2"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;wgslType="S3"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,workgroup_size:*] - [:isAsync=true;type="u32";constants={}] - expected: FAIL - - [:isAsync=true;type="u32";constants={"x":0,"y":0,"z":0}] - expected: FAIL - - [:isAsync=true;type="u32";constants={"x":1,"y":-1,"z":1}] - expected: FAIL - - [:isAsync=true;type="u32";constants={"x":1,"y":0,"z":0}] - expected: FAIL - - [:isAsync=true;type="u32";constants={"x":16,"y":1,"z":1}] - expected: FAIL - - [:isAsync=true;type="i32";constants={}] - expected: FAIL - - [:isAsync=true;type="i32";constants={"x":0,"y":0,"z":0}] - expected: FAIL - - [:isAsync=true;type="i32";constants={"x":1,"y":-1,"z":1}] - expected: FAIL - - [:isAsync=true;type="i32";constants={"x":1,"y":0,"z":0}] - expected: FAIL - - [:isAsync=true;type="i32";constants={"x":16,"y":1,"z":1}] - expected: FAIL - - [:isAsync=false;type="u32";constants={}] - expected: FAIL - - [:isAsync=false;type="u32";constants={"x":0,"y":0,"z":0}] - expected: FAIL - - [:isAsync=false;type="u32";constants={"x":1,"y":-1,"z":1}] - expected: FAIL - - [:isAsync=false;type="u32";constants={"x":1,"y":0,"z":0}] - expected: FAIL - - [:isAsync=false;type="u32";constants={"x":16,"y":1,"z":1}] - expected: FAIL - - [:isAsync=false;type="i32";constants={}] - expected: FAIL - - [:isAsync=false;type="i32";constants={"x":0,"y":0,"z":0}] - expected: FAIL - - [:isAsync=false;type="i32";constants={"x":1,"y":-1,"z":1}] - expected: FAIL - - [:isAsync=false;type="i32";constants={"x":1,"y":0,"z":0}] - expected: FAIL - - [:isAsync=false;type="i32";constants={"x":16,"y":1,"z":1}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_encoder:subresources,buffer_usage_in_one_render_pass_with_two_draws:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="uniform";usage1="vertex"] - expected: FAIL - - [:usage0="uniform";usage1="index"] - expected: FAIL - - [:usage0="uniform";usage1="indirect"] - expected: FAIL - - [:usage0="uniform";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="storage"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="vertex"] - expected: FAIL - - [:usage0="storage";usage1="index"] - expected: FAIL - - [:usage0="storage";usage1="indirect"] - expected: FAIL - - [:usage0="storage";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="vertex"] - expected: FAIL - - [:usage0="read-only-storage";usage1="index"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indirect"] - expected: FAIL - - [:usage0="read-only-storage";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="vertex";usage1="uniform"] - expected: FAIL - - [:usage0="vertex";usage1="storage"] - expected: FAIL - - [:usage0="vertex";usage1="read-only-storage"] - expected: FAIL - - [:usage0="vertex";usage1="vertex"] - expected: FAIL - - [:usage0="vertex";usage1="index"] - expected: FAIL - - [:usage0="vertex";usage1="indirect"] - expected: FAIL - - [:usage0="vertex";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="index";usage1="uniform"] - expected: FAIL - - [:usage0="index";usage1="storage"] - expected: FAIL - - [:usage0="index";usage1="read-only-storage"] - expected: FAIL - - [:usage0="index";usage1="vertex"] - expected: FAIL - - [:usage0="index";usage1="index"] - expected: FAIL - - [:usage0="index";usage1="indirect"] - expected: FAIL - - [:usage0="index";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="indirect";usage1="uniform"] - expected: FAIL - - [:usage0="indirect";usage1="storage"] - expected: FAIL - - [:usage0="indirect";usage1="read-only-storage"] - expected: FAIL - - [:usage0="indirect";usage1="vertex"] - expected: FAIL - - [:usage0="indirect";usage1="index"] - expected: FAIL - - [:usage0="indirect";usage1="indirect"] - expected: FAIL - - [:usage0="indirect";usage1="indexedIndirect"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="uniform"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="storage"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="read-only-storage"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="vertex"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="index"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="indirect"] - expected: FAIL - - [:usage0="indexedIndirect";usage1="indexedIndirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createPipelineLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:sampler,compare_function_with_binding_type:*] - [:bgType="filtering"] - expected: FAIL - - [:bgType="non-filtering"] - expected: FAIL - - [:bgType="comparison"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:vec4h_to_vec2f:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:shared_shader_module:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limits,unknown:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f16:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:shader_stages_and_visibility,attachment_write:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,builder_cases_subcases:*] - [:x=1] - expected: FAIL - - [:x=2] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:depth_stencil_readonly_mismatch:*] - [:depthStencilFormat="stencil8"] - expected: FAIL - - [:depthStencilFormat="depth16unorm"] - expected: FAIL - - [:depthStencilFormat="depth32float"] - expected: FAIL - - [:depthStencilFormat="depth24plus"] - expected: FAIL - - [:depthStencilFormat="depth24plus-stencil8"] - expected: FAIL - - [:depthStencilFormat="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:buffer_dynamic_offsets:*] - [:type="uniform";encoderType="compute%20pass"] - expected: FAIL - - [:type="uniform";encoderType="render%20pass"] - expected: FAIL - - [:type="uniform";encoderType="render%20bundle"] - expected: FAIL - - [:type="storage";encoderType="compute%20pass"] - expected: FAIL - - [:type="storage";encoderType="render%20pass"] - expected: FAIL - - [:type="storage";encoderType="render%20bundle"] - expected: FAIL - - [:type="read-only-storage";encoderType="compute%20pass"] - expected: FAIL - - [:type="read-only-storage";encoderType="render%20pass"] - expected: FAIL - - [:type="read-only-storage";encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstTrailingBit:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,destroy:twice:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,default_value_and_smallest_size,compressed_format:*] - [:dimension="_undef_";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,overrides:value,type_error,fragment:*] - [:isAsync=true;fragmentConstants={"cf":1}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":"_nan_"}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":"_posinfinity_"}] - expected: FAIL - - [:isAsync=true;fragmentConstants={"cf":"_neginfinity_"}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":1}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":"_nan_"}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":"_posinfinity_"}] - expected: FAIL - - [:isAsync=false;fragmentConstants={"cf":"_neginfinity_"}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:targets_format_renderable:*] - [:isAsync=false;format="r8unorm"] - expected: FAIL - - [:isAsync=false;format="r8snorm"] - expected: FAIL - - [:isAsync=false;format="r8uint"] - expected: FAIL - - [:isAsync=false;format="r8sint"] - expected: FAIL - - [:isAsync=false;format="rg8unorm"] - expected: FAIL - - [:isAsync=false;format="rg8snorm"] - expected: FAIL - - [:isAsync=false;format="rg8uint"] - expected: FAIL - - [:isAsync=false;format="rg8sint"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm"] - expected: FAIL - - [:isAsync=false;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="rgba8snorm"] - expected: FAIL - - [:isAsync=false;format="rgba8uint"] - expected: FAIL - - [:isAsync=false;format="rgba8sint"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm"] - expected: FAIL - - [:isAsync=false;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="r16uint"] - expected: FAIL - - [:isAsync=false;format="r16sint"] - expected: FAIL - - [:isAsync=false;format="r16float"] - expected: FAIL - - [:isAsync=false;format="rg16uint"] - expected: FAIL - - [:isAsync=false;format="rg16sint"] - expected: FAIL - - [:isAsync=false;format="rg16float"] - expected: FAIL - - [:isAsync=false;format="rgba16uint"] - expected: FAIL - - [:isAsync=false;format="rgba16sint"] - expected: FAIL - - [:isAsync=false;format="rgba16float"] - expected: FAIL - - [:isAsync=false;format="r32uint"] - expected: FAIL - - [:isAsync=false;format="r32sint"] - expected: FAIL - - [:isAsync=false;format="r32float"] - expected: FAIL - - [:isAsync=false;format="rg32uint"] - expected: FAIL - - [:isAsync=false;format="rg32sint"] - expected: FAIL - - [:isAsync=false;format="rg32float"] - expected: FAIL - - [:isAsync=false;format="rgba32uint"] - expected: FAIL - - [:isAsync=false;format="rgba32sint"] - expected: FAIL - - [:isAsync=false;format="rgba32float"] - expected: FAIL - - [:isAsync=false;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=false;format="rg11b10ufloat"] - expected: FAIL - - [:isAsync=false;format="rgb9e5ufloat"] - expected: FAIL - - [:isAsync=false;format="stencil8"] - expected: FAIL - - [:isAsync=false;format="depth16unorm"] - expected: FAIL - - [:isAsync=false;format="depth32float"] - expected: FAIL - - [:isAsync=false;format="depth24plus"] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8"] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8"] - expected: FAIL - - [:isAsync=false;format="bc1-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="bc2-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="bc3-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="bc4-r-unorm"] - expected: FAIL - - [:isAsync=false;format="bc4-r-snorm"] - expected: FAIL - - [:isAsync=false;format="bc5-rg-unorm"] - expected: FAIL - - [:isAsync=false;format="bc5-rg-snorm"] - expected: FAIL - - [:isAsync=false;format="bc6h-rgb-ufloat"] - expected: FAIL - - [:isAsync=false;format="bc6h-rgb-float"] - expected: FAIL - - [:isAsync=false;format="bc7-rgba-unorm"] - expected: FAIL - - [:isAsync=false;format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="r8unorm"] - expected: FAIL - - [:isAsync=true;format="r8snorm"] - expected: FAIL - - [:isAsync=true;format="r8uint"] - expected: FAIL - - [:isAsync=true;format="r8sint"] - expected: FAIL - - [:isAsync=true;format="rg8unorm"] - expected: FAIL - - [:isAsync=true;format="rg8snorm"] - expected: FAIL - - [:isAsync=true;format="rg8uint"] - expected: FAIL - - [:isAsync=true;format="rg8sint"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm"] - expected: FAIL - - [:isAsync=true;format="rgba8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="rgba8snorm"] - expected: FAIL - - [:isAsync=true;format="rgba8uint"] - expected: FAIL - - [:isAsync=true;format="rgba8sint"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm"] - expected: FAIL - - [:isAsync=true;format="bgra8unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="r16uint"] - expected: FAIL - - [:isAsync=true;format="r16sint"] - expected: FAIL - - [:isAsync=true;format="r16float"] - expected: FAIL - - [:isAsync=true;format="rg16uint"] - expected: FAIL - - [:isAsync=true;format="rg16sint"] - expected: FAIL - - [:isAsync=true;format="rg16float"] - expected: FAIL - - [:isAsync=true;format="rgba16uint"] - expected: FAIL - - [:isAsync=true;format="rgba16sint"] - expected: FAIL - - [:isAsync=true;format="rgba16float"] - expected: FAIL - - [:isAsync=true;format="r32uint"] - expected: FAIL - - [:isAsync=true;format="r32sint"] - expected: FAIL - - [:isAsync=true;format="r32float"] - expected: FAIL - - [:isAsync=true;format="rg32uint"] - expected: FAIL - - [:isAsync=true;format="rg32sint"] - expected: FAIL - - [:isAsync=true;format="rg32float"] - expected: FAIL - - [:isAsync=true;format="rgba32uint"] - expected: FAIL - - [:isAsync=true;format="rgba32sint"] - expected: FAIL - - [:isAsync=true;format="rgba32float"] - expected: FAIL - - [:isAsync=true;format="rgb10a2unorm"] - expected: FAIL - - [:isAsync=true;format="rg11b10ufloat"] - expected: FAIL - - [:isAsync=true;format="rgb9e5ufloat"] - expected: FAIL - - [:isAsync=true;format="stencil8"] - expected: FAIL - - [:isAsync=true;format="depth16unorm"] - expected: FAIL - - [:isAsync=true;format="depth32float"] - expected: FAIL - - [:isAsync=true;format="depth24plus"] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8"] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8"] - expected: FAIL - - [:isAsync=true;format="bc1-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="bc2-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="bc3-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=true;format="bc4-r-unorm"] - expected: FAIL - - [:isAsync=true;format="bc4-r-snorm"] - expected: FAIL - - [:isAsync=true;format="bc5-rg-unorm"] - expected: FAIL - - [:isAsync=true;format="bc5-rg-snorm"] - expected: FAIL - - [:isAsync=true;format="bc6h-rgb-ufloat"] - expected: FAIL - - [:isAsync=true;format="bc6h-rgb-float"] - expected: FAIL - - [:isAsync=true;format="bc7-rgba-unorm"] - expected: FAIL - - [:isAsync=true;format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:isAsync=false;format="rgb10a2uint"] - expected: FAIL - - [:isAsync=true;format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_func_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:frexp_exp_increment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:bool:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertex";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="fragment";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleVertexStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="vertexAndFragmentWithPossibleFragmentStageOverflow";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="forward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="backward";bindGroupTest="differentGroups"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="sameGroup"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;bindingCombination="compute";order="shiftByHalf";bindGroupTest="differentGroups"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:buffer_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,min:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map_oom:mappedAtCreation:*] - [:oom=false;size=16] - expected: FAIL - - [:oom=true;size=9007199254740984] - expected: FAIL - - [:oom=true;size=137438953472] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:indirect_buffer_for_draw_indirect:*] - [:test_indexed_draw=true] - expected: FAIL - - [:test_indexed_draw=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:state_and_binding_index:*] - [:encoderType="compute%20pass";state="valid";resourceType="buffer"] - expected: FAIL - - [:encoderType="compute%20pass";state="valid";resourceType="texture"] - expected: FAIL - - [:encoderType="compute%20pass";state="invalid";resourceType="buffer"] - expected: FAIL - - [:encoderType="compute%20pass";state="invalid";resourceType="texture"] - expected: FAIL - - [:encoderType="compute%20pass";state="destroyed";resourceType="buffer"] - expected: FAIL - - [:encoderType="compute%20pass";state="destroyed";resourceType="texture"] - expected: FAIL - - [:encoderType="render%20pass";state="valid";resourceType="buffer"] - expected: FAIL - - [:encoderType="render%20pass";state="valid";resourceType="texture"] - expected: FAIL - - [:encoderType="render%20pass";state="invalid";resourceType="buffer"] - expected: FAIL - - [:encoderType="render%20pass";state="invalid";resourceType="texture"] - expected: FAIL - - [:encoderType="render%20pass";state="destroyed";resourceType="buffer"] - expected: FAIL - - [:encoderType="render%20pass";state="destroyed";resourceType="texture"] - expected: FAIL - - [:encoderType="render%20bundle";state="valid";resourceType="buffer"] - expected: FAIL - - [:encoderType="render%20bundle";state="valid";resourceType="texture"] - expected: FAIL - - [:encoderType="render%20bundle";state="invalid";resourceType="buffer"] - expected: FAIL - - [:encoderType="render%20bundle";state="invalid";resourceType="texture"] - expected: FAIL - - [:encoderType="render%20bundle";state="destroyed";resourceType="buffer"] - expected: FAIL - - [:encoderType="render%20bundle";state="destroyed";resourceType="texture"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:viewFormats:*] - [:canvasType="onscreen";format="bgra8unorm";viewFormatFeature="_undef_"] - expected: FAIL - - [:canvasType="onscreen";format="bgra8unorm";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:canvasType="onscreen";format="bgra8unorm";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8unorm";viewFormatFeature="_undef_"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8unorm";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8unorm";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:canvasType="onscreen";format="rgba16float";viewFormatFeature="_undef_"] - expected: FAIL - - [:canvasType="onscreen";format="rgba16float";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:canvasType="onscreen";format="rgba16float";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:canvasType="offscreen";format="bgra8unorm";viewFormatFeature="_undef_"] - expected: FAIL - - [:canvasType="offscreen";format="bgra8unorm";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:canvasType="offscreen";format="bgra8unorm";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8unorm";viewFormatFeature="_undef_"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8unorm";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8unorm";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - [:canvasType="offscreen";format="rgba16float";viewFormatFeature="_undef_"] - expected: FAIL - - [:canvasType="offscreen";format="rgba16float";viewFormatFeature="depth32float-stencil8"] - expected: FAIL - - [:canvasType="offscreen";format="rgba16float";viewFormatFeature="texture-compression-bc"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:shader_module,compute:*] - [:isAsync=true;shaderModuleStage="compute"] - expected: FAIL - - [:isAsync=true;shaderModuleStage="vertex"] - expected: FAIL - - [:isAsync=true;shaderModuleStage="fragment"] - expected: FAIL - - [:isAsync=false;shaderModuleStage="compute"] - expected: FAIL - - [:isAsync=false;shaderModuleStage="vertex"] - expected: FAIL - - [:isAsync=false;shaderModuleStage="fragment"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:bindings_in_bundle:*] - [:type0="render-target";type1="sampled-texture"] - expected: FAIL - - [:type0="render-target";type1="multisampled-texture"] - expected: FAIL - - [:type0="render-target";type1="writeonly-storage-texture"] - expected: FAIL - - [:type0="sampled-texture";type1="render-target"] - expected: FAIL - - [:type0="sampled-texture";type1="sampled-texture"] - expected: FAIL - - [:type0="sampled-texture";type1="writeonly-storage-texture"] - expected: FAIL - - [:type0="multisampled-texture";type1="render-target"] - expected: FAIL - - [:type0="multisampled-texture";type1="multisampled-texture"] - expected: FAIL - - [:type0="writeonly-storage-texture";type1="render-target"] - expected: FAIL - - [:type0="writeonly-storage-texture";type1="sampled-texture"] - expected: FAIL - - [:type0="writeonly-storage-texture";type1="writeonly-storage-texture"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_nested_must_use:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,depth:depth_test_fail:*] - [:secondDepth=1;lastDepth=2] - expected: FAIL - - [:secondDepth=0;lastDepth=2] - expected: FAIL - - [:secondDepth=2;lastDepth=0.9] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countOneBits:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:compound_statement_single:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:f16:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,basic,render:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,index_access:out_of_bounds_zero_sized_index_buffer:*] - [:indexCount=3;firstIndex=1;instanceCount=1] - expected: FAIL - - [:indexCount=3;firstIndex=1;instanceCount=10000] - expected: FAIL - - [:indexCount=3;firstIndex=0;instanceCount=1] - expected: FAIL - - [:indexCount=3;firstIndex=0;instanceCount=10000] - expected: FAIL - - [:indexCount=0;firstIndex=1;instanceCount=1] - expected: FAIL - - [:indexCount=0;firstIndex=1;instanceCount=10000] - expected: FAIL - - [:indexCount=0;firstIndex=0;instanceCount=1] - expected: FAIL - - [:indexCount=0;firstIndex=0;instanceCount=10000] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_and_bundle,color_sparse:*] - [:attachmentCount=1] - expected: FAIL - - [:attachmentCount=2] - expected: FAIL - - [:attachmentCount=3] - expected: FAIL - - [:attachmentCount=4] - expected: FAIL - - [:attachmentCount=5] - expected: FAIL - - [:attachmentCount=6] - expected: FAIL - - [:attachmentCount=7] - expected: FAIL - - [:attachmentCount=8] - expected: FAIL - - [:attachmentCount=9] - expected: FAIL - - [:attachmentCount=10] - expected: FAIL - - [:attachmentCount=11] - expected: FAIL - - [:attachmentCount=12] - expected: FAIL - - [:attachmentCount=13] - expected: FAIL - - [:attachmentCount=14] - expected: FAIL - - [:attachmentCount=15] - expected: FAIL - - [:attachmentCount=16] - expected: FAIL - - [:attachmentCount=17] - expected: FAIL - - [:attachmentCount=18] - expected: FAIL - - [:attachmentCount=19] - expected: FAIL - - [:attachmentCount=20] - expected: FAIL - - [:attachmentCount=21] - expected: FAIL - - [:attachmentCount=22] - expected: FAIL - - [:attachmentCount=23] - expected: FAIL - - [:attachmentCount=24] - expected: FAIL - - [:attachmentCount=25] - expected: FAIL - - [:attachmentCount=26] - expected: FAIL - - [:attachmentCount=27] - expected: FAIL - - [:attachmentCount=28] - expected: FAIL - - [:attachmentCount=29] - expected: FAIL - - [:attachmentCount=30] - expected: FAIL - - [:attachmentCount=31] - expected: FAIL - - [:attachmentCount=32] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,round:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeTexture:usages:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,create:createBuffer_invalid_and_oom:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:attachments,same_size:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:user_fn_args:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,clearBuffer:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,saturate:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_C_C_C_R:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:queue,copyExternalImageToTexture,canvas:*] - [:canvasType="onscreen";contextType="2d"] - expected: FAIL - - [:canvasType="onscreen";contextType="bitmaprenderer"] - expected: FAIL - - [:canvasType="onscreen";contextType="webgl"] - expected: FAIL - - [:canvasType="onscreen";contextType="webgl2"] - expected: FAIL - - [:canvasType="onscreen";contextType="webgpu"] - expected: FAIL - - [:canvasType="offscreen";contextType="2d"] - expected: FAIL - - [:canvasType="offscreen";contextType="bitmaprenderer"] - expected: FAIL - - [:canvasType="offscreen";contextType="webgl"] - expected: FAIL - - [:canvasType="offscreen";contextType="webgl2"] - expected: FAIL - - [:canvasType="offscreen";contextType="webgpu"] - expected: FAIL - - [:canvasType="onscreen";contextType="2d";awaitLost=true] - expected: FAIL - - [:canvasType="onscreen";contextType="2d";awaitLost=false] - expected: FAIL - - [:canvasType="onscreen";contextType="bitmaprenderer";awaitLost=true] - expected: FAIL - - [:canvasType="onscreen";contextType="bitmaprenderer";awaitLost=false] - expected: FAIL - - [:canvasType="onscreen";contextType="webgl";awaitLost=true] - expected: FAIL - - [:canvasType="onscreen";contextType="webgl";awaitLost=false] - expected: FAIL - - [:canvasType="onscreen";contextType="webgl2";awaitLost=true] - expected: FAIL - - [:canvasType="onscreen";contextType="webgl2";awaitLost=false] - expected: FAIL - - [:canvasType="onscreen";contextType="webgpu";awaitLost=true] - expected: FAIL - - [:canvasType="onscreen";contextType="webgpu";awaitLost=false] - expected: FAIL - - [:canvasType="offscreen";contextType="2d";awaitLost=true] - expected: FAIL - - [:canvasType="offscreen";contextType="2d";awaitLost=false] - expected: FAIL - - [:canvasType="offscreen";contextType="bitmaprenderer";awaitLost=true] - expected: FAIL - - [:canvasType="offscreen";contextType="bitmaprenderer";awaitLost=false] - expected: FAIL - - [:canvasType="offscreen";contextType="webgl";awaitLost=true] - expected: FAIL - - [:canvasType="offscreen";contextType="webgl";awaitLost=false] - expected: FAIL - - [:canvasType="offscreen";contextType="webgl2";awaitLost=true] - expected: FAIL - - [:canvasType="offscreen";contextType="webgl2";awaitLost=false] - expected: FAIL - - [:canvasType="offscreen";contextType="webgpu";awaitLost=true] - expected: FAIL - - [:canvasType="offscreen";contextType="webgpu";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:attachments,mip_level_count:*] - [:mipLevelCount=2;baseMipLevel=0] - expected: FAIL - - [:mipLevelCount=1;baseMipLevel=0] - expected: FAIL - - [:mipLevelCount=1;baseMipLevel=3] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,read:dimension:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:multiplication_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:copy_end_overflows_u64:*] - [:method="WriteTexture"] - expected: FAIL - - [:method="CopyB2T"] - expected: FAIL - - [:method="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,default_value_and_smallest_size,uncompressed_format:*] - [:dimension="_undef_";format="r8unorm"] - expected: FAIL - - [:dimension="_undef_";format="r8snorm"] - expected: FAIL - - [:dimension="_undef_";format="r8uint"] - expected: FAIL - - [:dimension="_undef_";format="r8sint"] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8uint"] - expected: FAIL - - [:dimension="_undef_";format="rg8sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="r16uint"] - expected: FAIL - - [:dimension="_undef_";format="r16sint"] - expected: FAIL - - [:dimension="_undef_";format="r16float"] - expected: FAIL - - [:dimension="_undef_";format="rg16uint"] - expected: FAIL - - [:dimension="_undef_";format="rg16sint"] - expected: FAIL - - [:dimension="_undef_";format="rg16float"] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16float"] - expected: FAIL - - [:dimension="_undef_";format="r32uint"] - expected: FAIL - - [:dimension="_undef_";format="r32sint"] - expected: FAIL - - [:dimension="_undef_";format="r32float"] - expected: FAIL - - [:dimension="_undef_";format="rg32uint"] - expected: FAIL - - [:dimension="_undef_";format="rg32sint"] - expected: FAIL - - [:dimension="_undef_";format="rg32float"] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32float"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm"] - expected: FAIL - - [:dimension="_undef_";format="depth32float"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="1d";format="r8unorm"] - expected: FAIL - - [:dimension="1d";format="r8snorm"] - expected: FAIL - - [:dimension="1d";format="r8uint"] - expected: FAIL - - [:dimension="1d";format="r8sint"] - expected: FAIL - - [:dimension="1d";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";format="rg8uint"] - expected: FAIL - - [:dimension="1d";format="rg8sint"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r16uint"] - expected: FAIL - - [:dimension="1d";format="r16sint"] - expected: FAIL - - [:dimension="1d";format="r16float"] - expected: FAIL - - [:dimension="1d";format="rg16uint"] - expected: FAIL - - [:dimension="1d";format="rg16sint"] - expected: FAIL - - [:dimension="1d";format="rg16float"] - expected: FAIL - - [:dimension="1d";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";format="rgba16float"] - expected: FAIL - - [:dimension="1d";format="r32uint"] - expected: FAIL - - [:dimension="1d";format="r32sint"] - expected: FAIL - - [:dimension="1d";format="r32float"] - expected: FAIL - - [:dimension="1d";format="rg32uint"] - expected: FAIL - - [:dimension="1d";format="rg32sint"] - expected: FAIL - - [:dimension="1d";format="rg32float"] - expected: FAIL - - [:dimension="1d";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";format="rgba32float"] - expected: FAIL - - [:dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="r8unorm"] - expected: FAIL - - [:dimension="2d";format="r8snorm"] - expected: FAIL - - [:dimension="2d";format="r8uint"] - expected: FAIL - - [:dimension="2d";format="r8sint"] - expected: FAIL - - [:dimension="2d";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";format="rg8uint"] - expected: FAIL - - [:dimension="2d";format="rg8sint"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r16uint"] - expected: FAIL - - [:dimension="2d";format="r16sint"] - expected: FAIL - - [:dimension="2d";format="r16float"] - expected: FAIL - - [:dimension="2d";format="rg16uint"] - expected: FAIL - - [:dimension="2d";format="rg16sint"] - expected: FAIL - - [:dimension="2d";format="rg16float"] - expected: FAIL - - [:dimension="2d";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";format="rgba16float"] - expected: FAIL - - [:dimension="2d";format="r32uint"] - expected: FAIL - - [:dimension="2d";format="r32sint"] - expected: FAIL - - [:dimension="2d";format="r32float"] - expected: FAIL - - [:dimension="2d";format="rg32uint"] - expected: FAIL - - [:dimension="2d";format="rg32sint"] - expected: FAIL - - [:dimension="2d";format="rg32float"] - expected: FAIL - - [:dimension="2d";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";format="rgba32float"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="stencil8"] - expected: FAIL - - [:dimension="2d";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";format="depth32float"] - expected: FAIL - - [:dimension="2d";format="depth24plus"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="3d";format="r8unorm"] - expected: FAIL - - [:dimension="3d";format="r8snorm"] - expected: FAIL - - [:dimension="3d";format="r8uint"] - expected: FAIL - - [:dimension="3d";format="r8sint"] - expected: FAIL - - [:dimension="3d";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";format="rg8uint"] - expected: FAIL - - [:dimension="3d";format="rg8sint"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r16uint"] - expected: FAIL - - [:dimension="3d";format="r16sint"] - expected: FAIL - - [:dimension="3d";format="r16float"] - expected: FAIL - - [:dimension="3d";format="rg16uint"] - expected: FAIL - - [:dimension="3d";format="rg16sint"] - expected: FAIL - - [:dimension="3d";format="rg16float"] - expected: FAIL - - [:dimension="3d";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";format="rgba16float"] - expected: FAIL - - [:dimension="3d";format="r32uint"] - expected: FAIL - - [:dimension="3d";format="r32sint"] - expected: FAIL - - [:dimension="3d";format="r32float"] - expected: FAIL - - [:dimension="3d";format="rg32uint"] - expected: FAIL - - [:dimension="3d";format="rg32sint"] - expected: FAIL - - [:dimension="3d";format="rg32float"] - expected: FAIL - - [:dimension="3d";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";format="rgba32float"] - expected: FAIL - - [:dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:visibility:*] - [:visibility=0] - expected: FAIL - - [:visibility=1] - expected: FAIL - - [:visibility=2] - expected: FAIL - - [:visibility=3] - expected: FAIL - - [:visibility=4] - expected: FAIL - - [:visibility=5] - expected: FAIL - - [:visibility=6] - expected: FAIL - - [:visibility=7] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,destroy:submit_a_destroyed_texture_as_attachment:*] - [:depthStencilTextureAspect="all";colorTextureState="valid";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="valid";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="valid";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="destroyedAfterEncode";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="destroyedAfterEncode";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="all";colorTextureState="destroyedAfterEncode";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="valid";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="valid";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="valid";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="destroyedAfterEncode";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="destroyedAfterEncode";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="depth-only";colorTextureState="destroyedAfterEncode";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="valid";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="valid";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="valid";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="destroyedBeforeEncode";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="destroyedAfterEncode";depthStencilTextureState="valid"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="destroyedAfterEncode";depthStencilTextureState="destroyedBeforeEncode"] - expected: FAIL - - [:depthStencilTextureAspect="stencil-only";colorTextureState="destroyedAfterEncode";depthStencilTextureState="destroyedAfterEncode"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,offsetAndSizeAlignment,mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_initalizer:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sin:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_ranges_with_compressed_texture_formats:*] - [:format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,bitwise_shift:shift_left_concrete_compound:*] - [:type="i32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="i32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="const";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="uniform";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_r";vectorize=4] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:type="u32";inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_twice,basic:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_chain_R_C_C_C:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,overrides:precision:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:onscreenCanvas,uploadToWebGL:*] - [:format="bgra8unorm";alphaMode="opaque";webgl="webgl";upload="texImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";webgl="webgl";upload="texSubImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";webgl="webgl2";upload="texImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="opaque";webgl="webgl2";upload="texSubImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";webgl="webgl";upload="texImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";webgl="webgl";upload="texSubImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";webgl="webgl2";upload="texImage2D"] - expected: FAIL - - [:format="bgra8unorm";alphaMode="premultiplied";webgl="webgl2";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";webgl="webgl";upload="texImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";webgl="webgl";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";webgl="webgl2";upload="texImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="opaque";webgl="webgl2";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";webgl="webgl";upload="texImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";webgl="webgl";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";webgl="webgl2";upload="texImage2D"] - expected: FAIL - - [:format="rgba8unorm";alphaMode="premultiplied";webgl="webgl2";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";webgl="webgl";upload="texImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";webgl="webgl";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";webgl="webgl2";upload="texImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="opaque";webgl="webgl2";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";webgl="webgl";upload="texImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";webgl="webgl";upload="texSubImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";webgl="webgl2";upload="texImage2D"] - expected: FAIL - - [:format="rgba16float";alphaMode="premultiplied";webgl="webgl2";upload="texSubImage2D"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,builtins:duplicates:*] - [:first="p1";second="p2"] - expected: FAIL - - [:first="p1";second="s1b"] - expected: FAIL - - [:first="p1";second="s2b"] - expected: FAIL - - [:first="p1";second="rb"] - expected: FAIL - - [:first="s1a";second="p2"] - expected: FAIL - - [:first="s1a";second="s1b"] - expected: FAIL - - [:first="s1a";second="s2b"] - expected: FAIL - - [:first="s1a";second="rb"] - expected: FAIL - - [:first="s2a";second="p2"] - expected: FAIL - - [:first="s2a";second="s1b"] - expected: FAIL - - [:first="s2a";second="s2b"] - expected: FAIL - - [:first="s2a";second="rb"] - expected: FAIL - - [:first="ra";second="p2"] - expected: FAIL - - [:first="ra";second="s1b"] - expected: FAIL - - [:first="ra";second="s2b"] - expected: FAIL - - [:first="ra";second="rb"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:scalar_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:rw:*] - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:storage_texture,usage:*] - [:usage0=1;usage1=1] - expected: FAIL - - [:usage0=1;usage1=2] - expected: FAIL - - [:usage0=1;usage1=4] - expected: FAIL - - [:usage0=1;usage1=8] - expected: FAIL - - [:usage0=1;usage1=16] - expected: FAIL - - [:usage0=2;usage1=1] - expected: FAIL - - [:usage0=2;usage1=2] - expected: FAIL - - [:usage0=2;usage1=4] - expected: FAIL - - [:usage0=2;usage1=8] - expected: FAIL - - [:usage0=2;usage1=16] - expected: FAIL - - [:usage0=4;usage1=1] - expected: FAIL - - [:usage0=4;usage1=2] - expected: FAIL - - [:usage0=4;usage1=4] - expected: FAIL - - [:usage0=4;usage1=8] - expected: FAIL - - [:usage0=4;usage1=16] - expected: FAIL - - [:usage0=8;usage1=1] - expected: FAIL - - [:usage0=8;usage1=2] - expected: FAIL - - [:usage0=8;usage1=4] - expected: FAIL - - [:usage0=8;usage1=8] - expected: FAIL - - [:usage0=8;usage1=16] - expected: FAIL - - [:usage0=16;usage1=1] - expected: FAIL - - [:usage0=16;usage1=2] - expected: FAIL - - [:usage0=16;usage1=4] - expected: FAIL - - [:usage0=16;usage1=8] - expected: FAIL - - [:usage0=16;usage1=16] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f16:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:rows_per_image_alignment:*] - [:method="WriteTexture";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,subrange,mappedAtCreation:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:depth_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pow:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxInterStageShaderComponents:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=false;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=false;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=false;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=false;sampleMaskOut=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true;pointList=true;frontFacing=true;sampleIndex=true;sampleMaskIn=true;sampleMaskOut=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sign:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:ww:*] - [:boundary="queue-op";writeOps=["write-buffer","write-buffer"\];contexts=["queue","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","b2b-copy"\];contexts=["queue","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","t2b-copy"\];contexts=["queue","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["write-buffer","storage"\];contexts=["queue","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","write-buffer"\];contexts=["command-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["compute-pass-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-pass-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","write-buffer"\];contexts=["render-bundle-encoder","queue"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="queue-op";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","b2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","t2b-copy"\];contexts=["command-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["b2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-pass-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["t2b-copy","storage"\];contexts=["command-encoder","render-bundle-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","b2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["compute-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-pass-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","t2b-copy"\];contexts=["render-bundle-encoder","command-encoder"\]] - expected: FAIL - - [:boundary="command-buffer";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="pass";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - [:boundary="dispatch";writeOps=["storage","storage"\];contexts=["compute-pass-encoder","compute-pass-encoder"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstLeadingBit:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer,resource_state:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:validate:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:vec3_element_increment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,multiple_bind_groups:*] - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":0,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":1};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="storage";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":0,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":1};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":0,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":1};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="storage";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":0,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":1};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=true] - expected: FAIL - - [:bg0Levels={"base":1,"count":2};bg0Layers={"base":1,"count":2};bg1Levels={"base":1,"count":2};bg1Layers={"base":1,"count":2};bgUsage0="texture";bgUsage1="texture";inSamePass=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,normalize:f32_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texel_data:ufloat_texel_data_in_shader:*] - [:format="rg11b10ufloat"] - expected: FAIL - - [:format="rgb9e5ufloat"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_fn_args:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,sample_count:*] - [:encoderType="render%20pass";attachmentType="color"] - expected: FAIL - - [:encoderType="render%20pass";attachmentType="depthstencil"] - expected: FAIL - - [:encoderType="render%20bundle";attachmentType="color"] - expected: FAIL - - [:encoderType="render%20bundle";attachmentType="depthstencil"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,faceForward:abstract_float:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleGrad:sampled_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_within_same_texture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,index_format:index_format,uint32:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,basic:clear:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_continuing:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,beginRenderPass:color_attachments,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,shader_module,entry_point:fragment:*] - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint=""] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000a"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%20"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="ma%20in"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cn"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mian";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mian";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mainmain";stageEntryPoint="mainmain"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="mainmain";stageEntryPoint="foo"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V3"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V5"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="_main_t12V3"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="s%C3%A9quen%C3%A7age"] - expected: FAIL - - [:isAsync=true;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="se%CC%81quen%C3%A7age"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint=""] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cu0000a"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%20"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="ma%20in"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main";stageEntryPoint="main%5Cn"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mian";stageEntryPoint="mian"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mian";stageEntryPoint="main"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mainmain";stageEntryPoint="mainmain"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="mainmain";stageEntryPoint="foo"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V3"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="main_t12V5"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="main_t12V3";stageEntryPoint="_main_t12V3"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="s%C3%A9quen%C3%A7age"] - expected: FAIL - - [:isAsync=false;shaderModuleEntryPoint="s%C3%A9quen%C3%A7age";stageEntryPoint="se%CC%81quen%C3%A7age"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:occlusion_query,begin_end_invalid_nesting:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:out_of_bounds:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:size_zero_after_configure:*] - [:canvasType="onscreen";zeroDimension="width"] - expected: FAIL - - [:canvasType="onscreen";zeroDimension="height"] - expected: FAIL - - [:canvasType="offscreen";zeroDimension="width"] - expected: FAIL - - [:canvasType="offscreen";zeroDimension="height"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,getBindGroupLayout:index_range,explicit_layout:*] - [:index=0] - expected: FAIL - - [:index=1] - expected: FAIL - - [:index=2] - expected: FAIL - - [:index=3] - expected: FAIL - - [:index=4] + [:maxedEntry={"storageTexture":{"access":"read-only","format":"r32float"}}] expected: FAIL - [:index=5] + [:maxedEntry={"storageTexture":{"access":"read-write","format":"r32float"}}] expected: FAIL [cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_while_continue:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,sizeAndOffsetOOB,mapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,non_multisampled:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:dispatch_sizes:*] - [:dispatchType="direct";largeDimValue=0] - expected: FAIL - - [:dispatchType="direct";largeDimValue=1] - expected: FAIL - - [:dispatchType="direct";largeDimValue=65535] - expected: FAIL - - [:dispatchType="direct";largeDimValue=65536] - expected: FAIL - - [:dispatchType="direct";largeDimValue=2147483647] - expected: FAIL - - [:dispatchType="direct";largeDimValue=4294967295] - expected: FAIL - - [:dispatchType="indirect";largeDimValue=0] - expected: FAIL - - [:dispatchType="indirect";largeDimValue=1] - expected: FAIL - - [:dispatchType="indirect";largeDimValue=65535] - expected: FAIL - - [:dispatchType="indirect";largeDimValue=65536] - expected: FAIL - - [:dispatchType="indirect";largeDimValue=2147483647] - expected: FAIL - - [:dispatchType="indirect";largeDimValue=4294967295] - expected: FAIL - - [:dispatchType="direct";largeDimValueVariant={"mult":0,"add":0}] - expected: FAIL - - [:dispatchType="direct";largeDimValueVariant={"mult":0,"add":1}] - expected: FAIL - - [:dispatchType="direct";largeDimValueVariant={"mult":1,"add":0}] - expected: FAIL - - [:dispatchType="direct";largeDimValueVariant={"mult":1,"add":1}] - expected: FAIL - - [:dispatchType="direct";largeDimValueVariant={"mult":0,"add":2147483647}] - expected: FAIL - - [:dispatchType="direct";largeDimValueVariant={"mult":0,"add":4294967295}] - expected: FAIL - - [:dispatchType="indirect";largeDimValueVariant={"mult":0,"add":0}] - expected: FAIL - - [:dispatchType="indirect";largeDimValueVariant={"mult":0,"add":1}] - expected: FAIL - - [:dispatchType="indirect";largeDimValueVariant={"mult":1,"add":0}] - expected: FAIL - - [:dispatchType="indirect";largeDimValueVariant={"mult":1,"add":1}] - expected: FAIL - - [:dispatchType="indirect";largeDimValueVariant={"mult":0,"add":2147483647}] - expected: FAIL - - [:dispatchType="indirect";largeDimValueVariant={"mult":0,"add":4294967295}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="storage";order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;type="read-only-storage";order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,radians:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,vertex_state,correctness:array_stride_zero:*] - [:format="uint8x2"] - expected: FAIL - - [:format="uint8x4"] - expected: FAIL - - [:format="sint8x2"] - expected: FAIL - - [:format="sint8x4"] - expected: FAIL - - [:format="unorm8x2"] - expected: FAIL - - [:format="unorm8x4"] - expected: FAIL - - [:format="snorm8x2"] - expected: FAIL - - [:format="snorm8x4"] - expected: FAIL - - [:format="uint16x2"] - expected: FAIL - - [:format="uint16x4"] - expected: FAIL - - [:format="sint16x2"] - expected: FAIL - - [:format="sint16x4"] - expected: FAIL - - [:format="unorm16x2"] - expected: FAIL - - [:format="unorm16x4"] - expected: FAIL - - [:format="snorm16x2"] - expected: FAIL - - [:format="snorm16x4"] - expected: FAIL - - [:format="float16x2"] - expected: FAIL - - [:format="float16x4"] - expected: FAIL - - [:format="float32"] - expected: FAIL - - [:format="float32x2"] - expected: FAIL - - [:format="float32x3"] - expected: FAIL - - [:format="float32x4"] - expected: FAIL - - [:format="uint32"] - expected: FAIL - - [:format="uint32x2"] - expected: FAIL - - [:format="uint32x3"] - expected: FAIL - - [:format="uint32x4"] - expected: FAIL - - [:format="sint32"] - expected: FAIL - - [:format="sint32x2"] - expected: FAIL - - [:format="sint32x3"] - expected: FAIL - - [:format="sint32x4"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:unused_buffer_bound:*] - [:smallIndexBuffer=false;smallVertexBuffer=false;smallInstanceBuffer=false] - expected: FAIL - - [:smallIndexBuffer=false;smallVertexBuffer=false;smallInstanceBuffer=true] - expected: FAIL - - [:smallIndexBuffer=false;smallVertexBuffer=true;smallInstanceBuffer=false] - expected: FAIL - - [:smallIndexBuffer=false;smallVertexBuffer=true;smallInstanceBuffer=true] - expected: FAIL - - [:smallIndexBuffer=true;smallVertexBuffer=false;smallInstanceBuffer=false] - expected: FAIL - - [:smallIndexBuffer=true;smallVertexBuffer=false;smallInstanceBuffer=true] - expected: FAIL - - [:smallIndexBuffer=true;smallVertexBuffer=true;smallInstanceBuffer=false] - expected: FAIL - - [:smallIndexBuffer=true;smallVertexBuffer=true;smallInstanceBuffer=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:vec3:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:f32_vec4_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:copy_aspects:*] - [:format="rgba8unorm"] - expected: FAIL - - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:queryset_and_destination_buffer_state:*] - [:querySetState="valid";destinationState="valid"] - expected: FAIL - - [:querySetState="valid";destinationState="invalid"] - expected: FAIL - - [:querySetState="valid";destinationState="destroyed"] - expected: FAIL - - [:querySetState="invalid";destinationState="valid"] - expected: FAIL - - [:querySetState="invalid";destinationState="invalid"] - expected: FAIL - - [:querySetState="invalid";destinationState="destroyed"] - expected: FAIL - - [:querySetState="destroyed";destinationState="valid"] - expected: FAIL - - [:querySetState="destroyed";destinationState="invalid"] - expected: FAIL - - [:querySetState="destroyed";destinationState="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_parenthesized_expr:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_fn_const_assert:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,max:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,query_set,destroy:twice:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,unpack2x16unorm:unpack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,setBindGroup:dynamic_offsets_passed_but_not_expected:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,bool_conversion:u32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:binary_op_rhs_const:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:createRenderBundle,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=1;interleaveFormat="r8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg16float"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rgba8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="rg8unorm"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";sampleCount=4;interleaveFormat="r8unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,state,mappingPending:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:depth_stencil_attachment,depth_clear_value:*] - [:depthLoadOp="load";depthClearValue="_undef_"] - expected: FAIL - - [:depthLoadOp="load";depthClearValue=-1] - expected: FAIL - - [:depthLoadOp="load";depthClearValue=0] - expected: FAIL - - [:depthLoadOp="load";depthClearValue=0.5] - expected: FAIL - - [:depthLoadOp="load";depthClearValue=1] - expected: FAIL - - [:depthLoadOp="load";depthClearValue=1.5] - expected: FAIL - - [:depthLoadOp="clear";depthClearValue="_undef_"] - expected: FAIL - - [:depthLoadOp="clear";depthClearValue=-1] - expected: FAIL - - [:depthLoadOp="clear";depthClearValue=0] - expected: FAIL - - [:depthLoadOp="clear";depthClearValue=0.5] - expected: FAIL - - [:depthLoadOp="clear";depthClearValue=1] - expected: FAIL - - [:depthLoadOp="clear";depthClearValue=1.5] - expected: FAIL - - [:depthLoadOp="_undef_";depthClearValue="_undef_"] - expected: FAIL - - [:depthLoadOp="_undef_";depthClearValue=-1] - expected: FAIL - - [:depthLoadOp="_undef_";depthClearValue=0] - expected: FAIL - - [:depthLoadOp="_undef_";depthClearValue=0.5] - expected: FAIL - - [:depthLoadOp="_undef_";depthClearValue=1] - expected: FAIL - - [:depthLoadOp="_undef_";depthClearValue=1.5] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,buffer:copyTextureToBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:readonly_storage_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createView:mip_levels:*] - [:textureDimension="1d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="1d";viewDimension="1d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="2d";viewDimension="2d"] - expected: FAIL - - [:textureDimension="2d";viewDimension="2d-array"] - expected: FAIL - - [:textureDimension="2d";viewDimension="cube"] - expected: FAIL - - [:textureDimension="2d";viewDimension="cube-array"] - expected: FAIL - - [:textureDimension="3d";viewDimension="_undef_"] - expected: FAIL - - [:textureDimension="3d";viewDimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,basic:b2t2b:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_complement:i32_complement:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:bools:*] - [:val="true"] - expected: FAIL - - [:val="false"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:scalar_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,disjoinRanges_many:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,basic:large_draw:*] - [:indexed=true;indirect=true] - expected: FAIL - - [:indexed=true;indirect=false] - expected: FAIL - - [:indexed=false;indirect=true] - expected: FAIL - - [:indexed=false;indirect=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,buffer_mapped:writeBuffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:copy_subrect_from_2D_Canvas:*] - [:orientation="none";srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:orientation="none";srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,tanh:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,arrayLength:multiple_elements:*] - [:buffer_size=640;type="u32";stride=4] - expected: FAIL - - [:buffer_size=640;type="i32";stride=4] - expected: FAIL - - [:buffer_size=640;type="f32";stride=4] - expected: FAIL - - [:buffer_size=640;type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:buffer_size=640;type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:buffer_size=640;type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:buffer_size=640;type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=640;type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=640;type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:buffer_size=640;type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:buffer_size=640;type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:buffer_size=640;type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=640;type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:buffer_size=640;type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:buffer_size=640;type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:buffer_size=640;type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:buffer_size=640;type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=640;type="ElemStruct";stride=4] - expected: FAIL - - [:buffer_size=640;type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:buffer_size=640;type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - [:buffer_size=1004;type="u32";stride=4] - expected: FAIL - - [:buffer_size=1004;type="i32";stride=4] - expected: FAIL - - [:buffer_size=1004;type="f32";stride=4] - expected: FAIL - - [:buffer_size=1004;type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:buffer_size=1004;type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:buffer_size=1004;type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:buffer_size=1004;type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=1004;type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=1004;type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:buffer_size=1004;type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:buffer_size=1004;type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:buffer_size=1004;type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=1004;type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:buffer_size=1004;type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:buffer_size=1004;type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:buffer_size=1004;type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:buffer_size=1004;type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=1004;type="ElemStruct";stride=4] - expected: FAIL - - [:buffer_size=1004;type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:buffer_size=1004;type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - [:buffer_size=1048576;type="u32";stride=4] - expected: FAIL - - [:buffer_size=1048576;type="i32";stride=4] - expected: FAIL - - [:buffer_size=1048576;type="f32";stride=4] - expected: FAIL - - [:buffer_size=1048576;type="vec2%3Cu32%3E";stride=8] - expected: FAIL - - [:buffer_size=1048576;type="vec2%3Ci32%3E";stride=8] - expected: FAIL - - [:buffer_size=1048576;type="vec2%3Cf32%3E";stride=8] - expected: FAIL - - [:buffer_size=1048576;type="vec3%3Cu32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="vec3%3Ci32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="vec3%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="vec4%3Cu32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="vec4%3Ci32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="vec4%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="mat2x2%3Cf32%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="mat2x3%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=1048576;type="mat2x4%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=1048576;type="mat3x2%3Cf32%3E";stride=24] - expected: FAIL - - [:buffer_size=1048576;type="mat3x3%3Cf32%3E";stride=48] - expected: FAIL - - [:buffer_size=1048576;type="mat3x4%3Cf32%3E";stride=48] - expected: FAIL - - [:buffer_size=1048576;type="mat4x2%3Cf32%3E";stride=32] - expected: FAIL - - [:buffer_size=1048576;type="mat4x3%3Cf32%3E";stride=64] - expected: FAIL - - [:buffer_size=1048576;type="mat4x4%3Cf32%3E";stride=64] - expected: FAIL - - [:buffer_size=1048576;type="atomic%3Cu32%3E";stride=4] - expected: FAIL - - [:buffer_size=1048576;type="atomic%3Ci32%3E";stride=4] - expected: FAIL - - [:buffer_size=1048576;type="array%3Cu32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="array%3Ci32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="array%3Cf32,4%3E";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="ElemStruct";stride=4] - expected: FAIL - - [:buffer_size=1048576;type="ElemStruct_ImplicitPadding";stride=16] - expected: FAIL - - [:buffer_size=1048576;type="ElemStruct_ExplicitPadding";stride=32] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:sampled_1d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_open_state:render_pass_commands:*] - [:command="draw"] - expected: FAIL - - [:command="drawIndexed"] - expected: FAIL - - [:command="drawIndexedIndirect"] - expected: FAIL - - [:command="drawIndirect"] - expected: FAIL - - [:command="setIndexBuffer"] - expected: FAIL - - [:command="setBindGroup"] - expected: FAIL - - [:command="setVertexBuffer"] - expected: FAIL - - [:command="setPipeline"] - expected: FAIL - - [:command="setViewport"] - expected: FAIL - - [:command="setScissorRect"] - expected: FAIL - - [:command="setBlendConstant"] - expected: FAIL - - [:command="setStencilReference"] - expected: FAIL - - [:command="beginOcclusionQuery"] - expected: FAIL - - [:command="endOcclusionQuery"] - expected: FAIL - - [:command="executeBundles"] - expected: FAIL - - [:command="pushDebugGroup"] - expected: FAIL - - [:command="popDebugGroup"] - expected: FAIL - - [:command="insertDebugMarker"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,readbackFromWebGPUCanvas:transferToImageBitmap_huge_size:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:nonmatching_f32:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:pipeline_output_targets,blend:*] - [:isAsync=false;format="r8unorm";componentCount=1] - expected: FAIL - - [:isAsync=false;format="r8unorm";componentCount=2] - expected: FAIL - - [:isAsync=false;format="r8unorm";componentCount=3] - expected: FAIL - - [:isAsync=false;format="r8unorm";componentCount=4] - expected: FAIL - - [:isAsync=false;format="rg8unorm";componentCount=1] - expected: FAIL - - [:isAsync=false;format="rg8unorm";componentCount=2] - expected: FAIL - - [:isAsync=false;format="rg8unorm";componentCount=3] - expected: FAIL - - [:isAsync=false;format="rg8unorm";componentCount=4] - expected: FAIL - - [:isAsync=false;format="rgba8unorm";componentCount=1] - expected: FAIL - - [:isAsync=false;format="rgba8unorm";componentCount=2] - expected: FAIL - - [:isAsync=false;format="rgba8unorm";componentCount=3] - expected: FAIL - - [:isAsync=false;format="rgba8unorm";componentCount=4] - expected: FAIL - - [:isAsync=false;format="bgra8unorm";componentCount=1] - expected: FAIL - - [:isAsync=false;format="bgra8unorm";componentCount=2] - expected: FAIL - - [:isAsync=false;format="bgra8unorm";componentCount=3] - expected: FAIL - - [:isAsync=false;format="bgra8unorm";componentCount=4] - expected: FAIL - - [:isAsync=true;format="r8unorm";componentCount=1] - expected: FAIL - - [:isAsync=true;format="r8unorm";componentCount=2] - expected: FAIL - - [:isAsync=true;format="r8unorm";componentCount=3] - expected: FAIL - - [:isAsync=true;format="r8unorm";componentCount=4] - expected: FAIL - - [:isAsync=true;format="rg8unorm";componentCount=1] - expected: FAIL - - [:isAsync=true;format="rg8unorm";componentCount=2] - expected: FAIL - - [:isAsync=true;format="rg8unorm";componentCount=3] - expected: FAIL - - [:isAsync=true;format="rg8unorm";componentCount=4] - expected: FAIL - - [:isAsync=true;format="rgba8unorm";componentCount=1] - expected: FAIL - - [:isAsync=true;format="rgba8unorm";componentCount=2] - expected: FAIL - - [:isAsync=true;format="rgba8unorm";componentCount=3] - expected: FAIL - - [:isAsync=true;format="rgba8unorm";componentCount=4] - expected: FAIL - - [:isAsync=true;format="bgra8unorm";componentCount=1] - expected: FAIL - - [:isAsync=true;format="bgra8unorm";componentCount=2] - expected: FAIL - - [:isAsync=true;format="bgra8unorm";componentCount=3] - expected: FAIL - - [:isAsync=true;format="bgra8unorm";componentCount=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,inter_stage:max_shader_variable_location:*] - [:isAsync=false;locationDelta=0] - expected: FAIL - - [:isAsync=false;locationDelta=-1] - expected: FAIL - - [:isAsync=false;locationDelta=-2] - expected: FAIL - - [:isAsync=true;locationDelta=0] - expected: FAIL - - [:isAsync=true;locationDelta=-1] - expected: FAIL - - [:isAsync=true;locationDelta=-2] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:vector_scalar_compound:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:format:*] - [:canvasType="onscreen";format="r8unorm"] - expected: FAIL - - [:canvasType="onscreen";format="r8snorm"] - expected: FAIL - - [:canvasType="onscreen";format="r8uint"] - expected: FAIL - - [:canvasType="onscreen";format="r8sint"] - expected: FAIL - - [:canvasType="onscreen";format="rg8unorm"] - expected: FAIL - - [:canvasType="onscreen";format="rg8snorm"] - expected: FAIL - - [:canvasType="onscreen";format="rg8uint"] - expected: FAIL - - [:canvasType="onscreen";format="rg8sint"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8unorm"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8unorm-srgb"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8snorm"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8uint"] - expected: FAIL - - [:canvasType="onscreen";format="rgba8sint"] - expected: FAIL - - [:canvasType="onscreen";format="bgra8unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bgra8unorm-srgb"] - expected: FAIL - - [:canvasType="onscreen";format="r16uint"] - expected: FAIL - - [:canvasType="onscreen";format="r16sint"] - expected: FAIL - - [:canvasType="onscreen";format="r16float"] - expected: FAIL - - [:canvasType="onscreen";format="rg16uint"] - expected: FAIL - - [:canvasType="onscreen";format="rg16sint"] - expected: FAIL - - [:canvasType="onscreen";format="rg16float"] - expected: FAIL - - [:canvasType="onscreen";format="rgba16uint"] - expected: FAIL - - [:canvasType="onscreen";format="rgba16sint"] - expected: FAIL - - [:canvasType="onscreen";format="rgba16float"] - expected: FAIL - - [:canvasType="onscreen";format="r32uint"] - expected: FAIL - - [:canvasType="onscreen";format="r32sint"] - expected: FAIL - - [:canvasType="onscreen";format="r32float"] - expected: FAIL - - [:canvasType="onscreen";format="rg32uint"] - expected: FAIL - - [:canvasType="onscreen";format="rg32sint"] - expected: FAIL - - [:canvasType="onscreen";format="rg32float"] - expected: FAIL - - [:canvasType="onscreen";format="rgba32uint"] - expected: FAIL - - [:canvasType="onscreen";format="rgba32sint"] - expected: FAIL - - [:canvasType="onscreen";format="rgba32float"] - expected: FAIL - - [:canvasType="onscreen";format="rgb10a2unorm"] - expected: FAIL - - [:canvasType="onscreen";format="rg11b10ufloat"] - expected: FAIL - - [:canvasType="onscreen";format="rgb9e5ufloat"] - expected: FAIL - - [:canvasType="onscreen";format="stencil8"] - expected: FAIL - - [:canvasType="onscreen";format="depth16unorm"] - expected: FAIL - - [:canvasType="onscreen";format="depth32float"] - expected: FAIL - - [:canvasType="onscreen";format="depth24plus"] - expected: FAIL - - [:canvasType="onscreen";format="depth24plus-stencil8"] - expected: FAIL - - [:canvasType="onscreen";format="depth32float-stencil8"] - expected: FAIL - - [:canvasType="onscreen";format="bc1-rgba-unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="onscreen";format="bc2-rgba-unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="onscreen";format="bc3-rgba-unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="onscreen";format="bc4-r-unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc4-r-snorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc5-rg-unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc5-rg-snorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:canvasType="onscreen";format="bc6h-rgb-float"] - expected: FAIL - - [:canvasType="onscreen";format="bc7-rgba-unorm"] - expected: FAIL - - [:canvasType="onscreen";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="offscreen";format="r8unorm"] - expected: FAIL - - [:canvasType="offscreen";format="r8snorm"] - expected: FAIL - - [:canvasType="offscreen";format="r8uint"] - expected: FAIL - - [:canvasType="offscreen";format="r8sint"] - expected: FAIL - - [:canvasType="offscreen";format="rg8unorm"] - expected: FAIL - - [:canvasType="offscreen";format="rg8snorm"] - expected: FAIL - - [:canvasType="offscreen";format="rg8uint"] - expected: FAIL - - [:canvasType="offscreen";format="rg8sint"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8unorm"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8unorm-srgb"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8snorm"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8uint"] - expected: FAIL - - [:canvasType="offscreen";format="rgba8sint"] - expected: FAIL - - [:canvasType="offscreen";format="bgra8unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bgra8unorm-srgb"] - expected: FAIL - - [:canvasType="offscreen";format="r16uint"] - expected: FAIL - - [:canvasType="offscreen";format="r16sint"] - expected: FAIL - - [:canvasType="offscreen";format="r16float"] - expected: FAIL - - [:canvasType="offscreen";format="rg16uint"] - expected: FAIL - - [:canvasType="offscreen";format="rg16sint"] - expected: FAIL - - [:canvasType="offscreen";format="rg16float"] - expected: FAIL - - [:canvasType="offscreen";format="rgba16uint"] - expected: FAIL - - [:canvasType="offscreen";format="rgba16sint"] - expected: FAIL - - [:canvasType="offscreen";format="rgba16float"] - expected: FAIL - - [:canvasType="offscreen";format="r32uint"] - expected: FAIL - - [:canvasType="offscreen";format="r32sint"] - expected: FAIL - - [:canvasType="offscreen";format="r32float"] - expected: FAIL - - [:canvasType="offscreen";format="rg32uint"] - expected: FAIL - - [:canvasType="offscreen";format="rg32sint"] - expected: FAIL - - [:canvasType="offscreen";format="rg32float"] - expected: FAIL - - [:canvasType="offscreen";format="rgba32uint"] - expected: FAIL - - [:canvasType="offscreen";format="rgba32sint"] - expected: FAIL - - [:canvasType="offscreen";format="rgba32float"] - expected: FAIL - - [:canvasType="offscreen";format="rgb10a2unorm"] - expected: FAIL - - [:canvasType="offscreen";format="rg11b10ufloat"] - expected: FAIL - - [:canvasType="offscreen";format="rgb9e5ufloat"] - expected: FAIL - - [:canvasType="offscreen";format="stencil8"] - expected: FAIL - - [:canvasType="offscreen";format="depth16unorm"] - expected: FAIL - - [:canvasType="offscreen";format="depth32float"] - expected: FAIL - - [:canvasType="offscreen";format="depth24plus"] - expected: FAIL - - [:canvasType="offscreen";format="depth24plus-stencil8"] - expected: FAIL - - [:canvasType="offscreen";format="depth32float-stencil8"] - expected: FAIL - - [:canvasType="offscreen";format="bc1-rgba-unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="offscreen";format="bc2-rgba-unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="offscreen";format="bc3-rgba-unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="offscreen";format="bc4-r-unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc4-r-snorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc5-rg-unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc5-rg-snorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:canvasType="offscreen";format="bc6h-rgb-float"] - expected: FAIL - - [:canvasType="offscreen";format="bc7-rgba-unorm"] - expected: FAIL - - [:canvasType="offscreen";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:canvasType="onscreen";format="rgb10a2uint"] - expected: FAIL - - [:canvasType="offscreen";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,reflection:texture_reflection_attributes:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_encoder:subresources,buffer_usage_in_one_compute_pass_with_one_dispatch:*] - [:usage0AccessibleInDispatch=true;usage1AccessibleInDispatch=true;dispatchBeforeUsage1=false] - expected: FAIL - - [:usage0AccessibleInDispatch=true;usage1AccessibleInDispatch=false;dispatchBeforeUsage1=true] - expected: FAIL - - [:usage0AccessibleInDispatch=true;usage1AccessibleInDispatch=false;dispatchBeforeUsage1=false] - expected: FAIL - - [:usage0AccessibleInDispatch=false;usage1AccessibleInDispatch=true;dispatchBeforeUsage1=false] - expected: FAIL - - [:usage0AccessibleInDispatch=false;usage1AccessibleInDispatch=false;dispatchBeforeUsage1=true] - expected: FAIL - - [:usage0AccessibleInDispatch=false;usage1AccessibleInDispatch=false;dispatchBeforeUsage1=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_texture_copies:depth_stencil_format,copy_usage_and_aspect:*] - [:format="stencil8"] - expected: FAIL - - [:format="depth16unorm"] - expected: FAIL - - [:format="depth32float"] - expected: FAIL - - [:format="depth24plus"] - expected: FAIL - - [:format="depth24plus-stencil8"] - expected: FAIL - - [:format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:u32:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:buffer,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,asin:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:duplicate_bindings:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:basic,plain_cases_private:*] - [:x=2;y=4] - expected: FAIL - - [:x=-10;y=18] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,sample_mask:*] - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";sampleMask=6] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=2] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=4] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";sampleMask=6] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,inversesqrt:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:max_vertex_buffer_limit:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,cos:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,transpose:f32:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:limits,invocations_per_workgroup:*] - [:isAsync=true;size=[128,1,2\]] - expected: FAIL - - [:isAsync=true;size=[129,1,2\]] - expected: FAIL - - [:isAsync=true;size=[2,128,1\]] - expected: FAIL - - [:isAsync=true;size=[2,129,1\]] - expected: FAIL - - [:isAsync=true;size=[1,8,32\]] - expected: FAIL - - [:isAsync=true;size=[1,8,33\]] - expected: FAIL - - [:isAsync=false;size=[128,1,2\]] - expected: FAIL - - [:isAsync=false;size=[129,1,2\]] - expected: FAIL - - [:isAsync=false;size=[2,128,1\]] - expected: FAIL - - [:isAsync=false;size=[2,129,1\]] - expected: FAIL - - [:isAsync=false;size=[1,8,32\]] - expected: FAIL - - [:isAsync=false;size=[1,8,33\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumLayers:sampled:*] - [:texture_type="texture_2d_array"] - expected: FAIL - - [:texture_type="texture_cube_array"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,format_reinterpretation:texture_binding:*] - [:format="rgba8unorm";viewFormat="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8unorm-srgb";viewFormat="rgba8unorm"] - expected: FAIL - - [:format="bgra8unorm";viewFormat="bgra8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm-srgb";viewFormat="bgra8unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,dispatch:*] - [:dispatch="none"] - expected: FAIL - - [:dispatch="direct"] - expected: FAIL - - [:dispatch="indirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,comments:line_comment_eof:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:subtraction_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,while:while_continue:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,single_buffer:two_draws_in_the_same_render_bundle:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:offsets_and_sizes:*] - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,worse_than_default:*] - [:limit="maxTextureDimension1D"] - expected: FAIL - - [:limit="maxTextureDimension2D"] - expected: FAIL - - [:limit="maxTextureDimension3D"] - expected: FAIL - - [:limit="maxTextureArrayLayers"] - expected: FAIL - - [:limit="maxBindGroups"] - expected: FAIL - - [:limit="maxBindingsPerBindGroup"] - expected: FAIL - - [:limit="maxDynamicUniformBuffersPerPipelineLayout"] - expected: FAIL - - [:limit="maxDynamicStorageBuffersPerPipelineLayout"] - expected: FAIL - - [:limit="maxSampledTexturesPerShaderStage"] - expected: FAIL - - [:limit="maxSamplersPerShaderStage"] - expected: FAIL - - [:limit="maxStorageBuffersPerShaderStage"] - expected: FAIL - - [:limit="maxStorageTexturesPerShaderStage"] - expected: FAIL - - [:limit="maxUniformBuffersPerShaderStage"] - expected: FAIL - - [:limit="maxUniformBufferBindingSize"] - expected: FAIL - - [:limit="maxStorageBufferBindingSize"] - expected: FAIL - - [:limit="minUniformBufferOffsetAlignment"] - expected: FAIL - - [:limit="minStorageBufferOffsetAlignment"] - expected: FAIL - - [:limit="maxVertexBuffers"] - expected: FAIL - - [:limit="maxBufferSize"] - expected: FAIL - - [:limit="maxVertexAttributes"] - expected: FAIL - - [:limit="maxVertexBufferArrayStride"] - expected: FAIL - - [:limit="maxInterStageShaderComponents"] - expected: FAIL - - [:limit="maxInterStageShaderVariables"] - expected: FAIL - - [:limit="maxColorAttachments"] - expected: FAIL - - [:limit="maxColorAttachmentBytesPerSample"] - expected: FAIL - - [:limit="maxComputeWorkgroupStorageSize"] - expected: FAIL - - [:limit="maxComputeInvocationsPerWorkgroup"] - expected: FAIL - - [:limit="maxComputeWorkgroupSizeX"] - expected: FAIL - - [:limit="maxComputeWorkgroupSizeY"] - expected: FAIL - - [:limit="maxComputeWorkgroupSizeZ"] - expected: FAIL - - [:limit="maxComputeWorkgroupsPerDimension"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,acos:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,limits,maxColorAttachmentBytesPerSample,aligned:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,anisotropy:anisotropic_filter_checkerboard:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,comments:comments:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,copyTextureToBuffer:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,buffer_related:buffer_state:*] - [:method="CopyB2T";state="valid"] - expected: FAIL - - [:method="CopyB2T";state="invalid"] - expected: FAIL - - [:method="CopyB2T";state="destroyed"] - expected: FAIL - - [:method="CopyT2B";state="valid"] - expected: FAIL - - [:method="CopyT2B";state="invalid"] - expected: FAIL - - [:method="CopyT2B";state="destroyed"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:bound_on_offset:*] - [:method="WriteTexture"] - expected: FAIL - - [:method="CopyB2T"] - expected: FAIL - - [:method="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:mipLevelCount,bound_check,bigger_than_integer_bit_width:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,primitive_state:unclipped_depth:*] - [:isAsync=false;unclippedDepth=false] - expected: FAIL - - [:isAsync=false;unclippedDepth=true] - expected: FAIL - - [:isAsync=true;unclippedDepth=false] - expected: FAIL - - [:isAsync=true;unclippedDepth=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:nonmatching_abstract_float:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:basics:*] - [:op="textureSample";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSample";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleBias";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="textureSampleCompare";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdx";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdxFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdy";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="dpdyFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidth";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthCoarse";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="fwidthFine";stage="fragment";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="storageBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupBarrier";stage="compute";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_storage_ro";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_storage_ro";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_storage_ro";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_storage_ro";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_ro";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_storage_rw";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_builtin";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_builtin";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_builtin";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_builtin";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_literal";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_literal";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_literal";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_literal";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_const";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_const";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_const";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_const";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_override";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_override";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_override";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_override";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_let";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_let";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_let";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_let";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_let";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_let";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_let";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_let";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_or";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_or";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_or";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_or";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or1";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or1";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or1";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or1";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or2";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or2";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or2";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_or2";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_and";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_and";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_and";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_and";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and1";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and1";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and1";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and1";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and2";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and2";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and2";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_and2";expectation=false;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_func_var";expectation=true;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_func_var";expectation=true;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_func_var";expectation=true;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="uniform_func_var";expectation=true;statement="switch"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_func_var";expectation=false;statement="if"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_func_var";expectation=false;statement="for"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_func_var";expectation=false;statement="while"] - expected: FAIL - - [:op="workgroupUniformLoad";stage="compute";cond="nonuniform_func_var";expectation=false;statement="switch"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,layout_related:bound_on_bytes_per_row:*] - [:method="WriteTexture";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="r32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="WriteTexture";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8snorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba8sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bgra8unorm-srgb";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba16float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="r32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32sint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgba32float";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2unorm";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rg11b10ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb9e5ufloat";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="stencil8";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth16unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="depth32float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc1-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc3-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc4-r-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc5-rg-snorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-ufloat";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc6h-rgb-float";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="bc7-rgba-unorm-srgb";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="WriteTexture";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyB2T";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="1d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="2d"] - expected: FAIL - - [:method="CopyT2B";format="rgb10a2uint";dimension="3d"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_break:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,image_copy:offsets_and_sizes_copy_depth_stencil:*] - [:format="stencil8";copyMethod="WriteTexture";aspect="stencil-only"] - expected: FAIL - - [:format="stencil8";copyMethod="CopyB2T";aspect="stencil-only"] - expected: FAIL - - [:format="stencil8";copyMethod="CopyT2B";aspect="stencil-only"] - expected: FAIL - - [:format="depth16unorm";copyMethod="CopyT2B";aspect="depth-only"] - expected: FAIL - - [:format="depth32float";copyMethod="CopyT2B";aspect="depth-only"] - expected: FAIL - - [:format="depth24plus-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] - expected: FAIL - - [:format="depth24plus-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] - expected: FAIL - - [:format="depth24plus-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="WriteTexture";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="CopyB2T";aspect="stencil-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="depth-only"] - expected: FAIL - - [:format="depth32float-stencil8";copyMethod="CopyT2B";aspect="stencil-only"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:greater_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_default_case:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,smoothstep:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_comparison:less_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:depth_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:buffer_binding_overlap:*] - [:drawType="draw"] - expected: FAIL - - [:drawType="drawIndexed"] - expected: FAIL - - [:drawType="drawIndirect"] - expected: FAIL - - [:drawType="drawIndexedIndirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_must_use:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:createRenderBundle,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:u32_to_vec2h:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:copy_contents_from_gpu_context_canvas:*] - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="onscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=true;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="r32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rg32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="bgra8unorm-srgb";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgb10a2unorm";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba16float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="opaque";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:canvasType="offscreen";srcAndDstInSameGPUDevice=false;dstColorFormat="rgba32float";srcAlphaMode="premultiplied";dstAlphaMode="premultiplied";srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,debug:debug_group_balanced:*] - [:encoderType="non-pass"] - expected: FAIL - - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,error_scope:current_scope:*] - [:errorFilter="out-of-memory";stackDepth=1] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=10] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=100] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=1000] - expected: FAIL - - [:errorFilter="out-of-memory";stackDepth=100000] - expected: FAIL - - [:errorFilter="validation";stackDepth=1] - expected: FAIL - - [:errorFilter="validation";stackDepth=10] - expected: FAIL - - [:errorFilter="validation";stackDepth=100] - expected: FAIL - - [:errorFilter="validation";stackDepth=1000] - expected: FAIL - - [:errorFilter="validation";stackDepth=100000] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,destroyed,texture:beginRenderPass:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroupLayout:visibility,VERTEX_shader_stage_storage_texture_access:*] - [:shaderStage=0] - expected: FAIL - - [:shaderStage=1] - expected: FAIL - - [:shaderStage=2] - expected: FAIL - - [:shaderStage=3] - expected: FAIL - - [:shaderStage=4] - expected: FAIL - - [:shaderStage=5] - expected: FAIL - - [:shaderStage=6] - expected: FAIL - - [:shaderStage=7] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_shaderLocation_unique:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,floor:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,ldexp:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createSampler:*] - [:] - expected: FAIL - - [:awaitLost=true] - expected: FAIL - - [:awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:texture_must_have_correct_component_type:*] - [:sampleType="float"] - expected: FAIL - - [:sampleType="sint"] - expected: FAIL - - [:sampleType="uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,transpose:abstract_float:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:bitwise_or:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGather:sampled_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,depth:*] - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero"] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleBias:sampled_3d_coords:*] - [:texture_type="texture_3d"] - expected: FAIL - - [:texture_type="texture_cube"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleCompare:2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,align:parsing:*] - [:align="blank"] - expected: FAIL - - [:align="one"] - expected: FAIL - - [:align="four_a"] - expected: FAIL - - [:align="four_i"] - expected: FAIL - - [:align="four_u"] - expected: FAIL - - [:align="four_hex"] - expected: FAIL - - [:align="trailing_comma"] - expected: FAIL - - [:align="const_u"] - expected: FAIL - - [:align="const_i"] - expected: FAIL - - [:align="const_expr"] - expected: FAIL - - [:align="large"] - expected: FAIL - - [:align="tabs"] - expected: FAIL - - [:align="comment"] - expected: FAIL - - [:align="misspelling"] - expected: FAIL - - [:align="empty"] - expected: FAIL - - [:align="missing_left_paren"] - expected: FAIL - - [:align="missing_right_paren"] - expected: FAIL - - [:align="multiple_values"] - expected: FAIL - - [:align="non_power_two"] - expected: FAIL - - [:align="const_f"] - expected: FAIL - - [:align="one_f"] - expected: FAIL - - [:align="four_f"] - expected: FAIL - - [:align="four_h"] - expected: FAIL - - [:align="no_params"] - expected: FAIL - - [:align="zero_a"] - expected: FAIL - - [:align="negative"] - expected: FAIL - - [:align="large_no_power_two"] - expected: FAIL - - [:align="larger_than_max_i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,literal:f16:*] - [:val="0h"] - expected: FAIL - - [:val="1h"] - expected: FAIL - - [:val=".1h"] - expected: FAIL - - [:val="1.1e2h"] - expected: FAIL - - [:val="1.1E%2B2h"] - expected: FAIL - - [:val="2.4e-2h"] - expected: FAIL - - [:val="0xep2h"] - expected: FAIL - - [:val="0xEp-2h"] - expected: FAIL - - [:val="0x3p%2B2h"] - expected: FAIL - - [:val="0x3.2p%2B2h"] - expected: FAIL - - [:val="0.0"] - expected: FAIL - - [:val=".0"] - expected: FAIL - - [:val="12."] - expected: FAIL - - [:val="00012."] - expected: FAIL - - [:val=".12"] - expected: FAIL - - [:val="1.2e2"] - expected: FAIL - - [:val="1.2E2"] - expected: FAIL - - [:val="1.2e%2B2"] - expected: FAIL - - [:val="2.4e-2"] - expected: FAIL - - [:val=".1e-2"] - expected: FAIL - - [:val="0x.3"] - expected: FAIL - - [:val="0X.3"] - expected: FAIL - - [:val="0xa.fp%2B2"] - expected: FAIL - - [:val="0xa.fP%2B2"] - expected: FAIL - - [:val="0xE.fp%2B2"] - expected: FAIL - - [:val="0X1.fp-4"] - expected: FAIL - - [:val="1"] - expected: FAIL - - [:val="-1"] - expected: FAIL - - [:val="0f"] - expected: FAIL - - [:val="0.0f"] - expected: FAIL - - [:val="12.223f"] - expected: FAIL - - [:val="12.f"] - expected: FAIL - - [:val=".12f"] - expected: FAIL - - [:val="2.4e%2B4f"] - expected: FAIL - - [:val="2.4e-2f"] - expected: FAIL - - [:val="2.e%2B4f"] - expected: FAIL - - [:val="1e-4f"] - expected: FAIL - - [:val="0x1P%2B4f"] - expected: FAIL - - [:val="1i"] - expected: FAIL - - [:val="1u"] - expected: FAIL - - [:val="1f"] - expected: FAIL - - [:val="1.1eh"] - expected: FAIL - - [:val="1.1e%252h"] - expected: FAIL - - [:val="1.1e%2Bh"] - expected: FAIL - - [:val="1.0e%2B999999h"] - expected: FAIL - - [:val="0x1.0p%2B999999h"] - expected: FAIL - - [:val="1.1e!2h"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:remainder_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:duplicate:*] - [:attr=""] - expected: FAIL - - [:attr="%40interpolate(flat)"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,pipeline_stage:multiple_entry_points:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:zero_size_and_usage:*] - [:dimension="_undef_";format="rgba8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,buffer,in_pass_encoder:subresources,buffer_usage_in_one_render_pass_with_no_draw:*] - [:usage0="uniform";usage1="uniform"] - expected: FAIL - - [:usage0="uniform";usage1="storage"] - expected: FAIL - - [:usage0="uniform";usage1="read-only-storage"] - expected: FAIL - - [:usage0="uniform";usage1="vertex"] - expected: FAIL - - [:usage0="uniform";usage1="index"] - expected: FAIL - - [:usage0="storage";usage1="uniform"] - expected: FAIL - - [:usage0="storage";usage1="storage"] - expected: FAIL - - [:usage0="storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="storage";usage1="vertex"] - expected: FAIL - - [:usage0="storage";usage1="index"] - expected: FAIL - - [:usage0="read-only-storage";usage1="uniform"] - expected: FAIL - - [:usage0="read-only-storage";usage1="storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="read-only-storage"] - expected: FAIL - - [:usage0="read-only-storage";usage1="vertex"] - expected: FAIL - - [:usage0="read-only-storage";usage1="index"] - expected: FAIL - - [:usage0="vertex";usage1="uniform"] - expected: FAIL - - [:usage0="vertex";usage1="storage"] - expected: FAIL - - [:usage0="vertex";usage1="read-only-storage"] - expected: FAIL - - [:usage0="vertex";usage1="vertex"] - expected: FAIL - - [:usage0="vertex";usage1="index"] - expected: FAIL - - [:usage0="index";usage1="uniform"] - expected: FAIL - - [:usage0="index";usage1="storage"] - expected: FAIL - - [:usage0="index";usage1="read-only-storage"] - expected: FAIL - - [:usage0="index";usage1="vertex"] - expected: FAIL - - [:usage0="index";usage1="index"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:mipLevelCount,format:*] - [:dimension="_undef_";format="r8unorm"] - expected: FAIL - - [:dimension="_undef_";format="r8snorm"] - expected: FAIL - - [:dimension="_undef_";format="r8uint"] - expected: FAIL - - [:dimension="_undef_";format="r8sint"] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8uint"] - expected: FAIL - - [:dimension="_undef_";format="rg8sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="r16uint"] - expected: FAIL - - [:dimension="_undef_";format="r16sint"] - expected: FAIL - - [:dimension="_undef_";format="r16float"] - expected: FAIL - - [:dimension="_undef_";format="rg16uint"] - expected: FAIL - - [:dimension="_undef_";format="rg16sint"] - expected: FAIL - - [:dimension="_undef_";format="rg16float"] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16float"] - expected: FAIL - - [:dimension="_undef_";format="r32uint"] - expected: FAIL - - [:dimension="_undef_";format="r32sint"] - expected: FAIL - - [:dimension="_undef_";format="r32float"] - expected: FAIL - - [:dimension="_undef_";format="rg32uint"] - expected: FAIL - - [:dimension="_undef_";format="rg32sint"] - expected: FAIL - - [:dimension="_undef_";format="rg32float"] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32float"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm"] - expected: FAIL - - [:dimension="_undef_";format="depth32float"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r8unorm"] - expected: FAIL - - [:dimension="1d";format="r8snorm"] - expected: FAIL - - [:dimension="1d";format="r8uint"] - expected: FAIL - - [:dimension="1d";format="r8sint"] - expected: FAIL - - [:dimension="1d";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";format="rg8uint"] - expected: FAIL - - [:dimension="1d";format="rg8sint"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r16uint"] - expected: FAIL - - [:dimension="1d";format="r16sint"] - expected: FAIL - - [:dimension="1d";format="r16float"] - expected: FAIL - - [:dimension="1d";format="rg16uint"] - expected: FAIL - - [:dimension="1d";format="rg16sint"] - expected: FAIL - - [:dimension="1d";format="rg16float"] - expected: FAIL - - [:dimension="1d";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";format="rgba16float"] - expected: FAIL - - [:dimension="1d";format="r32uint"] - expected: FAIL - - [:dimension="1d";format="r32sint"] - expected: FAIL - - [:dimension="1d";format="r32float"] - expected: FAIL - - [:dimension="1d";format="rg32uint"] - expected: FAIL - - [:dimension="1d";format="rg32sint"] - expected: FAIL - - [:dimension="1d";format="rg32float"] - expected: FAIL - - [:dimension="1d";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";format="rgba32float"] - expected: FAIL - - [:dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="r8unorm"] - expected: FAIL - - [:dimension="2d";format="r8snorm"] - expected: FAIL - - [:dimension="2d";format="r8uint"] - expected: FAIL - - [:dimension="2d";format="r8sint"] - expected: FAIL - - [:dimension="2d";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";format="rg8uint"] - expected: FAIL - - [:dimension="2d";format="rg8sint"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r16uint"] - expected: FAIL - - [:dimension="2d";format="r16sint"] - expected: FAIL - - [:dimension="2d";format="r16float"] - expected: FAIL - - [:dimension="2d";format="rg16uint"] - expected: FAIL - - [:dimension="2d";format="rg16sint"] - expected: FAIL - - [:dimension="2d";format="rg16float"] - expected: FAIL - - [:dimension="2d";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";format="rgba16float"] - expected: FAIL - - [:dimension="2d";format="r32uint"] - expected: FAIL - - [:dimension="2d";format="r32sint"] - expected: FAIL - - [:dimension="2d";format="r32float"] - expected: FAIL - - [:dimension="2d";format="rg32uint"] - expected: FAIL - - [:dimension="2d";format="rg32sint"] - expected: FAIL - - [:dimension="2d";format="rg32float"] - expected: FAIL - - [:dimension="2d";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";format="rgba32float"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="stencil8"] - expected: FAIL - - [:dimension="2d";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";format="depth32float"] - expected: FAIL - - [:dimension="2d";format="depth24plus"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r8unorm"] - expected: FAIL - - [:dimension="3d";format="r8snorm"] - expected: FAIL - - [:dimension="3d";format="r8uint"] - expected: FAIL - - [:dimension="3d";format="r8sint"] - expected: FAIL - - [:dimension="3d";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";format="rg8uint"] - expected: FAIL - - [:dimension="3d";format="rg8sint"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r16uint"] - expected: FAIL - - [:dimension="3d";format="r16sint"] - expected: FAIL - - [:dimension="3d";format="r16float"] - expected: FAIL - - [:dimension="3d";format="rg16uint"] - expected: FAIL - - [:dimension="3d";format="rg16sint"] - expected: FAIL - - [:dimension="3d";format="rg16float"] - expected: FAIL - - [:dimension="3d";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";format="rgba16float"] - expected: FAIL - - [:dimension="3d";format="r32uint"] - expected: FAIL - - [:dimension="3d";format="r32sint"] - expected: FAIL - - [:dimension="3d";format="r32float"] - expected: FAIL - - [:dimension="3d";format="rg32uint"] - expected: FAIL - - [:dimension="3d";format="rg32sint"] - expected: FAIL - - [:dimension="3d";format="rg32float"] - expected: FAIL - - [:dimension="3d";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";format="rgba32float"] - expected: FAIL - - [:dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,buffer,multiple_buffers:wr:*] - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="write-buffer";writeContext="queue"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="queue-op";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2b-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="b2t-copy";readContext="command-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-bundle-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="storage-read";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-vertex";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="input-indirect-index";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-pass-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="b2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="command-buffer";readOp="constant-uniform";readContext="render-bundle-encoder";writeOp="t2b-copy";writeContext="command-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="render-pass-encoder"] - expected: FAIL - - [:boundary="pass";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="input-indirect-dispatch";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - [:boundary="dispatch";readOp="storage-read";readContext="compute-pass-encoder";writeOp="storage";writeContext="compute-pass-encoder"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,return:return_conditional_true:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:texture_usage:*] - [:dimension="_undef_";format="r8unorm"] - expected: FAIL - - [:dimension="_undef_";format="r8snorm"] - expected: FAIL - - [:dimension="_undef_";format="r8uint"] - expected: FAIL - - [:dimension="_undef_";format="r8sint"] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8uint"] - expected: FAIL - - [:dimension="_undef_";format="rg8sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="r16uint"] - expected: FAIL - - [:dimension="_undef_";format="r16sint"] - expected: FAIL - - [:dimension="_undef_";format="r16float"] - expected: FAIL - - [:dimension="_undef_";format="rg16uint"] - expected: FAIL - - [:dimension="_undef_";format="rg16sint"] - expected: FAIL - - [:dimension="_undef_";format="rg16float"] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16float"] - expected: FAIL - - [:dimension="_undef_";format="r32uint"] - expected: FAIL - - [:dimension="_undef_";format="r32sint"] - expected: FAIL - - [:dimension="_undef_";format="r32float"] - expected: FAIL - - [:dimension="_undef_";format="rg32uint"] - expected: FAIL - - [:dimension="_undef_";format="rg32sint"] - expected: FAIL - - [:dimension="_undef_";format="rg32float"] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32float"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm"] - expected: FAIL - - [:dimension="_undef_";format="depth32float"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r8unorm"] - expected: FAIL - - [:dimension="1d";format="r8snorm"] - expected: FAIL - - [:dimension="1d";format="r8uint"] - expected: FAIL - - [:dimension="1d";format="r8sint"] - expected: FAIL - - [:dimension="1d";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";format="rg8uint"] - expected: FAIL - - [:dimension="1d";format="rg8sint"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r16uint"] - expected: FAIL - - [:dimension="1d";format="r16sint"] - expected: FAIL - - [:dimension="1d";format="r16float"] - expected: FAIL - - [:dimension="1d";format="rg16uint"] - expected: FAIL - - [:dimension="1d";format="rg16sint"] - expected: FAIL - - [:dimension="1d";format="rg16float"] - expected: FAIL - - [:dimension="1d";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";format="rgba16float"] - expected: FAIL - - [:dimension="1d";format="r32uint"] - expected: FAIL - - [:dimension="1d";format="r32sint"] - expected: FAIL - - [:dimension="1d";format="r32float"] - expected: FAIL - - [:dimension="1d";format="rg32uint"] - expected: FAIL - - [:dimension="1d";format="rg32sint"] - expected: FAIL - - [:dimension="1d";format="rg32float"] - expected: FAIL - - [:dimension="1d";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";format="rgba32float"] - expected: FAIL - - [:dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="r8unorm"] - expected: FAIL - - [:dimension="2d";format="r8snorm"] - expected: FAIL - - [:dimension="2d";format="r8uint"] - expected: FAIL - - [:dimension="2d";format="r8sint"] - expected: FAIL - - [:dimension="2d";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";format="rg8uint"] - expected: FAIL - - [:dimension="2d";format="rg8sint"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r16uint"] - expected: FAIL - - [:dimension="2d";format="r16sint"] - expected: FAIL - - [:dimension="2d";format="r16float"] - expected: FAIL - - [:dimension="2d";format="rg16uint"] - expected: FAIL - - [:dimension="2d";format="rg16sint"] - expected: FAIL - - [:dimension="2d";format="rg16float"] - expected: FAIL - - [:dimension="2d";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";format="rgba16float"] - expected: FAIL - - [:dimension="2d";format="r32uint"] - expected: FAIL - - [:dimension="2d";format="r32sint"] - expected: FAIL - - [:dimension="2d";format="r32float"] - expected: FAIL - - [:dimension="2d";format="rg32uint"] - expected: FAIL - - [:dimension="2d";format="rg32sint"] - expected: FAIL - - [:dimension="2d";format="rg32float"] - expected: FAIL - - [:dimension="2d";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";format="rgba32float"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="stencil8"] - expected: FAIL - - [:dimension="2d";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";format="depth32float"] - expected: FAIL - - [:dimension="2d";format="depth24plus"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r8unorm"] - expected: FAIL - - [:dimension="3d";format="r8snorm"] - expected: FAIL - - [:dimension="3d";format="r8uint"] - expected: FAIL - - [:dimension="3d";format="r8sint"] - expected: FAIL - - [:dimension="3d";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";format="rg8uint"] - expected: FAIL - - [:dimension="3d";format="rg8sint"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r16uint"] - expected: FAIL - - [:dimension="3d";format="r16sint"] - expected: FAIL - - [:dimension="3d";format="r16float"] - expected: FAIL - - [:dimension="3d";format="rg16uint"] - expected: FAIL - - [:dimension="3d";format="rg16sint"] - expected: FAIL - - [:dimension="3d";format="rg16float"] - expected: FAIL - - [:dimension="3d";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";format="rgba16float"] - expected: FAIL - - [:dimension="3d";format="r32uint"] - expected: FAIL - - [:dimension="3d";format="r32sint"] - expected: FAIL - - [:dimension="3d";format="r32float"] - expected: FAIL - - [:dimension="3d";format="rg32uint"] - expected: FAIL - - [:dimension="3d";format="rg32sint"] - expected: FAIL - - [:dimension="3d";format="rg32float"] - expected: FAIL - - [:dimension="3d";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";format="rgba32float"] - expected: FAIL - - [:dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,attachment_compatibility:render_pass_or_bundle_and_pipeline,depth_stencil_read_only_write_state:*] - [:encoderType="render%20pass";format="_undef_"] - expected: FAIL - - [:encoderType="render%20pass";format="stencil8"] - expected: FAIL - - [:encoderType="render%20pass";format="depth16unorm"] - expected: FAIL - - [:encoderType="render%20pass";format="depth32float"] - expected: FAIL - - [:encoderType="render%20pass";format="depth24plus"] - expected: FAIL - - [:encoderType="render%20pass";format="depth24plus-stencil8"] - expected: FAIL - - [:encoderType="render%20pass";format="depth32float-stencil8"] - expected: FAIL - - [:encoderType="render%20bundle";format="_undef_"] - expected: FAIL - - [:encoderType="render%20bundle";format="stencil8"] - expected: FAIL - - [:encoderType="render%20bundle";format="depth16unorm"] - expected: FAIL - - [:encoderType="render%20bundle";format="depth32float"] - expected: FAIL - - [:encoderType="render%20bundle";format="depth24plus"] - expected: FAIL - - [:encoderType="render%20bundle";format="depth24plus-stencil8"] - expected: FAIL - - [:encoderType="render%20bundle";format="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,error_scope:balanced_nesting:*] - [:errorFilter="internal";numErrors=1] - expected: FAIL - - [:errorFilter="internal";numErrors=10] - expected: FAIL - - [:errorFilter="internal";numErrors=100] - expected: FAIL - - [:errorFilter="internal";numErrors=1000] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:storage_texture,mip_level_count:*] - [:baseMipLevel=1;mipLevelCount=1] - expected: FAIL - - [:baseMipLevel=1;mipLevelCount=2] - expected: FAIL - - [:baseMipLevel=2;mipLevelCount=1] - expected: FAIL - - [:baseMipLevel=2;mipLevelCount=2] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:validate,powerOf2:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,vertex_only_render_pipeline:draw_depth_and_stencil_with_vertex_only_pipeline:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:command,resolveQuerySet:*] - [:] - expected: FAIL - - [:stage="finish";awaitLost=true] - expected: FAIL - - [:stage="finish";awaitLost=false] - expected: FAIL - - [:stage="submit";awaitLost=true] - expected: FAIL - - [:stage="submit";awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:nested_struct_constructor:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicXor:xor_storage:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:attachment_state,limits,maxColorAttachments:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atan2:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:index_buffer_OOB:*] - [:bufferSizeInElements=10;bindingSizeInElements=10;drawIndexCount=10;drawType="drawIndexed"] - expected: FAIL - - [:bufferSizeInElements=10;bindingSizeInElements=10;drawIndexCount=10;drawType="drawIndexedIndirect"] - expected: FAIL - - [:bufferSizeInElements=10;bindingSizeInElements=10;drawIndexCount=11;drawType="drawIndexed"] - expected: FAIL - - [:bufferSizeInElements=10;bindingSizeInElements=10;drawIndexCount=11;drawType="drawIndexedIndirect"] - expected: FAIL - - [:bufferSizeInElements=100;bindingSizeInElements=10;drawIndexCount=10;drawType="drawIndexed"] - expected: FAIL - - [:bufferSizeInElements=100;bindingSizeInElements=10;drawIndexCount=10;drawType="drawIndexedIndirect"] - expected: FAIL - - [:bufferSizeInElements=100;bindingSizeInElements=10;drawIndexCount=11;drawType="drawIndexed"] - expected: FAIL - - [:bufferSizeInElements=100;bindingSizeInElements=10;drawIndexCount=11;drawType="drawIndexedIndirect"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,debugMarker:push_pop_call_count_unbalance,render_compute_pass:*] - [:passType="compute"] - expected: FAIL - - [:passType="render"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,pipeline_output_targets:color,attachments:*] - [:format="r8unorm"] - expected: FAIL - - [:format="r8uint"] - expected: FAIL - - [:format="r8sint"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rg8uint"] - expected: FAIL - - [:format="rg8sint"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16uint"] - expected: FAIL - - [:format="r16sint"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16uint"] - expected: FAIL - - [:format="rg16sint"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - [:format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,dynamic_state:setScissorRect,x_y_width_height_nonnegative:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,reflection:buffer_reflection_attributes:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:examples:gpu,async:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,countTrailingZeros:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,canvas:color_space_conversion:*] - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="srgb";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r16float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="r32float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg16float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rg32float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgb10a2unorm";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba16float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=true;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=true;srcDoFlipYDuringCopy=false] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=false;srcDoFlipYDuringCopy=true] - expected: FAIL - - [:srcColorSpace="display-p3";dstColorSpace="srgb";dstColorFormat="rgba32float";dstPremultiplied=false;srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,resource_interface,bindings:different_entry_points:*] - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,gpu_external_texture_expiration:import_and_use_in_different_microtask:*] - [:sourceType="VideoElement"] - expected: FAIL - - [:sourceType="VideoFrame"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:color_write_mask,channel_work:*] - [:mask=0] - expected: FAIL - - [:mask=1] - expected: FAIL - - [:mask=2] - expected: FAIL - - [:mask=3] - expected: FAIL - - [:mask=4] - expected: FAIL - - [:mask=5] - expected: FAIL - - [:mask=6] - expected: FAIL - - [:mask=7] - expected: FAIL - - [:mask=8] - expected: FAIL - - [:mask=9] - expected: FAIL - - [:mask=10] - expected: FAIL - - [:mask=11] - expected: FAIL - - [:mask=12] - expected: FAIL - - [:mask=13] - expected: FAIL - - [:mask=14] - expected: FAIL - - [:mask=15] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,shader_module:invalid,vertex:*] - [:isAsync=true;isVertexShaderValid=true] - expected: FAIL - - [:isAsync=true;isVertexShaderValid=false] - expected: FAIL - - [:isAsync=false;isVertexShaderValid=true] - expected: FAIL - - [:isAsync=false;isVertexShaderValid=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,compute_pass:indirect_dispatch_buffer,usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,general:timestamp_query,invalid_query_set:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,image_copy,texture_related:sample_count:*] - [:method="WriteTexture"] - expected: FAIL - - [:method="CopyB2T"] - expected: FAIL - - [:method="CopyT2B"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:buffer_offset_and_size_for_bind_groups_match:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,i32_conversion:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,texture,float32_filterable:create_bind_group:*] - [:enabled=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_subtraction:matrix:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,resource_init,buffer:resolve_query_set_to_partial_buffer:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createBindGroup:sampler,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_vector_multiplication:matrix_vector:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,configure:device:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxVertexAttributes:createRenderPipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:addition_scalar_vector:*] - [:inputSource="const";vectorize_rhs=2] - expected: FAIL - - [:inputSource="const";vectorize_rhs=3] - expected: FAIL - - [:inputSource="const";vectorize_rhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_rhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_rhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:attachments,one_color_attachment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,encoder_state:pass_end_invalid_order:*] - [:pass0Type="compute";pass1Type="compute"] - expected: FAIL - - [:pass0Type="compute";pass1Type="render"] - expected: FAIL - - [:pass0Type="render";pass1Type="compute"] - expected: FAIL - - [:pass0Type="render";pass1Type="render"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:copy_subrect_from_ImageData:*] - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_if:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,sample_count:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSample:control_flow:*] - [:stage="fragment"] - expected: FAIL - - [:stage="vertex"] - expected: FAIL - - [:stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicXor:xor_workgroup:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,primitive_topology:unaligned_vertex_count:*] - [:topology="line-list";indirect=false;drawCount=5] - expected: FAIL - - [:topology="line-list";indirect=true;drawCount=5] - expected: FAIL - - [:topology="triangle-list";indirect=false;drawCount=5] - expected: FAIL - - [:topology="triangle-list";indirect=false;drawCount=4] - expected: FAIL - - [:topology="triangle-list";indirect=true;drawCount=5] - expected: FAIL - - [:topology="triangle-list";indirect=true;drawCount=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_matrix_scalar_multiplication:matrix_scalar_compound:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=2;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=3;rows=4] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=2] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=3] - expected: FAIL - - [:inputSource="uniform";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_r";cols=4;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=2;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=3;rows=4] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=2] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=3] - expected: FAIL - - [:inputSource="storage_rw";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:rw,single_pass,load_resolve:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sample:*] - [:sourceType="VideoElement";videoName="four-colors-vp8-bt601.webm"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-theora-bt601.ogv"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-h264-bt601.mp4"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-vp9-bt601.webm"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-vp9-bt709.webm"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-vp8-bt601.webm"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-theora-bt601.ogv"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-h264-bt601.mp4"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-vp9-bt601.webm"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-vp9-bt709.webm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:getMappedRange,subrange,mapped:*] - [:mapMode=1] - expected: FAIL - - [:mapMode=2] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute_pipeline,overrides:multi_entry_points:*] - [:isAsync=true] - expected: FAIL - - [:isAsync=false] - expected: FAIL - - -[cts.https.html?q=webgpu:util,texture,texel_data:float_texel_data_in_shader:*] - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,source:empty:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,dot:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:limit,better_than_supported:*] expected: CRASH - [:limit="maxTextureDimension1D"] - expected: FAIL - [:limit="maxTextureDimension2D"] - expected: FAIL - - [:limit="maxTextureDimension3D"] - expected: FAIL - - [:limit="maxTextureArrayLayers"] - expected: FAIL - - [:limit="maxBindGroups"] - expected: FAIL - - [:limit="maxBindingsPerBindGroup"] - expected: FAIL - - [:limit="maxDynamicUniformBuffersPerPipelineLayout"] - expected: FAIL - - [:limit="maxDynamicStorageBuffersPerPipelineLayout"] - expected: FAIL - - [:limit="maxSampledTexturesPerShaderStage"] - expected: FAIL - - [:limit="maxSamplersPerShaderStage"] - expected: FAIL - - [:limit="maxStorageBuffersPerShaderStage"] - expected: FAIL - - [:limit="maxStorageTexturesPerShaderStage"] - expected: FAIL - - [:limit="maxUniformBuffersPerShaderStage"] - expected: FAIL - - [:limit="maxUniformBufferBindingSize"] - expected: FAIL - - [:limit="maxStorageBufferBindingSize"] - expected: FAIL - - [:limit="minUniformBufferOffsetAlignment"] - expected: FAIL - - [:limit="minStorageBufferOffsetAlignment"] - expected: FAIL - - [:limit="maxVertexBuffers"] - expected: FAIL - - [:limit="maxBufferSize"] - expected: FAIL - - [:limit="maxVertexAttributes"] - expected: FAIL - - [:limit="maxVertexBufferArrayStride"] - expected: FAIL - - [:limit="maxInterStageShaderComponents"] - expected: FAIL - - [:limit="maxInterStageShaderVariables"] - expected: FAIL - - [:limit="maxColorAttachments"] - expected: FAIL - - [:limit="maxColorAttachmentBytesPerSample"] - expected: FAIL - - [:limit="maxComputeWorkgroupStorageSize"] - expected: FAIL - - [:limit="maxComputeInvocationsPerWorkgroup"] - expected: FAIL - - [:limit="maxComputeWorkgroupSizeX"] - expected: FAIL - - [:limit="maxComputeWorkgroupSizeY"] - expected: FAIL - - [:limit="maxComputeWorkgroupSizeZ"] - expected: FAIL - - [:limit="maxComputeWorkgroupsPerDimension"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,complex:continue_in_switch_in_for_loop:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index_via_ptrs:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_pass_encoder:subresources_and_binding_types_combination_for_color:*] - [:compute=false;type0="sampled-texture";type1="sampled-texture"] - expected: FAIL - - [:compute=false;type0="sampled-texture";type1="writeonly-storage-texture"] - expected: FAIL - - [:compute=false;type0="sampled-texture";type1="render-target"] - expected: FAIL - - [:compute=false;type0="writeonly-storage-texture";type1="writeonly-storage-texture"] - expected: FAIL - - [:compute=false;type0="writeonly-storage-texture";type1="render-target"] - expected: FAIL - - [:compute=false;type0="render-target";type1="render-target"] - expected: FAIL - - [:compute=true;type0="sampled-texture";type1="sampled-texture"] - expected: FAIL - - [:compute=true;type0="sampled-texture";type1="writeonly-storage-texture"] - expected: FAIL - - [:compute=true;type0="writeonly-storage-texture";type1="writeonly-storage-texture"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleGrad:sampled_array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,firstTrailingBit:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:division_vector_scalar_compound:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pass,storeOp:render_pass_store_op,depth_stencil_attachment_only:*] - [:depthStencilFormat="stencil8";storeOperation="discard"] - expected: FAIL - - [:depthStencilFormat="stencil8";storeOperation="store"] - expected: FAIL - - [:depthStencilFormat="depth16unorm";storeOperation="discard"] - expected: FAIL - - [:depthStencilFormat="depth16unorm";storeOperation="store"] - expected: FAIL - - [:depthStencilFormat="depth32float";storeOperation="discard"] - expected: FAIL - - [:depthStencilFormat="depth32float";storeOperation="store"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:texture_view_descriptor:*] - [:format="depth32float-stencil8";enable_required_feature=true] - expected: FAIL - - [:format="depth32float-stencil8";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc4-r-snorm";enable_required_feature=true] - expected: FAIL - - [:format="bc4-r-snorm";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc5-rg-snorm";enable_required_feature=true] - expected: FAIL - - [:format="bc5-rg-snorm";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-ufloat";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-ufloat";enable_required_feature=false] - expected: FAIL - - [:format="bc6h-rgb-float";enable_required_feature=true] - expected: FAIL - - [:format="bc6h-rgb-float";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm";enable_required_feature=false] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";enable_required_feature=true] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgb8a1unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm";enable_required_feature=false] - expected: FAIL - - [:format="etc2-rgba8unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11unorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-r11snorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11unorm";enable_required_feature=false] - expected: FAIL - - [:format="eac-rg11snorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-4x4-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x4-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-5x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-6x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-8x8-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x5-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x6-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x8-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-10x10-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x10-unorm-srgb";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm";enable_required_feature=false] - expected: FAIL - - [:format="astc-12x12-unorm-srgb";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,zero_init:compute,zero_init:*] - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,1\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,32,1\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[64,1,1\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,48\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,47,1\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[33,1,1\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[1,1,63\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[8,8,2\];batch__=31] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=0] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=1] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=2] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=3] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=4] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=5] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=6] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=7] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=8] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=9] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=10] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=11] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=12] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=13] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=14] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=15] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=16] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=17] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=18] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=19] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=20] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=21] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=22] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=23] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=24] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=25] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=26] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=27] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=28] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=29] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=30] - expected: FAIL - - [:storageClass="workgroup";workgroupSize=[7,7,3\];batch__=31] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=0] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=1] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=2] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=3] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=4] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=5] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=6] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=7] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=8] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=9] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=10] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=11] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=12] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=13] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=14] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=15] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=16] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=17] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=18] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=19] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=20] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=21] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=22] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=23] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=24] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=25] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=26] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=27] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=28] - expected: FAIL - - [:storageClass="private";workgroupSize=[1,1,1\];batch__=29] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=0] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=1] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=2] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=3] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=4] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=5] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=6] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=7] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=8] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=9] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=10] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=11] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=12] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=13] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=14] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=15] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=16] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=17] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=18] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=19] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=20] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=21] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=22] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=23] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=24] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=25] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=26] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=27] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=28] - expected: FAIL - - [:storageClass="function";workgroupSize=[1,1,1\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,1\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,32,1\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[64,1,1\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,48\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,47,1\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[33,1,1\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[1,1,63\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[8,8,2\];batch__=31] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=0] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=1] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=2] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=3] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=4] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=5] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=6] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=7] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=8] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=9] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=10] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=11] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=12] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=13] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=14] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=15] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=16] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=17] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=18] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=19] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=20] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=21] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=22] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=23] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=24] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=25] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=26] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=27] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=28] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=29] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=30] - expected: FAIL - - [:addressSpace="workgroup";workgroupSize=[7,7,3\];batch__=31] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=0] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=1] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=2] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=3] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=4] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=5] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=6] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=7] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=8] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=9] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=10] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=11] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=12] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=13] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=14] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=15] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=16] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=17] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=18] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=19] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=20] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=21] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=22] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=23] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=24] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=25] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=26] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=27] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=28] - expected: FAIL - - [:addressSpace="private";workgroupSize=[1,1,1\];batch__=29] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=0] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=1] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=2] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=3] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=4] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=5] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=6] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=7] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=8] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=9] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=10] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=11] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=12] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=13] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=14] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=15] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=16] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=17] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=18] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=19] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=20] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=21] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=22] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=23] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=24] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=25] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=26] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=27] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=28] - expected: FAIL - - [:addressSpace="function";workgroupSize=[1,1,1\];batch__=29] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:array_index:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_basic:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,copyTextureToTexture:multisampled_copy_restrictions:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createBindGroupLayout,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=1;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=2;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=3;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=4;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=5;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=6;order="shiftByHalf"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="forward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="backward"] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";visibility=7;order="shiftByHalf"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sqrt:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeZ:createComputePipeline,at_over:*] - [:limitTest="atDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="underDefault";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="atMaximum";testValueName="overLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="atLimit";async=true] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=false] - expected: FAIL - - [:limitTest="overMaximum";testValueName="overLimit";async=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureNumSamples:depth:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:expiry:*] - [:canvasType="onscreen";prevFrameCallsite="runInNewCanvasFrame";getCurrentTextureAgain=true] - expected: FAIL - - [:canvasType="onscreen";prevFrameCallsite="runInNewCanvasFrame";getCurrentTextureAgain=false] - expected: FAIL - - [:canvasType="onscreen";prevFrameCallsite="requestAnimationFrame";getCurrentTextureAgain=true] - expected: FAIL - - [:canvasType="onscreen";prevFrameCallsite="requestAnimationFrame";getCurrentTextureAgain=false] - expected: FAIL - - [:canvasType="offscreen";prevFrameCallsite="runInNewCanvasFrame";getCurrentTextureAgain=true] - expected: FAIL - - [:canvasType="offscreen";prevFrameCallsite="runInNewCanvasFrame";getCurrentTextureAgain=false] - expected: FAIL - - [:canvasType="offscreen";prevFrameCallsite="requestAnimationFrame";getCurrentTextureAgain=true] - expected: FAIL - - [:canvasType="offscreen";prevFrameCallsite="requestAnimationFrame";getCurrentTextureAgain=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:setBindGroup,at_over:*] - [:limitTest="atDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atDefault";testValueName="underLimit"] - expected: FAIL - - [:limitTest="overDefault";testValueName="atLimit"] - expected: FAIL - - [:limitTest="overDefault";testValueName="underLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="betweenDefaultAndMinimum";testValueName="underLimit"] - expected: FAIL - - [:limitTest="atMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="atMinimum";testValueName="underLimit"] - expected: FAIL - - [:limitTest="underMinimum";testValueName="atLimit"] - expected: FAIL - - [:limitTest="underMinimum";testValueName="underLimit"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,misc:pipeline_layout,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachmentBytesPerSample,unaligned:*] - [:formats=["r8unorm","r32float","rgba8unorm","rgba32float","r8unorm"\]] - expected: FAIL - - [:formats=["r32float","rgba8unorm","rgba32float","r8unorm","r8unorm"\]] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:texture_size,2d_texture,uncompressed_format:*] - [:dimension="_undef_";format="r8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[8191,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[8192,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[8193,1,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[1,8191,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[1,8192,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[1,8193,1\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[1,1,255\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[1,1,256\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r8uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r8sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r16uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r16sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r16float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg16float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r32uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r32sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="r32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="stencil8";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="depth32float";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";size=[1,1,257\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[8191,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[8192,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[8193,1,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[1,8191,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[1,8192,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[1,8193,1\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[1,1,255\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[1,1,256\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";size=[1,1,257\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba8snorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba8uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba8sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba16uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba16sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba16float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="r32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba32uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba32sint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgba32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="depth16unorm";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="depth32float";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":-1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":0},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":1,"add":1},{"mult":0,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":-1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":0},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":1,"add":1},{"mult":0,"add":1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":-1}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":0}\]] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8";sizeVariant=[{"mult":0,"add":1},{"mult":0,"add":1},{"mult":1,"add":1}\]] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,f32_conversion:bool:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,compute:*] - [:sourceType="VideoElement";videoName="four-colors-vp8-bt601.webm"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-theora-bt601.ogv"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-h264-bt601.mp4"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-vp9-bt601.webm"] - expected: FAIL - - [:sourceType="VideoElement";videoName="four-colors-vp9-bt709.webm"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-vp8-bt601.webm"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-theora-bt601.ogv"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-h264-bt601.mp4"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-vp9-bt601.webm"] - expected: FAIL - - [:sourceType="VideoFrame";videoName="four-colors-vp9-bt709.webm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,eval_order:struct_constructor:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:OOB,destination:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,phony:phony_assign_call_builtin:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:configured:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,createTexture:dimension_type_and_format_compatibility:*] - [:dimension="_undef_";format="r8unorm"] - expected: FAIL - - [:dimension="_undef_";format="r8snorm"] - expected: FAIL - - [:dimension="_undef_";format="r8uint"] - expected: FAIL - - [:dimension="_undef_";format="r8sint"] - expected: FAIL - - [:dimension="_undef_";format="rg8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rg8uint"] - expected: FAIL - - [:dimension="_undef_";format="rg8sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="rgba8snorm"] - expected: FAIL - - [:dimension="_undef_";format="rgba8uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba8sint"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm"] - expected: FAIL - - [:dimension="_undef_";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="r16uint"] - expected: FAIL - - [:dimension="_undef_";format="r16sint"] - expected: FAIL - - [:dimension="_undef_";format="r16float"] - expected: FAIL - - [:dimension="_undef_";format="rg16uint"] - expected: FAIL - - [:dimension="_undef_";format="rg16sint"] - expected: FAIL - - [:dimension="_undef_";format="rg16float"] - expected: FAIL - - [:dimension="_undef_";format="rgba16uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba16float"] - expected: FAIL - - [:dimension="_undef_";format="r32uint"] - expected: FAIL - - [:dimension="_undef_";format="r32sint"] - expected: FAIL - - [:dimension="_undef_";format="r32float"] - expected: FAIL - - [:dimension="_undef_";format="rg32uint"] - expected: FAIL - - [:dimension="_undef_";format="rg32sint"] - expected: FAIL - - [:dimension="_undef_";format="rg32float"] - expected: FAIL - - [:dimension="_undef_";format="rgba32uint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32sint"] - expected: FAIL - - [:dimension="_undef_";format="rgba32float"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="_undef_";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="_undef_";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="_undef_";format="stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth16unorm"] - expected: FAIL - - [:dimension="_undef_";format="depth32float"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus"] - expected: FAIL - - [:dimension="_undef_";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="_undef_";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="_undef_";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r8unorm"] - expected: FAIL - - [:dimension="1d";format="r8snorm"] - expected: FAIL - - [:dimension="1d";format="r8uint"] - expected: FAIL - - [:dimension="1d";format="r8sint"] - expected: FAIL - - [:dimension="1d";format="rg8unorm"] - expected: FAIL - - [:dimension="1d";format="rg8snorm"] - expected: FAIL - - [:dimension="1d";format="rg8uint"] - expected: FAIL - - [:dimension="1d";format="rg8sint"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm"] - expected: FAIL - - [:dimension="1d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="rgba8snorm"] - expected: FAIL - - [:dimension="1d";format="rgba8uint"] - expected: FAIL - - [:dimension="1d";format="rgba8sint"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm"] - expected: FAIL - - [:dimension="1d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="r16uint"] - expected: FAIL - - [:dimension="1d";format="r16sint"] - expected: FAIL - - [:dimension="1d";format="r16float"] - expected: FAIL - - [:dimension="1d";format="rg16uint"] - expected: FAIL - - [:dimension="1d";format="rg16sint"] - expected: FAIL - - [:dimension="1d";format="rg16float"] - expected: FAIL - - [:dimension="1d";format="rgba16uint"] - expected: FAIL - - [:dimension="1d";format="rgba16sint"] - expected: FAIL - - [:dimension="1d";format="rgba16float"] - expected: FAIL - - [:dimension="1d";format="r32uint"] - expected: FAIL - - [:dimension="1d";format="r32sint"] - expected: FAIL - - [:dimension="1d";format="r32float"] - expected: FAIL - - [:dimension="1d";format="rg32uint"] - expected: FAIL - - [:dimension="1d";format="rg32sint"] - expected: FAIL - - [:dimension="1d";format="rg32float"] - expected: FAIL - - [:dimension="1d";format="rgba32uint"] - expected: FAIL - - [:dimension="1d";format="rgba32sint"] - expected: FAIL - - [:dimension="1d";format="rgba32float"] - expected: FAIL - - [:dimension="1d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="1d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="1d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="1d";format="stencil8"] - expected: FAIL - - [:dimension="1d";format="depth16unorm"] - expected: FAIL - - [:dimension="1d";format="depth32float"] - expected: FAIL - - [:dimension="1d";format="depth24plus"] - expected: FAIL - - [:dimension="1d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="1d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="1d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="1d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="1d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="1d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="1d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="1d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="1d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="1d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="1d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="1d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="1d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="1d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r8unorm"] - expected: FAIL - - [:dimension="2d";format="r8snorm"] - expected: FAIL - - [:dimension="2d";format="r8uint"] - expected: FAIL - - [:dimension="2d";format="r8sint"] - expected: FAIL - - [:dimension="2d";format="rg8unorm"] - expected: FAIL - - [:dimension="2d";format="rg8snorm"] - expected: FAIL - - [:dimension="2d";format="rg8uint"] - expected: FAIL - - [:dimension="2d";format="rg8sint"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm"] - expected: FAIL - - [:dimension="2d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="rgba8snorm"] - expected: FAIL - - [:dimension="2d";format="rgba8uint"] - expected: FAIL - - [:dimension="2d";format="rgba8sint"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm"] - expected: FAIL - - [:dimension="2d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="r16uint"] - expected: FAIL - - [:dimension="2d";format="r16sint"] - expected: FAIL - - [:dimension="2d";format="r16float"] - expected: FAIL - - [:dimension="2d";format="rg16uint"] - expected: FAIL - - [:dimension="2d";format="rg16sint"] - expected: FAIL - - [:dimension="2d";format="rg16float"] - expected: FAIL - - [:dimension="2d";format="rgba16uint"] - expected: FAIL - - [:dimension="2d";format="rgba16sint"] - expected: FAIL - - [:dimension="2d";format="rgba16float"] - expected: FAIL - - [:dimension="2d";format="r32uint"] - expected: FAIL - - [:dimension="2d";format="r32sint"] - expected: FAIL - - [:dimension="2d";format="r32float"] - expected: FAIL - - [:dimension="2d";format="rg32uint"] - expected: FAIL - - [:dimension="2d";format="rg32sint"] - expected: FAIL - - [:dimension="2d";format="rg32float"] - expected: FAIL - - [:dimension="2d";format="rgba32uint"] - expected: FAIL - - [:dimension="2d";format="rgba32sint"] - expected: FAIL - - [:dimension="2d";format="rgba32float"] - expected: FAIL - - [:dimension="2d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="2d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="2d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="2d";format="stencil8"] - expected: FAIL - - [:dimension="2d";format="depth16unorm"] - expected: FAIL - - [:dimension="2d";format="depth32float"] - expected: FAIL - - [:dimension="2d";format="depth24plus"] - expected: FAIL - - [:dimension="2d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="2d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="2d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="2d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="2d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="2d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="2d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r8unorm"] - expected: FAIL - - [:dimension="3d";format="r8snorm"] - expected: FAIL - - [:dimension="3d";format="r8uint"] - expected: FAIL - - [:dimension="3d";format="r8sint"] - expected: FAIL - - [:dimension="3d";format="rg8unorm"] - expected: FAIL - - [:dimension="3d";format="rg8snorm"] - expected: FAIL - - [:dimension="3d";format="rg8uint"] - expected: FAIL - - [:dimension="3d";format="rg8sint"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm"] - expected: FAIL - - [:dimension="3d";format="rgba8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="rgba8snorm"] - expected: FAIL - - [:dimension="3d";format="rgba8uint"] - expected: FAIL - - [:dimension="3d";format="rgba8sint"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm"] - expected: FAIL - - [:dimension="3d";format="bgra8unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="r16uint"] - expected: FAIL - - [:dimension="3d";format="r16sint"] - expected: FAIL - - [:dimension="3d";format="r16float"] - expected: FAIL - - [:dimension="3d";format="rg16uint"] - expected: FAIL - - [:dimension="3d";format="rg16sint"] - expected: FAIL - - [:dimension="3d";format="rg16float"] - expected: FAIL - - [:dimension="3d";format="rgba16uint"] - expected: FAIL - - [:dimension="3d";format="rgba16sint"] - expected: FAIL - - [:dimension="3d";format="rgba16float"] - expected: FAIL - - [:dimension="3d";format="r32uint"] - expected: FAIL - - [:dimension="3d";format="r32sint"] - expected: FAIL - - [:dimension="3d";format="r32float"] - expected: FAIL - - [:dimension="3d";format="rg32uint"] - expected: FAIL - - [:dimension="3d";format="rg32sint"] - expected: FAIL - - [:dimension="3d";format="rg32float"] - expected: FAIL - - [:dimension="3d";format="rgba32uint"] - expected: FAIL - - [:dimension="3d";format="rgba32sint"] - expected: FAIL - - [:dimension="3d";format="rgba32float"] - expected: FAIL - - [:dimension="3d";format="rgb10a2unorm"] - expected: FAIL - - [:dimension="3d";format="rg11b10ufloat"] - expected: FAIL - - [:dimension="3d";format="rgb9e5ufloat"] - expected: FAIL - - [:dimension="3d";format="stencil8"] - expected: FAIL - - [:dimension="3d";format="depth16unorm"] - expected: FAIL - - [:dimension="3d";format="depth32float"] - expected: FAIL - - [:dimension="3d";format="depth24plus"] - expected: FAIL - - [:dimension="3d";format="depth24plus-stencil8"] - expected: FAIL - - [:dimension="3d";format="depth32float-stencil8"] - expected: FAIL - - [:dimension="3d";format="bc1-rgba-unorm"] - expected: FAIL - - [:dimension="3d";format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="bc2-rgba-unorm"] - expected: FAIL - - [:dimension="3d";format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="bc3-rgba-unorm"] - expected: FAIL - - [:dimension="3d";format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="3d";format="bc4-r-unorm"] - expected: FAIL - - [:dimension="3d";format="bc4-r-snorm"] - expected: FAIL - - [:dimension="3d";format="bc5-rg-unorm"] - expected: FAIL - - [:dimension="3d";format="bc5-rg-snorm"] - expected: FAIL - - [:dimension="3d";format="bc6h-rgb-ufloat"] - expected: FAIL - - [:dimension="3d";format="bc6h-rgb-float"] - expected: FAIL - - [:dimension="3d";format="bc7-rgba-unorm"] - expected: FAIL - - [:dimension="3d";format="bc7-rgba-unorm-srgb"] - expected: FAIL - - [:dimension="_undef_";format="rgb10a2uint"] - expected: FAIL - - [:dimension="1d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="2d";format="rgb10a2uint"] - expected: FAIL - - [:dimension="3d";format="rgb10a2uint"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_while_break:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,render_pipeline,primitive_topology:basic:*] - [:topology="point-list";indirect=false;primitiveRestart=false] - expected: FAIL - - [:topology="point-list";indirect=true;primitiveRestart=false] - expected: FAIL - - [:topology="line-list";indirect=false;primitiveRestart=false] - expected: FAIL - - [:topology="line-list";indirect=true;primitiveRestart=false] - expected: FAIL - - [:topology="line-strip";indirect=false;primitiveRestart=false] - expected: FAIL - - [:topology="line-strip";indirect=false;primitiveRestart=true] - expected: FAIL - - [:topology="line-strip";indirect=true;primitiveRestart=false] - expected: FAIL - - [:topology="line-strip";indirect=true;primitiveRestart=true] - expected: FAIL - - [:topology="triangle-list";indirect=false;primitiveRestart=false] - expected: FAIL - - [:topology="triangle-list";indirect=true;primitiveRestart=false] - expected: FAIL - - [:topology="triangle-strip";indirect=false;primitiveRestart=false] - expected: FAIL - - [:topology="triangle-strip";indirect=false;primitiveRestart=true] - expected: FAIL - - [:topology="triangle-strip";indirect=true;primitiveRestart=false] - expected: FAIL - - [:topology="triangle-strip";indirect=true;primitiveRestart=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureSampleBias:arrayed_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,queries,occlusionQuery:occlusion_query,alpha_to_coverage:*] - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=15;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="direct";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="zero";alpha=1] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.25] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.5] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=0.75] - expected: FAIL - - [:writeMask=0;renderMode="render-bundle";bufferOffset="non-zero";querySetOffset="non-zero";alpha=1] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,entry_point:no_entry_point_provided:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,getBindGroupLayout:unique_js_object,explicit_layout:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:overflow:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_attribute_offset_alignment:*] - [:format="uint8x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=1] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=254] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=253] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="uint8x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=1] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=2046] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=2045] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="uint8x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="uint8x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint8x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint8x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint8x4";arrayStride=256;offset=252] - expected: FAIL - - [:format="uint8x4";arrayStride=256;offset=250] - expected: FAIL - - [:format="uint8x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="uint8x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint8x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint8x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint8x4";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="uint8x4";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="uint8x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=1] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=254] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=253] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="sint8x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=1] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=2046] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=2045] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="sint8x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="sint8x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint8x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint8x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint8x4";arrayStride=256;offset=252] - expected: FAIL - - [:format="sint8x4";arrayStride=256;offset=250] - expected: FAIL - - [:format="sint8x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="sint8x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint8x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint8x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint8x4";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="sint8x4";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="sint8x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=1] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=254] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=253] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="unorm8x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=1] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=2046] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=2045] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="unorm8x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="unorm8x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="unorm8x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="unorm8x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="unorm8x4";arrayStride=256;offset=252] - expected: FAIL - - [:format="unorm8x4";arrayStride=256;offset=250] - expected: FAIL - - [:format="unorm8x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="unorm8x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="unorm8x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="unorm8x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="unorm8x4";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="unorm8x4";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="unorm8x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=1] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=254] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=253] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="snorm8x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=1] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=2046] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=2045] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="snorm8x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="snorm8x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="snorm8x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="snorm8x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="snorm8x4";arrayStride=256;offset=252] - expected: FAIL - - [:format="snorm8x4";arrayStride=256;offset=250] - expected: FAIL - - [:format="snorm8x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="snorm8x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="snorm8x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="snorm8x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="snorm8x4";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="snorm8x4";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="snorm8x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="uint16x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint16x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint16x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint16x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="uint16x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="uint16x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="uint16x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint16x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint16x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint16x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="uint16x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="uint16x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=244] - expected: FAIL - - [:format="uint16x4";arrayStride=256;offset=246] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="uint16x4";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="sint16x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint16x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint16x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint16x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="sint16x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="sint16x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="sint16x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint16x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint16x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint16x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="sint16x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="sint16x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=244] - expected: FAIL - - [:format="sint16x4";arrayStride=256;offset=246] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="sint16x4";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="unorm16x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="unorm16x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="unorm16x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="unorm16x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="unorm16x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="unorm16x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="unorm16x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="unorm16x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="unorm16x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="unorm16x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="unorm16x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="unorm16x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=244] - expected: FAIL - - [:format="unorm16x4";arrayStride=256;offset=246] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="unorm16x4";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="snorm16x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="snorm16x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="snorm16x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="snorm16x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="snorm16x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="snorm16x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="snorm16x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="snorm16x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="snorm16x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="snorm16x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="snorm16x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="snorm16x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=244] - expected: FAIL - - [:format="snorm16x4";arrayStride=256;offset=246] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="snorm16x4";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="float16x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="float16x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="float16x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="float16x2";arrayStride=256;offset=252] - expected: FAIL - - [:format="float16x2";arrayStride=256;offset=250] - expected: FAIL - - [:format="float16x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="float16x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="float16x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="float16x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="float16x2";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="float16x2";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="float16x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=248] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=244] - expected: FAIL - - [:format="float16x4";arrayStride=256;offset=246] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="float16x4";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="float32";arrayStride=256;offset=0] - expected: FAIL - - [:format="float32";arrayStride=256;offset=2] - expected: FAIL - - [:format="float32";arrayStride=256;offset=4] - expected: FAIL - - [:format="float32";arrayStride=256;offset=252] - expected: FAIL - - [:format="float32";arrayStride=256;offset=250] - expected: FAIL - - [:format="float32";arrayStride=256;offset=248] - expected: FAIL - - [:format="float32";arrayStride=2048;offset=0] - expected: FAIL - - [:format="float32";arrayStride=2048;offset=2] - expected: FAIL - - [:format="float32";arrayStride=2048;offset=4] - expected: FAIL - - [:format="float32";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="float32";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="float32";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=8] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=244] - expected: FAIL - - [:format="float32x2";arrayStride=256;offset=246] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=8] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="float32x2";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=0] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=6] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=12] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=2] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=4] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=244] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=238] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=240] - expected: FAIL - - [:format="float32x3";arrayStride=256;offset=242] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=0] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=6] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=12] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=2] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=4] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=2030] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=2032] - expected: FAIL - - [:format="float32x3";arrayStride=2048;offset=2034] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=16] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=240] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=232] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=236] - expected: FAIL - - [:format="float32x4";arrayStride=256;offset=238] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=16] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=2032] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=2024] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=2028] - expected: FAIL - - [:format="float32x4";arrayStride=2048;offset=2030] - expected: FAIL - - [:format="uint32";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint32";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint32";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint32";arrayStride=256;offset=252] - expected: FAIL - - [:format="uint32";arrayStride=256;offset=250] - expected: FAIL - - [:format="uint32";arrayStride=256;offset=248] - expected: FAIL - - [:format="uint32";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint32";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint32";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint32";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="uint32";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="uint32";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=8] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=244] - expected: FAIL - - [:format="uint32x2";arrayStride=256;offset=246] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=8] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="uint32x2";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=6] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=12] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=244] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=238] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=240] - expected: FAIL - - [:format="uint32x3";arrayStride=256;offset=242] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=6] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=12] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=2030] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=2032] - expected: FAIL - - [:format="uint32x3";arrayStride=2048;offset=2034] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=16] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=240] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=232] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=236] - expected: FAIL - - [:format="uint32x4";arrayStride=256;offset=238] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=16] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=2032] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=2024] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=2028] - expected: FAIL - - [:format="uint32x4";arrayStride=2048;offset=2030] - expected: FAIL - - [:format="sint32";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint32";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint32";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint32";arrayStride=256;offset=252] - expected: FAIL - - [:format="sint32";arrayStride=256;offset=250] - expected: FAIL - - [:format="sint32";arrayStride=256;offset=248] - expected: FAIL - - [:format="sint32";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint32";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint32";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint32";arrayStride=2048;offset=2044] - expected: FAIL - - [:format="sint32";arrayStride=2048;offset=2042] - expected: FAIL - - [:format="sint32";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=8] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=248] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=244] - expected: FAIL - - [:format="sint32x2";arrayStride=256;offset=246] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=8] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=2040] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="sint32x2";arrayStride=2048;offset=2038] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=6] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=12] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=244] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=238] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=240] - expected: FAIL - - [:format="sint32x3";arrayStride=256;offset=242] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=6] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=12] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=2036] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=2030] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=2032] - expected: FAIL - - [:format="sint32x3";arrayStride=2048;offset=2034] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=0] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=8] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=16] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=2] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=4] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=240] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=232] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=236] - expected: FAIL - - [:format="sint32x4";arrayStride=256;offset=238] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=0] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=8] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=16] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=2] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=4] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=2032] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=2024] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=2028] - expected: FAIL - - [:format="sint32x4";arrayStride=2048;offset=2030] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="unorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="unorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":1}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-2}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-3}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="snorm8x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="snorm8x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="uint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="sint16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="unorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="unorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="snorm16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="snorm16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="float16x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="float16x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="float32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="float32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":6}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":12}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-14}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":6}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":12}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="float32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-14}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":16}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-24}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-20}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":16}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-24}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-20}] - expected: FAIL - - [:format="float32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="uint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="uint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":6}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":12}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-14}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":6}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":12}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="uint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-14}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":16}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-24}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-20}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":16}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-24}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-20}] - expected: FAIL - - [:format="uint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-4}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-6}] - expected: FAIL - - [:format="sint32";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-8}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="sint32x2";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-10}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":6}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":12}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-14}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":6}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":12}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-12}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="sint32x3";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-14}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":16}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-24}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-20}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":0,"add":256};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":0}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":8}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":16}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":2}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":0,"add":4}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-16}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-24}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-20}] - expected: FAIL - - [:format="sint32x4";arrayStrideVariant={"mult":1,"add":0};offsetVariant={"mult":1,"add":-18}] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:single_frames:*] - [:canvasType="onscreen"] - expected: FAIL - - [:canvasType="offscreen"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageBitmap:from_ImageData:*] - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="none";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=false;dstFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_bind_group_on_same_index_color_texture:*] - [:useDifferentTextureAsTexture2=true;baseLayer2=0;view2Binding="texture";hasConflict=true] - expected: FAIL - - [:useDifferentTextureAsTexture2=true;baseLayer2=0;view2Binding="texture";hasConflict=false] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=0;view2Binding="texture";hasConflict=true] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=0;view2Binding="texture";hasConflict=false] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=0;view2Binding="storage";hasConflict=true] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=0;view2Binding="storage";hasConflict=false] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=1;view2Binding="texture";hasConflict=true] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=1;view2Binding="texture";hasConflict=false] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=1;view2Binding="storage";hasConflict=true] - expected: FAIL - - [:useDifferentTextureAsTexture2=false;baseLayer2=1;view2Binding="storage";hasConflict=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:vector_scalar_compound:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,compute,basic:memcpy:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,blankspace:null_characters:*] - [:contains_null=true;placement="comment"] - expected: FAIL - - [:contains_null=true;placement="delimiter"] - expected: FAIL - - [:contains_null=true;placement="eol"] - expected: FAIL - - [:contains_null=false;placement="comment"] - expected: FAIL - - [:contains_null=false;placement="delimiter"] - expected: FAIL - - [:contains_null=false;placement="eol"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pass,render_pass_descriptor:timestampWrite,query_index:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,i32_arithmetic:remainder_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,flow_control,for:for_complex_continuing:*] - [:preventValueOptimizations=true] - expected: FAIL - - [:preventValueOptimizations=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,features,texture_formats:canvas_configuration_view_formats:*] - [:viewFormats=["depth32float-stencil8"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["depth32float-stencil8"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["depth32float-stencil8"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["depth32float-stencil8"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc2-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc3-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc4-r-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc4-r-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc4-r-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc4-r-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc4-r-snorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc4-r-snorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc4-r-snorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc4-r-snorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc5-rg-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc5-rg-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc5-rg-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc5-rg-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc5-rg-snorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc5-rg-snorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc5-rg-snorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc5-rg-snorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc6h-rgb-ufloat"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc6h-rgb-ufloat"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc6h-rgb-ufloat"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc6h-rgb-ufloat"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc6h-rgb-float"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc6h-rgb-float"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc6h-rgb-float"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc6h-rgb-float"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc7-rgba-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8a1unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8a1unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8a1unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgb8a1unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgba8unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgba8unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgba8unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["etc2-rgba8unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-r11unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-r11unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-r11snorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-r11snorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-rg11unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-rg11unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-rg11snorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["eac-rg11snorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-4x4-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-4x4-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-4x4-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-4x4-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x4-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x4-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x4-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x4-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x5-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x5-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x5-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-5x5-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x5-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x5-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x5-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x5-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x6-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x6-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x6-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-6x6-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x5-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x5-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x5-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x5-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x6-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x6-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x6-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x6-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x8-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x8-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x8-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-8x8-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x5-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x5-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x5-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x5-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x6-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x6-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x6-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x6-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x8-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x8-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x8-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x8-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x10-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x10-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x10-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-10x10-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x10-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x10-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x10-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x10-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x12-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x12-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x12-unorm-srgb"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["astc-12x12-unorm-srgb"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bgra8unorm","bc1-rgba-unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bgra8unorm","bc1-rgba-unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bgra8unorm","bc1-rgba-unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bgra8unorm","bc1-rgba-unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm","bgra8unorm"\];canvasType="onscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm","bgra8unorm"\];canvasType="onscreen";enable_required_feature=false] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm","bgra8unorm"\];canvasType="offscreen";enable_required_feature=true] - expected: FAIL - - [:viewFormats=["bc1-rgba-unorm","bgra8unorm"\];canvasType="offscreen";enable_required_feature=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,depth_stencil_state:depth_write:*] - [:isAsync=false;format="stencil8";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=false;format="stencil8";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=false;format="depth16unorm";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=false;format="depth32float";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=false;format="depth32float";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=false;format="depth24plus";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=false;format="depth24plus-stencil8";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=false;format="depth32float-stencil8";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=true;format="stencil8";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=true;format="stencil8";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=true;format="depth16unorm";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=true;format="depth32float";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=true;format="depth32float";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=true;format="depth24plus";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=true;format="depth24plus-stencil8";depthWriteEnabled=true] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthWriteEnabled=false] - expected: FAIL - - [:isAsync=true;format="depth32float-stencil8";depthWriteEnabled=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,compute_pipeline:overrides,workgroup_size,limits:*] - [:isAsync=true;type="u32"] - expected: FAIL - - [:isAsync=true;type="i32"] - expected: FAIL - - [:isAsync=false;type="u32"] - expected: FAIL - - [:isAsync=false;type="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicMin:min_storage:*] - [:workgroupSize=1;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarKind="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map_detach:while_mapped:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:subtraction:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_fn_const_decl:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,clearBuffer:size_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:i32_to_i32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:scalar_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,bitcast:f32_to_i32:*] - [:inputSource="const";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="const";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="const";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="uniform";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_r";vectorize=4;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_";alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3;alias=true] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=false] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4;alias=true] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,begin_end:occlusion_query,disjoint_queries_with_same_query_index:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,resource_usages,texture,in_render_common:subresources,color_attachments:*] - [:layer0=0;level0=0;layer1=0;level1=0;inSamePass=true] - expected: FAIL - - [:layer0=0;level0=0;layer1=0;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=0;layer1=0;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=0;layer1=1;level1=0;inSamePass=true] - expected: FAIL - - [:layer0=0;level0=0;layer1=1;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=0;layer1=1;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=1;layer1=0;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=1;layer1=0;level1=1;inSamePass=true] - expected: FAIL - - [:layer0=0;level0=1;layer1=0;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=1;layer1=1;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=0;level0=1;layer1=1;level1=1;inSamePass=true] - expected: FAIL - - [:layer0=0;level0=1;layer1=1;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=0;layer1=0;level1=0;inSamePass=true] - expected: FAIL - - [:layer0=1;level0=0;layer1=0;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=0;layer1=0;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=0;layer1=1;level1=0;inSamePass=true] - expected: FAIL - - [:layer0=1;level0=0;layer1=1;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=0;layer1=1;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=1;layer1=0;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=1;layer1=0;level1=1;inSamePass=true] - expected: FAIL - - [:layer0=1;level0=1;layer1=0;level1=1;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=1;layer1=1;level1=0;inSamePass=false] - expected: FAIL - - [:layer0=1;level0=1;layer1=1;level1=1;inSamePass=true] - expected: FAIL - - [:layer0=1;level0=1;layer1=1;level1=1;inSamePass=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,programmable,state_tracking:compatible_pipelines:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atomics:stage:*] - [:stage="fragment";atomicOp="add"] - expected: FAIL - - [:stage="fragment";atomicOp="sub"] - expected: FAIL - - [:stage="fragment";atomicOp="max"] - expected: FAIL - - [:stage="fragment";atomicOp="min"] - expected: FAIL - - [:stage="fragment";atomicOp="and"] - expected: FAIL - - [:stage="fragment";atomicOp="or"] - expected: FAIL - - [:stage="fragment";atomicOp="xor"] - expected: FAIL - - [:stage="fragment";atomicOp="load"] - expected: FAIL - - [:stage="fragment";atomicOp="store"] - expected: FAIL - - [:stage="fragment";atomicOp="exchange"] - expected: FAIL - - [:stage="fragment";atomicOp="compareexchangeweak"] - expected: FAIL - - [:stage="vertex";atomicOp="add"] - expected: FAIL - - [:stage="vertex";atomicOp="sub"] - expected: FAIL - - [:stage="vertex";atomicOp="max"] - expected: FAIL - - [:stage="vertex";atomicOp="min"] - expected: FAIL - - [:stage="vertex";atomicOp="and"] - expected: FAIL - - [:stage="vertex";atomicOp="or"] - expected: FAIL - - [:stage="vertex";atomicOp="xor"] - expected: FAIL - - [:stage="vertex";atomicOp="load"] - expected: FAIL - - [:stage="vertex";atomicOp="store"] - expected: FAIL - - [:stage="vertex";atomicOp="exchange"] - expected: FAIL - - [:stage="vertex";atomicOp="compareexchangeweak"] - expected: FAIL - - [:stage="compute";atomicOp="add"] - expected: FAIL - - [:stage="compute";atomicOp="sub"] - expected: FAIL - - [:stage="compute";atomicOp="max"] - expected: FAIL - - [:stage="compute";atomicOp="min"] - expected: FAIL - - [:stage="compute";atomicOp="and"] - expected: FAIL - - [:stage="compute";atomicOp="or"] - expected: FAIL - - [:stage="compute";atomicOp="xor"] - expected: FAIL - - [:stage="compute";atomicOp="load"] - expected: FAIL - - [:stage="compute";atomicOp="store"] - expected: FAIL - - [:stage="compute";atomicOp="exchange"] - expected: FAIL - - [:stage="compute";atomicOp="compareexchangeweak"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,copyToTexture,CopyExternalImageToTexture:source_offscreenCanvas,state:*] - [:state="nocontext"] - expected: FAIL - - [:state="detached-nocontext"] - expected: FAIL - - [:state="detached-hascontext"] - expected: FAIL - - [:state="valid"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,buffer,mapping:mapAsync,earlyRejection:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,render_bundle:depth_stencil_formats_mismatch:*] - [:bundleFormat="depth24plus";passFormat="depth24plus"] - expected: FAIL - - [:bundleFormat="depth24plus";passFormat="depth16unorm"] - expected: FAIL - - [:bundleFormat="depth24plus";passFormat="depth24plus-stencil8"] - expected: FAIL - - [:bundleFormat="stencil8";passFormat="depth24plus-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGatherCompare:array_2d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,cmds,render,draw:last_buffer_setting_take_account:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,vertex_state:vertex_buffer_array_stride_limit_alignment:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,padding:array_of_matCx3:*] - [:columns=2;use_struct=true] - expected: FAIL - - [:columns=2;use_struct=false] - expected: FAIL - - [:columns=3;use_struct=true] - expected: FAIL - - [:columns=3;use_struct=false] - expected: FAIL - - [:columns=4;use_struct=true] - expected: FAIL - - [:columns=4;use_struct=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:scalar_compound:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_u32_decrement_underflow:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,memory_sync,texture,same_subresource:wr:*] - [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"sample","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"write-texture","in":"queue"};read={"op":"sample","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"attachment-store","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"attachment-store","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"attachment-store","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"attachment-resolve","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"attachment-resolve","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"attachment-resolve","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"render-pass-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"render-pass-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"render-bundle-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="queue-op";write={"op":"storage","in":"render-bundle-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"b2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"t2t-copy","in":"command-encoder"};read={"op":"sample","in":"render-bundle-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"attachment-store","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"attachment-store","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"attachment-store","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"attachment-resolve","in":"command-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"attachment-resolve","in":"command-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"attachment-resolve","in":"command-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"render-pass-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"render-pass-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"render-bundle-encoder"};read={"op":"t2b-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="command-buffer";write={"op":"storage","in":"render-bundle-encoder"};read={"op":"t2t-copy","in":"command-encoder"}] - expected: FAIL - - [:boundary="pass";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - [:boundary="dispatch";write={"op":"storage","in":"compute-pass-encoder"};read={"op":"sample","in":"compute-pass-encoder"}] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,buffers,map_ArrayBuffer:postMessage:*] - [:transfer=false;mapMode="READ"] - expected: FAIL - - [:transfer=false;mapMode="WRITE"] - expected: FAIL - - [:transfer=true;mapMode="READ"] - expected: FAIL - - [:transfer=true;mapMode="WRITE"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,shader_module:invalid,fragment:*] - [:isAsync=true;isFragmentShaderValid=true] - expected: FAIL - - [:isAsync=true;isFragmentShaderValid=false] - expected: FAIL - - [:isAsync=false;isFragmentShaderValid=true] - expected: FAIL - - [:isAsync=false;isFragmentShaderValid=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,queue,writeTexture:texture,device_mismatch:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,statement,increment_decrement:scalar_i32_decrement:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,texture_view,write:aspect:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,programmable,state_tracking:one_bind_group_multiple_slots:*] - [:encoderType="compute%20pass"] - expected: FAIL - - [:encoderType="render%20pass"] - expected: FAIL - - [:encoderType="render%20bundle"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,render_pipeline,multisample_state:alpha_to_coverage,sample_mask:*] - [:isAsync=false;alphaToCoverageEnabled=false] - expected: FAIL - - [:isAsync=false;alphaToCoverageEnabled=true] - expected: FAIL - - [:isAsync=true;alphaToCoverageEnabled=false] - expected: FAIL - - [:isAsync=true;alphaToCoverageEnabled=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,determinant:f32:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - [:inputSource="uniform";dim=2] - expected: FAIL - - [:inputSource="uniform";dim=3] - expected: FAIL - - [:inputSource="uniform";dim=4] - expected: FAIL - - [:inputSource="storage_r";dim=2] - expected: FAIL - - [:inputSource="storage_r";dim=3] - expected: FAIL - - [:inputSource="storage_r";dim=4] - expected: FAIL - - [:inputSource="storage_rw";dim=2] - expected: FAIL - - [:inputSource="storage_rw";dim=3] - expected: FAIL - - [:inputSource="storage_rw";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,refract:f32_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_loop_break:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,var_and_let:initializer_type:*] - [:variableOrConstant="var"] - expected: FAIL - - [:variableOrConstant="let"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureGatherCompare:array_3d_coords:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,clamp:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,fwidthCoarse:f32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,locations:nesting:*] - [:target_stage="vertex";target_io="in"] - expected: FAIL - - [:target_stage="vertex";target_io="out"] - expected: FAIL - - [:target_stage="fragment";target_io="in"] - expected: FAIL - - [:target_stage="fragment";target_io="out"] - expected: FAIL - - [:target_stage="";target_io="in"] - expected: FAIL - - [:target_stage="";target_io="out"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,textureStore:store_3d_coords:*] - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8snorm"] - expected: FAIL - - [:format="rgba8uint"] - expected: FAIL - - [:format="rgba8sint"] - expected: FAIL - - [:format="rgba16uint"] - expected: FAIL - - [:format="rgba16sint"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="r32uint"] - expected: FAIL - - [:format="r32sint"] - expected: FAIL - - [:format="r32float"] - expected: FAIL - - [:format="rg32uint"] - expected: FAIL - - [:format="rg32sint"] - expected: FAIL - - [:format="rg32float"] - expected: FAIL - - [:format="rgba32uint"] - expected: FAIL - - [:format="rgba32sint"] - expected: FAIL - - [:format="rgba32float"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,createRenderBundleEncoder:depth_stencil_readonly:*] - [:depthStencilFormat="stencil8"] - expected: FAIL - - [:depthStencilFormat="depth16unorm"] - expected: FAIL - - [:depthStencilFormat="depth32float"] - expected: FAIL - - [:depthStencilFormat="depth24plus"] - expected: FAIL - - [:depthStencilFormat="depth24plus-stencil8"] - expected: FAIL - - [:depthStencilFormat="depth32float-stencil8"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,u32_arithmetic:division_vector_scalar:*] - [:inputSource="const";vectorize_lhs=2] - expected: FAIL - - [:inputSource="const";vectorize_lhs=3] - expected: FAIL - - [:inputSource="const";vectorize_lhs=4] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=2] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=3] - expected: FAIL - - [:inputSource="uniform";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_r";vectorize_lhs=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize_lhs=4] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,shader_module,compilation_info:line_number_and_position:*] - [:valid=false;name="ascii"] - expected: FAIL - - [:valid=false;name="unicode"] - expected: FAIL - - [:valid=false;name="carriage-return"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,storageBarrier:barrier:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,adapter,requestDevice:features,known:*] +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:after_call:*] expected: CRASH - [:feature="bgra8unorm-storage"] - expected: FAIL - [:feature="depth-clip-control"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,semicolon:module_scope_single:*] + expected: CRASH - [:feature="depth32float-stencil8"] - expected: FAIL - - [:feature="texture-compression-bc"] - expected: FAIL - - [:feature="texture-compression-etc2"] - expected: FAIL - - [:feature="texture-compression-astc"] - expected: FAIL - - [:feature="timestamp-query"] - expected: FAIL - - [:feature="indirect-first-instance"] - expected: FAIL - - [:feature="shader-f16"] - expected: FAIL - - [:feature="rg11b10ufloat-renderable"] - expected: FAIL - - [:feature="float32-filterable"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,command_buffer,render,state_tracking:set_index_buffer_before_non_indexed_draw:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,encoding,queries,resolveQuerySet:destination_buffer_usage:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,abs:i32:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,sqrt:abstract_float:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,af_arithmetic:negation:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:one_pointer_one_module_scope:*] - [:a_use="no_access";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="return";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="return";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="return";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="return";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="return";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="return";aliased=false] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="compound_assign_lhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="return";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="return";aliased=false] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="compound_assign_rhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="return";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="return";aliased=false] - expected: FAIL - - [:a_use="increment";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="increment";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="return";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="return";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="return";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="return";aliased=false] - expected: FAIL - - [:a_use="binary_rhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="binary_rhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="return";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="return";aliased=false] - expected: FAIL - - [:a_use="unary_minus";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="unary_minus";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="return";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="return";aliased=false] - expected: FAIL - - [:a_use="bitcast";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="bitcast";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="return";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="return";aliased=false] - expected: FAIL - - [:a_use="convert";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="convert";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="return";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="return";aliased=false] - expected: FAIL - - [:a_use="builtin_arg";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="builtin_arg";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="return";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="return";aliased=false] - expected: FAIL - - [:a_use="index_access";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="index_access";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="return";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="return";aliased=false] - expected: FAIL - - [:a_use="let_init";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="let_init";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="return";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="return";aliased=false] - expected: FAIL - - [:a_use="var_init";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="var_init";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="return";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="return";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="return";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="return";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="return";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="return";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="return";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="return";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="return";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="return";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="return";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="return";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="return";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="return";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="return";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="return";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="return";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="return";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="return";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="return";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="return";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="return";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="return";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="return";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="return";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="return";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="return";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="return";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="return";b_use="return";aliased=true] - expected: FAIL - - [:a_use="return";b_use="return";aliased=false] - expected: FAIL - - [:a_use="return";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="return";b_use="switch_cond";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="increment";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="increment";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="unary_minus";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="unary_minus";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="bitcast";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="bitcast";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="convert";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="convert";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="index_access";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="index_access";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="let_init";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="let_init";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="var_init";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="var_init";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="return";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="return";aliased=false] - expected: FAIL - - [:a_use="switch_cond";b_use="switch_cond";aliased=true] - expected: FAIL - - [:a_use="switch_cond";b_use="switch_cond";aliased=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:invalid_severity:*] - [:severity="none";type="attribute"] - expected: FAIL - - [:severity="none";type="directive"] - expected: FAIL - - [:severity="warn";type="attribute"] - expected: FAIL - - [:severity="warn";type="directive"] - expected: FAIL - - [:severity="goose";type="attribute"] - expected: FAIL - - [:severity="goose";type="directive"] - expected: FAIL - - [:severity="fatal";type="attribute"] - expected: FAIL - - [:severity="fatal";type="directive"] - expected: FAIL - - [:severity="severe";type="attribute"] - expected: FAIL - - [:severity="severe";type="directive"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log2:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:no_direct_recursion:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:no_indirect_recursion:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_ptr_store_type:*] - [:target="i32"] - expected: FAIL - - [:target="P"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,inverseSqrt:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size:*] - [:attr="x_only_float"] - expected: FAIL - - [:attr="xy_only_float"] - expected: FAIL - - [:attr="xyz_float"] - expected: FAIL - - [:attr="x_only_float_literal"] - expected: FAIL - - [:attr="xy_only_float_literal"] - expected: FAIL - - [:attr="xyz_float_literal"] - expected: FAIL - - [:attr="empty"] - expected: FAIL - - [:attr="empty_x"] - expected: FAIL - - [:attr="empty_y"] - expected: FAIL - - [:attr="invalid_entry"] - expected: FAIL - - [:attr="x_only_abstract"] - expected: FAIL - - [:attr="xy_only_abstract"] - expected: FAIL - - [:attr="xyz_abstract"] - expected: FAIL - - [:attr="x_only_unsigned"] - expected: FAIL - - [:attr="xy_only_unsigned"] - expected: FAIL - - [:attr="xyz_unsigned"] - expected: FAIL - - [:attr="x_only_signed"] - expected: FAIL - - [:attr="xy_only_signed"] - expected: FAIL - - [:attr="xyz_signed"] - expected: FAIL - - [:attr="x_only_hex"] - expected: FAIL - - [:attr="xy_only_hex"] - expected: FAIL - - [:attr="xyz_hex"] - expected: FAIL - - [:attr="const_expr"] - expected: FAIL - - [:attr="override"] - expected: FAIL - - [:attr="override_no_default"] - expected: FAIL - - [:attr="trailing_comma_x"] - expected: FAIL - - [:attr="trailing_comma_y"] - expected: FAIL - - [:attr="trailing_comma_z"] - expected: FAIL - - [:attr="override_expr"] - expected: FAIL - - [:attr="mixed_abstract_signed"] - expected: FAIL - - [:attr="mixed_abstract_unsigned"] - expected: FAIL - - [:attr="mixed_signed_unsigned"] - expected: FAIL - - [:attr="zero_x"] - expected: FAIL - - [:attr="zero_y"] - expected: FAIL - - [:attr="zero_z"] - expected: FAIL - - [:attr="negative_x"] - expected: FAIL - - [:attr="negative_y"] - expected: FAIL - - [:attr="negative_z"] - expected: FAIL - - [:attr="max_values"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="misspelling"] - expected: FAIL - - [:attr="no_params"] - expected: FAIL - - [:attr="multi_line"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="mix_ux"] - expected: FAIL - - [:attr="mix_uy"] - expected: FAIL - - [:attr="mix_uz"] - expected: FAIL - - [:attr="duplicate"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:two_pointers:*] - [:address_space="private";a_use="no_access";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="no_access";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="assign";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_lhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="compound_assign_rhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="increment";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_lhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="binary_rhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="unary_minus";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="bitcast";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="convert";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="builtin_arg";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="index_access";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="let_init";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="var_init";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="return";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="return";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="return";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="return";aliased=false] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="private";a_use="switch_cond";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="no_access";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="assign";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_lhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="compound_assign_rhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="increment";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_lhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="binary_rhs";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="unary_minus";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="bitcast";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="convert";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="builtin_arg";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="index_access";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="let_init";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="var_init";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="return";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="return";b_use="switch_cond";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="no_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="no_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="assign";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="assign";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="compound_assign_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="compound_assign_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="compound_assign_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="compound_assign_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="increment";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="increment";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="binary_rhs";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="binary_rhs";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="unary_minus";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="unary_minus";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="bitcast";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="bitcast";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="convert";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="convert";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="builtin_arg";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="builtin_arg";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="index_access";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="index_access";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="let_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="let_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="var_init";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="var_init";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="return";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="return";aliased=false] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="switch_cond";aliased=true] - expected: FAIL - - [:address_space="function";a_use="switch_cond";b_use="switch_cond";aliased=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,abs:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="i32"] - expected: FAIL - - [:stage="constant";type="vec2%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="u32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cu32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cu32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cu32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="i32"] - expected: FAIL - - [:stage="override";type="vec2%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="u32"] - expected: FAIL - - [:stage="override";type="vec2%3Cu32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cu32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_storage_basic:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec3_fract:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:functions:*] - [:case="uniform_result"] - expected: FAIL - - [:case="nonuniform_result"] - expected: FAIL - - [:case="nonuniform_return_is_uniform_after_call"] - expected: FAIL - - [:case="uniform_passthrough_parameter"] - expected: FAIL - - [:case="nonuniform_passthrough_parameter"] - expected: FAIL - - [:case="combined_parameters1"] - expected: FAIL - - [:case="combined_parameters2"] - expected: FAIL - - [:case="combined_parameters3"] - expected: FAIL - - [:case="combined_parameters4"] - expected: FAIL - - [:case="uniform_parameter_cf_after_nonuniform_expr"] - expected: FAIL - - [:case="required_uniform_function_call_in_uniform_cf"] - expected: FAIL - - [:case="required_uniform_function_call_in_nonuniform_cf"] - expected: FAIL - - [:case="required_uniform_function_call_in_nonuniform_cf2"] - expected: FAIL - - [:case="required_uniform_function_call_depends_on_uniform_param"] - expected: FAIL - - [:case="required_uniform_function_call_depends_on_nonuniform_param"] - expected: FAIL - - [:case="dpdx_nonuniform_result"] - expected: FAIL - - [:case="dpdy_nonuniform_result"] - expected: FAIL - - [:case="dpdxCoarse_nonuniform_result"] - expected: FAIL - - [:case="dpdyCoarse_nonuniform_result"] - expected: FAIL - - [:case="dpdxFine_nonuniform_result"] - expected: FAIL - - [:case="dpdyFine_nonuniform_result"] - expected: FAIL - - [:case="fwidth_nonuniform_result"] - expected: FAIL - - [:case="fwidthCoarse_nonuniform_result"] - expected: FAIL - - [:case="fwidthFine_nonuniform_result"] - expected: FAIL - - [:case="textureSample_nonuniform_result"] - expected: FAIL - - [:case="textureSampleBias_nonuniform_result"] - expected: FAIL - - [:case="textureSampleCompare_nonuniform_result"] - expected: FAIL - - [:case="textureDimensions_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureGather_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureGatherCompare_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureLoad_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureNumLayers_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureNumLevels_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureNumSamples_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureSampleLevel_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureSampleGrad_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureSampleCompareLevel_uniform_input_uniform_result"] - expected: FAIL - - [:case="textureSampleBaseClampToEdge_uniform_input_uniform_result"] - expected: FAIL - - [:case="min_uniform_input_uniform_result"] - expected: FAIL - - [:case="value_constructor_uniform_input_uniform_result"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,must_use:call:*] - [:use="%40must_use";call="phony"] - expected: FAIL - - [:use="%40must_use";call="let"] - expected: FAIL - - [:use="%40must_use";call="var"] - expected: FAIL - - [:use="%40must_use";call="condition"] - expected: FAIL - - [:use="%40must_use";call="param"] - expected: FAIL - - [:use="%40must_use";call="statement"] - expected: FAIL - - [:use="";call="phony"] - expected: FAIL - - [:use="";call="let"] - expected: FAIL - - [:use="";call="var"] - expected: FAIL - - [:use="";call="condition"] - expected: FAIL - - [:use="";call="param"] - expected: FAIL - - [:use="";call="statement"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicLoad:load_workgroup:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sin:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,size:size_non_struct:*] - [:attr="control"] - expected: FAIL - - [:attr="struct"] - expected: FAIL - - [:attr="constant"] - expected: FAIL - - [:attr="vec"] - expected: FAIL - - [:attr="mat"] - expected: FAIL - - [:attr="array"] - expected: FAIL - - [:attr="scalar"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,id:id_struct_member:*] - [:id="%40id(1)%20override"] - expected: FAIL - - [:id="%40id(1)"] - expected: FAIL - - [:id=""] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:vec2:*] - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:greater_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageData:copy_subrect_from_ImageData:*] - [:srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,degrees:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec3_whole:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:magFilter,linear:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:minFilter,linear:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:scalar:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atanh:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:module_var_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,const:no_indirect_recursion_via_array_size:*] - [:target="a"] - expected: FAIL - - [:target="b"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asin:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sign:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="i32"] - expected: FAIL - - [:stage="constant";type="vec2%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="i32"] - expected: FAIL - - [:stage="override";type="vec2%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Ci32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_nonmatching_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_vertex_shader:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_bad_store_type:*] - [:storeType="undeclared"] - expected: FAIL - - [:storeType="clamp"] - expected: FAIL - - [:storeType="1"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_parameter_types:*] - [:case="u32"] - expected: FAIL - - [:case="i32"] - expected: FAIL - - [:case="f32"] - expected: FAIL - - [:case="bool"] - expected: FAIL - - [:case="vec2"] - expected: FAIL - - [:case="vec3"] - expected: FAIL - - [:case="vec4"] - expected: FAIL - - [:case="mat2x2"] - expected: FAIL - - [:case="mat2x3"] - expected: FAIL - - [:case="mat2x4"] - expected: FAIL - - [:case="mat3x2"] - expected: FAIL - - [:case="mat3x3"] - expected: FAIL - - [:case="mat3x4"] - expected: FAIL - - [:case="mat4x2"] - expected: FAIL - - [:case="mat4x3"] - expected: FAIL - - [:case="mat4x4"] - expected: FAIL - - [:case="array1"] - expected: FAIL - - [:case="array2"] - expected: FAIL - - [:case="array3"] - expected: FAIL - - [:case="array4"] - expected: FAIL - - [:case="array5"] - expected: FAIL - - [:case="struct1"] - expected: FAIL - - [:case="struct2"] - expected: FAIL - - [:case="runtime_array"] - expected: FAIL - - [:case="runtime_struct"] - expected: FAIL - - [:case="override_array"] - expected: FAIL - - [:case="atomic_u32"] - expected: FAIL - - [:case="atomic_struct"] - expected: FAIL - - [:case="texture_sample"] - expected: FAIL - - [:case="texture_depth"] - expected: FAIL - - [:case="texture_multisampled"] - expected: FAIL - - [:case="texture_storage"] - expected: FAIL - - [:case="sampler"] - expected: FAIL - - [:case="sampler_comparison"] - expected: FAIL - - [:case="ptr1"] - expected: FAIL - - [:case="ptr2"] - expected: FAIL - - [:case="ptr3"] - expected: FAIL - - [:case="ptr4"] - expected: FAIL - - [:case="ptr5"] - expected: FAIL - - [:case="ptr6"] - expected: FAIL - - [:case="ptr7"] - expected: FAIL - - [:case="ptr8"] - expected: FAIL - - [:case="ptr9"] - expected: FAIL - - [:case="ptr10"] - expected: FAIL - - [:case="ptr12"] - expected: FAIL - - [:case="ptr13"] - expected: FAIL - - [:case="ptr14"] - expected: FAIL - - [:case="ptr15"] - expected: FAIL - - [:case="ptr16"] - expected: FAIL - - [:case="ptr17"] - expected: FAIL - - [:case="ptrWorkgroupAtomic"] - expected: FAIL - - [:case="ptrWorkgroupNestedAtomic"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,must_use:builtin_no_must_use:*] - [:call="atomicLoad";use=true] - expected: FAIL - - [:call="atomicLoad";use=false] - expected: FAIL - - [:call="atomicAdd";use=true] - expected: FAIL - - [:call="atomicAdd";use=false] - expected: FAIL - - [:call="atomicSub";use=true] - expected: FAIL - - [:call="atomicSub";use=false] - expected: FAIL - - [:call="atomicMax";use=true] - expected: FAIL - - [:call="atomicMax";use=false] - expected: FAIL - - [:call="atomicMin";use=true] - expected: FAIL - - [:call="atomicMin";use=false] - expected: FAIL - - [:call="atomicAnd";use=true] - expected: FAIL - - [:call="atomicAnd";use=false] - expected: FAIL - - [:call="atomicOr";use=true] - expected: FAIL - - [:call="atomicOr";use=false] - expected: FAIL - - [:call="atomicXor";use=true] - expected: FAIL - - [:call="atomicXor";use=false] - expected: FAIL - - [:call="atomicExchange";use=true] - expected: FAIL - - [:call="atomicExchange";use=false] - expected: FAIL - - [:call="atomicCompareExchangeWeak";use=true] - expected: FAIL - - [:call="atomicCompareExchangeWeak";use=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:let_ptr_reads:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp2:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,interpolate:interpolation_validation:*] - [:attr="valid"] - expected: FAIL - - [:attr="no_space"] - expected: FAIL - - [:attr="trailing_comma_one_arg"] - expected: FAIL - - [:attr="trailing_comma_two_arg"] - expected: FAIL - - [:attr="newline"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="no_params"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_value_and_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="missing_parens"] - expected: FAIL - - [:attr="missing_comma"] - expected: FAIL - - [:attr="numeric"] - expected: FAIL - - [:attr="numeric_second_param"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_matching:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:same_pointer_read_and_write:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_function:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:explicit_access_mode:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="write";stage="compute"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="write";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="write";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="write";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="write";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="write";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_matching:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize="_undef_"] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize="_undef_"] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec2_fract:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,texture,cubeArray:cube_array:*] - [:dimension="cube"] - expected: FAIL - - [:dimension="cube-array"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,id:id_non_override:*] - [:type="var"] - expected: FAIL - - [:type="const"] - expected: FAIL - - [:type="override"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:binding_attributes:*] - [:stage="vertex";has_group=true;has_binding=true;resource="texture_1d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_3d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_cube"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_external"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_storage_1d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_storage_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_storage_3d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_depth_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_depth_cube"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="sampler"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="sampler_comparison"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="uniform"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=true;resource="storage"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_1d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_3d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_cube"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_external"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_storage_1d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_storage_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_storage_3d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_depth_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_depth_cube"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="sampler"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="sampler_comparison"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="uniform"] - expected: FAIL - - [:stage="vertex";has_group=true;has_binding=false;resource="storage"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_1d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_3d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_cube"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_external"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_storage_1d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_storage_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_storage_3d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_depth_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_depth_cube"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="sampler"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="sampler_comparison"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="uniform"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=true;resource="storage"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_1d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_3d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_cube"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_external"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_storage_1d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_storage_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_storage_3d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_depth_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_depth_cube"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="sampler"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="sampler_comparison"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="uniform"] - expected: FAIL - - [:stage="vertex";has_group=false;has_binding=false;resource="storage"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_1d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_3d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_cube"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_external"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_storage_1d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_storage_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_storage_3d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_depth_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_depth_cube"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="sampler"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="sampler_comparison"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="uniform"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=true;resource="storage"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_1d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_3d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_cube"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_external"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_storage_1d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_storage_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_storage_3d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_depth_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_depth_cube"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="sampler"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="sampler_comparison"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="uniform"] - expected: FAIL - - [:stage="fragment";has_group=true;has_binding=false;resource="storage"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_1d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_3d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_cube"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_external"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_storage_1d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_storage_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_storage_3d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_depth_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_depth_cube"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="sampler"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="sampler_comparison"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="uniform"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=true;resource="storage"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_1d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_3d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_cube"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_external"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_storage_1d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_storage_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_storage_3d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_depth_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_depth_cube"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="sampler"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="sampler_comparison"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="uniform"] - expected: FAIL - - [:stage="fragment";has_group=false;has_binding=false;resource="storage"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_1d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_2d_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_3d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_cube"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_cube_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_external"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_storage_1d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_storage_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_storage_3d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_depth_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_depth_cube"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="sampler"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="sampler_comparison"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="uniform"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=true;resource="storage"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_1d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_2d_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_3d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_cube"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_cube_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_external"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_storage_1d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_storage_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_storage_3d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_depth_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_depth_cube"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="sampler"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="sampler_comparison"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="uniform"] - expected: FAIL - - [:stage="compute";has_group=true;has_binding=false;resource="storage"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_1d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_2d_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_3d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_cube"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_cube_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_external"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_storage_1d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_storage_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_storage_3d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_depth_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_depth_cube"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="sampler"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="sampler_comparison"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="uniform"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=true;resource="storage"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_1d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_2d_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_3d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_cube"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_cube_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_external"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_storage_1d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_storage_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_storage_2d_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_storage_3d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_depth_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_depth_2d_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_depth_cube"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_depth_cube_array"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="texture_depth_multisampled_2d"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="sampler"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="sampler_comparison"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="uniform"] - expected: FAIL - - [:stage="compute";has_group=false;has_binding=false;resource="storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asinh:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,id:id_in_function:*] - [:id="%40id(1)"] - expected: FAIL - - [:id=""] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_const_to_f32:*] - [:fromScalarType="i32";vectorize="v1_b0"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v2_b0"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v2_b1"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v3_b0"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v3_b1"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v3_b2"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v4_b0"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v4_b1"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v4_b2"] - expected: FAIL - - [:fromScalarType="i32";vectorize="v4_b3"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v1_b0"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v2_b0"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v2_b1"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v3_b0"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v3_b1"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v3_b2"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v4_b0"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v4_b1"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v4_b2"] - expected: FAIL - - [:fromScalarType="u32";vectorize="v4_b3"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:call_arg_types_match_params:*] - expected: [OK, TIMEOUT] - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=1;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=2;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="u32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="i32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="u32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="i32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="u32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="i32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="abstract_float";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="unsigned_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="signed_int";arg2_value="float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="abstract_float";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="unsigned_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="signed_int";arg3_value="float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="abstract_float"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="unsigned_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="signed_int"] - expected: FAIL - - [:num_args=3;p1_type="f32";p2_type="f32";p3_type="f32";arg1_value="float";arg2_value="float";arg3_value="float"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,saturate:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_atomic:*] - [:target="i32"] - expected: FAIL - - [:target="A"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,round:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,degrees:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sinh:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_nonmatching_vec3:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,override:no_indirect_recursion:*] - [:target="a"] - expected: FAIL - - [:target="b"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_storage_basic:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,size:size:*] - [:attr="valid"] - expected: FAIL - - [:attr="non_align_size"] - expected: FAIL - - [:attr="i32"] - expected: FAIL - - [:attr="u32"] - expected: FAIL - - [:attr="constant"] - expected: FAIL - - [:attr="trailing_comma"] - expected: FAIL - - [:attr="hex"] - expected: FAIL - - [:attr="whitespace"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="large"] - expected: FAIL - - [:attr="misspelling"] - expected: FAIL - - [:attr="no_value"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="missing_parens"] - expected: FAIL - - [:attr="multiple_values"] - expected: FAIL - - [:attr="override"] - expected: FAIL - - [:attr="zero"] - expected: FAIL - - [:attr="negative"] - expected: FAIL - - [:attr="f32_literal"] - expected: FAIL - - [:attr="f32"] - expected: FAIL - - [:attr="duplicate"] - expected: FAIL - - [:attr="too_small"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,encoding,programmable,pipeline_bind_group_compat:twoDifferentTextureViews,compute_pass,unused:*] - [:textureType="regular"] - expected: FAIL - - [:textureType="storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,encoding,programmable,pipeline_bind_group_compat:twoDifferentTextureViews,compute_pass,used:*] - [:bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="dispatchWorkgroups";textureType="regular"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="dispatchWorkgroups";textureType="storage"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="dispatchWorkgroupsIndirect";textureType="regular"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="dispatchWorkgroupsIndirect";textureType="storage"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="dispatchWorkgroups";textureType="regular"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="dispatchWorkgroups";textureType="storage"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="dispatchWorkgroupsIndirect";textureType="regular"] - expected: FAIL - - [:bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="dispatchWorkgroupsIndirect";textureType="storage"] - expected: FAIL - - [:bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="dispatchWorkgroups";textureType="regular"] - expected: FAIL - - [:bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="dispatchWorkgroupsIndirect";textureType="regular"] - expected: FAIL - - [:bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="dispatchWorkgroups";textureType="regular"] - expected: FAIL - - [:bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="dispatchWorkgroupsIndirect";textureType="regular"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:scalar:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,saturate:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sinh:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_not_instantiable:*] - [:case="ptr"] - expected: FAIL - - [:case="privateAtomic"] - expected: FAIL - - [:case="functionAtomic"] - expected: FAIL - - [:case="uniformAtomic"] - expected: FAIL - - [:case="workgroupRTArray"] - expected: FAIL - - [:case="uniformRTArray"] - expected: FAIL - - [:case="privateRTArray"] - expected: FAIL - - [:case="functionRTArray"] - expected: FAIL - - [:case="RTArrayNotLast"] - expected: FAIL - - [:case="nestedRTArray"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,image:copy_subrect_from_2D_Canvas:*] - [:srcDoFlipYDuringCopy=true;dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,binding:binding_without_group:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan2:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sign:unsigned_integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,encoding,programmable,pipeline_bind_group_compat:twoDifferentTextureViews,render_pass,used:*] - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="draw";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexed";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexedIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="draw";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexed";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexedIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="draw";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexed";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20the%20same%20bindGroup";useCase="drawIndexedIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="draw";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexed";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="incompatible%20views%20in%20different%20bindGroups";useCase="drawIndexedIndirect";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="can%20bind%20same%20view%20in%20different%20bindGroups";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="draw";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="drawIndexed";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="drawIndirect";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";bindCase="binding%20incompatible%20bindGroups%20then%20fix";useCase="drawIndexedIndirect";textureType="regular"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:not_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:less_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_nonmatching_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_workgroup_basic:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_array_size:*] - [:target="i32"] - expected: FAIL - - [:target="A"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,texture,createTexture:unsupportedTextureFormats:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,radians:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:short_circuit_expressions:*] - [:case="or_uniform_uniform"] - expected: FAIL - - [:case="or_uniform_nonuniform"] - expected: FAIL - - [:case="or_nonuniform_uniform"] - expected: FAIL - - [:case="or_nonuniform_nonuniform"] - expected: FAIL - - [:case="or_uniform_first_nonuniform"] - expected: FAIL - - [:case="or_uniform_second_nonuniform"] - expected: FAIL - - [:case="and_uniform_uniform"] - expected: FAIL - - [:case="and_uniform_nonuniform"] - expected: FAIL - - [:case="and_nonuniform_uniform"] - expected: FAIL - - [:case="and_nonuniform_nonuniform"] - expected: FAIL - - [:case="and_uniform_first_nonuniform"] - expected: FAIL - - [:case="and_uniform_second_nonuniform"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_matrix_subtraction:matrix:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:vec4:*] - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan2:integer_argument_y:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_vector_element:*] - [:target="i32"] - expected: FAIL - - [:target="V"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_remainder:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp2:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_addition:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_var:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cos:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,const:no_indirect_recursion:*] - [:target="a"] - expected: FAIL - - [:target="b"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_workgroup_basic:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_let_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:scalar:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_addition:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_matrix_addition:matrix:*] - [:inputSource="const";cols=2;rows=2] - expected: FAIL - - [:inputSource="const";cols=2;rows=3] - expected: FAIL - - [:inputSource="const";cols=2;rows=4] - expected: FAIL - - [:inputSource="const";cols=3;rows=2] - expected: FAIL - - [:inputSource="const";cols=3;rows=3] - expected: FAIL - - [:inputSource="const";cols=3;rows=4] - expected: FAIL - - [:inputSource="const";cols=4;rows=2] - expected: FAIL - - [:inputSource="const";cols=4;rows=3] - expected: FAIL - - [:inputSource="const";cols=4;rows=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:module_const_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_parameter_matching:*] - expected: [OK, TIMEOUT] - [:decl="u32";arg="u32_literal"] - expected: FAIL - - [:decl="u32";arg="i32_literal"] - expected: FAIL - - [:decl="u32";arg="f32_literal"] - expected: FAIL - - [:decl="u32";arg="bool_literal"] - expected: FAIL - - [:decl="u32";arg="abstract_int_literal"] - expected: FAIL - - [:decl="u32";arg="abstract_float_literal"] - expected: FAIL - - [:decl="u32";arg="vec2u_constructor"] - expected: FAIL - - [:decl="u32";arg="vec2i_constructor"] - expected: FAIL - - [:decl="u32";arg="vec2f_constructor"] - expected: FAIL - - [:decl="u32";arg="vec2b_constructor"] - expected: FAIL - - [:decl="u32";arg="vec3u_constructor"] - expected: FAIL - - [:decl="u32";arg="vec3i_constructor"] - expected: FAIL - - [:decl="u32";arg="vec3f_constructor"] - expected: FAIL - - [:decl="u32";arg="vec3b_constructor"] - expected: FAIL - - [:decl="u32";arg="vec4u_constructor"] - expected: FAIL - - [:decl="u32";arg="vec4i_constructor"] - expected: FAIL - - [:decl="u32";arg="vec4f_constructor"] - expected: FAIL - - [:decl="u32";arg="vec4b_constructor"] - expected: FAIL - - [:decl="u32";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="u32";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="u32";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="u32";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="u32";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="u32";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="u32";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="u32";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="u32";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="u32";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="u32";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="u32";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="u32";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="u32";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="u32";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="u32";arg="array1_constructor"] - expected: FAIL - - [:decl="u32";arg="array2_constructor"] - expected: FAIL - - [:decl="u32";arg="array3_constructor"] - expected: FAIL - - [:decl="u32";arg="array4_constructor"] - expected: FAIL - - [:decl="u32";arg="array5_constructor"] - expected: FAIL - - [:decl="u32";arg="struct1_constructor"] - expected: FAIL - - [:decl="u32";arg="struct2_constructor"] - expected: FAIL - - [:decl="u32";arg="g_u32"] - expected: FAIL - - [:decl="u32";arg="g_i32"] - expected: FAIL - - [:decl="u32";arg="g_f32"] - expected: FAIL - - [:decl="u32";arg="g_bool"] - expected: FAIL - - [:decl="u32";arg="g_vec2"] - expected: FAIL - - [:decl="u32";arg="g_vec3"] - expected: FAIL - - [:decl="u32";arg="g_vec4"] - expected: FAIL - - [:decl="u32";arg="g_mat2x2"] - expected: FAIL - - [:decl="u32";arg="g_mat2x3"] - expected: FAIL - - [:decl="u32";arg="g_mat2x4"] - expected: FAIL - - [:decl="u32";arg="g_mat3x2"] - expected: FAIL - - [:decl="u32";arg="g_mat3x3"] - expected: FAIL - - [:decl="u32";arg="g_mat3x4"] - expected: FAIL - - [:decl="u32";arg="g_mat4x2"] - expected: FAIL - - [:decl="u32";arg="g_mat4x3"] - expected: FAIL - - [:decl="u32";arg="g_mat4x4"] - expected: FAIL - - [:decl="u32";arg="g_array1"] - expected: FAIL - - [:decl="u32";arg="g_array2"] - expected: FAIL - - [:decl="u32";arg="g_array3"] - expected: FAIL - - [:decl="u32";arg="g_array4"] - expected: FAIL - - [:decl="u32";arg="g_array5"] - expected: FAIL - - [:decl="u32";arg="g_constructible"] - expected: FAIL - - [:decl="u32";arg="g_struct_with_array"] - expected: FAIL - - [:decl="u32";arg="f_u32"] - expected: FAIL - - [:decl="u32";arg="f_i32"] - expected: FAIL - - [:decl="u32";arg="f_f32"] - expected: FAIL - - [:decl="u32";arg="f_bool"] - expected: FAIL - - [:decl="u32";arg="f_vec2"] - expected: FAIL - - [:decl="u32";arg="f_vec3"] - expected: FAIL - - [:decl="u32";arg="f_vec4"] - expected: FAIL - - [:decl="u32";arg="f_mat2x2"] - expected: FAIL - - [:decl="u32";arg="f_mat2x3"] - expected: FAIL - - [:decl="u32";arg="f_mat2x4"] - expected: FAIL - - [:decl="u32";arg="f_mat3x2"] - expected: FAIL - - [:decl="u32";arg="f_mat3x3"] - expected: FAIL - - [:decl="u32";arg="f_mat3x4"] - expected: FAIL - - [:decl="u32";arg="f_mat4x2"] - expected: FAIL - - [:decl="u32";arg="f_mat4x3"] - expected: FAIL - - [:decl="u32";arg="f_mat4x4"] - expected: FAIL - - [:decl="u32";arg="f_array1"] - expected: FAIL - - [:decl="u32";arg="f_array2"] - expected: FAIL - - [:decl="u32";arg="f_array3"] - expected: FAIL - - [:decl="u32";arg="f_array4"] - expected: FAIL - - [:decl="u32";arg="f_array5"] - expected: FAIL - - [:decl="u32";arg="f_constructible"] - expected: FAIL - - [:decl="u32";arg="f_struct_with_array"] - expected: FAIL - - [:decl="u32";arg="g_index_u32"] - expected: FAIL - - [:decl="u32";arg="g_index_i32"] - expected: FAIL - - [:decl="u32";arg="g_index_f32"] - expected: FAIL - - [:decl="u32";arg="g_index_bool"] - expected: FAIL - - [:decl="u32";arg="f_index_u32"] - expected: FAIL - - [:decl="u32";arg="f_index_i32"] - expected: FAIL - - [:decl="u32";arg="f_index_f32"] - expected: FAIL - - [:decl="u32";arg="f_index_bool"] - expected: FAIL - - [:decl="u32";arg="g_array_index_u32"] - expected: FAIL - - [:decl="u32";arg="g_array_index_i32"] - expected: FAIL - - [:decl="u32";arg="g_array_index_f32"] - expected: FAIL - - [:decl="u32";arg="g_array_index_bool"] - expected: FAIL - - [:decl="u32";arg="f_array_index_u32"] - expected: FAIL - - [:decl="u32";arg="f_array_index_i32"] - expected: FAIL - - [:decl="u32";arg="f_array_index_f32"] - expected: FAIL - - [:decl="u32";arg="f_array_index_bool"] - expected: FAIL - - [:decl="u32";arg="texture_sample"] - expected: FAIL - - [:decl="u32";arg="texture_depth"] - expected: FAIL - - [:decl="u32";arg="texture_multisampled"] - expected: FAIL - - [:decl="u32";arg="texture_storage"] - expected: FAIL - - [:decl="u32";arg="texture_external"] - expected: FAIL - - [:decl="u32";arg="sampler"] - expected: FAIL - - [:decl="u32";arg="sampler_comparison"] - expected: FAIL - - [:decl="u32";arg="ptr1"] - expected: FAIL - - [:decl="u32";arg="ptr2"] - expected: FAIL - - [:decl="u32";arg="ptr3"] - expected: FAIL - - [:decl="u32";arg="ptr4"] - expected: FAIL - - [:decl="u32";arg="ptr5"] - expected: FAIL - - [:decl="u32";arg="ptr6"] - expected: FAIL - - [:decl="u32";arg="ptr7"] - expected: FAIL - - [:decl="u32";arg="ptr8"] - expected: FAIL - - [:decl="u32";arg="ptr9"] - expected: FAIL - - [:decl="u32";arg="ptr10"] - expected: FAIL - - [:decl="u32";arg="ptr11"] - expected: FAIL - - [:decl="u32";arg="ptr12"] - expected: FAIL - - [:decl="i32";arg="u32_literal"] - expected: FAIL - - [:decl="i32";arg="i32_literal"] - expected: FAIL - - [:decl="i32";arg="f32_literal"] - expected: FAIL - - [:decl="i32";arg="bool_literal"] - expected: FAIL - - [:decl="i32";arg="abstract_int_literal"] - expected: FAIL - - [:decl="i32";arg="abstract_float_literal"] - expected: FAIL - - [:decl="i32";arg="vec2u_constructor"] - expected: FAIL - - [:decl="i32";arg="vec2i_constructor"] - expected: FAIL - - [:decl="i32";arg="vec2f_constructor"] - expected: FAIL - - [:decl="i32";arg="vec2b_constructor"] - expected: FAIL - - [:decl="i32";arg="vec3u_constructor"] - expected: FAIL - - [:decl="i32";arg="vec3i_constructor"] - expected: FAIL - - [:decl="i32";arg="vec3f_constructor"] - expected: FAIL - - [:decl="i32";arg="vec3b_constructor"] - expected: FAIL - - [:decl="i32";arg="vec4u_constructor"] - expected: FAIL - - [:decl="i32";arg="vec4i_constructor"] - expected: FAIL - - [:decl="i32";arg="vec4f_constructor"] - expected: FAIL - - [:decl="i32";arg="vec4b_constructor"] - expected: FAIL - - [:decl="i32";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="i32";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="i32";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="i32";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="i32";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="i32";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="i32";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="i32";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="i32";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="i32";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="i32";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="i32";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="i32";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="i32";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="i32";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="i32";arg="array1_constructor"] - expected: FAIL - - [:decl="i32";arg="array2_constructor"] - expected: FAIL - - [:decl="i32";arg="array3_constructor"] - expected: FAIL - - [:decl="i32";arg="array4_constructor"] - expected: FAIL - - [:decl="i32";arg="array5_constructor"] - expected: FAIL - - [:decl="i32";arg="struct1_constructor"] - expected: FAIL - - [:decl="i32";arg="struct2_constructor"] - expected: FAIL - - [:decl="i32";arg="g_u32"] - expected: FAIL - - [:decl="i32";arg="g_i32"] - expected: FAIL - - [:decl="i32";arg="g_f32"] - expected: FAIL - - [:decl="i32";arg="g_bool"] - expected: FAIL - - [:decl="i32";arg="g_vec2"] - expected: FAIL - - [:decl="i32";arg="g_vec3"] - expected: FAIL - - [:decl="i32";arg="g_vec4"] - expected: FAIL - - [:decl="i32";arg="g_mat2x2"] - expected: FAIL - - [:decl="i32";arg="g_mat2x3"] - expected: FAIL - - [:decl="i32";arg="g_mat2x4"] - expected: FAIL - - [:decl="i32";arg="g_mat3x2"] - expected: FAIL - - [:decl="i32";arg="g_mat3x3"] - expected: FAIL - - [:decl="i32";arg="g_mat3x4"] - expected: FAIL - - [:decl="i32";arg="g_mat4x2"] - expected: FAIL - - [:decl="i32";arg="g_mat4x3"] - expected: FAIL - - [:decl="i32";arg="g_mat4x4"] - expected: FAIL - - [:decl="i32";arg="g_array1"] - expected: FAIL - - [:decl="i32";arg="g_array2"] - expected: FAIL - - [:decl="i32";arg="g_array3"] - expected: FAIL - - [:decl="i32";arg="g_array4"] - expected: FAIL - - [:decl="i32";arg="g_array5"] - expected: FAIL - - [:decl="i32";arg="g_constructible"] - expected: FAIL - - [:decl="i32";arg="g_struct_with_array"] - expected: FAIL - - [:decl="i32";arg="f_u32"] - expected: FAIL - - [:decl="i32";arg="f_i32"] - expected: FAIL - - [:decl="i32";arg="f_f32"] - expected: FAIL - - [:decl="i32";arg="f_bool"] - expected: FAIL - - [:decl="i32";arg="f_vec2"] - expected: FAIL - - [:decl="i32";arg="f_vec3"] - expected: FAIL - - [:decl="i32";arg="f_vec4"] - expected: FAIL - - [:decl="i32";arg="f_mat2x2"] - expected: FAIL - - [:decl="i32";arg="f_mat2x3"] - expected: FAIL - - [:decl="i32";arg="f_mat2x4"] - expected: FAIL - - [:decl="i32";arg="f_mat3x2"] - expected: FAIL - - [:decl="i32";arg="f_mat3x3"] - expected: FAIL - - [:decl="i32";arg="f_mat3x4"] - expected: FAIL - - [:decl="i32";arg="f_mat4x2"] - expected: FAIL - - [:decl="i32";arg="f_mat4x3"] - expected: FAIL - - [:decl="i32";arg="f_mat4x4"] - expected: FAIL - - [:decl="i32";arg="f_array1"] - expected: FAIL - - [:decl="i32";arg="f_array2"] - expected: FAIL - - [:decl="i32";arg="f_array3"] - expected: FAIL - - [:decl="i32";arg="f_array4"] - expected: FAIL - - [:decl="i32";arg="f_array5"] - expected: FAIL - - [:decl="i32";arg="f_constructible"] - expected: FAIL - - [:decl="i32";arg="f_struct_with_array"] - expected: FAIL - - [:decl="i32";arg="g_index_u32"] - expected: FAIL - - [:decl="i32";arg="g_index_i32"] - expected: FAIL - - [:decl="i32";arg="g_index_f32"] - expected: FAIL - - [:decl="i32";arg="g_index_bool"] - expected: FAIL - - [:decl="i32";arg="f_index_u32"] - expected: FAIL - - [:decl="i32";arg="f_index_i32"] - expected: FAIL - - [:decl="i32";arg="f_index_f32"] - expected: FAIL - - [:decl="i32";arg="f_index_bool"] - expected: FAIL - - [:decl="i32";arg="g_array_index_u32"] - expected: FAIL - - [:decl="i32";arg="g_array_index_i32"] - expected: FAIL - - [:decl="i32";arg="g_array_index_f32"] - expected: FAIL - - [:decl="i32";arg="g_array_index_bool"] - expected: FAIL - - [:decl="i32";arg="f_array_index_u32"] - expected: FAIL - - [:decl="i32";arg="f_array_index_i32"] - expected: FAIL - - [:decl="i32";arg="f_array_index_f32"] - expected: FAIL - - [:decl="i32";arg="f_array_index_bool"] - expected: FAIL - - [:decl="i32";arg="texture_sample"] - expected: FAIL - - [:decl="i32";arg="texture_depth"] - expected: FAIL - - [:decl="i32";arg="texture_multisampled"] - expected: FAIL - - [:decl="i32";arg="texture_storage"] - expected: FAIL - - [:decl="i32";arg="texture_external"] - expected: FAIL - - [:decl="i32";arg="sampler"] - expected: FAIL - - [:decl="i32";arg="sampler_comparison"] - expected: FAIL - - [:decl="i32";arg="ptr1"] - expected: FAIL - - [:decl="i32";arg="ptr2"] - expected: FAIL - - [:decl="i32";arg="ptr3"] - expected: FAIL - - [:decl="i32";arg="ptr4"] - expected: FAIL - - [:decl="i32";arg="ptr5"] - expected: FAIL - - [:decl="i32";arg="ptr6"] - expected: FAIL - - [:decl="i32";arg="ptr7"] - expected: FAIL - - [:decl="i32";arg="ptr8"] - expected: FAIL - - [:decl="i32";arg="ptr9"] - expected: FAIL - - [:decl="i32";arg="ptr10"] - expected: FAIL - - [:decl="i32";arg="ptr11"] - expected: FAIL - - [:decl="i32";arg="ptr12"] - expected: FAIL - - [:decl="f32";arg="u32_literal"] - expected: FAIL - - [:decl="f32";arg="i32_literal"] - expected: FAIL - - [:decl="f32";arg="f32_literal"] - expected: FAIL - - [:decl="f32";arg="bool_literal"] - expected: FAIL - - [:decl="f32";arg="abstract_int_literal"] - expected: FAIL - - [:decl="f32";arg="abstract_float_literal"] - expected: FAIL - - [:decl="f32";arg="vec2u_constructor"] - expected: FAIL - - [:decl="f32";arg="vec2i_constructor"] - expected: FAIL - - [:decl="f32";arg="vec2f_constructor"] - expected: FAIL - - [:decl="f32";arg="vec2b_constructor"] - expected: FAIL - - [:decl="f32";arg="vec3u_constructor"] - expected: FAIL - - [:decl="f32";arg="vec3i_constructor"] - expected: FAIL - - [:decl="f32";arg="vec3f_constructor"] - expected: FAIL - - [:decl="f32";arg="vec3b_constructor"] - expected: FAIL - - [:decl="f32";arg="vec4u_constructor"] - expected: FAIL - - [:decl="f32";arg="vec4i_constructor"] - expected: FAIL - - [:decl="f32";arg="vec4f_constructor"] - expected: FAIL - - [:decl="f32";arg="vec4b_constructor"] - expected: FAIL - - [:decl="f32";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="f32";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="f32";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="f32";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="f32";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="f32";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="f32";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="f32";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="f32";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="f32";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="f32";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="f32";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="f32";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="f32";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="f32";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="f32";arg="array1_constructor"] - expected: FAIL - - [:decl="f32";arg="array2_constructor"] - expected: FAIL - - [:decl="f32";arg="array3_constructor"] - expected: FAIL - - [:decl="f32";arg="array4_constructor"] - expected: FAIL - - [:decl="f32";arg="array5_constructor"] - expected: FAIL - - [:decl="f32";arg="struct1_constructor"] - expected: FAIL - - [:decl="f32";arg="struct2_constructor"] - expected: FAIL - - [:decl="f32";arg="g_u32"] - expected: FAIL - - [:decl="f32";arg="g_i32"] - expected: FAIL - - [:decl="f32";arg="g_f32"] - expected: FAIL - - [:decl="f32";arg="g_bool"] - expected: FAIL - - [:decl="f32";arg="g_vec2"] - expected: FAIL - - [:decl="f32";arg="g_vec3"] - expected: FAIL - - [:decl="f32";arg="g_vec4"] - expected: FAIL - - [:decl="f32";arg="g_mat2x2"] - expected: FAIL - - [:decl="f32";arg="g_mat2x3"] - expected: FAIL - - [:decl="f32";arg="g_mat2x4"] - expected: FAIL - - [:decl="f32";arg="g_mat3x2"] - expected: FAIL - - [:decl="f32";arg="g_mat3x3"] - expected: FAIL - - [:decl="f32";arg="g_mat3x4"] - expected: FAIL - - [:decl="f32";arg="g_mat4x2"] - expected: FAIL - - [:decl="f32";arg="g_mat4x3"] - expected: FAIL - - [:decl="f32";arg="g_mat4x4"] - expected: FAIL - - [:decl="f32";arg="g_array1"] - expected: FAIL - - [:decl="f32";arg="g_array2"] - expected: FAIL - - [:decl="f32";arg="g_array3"] - expected: FAIL - - [:decl="f32";arg="g_array4"] - expected: FAIL - - [:decl="f32";arg="g_array5"] - expected: FAIL - - [:decl="f32";arg="g_constructible"] - expected: FAIL - - [:decl="f32";arg="g_struct_with_array"] - expected: FAIL - - [:decl="f32";arg="f_u32"] - expected: FAIL - - [:decl="f32";arg="f_i32"] - expected: FAIL - - [:decl="f32";arg="f_f32"] - expected: FAIL - - [:decl="f32";arg="f_bool"] - expected: FAIL - - [:decl="f32";arg="f_vec2"] - expected: FAIL - - [:decl="f32";arg="f_vec3"] - expected: FAIL - - [:decl="f32";arg="f_vec4"] - expected: FAIL - - [:decl="f32";arg="f_mat2x2"] - expected: FAIL - - [:decl="f32";arg="f_mat2x3"] - expected: FAIL - - [:decl="f32";arg="f_mat2x4"] - expected: FAIL - - [:decl="f32";arg="f_mat3x2"] - expected: FAIL - - [:decl="f32";arg="f_mat3x3"] - expected: FAIL - - [:decl="f32";arg="f_mat3x4"] - expected: FAIL - - [:decl="f32";arg="f_mat4x2"] - expected: FAIL - - [:decl="f32";arg="f_mat4x3"] - expected: FAIL - - [:decl="f32";arg="f_mat4x4"] - expected: FAIL - - [:decl="f32";arg="f_array1"] - expected: FAIL - - [:decl="f32";arg="f_array2"] - expected: FAIL - - [:decl="f32";arg="f_array3"] - expected: FAIL - - [:decl="f32";arg="f_array4"] - expected: FAIL - - [:decl="f32";arg="f_array5"] - expected: FAIL - - [:decl="f32";arg="f_constructible"] - expected: FAIL - - [:decl="f32";arg="f_struct_with_array"] - expected: FAIL - - [:decl="f32";arg="g_index_u32"] - expected: FAIL - - [:decl="f32";arg="g_index_i32"] - expected: FAIL - - [:decl="f32";arg="g_index_f32"] - expected: FAIL - - [:decl="f32";arg="g_index_bool"] - expected: FAIL - - [:decl="f32";arg="f_index_u32"] - expected: FAIL - - [:decl="f32";arg="f_index_i32"] - expected: FAIL - - [:decl="f32";arg="f_index_f32"] - expected: FAIL - - [:decl="f32";arg="f_index_bool"] - expected: FAIL - - [:decl="f32";arg="g_array_index_u32"] - expected: FAIL - - [:decl="f32";arg="g_array_index_i32"] - expected: FAIL - - [:decl="f32";arg="g_array_index_f32"] - expected: FAIL - - [:decl="f32";arg="g_array_index_bool"] - expected: FAIL - - [:decl="f32";arg="f_array_index_u32"] - expected: FAIL - - [:decl="f32";arg="f_array_index_i32"] - expected: FAIL - - [:decl="f32";arg="f_array_index_f32"] - expected: FAIL - - [:decl="f32";arg="f_array_index_bool"] - expected: FAIL - - [:decl="f32";arg="texture_sample"] - expected: FAIL - - [:decl="f32";arg="texture_depth"] - expected: FAIL - - [:decl="f32";arg="texture_multisampled"] - expected: FAIL - - [:decl="f32";arg="texture_storage"] - expected: FAIL - - [:decl="f32";arg="texture_external"] - expected: FAIL - - [:decl="f32";arg="sampler"] - expected: FAIL - - [:decl="f32";arg="sampler_comparison"] - expected: FAIL - - [:decl="f32";arg="ptr1"] - expected: FAIL - - [:decl="f32";arg="ptr2"] - expected: FAIL - - [:decl="f32";arg="ptr3"] - expected: FAIL - - [:decl="f32";arg="ptr4"] - expected: FAIL - - [:decl="f32";arg="ptr5"] - expected: FAIL - - [:decl="f32";arg="ptr6"] - expected: FAIL - - [:decl="f32";arg="ptr7"] - expected: FAIL - - [:decl="f32";arg="ptr8"] - expected: FAIL - - [:decl="f32";arg="ptr9"] - expected: FAIL - - [:decl="f32";arg="ptr10"] - expected: FAIL - - [:decl="f32";arg="ptr11"] - expected: FAIL - - [:decl="f32";arg="ptr12"] - expected: FAIL - - [:decl="bool";arg="u32_literal"] - expected: FAIL - - [:decl="bool";arg="i32_literal"] - expected: FAIL - - [:decl="bool";arg="f32_literal"] - expected: FAIL - - [:decl="bool";arg="bool_literal"] - expected: FAIL - - [:decl="bool";arg="abstract_int_literal"] - expected: FAIL - - [:decl="bool";arg="abstract_float_literal"] - expected: FAIL - - [:decl="bool";arg="vec2u_constructor"] - expected: FAIL - - [:decl="bool";arg="vec2i_constructor"] - expected: FAIL - - [:decl="bool";arg="vec2f_constructor"] - expected: FAIL - - [:decl="bool";arg="vec2b_constructor"] - expected: FAIL - - [:decl="bool";arg="vec3u_constructor"] - expected: FAIL - - [:decl="bool";arg="vec3i_constructor"] - expected: FAIL - - [:decl="bool";arg="vec3f_constructor"] - expected: FAIL - - [:decl="bool";arg="vec3b_constructor"] - expected: FAIL - - [:decl="bool";arg="vec4u_constructor"] - expected: FAIL - - [:decl="bool";arg="vec4i_constructor"] - expected: FAIL - - [:decl="bool";arg="vec4f_constructor"] - expected: FAIL - - [:decl="bool";arg="vec4b_constructor"] - expected: FAIL - - [:decl="bool";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="bool";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="bool";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="bool";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="bool";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="bool";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="bool";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="bool";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="bool";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="bool";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="bool";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="bool";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="bool";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="bool";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="bool";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="bool";arg="array1_constructor"] - expected: FAIL - - [:decl="bool";arg="array2_constructor"] - expected: FAIL - - [:decl="bool";arg="array3_constructor"] - expected: FAIL - - [:decl="bool";arg="array4_constructor"] - expected: FAIL - - [:decl="bool";arg="array5_constructor"] - expected: FAIL - - [:decl="bool";arg="struct1_constructor"] - expected: FAIL - - [:decl="bool";arg="struct2_constructor"] - expected: FAIL - - [:decl="bool";arg="g_u32"] - expected: FAIL - - [:decl="bool";arg="g_i32"] - expected: FAIL - - [:decl="bool";arg="g_f32"] - expected: FAIL - - [:decl="bool";arg="g_bool"] - expected: FAIL - - [:decl="bool";arg="g_vec2"] - expected: FAIL - - [:decl="bool";arg="g_vec3"] - expected: FAIL - - [:decl="bool";arg="g_vec4"] - expected: FAIL - - [:decl="bool";arg="g_mat2x2"] - expected: FAIL - - [:decl="bool";arg="g_mat2x3"] - expected: FAIL - - [:decl="bool";arg="g_mat2x4"] - expected: FAIL - - [:decl="bool";arg="g_mat3x2"] - expected: FAIL - - [:decl="bool";arg="g_mat3x3"] - expected: FAIL - - [:decl="bool";arg="g_mat3x4"] - expected: FAIL - - [:decl="bool";arg="g_mat4x2"] - expected: FAIL - - [:decl="bool";arg="g_mat4x3"] - expected: FAIL - - [:decl="bool";arg="g_mat4x4"] - expected: FAIL - - [:decl="bool";arg="g_array1"] - expected: FAIL - - [:decl="bool";arg="g_array2"] - expected: FAIL - - [:decl="bool";arg="g_array3"] - expected: FAIL - - [:decl="bool";arg="g_array4"] - expected: FAIL - - [:decl="bool";arg="g_array5"] - expected: FAIL - - [:decl="bool";arg="g_constructible"] - expected: FAIL - - [:decl="bool";arg="g_struct_with_array"] - expected: FAIL - - [:decl="bool";arg="f_u32"] - expected: FAIL - - [:decl="bool";arg="f_i32"] - expected: FAIL - - [:decl="bool";arg="f_f32"] - expected: FAIL - - [:decl="bool";arg="f_bool"] - expected: FAIL - - [:decl="bool";arg="f_vec2"] - expected: FAIL - - [:decl="bool";arg="f_vec3"] - expected: FAIL - - [:decl="bool";arg="f_vec4"] - expected: FAIL - - [:decl="bool";arg="f_mat2x2"] - expected: FAIL - - [:decl="bool";arg="f_mat2x3"] - expected: FAIL - - [:decl="bool";arg="f_mat2x4"] - expected: FAIL - - [:decl="bool";arg="f_mat3x2"] - expected: FAIL - - [:decl="bool";arg="f_mat3x3"] - expected: FAIL - - [:decl="bool";arg="f_mat3x4"] - expected: FAIL - - [:decl="bool";arg="f_mat4x2"] - expected: FAIL - - [:decl="bool";arg="f_mat4x3"] - expected: FAIL - - [:decl="bool";arg="f_mat4x4"] - expected: FAIL - - [:decl="bool";arg="f_array1"] - expected: FAIL - - [:decl="bool";arg="f_array2"] - expected: FAIL - - [:decl="bool";arg="f_array3"] - expected: FAIL - - [:decl="bool";arg="f_array4"] - expected: FAIL - - [:decl="bool";arg="f_array5"] - expected: FAIL - - [:decl="bool";arg="f_constructible"] - expected: FAIL - - [:decl="bool";arg="f_struct_with_array"] - expected: FAIL - - [:decl="bool";arg="g_index_u32"] - expected: FAIL - - [:decl="bool";arg="g_index_i32"] - expected: FAIL - - [:decl="bool";arg="g_index_f32"] - expected: FAIL - - [:decl="bool";arg="g_index_bool"] - expected: FAIL - - [:decl="bool";arg="f_index_u32"] - expected: FAIL - - [:decl="bool";arg="f_index_i32"] - expected: FAIL - - [:decl="bool";arg="f_index_f32"] - expected: FAIL - - [:decl="bool";arg="f_index_bool"] - expected: FAIL - - [:decl="bool";arg="g_array_index_u32"] - expected: FAIL - - [:decl="bool";arg="g_array_index_i32"] - expected: FAIL - - [:decl="bool";arg="g_array_index_f32"] - expected: FAIL - - [:decl="bool";arg="g_array_index_bool"] - expected: FAIL - - [:decl="bool";arg="f_array_index_u32"] - expected: FAIL - - [:decl="bool";arg="f_array_index_i32"] - expected: FAIL - - [:decl="bool";arg="f_array_index_f32"] - expected: FAIL - - [:decl="bool";arg="f_array_index_bool"] - expected: FAIL - - [:decl="bool";arg="texture_sample"] - expected: FAIL - - [:decl="bool";arg="texture_depth"] - expected: FAIL - - [:decl="bool";arg="texture_multisampled"] - expected: FAIL - - [:decl="bool";arg="texture_storage"] - expected: FAIL - - [:decl="bool";arg="texture_external"] - expected: FAIL - - [:decl="bool";arg="sampler"] - expected: FAIL - - [:decl="bool";arg="sampler_comparison"] - expected: FAIL - - [:decl="bool";arg="ptr1"] - expected: FAIL - - [:decl="bool";arg="ptr2"] - expected: FAIL - - [:decl="bool";arg="ptr3"] - expected: FAIL - - [:decl="bool";arg="ptr4"] - expected: FAIL - - [:decl="bool";arg="ptr5"] - expected: FAIL - - [:decl="bool";arg="ptr6"] - expected: FAIL - - [:decl="bool";arg="ptr7"] - expected: FAIL - - [:decl="bool";arg="ptr8"] - expected: FAIL - - [:decl="bool";arg="ptr9"] - expected: FAIL - - [:decl="bool";arg="ptr10"] - expected: FAIL - - [:decl="bool";arg="ptr11"] - expected: FAIL - - [:decl="bool";arg="ptr12"] - expected: FAIL - - [:decl="vec2";arg="u32_literal"] - expected: FAIL - - [:decl="vec2";arg="i32_literal"] - expected: FAIL - - [:decl="vec2";arg="f32_literal"] - expected: FAIL - - [:decl="vec2";arg="bool_literal"] - expected: FAIL - - [:decl="vec2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="vec2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="vec2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="vec2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="vec2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="vec2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="vec2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="vec2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="vec2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="vec2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="vec2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="vec2";arg="array1_constructor"] - expected: FAIL - - [:decl="vec2";arg="array2_constructor"] - expected: FAIL - - [:decl="vec2";arg="array3_constructor"] - expected: FAIL - - [:decl="vec2";arg="array4_constructor"] - expected: FAIL - - [:decl="vec2";arg="array5_constructor"] - expected: FAIL - - [:decl="vec2";arg="struct1_constructor"] - expected: FAIL - - [:decl="vec2";arg="struct2_constructor"] - expected: FAIL - - [:decl="vec2";arg="g_u32"] - expected: FAIL - - [:decl="vec2";arg="g_i32"] - expected: FAIL - - [:decl="vec2";arg="g_f32"] - expected: FAIL - - [:decl="vec2";arg="g_bool"] - expected: FAIL - - [:decl="vec2";arg="g_vec2"] - expected: FAIL - - [:decl="vec2";arg="g_vec3"] - expected: FAIL - - [:decl="vec2";arg="g_vec4"] - expected: FAIL - - [:decl="vec2";arg="g_mat2x2"] - expected: FAIL - - [:decl="vec2";arg="g_mat2x3"] - expected: FAIL - - [:decl="vec2";arg="g_mat2x4"] - expected: FAIL - - [:decl="vec2";arg="g_mat3x2"] - expected: FAIL - - [:decl="vec2";arg="g_mat3x3"] - expected: FAIL - - [:decl="vec2";arg="g_mat3x4"] - expected: FAIL - - [:decl="vec2";arg="g_mat4x2"] - expected: FAIL - - [:decl="vec2";arg="g_mat4x3"] - expected: FAIL - - [:decl="vec2";arg="g_mat4x4"] - expected: FAIL - - [:decl="vec2";arg="g_array1"] - expected: FAIL - - [:decl="vec2";arg="g_array2"] - expected: FAIL - - [:decl="vec2";arg="g_array3"] - expected: FAIL - - [:decl="vec2";arg="g_array4"] - expected: FAIL - - [:decl="vec2";arg="g_array5"] - expected: FAIL - - [:decl="vec2";arg="g_constructible"] - expected: FAIL - - [:decl="vec2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="vec2";arg="f_u32"] - expected: FAIL - - [:decl="vec2";arg="f_i32"] - expected: FAIL - - [:decl="vec2";arg="f_f32"] - expected: FAIL - - [:decl="vec2";arg="f_bool"] - expected: FAIL - - [:decl="vec2";arg="f_vec2"] - expected: FAIL - - [:decl="vec2";arg="f_vec3"] - expected: FAIL - - [:decl="vec2";arg="f_vec4"] - expected: FAIL - - [:decl="vec2";arg="f_mat2x2"] - expected: FAIL - - [:decl="vec2";arg="f_mat2x3"] - expected: FAIL - - [:decl="vec2";arg="f_mat2x4"] - expected: FAIL - - [:decl="vec2";arg="f_mat3x2"] - expected: FAIL - - [:decl="vec2";arg="f_mat3x3"] - expected: FAIL - - [:decl="vec2";arg="f_mat3x4"] - expected: FAIL - - [:decl="vec2";arg="f_mat4x2"] - expected: FAIL - - [:decl="vec2";arg="f_mat4x3"] - expected: FAIL - - [:decl="vec2";arg="f_mat4x4"] - expected: FAIL - - [:decl="vec2";arg="f_array1"] - expected: FAIL - - [:decl="vec2";arg="f_array2"] - expected: FAIL - - [:decl="vec2";arg="f_array3"] - expected: FAIL - - [:decl="vec2";arg="f_array4"] - expected: FAIL - - [:decl="vec2";arg="f_array5"] - expected: FAIL - - [:decl="vec2";arg="f_constructible"] - expected: FAIL - - [:decl="vec2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="vec2";arg="g_index_u32"] - expected: FAIL - - [:decl="vec2";arg="g_index_i32"] - expected: FAIL - - [:decl="vec2";arg="g_index_f32"] - expected: FAIL - - [:decl="vec2";arg="g_index_bool"] - expected: FAIL - - [:decl="vec2";arg="f_index_u32"] - expected: FAIL - - [:decl="vec2";arg="f_index_i32"] - expected: FAIL - - [:decl="vec2";arg="f_index_f32"] - expected: FAIL - - [:decl="vec2";arg="f_index_bool"] - expected: FAIL - - [:decl="vec2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="vec2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="vec2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="vec2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="vec2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="vec2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="vec2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="vec2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="vec2";arg="texture_sample"] - expected: FAIL - - [:decl="vec2";arg="texture_depth"] - expected: FAIL - - [:decl="vec2";arg="texture_multisampled"] - expected: FAIL - - [:decl="vec2";arg="texture_storage"] - expected: FAIL - - [:decl="vec2";arg="texture_external"] - expected: FAIL - - [:decl="vec2";arg="sampler"] - expected: FAIL - - [:decl="vec2";arg="sampler_comparison"] - expected: FAIL - - [:decl="vec2";arg="ptr1"] - expected: FAIL - - [:decl="vec2";arg="ptr2"] - expected: FAIL - - [:decl="vec2";arg="ptr3"] - expected: FAIL - - [:decl="vec2";arg="ptr4"] - expected: FAIL - - [:decl="vec2";arg="ptr5"] - expected: FAIL - - [:decl="vec2";arg="ptr6"] - expected: FAIL - - [:decl="vec2";arg="ptr7"] - expected: FAIL - - [:decl="vec2";arg="ptr8"] - expected: FAIL - - [:decl="vec2";arg="ptr9"] - expected: FAIL - - [:decl="vec2";arg="ptr10"] - expected: FAIL - - [:decl="vec2";arg="ptr11"] - expected: FAIL - - [:decl="vec2";arg="ptr12"] - expected: FAIL - - [:decl="vec3";arg="u32_literal"] - expected: FAIL - - [:decl="vec3";arg="i32_literal"] - expected: FAIL - - [:decl="vec3";arg="f32_literal"] - expected: FAIL - - [:decl="vec3";arg="bool_literal"] - expected: FAIL - - [:decl="vec3";arg="abstract_int_literal"] - expected: FAIL - - [:decl="vec3";arg="abstract_float_literal"] - expected: FAIL - - [:decl="vec3";arg="vec2u_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec2i_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec2f_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec2b_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec3u_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec3i_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec3f_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec3b_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec4u_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec4i_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec4f_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec4b_constructor"] - expected: FAIL - - [:decl="vec3";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="vec3";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="vec3";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="vec3";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="vec3";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="vec3";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="vec3";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="vec3";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="vec3";arg="array1_constructor"] - expected: FAIL - - [:decl="vec3";arg="array2_constructor"] - expected: FAIL - - [:decl="vec3";arg="array3_constructor"] - expected: FAIL - - [:decl="vec3";arg="array4_constructor"] - expected: FAIL - - [:decl="vec3";arg="array5_constructor"] - expected: FAIL - - [:decl="vec3";arg="struct1_constructor"] - expected: FAIL - - [:decl="vec3";arg="struct2_constructor"] - expected: FAIL - - [:decl="vec3";arg="g_u32"] - expected: FAIL - - [:decl="vec3";arg="g_i32"] - expected: FAIL - - [:decl="vec3";arg="g_f32"] - expected: FAIL - - [:decl="vec3";arg="g_bool"] - expected: FAIL - - [:decl="vec3";arg="g_vec2"] - expected: FAIL - - [:decl="vec3";arg="g_vec3"] - expected: FAIL - - [:decl="vec3";arg="g_vec4"] - expected: FAIL - - [:decl="vec3";arg="g_mat2x2"] - expected: FAIL - - [:decl="vec3";arg="g_mat2x3"] - expected: FAIL - - [:decl="vec3";arg="g_mat2x4"] - expected: FAIL - - [:decl="vec3";arg="g_mat3x2"] - expected: FAIL - - [:decl="vec3";arg="g_mat3x3"] - expected: FAIL - - [:decl="vec3";arg="g_mat3x4"] - expected: FAIL - - [:decl="vec3";arg="g_mat4x2"] - expected: FAIL - - [:decl="vec3";arg="g_mat4x3"] - expected: FAIL - - [:decl="vec3";arg="g_mat4x4"] - expected: FAIL - - [:decl="vec3";arg="g_array1"] - expected: FAIL - - [:decl="vec3";arg="g_array2"] - expected: FAIL - - [:decl="vec3";arg="g_array3"] - expected: FAIL - - [:decl="vec3";arg="g_array4"] - expected: FAIL - - [:decl="vec3";arg="g_array5"] - expected: FAIL - - [:decl="vec3";arg="g_constructible"] - expected: FAIL - - [:decl="vec3";arg="g_struct_with_array"] - expected: FAIL - - [:decl="vec3";arg="f_u32"] - expected: FAIL - - [:decl="vec3";arg="f_i32"] - expected: FAIL - - [:decl="vec3";arg="f_f32"] - expected: FAIL - - [:decl="vec3";arg="f_bool"] - expected: FAIL - - [:decl="vec3";arg="f_vec2"] - expected: FAIL - - [:decl="vec3";arg="f_vec3"] - expected: FAIL - - [:decl="vec3";arg="f_vec4"] - expected: FAIL - - [:decl="vec3";arg="f_mat2x2"] - expected: FAIL - - [:decl="vec3";arg="f_mat2x3"] - expected: FAIL - - [:decl="vec3";arg="f_mat2x4"] - expected: FAIL - - [:decl="vec3";arg="f_mat3x2"] - expected: FAIL - - [:decl="vec3";arg="f_mat3x3"] - expected: FAIL - - [:decl="vec3";arg="f_mat3x4"] - expected: FAIL - - [:decl="vec3";arg="f_mat4x2"] - expected: FAIL - - [:decl="vec3";arg="f_mat4x3"] - expected: FAIL - - [:decl="vec3";arg="f_mat4x4"] - expected: FAIL - - [:decl="vec3";arg="f_array1"] - expected: FAIL - - [:decl="vec3";arg="f_array2"] - expected: FAIL - - [:decl="vec3";arg="f_array3"] - expected: FAIL - - [:decl="vec3";arg="f_array4"] - expected: FAIL - - [:decl="vec3";arg="f_array5"] - expected: FAIL - - [:decl="vec3";arg="f_constructible"] - expected: FAIL - - [:decl="vec3";arg="f_struct_with_array"] - expected: FAIL - - [:decl="vec3";arg="g_index_u32"] - expected: FAIL - - [:decl="vec3";arg="g_index_i32"] - expected: FAIL - - [:decl="vec3";arg="g_index_f32"] - expected: FAIL - - [:decl="vec3";arg="g_index_bool"] - expected: FAIL - - [:decl="vec3";arg="f_index_u32"] - expected: FAIL - - [:decl="vec3";arg="f_index_i32"] - expected: FAIL - - [:decl="vec3";arg="f_index_f32"] - expected: FAIL - - [:decl="vec3";arg="f_index_bool"] - expected: FAIL - - [:decl="vec3";arg="g_array_index_u32"] - expected: FAIL - - [:decl="vec3";arg="g_array_index_i32"] - expected: FAIL - - [:decl="vec3";arg="g_array_index_f32"] - expected: FAIL - - [:decl="vec3";arg="g_array_index_bool"] - expected: FAIL - - [:decl="vec3";arg="f_array_index_u32"] - expected: FAIL - - [:decl="vec3";arg="f_array_index_i32"] - expected: FAIL - - [:decl="vec3";arg="f_array_index_f32"] - expected: FAIL - - [:decl="vec3";arg="f_array_index_bool"] - expected: FAIL - - [:decl="vec3";arg="texture_sample"] - expected: FAIL - - [:decl="vec3";arg="texture_depth"] - expected: FAIL - - [:decl="vec3";arg="texture_multisampled"] - expected: FAIL - - [:decl="vec3";arg="texture_storage"] - expected: FAIL - - [:decl="vec3";arg="texture_external"] - expected: FAIL - - [:decl="vec3";arg="sampler"] - expected: FAIL - - [:decl="vec3";arg="sampler_comparison"] - expected: FAIL - - [:decl="vec3";arg="ptr1"] - expected: FAIL - - [:decl="vec3";arg="ptr2"] - expected: FAIL - - [:decl="vec3";arg="ptr3"] - expected: FAIL - - [:decl="vec3";arg="ptr4"] - expected: FAIL - - [:decl="vec3";arg="ptr5"] - expected: FAIL - - [:decl="vec3";arg="ptr6"] - expected: FAIL - - [:decl="vec3";arg="ptr7"] - expected: FAIL - - [:decl="vec3";arg="ptr8"] - expected: FAIL - - [:decl="vec3";arg="ptr9"] - expected: FAIL - - [:decl="vec3";arg="ptr10"] - expected: FAIL - - [:decl="vec3";arg="ptr11"] - expected: FAIL - - [:decl="vec3";arg="ptr12"] - expected: FAIL - - [:decl="vec4";arg="u32_literal"] - expected: FAIL - - [:decl="vec4";arg="i32_literal"] - expected: FAIL - - [:decl="vec4";arg="f32_literal"] - expected: FAIL - - [:decl="vec4";arg="bool_literal"] - expected: FAIL - - [:decl="vec4";arg="abstract_int_literal"] - expected: FAIL - - [:decl="vec4";arg="abstract_float_literal"] - expected: FAIL - - [:decl="vec4";arg="vec2u_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec2i_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec2f_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec2b_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec3u_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec3i_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec3f_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec3b_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec4u_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec4i_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec4f_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec4b_constructor"] - expected: FAIL - - [:decl="vec4";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="vec4";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="vec4";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="vec4";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="vec4";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="vec4";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="vec4";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="vec4";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="vec4";arg="array1_constructor"] - expected: FAIL - - [:decl="vec4";arg="array2_constructor"] - expected: FAIL - - [:decl="vec4";arg="array3_constructor"] - expected: FAIL - - [:decl="vec4";arg="array4_constructor"] - expected: FAIL - - [:decl="vec4";arg="array5_constructor"] - expected: FAIL - - [:decl="vec4";arg="struct1_constructor"] - expected: FAIL - - [:decl="vec4";arg="struct2_constructor"] - expected: FAIL - - [:decl="vec4";arg="g_u32"] - expected: FAIL - - [:decl="vec4";arg="g_i32"] - expected: FAIL - - [:decl="vec4";arg="g_f32"] - expected: FAIL - - [:decl="vec4";arg="g_bool"] - expected: FAIL - - [:decl="vec4";arg="g_vec2"] - expected: FAIL - - [:decl="vec4";arg="g_vec3"] - expected: FAIL - - [:decl="vec4";arg="g_vec4"] - expected: FAIL - - [:decl="vec4";arg="g_mat2x2"] - expected: FAIL - - [:decl="vec4";arg="g_mat2x3"] - expected: FAIL - - [:decl="vec4";arg="g_mat2x4"] - expected: FAIL - - [:decl="vec4";arg="g_mat3x2"] - expected: FAIL - - [:decl="vec4";arg="g_mat3x3"] - expected: FAIL - - [:decl="vec4";arg="g_mat3x4"] - expected: FAIL - - [:decl="vec4";arg="g_mat4x2"] - expected: FAIL - - [:decl="vec4";arg="g_mat4x3"] - expected: FAIL - - [:decl="vec4";arg="g_mat4x4"] - expected: FAIL - - [:decl="vec4";arg="g_array1"] - expected: FAIL - - [:decl="vec4";arg="g_array2"] - expected: FAIL - - [:decl="vec4";arg="g_array3"] - expected: FAIL - - [:decl="vec4";arg="g_array4"] - expected: FAIL - - [:decl="vec4";arg="g_array5"] - expected: FAIL - - [:decl="vec4";arg="g_constructible"] - expected: FAIL - - [:decl="vec4";arg="g_struct_with_array"] - expected: FAIL - - [:decl="vec4";arg="f_u32"] - expected: FAIL - - [:decl="vec4";arg="f_i32"] - expected: FAIL - - [:decl="vec4";arg="f_f32"] - expected: FAIL - - [:decl="vec4";arg="f_bool"] - expected: FAIL - - [:decl="vec4";arg="f_vec2"] - expected: FAIL - - [:decl="vec4";arg="f_vec3"] - expected: FAIL - - [:decl="vec4";arg="f_vec4"] - expected: FAIL - - [:decl="vec4";arg="f_mat2x2"] - expected: FAIL - - [:decl="vec4";arg="f_mat2x3"] - expected: FAIL - - [:decl="vec4";arg="f_mat2x4"] - expected: FAIL - - [:decl="vec4";arg="f_mat3x2"] - expected: FAIL - - [:decl="vec4";arg="f_mat3x3"] - expected: FAIL - - [:decl="vec4";arg="f_mat3x4"] - expected: FAIL - - [:decl="vec4";arg="f_mat4x2"] - expected: FAIL - - [:decl="vec4";arg="f_mat4x3"] - expected: FAIL - - [:decl="vec4";arg="f_mat4x4"] - expected: FAIL - - [:decl="vec4";arg="f_array1"] - expected: FAIL - - [:decl="vec4";arg="f_array2"] - expected: FAIL - - [:decl="vec4";arg="f_array3"] - expected: FAIL - - [:decl="vec4";arg="f_array4"] - expected: FAIL - - [:decl="vec4";arg="f_array5"] - expected: FAIL - - [:decl="vec4";arg="f_constructible"] - expected: FAIL - - [:decl="vec4";arg="f_struct_with_array"] - expected: FAIL - - [:decl="vec4";arg="g_index_u32"] - expected: FAIL - - [:decl="vec4";arg="g_index_i32"] - expected: FAIL - - [:decl="vec4";arg="g_index_f32"] - expected: FAIL - - [:decl="vec4";arg="g_index_bool"] - expected: FAIL - - [:decl="vec4";arg="f_index_u32"] - expected: FAIL - - [:decl="vec4";arg="f_index_i32"] - expected: FAIL - - [:decl="vec4";arg="f_index_f32"] - expected: FAIL - - [:decl="vec4";arg="f_index_bool"] - expected: FAIL - - [:decl="vec4";arg="g_array_index_u32"] - expected: FAIL - - [:decl="vec4";arg="g_array_index_i32"] - expected: FAIL - - [:decl="vec4";arg="g_array_index_f32"] - expected: FAIL - - [:decl="vec4";arg="g_array_index_bool"] - expected: FAIL - - [:decl="vec4";arg="f_array_index_u32"] - expected: FAIL - - [:decl="vec4";arg="f_array_index_i32"] - expected: FAIL - - [:decl="vec4";arg="f_array_index_f32"] - expected: FAIL - - [:decl="vec4";arg="f_array_index_bool"] - expected: FAIL - - [:decl="vec4";arg="texture_sample"] - expected: FAIL - - [:decl="vec4";arg="texture_depth"] - expected: FAIL - - [:decl="vec4";arg="texture_multisampled"] - expected: FAIL - - [:decl="vec4";arg="texture_storage"] - expected: FAIL - - [:decl="vec4";arg="texture_external"] - expected: FAIL - - [:decl="vec4";arg="sampler"] - expected: FAIL - - [:decl="vec4";arg="sampler_comparison"] - expected: FAIL - - [:decl="vec4";arg="ptr1"] - expected: FAIL - - [:decl="vec4";arg="ptr2"] - expected: FAIL - - [:decl="vec4";arg="ptr3"] - expected: FAIL - - [:decl="vec4";arg="ptr4"] - expected: FAIL - - [:decl="vec4";arg="ptr5"] - expected: FAIL - - [:decl="vec4";arg="ptr6"] - expected: FAIL - - [:decl="vec4";arg="ptr7"] - expected: FAIL - - [:decl="vec4";arg="ptr8"] - expected: FAIL - - [:decl="vec4";arg="ptr9"] - expected: FAIL - - [:decl="vec4";arg="ptr10"] - expected: FAIL - - [:decl="vec4";arg="ptr11"] - expected: FAIL - - [:decl="vec4";arg="ptr12"] - expected: FAIL - - [:decl="mat2x2";arg="u32_literal"] - expected: FAIL - - [:decl="mat2x2";arg="i32_literal"] - expected: FAIL - - [:decl="mat2x2";arg="f32_literal"] - expected: FAIL - - [:decl="mat2x2";arg="bool_literal"] - expected: FAIL - - [:decl="mat2x2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat2x2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat2x2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat2x2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat2x2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat2x2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat2x2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat2x2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat2x2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="array1_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="array2_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="array3_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="array4_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="array5_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat2x2";arg="g_u32"] - expected: FAIL - - [:decl="mat2x2";arg="g_i32"] - expected: FAIL - - [:decl="mat2x2";arg="g_f32"] - expected: FAIL - - [:decl="mat2x2";arg="g_bool"] - expected: FAIL - - [:decl="mat2x2";arg="g_vec2"] - expected: FAIL - - [:decl="mat2x2";arg="g_vec3"] - expected: FAIL - - [:decl="mat2x2";arg="g_vec4"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat2x2";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat2x2";arg="g_array1"] - expected: FAIL - - [:decl="mat2x2";arg="g_array2"] - expected: FAIL - - [:decl="mat2x2";arg="g_array3"] - expected: FAIL - - [:decl="mat2x2";arg="g_array4"] - expected: FAIL - - [:decl="mat2x2";arg="g_array5"] - expected: FAIL - - [:decl="mat2x2";arg="g_constructible"] - expected: FAIL - - [:decl="mat2x2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat2x2";arg="f_u32"] - expected: FAIL - - [:decl="mat2x2";arg="f_i32"] - expected: FAIL - - [:decl="mat2x2";arg="f_f32"] - expected: FAIL - - [:decl="mat2x2";arg="f_bool"] - expected: FAIL - - [:decl="mat2x2";arg="f_vec2"] - expected: FAIL - - [:decl="mat2x2";arg="f_vec3"] - expected: FAIL - - [:decl="mat2x2";arg="f_vec4"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat2x2";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat2x2";arg="f_array1"] - expected: FAIL - - [:decl="mat2x2";arg="f_array2"] - expected: FAIL - - [:decl="mat2x2";arg="f_array3"] - expected: FAIL - - [:decl="mat2x2";arg="f_array4"] - expected: FAIL - - [:decl="mat2x2";arg="f_array5"] - expected: FAIL - - [:decl="mat2x2";arg="f_constructible"] - expected: FAIL - - [:decl="mat2x2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat2x2";arg="g_index_u32"] - expected: FAIL - - [:decl="mat2x2";arg="g_index_i32"] - expected: FAIL - - [:decl="mat2x2";arg="g_index_f32"] - expected: FAIL - - [:decl="mat2x2";arg="g_index_bool"] - expected: FAIL - - [:decl="mat2x2";arg="f_index_u32"] - expected: FAIL - - [:decl="mat2x2";arg="f_index_i32"] - expected: FAIL - - [:decl="mat2x2";arg="f_index_f32"] - expected: FAIL - - [:decl="mat2x2";arg="f_index_bool"] - expected: FAIL - - [:decl="mat2x2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat2x2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat2x2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat2x2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat2x2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat2x2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat2x2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat2x2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat2x2";arg="texture_sample"] - expected: FAIL - - [:decl="mat2x2";arg="texture_depth"] - expected: FAIL - - [:decl="mat2x2";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat2x2";arg="texture_storage"] - expected: FAIL - - [:decl="mat2x2";arg="texture_external"] - expected: FAIL - - [:decl="mat2x2";arg="sampler"] - expected: FAIL - - [:decl="mat2x2";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat2x2";arg="ptr1"] - expected: FAIL - - [:decl="mat2x2";arg="ptr2"] - expected: FAIL - - [:decl="mat2x2";arg="ptr3"] - expected: FAIL - - [:decl="mat2x2";arg="ptr4"] - expected: FAIL - - [:decl="mat2x2";arg="ptr5"] - expected: FAIL - - [:decl="mat2x2";arg="ptr6"] - expected: FAIL - - [:decl="mat2x2";arg="ptr7"] - expected: FAIL - - [:decl="mat2x2";arg="ptr8"] - expected: FAIL - - [:decl="mat2x2";arg="ptr9"] - expected: FAIL - - [:decl="mat2x2";arg="ptr10"] - expected: FAIL - - [:decl="mat2x2";arg="ptr11"] - expected: FAIL - - [:decl="mat2x2";arg="ptr12"] - expected: FAIL - - [:decl="mat2x3";arg="u32_literal"] - expected: FAIL - - [:decl="mat2x3";arg="i32_literal"] - expected: FAIL - - [:decl="mat2x3";arg="f32_literal"] - expected: FAIL - - [:decl="mat2x3";arg="bool_literal"] - expected: FAIL - - [:decl="mat2x3";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat2x3";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat2x3";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat2x3";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat2x3";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat2x3";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat2x3";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat2x3";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat2x3";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="array1_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="array2_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="array3_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="array4_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="array5_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat2x3";arg="g_u32"] - expected: FAIL - - [:decl="mat2x3";arg="g_i32"] - expected: FAIL - - [:decl="mat2x3";arg="g_f32"] - expected: FAIL - - [:decl="mat2x3";arg="g_bool"] - expected: FAIL - - [:decl="mat2x3";arg="g_vec2"] - expected: FAIL - - [:decl="mat2x3";arg="g_vec3"] - expected: FAIL - - [:decl="mat2x3";arg="g_vec4"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat2x3";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat2x3";arg="g_array1"] - expected: FAIL - - [:decl="mat2x3";arg="g_array2"] - expected: FAIL - - [:decl="mat2x3";arg="g_array3"] - expected: FAIL - - [:decl="mat2x3";arg="g_array4"] - expected: FAIL - - [:decl="mat2x3";arg="g_array5"] - expected: FAIL - - [:decl="mat2x3";arg="g_constructible"] - expected: FAIL - - [:decl="mat2x3";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat2x3";arg="f_u32"] - expected: FAIL - - [:decl="mat2x3";arg="f_i32"] - expected: FAIL - - [:decl="mat2x3";arg="f_f32"] - expected: FAIL - - [:decl="mat2x3";arg="f_bool"] - expected: FAIL - - [:decl="mat2x3";arg="f_vec2"] - expected: FAIL - - [:decl="mat2x3";arg="f_vec3"] - expected: FAIL - - [:decl="mat2x3";arg="f_vec4"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat2x3";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat2x3";arg="f_array1"] - expected: FAIL - - [:decl="mat2x3";arg="f_array2"] - expected: FAIL - - [:decl="mat2x3";arg="f_array3"] - expected: FAIL - - [:decl="mat2x3";arg="f_array4"] - expected: FAIL - - [:decl="mat2x3";arg="f_array5"] - expected: FAIL - - [:decl="mat2x3";arg="f_constructible"] - expected: FAIL - - [:decl="mat2x3";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat2x3";arg="g_index_u32"] - expected: FAIL - - [:decl="mat2x3";arg="g_index_i32"] - expected: FAIL - - [:decl="mat2x3";arg="g_index_f32"] - expected: FAIL - - [:decl="mat2x3";arg="g_index_bool"] - expected: FAIL - - [:decl="mat2x3";arg="f_index_u32"] - expected: FAIL - - [:decl="mat2x3";arg="f_index_i32"] - expected: FAIL - - [:decl="mat2x3";arg="f_index_f32"] - expected: FAIL - - [:decl="mat2x3";arg="f_index_bool"] - expected: FAIL - - [:decl="mat2x3";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat2x3";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat2x3";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat2x3";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat2x3";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat2x3";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat2x3";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat2x3";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat2x3";arg="texture_sample"] - expected: FAIL - - [:decl="mat2x3";arg="texture_depth"] - expected: FAIL - - [:decl="mat2x3";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat2x3";arg="texture_storage"] - expected: FAIL - - [:decl="mat2x3";arg="texture_external"] - expected: FAIL - - [:decl="mat2x3";arg="sampler"] - expected: FAIL - - [:decl="mat2x3";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat2x3";arg="ptr1"] - expected: FAIL - - [:decl="mat2x3";arg="ptr2"] - expected: FAIL - - [:decl="mat2x3";arg="ptr3"] - expected: FAIL - - [:decl="mat2x3";arg="ptr4"] - expected: FAIL - - [:decl="mat2x3";arg="ptr5"] - expected: FAIL - - [:decl="mat2x3";arg="ptr6"] - expected: FAIL - - [:decl="mat2x3";arg="ptr7"] - expected: FAIL - - [:decl="mat2x3";arg="ptr8"] - expected: FAIL - - [:decl="mat2x3";arg="ptr9"] - expected: FAIL - - [:decl="mat2x3";arg="ptr10"] - expected: FAIL - - [:decl="mat2x3";arg="ptr11"] - expected: FAIL - - [:decl="mat2x3";arg="ptr12"] - expected: FAIL - - [:decl="mat2x4";arg="u32_literal"] - expected: FAIL - - [:decl="mat2x4";arg="i32_literal"] - expected: FAIL - - [:decl="mat2x4";arg="f32_literal"] - expected: FAIL - - [:decl="mat2x4";arg="bool_literal"] - expected: FAIL - - [:decl="mat2x4";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat2x4";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat2x4";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat2x4";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat2x4";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat2x4";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat2x4";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat2x4";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat2x4";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="array1_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="array2_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="array3_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="array4_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="array5_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat2x4";arg="g_u32"] - expected: FAIL - - [:decl="mat2x4";arg="g_i32"] - expected: FAIL - - [:decl="mat2x4";arg="g_f32"] - expected: FAIL - - [:decl="mat2x4";arg="g_bool"] - expected: FAIL - - [:decl="mat2x4";arg="g_vec2"] - expected: FAIL - - [:decl="mat2x4";arg="g_vec3"] - expected: FAIL - - [:decl="mat2x4";arg="g_vec4"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat2x4";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat2x4";arg="g_array1"] - expected: FAIL - - [:decl="mat2x4";arg="g_array2"] - expected: FAIL - - [:decl="mat2x4";arg="g_array3"] - expected: FAIL - - [:decl="mat2x4";arg="g_array4"] - expected: FAIL - - [:decl="mat2x4";arg="g_array5"] - expected: FAIL - - [:decl="mat2x4";arg="g_constructible"] - expected: FAIL - - [:decl="mat2x4";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat2x4";arg="f_u32"] - expected: FAIL - - [:decl="mat2x4";arg="f_i32"] - expected: FAIL - - [:decl="mat2x4";arg="f_f32"] - expected: FAIL - - [:decl="mat2x4";arg="f_bool"] - expected: FAIL - - [:decl="mat2x4";arg="f_vec2"] - expected: FAIL - - [:decl="mat2x4";arg="f_vec3"] - expected: FAIL - - [:decl="mat2x4";arg="f_vec4"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat2x4";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat2x4";arg="f_array1"] - expected: FAIL - - [:decl="mat2x4";arg="f_array2"] - expected: FAIL - - [:decl="mat2x4";arg="f_array3"] - expected: FAIL - - [:decl="mat2x4";arg="f_array4"] - expected: FAIL - - [:decl="mat2x4";arg="f_array5"] - expected: FAIL - - [:decl="mat2x4";arg="f_constructible"] - expected: FAIL - - [:decl="mat2x4";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat2x4";arg="g_index_u32"] - expected: FAIL - - [:decl="mat2x4";arg="g_index_i32"] - expected: FAIL - - [:decl="mat2x4";arg="g_index_f32"] - expected: FAIL - - [:decl="mat2x4";arg="g_index_bool"] - expected: FAIL - - [:decl="mat2x4";arg="f_index_u32"] - expected: FAIL - - [:decl="mat2x4";arg="f_index_i32"] - expected: FAIL - - [:decl="mat2x4";arg="f_index_f32"] - expected: FAIL - - [:decl="mat2x4";arg="f_index_bool"] - expected: FAIL - - [:decl="mat2x4";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat2x4";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat2x4";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat2x4";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat2x4";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat2x4";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat2x4";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat2x4";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat2x4";arg="texture_sample"] - expected: FAIL - - [:decl="mat2x4";arg="texture_depth"] - expected: FAIL - - [:decl="mat2x4";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat2x4";arg="texture_storage"] - expected: FAIL - - [:decl="mat2x4";arg="texture_external"] - expected: FAIL - - [:decl="mat2x4";arg="sampler"] - expected: FAIL - - [:decl="mat2x4";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat2x4";arg="ptr1"] - expected: FAIL - - [:decl="mat2x4";arg="ptr2"] - expected: FAIL - - [:decl="mat2x4";arg="ptr3"] - expected: FAIL - - [:decl="mat2x4";arg="ptr4"] - expected: FAIL - - [:decl="mat2x4";arg="ptr5"] - expected: FAIL - - [:decl="mat2x4";arg="ptr6"] - expected: FAIL - - [:decl="mat2x4";arg="ptr7"] - expected: FAIL - - [:decl="mat2x4";arg="ptr8"] - expected: FAIL - - [:decl="mat2x4";arg="ptr9"] - expected: FAIL - - [:decl="mat2x4";arg="ptr10"] - expected: FAIL - - [:decl="mat2x4";arg="ptr11"] - expected: FAIL - - [:decl="mat2x4";arg="ptr12"] - expected: FAIL - - [:decl="mat3x2";arg="u32_literal"] - expected: FAIL - - [:decl="mat3x2";arg="i32_literal"] - expected: FAIL - - [:decl="mat3x2";arg="f32_literal"] - expected: FAIL - - [:decl="mat3x2";arg="bool_literal"] - expected: FAIL - - [:decl="mat3x2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat3x2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat3x2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat3x2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat3x2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat3x2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat3x2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat3x2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat3x2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="array1_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="array2_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="array3_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="array4_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="array5_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat3x2";arg="g_u32"] - expected: FAIL - - [:decl="mat3x2";arg="g_i32"] - expected: FAIL - - [:decl="mat3x2";arg="g_f32"] - expected: FAIL - - [:decl="mat3x2";arg="g_bool"] - expected: FAIL - - [:decl="mat3x2";arg="g_vec2"] - expected: FAIL - - [:decl="mat3x2";arg="g_vec3"] - expected: FAIL - - [:decl="mat3x2";arg="g_vec4"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat3x2";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat3x2";arg="g_array1"] - expected: FAIL - - [:decl="mat3x2";arg="g_array2"] - expected: FAIL - - [:decl="mat3x2";arg="g_array3"] - expected: FAIL - - [:decl="mat3x2";arg="g_array4"] - expected: FAIL - - [:decl="mat3x2";arg="g_array5"] - expected: FAIL - - [:decl="mat3x2";arg="g_constructible"] - expected: FAIL - - [:decl="mat3x2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat3x2";arg="f_u32"] - expected: FAIL - - [:decl="mat3x2";arg="f_i32"] - expected: FAIL - - [:decl="mat3x2";arg="f_f32"] - expected: FAIL - - [:decl="mat3x2";arg="f_bool"] - expected: FAIL - - [:decl="mat3x2";arg="f_vec2"] - expected: FAIL - - [:decl="mat3x2";arg="f_vec3"] - expected: FAIL - - [:decl="mat3x2";arg="f_vec4"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat3x2";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat3x2";arg="f_array1"] - expected: FAIL - - [:decl="mat3x2";arg="f_array2"] - expected: FAIL - - [:decl="mat3x2";arg="f_array3"] - expected: FAIL - - [:decl="mat3x2";arg="f_array4"] - expected: FAIL - - [:decl="mat3x2";arg="f_array5"] - expected: FAIL - - [:decl="mat3x2";arg="f_constructible"] - expected: FAIL - - [:decl="mat3x2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat3x2";arg="g_index_u32"] - expected: FAIL - - [:decl="mat3x2";arg="g_index_i32"] - expected: FAIL - - [:decl="mat3x2";arg="g_index_f32"] - expected: FAIL - - [:decl="mat3x2";arg="g_index_bool"] - expected: FAIL - - [:decl="mat3x2";arg="f_index_u32"] - expected: FAIL - - [:decl="mat3x2";arg="f_index_i32"] - expected: FAIL - - [:decl="mat3x2";arg="f_index_f32"] - expected: FAIL - - [:decl="mat3x2";arg="f_index_bool"] - expected: FAIL - - [:decl="mat3x2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat3x2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat3x2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat3x2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat3x2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat3x2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat3x2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat3x2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat3x2";arg="texture_sample"] - expected: FAIL - - [:decl="mat3x2";arg="texture_depth"] - expected: FAIL - - [:decl="mat3x2";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat3x2";arg="texture_storage"] - expected: FAIL - - [:decl="mat3x2";arg="texture_external"] - expected: FAIL - - [:decl="mat3x2";arg="sampler"] - expected: FAIL - - [:decl="mat3x2";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat3x2";arg="ptr1"] - expected: FAIL - - [:decl="mat3x2";arg="ptr2"] - expected: FAIL - - [:decl="mat3x2";arg="ptr3"] - expected: FAIL - - [:decl="mat3x2";arg="ptr4"] - expected: FAIL - - [:decl="mat3x2";arg="ptr5"] - expected: FAIL - - [:decl="mat3x2";arg="ptr6"] - expected: FAIL - - [:decl="mat3x2";arg="ptr7"] - expected: FAIL - - [:decl="mat3x2";arg="ptr8"] - expected: FAIL - - [:decl="mat3x2";arg="ptr9"] - expected: FAIL - - [:decl="mat3x2";arg="ptr10"] - expected: FAIL - - [:decl="mat3x2";arg="ptr11"] - expected: FAIL - - [:decl="mat3x2";arg="ptr12"] - expected: FAIL - - [:decl="mat3x3";arg="u32_literal"] - expected: FAIL - - [:decl="mat3x3";arg="i32_literal"] - expected: FAIL - - [:decl="mat3x3";arg="f32_literal"] - expected: FAIL - - [:decl="mat3x3";arg="bool_literal"] - expected: FAIL - - [:decl="mat3x3";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat3x3";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat3x3";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat3x3";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat3x3";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat3x3";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat3x3";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat3x3";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat3x3";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="array1_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="array2_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="array3_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="array4_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="array5_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat3x3";arg="g_u32"] - expected: FAIL - - [:decl="mat3x3";arg="g_i32"] - expected: FAIL - - [:decl="mat3x3";arg="g_f32"] - expected: FAIL - - [:decl="mat3x3";arg="g_bool"] - expected: FAIL - - [:decl="mat3x3";arg="g_vec2"] - expected: FAIL - - [:decl="mat3x3";arg="g_vec3"] - expected: FAIL - - [:decl="mat3x3";arg="g_vec4"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat3x3";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat3x3";arg="g_array1"] - expected: FAIL - - [:decl="mat3x3";arg="g_array2"] - expected: FAIL - - [:decl="mat3x3";arg="g_array3"] - expected: FAIL - - [:decl="mat3x3";arg="g_array4"] - expected: FAIL - - [:decl="mat3x3";arg="g_array5"] - expected: FAIL - - [:decl="mat3x3";arg="g_constructible"] - expected: FAIL - - [:decl="mat3x3";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat3x3";arg="f_u32"] - expected: FAIL - - [:decl="mat3x3";arg="f_i32"] - expected: FAIL - - [:decl="mat3x3";arg="f_f32"] - expected: FAIL - - [:decl="mat3x3";arg="f_bool"] - expected: FAIL - - [:decl="mat3x3";arg="f_vec2"] - expected: FAIL - - [:decl="mat3x3";arg="f_vec3"] - expected: FAIL - - [:decl="mat3x3";arg="f_vec4"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat3x3";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat3x3";arg="f_array1"] - expected: FAIL - - [:decl="mat3x3";arg="f_array2"] - expected: FAIL - - [:decl="mat3x3";arg="f_array3"] - expected: FAIL - - [:decl="mat3x3";arg="f_array4"] - expected: FAIL - - [:decl="mat3x3";arg="f_array5"] - expected: FAIL - - [:decl="mat3x3";arg="f_constructible"] - expected: FAIL - - [:decl="mat3x3";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat3x3";arg="g_index_u32"] - expected: FAIL - - [:decl="mat3x3";arg="g_index_i32"] - expected: FAIL - - [:decl="mat3x3";arg="g_index_f32"] - expected: FAIL - - [:decl="mat3x3";arg="g_index_bool"] - expected: FAIL - - [:decl="mat3x3";arg="f_index_u32"] - expected: FAIL - - [:decl="mat3x3";arg="f_index_i32"] - expected: FAIL - - [:decl="mat3x3";arg="f_index_f32"] - expected: FAIL - - [:decl="mat3x3";arg="f_index_bool"] - expected: FAIL - - [:decl="mat3x3";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat3x3";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat3x3";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat3x3";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat3x3";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat3x3";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat3x3";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat3x3";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat3x3";arg="texture_sample"] - expected: FAIL - - [:decl="mat3x3";arg="texture_depth"] - expected: FAIL - - [:decl="mat3x3";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat3x3";arg="texture_storage"] - expected: FAIL - - [:decl="mat3x3";arg="texture_external"] - expected: FAIL - - [:decl="mat3x3";arg="sampler"] - expected: FAIL - - [:decl="mat3x3";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat3x3";arg="ptr1"] - expected: FAIL - - [:decl="mat3x3";arg="ptr2"] - expected: FAIL - - [:decl="mat3x3";arg="ptr3"] - expected: FAIL - - [:decl="mat3x3";arg="ptr4"] - expected: FAIL - - [:decl="mat3x3";arg="ptr5"] - expected: FAIL - - [:decl="mat3x3";arg="ptr6"] - expected: FAIL - - [:decl="mat3x3";arg="ptr7"] - expected: FAIL - - [:decl="mat3x3";arg="ptr8"] - expected: FAIL - - [:decl="mat3x3";arg="ptr9"] - expected: FAIL - - [:decl="mat3x3";arg="ptr10"] - expected: FAIL - - [:decl="mat3x3";arg="ptr11"] - expected: FAIL - - [:decl="mat3x3";arg="ptr12"] - expected: FAIL - - [:decl="mat3x4";arg="u32_literal"] - expected: FAIL - - [:decl="mat3x4";arg="i32_literal"] - expected: FAIL - - [:decl="mat3x4";arg="f32_literal"] - expected: FAIL - - [:decl="mat3x4";arg="bool_literal"] - expected: FAIL - - [:decl="mat3x4";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat3x4";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat3x4";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat3x4";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat3x4";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat3x4";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat3x4";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat3x4";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat3x4";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="array1_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="array2_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="array3_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="array4_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="array5_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat3x4";arg="g_u32"] - expected: FAIL - - [:decl="mat3x4";arg="g_i32"] - expected: FAIL - - [:decl="mat3x4";arg="g_f32"] - expected: FAIL - - [:decl="mat3x4";arg="g_bool"] - expected: FAIL - - [:decl="mat3x4";arg="g_vec2"] - expected: FAIL - - [:decl="mat3x4";arg="g_vec3"] - expected: FAIL - - [:decl="mat3x4";arg="g_vec4"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat3x4";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat3x4";arg="g_array1"] - expected: FAIL - - [:decl="mat3x4";arg="g_array2"] - expected: FAIL - - [:decl="mat3x4";arg="g_array3"] - expected: FAIL - - [:decl="mat3x4";arg="g_array4"] - expected: FAIL - - [:decl="mat3x4";arg="g_array5"] - expected: FAIL - - [:decl="mat3x4";arg="g_constructible"] - expected: FAIL - - [:decl="mat3x4";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat3x4";arg="f_u32"] - expected: FAIL - - [:decl="mat3x4";arg="f_i32"] - expected: FAIL - - [:decl="mat3x4";arg="f_f32"] - expected: FAIL - - [:decl="mat3x4";arg="f_bool"] - expected: FAIL - - [:decl="mat3x4";arg="f_vec2"] - expected: FAIL - - [:decl="mat3x4";arg="f_vec3"] - expected: FAIL - - [:decl="mat3x4";arg="f_vec4"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat3x4";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat3x4";arg="f_array1"] - expected: FAIL - - [:decl="mat3x4";arg="f_array2"] - expected: FAIL - - [:decl="mat3x4";arg="f_array3"] - expected: FAIL - - [:decl="mat3x4";arg="f_array4"] - expected: FAIL - - [:decl="mat3x4";arg="f_array5"] - expected: FAIL - - [:decl="mat3x4";arg="f_constructible"] - expected: FAIL - - [:decl="mat3x4";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat3x4";arg="g_index_u32"] - expected: FAIL - - [:decl="mat3x4";arg="g_index_i32"] - expected: FAIL - - [:decl="mat3x4";arg="g_index_f32"] - expected: FAIL - - [:decl="mat3x4";arg="g_index_bool"] - expected: FAIL - - [:decl="mat3x4";arg="f_index_u32"] - expected: FAIL - - [:decl="mat3x4";arg="f_index_i32"] - expected: FAIL - - [:decl="mat3x4";arg="f_index_f32"] - expected: FAIL - - [:decl="mat3x4";arg="f_index_bool"] - expected: FAIL - - [:decl="mat3x4";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat3x4";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat3x4";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat3x4";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat3x4";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat3x4";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat3x4";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat3x4";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat3x4";arg="texture_sample"] - expected: FAIL - - [:decl="mat3x4";arg="texture_depth"] - expected: FAIL - - [:decl="mat3x4";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat3x4";arg="texture_storage"] - expected: FAIL - - [:decl="mat3x4";arg="texture_external"] - expected: FAIL - - [:decl="mat3x4";arg="sampler"] - expected: FAIL - - [:decl="mat3x4";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat3x4";arg="ptr1"] - expected: FAIL - - [:decl="mat3x4";arg="ptr2"] - expected: FAIL - - [:decl="mat3x4";arg="ptr3"] - expected: FAIL - - [:decl="mat3x4";arg="ptr4"] - expected: FAIL - - [:decl="mat3x4";arg="ptr5"] - expected: FAIL - - [:decl="mat3x4";arg="ptr6"] - expected: FAIL - - [:decl="mat3x4";arg="ptr7"] - expected: FAIL - - [:decl="mat3x4";arg="ptr8"] - expected: FAIL - - [:decl="mat3x4";arg="ptr9"] - expected: FAIL - - [:decl="mat3x4";arg="ptr10"] - expected: FAIL - - [:decl="mat3x4";arg="ptr11"] - expected: FAIL - - [:decl="mat3x4";arg="ptr12"] - expected: FAIL - - [:decl="mat4x2";arg="u32_literal"] - expected: FAIL - - [:decl="mat4x2";arg="i32_literal"] - expected: FAIL - - [:decl="mat4x2";arg="f32_literal"] - expected: FAIL - - [:decl="mat4x2";arg="bool_literal"] - expected: FAIL - - [:decl="mat4x2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat4x2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat4x2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat4x2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat4x2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat4x2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat4x2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat4x2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat4x2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="array1_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="array2_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="array3_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="array4_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="array5_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat4x2";arg="g_u32"] - expected: FAIL - - [:decl="mat4x2";arg="g_i32"] - expected: FAIL - - [:decl="mat4x2";arg="g_f32"] - expected: FAIL - - [:decl="mat4x2";arg="g_bool"] - expected: FAIL - - [:decl="mat4x2";arg="g_vec2"] - expected: FAIL - - [:decl="mat4x2";arg="g_vec3"] - expected: FAIL - - [:decl="mat4x2";arg="g_vec4"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat4x2";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat4x2";arg="g_array1"] - expected: FAIL - - [:decl="mat4x2";arg="g_array2"] - expected: FAIL - - [:decl="mat4x2";arg="g_array3"] - expected: FAIL - - [:decl="mat4x2";arg="g_array4"] - expected: FAIL - - [:decl="mat4x2";arg="g_array5"] - expected: FAIL - - [:decl="mat4x2";arg="g_constructible"] - expected: FAIL - - [:decl="mat4x2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat4x2";arg="f_u32"] - expected: FAIL - - [:decl="mat4x2";arg="f_i32"] - expected: FAIL - - [:decl="mat4x2";arg="f_f32"] - expected: FAIL - - [:decl="mat4x2";arg="f_bool"] - expected: FAIL - - [:decl="mat4x2";arg="f_vec2"] - expected: FAIL - - [:decl="mat4x2";arg="f_vec3"] - expected: FAIL - - [:decl="mat4x2";arg="f_vec4"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat4x2";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat4x2";arg="f_array1"] - expected: FAIL - - [:decl="mat4x2";arg="f_array2"] - expected: FAIL - - [:decl="mat4x2";arg="f_array3"] - expected: FAIL - - [:decl="mat4x2";arg="f_array4"] - expected: FAIL - - [:decl="mat4x2";arg="f_array5"] - expected: FAIL - - [:decl="mat4x2";arg="f_constructible"] - expected: FAIL - - [:decl="mat4x2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat4x2";arg="g_index_u32"] - expected: FAIL - - [:decl="mat4x2";arg="g_index_i32"] - expected: FAIL - - [:decl="mat4x2";arg="g_index_f32"] - expected: FAIL - - [:decl="mat4x2";arg="g_index_bool"] - expected: FAIL - - [:decl="mat4x2";arg="f_index_u32"] - expected: FAIL - - [:decl="mat4x2";arg="f_index_i32"] - expected: FAIL - - [:decl="mat4x2";arg="f_index_f32"] - expected: FAIL - - [:decl="mat4x2";arg="f_index_bool"] - expected: FAIL - - [:decl="mat4x2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat4x2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat4x2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat4x2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat4x2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat4x2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat4x2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat4x2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat4x2";arg="texture_sample"] - expected: FAIL - - [:decl="mat4x2";arg="texture_depth"] - expected: FAIL - - [:decl="mat4x2";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat4x2";arg="texture_storage"] - expected: FAIL - - [:decl="mat4x2";arg="texture_external"] - expected: FAIL - - [:decl="mat4x2";arg="sampler"] - expected: FAIL - - [:decl="mat4x2";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat4x2";arg="ptr1"] - expected: FAIL - - [:decl="mat4x2";arg="ptr2"] - expected: FAIL - - [:decl="mat4x2";arg="ptr3"] - expected: FAIL - - [:decl="mat4x2";arg="ptr4"] - expected: FAIL - - [:decl="mat4x2";arg="ptr5"] - expected: FAIL - - [:decl="mat4x2";arg="ptr6"] - expected: FAIL - - [:decl="mat4x2";arg="ptr7"] - expected: FAIL - - [:decl="mat4x2";arg="ptr8"] - expected: FAIL - - [:decl="mat4x2";arg="ptr9"] - expected: FAIL - - [:decl="mat4x2";arg="ptr10"] - expected: FAIL - - [:decl="mat4x2";arg="ptr11"] - expected: FAIL - - [:decl="mat4x2";arg="ptr12"] - expected: FAIL - - [:decl="mat4x3";arg="u32_literal"] - expected: FAIL - - [:decl="mat4x3";arg="i32_literal"] - expected: FAIL - - [:decl="mat4x3";arg="f32_literal"] - expected: FAIL - - [:decl="mat4x3";arg="bool_literal"] - expected: FAIL - - [:decl="mat4x3";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat4x3";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat4x3";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat4x3";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat4x3";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat4x3";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat4x3";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat4x3";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat4x3";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="array1_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="array2_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="array3_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="array4_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="array5_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat4x3";arg="g_u32"] - expected: FAIL - - [:decl="mat4x3";arg="g_i32"] - expected: FAIL - - [:decl="mat4x3";arg="g_f32"] - expected: FAIL - - [:decl="mat4x3";arg="g_bool"] - expected: FAIL - - [:decl="mat4x3";arg="g_vec2"] - expected: FAIL - - [:decl="mat4x3";arg="g_vec3"] - expected: FAIL - - [:decl="mat4x3";arg="g_vec4"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat4x3";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat4x3";arg="g_array1"] - expected: FAIL - - [:decl="mat4x3";arg="g_array2"] - expected: FAIL - - [:decl="mat4x3";arg="g_array3"] - expected: FAIL - - [:decl="mat4x3";arg="g_array4"] - expected: FAIL - - [:decl="mat4x3";arg="g_array5"] - expected: FAIL - - [:decl="mat4x3";arg="g_constructible"] - expected: FAIL - - [:decl="mat4x3";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat4x3";arg="f_u32"] - expected: FAIL - - [:decl="mat4x3";arg="f_i32"] - expected: FAIL - - [:decl="mat4x3";arg="f_f32"] - expected: FAIL - - [:decl="mat4x3";arg="f_bool"] - expected: FAIL - - [:decl="mat4x3";arg="f_vec2"] - expected: FAIL - - [:decl="mat4x3";arg="f_vec3"] - expected: FAIL - - [:decl="mat4x3";arg="f_vec4"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat4x3";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat4x3";arg="f_array1"] - expected: FAIL - - [:decl="mat4x3";arg="f_array2"] - expected: FAIL - - [:decl="mat4x3";arg="f_array3"] - expected: FAIL - - [:decl="mat4x3";arg="f_array4"] - expected: FAIL - - [:decl="mat4x3";arg="f_array5"] - expected: FAIL - - [:decl="mat4x3";arg="f_constructible"] - expected: FAIL - - [:decl="mat4x3";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat4x3";arg="g_index_u32"] - expected: FAIL - - [:decl="mat4x3";arg="g_index_i32"] - expected: FAIL - - [:decl="mat4x3";arg="g_index_f32"] - expected: FAIL - - [:decl="mat4x3";arg="g_index_bool"] - expected: FAIL - - [:decl="mat4x3";arg="f_index_u32"] - expected: FAIL - - [:decl="mat4x3";arg="f_index_i32"] - expected: FAIL - - [:decl="mat4x3";arg="f_index_f32"] - expected: FAIL - - [:decl="mat4x3";arg="f_index_bool"] - expected: FAIL - - [:decl="mat4x3";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat4x3";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat4x3";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat4x3";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat4x3";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat4x3";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat4x3";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat4x3";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat4x3";arg="texture_sample"] - expected: FAIL - - [:decl="mat4x3";arg="texture_depth"] - expected: FAIL - - [:decl="mat4x3";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat4x3";arg="texture_storage"] - expected: FAIL - - [:decl="mat4x3";arg="texture_external"] - expected: FAIL - - [:decl="mat4x3";arg="sampler"] - expected: FAIL - - [:decl="mat4x3";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat4x3";arg="ptr1"] - expected: FAIL - - [:decl="mat4x3";arg="ptr2"] - expected: FAIL - - [:decl="mat4x3";arg="ptr3"] - expected: FAIL - - [:decl="mat4x3";arg="ptr4"] - expected: FAIL - - [:decl="mat4x3";arg="ptr5"] - expected: FAIL - - [:decl="mat4x3";arg="ptr6"] - expected: FAIL - - [:decl="mat4x3";arg="ptr7"] - expected: FAIL - - [:decl="mat4x3";arg="ptr8"] - expected: FAIL - - [:decl="mat4x3";arg="ptr9"] - expected: FAIL - - [:decl="mat4x3";arg="ptr10"] - expected: FAIL - - [:decl="mat4x3";arg="ptr11"] - expected: FAIL - - [:decl="mat4x3";arg="ptr12"] - expected: FAIL - - [:decl="mat4x4";arg="u32_literal"] - expected: FAIL - - [:decl="mat4x4";arg="i32_literal"] - expected: FAIL - - [:decl="mat4x4";arg="f32_literal"] - expected: FAIL - - [:decl="mat4x4";arg="bool_literal"] - expected: FAIL - - [:decl="mat4x4";arg="abstract_int_literal"] - expected: FAIL - - [:decl="mat4x4";arg="abstract_float_literal"] - expected: FAIL - - [:decl="mat4x4";arg="vec2u_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec2i_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec2f_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec2b_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec3u_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec3i_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec3f_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec3b_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec4u_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec4i_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec4f_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec4b_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="mat4x4";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="mat4x4";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="mat4x4";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="mat4x4";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="mat4x4";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="mat4x4";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="array1_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="array2_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="array3_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="array4_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="array5_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="struct1_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="struct2_constructor"] - expected: FAIL - - [:decl="mat4x4";arg="g_u32"] - expected: FAIL - - [:decl="mat4x4";arg="g_i32"] - expected: FAIL - - [:decl="mat4x4";arg="g_f32"] - expected: FAIL - - [:decl="mat4x4";arg="g_bool"] - expected: FAIL - - [:decl="mat4x4";arg="g_vec2"] - expected: FAIL - - [:decl="mat4x4";arg="g_vec3"] - expected: FAIL - - [:decl="mat4x4";arg="g_vec4"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat2x2"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat2x3"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat2x4"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat3x2"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat3x3"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat3x4"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat4x2"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat4x3"] - expected: FAIL - - [:decl="mat4x4";arg="g_mat4x4"] - expected: FAIL - - [:decl="mat4x4";arg="g_array1"] - expected: FAIL - - [:decl="mat4x4";arg="g_array2"] - expected: FAIL - - [:decl="mat4x4";arg="g_array3"] - expected: FAIL - - [:decl="mat4x4";arg="g_array4"] - expected: FAIL - - [:decl="mat4x4";arg="g_array5"] - expected: FAIL - - [:decl="mat4x4";arg="g_constructible"] - expected: FAIL - - [:decl="mat4x4";arg="g_struct_with_array"] - expected: FAIL - - [:decl="mat4x4";arg="f_u32"] - expected: FAIL - - [:decl="mat4x4";arg="f_i32"] - expected: FAIL - - [:decl="mat4x4";arg="f_f32"] - expected: FAIL - - [:decl="mat4x4";arg="f_bool"] - expected: FAIL - - [:decl="mat4x4";arg="f_vec2"] - expected: FAIL - - [:decl="mat4x4";arg="f_vec3"] - expected: FAIL - - [:decl="mat4x4";arg="f_vec4"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat2x2"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat2x3"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat2x4"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat3x2"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat3x3"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat3x4"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat4x2"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat4x3"] - expected: FAIL - - [:decl="mat4x4";arg="f_mat4x4"] - expected: FAIL - - [:decl="mat4x4";arg="f_array1"] - expected: FAIL - - [:decl="mat4x4";arg="f_array2"] - expected: FAIL - - [:decl="mat4x4";arg="f_array3"] - expected: FAIL - - [:decl="mat4x4";arg="f_array4"] - expected: FAIL - - [:decl="mat4x4";arg="f_array5"] - expected: FAIL - - [:decl="mat4x4";arg="f_constructible"] - expected: FAIL - - [:decl="mat4x4";arg="f_struct_with_array"] - expected: FAIL - - [:decl="mat4x4";arg="g_index_u32"] - expected: FAIL - - [:decl="mat4x4";arg="g_index_i32"] - expected: FAIL - - [:decl="mat4x4";arg="g_index_f32"] - expected: FAIL - - [:decl="mat4x4";arg="g_index_bool"] - expected: FAIL - - [:decl="mat4x4";arg="f_index_u32"] - expected: FAIL - - [:decl="mat4x4";arg="f_index_i32"] - expected: FAIL - - [:decl="mat4x4";arg="f_index_f32"] - expected: FAIL - - [:decl="mat4x4";arg="f_index_bool"] - expected: FAIL - - [:decl="mat4x4";arg="g_array_index_u32"] - expected: FAIL - - [:decl="mat4x4";arg="g_array_index_i32"] - expected: FAIL - - [:decl="mat4x4";arg="g_array_index_f32"] - expected: FAIL - - [:decl="mat4x4";arg="g_array_index_bool"] - expected: FAIL - - [:decl="mat4x4";arg="f_array_index_u32"] - expected: FAIL - - [:decl="mat4x4";arg="f_array_index_i32"] - expected: FAIL - - [:decl="mat4x4";arg="f_array_index_f32"] - expected: FAIL - - [:decl="mat4x4";arg="f_array_index_bool"] - expected: FAIL - - [:decl="mat4x4";arg="texture_sample"] - expected: FAIL - - [:decl="mat4x4";arg="texture_depth"] - expected: FAIL - - [:decl="mat4x4";arg="texture_multisampled"] - expected: FAIL - - [:decl="mat4x4";arg="texture_storage"] - expected: FAIL - - [:decl="mat4x4";arg="texture_external"] - expected: FAIL - - [:decl="mat4x4";arg="sampler"] - expected: FAIL - - [:decl="mat4x4";arg="sampler_comparison"] - expected: FAIL - - [:decl="mat4x4";arg="ptr1"] - expected: FAIL - - [:decl="mat4x4";arg="ptr2"] - expected: FAIL - - [:decl="mat4x4";arg="ptr3"] - expected: FAIL - - [:decl="mat4x4";arg="ptr4"] - expected: FAIL - - [:decl="mat4x4";arg="ptr5"] - expected: FAIL - - [:decl="mat4x4";arg="ptr6"] - expected: FAIL - - [:decl="mat4x4";arg="ptr7"] - expected: FAIL - - [:decl="mat4x4";arg="ptr8"] - expected: FAIL - - [:decl="mat4x4";arg="ptr9"] - expected: FAIL - - [:decl="mat4x4";arg="ptr10"] - expected: FAIL - - [:decl="mat4x4";arg="ptr11"] - expected: FAIL - - [:decl="mat4x4";arg="ptr12"] - expected: FAIL - - [:decl="array1";arg="u32_literal"] - expected: FAIL - - [:decl="array1";arg="i32_literal"] - expected: FAIL - - [:decl="array1";arg="f32_literal"] - expected: FAIL - - [:decl="array1";arg="bool_literal"] - expected: FAIL - - [:decl="array1";arg="abstract_int_literal"] - expected: FAIL - - [:decl="array1";arg="abstract_float_literal"] - expected: FAIL - - [:decl="array1";arg="vec2u_constructor"] - expected: FAIL - - [:decl="array1";arg="vec2i_constructor"] - expected: FAIL - - [:decl="array1";arg="vec2f_constructor"] - expected: FAIL - - [:decl="array1";arg="vec2b_constructor"] - expected: FAIL - - [:decl="array1";arg="vec3u_constructor"] - expected: FAIL - - [:decl="array1";arg="vec3i_constructor"] - expected: FAIL - - [:decl="array1";arg="vec3f_constructor"] - expected: FAIL - - [:decl="array1";arg="vec3b_constructor"] - expected: FAIL - - [:decl="array1";arg="vec4u_constructor"] - expected: FAIL - - [:decl="array1";arg="vec4i_constructor"] - expected: FAIL - - [:decl="array1";arg="vec4f_constructor"] - expected: FAIL - - [:decl="array1";arg="vec4b_constructor"] - expected: FAIL - - [:decl="array1";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="array1";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="array1";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="array1";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="array1";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="array1";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="array1";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="array1";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="array1";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="array1";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="array1";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="array1";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="array1";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="array1";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="array1";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="array1";arg="array1_constructor"] - expected: FAIL - - [:decl="array1";arg="array2_constructor"] - expected: FAIL - - [:decl="array1";arg="array3_constructor"] - expected: FAIL - - [:decl="array1";arg="array4_constructor"] - expected: FAIL - - [:decl="array1";arg="array5_constructor"] - expected: FAIL - - [:decl="array1";arg="struct1_constructor"] - expected: FAIL - - [:decl="array1";arg="struct2_constructor"] - expected: FAIL - - [:decl="array1";arg="g_u32"] - expected: FAIL - - [:decl="array1";arg="g_i32"] - expected: FAIL - - [:decl="array1";arg="g_f32"] - expected: FAIL - - [:decl="array1";arg="g_bool"] - expected: FAIL - - [:decl="array1";arg="g_vec2"] - expected: FAIL - - [:decl="array1";arg="g_vec3"] - expected: FAIL - - [:decl="array1";arg="g_vec4"] - expected: FAIL - - [:decl="array1";arg="g_mat2x2"] - expected: FAIL - - [:decl="array1";arg="g_mat2x3"] - expected: FAIL - - [:decl="array1";arg="g_mat2x4"] - expected: FAIL - - [:decl="array1";arg="g_mat3x2"] - expected: FAIL - - [:decl="array1";arg="g_mat3x3"] - expected: FAIL - - [:decl="array1";arg="g_mat3x4"] - expected: FAIL - - [:decl="array1";arg="g_mat4x2"] - expected: FAIL - - [:decl="array1";arg="g_mat4x3"] - expected: FAIL - - [:decl="array1";arg="g_mat4x4"] - expected: FAIL - - [:decl="array1";arg="g_array1"] - expected: FAIL - - [:decl="array1";arg="g_array2"] - expected: FAIL - - [:decl="array1";arg="g_array3"] - expected: FAIL - - [:decl="array1";arg="g_array4"] - expected: FAIL - - [:decl="array1";arg="g_array5"] - expected: FAIL - - [:decl="array1";arg="g_constructible"] - expected: FAIL - - [:decl="array1";arg="g_struct_with_array"] - expected: FAIL - - [:decl="array1";arg="f_u32"] - expected: FAIL - - [:decl="array1";arg="f_i32"] - expected: FAIL - - [:decl="array1";arg="f_f32"] - expected: FAIL - - [:decl="array1";arg="f_bool"] - expected: FAIL - - [:decl="array1";arg="f_vec2"] - expected: FAIL - - [:decl="array1";arg="f_vec3"] - expected: FAIL - - [:decl="array1";arg="f_vec4"] - expected: FAIL - - [:decl="array1";arg="f_mat2x2"] - expected: FAIL - - [:decl="array1";arg="f_mat2x3"] - expected: FAIL - - [:decl="array1";arg="f_mat2x4"] - expected: FAIL - - [:decl="array1";arg="f_mat3x2"] - expected: FAIL - - [:decl="array1";arg="f_mat3x3"] - expected: FAIL - - [:decl="array1";arg="f_mat3x4"] - expected: FAIL - - [:decl="array1";arg="f_mat4x2"] - expected: FAIL - - [:decl="array1";arg="f_mat4x3"] - expected: FAIL - - [:decl="array1";arg="f_mat4x4"] - expected: FAIL - - [:decl="array1";arg="f_array1"] - expected: FAIL - - [:decl="array1";arg="f_array2"] - expected: FAIL - - [:decl="array1";arg="f_array3"] - expected: FAIL - - [:decl="array1";arg="f_array4"] - expected: FAIL - - [:decl="array1";arg="f_array5"] - expected: FAIL - - [:decl="array1";arg="f_constructible"] - expected: FAIL - - [:decl="array1";arg="f_struct_with_array"] - expected: FAIL - - [:decl="array1";arg="g_index_u32"] - expected: FAIL - - [:decl="array1";arg="g_index_i32"] - expected: FAIL - - [:decl="array1";arg="g_index_f32"] - expected: FAIL - - [:decl="array1";arg="g_index_bool"] - expected: FAIL - - [:decl="array1";arg="f_index_u32"] - expected: FAIL - - [:decl="array1";arg="f_index_i32"] - expected: FAIL - - [:decl="array1";arg="f_index_f32"] - expected: FAIL - - [:decl="array1";arg="f_index_bool"] - expected: FAIL - - [:decl="array1";arg="g_array_index_u32"] - expected: FAIL - - [:decl="array1";arg="g_array_index_i32"] - expected: FAIL - - [:decl="array1";arg="g_array_index_f32"] - expected: FAIL - - [:decl="array1";arg="g_array_index_bool"] - expected: FAIL - - [:decl="array1";arg="f_array_index_u32"] - expected: FAIL - - [:decl="array1";arg="f_array_index_i32"] - expected: FAIL - - [:decl="array1";arg="f_array_index_f32"] - expected: FAIL - - [:decl="array1";arg="f_array_index_bool"] - expected: FAIL - - [:decl="array1";arg="texture_sample"] - expected: FAIL - - [:decl="array1";arg="texture_depth"] - expected: FAIL - - [:decl="array1";arg="texture_multisampled"] - expected: FAIL - - [:decl="array1";arg="texture_storage"] - expected: FAIL - - [:decl="array1";arg="texture_external"] - expected: FAIL - - [:decl="array1";arg="sampler"] - expected: FAIL - - [:decl="array1";arg="sampler_comparison"] - expected: FAIL - - [:decl="array1";arg="ptr1"] - expected: FAIL - - [:decl="array1";arg="ptr2"] - expected: FAIL - - [:decl="array1";arg="ptr3"] - expected: FAIL - - [:decl="array1";arg="ptr4"] - expected: FAIL - - [:decl="array1";arg="ptr5"] - expected: FAIL - - [:decl="array1";arg="ptr6"] - expected: FAIL - - [:decl="array1";arg="ptr7"] - expected: FAIL - - [:decl="array1";arg="ptr8"] - expected: FAIL - - [:decl="array1";arg="ptr9"] - expected: FAIL - - [:decl="array1";arg="ptr10"] - expected: FAIL - - [:decl="array1";arg="ptr11"] - expected: FAIL - - [:decl="array1";arg="ptr12"] - expected: FAIL - - [:decl="array2";arg="u32_literal"] - expected: FAIL - - [:decl="array2";arg="i32_literal"] - expected: FAIL - - [:decl="array2";arg="f32_literal"] - expected: FAIL - - [:decl="array2";arg="bool_literal"] - expected: FAIL - - [:decl="array2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="array2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="array2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="array2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="array2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="array2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="array2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="array2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="array2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="array2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="array2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="array2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="array2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="array2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="array2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="array2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="array2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="array2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="array2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="array2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="array2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="array2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="array2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="array2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="array2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="array2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="array2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="array2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="array2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="array2";arg="array1_constructor"] - expected: FAIL - - [:decl="array2";arg="array2_constructor"] - expected: FAIL - - [:decl="array2";arg="array3_constructor"] - expected: FAIL - - [:decl="array2";arg="array4_constructor"] - expected: FAIL - - [:decl="array2";arg="array5_constructor"] - expected: FAIL - - [:decl="array2";arg="struct1_constructor"] - expected: FAIL - - [:decl="array2";arg="struct2_constructor"] - expected: FAIL - - [:decl="array2";arg="g_u32"] - expected: FAIL - - [:decl="array2";arg="g_i32"] - expected: FAIL - - [:decl="array2";arg="g_f32"] - expected: FAIL - - [:decl="array2";arg="g_bool"] - expected: FAIL - - [:decl="array2";arg="g_vec2"] - expected: FAIL - - [:decl="array2";arg="g_vec3"] - expected: FAIL - - [:decl="array2";arg="g_vec4"] - expected: FAIL - - [:decl="array2";arg="g_mat2x2"] - expected: FAIL - - [:decl="array2";arg="g_mat2x3"] - expected: FAIL - - [:decl="array2";arg="g_mat2x4"] - expected: FAIL - - [:decl="array2";arg="g_mat3x2"] - expected: FAIL - - [:decl="array2";arg="g_mat3x3"] - expected: FAIL - - [:decl="array2";arg="g_mat3x4"] - expected: FAIL - - [:decl="array2";arg="g_mat4x2"] - expected: FAIL - - [:decl="array2";arg="g_mat4x3"] - expected: FAIL - - [:decl="array2";arg="g_mat4x4"] - expected: FAIL - - [:decl="array2";arg="g_array1"] - expected: FAIL - - [:decl="array2";arg="g_array2"] - expected: FAIL - - [:decl="array2";arg="g_array3"] - expected: FAIL - - [:decl="array2";arg="g_array4"] - expected: FAIL - - [:decl="array2";arg="g_array5"] - expected: FAIL - - [:decl="array2";arg="g_constructible"] - expected: FAIL - - [:decl="array2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="array2";arg="f_u32"] - expected: FAIL - - [:decl="array2";arg="f_i32"] - expected: FAIL - - [:decl="array2";arg="f_f32"] - expected: FAIL - - [:decl="array2";arg="f_bool"] - expected: FAIL - - [:decl="array2";arg="f_vec2"] - expected: FAIL - - [:decl="array2";arg="f_vec3"] - expected: FAIL - - [:decl="array2";arg="f_vec4"] - expected: FAIL - - [:decl="array2";arg="f_mat2x2"] - expected: FAIL - - [:decl="array2";arg="f_mat2x3"] - expected: FAIL - - [:decl="array2";arg="f_mat2x4"] - expected: FAIL - - [:decl="array2";arg="f_mat3x2"] - expected: FAIL - - [:decl="array2";arg="f_mat3x3"] - expected: FAIL - - [:decl="array2";arg="f_mat3x4"] - expected: FAIL - - [:decl="array2";arg="f_mat4x2"] - expected: FAIL - - [:decl="array2";arg="f_mat4x3"] - expected: FAIL - - [:decl="array2";arg="f_mat4x4"] - expected: FAIL - - [:decl="array2";arg="f_array1"] - expected: FAIL - - [:decl="array2";arg="f_array2"] - expected: FAIL - - [:decl="array2";arg="f_array3"] - expected: FAIL - - [:decl="array2";arg="f_array4"] - expected: FAIL - - [:decl="array2";arg="f_array5"] - expected: FAIL - - [:decl="array2";arg="f_constructible"] - expected: FAIL - - [:decl="array2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="array2";arg="g_index_u32"] - expected: FAIL - - [:decl="array2";arg="g_index_i32"] - expected: FAIL - - [:decl="array2";arg="g_index_f32"] - expected: FAIL - - [:decl="array2";arg="g_index_bool"] - expected: FAIL - - [:decl="array2";arg="f_index_u32"] - expected: FAIL - - [:decl="array2";arg="f_index_i32"] - expected: FAIL - - [:decl="array2";arg="f_index_f32"] - expected: FAIL - - [:decl="array2";arg="f_index_bool"] - expected: FAIL - - [:decl="array2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="array2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="array2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="array2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="array2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="array2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="array2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="array2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="array2";arg="texture_sample"] - expected: FAIL - - [:decl="array2";arg="texture_depth"] - expected: FAIL - - [:decl="array2";arg="texture_multisampled"] - expected: FAIL - - [:decl="array2";arg="texture_storage"] - expected: FAIL - - [:decl="array2";arg="texture_external"] - expected: FAIL - - [:decl="array2";arg="sampler"] - expected: FAIL - - [:decl="array2";arg="sampler_comparison"] - expected: FAIL - - [:decl="array2";arg="ptr1"] - expected: FAIL - - [:decl="array2";arg="ptr2"] - expected: FAIL - - [:decl="array2";arg="ptr3"] - expected: FAIL - - [:decl="array2";arg="ptr4"] - expected: FAIL - - [:decl="array2";arg="ptr5"] - expected: FAIL - - [:decl="array2";arg="ptr6"] - expected: FAIL - - [:decl="array2";arg="ptr7"] - expected: FAIL - - [:decl="array2";arg="ptr8"] - expected: FAIL - - [:decl="array2";arg="ptr9"] - expected: FAIL - - [:decl="array2";arg="ptr10"] - expected: FAIL - - [:decl="array2";arg="ptr11"] - expected: FAIL - - [:decl="array2";arg="ptr12"] - expected: FAIL - - [:decl="array3";arg="u32_literal"] - expected: FAIL - - [:decl="array3";arg="i32_literal"] - expected: FAIL - - [:decl="array3";arg="f32_literal"] - expected: FAIL - - [:decl="array3";arg="bool_literal"] - expected: FAIL - - [:decl="array3";arg="abstract_int_literal"] - expected: FAIL - - [:decl="array3";arg="abstract_float_literal"] - expected: FAIL - - [:decl="array3";arg="vec2u_constructor"] - expected: FAIL - - [:decl="array3";arg="vec2i_constructor"] - expected: FAIL - - [:decl="array3";arg="vec2f_constructor"] - expected: FAIL - - [:decl="array3";arg="vec2b_constructor"] - expected: FAIL - - [:decl="array3";arg="vec3u_constructor"] - expected: FAIL - - [:decl="array3";arg="vec3i_constructor"] - expected: FAIL - - [:decl="array3";arg="vec3f_constructor"] - expected: FAIL - - [:decl="array3";arg="vec3b_constructor"] - expected: FAIL - - [:decl="array3";arg="vec4u_constructor"] - expected: FAIL - - [:decl="array3";arg="vec4i_constructor"] - expected: FAIL - - [:decl="array3";arg="vec4f_constructor"] - expected: FAIL - - [:decl="array3";arg="vec4b_constructor"] - expected: FAIL - - [:decl="array3";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="array3";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="array3";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="array3";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="array3";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="array3";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="array3";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="array3";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="array3";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="array3";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="array3";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="array3";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="array3";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="array3";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="array3";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="array3";arg="array1_constructor"] - expected: FAIL - - [:decl="array3";arg="array2_constructor"] - expected: FAIL - - [:decl="array3";arg="array3_constructor"] - expected: FAIL - - [:decl="array3";arg="array4_constructor"] - expected: FAIL - - [:decl="array3";arg="array5_constructor"] - expected: FAIL - - [:decl="array3";arg="struct1_constructor"] - expected: FAIL - - [:decl="array3";arg="struct2_constructor"] - expected: FAIL - - [:decl="array3";arg="g_u32"] - expected: FAIL - - [:decl="array3";arg="g_i32"] - expected: FAIL - - [:decl="array3";arg="g_f32"] - expected: FAIL - - [:decl="array3";arg="g_bool"] - expected: FAIL - - [:decl="array3";arg="g_vec2"] - expected: FAIL - - [:decl="array3";arg="g_vec3"] - expected: FAIL - - [:decl="array3";arg="g_vec4"] - expected: FAIL - - [:decl="array3";arg="g_mat2x2"] - expected: FAIL - - [:decl="array3";arg="g_mat2x3"] - expected: FAIL - - [:decl="array3";arg="g_mat2x4"] - expected: FAIL - - [:decl="array3";arg="g_mat3x2"] - expected: FAIL - - [:decl="array3";arg="g_mat3x3"] - expected: FAIL - - [:decl="array3";arg="g_mat3x4"] - expected: FAIL - - [:decl="array3";arg="g_mat4x2"] - expected: FAIL - - [:decl="array3";arg="g_mat4x3"] - expected: FAIL - - [:decl="array3";arg="g_mat4x4"] - expected: FAIL - - [:decl="array3";arg="g_array1"] - expected: FAIL - - [:decl="array3";arg="g_array2"] - expected: FAIL - - [:decl="array3";arg="g_array3"] - expected: FAIL - - [:decl="array3";arg="g_array4"] - expected: FAIL - - [:decl="array3";arg="g_array5"] - expected: FAIL - - [:decl="array3";arg="g_constructible"] - expected: FAIL - - [:decl="array3";arg="g_struct_with_array"] - expected: FAIL - - [:decl="array3";arg="f_u32"] - expected: FAIL - - [:decl="array3";arg="f_i32"] - expected: FAIL - - [:decl="array3";arg="f_f32"] - expected: FAIL - - [:decl="array3";arg="f_bool"] - expected: FAIL - - [:decl="array3";arg="f_vec2"] - expected: FAIL - - [:decl="array3";arg="f_vec3"] - expected: FAIL - - [:decl="array3";arg="f_vec4"] - expected: FAIL - - [:decl="array3";arg="f_mat2x2"] - expected: FAIL - - [:decl="array3";arg="f_mat2x3"] - expected: FAIL - - [:decl="array3";arg="f_mat2x4"] - expected: FAIL - - [:decl="array3";arg="f_mat3x2"] - expected: FAIL - - [:decl="array3";arg="f_mat3x3"] - expected: FAIL - - [:decl="array3";arg="f_mat3x4"] - expected: FAIL - - [:decl="array3";arg="f_mat4x2"] - expected: FAIL - - [:decl="array3";arg="f_mat4x3"] - expected: FAIL - - [:decl="array3";arg="f_mat4x4"] - expected: FAIL - - [:decl="array3";arg="f_array1"] - expected: FAIL - - [:decl="array3";arg="f_array2"] - expected: FAIL - - [:decl="array3";arg="f_array3"] - expected: FAIL - - [:decl="array3";arg="f_array4"] - expected: FAIL - - [:decl="array3";arg="f_array5"] - expected: FAIL - - [:decl="array3";arg="f_constructible"] - expected: FAIL - - [:decl="array3";arg="f_struct_with_array"] - expected: FAIL - - [:decl="array3";arg="g_index_u32"] - expected: FAIL - - [:decl="array3";arg="g_index_i32"] - expected: FAIL - - [:decl="array3";arg="g_index_f32"] - expected: FAIL - - [:decl="array3";arg="g_index_bool"] - expected: FAIL - - [:decl="array3";arg="f_index_u32"] - expected: FAIL - - [:decl="array3";arg="f_index_i32"] - expected: FAIL - - [:decl="array3";arg="f_index_f32"] - expected: FAIL - - [:decl="array3";arg="f_index_bool"] - expected: FAIL - - [:decl="array3";arg="g_array_index_u32"] - expected: FAIL - - [:decl="array3";arg="g_array_index_i32"] - expected: FAIL - - [:decl="array3";arg="g_array_index_f32"] - expected: FAIL - - [:decl="array3";arg="g_array_index_bool"] - expected: FAIL - - [:decl="array3";arg="f_array_index_u32"] - expected: FAIL - - [:decl="array3";arg="f_array_index_i32"] - expected: FAIL - - [:decl="array3";arg="f_array_index_f32"] - expected: FAIL - - [:decl="array3";arg="f_array_index_bool"] - expected: FAIL - - [:decl="array3";arg="texture_sample"] - expected: FAIL - - [:decl="array3";arg="texture_depth"] - expected: FAIL - - [:decl="array3";arg="texture_multisampled"] - expected: FAIL - - [:decl="array3";arg="texture_storage"] - expected: FAIL - - [:decl="array3";arg="texture_external"] - expected: FAIL - - [:decl="array3";arg="sampler"] - expected: FAIL - - [:decl="array3";arg="sampler_comparison"] - expected: FAIL - - [:decl="array3";arg="ptr1"] - expected: FAIL - - [:decl="array3";arg="ptr2"] - expected: FAIL - - [:decl="array3";arg="ptr3"] - expected: FAIL - - [:decl="array3";arg="ptr4"] - expected: FAIL - - [:decl="array3";arg="ptr5"] - expected: FAIL - - [:decl="array3";arg="ptr6"] - expected: FAIL - - [:decl="array3";arg="ptr7"] - expected: FAIL - - [:decl="array3";arg="ptr8"] - expected: FAIL - - [:decl="array3";arg="ptr9"] - expected: FAIL - - [:decl="array3";arg="ptr10"] - expected: FAIL - - [:decl="array3";arg="ptr11"] - expected: FAIL - - [:decl="array3";arg="ptr12"] - expected: FAIL - - [:decl="array4";arg="u32_literal"] - expected: FAIL - - [:decl="array4";arg="i32_literal"] - expected: FAIL - - [:decl="array4";arg="f32_literal"] - expected: FAIL - - [:decl="array4";arg="bool_literal"] - expected: FAIL - - [:decl="array4";arg="abstract_int_literal"] - expected: FAIL - - [:decl="array4";arg="abstract_float_literal"] - expected: FAIL - - [:decl="array4";arg="vec2u_constructor"] - expected: FAIL - - [:decl="array4";arg="vec2i_constructor"] - expected: FAIL - - [:decl="array4";arg="vec2f_constructor"] - expected: FAIL - - [:decl="array4";arg="vec2b_constructor"] - expected: FAIL - - [:decl="array4";arg="vec3u_constructor"] - expected: FAIL - - [:decl="array4";arg="vec3i_constructor"] - expected: FAIL - - [:decl="array4";arg="vec3f_constructor"] - expected: FAIL - - [:decl="array4";arg="vec3b_constructor"] - expected: FAIL - - [:decl="array4";arg="vec4u_constructor"] - expected: FAIL - - [:decl="array4";arg="vec4i_constructor"] - expected: FAIL - - [:decl="array4";arg="vec4f_constructor"] - expected: FAIL - - [:decl="array4";arg="vec4b_constructor"] - expected: FAIL - - [:decl="array4";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="array4";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="array4";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="array4";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="array4";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="array4";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="array4";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="array4";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="array4";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="array4";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="array4";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="array4";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="array4";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="array4";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="array4";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="array4";arg="array1_constructor"] - expected: FAIL - - [:decl="array4";arg="array2_constructor"] - expected: FAIL - - [:decl="array4";arg="array3_constructor"] - expected: FAIL - - [:decl="array4";arg="array4_constructor"] - expected: FAIL - - [:decl="array4";arg="array5_constructor"] - expected: FAIL - - [:decl="array4";arg="struct1_constructor"] - expected: FAIL - - [:decl="array4";arg="struct2_constructor"] - expected: FAIL - - [:decl="array4";arg="g_u32"] - expected: FAIL - - [:decl="array4";arg="g_i32"] - expected: FAIL - - [:decl="array4";arg="g_f32"] - expected: FAIL - - [:decl="array4";arg="g_bool"] - expected: FAIL - - [:decl="array4";arg="g_vec2"] - expected: FAIL - - [:decl="array4";arg="g_vec3"] - expected: FAIL - - [:decl="array4";arg="g_vec4"] - expected: FAIL - - [:decl="array4";arg="g_mat2x2"] - expected: FAIL - - [:decl="array4";arg="g_mat2x3"] - expected: FAIL - - [:decl="array4";arg="g_mat2x4"] - expected: FAIL - - [:decl="array4";arg="g_mat3x2"] - expected: FAIL - - [:decl="array4";arg="g_mat3x3"] - expected: FAIL - - [:decl="array4";arg="g_mat3x4"] - expected: FAIL - - [:decl="array4";arg="g_mat4x2"] - expected: FAIL - - [:decl="array4";arg="g_mat4x3"] - expected: FAIL - - [:decl="array4";arg="g_mat4x4"] - expected: FAIL - - [:decl="array4";arg="g_array1"] - expected: FAIL - - [:decl="array4";arg="g_array2"] - expected: FAIL - - [:decl="array4";arg="g_array3"] - expected: FAIL - - [:decl="array4";arg="g_array4"] - expected: FAIL - - [:decl="array4";arg="g_array5"] - expected: FAIL - - [:decl="array4";arg="g_constructible"] - expected: FAIL - - [:decl="array4";arg="g_struct_with_array"] - expected: FAIL - - [:decl="array4";arg="f_u32"] - expected: FAIL - - [:decl="array4";arg="f_i32"] - expected: FAIL - - [:decl="array4";arg="f_f32"] - expected: FAIL - - [:decl="array4";arg="f_bool"] - expected: FAIL - - [:decl="array4";arg="f_vec2"] - expected: FAIL - - [:decl="array4";arg="f_vec3"] - expected: FAIL - - [:decl="array4";arg="f_vec4"] - expected: FAIL - - [:decl="array4";arg="f_mat2x2"] - expected: FAIL - - [:decl="array4";arg="f_mat2x3"] - expected: FAIL - - [:decl="array4";arg="f_mat2x4"] - expected: FAIL - - [:decl="array4";arg="f_mat3x2"] - expected: FAIL - - [:decl="array4";arg="f_mat3x3"] - expected: FAIL - - [:decl="array4";arg="f_mat3x4"] - expected: FAIL - - [:decl="array4";arg="f_mat4x2"] - expected: FAIL - - [:decl="array4";arg="f_mat4x3"] - expected: FAIL - - [:decl="array4";arg="f_mat4x4"] - expected: FAIL - - [:decl="array4";arg="f_array1"] - expected: FAIL - - [:decl="array4";arg="f_array2"] - expected: FAIL - - [:decl="array4";arg="f_array3"] - expected: FAIL - - [:decl="array4";arg="f_array4"] - expected: FAIL - - [:decl="array4";arg="f_array5"] - expected: FAIL - - [:decl="array4";arg="f_constructible"] - expected: FAIL - - [:decl="array4";arg="f_struct_with_array"] - expected: FAIL - - [:decl="array4";arg="g_index_u32"] - expected: FAIL - - [:decl="array4";arg="g_index_i32"] - expected: FAIL - - [:decl="array4";arg="g_index_f32"] - expected: FAIL - - [:decl="array4";arg="g_index_bool"] - expected: FAIL - - [:decl="array4";arg="f_index_u32"] - expected: FAIL - - [:decl="array4";arg="f_index_i32"] - expected: FAIL - - [:decl="array4";arg="f_index_f32"] - expected: FAIL - - [:decl="array4";arg="f_index_bool"] - expected: FAIL - - [:decl="array4";arg="g_array_index_u32"] - expected: FAIL - - [:decl="array4";arg="g_array_index_i32"] - expected: FAIL - - [:decl="array4";arg="g_array_index_f32"] - expected: FAIL - - [:decl="array4";arg="g_array_index_bool"] - expected: FAIL - - [:decl="array4";arg="f_array_index_u32"] - expected: FAIL - - [:decl="array4";arg="f_array_index_i32"] - expected: FAIL - - [:decl="array4";arg="f_array_index_f32"] - expected: FAIL - - [:decl="array4";arg="f_array_index_bool"] - expected: FAIL - - [:decl="array4";arg="texture_sample"] - expected: FAIL - - [:decl="array4";arg="texture_depth"] - expected: FAIL - - [:decl="array4";arg="texture_multisampled"] - expected: FAIL - - [:decl="array4";arg="texture_storage"] - expected: FAIL - - [:decl="array4";arg="texture_external"] - expected: FAIL - - [:decl="array4";arg="sampler"] - expected: FAIL - - [:decl="array4";arg="sampler_comparison"] - expected: FAIL - - [:decl="array4";arg="ptr1"] - expected: FAIL - - [:decl="array4";arg="ptr2"] - expected: FAIL - - [:decl="array4";arg="ptr3"] - expected: FAIL - - [:decl="array4";arg="ptr4"] - expected: FAIL - - [:decl="array4";arg="ptr5"] - expected: FAIL - - [:decl="array4";arg="ptr6"] - expected: FAIL - - [:decl="array4";arg="ptr7"] - expected: FAIL - - [:decl="array4";arg="ptr8"] - expected: FAIL - - [:decl="array4";arg="ptr9"] - expected: FAIL - - [:decl="array4";arg="ptr10"] - expected: FAIL - - [:decl="array4";arg="ptr11"] - expected: FAIL - - [:decl="array4";arg="ptr12"] - expected: FAIL - - [:decl="array5";arg="u32_literal"] - expected: FAIL - - [:decl="array5";arg="i32_literal"] - expected: FAIL - - [:decl="array5";arg="f32_literal"] - expected: FAIL - - [:decl="array5";arg="bool_literal"] - expected: FAIL - - [:decl="array5";arg="abstract_int_literal"] - expected: FAIL - - [:decl="array5";arg="abstract_float_literal"] - expected: FAIL - - [:decl="array5";arg="vec2u_constructor"] - expected: FAIL - - [:decl="array5";arg="vec2i_constructor"] - expected: FAIL - - [:decl="array5";arg="vec2f_constructor"] - expected: FAIL - - [:decl="array5";arg="vec2b_constructor"] - expected: FAIL - - [:decl="array5";arg="vec3u_constructor"] - expected: FAIL - - [:decl="array5";arg="vec3i_constructor"] - expected: FAIL - - [:decl="array5";arg="vec3f_constructor"] - expected: FAIL - - [:decl="array5";arg="vec3b_constructor"] - expected: FAIL - - [:decl="array5";arg="vec4u_constructor"] - expected: FAIL - - [:decl="array5";arg="vec4i_constructor"] - expected: FAIL - - [:decl="array5";arg="vec4f_constructor"] - expected: FAIL - - [:decl="array5";arg="vec4b_constructor"] - expected: FAIL - - [:decl="array5";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="array5";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="array5";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="array5";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="array5";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="array5";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="array5";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="array5";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="array5";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="array5";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="array5";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="array5";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="array5";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="array5";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="array5";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="array5";arg="array1_constructor"] - expected: FAIL - - [:decl="array5";arg="array2_constructor"] - expected: FAIL - - [:decl="array5";arg="array3_constructor"] - expected: FAIL - - [:decl="array5";arg="array4_constructor"] - expected: FAIL - - [:decl="array5";arg="array5_constructor"] - expected: FAIL - - [:decl="array5";arg="struct1_constructor"] - expected: FAIL - - [:decl="array5";arg="struct2_constructor"] - expected: FAIL - - [:decl="array5";arg="g_u32"] - expected: FAIL - - [:decl="array5";arg="g_i32"] - expected: FAIL - - [:decl="array5";arg="g_f32"] - expected: FAIL - - [:decl="array5";arg="g_bool"] - expected: FAIL - - [:decl="array5";arg="g_vec2"] - expected: FAIL - - [:decl="array5";arg="g_vec3"] - expected: FAIL - - [:decl="array5";arg="g_vec4"] - expected: FAIL - - [:decl="array5";arg="g_mat2x2"] - expected: FAIL - - [:decl="array5";arg="g_mat2x3"] - expected: FAIL - - [:decl="array5";arg="g_mat2x4"] - expected: FAIL - - [:decl="array5";arg="g_mat3x2"] - expected: FAIL - - [:decl="array5";arg="g_mat3x3"] - expected: FAIL - - [:decl="array5";arg="g_mat3x4"] - expected: FAIL - - [:decl="array5";arg="g_mat4x2"] - expected: FAIL - - [:decl="array5";arg="g_mat4x3"] - expected: FAIL - - [:decl="array5";arg="g_mat4x4"] - expected: FAIL - - [:decl="array5";arg="g_array1"] - expected: FAIL - - [:decl="array5";arg="g_array2"] - expected: FAIL - - [:decl="array5";arg="g_array3"] - expected: FAIL - - [:decl="array5";arg="g_array4"] - expected: FAIL - - [:decl="array5";arg="g_array5"] - expected: FAIL - - [:decl="array5";arg="g_constructible"] - expected: FAIL - - [:decl="array5";arg="g_struct_with_array"] - expected: FAIL - - [:decl="array5";arg="f_u32"] - expected: FAIL - - [:decl="array5";arg="f_i32"] - expected: FAIL - - [:decl="array5";arg="f_f32"] - expected: FAIL - - [:decl="array5";arg="f_bool"] - expected: FAIL - - [:decl="array5";arg="f_vec2"] - expected: FAIL - - [:decl="array5";arg="f_vec3"] - expected: FAIL - - [:decl="array5";arg="f_vec4"] - expected: FAIL - - [:decl="array5";arg="f_mat2x2"] - expected: FAIL - - [:decl="array5";arg="f_mat2x3"] - expected: FAIL - - [:decl="array5";arg="f_mat2x4"] - expected: FAIL - - [:decl="array5";arg="f_mat3x2"] - expected: FAIL - - [:decl="array5";arg="f_mat3x3"] - expected: FAIL - - [:decl="array5";arg="f_mat3x4"] - expected: FAIL - - [:decl="array5";arg="f_mat4x2"] - expected: FAIL - - [:decl="array5";arg="f_mat4x3"] - expected: FAIL - - [:decl="array5";arg="f_mat4x4"] - expected: FAIL - - [:decl="array5";arg="f_array1"] - expected: FAIL - - [:decl="array5";arg="f_array2"] - expected: FAIL - - [:decl="array5";arg="f_array3"] - expected: FAIL - - [:decl="array5";arg="f_array4"] - expected: FAIL - - [:decl="array5";arg="f_array5"] - expected: FAIL - - [:decl="array5";arg="f_constructible"] - expected: FAIL - - [:decl="array5";arg="f_struct_with_array"] - expected: FAIL - - [:decl="array5";arg="g_index_u32"] - expected: FAIL - - [:decl="array5";arg="g_index_i32"] - expected: FAIL - - [:decl="array5";arg="g_index_f32"] - expected: FAIL - - [:decl="array5";arg="g_index_bool"] - expected: FAIL - - [:decl="array5";arg="f_index_u32"] - expected: FAIL - - [:decl="array5";arg="f_index_i32"] - expected: FAIL - - [:decl="array5";arg="f_index_f32"] - expected: FAIL - - [:decl="array5";arg="f_index_bool"] - expected: FAIL - - [:decl="array5";arg="g_array_index_u32"] - expected: FAIL - - [:decl="array5";arg="g_array_index_i32"] - expected: FAIL - - [:decl="array5";arg="g_array_index_f32"] - expected: FAIL - - [:decl="array5";arg="g_array_index_bool"] - expected: FAIL - - [:decl="array5";arg="f_array_index_u32"] - expected: FAIL - - [:decl="array5";arg="f_array_index_i32"] - expected: FAIL - - [:decl="array5";arg="f_array_index_f32"] - expected: FAIL - - [:decl="array5";arg="f_array_index_bool"] - expected: FAIL - - [:decl="array5";arg="texture_sample"] - expected: FAIL - - [:decl="array5";arg="texture_depth"] - expected: FAIL - - [:decl="array5";arg="texture_multisampled"] - expected: FAIL - - [:decl="array5";arg="texture_storage"] - expected: FAIL - - [:decl="array5";arg="texture_external"] - expected: FAIL - - [:decl="array5";arg="sampler"] - expected: FAIL - - [:decl="array5";arg="sampler_comparison"] - expected: FAIL - - [:decl="array5";arg="ptr1"] - expected: FAIL - - [:decl="array5";arg="ptr2"] - expected: FAIL - - [:decl="array5";arg="ptr3"] - expected: FAIL - - [:decl="array5";arg="ptr4"] - expected: FAIL - - [:decl="array5";arg="ptr5"] - expected: FAIL - - [:decl="array5";arg="ptr6"] - expected: FAIL - - [:decl="array5";arg="ptr7"] - expected: FAIL - - [:decl="array5";arg="ptr8"] - expected: FAIL - - [:decl="array5";arg="ptr9"] - expected: FAIL - - [:decl="array5";arg="ptr10"] - expected: FAIL - - [:decl="array5";arg="ptr11"] - expected: FAIL - - [:decl="array5";arg="ptr12"] - expected: FAIL - - [:decl="struct1";arg="u32_literal"] - expected: FAIL - - [:decl="struct1";arg="i32_literal"] - expected: FAIL - - [:decl="struct1";arg="f32_literal"] - expected: FAIL - - [:decl="struct1";arg="bool_literal"] - expected: FAIL - - [:decl="struct1";arg="abstract_int_literal"] - expected: FAIL - - [:decl="struct1";arg="abstract_float_literal"] - expected: FAIL - - [:decl="struct1";arg="vec2u_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec2i_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec2f_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec2b_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec3u_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec3i_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec3f_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec3b_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec4u_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec4i_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec4f_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec4b_constructor"] - expected: FAIL - - [:decl="struct1";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="struct1";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="struct1";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="struct1";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="struct1";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="struct1";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="struct1";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="struct1";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="struct1";arg="array1_constructor"] - expected: FAIL - - [:decl="struct1";arg="array2_constructor"] - expected: FAIL - - [:decl="struct1";arg="array3_constructor"] - expected: FAIL - - [:decl="struct1";arg="array4_constructor"] - expected: FAIL - - [:decl="struct1";arg="array5_constructor"] - expected: FAIL - - [:decl="struct1";arg="struct1_constructor"] - expected: FAIL - - [:decl="struct1";arg="struct2_constructor"] - expected: FAIL - - [:decl="struct1";arg="g_u32"] - expected: FAIL - - [:decl="struct1";arg="g_i32"] - expected: FAIL - - [:decl="struct1";arg="g_f32"] - expected: FAIL - - [:decl="struct1";arg="g_bool"] - expected: FAIL - - [:decl="struct1";arg="g_vec2"] - expected: FAIL - - [:decl="struct1";arg="g_vec3"] - expected: FAIL - - [:decl="struct1";arg="g_vec4"] - expected: FAIL - - [:decl="struct1";arg="g_mat2x2"] - expected: FAIL - - [:decl="struct1";arg="g_mat2x3"] - expected: FAIL - - [:decl="struct1";arg="g_mat2x4"] - expected: FAIL - - [:decl="struct1";arg="g_mat3x2"] - expected: FAIL - - [:decl="struct1";arg="g_mat3x3"] - expected: FAIL - - [:decl="struct1";arg="g_mat3x4"] - expected: FAIL - - [:decl="struct1";arg="g_mat4x2"] - expected: FAIL - - [:decl="struct1";arg="g_mat4x3"] - expected: FAIL - - [:decl="struct1";arg="g_mat4x4"] - expected: FAIL - - [:decl="struct1";arg="g_array1"] - expected: FAIL - - [:decl="struct1";arg="g_array2"] - expected: FAIL - - [:decl="struct1";arg="g_array3"] - expected: FAIL - - [:decl="struct1";arg="g_array4"] - expected: FAIL - - [:decl="struct1";arg="g_array5"] - expected: FAIL - - [:decl="struct1";arg="g_constructible"] - expected: FAIL - - [:decl="struct1";arg="g_struct_with_array"] - expected: FAIL - - [:decl="struct1";arg="f_u32"] - expected: FAIL - - [:decl="struct1";arg="f_i32"] - expected: FAIL - - [:decl="struct1";arg="f_f32"] - expected: FAIL - - [:decl="struct1";arg="f_bool"] - expected: FAIL - - [:decl="struct1";arg="f_vec2"] - expected: FAIL - - [:decl="struct1";arg="f_vec3"] - expected: FAIL - - [:decl="struct1";arg="f_vec4"] - expected: FAIL - - [:decl="struct1";arg="f_mat2x2"] - expected: FAIL - - [:decl="struct1";arg="f_mat2x3"] - expected: FAIL - - [:decl="struct1";arg="f_mat2x4"] - expected: FAIL - - [:decl="struct1";arg="f_mat3x2"] - expected: FAIL - - [:decl="struct1";arg="f_mat3x3"] - expected: FAIL - - [:decl="struct1";arg="f_mat3x4"] - expected: FAIL - - [:decl="struct1";arg="f_mat4x2"] - expected: FAIL - - [:decl="struct1";arg="f_mat4x3"] - expected: FAIL - - [:decl="struct1";arg="f_mat4x4"] - expected: FAIL - - [:decl="struct1";arg="f_array1"] - expected: FAIL - - [:decl="struct1";arg="f_array2"] - expected: FAIL - - [:decl="struct1";arg="f_array3"] - expected: FAIL - - [:decl="struct1";arg="f_array4"] - expected: FAIL - - [:decl="struct1";arg="f_array5"] - expected: FAIL - - [:decl="struct1";arg="f_constructible"] - expected: FAIL - - [:decl="struct1";arg="f_struct_with_array"] - expected: FAIL - - [:decl="struct1";arg="g_index_u32"] - expected: FAIL - - [:decl="struct1";arg="g_index_i32"] - expected: FAIL - - [:decl="struct1";arg="g_index_f32"] - expected: FAIL - - [:decl="struct1";arg="g_index_bool"] - expected: FAIL - - [:decl="struct1";arg="f_index_u32"] - expected: FAIL - - [:decl="struct1";arg="f_index_i32"] - expected: FAIL - - [:decl="struct1";arg="f_index_f32"] - expected: FAIL - - [:decl="struct1";arg="f_index_bool"] - expected: FAIL - - [:decl="struct1";arg="g_array_index_u32"] - expected: FAIL - - [:decl="struct1";arg="g_array_index_i32"] - expected: FAIL - - [:decl="struct1";arg="g_array_index_f32"] - expected: FAIL - - [:decl="struct1";arg="g_array_index_bool"] - expected: FAIL - - [:decl="struct1";arg="f_array_index_u32"] - expected: FAIL - - [:decl="struct1";arg="f_array_index_i32"] - expected: FAIL - - [:decl="struct1";arg="f_array_index_f32"] - expected: FAIL - - [:decl="struct1";arg="f_array_index_bool"] - expected: FAIL - - [:decl="struct1";arg="texture_sample"] - expected: FAIL - - [:decl="struct1";arg="texture_depth"] - expected: FAIL - - [:decl="struct1";arg="texture_multisampled"] - expected: FAIL - - [:decl="struct1";arg="texture_storage"] - expected: FAIL - - [:decl="struct1";arg="texture_external"] - expected: FAIL - - [:decl="struct1";arg="sampler"] - expected: FAIL - - [:decl="struct1";arg="sampler_comparison"] - expected: FAIL - - [:decl="struct1";arg="ptr1"] - expected: FAIL - - [:decl="struct1";arg="ptr2"] - expected: FAIL - - [:decl="struct1";arg="ptr3"] - expected: FAIL - - [:decl="struct1";arg="ptr4"] - expected: FAIL - - [:decl="struct1";arg="ptr5"] - expected: FAIL - - [:decl="struct1";arg="ptr6"] - expected: FAIL - - [:decl="struct1";arg="ptr7"] - expected: FAIL - - [:decl="struct1";arg="ptr8"] - expected: FAIL - - [:decl="struct1";arg="ptr9"] - expected: FAIL - - [:decl="struct1";arg="ptr10"] - expected: FAIL - - [:decl="struct1";arg="ptr11"] - expected: FAIL - - [:decl="struct1";arg="ptr12"] - expected: FAIL - - [:decl="struct2";arg="u32_literal"] - expected: FAIL - - [:decl="struct2";arg="i32_literal"] - expected: FAIL - - [:decl="struct2";arg="f32_literal"] - expected: FAIL - - [:decl="struct2";arg="bool_literal"] - expected: FAIL - - [:decl="struct2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="struct2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="struct2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="struct2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="struct2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="struct2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="struct2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="struct2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="struct2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="struct2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="struct2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="struct2";arg="array1_constructor"] - expected: FAIL - - [:decl="struct2";arg="array2_constructor"] - expected: FAIL - - [:decl="struct2";arg="array3_constructor"] - expected: FAIL - - [:decl="struct2";arg="array4_constructor"] - expected: FAIL - - [:decl="struct2";arg="array5_constructor"] - expected: FAIL - - [:decl="struct2";arg="struct1_constructor"] - expected: FAIL - - [:decl="struct2";arg="struct2_constructor"] - expected: FAIL - - [:decl="struct2";arg="g_u32"] - expected: FAIL - - [:decl="struct2";arg="g_i32"] - expected: FAIL - - [:decl="struct2";arg="g_f32"] - expected: FAIL - - [:decl="struct2";arg="g_bool"] - expected: FAIL - - [:decl="struct2";arg="g_vec2"] - expected: FAIL - - [:decl="struct2";arg="g_vec3"] - expected: FAIL - - [:decl="struct2";arg="g_vec4"] - expected: FAIL - - [:decl="struct2";arg="g_mat2x2"] - expected: FAIL - - [:decl="struct2";arg="g_mat2x3"] - expected: FAIL - - [:decl="struct2";arg="g_mat2x4"] - expected: FAIL - - [:decl="struct2";arg="g_mat3x2"] - expected: FAIL - - [:decl="struct2";arg="g_mat3x3"] - expected: FAIL - - [:decl="struct2";arg="g_mat3x4"] - expected: FAIL - - [:decl="struct2";arg="g_mat4x2"] - expected: FAIL - - [:decl="struct2";arg="g_mat4x3"] - expected: FAIL - - [:decl="struct2";arg="g_mat4x4"] - expected: FAIL - - [:decl="struct2";arg="g_array1"] - expected: FAIL - - [:decl="struct2";arg="g_array2"] - expected: FAIL - - [:decl="struct2";arg="g_array3"] - expected: FAIL - - [:decl="struct2";arg="g_array4"] - expected: FAIL - - [:decl="struct2";arg="g_array5"] - expected: FAIL - - [:decl="struct2";arg="g_constructible"] - expected: FAIL - - [:decl="struct2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="struct2";arg="f_u32"] - expected: FAIL - - [:decl="struct2";arg="f_i32"] - expected: FAIL - - [:decl="struct2";arg="f_f32"] - expected: FAIL - - [:decl="struct2";arg="f_bool"] - expected: FAIL - - [:decl="struct2";arg="f_vec2"] - expected: FAIL - - [:decl="struct2";arg="f_vec3"] - expected: FAIL - - [:decl="struct2";arg="f_vec4"] - expected: FAIL - - [:decl="struct2";arg="f_mat2x2"] - expected: FAIL - - [:decl="struct2";arg="f_mat2x3"] - expected: FAIL - - [:decl="struct2";arg="f_mat2x4"] - expected: FAIL - - [:decl="struct2";arg="f_mat3x2"] - expected: FAIL - - [:decl="struct2";arg="f_mat3x3"] - expected: FAIL - - [:decl="struct2";arg="f_mat3x4"] - expected: FAIL - - [:decl="struct2";arg="f_mat4x2"] - expected: FAIL - - [:decl="struct2";arg="f_mat4x3"] - expected: FAIL - - [:decl="struct2";arg="f_mat4x4"] - expected: FAIL - - [:decl="struct2";arg="f_array1"] - expected: FAIL - - [:decl="struct2";arg="f_array2"] - expected: FAIL - - [:decl="struct2";arg="f_array3"] - expected: FAIL - - [:decl="struct2";arg="f_array4"] - expected: FAIL - - [:decl="struct2";arg="f_array5"] - expected: FAIL - - [:decl="struct2";arg="f_constructible"] - expected: FAIL - - [:decl="struct2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="struct2";arg="g_index_u32"] - expected: FAIL - - [:decl="struct2";arg="g_index_i32"] - expected: FAIL - - [:decl="struct2";arg="g_index_f32"] - expected: FAIL - - [:decl="struct2";arg="g_index_bool"] - expected: FAIL - - [:decl="struct2";arg="f_index_u32"] - expected: FAIL - - [:decl="struct2";arg="f_index_i32"] - expected: FAIL - - [:decl="struct2";arg="f_index_f32"] - expected: FAIL - - [:decl="struct2";arg="f_index_bool"] - expected: FAIL - - [:decl="struct2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="struct2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="struct2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="struct2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="struct2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="struct2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="struct2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="struct2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="struct2";arg="texture_sample"] - expected: FAIL - - [:decl="struct2";arg="texture_depth"] - expected: FAIL - - [:decl="struct2";arg="texture_multisampled"] - expected: FAIL - - [:decl="struct2";arg="texture_storage"] - expected: FAIL - - [:decl="struct2";arg="texture_external"] - expected: FAIL - - [:decl="struct2";arg="sampler"] - expected: FAIL - - [:decl="struct2";arg="sampler_comparison"] - expected: FAIL - - [:decl="struct2";arg="ptr1"] - expected: FAIL - - [:decl="struct2";arg="ptr2"] - expected: FAIL - - [:decl="struct2";arg="ptr3"] - expected: FAIL - - [:decl="struct2";arg="ptr4"] - expected: FAIL - - [:decl="struct2";arg="ptr5"] - expected: FAIL - - [:decl="struct2";arg="ptr6"] - expected: FAIL - - [:decl="struct2";arg="ptr7"] - expected: FAIL - - [:decl="struct2";arg="ptr8"] - expected: FAIL - - [:decl="struct2";arg="ptr9"] - expected: FAIL - - [:decl="struct2";arg="ptr10"] - expected: FAIL - - [:decl="struct2";arg="ptr11"] - expected: FAIL - - [:decl="struct2";arg="ptr12"] - expected: FAIL - - [:decl="texture_sample";arg="u32_literal"] - expected: FAIL - - [:decl="texture_sample";arg="i32_literal"] - expected: FAIL - - [:decl="texture_sample";arg="f32_literal"] - expected: FAIL - - [:decl="texture_sample";arg="bool_literal"] - expected: FAIL - - [:decl="texture_sample";arg="abstract_int_literal"] - expected: FAIL - - [:decl="texture_sample";arg="abstract_float_literal"] - expected: FAIL - - [:decl="texture_sample";arg="vec2u_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec2i_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec2f_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec2b_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec3u_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec3i_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec3f_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec3b_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec4u_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec4i_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec4f_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec4b_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="texture_sample";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="texture_sample";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="texture_sample";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="texture_sample";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="texture_sample";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="texture_sample";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="array1_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="array2_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="array3_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="array4_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="array5_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="struct1_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="struct2_constructor"] - expected: FAIL - - [:decl="texture_sample";arg="g_u32"] - expected: FAIL - - [:decl="texture_sample";arg="g_i32"] - expected: FAIL - - [:decl="texture_sample";arg="g_f32"] - expected: FAIL - - [:decl="texture_sample";arg="g_bool"] - expected: FAIL - - [:decl="texture_sample";arg="g_vec2"] - expected: FAIL - - [:decl="texture_sample";arg="g_vec3"] - expected: FAIL - - [:decl="texture_sample";arg="g_vec4"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat2x2"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat2x3"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat2x4"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat3x2"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat3x3"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat3x4"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat4x2"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat4x3"] - expected: FAIL - - [:decl="texture_sample";arg="g_mat4x4"] - expected: FAIL - - [:decl="texture_sample";arg="g_array1"] - expected: FAIL - - [:decl="texture_sample";arg="g_array2"] - expected: FAIL - - [:decl="texture_sample";arg="g_array3"] - expected: FAIL - - [:decl="texture_sample";arg="g_array4"] - expected: FAIL - - [:decl="texture_sample";arg="g_array5"] - expected: FAIL - - [:decl="texture_sample";arg="g_constructible"] - expected: FAIL - - [:decl="texture_sample";arg="g_struct_with_array"] - expected: FAIL - - [:decl="texture_sample";arg="f_u32"] - expected: FAIL - - [:decl="texture_sample";arg="f_i32"] - expected: FAIL - - [:decl="texture_sample";arg="f_f32"] - expected: FAIL - - [:decl="texture_sample";arg="f_bool"] - expected: FAIL - - [:decl="texture_sample";arg="f_vec2"] - expected: FAIL - - [:decl="texture_sample";arg="f_vec3"] - expected: FAIL - - [:decl="texture_sample";arg="f_vec4"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat2x2"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat2x3"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat2x4"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat3x2"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat3x3"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat3x4"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat4x2"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat4x3"] - expected: FAIL - - [:decl="texture_sample";arg="f_mat4x4"] - expected: FAIL - - [:decl="texture_sample";arg="f_array1"] - expected: FAIL - - [:decl="texture_sample";arg="f_array2"] - expected: FAIL - - [:decl="texture_sample";arg="f_array3"] - expected: FAIL - - [:decl="texture_sample";arg="f_array4"] - expected: FAIL - - [:decl="texture_sample";arg="f_array5"] - expected: FAIL - - [:decl="texture_sample";arg="f_constructible"] - expected: FAIL - - [:decl="texture_sample";arg="f_struct_with_array"] - expected: FAIL - - [:decl="texture_sample";arg="g_index_u32"] - expected: FAIL - - [:decl="texture_sample";arg="g_index_i32"] - expected: FAIL - - [:decl="texture_sample";arg="g_index_f32"] - expected: FAIL - - [:decl="texture_sample";arg="g_index_bool"] - expected: FAIL - - [:decl="texture_sample";arg="f_index_u32"] - expected: FAIL - - [:decl="texture_sample";arg="f_index_i32"] - expected: FAIL - - [:decl="texture_sample";arg="f_index_f32"] - expected: FAIL - - [:decl="texture_sample";arg="f_index_bool"] - expected: FAIL - - [:decl="texture_sample";arg="g_array_index_u32"] - expected: FAIL - - [:decl="texture_sample";arg="g_array_index_i32"] - expected: FAIL - - [:decl="texture_sample";arg="g_array_index_f32"] - expected: FAIL - - [:decl="texture_sample";arg="g_array_index_bool"] - expected: FAIL - - [:decl="texture_sample";arg="f_array_index_u32"] - expected: FAIL - - [:decl="texture_sample";arg="f_array_index_i32"] - expected: FAIL - - [:decl="texture_sample";arg="f_array_index_f32"] - expected: FAIL - - [:decl="texture_sample";arg="f_array_index_bool"] - expected: FAIL - - [:decl="texture_sample";arg="texture_sample"] - expected: FAIL - - [:decl="texture_sample";arg="texture_depth"] - expected: FAIL - - [:decl="texture_sample";arg="texture_multisampled"] - expected: FAIL - - [:decl="texture_sample";arg="texture_storage"] - expected: FAIL - - [:decl="texture_sample";arg="texture_external"] - expected: FAIL - - [:decl="texture_sample";arg="sampler"] - expected: FAIL - - [:decl="texture_sample";arg="sampler_comparison"] - expected: FAIL - - [:decl="texture_sample";arg="ptr1"] - expected: FAIL - - [:decl="texture_sample";arg="ptr2"] - expected: FAIL - - [:decl="texture_sample";arg="ptr3"] - expected: FAIL - - [:decl="texture_sample";arg="ptr4"] - expected: FAIL - - [:decl="texture_sample";arg="ptr5"] - expected: FAIL - - [:decl="texture_sample";arg="ptr6"] - expected: FAIL - - [:decl="texture_sample";arg="ptr7"] - expected: FAIL - - [:decl="texture_sample";arg="ptr8"] - expected: FAIL - - [:decl="texture_sample";arg="ptr9"] - expected: FAIL - - [:decl="texture_sample";arg="ptr10"] - expected: FAIL - - [:decl="texture_sample";arg="ptr11"] - expected: FAIL - - [:decl="texture_sample";arg="ptr12"] - expected: FAIL - - [:decl="texture_depth";arg="u32_literal"] - expected: FAIL - - [:decl="texture_depth";arg="i32_literal"] - expected: FAIL - - [:decl="texture_depth";arg="f32_literal"] - expected: FAIL - - [:decl="texture_depth";arg="bool_literal"] - expected: FAIL - - [:decl="texture_depth";arg="abstract_int_literal"] - expected: FAIL - - [:decl="texture_depth";arg="abstract_float_literal"] - expected: FAIL - - [:decl="texture_depth";arg="vec2u_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec2i_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec2f_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec2b_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec3u_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec3i_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec3f_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec3b_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec4u_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec4i_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec4f_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec4b_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="texture_depth";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="texture_depth";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="texture_depth";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="texture_depth";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="texture_depth";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="texture_depth";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="array1_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="array2_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="array3_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="array4_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="array5_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="struct1_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="struct2_constructor"] - expected: FAIL - - [:decl="texture_depth";arg="g_u32"] - expected: FAIL - - [:decl="texture_depth";arg="g_i32"] - expected: FAIL - - [:decl="texture_depth";arg="g_f32"] - expected: FAIL - - [:decl="texture_depth";arg="g_bool"] - expected: FAIL - - [:decl="texture_depth";arg="g_vec2"] - expected: FAIL - - [:decl="texture_depth";arg="g_vec3"] - expected: FAIL - - [:decl="texture_depth";arg="g_vec4"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat2x2"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat2x3"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat2x4"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat3x2"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat3x3"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat3x4"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat4x2"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat4x3"] - expected: FAIL - - [:decl="texture_depth";arg="g_mat4x4"] - expected: FAIL - - [:decl="texture_depth";arg="g_array1"] - expected: FAIL - - [:decl="texture_depth";arg="g_array2"] - expected: FAIL - - [:decl="texture_depth";arg="g_array3"] - expected: FAIL - - [:decl="texture_depth";arg="g_array4"] - expected: FAIL - - [:decl="texture_depth";arg="g_array5"] - expected: FAIL - - [:decl="texture_depth";arg="g_constructible"] - expected: FAIL - - [:decl="texture_depth";arg="g_struct_with_array"] - expected: FAIL - - [:decl="texture_depth";arg="f_u32"] - expected: FAIL - - [:decl="texture_depth";arg="f_i32"] - expected: FAIL - - [:decl="texture_depth";arg="f_f32"] - expected: FAIL - - [:decl="texture_depth";arg="f_bool"] - expected: FAIL - - [:decl="texture_depth";arg="f_vec2"] - expected: FAIL - - [:decl="texture_depth";arg="f_vec3"] - expected: FAIL - - [:decl="texture_depth";arg="f_vec4"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat2x2"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat2x3"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat2x4"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat3x2"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat3x3"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat3x4"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat4x2"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat4x3"] - expected: FAIL - - [:decl="texture_depth";arg="f_mat4x4"] - expected: FAIL - - [:decl="texture_depth";arg="f_array1"] - expected: FAIL - - [:decl="texture_depth";arg="f_array2"] - expected: FAIL - - [:decl="texture_depth";arg="f_array3"] - expected: FAIL - - [:decl="texture_depth";arg="f_array4"] - expected: FAIL - - [:decl="texture_depth";arg="f_array5"] - expected: FAIL - - [:decl="texture_depth";arg="f_constructible"] - expected: FAIL - - [:decl="texture_depth";arg="f_struct_with_array"] - expected: FAIL - - [:decl="texture_depth";arg="g_index_u32"] - expected: FAIL - - [:decl="texture_depth";arg="g_index_i32"] - expected: FAIL - - [:decl="texture_depth";arg="g_index_f32"] - expected: FAIL - - [:decl="texture_depth";arg="g_index_bool"] - expected: FAIL - - [:decl="texture_depth";arg="f_index_u32"] - expected: FAIL - - [:decl="texture_depth";arg="f_index_i32"] - expected: FAIL - - [:decl="texture_depth";arg="f_index_f32"] - expected: FAIL - - [:decl="texture_depth";arg="f_index_bool"] - expected: FAIL - - [:decl="texture_depth";arg="g_array_index_u32"] - expected: FAIL - - [:decl="texture_depth";arg="g_array_index_i32"] - expected: FAIL - - [:decl="texture_depth";arg="g_array_index_f32"] - expected: FAIL - - [:decl="texture_depth";arg="g_array_index_bool"] - expected: FAIL - - [:decl="texture_depth";arg="f_array_index_u32"] - expected: FAIL - - [:decl="texture_depth";arg="f_array_index_i32"] - expected: FAIL - - [:decl="texture_depth";arg="f_array_index_f32"] - expected: FAIL - - [:decl="texture_depth";arg="f_array_index_bool"] - expected: FAIL - - [:decl="texture_depth";arg="texture_sample"] - expected: FAIL - - [:decl="texture_depth";arg="texture_depth"] - expected: FAIL - - [:decl="texture_depth";arg="texture_multisampled"] - expected: FAIL - - [:decl="texture_depth";arg="texture_storage"] - expected: FAIL - - [:decl="texture_depth";arg="texture_external"] - expected: FAIL - - [:decl="texture_depth";arg="sampler"] - expected: FAIL - - [:decl="texture_depth";arg="sampler_comparison"] - expected: FAIL - - [:decl="texture_depth";arg="ptr1"] - expected: FAIL - - [:decl="texture_depth";arg="ptr2"] - expected: FAIL - - [:decl="texture_depth";arg="ptr3"] - expected: FAIL - - [:decl="texture_depth";arg="ptr4"] - expected: FAIL - - [:decl="texture_depth";arg="ptr5"] - expected: FAIL - - [:decl="texture_depth";arg="ptr6"] - expected: FAIL - - [:decl="texture_depth";arg="ptr7"] - expected: FAIL - - [:decl="texture_depth";arg="ptr8"] - expected: FAIL - - [:decl="texture_depth";arg="ptr9"] - expected: FAIL - - [:decl="texture_depth";arg="ptr10"] - expected: FAIL - - [:decl="texture_depth";arg="ptr11"] - expected: FAIL - - [:decl="texture_depth";arg="ptr12"] - expected: FAIL - - [:decl="texture_multisampled";arg="u32_literal"] - expected: FAIL - - [:decl="texture_multisampled";arg="i32_literal"] - expected: FAIL - - [:decl="texture_multisampled";arg="f32_literal"] - expected: FAIL - - [:decl="texture_multisampled";arg="bool_literal"] - expected: FAIL - - [:decl="texture_multisampled";arg="abstract_int_literal"] - expected: FAIL - - [:decl="texture_multisampled";arg="abstract_float_literal"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec2u_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec2i_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec2f_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec2b_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec3u_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec3i_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec3f_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec3b_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec4u_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec4i_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec4f_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec4b_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="texture_multisampled";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="array1_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="array2_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="array3_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="array4_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="array5_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="struct1_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="struct2_constructor"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_u32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_i32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_f32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_bool"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_vec2"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_vec3"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_vec4"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat2x2"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat2x3"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat2x4"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat3x2"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat3x3"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat3x4"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat4x2"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat4x3"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_mat4x4"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array1"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array2"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array3"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array4"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array5"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_constructible"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_struct_with_array"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_u32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_i32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_f32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_bool"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_vec2"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_vec3"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_vec4"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat2x2"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat2x3"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat2x4"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat3x2"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat3x3"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat3x4"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat4x2"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat4x3"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_mat4x4"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array1"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array2"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array3"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array4"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array5"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_constructible"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_struct_with_array"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_index_u32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_index_i32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_index_f32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_index_bool"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_index_u32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_index_i32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_index_f32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_index_bool"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array_index_u32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array_index_i32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array_index_f32"] - expected: FAIL - - [:decl="texture_multisampled";arg="g_array_index_bool"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array_index_u32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array_index_i32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array_index_f32"] - expected: FAIL - - [:decl="texture_multisampled";arg="f_array_index_bool"] - expected: FAIL - - [:decl="texture_multisampled";arg="texture_sample"] - expected: FAIL - - [:decl="texture_multisampled";arg="texture_depth"] - expected: FAIL - - [:decl="texture_multisampled";arg="texture_multisampled"] - expected: FAIL - - [:decl="texture_multisampled";arg="texture_storage"] - expected: FAIL - - [:decl="texture_multisampled";arg="texture_external"] - expected: FAIL - - [:decl="texture_multisampled";arg="sampler"] - expected: FAIL - - [:decl="texture_multisampled";arg="sampler_comparison"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr1"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr2"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr3"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr4"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr5"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr6"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr7"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr8"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr9"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr10"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr11"] - expected: FAIL - - [:decl="texture_multisampled";arg="ptr12"] - expected: FAIL - - [:decl="texture_storage";arg="u32_literal"] - expected: FAIL - - [:decl="texture_storage";arg="i32_literal"] - expected: FAIL - - [:decl="texture_storage";arg="f32_literal"] - expected: FAIL - - [:decl="texture_storage";arg="bool_literal"] - expected: FAIL - - [:decl="texture_storage";arg="abstract_int_literal"] - expected: FAIL - - [:decl="texture_storage";arg="abstract_float_literal"] - expected: FAIL - - [:decl="texture_storage";arg="vec2u_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec2i_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec2f_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec2b_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec3u_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec3i_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec3f_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec3b_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec4u_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec4i_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec4f_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec4b_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="texture_storage";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="texture_storage";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="texture_storage";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="texture_storage";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="texture_storage";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="texture_storage";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="array1_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="array2_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="array3_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="array4_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="array5_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="struct1_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="struct2_constructor"] - expected: FAIL - - [:decl="texture_storage";arg="g_u32"] - expected: FAIL - - [:decl="texture_storage";arg="g_i32"] - expected: FAIL - - [:decl="texture_storage";arg="g_f32"] - expected: FAIL - - [:decl="texture_storage";arg="g_bool"] - expected: FAIL - - [:decl="texture_storage";arg="g_vec2"] - expected: FAIL - - [:decl="texture_storage";arg="g_vec3"] - expected: FAIL - - [:decl="texture_storage";arg="g_vec4"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat2x2"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat2x3"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat2x4"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat3x2"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat3x3"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat3x4"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat4x2"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat4x3"] - expected: FAIL - - [:decl="texture_storage";arg="g_mat4x4"] - expected: FAIL - - [:decl="texture_storage";arg="g_array1"] - expected: FAIL - - [:decl="texture_storage";arg="g_array2"] - expected: FAIL - - [:decl="texture_storage";arg="g_array3"] - expected: FAIL - - [:decl="texture_storage";arg="g_array4"] - expected: FAIL - - [:decl="texture_storage";arg="g_array5"] - expected: FAIL - - [:decl="texture_storage";arg="g_constructible"] - expected: FAIL - - [:decl="texture_storage";arg="g_struct_with_array"] - expected: FAIL - - [:decl="texture_storage";arg="f_u32"] - expected: FAIL - - [:decl="texture_storage";arg="f_i32"] - expected: FAIL - - [:decl="texture_storage";arg="f_f32"] - expected: FAIL - - [:decl="texture_storage";arg="f_bool"] - expected: FAIL - - [:decl="texture_storage";arg="f_vec2"] - expected: FAIL - - [:decl="texture_storage";arg="f_vec3"] - expected: FAIL - - [:decl="texture_storage";arg="f_vec4"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat2x2"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat2x3"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat2x4"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat3x2"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat3x3"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat3x4"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat4x2"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat4x3"] - expected: FAIL - - [:decl="texture_storage";arg="f_mat4x4"] - expected: FAIL - - [:decl="texture_storage";arg="f_array1"] - expected: FAIL - - [:decl="texture_storage";arg="f_array2"] - expected: FAIL - - [:decl="texture_storage";arg="f_array3"] - expected: FAIL - - [:decl="texture_storage";arg="f_array4"] - expected: FAIL - - [:decl="texture_storage";arg="f_array5"] - expected: FAIL - - [:decl="texture_storage";arg="f_constructible"] - expected: FAIL - - [:decl="texture_storage";arg="f_struct_with_array"] - expected: FAIL - - [:decl="texture_storage";arg="g_index_u32"] - expected: FAIL - - [:decl="texture_storage";arg="g_index_i32"] - expected: FAIL - - [:decl="texture_storage";arg="g_index_f32"] - expected: FAIL - - [:decl="texture_storage";arg="g_index_bool"] - expected: FAIL - - [:decl="texture_storage";arg="f_index_u32"] - expected: FAIL - - [:decl="texture_storage";arg="f_index_i32"] - expected: FAIL - - [:decl="texture_storage";arg="f_index_f32"] - expected: FAIL - - [:decl="texture_storage";arg="f_index_bool"] - expected: FAIL - - [:decl="texture_storage";arg="g_array_index_u32"] - expected: FAIL - - [:decl="texture_storage";arg="g_array_index_i32"] - expected: FAIL - - [:decl="texture_storage";arg="g_array_index_f32"] - expected: FAIL - - [:decl="texture_storage";arg="g_array_index_bool"] - expected: FAIL - - [:decl="texture_storage";arg="f_array_index_u32"] - expected: FAIL - - [:decl="texture_storage";arg="f_array_index_i32"] - expected: FAIL - - [:decl="texture_storage";arg="f_array_index_f32"] - expected: FAIL - - [:decl="texture_storage";arg="f_array_index_bool"] - expected: FAIL - - [:decl="texture_storage";arg="texture_sample"] - expected: FAIL - - [:decl="texture_storage";arg="texture_depth"] - expected: FAIL - - [:decl="texture_storage";arg="texture_multisampled"] - expected: FAIL - - [:decl="texture_storage";arg="texture_storage"] - expected: FAIL - - [:decl="texture_storage";arg="texture_external"] - expected: FAIL - - [:decl="texture_storage";arg="sampler"] - expected: FAIL - - [:decl="texture_storage";arg="sampler_comparison"] - expected: FAIL - - [:decl="texture_storage";arg="ptr1"] - expected: FAIL - - [:decl="texture_storage";arg="ptr2"] - expected: FAIL - - [:decl="texture_storage";arg="ptr3"] - expected: FAIL - - [:decl="texture_storage";arg="ptr4"] - expected: FAIL - - [:decl="texture_storage";arg="ptr5"] - expected: FAIL - - [:decl="texture_storage";arg="ptr6"] - expected: FAIL - - [:decl="texture_storage";arg="ptr7"] - expected: FAIL - - [:decl="texture_storage";arg="ptr8"] - expected: FAIL - - [:decl="texture_storage";arg="ptr9"] - expected: FAIL - - [:decl="texture_storage";arg="ptr10"] - expected: FAIL - - [:decl="texture_storage";arg="ptr11"] - expected: FAIL - - [:decl="texture_storage";arg="ptr12"] - expected: FAIL - - [:decl="sampler";arg="u32_literal"] - expected: FAIL - - [:decl="sampler";arg="i32_literal"] - expected: FAIL - - [:decl="sampler";arg="f32_literal"] - expected: FAIL - - [:decl="sampler";arg="bool_literal"] - expected: FAIL - - [:decl="sampler";arg="abstract_int_literal"] - expected: FAIL - - [:decl="sampler";arg="abstract_float_literal"] - expected: FAIL - - [:decl="sampler";arg="vec2u_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec2i_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec2f_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec2b_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec3u_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec3i_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec3f_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec3b_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec4u_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec4i_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec4f_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec4b_constructor"] - expected: FAIL - - [:decl="sampler";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="sampler";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="sampler";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="sampler";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="sampler";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="sampler";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="sampler";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="sampler";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="sampler";arg="array1_constructor"] - expected: FAIL - - [:decl="sampler";arg="array2_constructor"] - expected: FAIL - - [:decl="sampler";arg="array3_constructor"] - expected: FAIL - - [:decl="sampler";arg="array4_constructor"] - expected: FAIL - - [:decl="sampler";arg="array5_constructor"] - expected: FAIL - - [:decl="sampler";arg="struct1_constructor"] - expected: FAIL - - [:decl="sampler";arg="struct2_constructor"] - expected: FAIL - - [:decl="sampler";arg="g_u32"] - expected: FAIL - - [:decl="sampler";arg="g_i32"] - expected: FAIL - - [:decl="sampler";arg="g_f32"] - expected: FAIL - - [:decl="sampler";arg="g_bool"] - expected: FAIL - - [:decl="sampler";arg="g_vec2"] - expected: FAIL - - [:decl="sampler";arg="g_vec3"] - expected: FAIL - - [:decl="sampler";arg="g_vec4"] - expected: FAIL - - [:decl="sampler";arg="g_mat2x2"] - expected: FAIL - - [:decl="sampler";arg="g_mat2x3"] - expected: FAIL - - [:decl="sampler";arg="g_mat2x4"] - expected: FAIL - - [:decl="sampler";arg="g_mat3x2"] - expected: FAIL - - [:decl="sampler";arg="g_mat3x3"] - expected: FAIL - - [:decl="sampler";arg="g_mat3x4"] - expected: FAIL - - [:decl="sampler";arg="g_mat4x2"] - expected: FAIL - - [:decl="sampler";arg="g_mat4x3"] - expected: FAIL - - [:decl="sampler";arg="g_mat4x4"] - expected: FAIL - - [:decl="sampler";arg="g_array1"] - expected: FAIL - - [:decl="sampler";arg="g_array2"] - expected: FAIL - - [:decl="sampler";arg="g_array3"] - expected: FAIL - - [:decl="sampler";arg="g_array4"] - expected: FAIL - - [:decl="sampler";arg="g_array5"] - expected: FAIL - - [:decl="sampler";arg="g_constructible"] - expected: FAIL - - [:decl="sampler";arg="g_struct_with_array"] - expected: FAIL - - [:decl="sampler";arg="f_u32"] - expected: FAIL - - [:decl="sampler";arg="f_i32"] - expected: FAIL - - [:decl="sampler";arg="f_f32"] - expected: FAIL - - [:decl="sampler";arg="f_bool"] - expected: FAIL - - [:decl="sampler";arg="f_vec2"] - expected: FAIL - - [:decl="sampler";arg="f_vec3"] - expected: FAIL - - [:decl="sampler";arg="f_vec4"] - expected: FAIL - - [:decl="sampler";arg="f_mat2x2"] - expected: FAIL - - [:decl="sampler";arg="f_mat2x3"] - expected: FAIL - - [:decl="sampler";arg="f_mat2x4"] - expected: FAIL - - [:decl="sampler";arg="f_mat3x2"] - expected: FAIL - - [:decl="sampler";arg="f_mat3x3"] - expected: FAIL - - [:decl="sampler";arg="f_mat3x4"] - expected: FAIL - - [:decl="sampler";arg="f_mat4x2"] - expected: FAIL - - [:decl="sampler";arg="f_mat4x3"] - expected: FAIL - - [:decl="sampler";arg="f_mat4x4"] - expected: FAIL - - [:decl="sampler";arg="f_array1"] - expected: FAIL - - [:decl="sampler";arg="f_array2"] - expected: FAIL - - [:decl="sampler";arg="f_array3"] - expected: FAIL - - [:decl="sampler";arg="f_array4"] - expected: FAIL - - [:decl="sampler";arg="f_array5"] - expected: FAIL - - [:decl="sampler";arg="f_constructible"] - expected: FAIL - - [:decl="sampler";arg="f_struct_with_array"] - expected: FAIL - - [:decl="sampler";arg="g_index_u32"] - expected: FAIL - - [:decl="sampler";arg="g_index_i32"] - expected: FAIL - - [:decl="sampler";arg="g_index_f32"] - expected: FAIL - - [:decl="sampler";arg="g_index_bool"] - expected: FAIL - - [:decl="sampler";arg="f_index_u32"] - expected: FAIL - - [:decl="sampler";arg="f_index_i32"] - expected: FAIL - - [:decl="sampler";arg="f_index_f32"] - expected: FAIL - - [:decl="sampler";arg="f_index_bool"] - expected: FAIL - - [:decl="sampler";arg="g_array_index_u32"] - expected: FAIL - - [:decl="sampler";arg="g_array_index_i32"] - expected: FAIL - - [:decl="sampler";arg="g_array_index_f32"] - expected: FAIL - - [:decl="sampler";arg="g_array_index_bool"] - expected: FAIL - - [:decl="sampler";arg="f_array_index_u32"] - expected: FAIL - - [:decl="sampler";arg="f_array_index_i32"] - expected: FAIL - - [:decl="sampler";arg="f_array_index_f32"] - expected: FAIL - - [:decl="sampler";arg="f_array_index_bool"] - expected: FAIL - - [:decl="sampler";arg="texture_sample"] - expected: FAIL - - [:decl="sampler";arg="texture_depth"] - expected: FAIL - - [:decl="sampler";arg="texture_multisampled"] - expected: FAIL - - [:decl="sampler";arg="texture_storage"] - expected: FAIL - - [:decl="sampler";arg="texture_external"] - expected: FAIL - - [:decl="sampler";arg="sampler"] - expected: FAIL - - [:decl="sampler";arg="sampler_comparison"] - expected: FAIL - - [:decl="sampler";arg="ptr1"] - expected: FAIL - - [:decl="sampler";arg="ptr2"] - expected: FAIL - - [:decl="sampler";arg="ptr3"] - expected: FAIL - - [:decl="sampler";arg="ptr4"] - expected: FAIL - - [:decl="sampler";arg="ptr5"] - expected: FAIL - - [:decl="sampler";arg="ptr6"] - expected: FAIL - - [:decl="sampler";arg="ptr7"] - expected: FAIL - - [:decl="sampler";arg="ptr8"] - expected: FAIL - - [:decl="sampler";arg="ptr9"] - expected: FAIL - - [:decl="sampler";arg="ptr10"] - expected: FAIL - - [:decl="sampler";arg="ptr11"] - expected: FAIL - - [:decl="sampler";arg="ptr12"] - expected: FAIL - - [:decl="sampler_comparison";arg="u32_literal"] - expected: FAIL - - [:decl="sampler_comparison";arg="i32_literal"] - expected: FAIL - - [:decl="sampler_comparison";arg="f32_literal"] - expected: FAIL - - [:decl="sampler_comparison";arg="bool_literal"] - expected: FAIL - - [:decl="sampler_comparison";arg="abstract_int_literal"] - expected: FAIL - - [:decl="sampler_comparison";arg="abstract_float_literal"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec2u_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec2i_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec2f_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec2b_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec3u_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec3i_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec3f_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec3b_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec4u_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec4i_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec4f_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec4b_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="sampler_comparison";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="array1_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="array2_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="array3_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="array4_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="array5_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="struct1_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="struct2_constructor"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_u32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_i32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_f32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_bool"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_vec2"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_vec3"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_vec4"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat2x2"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat2x3"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat2x4"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat3x2"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat3x3"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat3x4"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat4x2"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat4x3"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_mat4x4"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array1"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array2"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array3"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array4"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array5"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_constructible"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_struct_with_array"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_u32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_i32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_f32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_bool"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_vec2"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_vec3"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_vec4"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat2x2"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat2x3"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat2x4"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat3x2"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat3x3"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat3x4"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat4x2"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat4x3"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_mat4x4"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array1"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array2"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array3"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array4"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array5"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_constructible"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_struct_with_array"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_index_u32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_index_i32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_index_f32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_index_bool"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_index_u32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_index_i32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_index_f32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_index_bool"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array_index_u32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array_index_i32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array_index_f32"] - expected: FAIL - - [:decl="sampler_comparison";arg="g_array_index_bool"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array_index_u32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array_index_i32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array_index_f32"] - expected: FAIL - - [:decl="sampler_comparison";arg="f_array_index_bool"] - expected: FAIL - - [:decl="sampler_comparison";arg="texture_sample"] - expected: FAIL - - [:decl="sampler_comparison";arg="texture_depth"] - expected: FAIL - - [:decl="sampler_comparison";arg="texture_multisampled"] - expected: FAIL - - [:decl="sampler_comparison";arg="texture_storage"] - expected: FAIL - - [:decl="sampler_comparison";arg="texture_external"] - expected: FAIL - - [:decl="sampler_comparison";arg="sampler"] - expected: FAIL - - [:decl="sampler_comparison";arg="sampler_comparison"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr1"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr2"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr3"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr4"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr5"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr6"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr7"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr8"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr9"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr10"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr11"] - expected: FAIL - - [:decl="sampler_comparison";arg="ptr12"] - expected: FAIL - - [:decl="ptr1";arg="u32_literal"] - expected: FAIL - - [:decl="ptr1";arg="i32_literal"] - expected: FAIL - - [:decl="ptr1";arg="f32_literal"] - expected: FAIL - - [:decl="ptr1";arg="bool_literal"] - expected: FAIL - - [:decl="ptr1";arg="abstract_int_literal"] - expected: FAIL - - [:decl="ptr1";arg="abstract_float_literal"] - expected: FAIL - - [:decl="ptr1";arg="vec2u_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec2i_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec2f_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec2b_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec3u_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec3i_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec3f_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec3b_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec4u_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec4i_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec4f_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec4b_constructor"] - expected: FAIL - - [:decl="ptr1";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="ptr1";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="ptr1";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="ptr1";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="ptr1";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="ptr1";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="ptr1";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="ptr1";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="ptr1";arg="array1_constructor"] - expected: FAIL - - [:decl="ptr1";arg="array2_constructor"] - expected: FAIL - - [:decl="ptr1";arg="array3_constructor"] - expected: FAIL - - [:decl="ptr1";arg="array4_constructor"] - expected: FAIL - - [:decl="ptr1";arg="array5_constructor"] - expected: FAIL - - [:decl="ptr1";arg="struct1_constructor"] - expected: FAIL - - [:decl="ptr1";arg="struct2_constructor"] - expected: FAIL - - [:decl="ptr1";arg="g_u32"] - expected: FAIL - - [:decl="ptr1";arg="g_i32"] - expected: FAIL - - [:decl="ptr1";arg="g_f32"] - expected: FAIL - - [:decl="ptr1";arg="g_bool"] - expected: FAIL - - [:decl="ptr1";arg="g_vec2"] - expected: FAIL - - [:decl="ptr1";arg="g_vec3"] - expected: FAIL - - [:decl="ptr1";arg="g_vec4"] - expected: FAIL - - [:decl="ptr1";arg="g_mat2x2"] - expected: FAIL - - [:decl="ptr1";arg="g_mat2x3"] - expected: FAIL - - [:decl="ptr1";arg="g_mat2x4"] - expected: FAIL - - [:decl="ptr1";arg="g_mat3x2"] - expected: FAIL - - [:decl="ptr1";arg="g_mat3x3"] - expected: FAIL - - [:decl="ptr1";arg="g_mat3x4"] - expected: FAIL - - [:decl="ptr1";arg="g_mat4x2"] - expected: FAIL - - [:decl="ptr1";arg="g_mat4x3"] - expected: FAIL - - [:decl="ptr1";arg="g_mat4x4"] - expected: FAIL - - [:decl="ptr1";arg="g_array1"] - expected: FAIL - - [:decl="ptr1";arg="g_array2"] - expected: FAIL - - [:decl="ptr1";arg="g_array3"] - expected: FAIL - - [:decl="ptr1";arg="g_array4"] - expected: FAIL - - [:decl="ptr1";arg="g_array5"] - expected: FAIL - - [:decl="ptr1";arg="g_constructible"] - expected: FAIL - - [:decl="ptr1";arg="g_struct_with_array"] - expected: FAIL - - [:decl="ptr1";arg="f_u32"] - expected: FAIL - - [:decl="ptr1";arg="f_i32"] - expected: FAIL - - [:decl="ptr1";arg="f_f32"] - expected: FAIL - - [:decl="ptr1";arg="f_bool"] - expected: FAIL - - [:decl="ptr1";arg="f_vec2"] - expected: FAIL - - [:decl="ptr1";arg="f_vec3"] - expected: FAIL - - [:decl="ptr1";arg="f_vec4"] - expected: FAIL - - [:decl="ptr1";arg="f_mat2x2"] - expected: FAIL - - [:decl="ptr1";arg="f_mat2x3"] - expected: FAIL - - [:decl="ptr1";arg="f_mat2x4"] - expected: FAIL - - [:decl="ptr1";arg="f_mat3x2"] - expected: FAIL - - [:decl="ptr1";arg="f_mat3x3"] - expected: FAIL - - [:decl="ptr1";arg="f_mat3x4"] - expected: FAIL - - [:decl="ptr1";arg="f_mat4x2"] - expected: FAIL - - [:decl="ptr1";arg="f_mat4x3"] - expected: FAIL - - [:decl="ptr1";arg="f_mat4x4"] - expected: FAIL - - [:decl="ptr1";arg="f_array1"] - expected: FAIL - - [:decl="ptr1";arg="f_array2"] - expected: FAIL - - [:decl="ptr1";arg="f_array3"] - expected: FAIL - - [:decl="ptr1";arg="f_array4"] - expected: FAIL - - [:decl="ptr1";arg="f_array5"] - expected: FAIL - - [:decl="ptr1";arg="f_constructible"] - expected: FAIL - - [:decl="ptr1";arg="f_struct_with_array"] - expected: FAIL - - [:decl="ptr1";arg="g_index_u32"] - expected: FAIL - - [:decl="ptr1";arg="g_index_i32"] - expected: FAIL - - [:decl="ptr1";arg="g_index_f32"] - expected: FAIL - - [:decl="ptr1";arg="g_index_bool"] - expected: FAIL - - [:decl="ptr1";arg="f_index_u32"] - expected: FAIL - - [:decl="ptr1";arg="f_index_i32"] - expected: FAIL - - [:decl="ptr1";arg="f_index_f32"] - expected: FAIL - - [:decl="ptr1";arg="f_index_bool"] - expected: FAIL - - [:decl="ptr1";arg="g_array_index_u32"] - expected: FAIL - - [:decl="ptr1";arg="g_array_index_i32"] - expected: FAIL - - [:decl="ptr1";arg="g_array_index_f32"] - expected: FAIL - - [:decl="ptr1";arg="g_array_index_bool"] - expected: FAIL - - [:decl="ptr1";arg="f_array_index_u32"] - expected: FAIL - - [:decl="ptr1";arg="f_array_index_i32"] - expected: FAIL - - [:decl="ptr1";arg="f_array_index_f32"] - expected: FAIL - - [:decl="ptr1";arg="f_array_index_bool"] - expected: FAIL - - [:decl="ptr1";arg="texture_sample"] - expected: FAIL - - [:decl="ptr1";arg="texture_depth"] - expected: FAIL - - [:decl="ptr1";arg="texture_multisampled"] - expected: FAIL - - [:decl="ptr1";arg="texture_storage"] - expected: FAIL - - [:decl="ptr1";arg="texture_external"] - expected: FAIL - - [:decl="ptr1";arg="sampler"] - expected: FAIL - - [:decl="ptr1";arg="sampler_comparison"] - expected: FAIL - - [:decl="ptr1";arg="ptr1"] - expected: FAIL - - [:decl="ptr1";arg="ptr2"] - expected: FAIL - - [:decl="ptr1";arg="ptr3"] - expected: FAIL - - [:decl="ptr1";arg="ptr4"] - expected: FAIL - - [:decl="ptr1";arg="ptr5"] - expected: FAIL - - [:decl="ptr1";arg="ptr6"] - expected: FAIL - - [:decl="ptr1";arg="ptr7"] - expected: FAIL - - [:decl="ptr1";arg="ptr8"] - expected: FAIL - - [:decl="ptr1";arg="ptr9"] - expected: FAIL - - [:decl="ptr1";arg="ptr10"] - expected: FAIL - - [:decl="ptr1";arg="ptr11"] - expected: FAIL - - [:decl="ptr1";arg="ptr12"] - expected: FAIL - - [:decl="ptr2";arg="u32_literal"] - expected: FAIL - - [:decl="ptr2";arg="i32_literal"] - expected: FAIL - - [:decl="ptr2";arg="f32_literal"] - expected: FAIL - - [:decl="ptr2";arg="bool_literal"] - expected: FAIL - - [:decl="ptr2";arg="abstract_int_literal"] - expected: FAIL - - [:decl="ptr2";arg="abstract_float_literal"] - expected: FAIL - - [:decl="ptr2";arg="vec2u_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec2i_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec2f_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec2b_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec3u_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec3i_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec3f_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec3b_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec4u_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec4i_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec4f_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec4b_constructor"] - expected: FAIL - - [:decl="ptr2";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="ptr2";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="ptr2";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="ptr2";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="ptr2";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="ptr2";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="ptr2";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="ptr2";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="ptr2";arg="array1_constructor"] - expected: FAIL - - [:decl="ptr2";arg="array2_constructor"] - expected: FAIL - - [:decl="ptr2";arg="array3_constructor"] - expected: FAIL - - [:decl="ptr2";arg="array4_constructor"] - expected: FAIL - - [:decl="ptr2";arg="array5_constructor"] - expected: FAIL - - [:decl="ptr2";arg="struct1_constructor"] - expected: FAIL - - [:decl="ptr2";arg="struct2_constructor"] - expected: FAIL - - [:decl="ptr2";arg="g_u32"] - expected: FAIL - - [:decl="ptr2";arg="g_i32"] - expected: FAIL - - [:decl="ptr2";arg="g_f32"] - expected: FAIL - - [:decl="ptr2";arg="g_bool"] - expected: FAIL - - [:decl="ptr2";arg="g_vec2"] - expected: FAIL - - [:decl="ptr2";arg="g_vec3"] - expected: FAIL - - [:decl="ptr2";arg="g_vec4"] - expected: FAIL - - [:decl="ptr2";arg="g_mat2x2"] - expected: FAIL - - [:decl="ptr2";arg="g_mat2x3"] - expected: FAIL - - [:decl="ptr2";arg="g_mat2x4"] - expected: FAIL - - [:decl="ptr2";arg="g_mat3x2"] - expected: FAIL - - [:decl="ptr2";arg="g_mat3x3"] - expected: FAIL - - [:decl="ptr2";arg="g_mat3x4"] - expected: FAIL - - [:decl="ptr2";arg="g_mat4x2"] - expected: FAIL - - [:decl="ptr2";arg="g_mat4x3"] - expected: FAIL - - [:decl="ptr2";arg="g_mat4x4"] - expected: FAIL - - [:decl="ptr2";arg="g_array1"] - expected: FAIL - - [:decl="ptr2";arg="g_array2"] - expected: FAIL - - [:decl="ptr2";arg="g_array3"] - expected: FAIL - - [:decl="ptr2";arg="g_array4"] - expected: FAIL - - [:decl="ptr2";arg="g_array5"] - expected: FAIL - - [:decl="ptr2";arg="g_constructible"] - expected: FAIL - - [:decl="ptr2";arg="g_struct_with_array"] - expected: FAIL - - [:decl="ptr2";arg="f_u32"] - expected: FAIL - - [:decl="ptr2";arg="f_i32"] - expected: FAIL - - [:decl="ptr2";arg="f_f32"] - expected: FAIL - - [:decl="ptr2";arg="f_bool"] - expected: FAIL - - [:decl="ptr2";arg="f_vec2"] - expected: FAIL - - [:decl="ptr2";arg="f_vec3"] - expected: FAIL - - [:decl="ptr2";arg="f_vec4"] - expected: FAIL - - [:decl="ptr2";arg="f_mat2x2"] - expected: FAIL - - [:decl="ptr2";arg="f_mat2x3"] - expected: FAIL - - [:decl="ptr2";arg="f_mat2x4"] - expected: FAIL - - [:decl="ptr2";arg="f_mat3x2"] - expected: FAIL - - [:decl="ptr2";arg="f_mat3x3"] - expected: FAIL - - [:decl="ptr2";arg="f_mat3x4"] - expected: FAIL - - [:decl="ptr2";arg="f_mat4x2"] - expected: FAIL - - [:decl="ptr2";arg="f_mat4x3"] - expected: FAIL - - [:decl="ptr2";arg="f_mat4x4"] - expected: FAIL - - [:decl="ptr2";arg="f_array1"] - expected: FAIL - - [:decl="ptr2";arg="f_array2"] - expected: FAIL - - [:decl="ptr2";arg="f_array3"] - expected: FAIL - - [:decl="ptr2";arg="f_array4"] - expected: FAIL - - [:decl="ptr2";arg="f_array5"] - expected: FAIL - - [:decl="ptr2";arg="f_constructible"] - expected: FAIL - - [:decl="ptr2";arg="f_struct_with_array"] - expected: FAIL - - [:decl="ptr2";arg="g_index_u32"] - expected: FAIL - - [:decl="ptr2";arg="g_index_i32"] - expected: FAIL - - [:decl="ptr2";arg="g_index_f32"] - expected: FAIL - - [:decl="ptr2";arg="g_index_bool"] - expected: FAIL - - [:decl="ptr2";arg="f_index_u32"] - expected: FAIL - - [:decl="ptr2";arg="f_index_i32"] - expected: FAIL - - [:decl="ptr2";arg="f_index_f32"] - expected: FAIL - - [:decl="ptr2";arg="f_index_bool"] - expected: FAIL - - [:decl="ptr2";arg="g_array_index_u32"] - expected: FAIL - - [:decl="ptr2";arg="g_array_index_i32"] - expected: FAIL - - [:decl="ptr2";arg="g_array_index_f32"] - expected: FAIL - - [:decl="ptr2";arg="g_array_index_bool"] - expected: FAIL - - [:decl="ptr2";arg="f_array_index_u32"] - expected: FAIL - - [:decl="ptr2";arg="f_array_index_i32"] - expected: FAIL - - [:decl="ptr2";arg="f_array_index_f32"] - expected: FAIL - - [:decl="ptr2";arg="f_array_index_bool"] - expected: FAIL - - [:decl="ptr2";arg="texture_sample"] - expected: FAIL - - [:decl="ptr2";arg="texture_depth"] - expected: FAIL - - [:decl="ptr2";arg="texture_multisampled"] - expected: FAIL - - [:decl="ptr2";arg="texture_storage"] - expected: FAIL - - [:decl="ptr2";arg="texture_external"] - expected: FAIL - - [:decl="ptr2";arg="sampler"] - expected: FAIL - - [:decl="ptr2";arg="sampler_comparison"] - expected: FAIL - - [:decl="ptr2";arg="ptr1"] - expected: FAIL - - [:decl="ptr2";arg="ptr2"] - expected: FAIL - - [:decl="ptr2";arg="ptr3"] - expected: FAIL - - [:decl="ptr2";arg="ptr4"] - expected: FAIL - - [:decl="ptr2";arg="ptr5"] - expected: FAIL - - [:decl="ptr2";arg="ptr6"] - expected: FAIL - - [:decl="ptr2";arg="ptr7"] - expected: FAIL - - [:decl="ptr2";arg="ptr8"] - expected: FAIL - - [:decl="ptr2";arg="ptr9"] - expected: FAIL - - [:decl="ptr2";arg="ptr10"] - expected: FAIL - - [:decl="ptr2";arg="ptr11"] - expected: FAIL - - [:decl="ptr2";arg="ptr12"] - expected: FAIL - - [:decl="ptr3";arg="u32_literal"] - expected: FAIL - - [:decl="ptr3";arg="i32_literal"] - expected: FAIL - - [:decl="ptr3";arg="f32_literal"] - expected: FAIL - - [:decl="ptr3";arg="bool_literal"] - expected: FAIL - - [:decl="ptr3";arg="abstract_int_literal"] - expected: FAIL - - [:decl="ptr3";arg="abstract_float_literal"] - expected: FAIL - - [:decl="ptr3";arg="vec2u_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec2i_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec2f_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec2b_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec3u_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec3i_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec3f_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec3b_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec4u_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec4i_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec4f_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec4b_constructor"] - expected: FAIL - - [:decl="ptr3";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="ptr3";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="ptr3";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="ptr3";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="ptr3";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="ptr3";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="ptr3";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="ptr3";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="ptr3";arg="array1_constructor"] - expected: FAIL - - [:decl="ptr3";arg="array2_constructor"] - expected: FAIL - - [:decl="ptr3";arg="array3_constructor"] - expected: FAIL - - [:decl="ptr3";arg="array4_constructor"] - expected: FAIL - - [:decl="ptr3";arg="array5_constructor"] - expected: FAIL - - [:decl="ptr3";arg="struct1_constructor"] - expected: FAIL - - [:decl="ptr3";arg="struct2_constructor"] - expected: FAIL - - [:decl="ptr3";arg="g_u32"] - expected: FAIL - - [:decl="ptr3";arg="g_i32"] - expected: FAIL - - [:decl="ptr3";arg="g_f32"] - expected: FAIL - - [:decl="ptr3";arg="g_bool"] - expected: FAIL - - [:decl="ptr3";arg="g_vec2"] - expected: FAIL - - [:decl="ptr3";arg="g_vec3"] - expected: FAIL - - [:decl="ptr3";arg="g_vec4"] - expected: FAIL - - [:decl="ptr3";arg="g_mat2x2"] - expected: FAIL - - [:decl="ptr3";arg="g_mat2x3"] - expected: FAIL - - [:decl="ptr3";arg="g_mat2x4"] - expected: FAIL - - [:decl="ptr3";arg="g_mat3x2"] - expected: FAIL - - [:decl="ptr3";arg="g_mat3x3"] - expected: FAIL - - [:decl="ptr3";arg="g_mat3x4"] - expected: FAIL - - [:decl="ptr3";arg="g_mat4x2"] - expected: FAIL - - [:decl="ptr3";arg="g_mat4x3"] - expected: FAIL - - [:decl="ptr3";arg="g_mat4x4"] - expected: FAIL - - [:decl="ptr3";arg="g_array1"] - expected: FAIL - - [:decl="ptr3";arg="g_array2"] - expected: FAIL - - [:decl="ptr3";arg="g_array3"] - expected: FAIL - - [:decl="ptr3";arg="g_array4"] - expected: FAIL - - [:decl="ptr3";arg="g_array5"] - expected: FAIL - - [:decl="ptr3";arg="g_constructible"] - expected: FAIL - - [:decl="ptr3";arg="g_struct_with_array"] - expected: FAIL - - [:decl="ptr3";arg="f_u32"] - expected: FAIL - - [:decl="ptr3";arg="f_i32"] - expected: FAIL - - [:decl="ptr3";arg="f_f32"] - expected: FAIL - - [:decl="ptr3";arg="f_bool"] - expected: FAIL - - [:decl="ptr3";arg="f_vec2"] - expected: FAIL - - [:decl="ptr3";arg="f_vec3"] - expected: FAIL - - [:decl="ptr3";arg="f_vec4"] - expected: FAIL - - [:decl="ptr3";arg="f_mat2x2"] - expected: FAIL - - [:decl="ptr3";arg="f_mat2x3"] - expected: FAIL - - [:decl="ptr3";arg="f_mat2x4"] - expected: FAIL - - [:decl="ptr3";arg="f_mat3x2"] - expected: FAIL - - [:decl="ptr3";arg="f_mat3x3"] - expected: FAIL - - [:decl="ptr3";arg="f_mat3x4"] - expected: FAIL - - [:decl="ptr3";arg="f_mat4x2"] - expected: FAIL - - [:decl="ptr3";arg="f_mat4x3"] - expected: FAIL - - [:decl="ptr3";arg="f_mat4x4"] - expected: FAIL - - [:decl="ptr3";arg="f_array1"] - expected: FAIL - - [:decl="ptr3";arg="f_array2"] - expected: FAIL - - [:decl="ptr3";arg="f_array3"] - expected: FAIL - - [:decl="ptr3";arg="f_array4"] - expected: FAIL - - [:decl="ptr3";arg="f_array5"] - expected: FAIL - - [:decl="ptr3";arg="f_constructible"] - expected: FAIL - - [:decl="ptr3";arg="f_struct_with_array"] - expected: FAIL - - [:decl="ptr3";arg="g_index_u32"] - expected: FAIL - - [:decl="ptr3";arg="g_index_i32"] - expected: FAIL - - [:decl="ptr3";arg="g_index_f32"] - expected: FAIL - - [:decl="ptr3";arg="g_index_bool"] - expected: FAIL - - [:decl="ptr3";arg="f_index_u32"] - expected: FAIL - - [:decl="ptr3";arg="f_index_i32"] - expected: FAIL - - [:decl="ptr3";arg="f_index_f32"] - expected: FAIL - - [:decl="ptr3";arg="f_index_bool"] - expected: FAIL - - [:decl="ptr3";arg="g_array_index_u32"] - expected: FAIL - - [:decl="ptr3";arg="g_array_index_i32"] - expected: FAIL - - [:decl="ptr3";arg="g_array_index_f32"] - expected: FAIL - - [:decl="ptr3";arg="g_array_index_bool"] - expected: FAIL - - [:decl="ptr3";arg="f_array_index_u32"] - expected: FAIL - - [:decl="ptr3";arg="f_array_index_i32"] - expected: FAIL - - [:decl="ptr3";arg="f_array_index_f32"] - expected: FAIL - - [:decl="ptr3";arg="f_array_index_bool"] - expected: FAIL - - [:decl="ptr3";arg="texture_sample"] - expected: FAIL - - [:decl="ptr3";arg="texture_depth"] - expected: FAIL - - [:decl="ptr3";arg="texture_multisampled"] - expected: FAIL - - [:decl="ptr3";arg="texture_storage"] - expected: FAIL - - [:decl="ptr3";arg="texture_external"] - expected: FAIL - - [:decl="ptr3";arg="sampler"] - expected: FAIL - - [:decl="ptr3";arg="sampler_comparison"] - expected: FAIL - - [:decl="ptr3";arg="ptr1"] - expected: FAIL - - [:decl="ptr3";arg="ptr2"] - expected: FAIL - - [:decl="ptr3";arg="ptr3"] - expected: FAIL - - [:decl="ptr3";arg="ptr4"] - expected: FAIL - - [:decl="ptr3";arg="ptr5"] - expected: FAIL - - [:decl="ptr3";arg="ptr6"] - expected: FAIL - - [:decl="ptr3";arg="ptr7"] - expected: FAIL - - [:decl="ptr3";arg="ptr8"] - expected: FAIL - - [:decl="ptr3";arg="ptr9"] - expected: FAIL - - [:decl="ptr3";arg="ptr10"] - expected: FAIL - - [:decl="ptr3";arg="ptr11"] - expected: FAIL - - [:decl="ptr3";arg="ptr12"] - expected: FAIL - - [:decl="ptr4";arg="u32_literal"] - expected: FAIL - - [:decl="ptr4";arg="i32_literal"] - expected: FAIL - - [:decl="ptr4";arg="f32_literal"] - expected: FAIL - - [:decl="ptr4";arg="bool_literal"] - expected: FAIL - - [:decl="ptr4";arg="abstract_int_literal"] - expected: FAIL - - [:decl="ptr4";arg="abstract_float_literal"] - expected: FAIL - - [:decl="ptr4";arg="vec2u_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec2i_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec2f_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec2b_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec3u_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec3i_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec3f_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec3b_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec4u_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec4i_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec4f_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec4b_constructor"] - expected: FAIL - - [:decl="ptr4";arg="vec2_abstract_int"] - expected: FAIL - - [:decl="ptr4";arg="vec2_abstract_float"] - expected: FAIL - - [:decl="ptr4";arg="vec3_abstract_int"] - expected: FAIL - - [:decl="ptr4";arg="vec3_abstract_float"] - expected: FAIL - - [:decl="ptr4";arg="vec4_abstract_int"] - expected: FAIL - - [:decl="ptr4";arg="vec4_abstract_float"] - expected: FAIL - - [:decl="ptr4";arg="mat2x2_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat2x3_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat2x4_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat3x2_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat3x3_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat3x4_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat4x2_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat4x3_constructor"] - expected: FAIL - - [:decl="ptr4";arg="mat4x4_constructor"] - expected: FAIL - - [:decl="ptr4";arg="array1_constructor"] - expected: FAIL - - [:decl="ptr4";arg="array2_constructor"] - expected: FAIL - - [:decl="ptr4";arg="array3_constructor"] - expected: FAIL - - [:decl="ptr4";arg="array4_constructor"] - expected: FAIL - - [:decl="ptr4";arg="array5_constructor"] - expected: FAIL - - [:decl="ptr4";arg="struct1_constructor"] - expected: FAIL - - [:decl="ptr4";arg="struct2_constructor"] - expected: FAIL - - [:decl="ptr4";arg="g_u32"] - expected: FAIL - - [:decl="ptr4";arg="g_i32"] - expected: FAIL - - [:decl="ptr4";arg="g_f32"] - expected: FAIL - - [:decl="ptr4";arg="g_bool"] - expected: FAIL - - [:decl="ptr4";arg="g_vec2"] - expected: FAIL - - [:decl="ptr4";arg="g_vec3"] - expected: FAIL - - [:decl="ptr4";arg="g_vec4"] - expected: FAIL - - [:decl="ptr4";arg="g_mat2x2"] - expected: FAIL - - [:decl="ptr4";arg="g_mat2x3"] - expected: FAIL - - [:decl="ptr4";arg="g_mat2x4"] - expected: FAIL - - [:decl="ptr4";arg="g_mat3x2"] - expected: FAIL - - [:decl="ptr4";arg="g_mat3x3"] - expected: FAIL - - [:decl="ptr4";arg="g_mat3x4"] - expected: FAIL - - [:decl="ptr4";arg="g_mat4x2"] - expected: FAIL - - [:decl="ptr4";arg="g_mat4x3"] - expected: FAIL - - [:decl="ptr4";arg="g_mat4x4"] - expected: FAIL - - [:decl="ptr4";arg="g_array1"] - expected: FAIL - - [:decl="ptr4";arg="g_array2"] - expected: FAIL - - [:decl="ptr4";arg="g_array3"] - expected: FAIL - - [:decl="ptr4";arg="g_array4"] - expected: FAIL - - [:decl="ptr4";arg="g_array5"] - expected: FAIL - - [:decl="ptr4";arg="g_constructible"] - expected: FAIL - - [:decl="ptr4";arg="g_struct_with_array"] - expected: FAIL - - [:decl="ptr4";arg="f_u32"] - expected: FAIL - - [:decl="ptr4";arg="f_i32"] - expected: FAIL - - [:decl="ptr4";arg="f_f32"] - expected: FAIL - - [:decl="ptr4";arg="f_bool"] - expected: FAIL - - [:decl="ptr4";arg="f_vec2"] - expected: FAIL - - [:decl="ptr4";arg="f_vec3"] - expected: FAIL - - [:decl="ptr4";arg="f_vec4"] - expected: FAIL - - [:decl="ptr4";arg="f_mat2x2"] - expected: FAIL - - [:decl="ptr4";arg="f_mat2x3"] - expected: FAIL - - [:decl="ptr4";arg="f_mat2x4"] - expected: FAIL - - [:decl="ptr4";arg="f_mat3x2"] - expected: FAIL - - [:decl="ptr4";arg="f_mat3x3"] - expected: FAIL - - [:decl="ptr4";arg="f_mat3x4"] - expected: FAIL - - [:decl="ptr4";arg="f_mat4x2"] - expected: FAIL - - [:decl="ptr4";arg="f_mat4x3"] - expected: FAIL - - [:decl="ptr4";arg="f_mat4x4"] - expected: FAIL - - [:decl="ptr4";arg="f_array1"] - expected: FAIL - - [:decl="ptr4";arg="f_array2"] - expected: FAIL - - [:decl="ptr4";arg="f_array3"] - expected: FAIL - - [:decl="ptr4";arg="f_array4"] - expected: FAIL - - [:decl="ptr4";arg="f_array5"] - expected: FAIL - - [:decl="ptr4";arg="f_constructible"] - expected: FAIL - - [:decl="ptr4";arg="f_struct_with_array"] - expected: FAIL - - [:decl="ptr4";arg="g_index_u32"] - expected: FAIL - - [:decl="ptr4";arg="g_index_i32"] - expected: FAIL - - [:decl="ptr4";arg="g_index_f32"] - expected: FAIL - - [:decl="ptr4";arg="g_index_bool"] - expected: FAIL - - [:decl="ptr4";arg="f_index_u32"] - expected: FAIL - - [:decl="ptr4";arg="f_index_i32"] - expected: FAIL - - [:decl="ptr4";arg="f_index_f32"] - expected: FAIL - - [:decl="ptr4";arg="f_index_bool"] - expected: FAIL - - [:decl="ptr4";arg="g_array_index_u32"] - expected: FAIL - - [:decl="ptr4";arg="g_array_index_i32"] - expected: FAIL - - [:decl="ptr4";arg="g_array_index_f32"] - expected: FAIL - - [:decl="ptr4";arg="g_array_index_bool"] - expected: FAIL - - [:decl="ptr4";arg="f_array_index_u32"] - expected: FAIL - - [:decl="ptr4";arg="f_array_index_i32"] - expected: FAIL - - [:decl="ptr4";arg="f_array_index_f32"] - expected: FAIL - - [:decl="ptr4";arg="f_array_index_bool"] - expected: FAIL - - [:decl="ptr4";arg="texture_sample"] - expected: FAIL - - [:decl="ptr4";arg="texture_depth"] - expected: FAIL - - [:decl="ptr4";arg="texture_multisampled"] - expected: FAIL - - [:decl="ptr4";arg="texture_storage"] - expected: FAIL - - [:decl="ptr4";arg="texture_external"] - expected: FAIL - - [:decl="ptr4";arg="sampler"] - expected: FAIL - - [:decl="ptr4";arg="sampler_comparison"] - expected: FAIL - - [:decl="ptr4";arg="ptr1"] - expected: FAIL - - [:decl="ptr4";arg="ptr2"] - expected: FAIL - - [:decl="ptr4";arg="ptr3"] - expected: FAIL - - [:decl="ptr4";arg="ptr4"] - expected: FAIL - - [:decl="ptr4";arg="ptr5"] - expected: FAIL - - [:decl="ptr4";arg="ptr6"] - expected: FAIL - - [:decl="ptr4";arg="ptr7"] - expected: FAIL - - [:decl="ptr4";arg="ptr8"] - expected: FAIL - - [:decl="ptr4";arg="ptr9"] - expected: FAIL - - [:decl="ptr4";arg="ptr10"] - expected: FAIL - - [:decl="ptr4";arg="ptr11"] - expected: FAIL - - [:decl="ptr4";arg="ptr12"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:binary_expressions:*] - [:e1="literal";e2="literal";op="plus"] - expected: FAIL - - [:e1="literal";e2="literal";op="minus"] - expected: FAIL - - [:e1="literal";e2="literal";op="times"] - expected: FAIL - - [:e1="literal";e2="literal";op="div"] - expected: FAIL - - [:e1="literal";e2="literal";op="rem"] - expected: FAIL - - [:e1="literal";e2="literal";op="and"] - expected: FAIL - - [:e1="literal";e2="literal";op="or"] - expected: FAIL - - [:e1="literal";e2="literal";op="xor"] - expected: FAIL - - [:e1="literal";e2="literal";op="shl"] - expected: FAIL - - [:e1="literal";e2="literal";op="shr"] - expected: FAIL - - [:e1="literal";e2="literal";op="less"] - expected: FAIL - - [:e1="literal";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="literal";op="greater"] - expected: FAIL - - [:e1="literal";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="literal";op="equal"] - expected: FAIL - - [:e1="literal";e2="literal";op="notequal"] - expected: FAIL - - [:e1="literal";e2="uniform";op="plus"] - expected: FAIL - - [:e1="literal";e2="uniform";op="minus"] - expected: FAIL - - [:e1="literal";e2="uniform";op="times"] - expected: FAIL - - [:e1="literal";e2="uniform";op="div"] - expected: FAIL - - [:e1="literal";e2="uniform";op="rem"] - expected: FAIL - - [:e1="literal";e2="uniform";op="and"] - expected: FAIL - - [:e1="literal";e2="uniform";op="or"] - expected: FAIL - - [:e1="literal";e2="uniform";op="xor"] - expected: FAIL - - [:e1="literal";e2="uniform";op="shl"] - expected: FAIL - - [:e1="literal";e2="uniform";op="shr"] - expected: FAIL - - [:e1="literal";e2="uniform";op="less"] - expected: FAIL - - [:e1="literal";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="uniform";op="greater"] - expected: FAIL - - [:e1="literal";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="uniform";op="equal"] - expected: FAIL - - [:e1="literal";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="literal";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="literal";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="literal";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="literal";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="literal";op="plus"] - expected: FAIL - - [:e1="uniform";e2="literal";op="minus"] - expected: FAIL - - [:e1="uniform";e2="literal";op="times"] - expected: FAIL - - [:e1="uniform";e2="literal";op="div"] - expected: FAIL - - [:e1="uniform";e2="literal";op="rem"] - expected: FAIL - - [:e1="uniform";e2="literal";op="and"] - expected: FAIL - - [:e1="uniform";e2="literal";op="or"] - expected: FAIL - - [:e1="uniform";e2="literal";op="xor"] - expected: FAIL - - [:e1="uniform";e2="literal";op="shl"] - expected: FAIL - - [:e1="uniform";e2="literal";op="shr"] - expected: FAIL - - [:e1="uniform";e2="literal";op="less"] - expected: FAIL - - [:e1="uniform";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="literal";op="greater"] - expected: FAIL - - [:e1="uniform";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="literal";op="equal"] - expected: FAIL - - [:e1="uniform";e2="literal";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="plus"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="minus"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="times"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="div"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="rem"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="and"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="or"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="xor"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="shl"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="shr"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="less"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="greater"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="equal"] - expected: FAIL - - [:e1="uniform";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="uniform";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="uniform";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="uniform";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="literal";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="literal";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="uniform_index";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="literal";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform_index1";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="literal";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform_index2";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="literal";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="uniform_struct";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="literal";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_index";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index1";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_index2";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="uniform_struct";op="notequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="plus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="minus"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="times"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="div"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="rem"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="and"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="or"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="xor"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="shl"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="shr"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="less"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="lessequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="greater"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="greaterequal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="equal"] - expected: FAIL - - [:e1="nonuniform_struct";e2="nonuniform_struct";op="notequal"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_scope_is_function_body:*] - [:use="body"] - expected: FAIL - - [:use="var"] - expected: FAIL - - [:use="const"] - expected: FAIL - - [:use="override"] - expected: FAIL - - [:use="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:subcalls:*] - [:a_use="no_access";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_struct_attribute:*] - [:target="i32";attribute="align"] - expected: FAIL - - [:target="i32";attribute="location"] - expected: FAIL - - [:target="i32";attribute="size"] - expected: FAIL - - [:target="S";attribute="align"] - expected: FAIL - - [:target="S";attribute="location"] - expected: FAIL - - [:target="S";attribute="size"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_type_nonconstructible:*] - [:var="s";direction="to"] - expected: FAIL - - [:var="s";direction="from"] - expected: FAIL - - [:var="t";direction="to"] - expected: FAIL - - [:var="t";direction="from"] - expected: FAIL - - [:var="b";direction="to"] - expected: FAIL - - [:var="b";direction="from"] - expected: FAIL - - [:var="p";direction="to"] - expected: FAIL - - [:var="p";direction="from"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_array_element:*] - [:target="i32"] - expected: FAIL - - [:target="S"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:unary_expressions:*] - [:e="literal";op="!b_tmp"] - expected: FAIL - - [:e="literal";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="literal";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="uniform";op="!b_tmp"] - expected: FAIL - - [:e="uniform";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="uniform";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="nonuniform";op="!b_tmp"] - expected: FAIL - - [:e="nonuniform";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="nonuniform";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="uniform_index";op="!b_tmp"] - expected: FAIL - - [:e="uniform_index";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="uniform_index";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="nonuniform_index1";op="!b_tmp"] - expected: FAIL - - [:e="nonuniform_index1";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="nonuniform_index1";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="nonuniform_index2";op="!b_tmp"] - expected: FAIL - - [:e="nonuniform_index2";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="nonuniform_index2";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="uniform_struct";op="!b_tmp"] - expected: FAIL - - [:e="uniform_struct";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="uniform_struct";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - [:e="nonuniform_struct";op="!b_tmp"] - expected: FAIL - - [:e="nonuniform_struct";op="~i_tmp%20%3E%200"] - expected: FAIL - - [:e="nonuniform_struct";op="-i32(i_tmp)%20%3E%200"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_return_types:*] - [:case="u32"] - expected: FAIL - - [:case="i32"] - expected: FAIL - - [:case="f32"] - expected: FAIL - - [:case="bool"] - expected: FAIL - - [:case="vec2"] - expected: FAIL - - [:case="vec3"] - expected: FAIL - - [:case="vec4"] - expected: FAIL - - [:case="mat2x2"] - expected: FAIL - - [:case="mat2x3"] - expected: FAIL - - [:case="mat2x4"] - expected: FAIL - - [:case="mat3x2"] - expected: FAIL - - [:case="mat3x3"] - expected: FAIL - - [:case="mat3x4"] - expected: FAIL - - [:case="mat4x2"] - expected: FAIL - - [:case="mat4x3"] - expected: FAIL - - [:case="mat4x4"] - expected: FAIL - - [:case="array1"] - expected: FAIL - - [:case="array2"] - expected: FAIL - - [:case="array3"] - expected: FAIL - - [:case="array4"] - expected: FAIL - - [:case="array5"] - expected: FAIL - - [:case="struct1"] - expected: FAIL - - [:case="struct2"] - expected: FAIL - - [:case="runtime_array"] - expected: FAIL - - [:case="runtime_struct"] - expected: FAIL - - [:case="override_array"] - expected: FAIL - - [:case="atomic_u32"] - expected: FAIL - - [:case="atomic_struct"] - expected: FAIL - - [:case="texture_sample"] - expected: FAIL - - [:case="texture_depth"] - expected: FAIL - - [:case="texture_multisampled"] - expected: FAIL - - [:case="texture_storage"] - expected: FAIL - - [:case="sampler"] - expected: FAIL - - [:case="sampler_comparison"] - expected: FAIL - - [:case="ptr"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:different_entry_points:*] - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="vertex";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="fragment";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="vertex";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="fragment";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="storage";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_2d";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="texture_external";b_kind="uniform";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_3d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="texture_storage_1d";usage="transitive"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="direct"] - expected: FAIL - - [:a_stage="compute";b_stage="compute";a_kind="uniform";b_kind="uniform";usage="transitive"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_storage_advanced:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,render_pipeline,vertex_state:maxVertexAttributesVertexIndexInstanceIndex:*] - [:useVertexIndex=false;useInstanceIndex=false;numAttribsToReserve=0;isAsync=false] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=false;numAttribsToReserve=0;isAsync=true] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=false;numAttribsToReserve=1;isAsync=false] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=false;numAttribsToReserve=1;isAsync=true] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=false;numAttribsToReserve=2;isAsync=false] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=false;numAttribsToReserve=2;isAsync=true] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=true;numAttribsToReserve=0;isAsync=false] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=true;numAttribsToReserve=0;isAsync=true] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=true;numAttribsToReserve=1;isAsync=false] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=true;numAttribsToReserve=1;isAsync=true] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=true;numAttribsToReserve=2;isAsync=false] - expected: FAIL - - [:useVertexIndex=false;useInstanceIndex=true;numAttribsToReserve=2;isAsync=true] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=false;numAttribsToReserve=0;isAsync=false] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=false;numAttribsToReserve=0;isAsync=true] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=false;numAttribsToReserve=1;isAsync=false] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=false;numAttribsToReserve=1;isAsync=true] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=false;numAttribsToReserve=2;isAsync=false] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=false;numAttribsToReserve=2;isAsync=true] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=true;numAttribsToReserve=0;isAsync=false] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=true;numAttribsToReserve=0;isAsync=true] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=true;numAttribsToReserve=1;isAsync=false] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=true;numAttribsToReserve=1;isAsync=true] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=true;numAttribsToReserve=2;isAsync=false] - expected: FAIL - - [:useVertexIndex=true;useInstanceIndex=true;numAttribsToReserve=2;isAsync=true] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,must_use:builtin_must_use:*] - [:call="u32";use=true] - expected: FAIL - - [:call="u32";use=false] - expected: FAIL - - [:call="i32";use=true] - expected: FAIL - - [:call="i32";use=false] - expected: FAIL - - [:call="struct";use=true] - expected: FAIL - - [:call="struct";use=false] - expected: FAIL - - [:call="bitcast";use=true] - expected: FAIL - - [:call="bitcast";use=false] - expected: FAIL - - [:call="all";use=true] - expected: FAIL - - [:call="all";use=false] - expected: FAIL - - [:call="any";use=true] - expected: FAIL - - [:call="any";use=false] - expected: FAIL - - [:call="select";use=true] - expected: FAIL - - [:call="select";use=false] - expected: FAIL - - [:call="arrayLength";use=true] - expected: FAIL - - [:call="arrayLength";use=false] - expected: FAIL - - [:call="abs";use=true] - expected: FAIL - - [:call="abs";use=false] - expected: FAIL - - [:call="acos";use=true] - expected: FAIL - - [:call="acos";use=false] - expected: FAIL - - [:call="acosh";use=true] - expected: FAIL - - [:call="acosh";use=false] - expected: FAIL - - [:call="asin";use=true] - expected: FAIL - - [:call="asin";use=false] - expected: FAIL - - [:call="asinh";use=true] - expected: FAIL - - [:call="asinh";use=false] - expected: FAIL - - [:call="atan";use=true] - expected: FAIL - - [:call="atan";use=false] - expected: FAIL - - [:call="atanh";use=true] - expected: FAIL - - [:call="atanh";use=false] - expected: FAIL - - [:call="atan2";use=true] - expected: FAIL - - [:call="atan2";use=false] - expected: FAIL - - [:call="ceil";use=true] - expected: FAIL - - [:call="ceil";use=false] - expected: FAIL - - [:call="clamp";use=true] - expected: FAIL - - [:call="clamp";use=false] - expected: FAIL - - [:call="cos";use=true] - expected: FAIL - - [:call="cos";use=false] - expected: FAIL - - [:call="cosh";use=true] - expected: FAIL - - [:call="cosh";use=false] - expected: FAIL - - [:call="countLeadingZeros";use=true] - expected: FAIL - - [:call="countLeadingZeros";use=false] - expected: FAIL - - [:call="countOneBits";use=true] - expected: FAIL - - [:call="countOneBits";use=false] - expected: FAIL - - [:call="countTrailingZeros";use=true] - expected: FAIL - - [:call="countTrailingZeros";use=false] - expected: FAIL - - [:call="cross";use=true] - expected: FAIL - - [:call="cross";use=false] - expected: FAIL - - [:call="degrees";use=true] - expected: FAIL - - [:call="degrees";use=false] - expected: FAIL - - [:call="determinant";use=true] - expected: FAIL - - [:call="determinant";use=false] - expected: FAIL - - [:call="distance";use=true] - expected: FAIL - - [:call="distance";use=false] - expected: FAIL - - [:call="dot";use=true] - expected: FAIL - - [:call="dot";use=false] - expected: FAIL - - [:call="exp";use=true] - expected: FAIL - - [:call="exp";use=false] - expected: FAIL - - [:call="exp2";use=true] - expected: FAIL - - [:call="exp2";use=false] - expected: FAIL - - [:call="extractBits";use=true] - expected: FAIL - - [:call="extractBits";use=false] - expected: FAIL - - [:call="faceForward";use=true] - expected: FAIL - - [:call="faceForward";use=false] - expected: FAIL - - [:call="firstLeadingBit";use=true] - expected: FAIL - - [:call="firstLeadingBit";use=false] - expected: FAIL - - [:call="firstTrailingBit";use=true] - expected: FAIL - - [:call="firstTrailingBit";use=false] - expected: FAIL - - [:call="floor";use=true] - expected: FAIL - - [:call="floor";use=false] - expected: FAIL - - [:call="fma";use=true] - expected: FAIL - - [:call="fma";use=false] - expected: FAIL - - [:call="fract";use=true] - expected: FAIL - - [:call="fract";use=false] - expected: FAIL - - [:call="frexp";use=true] - expected: FAIL - - [:call="frexp";use=false] - expected: FAIL - - [:call="insertBits";use=true] - expected: FAIL - - [:call="insertBits";use=false] - expected: FAIL - - [:call="inverseSqrt";use=true] - expected: FAIL - - [:call="inverseSqrt";use=false] - expected: FAIL - - [:call="ldexp";use=true] - expected: FAIL - - [:call="ldexp";use=false] - expected: FAIL - - [:call="length";use=true] - expected: FAIL - - [:call="length";use=false] - expected: FAIL - - [:call="log";use=true] - expected: FAIL - - [:call="log";use=false] - expected: FAIL - - [:call="log2";use=true] - expected: FAIL - - [:call="log2";use=false] - expected: FAIL - - [:call="max";use=true] - expected: FAIL - - [:call="max";use=false] - expected: FAIL - - [:call="min";use=true] - expected: FAIL - - [:call="min";use=false] - expected: FAIL - - [:call="mix";use=true] - expected: FAIL - - [:call="mix";use=false] - expected: FAIL - - [:call="modf";use=true] - expected: FAIL - - [:call="modf";use=false] - expected: FAIL - - [:call="normalize";use=true] - expected: FAIL - - [:call="normalize";use=false] - expected: FAIL - - [:call="pow";use=true] - expected: FAIL - - [:call="pow";use=false] - expected: FAIL - - [:call="quantizeToF16";use=true] - expected: FAIL - - [:call="quantizeToF16";use=false] - expected: FAIL - - [:call="radians";use=true] - expected: FAIL - - [:call="radians";use=false] - expected: FAIL - - [:call="reflect";use=true] - expected: FAIL - - [:call="reflect";use=false] - expected: FAIL - - [:call="refract";use=true] - expected: FAIL - - [:call="refract";use=false] - expected: FAIL - - [:call="reverseBits";use=true] - expected: FAIL - - [:call="reverseBits";use=false] - expected: FAIL - - [:call="round";use=true] - expected: FAIL - - [:call="round";use=false] - expected: FAIL - - [:call="saturate";use=true] - expected: FAIL - - [:call="saturate";use=false] - expected: FAIL - - [:call="sign";use=true] - expected: FAIL - - [:call="sign";use=false] - expected: FAIL - - [:call="sin";use=true] - expected: FAIL - - [:call="sin";use=false] - expected: FAIL - - [:call="sinh";use=true] - expected: FAIL - - [:call="sinh";use=false] - expected: FAIL - - [:call="smoothstep";use=true] - expected: FAIL - - [:call="smoothstep";use=false] - expected: FAIL - - [:call="sqrt";use=true] - expected: FAIL - - [:call="sqrt";use=false] - expected: FAIL - - [:call="step";use=true] - expected: FAIL - - [:call="step";use=false] - expected: FAIL - - [:call="tan";use=true] - expected: FAIL - - [:call="tan";use=false] - expected: FAIL - - [:call="tanh";use=true] - expected: FAIL - - [:call="tanh";use=false] - expected: FAIL - - [:call="transpose";use=true] - expected: FAIL - - [:call="transpose";use=false] - expected: FAIL - - [:call="trunc";use=true] - expected: FAIL - - [:call="trunc";use=false] - expected: FAIL - - [:call="dpdx";use=true] - expected: FAIL - - [:call="dpdx";use=false] - expected: FAIL - - [:call="dpdxCoarse";use=true] - expected: FAIL - - [:call="dpdxCoarse";use=false] - expected: FAIL - - [:call="dpdxFine";use=true] - expected: FAIL - - [:call="dpdxFine";use=false] - expected: FAIL - - [:call="dpdy";use=true] - expected: FAIL - - [:call="dpdy";use=false] - expected: FAIL - - [:call="dpdyCoarse";use=true] - expected: FAIL - - [:call="dpdyCoarse";use=false] - expected: FAIL - - [:call="dpdyFine";use=true] - expected: FAIL - - [:call="dpdyFine";use=false] - expected: FAIL - - [:call="fwidth";use=true] - expected: FAIL - - [:call="fwidth";use=false] - expected: FAIL - - [:call="fwidthCoarse";use=true] - expected: FAIL - - [:call="fwidthCoarse";use=false] - expected: FAIL - - [:call="fwidthFine";use=true] - expected: FAIL - - [:call="fwidthFine";use=false] - expected: FAIL - - [:call="textureDimensions";use=true] - expected: FAIL - - [:call="textureDimensions";use=false] - expected: FAIL - - [:call="textureGather";use=true] - expected: FAIL - - [:call="textureGather";use=false] - expected: FAIL - - [:call="textureGatherCompare";use=true] - expected: FAIL - - [:call="textureGatherCompare";use=false] - expected: FAIL - - [:call="textureLoad";use=true] - expected: FAIL - - [:call="textureLoad";use=false] - expected: FAIL - - [:call="textureNumLayers";use=true] - expected: FAIL - - [:call="textureNumLayers";use=false] - expected: FAIL - - [:call="textureNumLevels";use=true] - expected: FAIL - - [:call="textureNumLevels";use=false] - expected: FAIL - - [:call="textureNumSamples";use=true] - expected: FAIL - - [:call="textureNumSamples";use=false] - expected: FAIL - - [:call="textureSample";use=true] - expected: FAIL - - [:call="textureSample";use=false] - expected: FAIL - - [:call="textureSampleBias";use=true] - expected: FAIL - - [:call="textureSampleBias";use=false] - expected: FAIL - - [:call="textureSampleCompare";use=true] - expected: FAIL - - [:call="textureSampleCompare";use=false] - expected: FAIL - - [:call="textureSampleCompareLevel";use=true] - expected: FAIL - - [:call="textureSampleCompareLevel";use=false] - expected: FAIL - - [:call="textureSampleGrad";use=true] - expected: FAIL - - [:call="textureSampleGrad";use=false] - expected: FAIL - - [:call="textureSampleLevel";use=true] - expected: FAIL - - [:call="textureSampleLevel";use=false] - expected: FAIL - - [:call="textureSampleBaseClampToEdge";use=true] - expected: FAIL - - [:call="textureSampleBaseClampToEdge";use=false] - expected: FAIL - - [:call="pack4x8snorm";use=true] - expected: FAIL - - [:call="pack4x8snorm";use=false] - expected: FAIL - - [:call="pack4x8unorm";use=true] - expected: FAIL - - [:call="pack4x8unorm";use=false] - expected: FAIL - - [:call="pack2x16snorm";use=true] - expected: FAIL - - [:call="pack2x16snorm";use=false] - expected: FAIL - - [:call="pack2x16unorm";use=true] - expected: FAIL - - [:call="pack2x16unorm";use=false] - expected: FAIL - - [:call="pack2x16float";use=true] - expected: FAIL - - [:call="pack2x16float";use=false] - expected: FAIL - - [:call="unpack4x8snorm";use=true] - expected: FAIL - - [:call="unpack4x8snorm";use=false] - expected: FAIL - - [:call="unpack4x8unorm";use=true] - expected: FAIL - - [:call="unpack4x8unorm";use=false] - expected: FAIL - - [:call="unpack2x16snorm";use=true] - expected: FAIL - - [:call="unpack2x16snorm";use=false] - expected: FAIL - - [:call="unpack2x16unorm";use=true] - expected: FAIL - - [:call="unpack2x16unorm";use=false] - expected: FAIL - - [:call="unpack2x16float";use=true] - expected: FAIL - - [:call="unpack2x16float";use=false] - expected: FAIL - - [:call="workgroupUniformLoad";use=true] - expected: FAIL - - [:call="workgroupUniformLoad";use=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:let_ptr_explicit_type_matches_var:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute";ptrStoreType="u32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:struct_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asinh:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:scalar:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan2:integer_argument_x:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_or_assert:*] - [:lhs="any_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cosh:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:mipmapFilter:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,ceil:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:magFilter,nearest:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:parsing:*] - [:attr="invariant"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="split_line"] - expected: FAIL - - [:attr="empty_parens"] - expected: FAIL - - [:attr="value"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="duplicate"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,modf:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:conflicting_attribute_different_location:*] - [:loc="compound";s1="off";s2="info"] - expected: FAIL - - [:loc="compound";s1="off";s2="warning"] - expected: FAIL - - [:loc="compound";s1="off";s2="error"] - expected: FAIL - - [:loc="compound";s1="info";s2="off"] - expected: FAIL - - [:loc="compound";s1="info";s2="warning"] - expected: FAIL - - [:loc="compound";s1="info";s2="error"] - expected: FAIL - - [:loc="compound";s1="warning";s2="off"] - expected: FAIL - - [:loc="compound";s1="warning";s2="info"] - expected: FAIL - - [:loc="compound";s1="warning";s2="error"] - expected: FAIL - - [:loc="compound";s1="error";s2="off"] - expected: FAIL - - [:loc="compound";s1="error";s2="info"] - expected: FAIL - - [:loc="compound";s1="error";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="warning"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,ceil:values:*] - [:stage="constant";type="abstract-float";value=-1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-4.0949166798167684e%2B178] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.577304530685975e%2B146] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-33184418306940492] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.2855213969343918e-16] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-2.8450654510496692e-146] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.0715264747573245e-178] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="abstract-float";value=-5e-324] - expected: FAIL - - [:stage="constant";type="abstract-float";value=0] - expected: FAIL - - [:stage="constant";type="abstract-float";value=5e-324] - expected: FAIL - - [:stage="constant";type="abstract-float";value=5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="abstract-float";value=6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="abstract-float";value=4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.0715264747573244e-178] - expected: FAIL - - [:stage="constant";type="abstract-float";value=2.8450654510496697e-146] - expected: FAIL - - [:stage="constant";type="abstract-float";value=7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="abstract-float";value=5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.2855213969343916e-16] - expected: FAIL - - [:stage="constant";type="abstract-float";value=33184418306940496] - expected: FAIL - - [:stage="constant";type="abstract-float";value=8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="abstract-float";value=2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="abstract-float";value=5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.5773045306859748e%2B146] - expected: FAIL - - [:stage="constant";type="abstract-float";value=4.094916679816769e%2B178] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="abstract-float";value=2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="abstract-float";value=7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="abstract-float";value=1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="f32";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="f32";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="f32";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="f32";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="f32";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="f32";value=-2669923195007533000] - expected: FAIL - - [:stage="constant";type="f32";value=-251846010601472] - expected: FAIL - - [:stage="constant";type="f32";value=-24413495296] - expected: FAIL - - [:stage="constant";type="f32";value=-2207528.25] - expected: FAIL - - [:stage="constant";type="f32";value=-215.5789337158203] - expected: FAIL - - [:stage="constant";type="f32";value=-0.02055920846760273] - expected: FAIL - - [:stage="constant";type="f32";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="f32";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="f32";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="f32";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="f32";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="f32";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="f32";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="f32";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="f32";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="f32";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="f32";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="f32";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="f32";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="f32";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="f32";value=0] - expected: FAIL - - [:stage="constant";type="f32";value=1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="f32";value=2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="f32";value=5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="f32";value=8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="f32";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="f32";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="f32";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="f32";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="f32";value=1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="f32";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="f32";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="f32";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="f32";value=1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="f32";value=0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="f32";value=0.02055920846760273] - expected: FAIL - - [:stage="constant";type="f32";value=215.5789337158203] - expected: FAIL - - [:stage="constant";type="f32";value=2207528.25] - expected: FAIL - - [:stage="constant";type="f32";value=24413495296] - expected: FAIL - - [:stage="constant";type="f32";value=251846010601472] - expected: FAIL - - [:stage="constant";type="f32";value=2669923195007533000] - expected: FAIL - - [:stage="constant";type="f32";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="f32";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="f32";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="f32";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="f32";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-4.0949166798167684e%2B178] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.577304530685975e%2B146] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-33184418306940492] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.2855213969343918e-16] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-2.8450654510496692e-146] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.0715264747573245e-178] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=-5e-324] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=0] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=5e-324] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.0715264747573244e-178] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=2.8450654510496697e-146] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.2855213969343916e-16] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=33184418306940496] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.5773045306859748e%2B146] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=4.094916679816769e%2B178] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E";value=1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-2669923195007533000] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-251846010601472] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-24413495296] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-2207528.25] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-215.5789337158203] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-0.02055920846760273] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=0] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=0.02055920846760273] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=215.5789337158203] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=2207528.25] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=24413495296] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=251846010601472] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=2669923195007533000] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-4.0949166798167684e%2B178] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.577304530685975e%2B146] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-33184418306940492] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.2855213969343918e-16] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-2.8450654510496692e-146] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.0715264747573245e-178] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=-5e-324] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=0] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=5e-324] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.0715264747573244e-178] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=2.8450654510496697e-146] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.2855213969343916e-16] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=33184418306940496] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.5773045306859748e%2B146] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=4.094916679816769e%2B178] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E";value=1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-2669923195007533000] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-251846010601472] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-24413495296] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-2207528.25] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-215.5789337158203] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-0.02055920846760273] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=0] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=0.02055920846760273] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=215.5789337158203] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=2207528.25] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=24413495296] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=251846010601472] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=2669923195007533000] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-4.0949166798167684e%2B178] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.577304530685975e%2B146] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-33184418306940492] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.2855213969343918e-16] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-2.8450654510496692e-146] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.0715264747573245e-178] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=-5e-324] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=0] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=5e-324] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=5.562684646268003e-309] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.1125369292536007e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.668805393880401e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=2.225073858507201e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=2.2250738585072014e-308] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=6.080654739755215e-276] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.603294291171316e-243] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=4.002298034305599e-211] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.0715264747573244e-178] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=2.8450654510496697e-146] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=7.181039640741541e-114] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.8864985793149357e-81] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=5.0416782741949625e-49] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.2855213969343916e-16] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=33184418306940496] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=8.922852101599196e%2B48] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=2.2965349774461225e%2B81] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=5.832533811966288e%2B113] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.5773045306859748e%2B146] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=4.094916679816769e%2B178] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.0243422545120516e%2B211] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=2.7851243441755008e%2B243] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=7.288907451054096e%2B275] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E";value=1.7976931348623157e%2B308] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-2669923195007533000] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-251846010601472] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-24413495296] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-2207528.25] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-215.5789337158203] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-0.02055920846760273] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=0] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.401298464324817e-45] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=2.938735877055719e-39] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=5.877471754111438e-39] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=8.816206229868692e-39] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.428519093203971e-26] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=1.838136587384298e-10] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=0.0000018571550981505425] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=0.02055920846760273] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=215.5789337158203] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=2207528.25] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=24413495296] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=251846010601472] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=2669923195007533000] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="f32";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="f32";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="f32";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="f32";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="f32";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="f32";value=-2669923195007533000] - expected: FAIL - - [:stage="override";type="f32";value=-251846010601472] - expected: FAIL - - [:stage="override";type="f32";value=-24413495296] - expected: FAIL - - [:stage="override";type="f32";value=-2207528.25] - expected: FAIL - - [:stage="override";type="f32";value=-215.5789337158203] - expected: FAIL - - [:stage="override";type="f32";value=-0.02055920846760273] - expected: FAIL - - [:stage="override";type="f32";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="f32";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="f32";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="f32";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="f32";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="f32";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="f32";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="f32";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="f32";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="f32";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="f32";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="f32";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="f32";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="f32";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="f32";value=0] - expected: FAIL - - [:stage="override";type="f32";value=1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="f32";value=2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="f32";value=5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="f32";value=8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="f32";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="f32";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="f32";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="f32";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="f32";value=1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="f32";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="f32";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="f32";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="f32";value=1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="f32";value=0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="f32";value=0.02055920846760273] - expected: FAIL - - [:stage="override";type="f32";value=215.5789337158203] - expected: FAIL - - [:stage="override";type="f32";value=2207528.25] - expected: FAIL - - [:stage="override";type="f32";value=24413495296] - expected: FAIL - - [:stage="override";type="f32";value=251846010601472] - expected: FAIL - - [:stage="override";type="f32";value=2669923195007533000] - expected: FAIL - - [:stage="override";type="f32";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="f32";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="f32";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="f32";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="f32";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-2669923195007533000] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-251846010601472] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-24413495296] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-2207528.25] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-215.5789337158203] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-0.02055920846760273] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=0] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=0.02055920846760273] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=215.5789337158203] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=2207528.25] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=24413495296] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=251846010601472] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=2669923195007533000] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-2669923195007533000] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-251846010601472] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-24413495296] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-2207528.25] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-215.5789337158203] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-0.02055920846760273] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=0] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=0.02055920846760273] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=215.5789337158203] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=2207528.25] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=24413495296] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=251846010601472] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=2669923195007533000] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E";value=3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-3.4028234663852886e%2B38] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-2669923195007533000] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-251846010601472] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-24413495296] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-2207528.25] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-215.5789337158203] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-0.02055920846760273] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=-1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=0] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.401298464324817e-45] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=2.938735877055719e-39] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=5.877471754111438e-39] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=8.816206229868692e-39] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.1754942106924411e-38] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.1754943508222875e-38] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.3177414502693954e-34] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.3701267809399137e-30] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.428519093203971e-26] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.5603237040584277e-22] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.5977715246546182e-18] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.7202612354353872e-14] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=1.838136587384298e-10] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=0.0000018571550981505425] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=0.02055920846760273] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=215.5789337158203] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=2207528.25] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=24413495296] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=251846010601472] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=2669923195007533000] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=2.8831288209688517e%2B22] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=2.9319629499658658e%2B26] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=3.2024852974055647e%2B30] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=3.3886565974372464e%2B34] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E";value=3.4028234663852886e%2B38] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,inverseSqrt:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sqrt:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:aliasing_inside_function:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_param_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,video:copy_from_video:*] - [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp8-bt601.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv";sourceType="VideoElement";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv";sourceType="VideoElement";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv";sourceType="VideoFrame";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-theora-bt601.ogv";sourceType="VideoFrame";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4";sourceType="VideoElement";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-h264-bt601.mp4";sourceType="VideoFrame";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp9-bt601.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoElement";srcDoFlipYDuringCopy=false] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=true] - expected: FAIL - - [:videoName="four-colors-vp9-bt709.webm";sourceType="VideoFrame";srcDoFlipYDuringCopy=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:valid_params:*] - [:severity="off";rule="derivative_uniformity";type="attribute"] - expected: FAIL - - [:severity="off";rule="derivative_uniformity";type="directive"] - expected: FAIL - - [:severity="info";rule="derivative_uniformity";type="attribute"] - expected: FAIL - - [:severity="info";rule="derivative_uniformity";type="directive"] - expected: FAIL - - [:severity="warning";rule="derivative_uniformity";type="attribute"] - expected: FAIL - - [:severity="warning";rule="derivative_uniformity";type="directive"] - expected: FAIL - - [:severity="error";rule="derivative_uniformity";type="attribute"] - expected: FAIL - - [:severity="error";rule="derivative_uniformity";type="directive"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,ImageData:from_ImageData:*] - [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_storage_basic:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:conflicting_directive:*] - [:s1="off";s2="off"] - expected: FAIL - - [:s1="off";s2="info"] - expected: FAIL - - [:s1="off";s2="warning"] - expected: FAIL - - [:s1="off";s2="error"] - expected: FAIL - - [:s1="info";s2="off"] - expected: FAIL - - [:s1="info";s2="info"] - expected: FAIL - - [:s1="info";s2="warning"] - expected: FAIL - - [:s1="info";s2="error"] - expected: FAIL - - [:s1="warning";s2="off"] - expected: FAIL - - [:s1="warning";s2="info"] - expected: FAIL - - [:s1="warning";s2="warning"] - expected: FAIL - - [:s1="warning";s2="error"] - expected: FAIL - - [:s1="error";s2="off"] - expected: FAIL - - [:s1="error";s2="info"] - expected: FAIL - - [:s1="error";s2="warning"] - expected: FAIL - - [:s1="error";s2="error"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_fract:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_nonmatching_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,af_assignment:abstract:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:write_access:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acosh:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_multiplication:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:alias_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_storage_advanced:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_array_element:*] - [:target="i32"] - expected: FAIL - - [:target="A"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:private_function_scope:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_struct_member_nested_in_alias:*] - [:target="i32"] - expected: FAIL - - [:target="A"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:less_than:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,texture,createTexture:unsupportedTextureViewFormats:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_struct_member:*] - [:target="i32"] - expected: FAIL - - [:target="S"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:read_access:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,exp:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicStore:store_workgroup_advanced:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_storage_advanced:*] - [:workgroupSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;scalarType="i32"] - expected: FAIL - - [:workgroupSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;scalarType="i32"] - expected: FAIL - - [:workgroupSize=128;scalarType="u32"] - expected: FAIL - - [:workgroupSize=128;scalarType="i32"] - expected: FAIL - - [:workgroupSize=256;scalarType="u32"] - expected: FAIL - - [:workgroupSize=256;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,const:no_direct_recursion:*] - [:target="a"] - expected: FAIL - - [:target="b"] - expected: FAIL +[cts.https.html?q=webgpu:shader,validation,parse,blankspace:blankspace:*] + expected: CRASH +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,length:f32_vec3:*] + expected: CRASH [cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicLoad:load_storage:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] expected: FAIL @@ -225719,31896 +52959,54 @@ expected: FAIL -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:function_pointer_parameters:*] - [:case="pointer_uniform_passthrough_value"] - expected: FAIL - - [:case="pointer_nonuniform_passthrough_value"] - expected: FAIL - - [:case="pointer_store_uniform_value"] - expected: FAIL - - [:case="pointer_store_nonuniform_value"] - expected: FAIL - - [:case="pointer_depends_on_nonpointer_param_uniform"] - expected: FAIL - - [:case="pointer_depends_on_nonpointer_param_nonuniform"] - expected: FAIL - - [:case="pointer_depends_on_pointer_param_uniform"] - expected: FAIL - - [:case="pointer_depends_on_pointer_param_nonuniform"] - expected: FAIL - - [:case="pointer_codependent1"] - expected: FAIL - - [:case="pointer_codependent2"] - expected: FAIL - - [:case="pointer_codependent3"] - expected: FAIL - - [:case="pointer_codependent4"] - expected: FAIL - - [:case="uniform_param_uniform_assignment"] - expected: FAIL - - [:case="uniform_param_nonuniform_assignment"] - expected: FAIL - - [:case="nonuniform_param_uniform_assignment"] - expected: FAIL - - [:case="nonuniform_param_nonuniform_assignment"] - expected: FAIL - - [:case="required_uniform_success"] - expected: FAIL - - [:case="required_uniform_failure"] - expected: FAIL - - [:case="uniform_conditional_call_assign_uniform"] - expected: FAIL - - [:case="uniform_conditional_call_assign_nonuniform1"] - expected: FAIL - - [:case="uniform_conditional_call_assign_nonuniform2"] - expected: FAIL - - [:case="nonuniform_conditional_call_assign_uniform"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:function_variables:*] - [:case="no_assign";init="no_init"] - expected: FAIL - - [:case="no_assign";init="uniform"] - expected: FAIL - - [:case="no_assign";init="nonuniform"] - expected: FAIL - - [:case="simple_uniform";init="no_init"] - expected: FAIL - - [:case="simple_uniform";init="uniform"] - expected: FAIL - - [:case="simple_uniform";init="nonuniform"] - expected: FAIL - - [:case="simple_nonuniform";init="no_init"] - expected: FAIL - - [:case="simple_nonuniform";init="uniform"] - expected: FAIL - - [:case="simple_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="compound_assign_uniform";init="no_init"] - expected: FAIL - - [:case="compound_assign_uniform";init="uniform"] - expected: FAIL - - [:case="compound_assign_uniform";init="nonuniform"] - expected: FAIL - - [:case="compound_assign_nonuniform";init="no_init"] - expected: FAIL - - [:case="compound_assign_nonuniform";init="uniform"] - expected: FAIL - - [:case="compound_assign_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="unreachable_uniform";init="no_init"] - expected: FAIL - - [:case="unreachable_uniform";init="uniform"] - expected: FAIL - - [:case="unreachable_uniform";init="nonuniform"] - expected: FAIL - - [:case="unreachable_nonuniform";init="no_init"] - expected: FAIL - - [:case="unreachable_nonuniform";init="uniform"] - expected: FAIL - - [:case="unreachable_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="if_no_else_uniform";init="no_init"] - expected: FAIL - - [:case="if_no_else_uniform";init="uniform"] - expected: FAIL - - [:case="if_no_else_uniform";init="nonuniform"] - expected: FAIL - - [:case="if_no_else_nonuniform";init="no_init"] - expected: FAIL - - [:case="if_no_else_nonuniform";init="uniform"] - expected: FAIL - - [:case="if_no_else_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="if_no_then_uniform";init="no_init"] - expected: FAIL - - [:case="if_no_then_uniform";init="uniform"] - expected: FAIL - - [:case="if_no_then_uniform";init="nonuniform"] - expected: FAIL - - [:case="if_no_then_nonuniform";init="no_init"] - expected: FAIL - - [:case="if_no_then_nonuniform";init="uniform"] - expected: FAIL - - [:case="if_no_then_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="if_else_uniform";init="no_init"] - expected: FAIL - - [:case="if_else_uniform";init="uniform"] - expected: FAIL - - [:case="if_else_uniform";init="nonuniform"] - expected: FAIL - - [:case="if_else_nonuniform";init="no_init"] - expected: FAIL - - [:case="if_else_nonuniform";init="uniform"] - expected: FAIL - - [:case="if_else_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="if_else_split";init="no_init"] - expected: FAIL - - [:case="if_else_split";init="uniform"] - expected: FAIL - - [:case="if_else_split";init="nonuniform"] - expected: FAIL - - [:case="if_unreachable_else_none";init="no_init"] - expected: FAIL - - [:case="if_unreachable_else_none";init="uniform"] - expected: FAIL - - [:case="if_unreachable_else_none";init="nonuniform"] - expected: FAIL - - [:case="if_unreachable_else_uniform";init="no_init"] - expected: FAIL - - [:case="if_unreachable_else_uniform";init="uniform"] - expected: FAIL - - [:case="if_unreachable_else_uniform";init="nonuniform"] - expected: FAIL - - [:case="if_unreachable_else_nonuniform";init="no_init"] - expected: FAIL - - [:case="if_unreachable_else_nonuniform";init="uniform"] - expected: FAIL - - [:case="if_unreachable_else_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="if_unreachable_then_none";init="no_init"] - expected: FAIL - - [:case="if_unreachable_then_none";init="uniform"] - expected: FAIL - - [:case="if_unreachable_then_none";init="nonuniform"] - expected: FAIL - - [:case="if_unreachable_then_uniform";init="no_init"] - expected: FAIL - - [:case="if_unreachable_then_uniform";init="uniform"] - expected: FAIL - - [:case="if_unreachable_then_uniform";init="nonuniform"] - expected: FAIL - - [:case="if_unreachable_then_nonuniform";init="no_init"] - expected: FAIL - - [:case="if_unreachable_then_nonuniform";init="uniform"] - expected: FAIL - - [:case="if_unreachable_then_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="if_nonescaping_nonuniform";init="no_init"] - expected: FAIL - - [:case="if_nonescaping_nonuniform";init="uniform"] - expected: FAIL - - [:case="if_nonescaping_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="loop_body_depends_on_continuing_uniform";init="no_init"] - expected: FAIL - - [:case="loop_body_depends_on_continuing_uniform";init="uniform"] - expected: FAIL - - [:case="loop_body_depends_on_continuing_uniform";init="nonuniform"] - expected: FAIL - - [:case="loop_body_depends_on_continuing_nonuniform";init="no_init"] - expected: FAIL - - [:case="loop_body_depends_on_continuing_nonuniform";init="uniform"] - expected: FAIL - - [:case="loop_body_depends_on_continuing_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="loop_body_uniform";init="no_init"] - expected: FAIL - - [:case="loop_body_uniform";init="uniform"] - expected: FAIL - - [:case="loop_body_uniform";init="nonuniform"] - expected: FAIL - - [:case="loop_body_nonuniform";init="no_init"] - expected: FAIL - - [:case="loop_body_nonuniform";init="uniform"] - expected: FAIL - - [:case="loop_body_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="loop_body_nonuniform_cond";init="no_init"] - expected: FAIL - - [:case="loop_body_nonuniform_cond";init="uniform"] - expected: FAIL - - [:case="loop_body_nonuniform_cond";init="nonuniform"] - expected: FAIL - - [:case="loop_unreachable_continuing";init="no_init"] - expected: FAIL - - [:case="loop_unreachable_continuing";init="uniform"] - expected: FAIL - - [:case="loop_unreachable_continuing";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_uniform";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_uniform";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_uniform";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_nonuniform";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_nonuniform";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split1";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_split1";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split1";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split2";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_split2";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split2";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split3";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_split3";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split3";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split4";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_split4";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split4";init="nonuniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split5";init="no_init"] - expected: FAIL - - [:case="loop_continuing_from_body_split5";init="uniform"] - expected: FAIL - - [:case="loop_continuing_from_body_split5";init="nonuniform"] - expected: FAIL - - [:case="loop_in_loop_with_continue_uniform";init="no_init"] - expected: FAIL - - [:case="loop_in_loop_with_continue_uniform";init="uniform"] - expected: FAIL - - [:case="loop_in_loop_with_continue_uniform";init="nonuniform"] - expected: FAIL - - [:case="loop_in_loop_with_continue_nonuniform";init="no_init"] - expected: FAIL - - [:case="loop_in_loop_with_continue_nonuniform";init="uniform"] - expected: FAIL - - [:case="loop_in_loop_with_continue_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="after_loop_with_uniform_break_uniform";init="no_init"] - expected: FAIL - - [:case="after_loop_with_uniform_break_uniform";init="uniform"] - expected: FAIL - - [:case="after_loop_with_uniform_break_uniform";init="nonuniform"] - expected: FAIL - - [:case="after_loop_with_uniform_break_nonuniform";init="no_init"] - expected: FAIL - - [:case="after_loop_with_uniform_break_nonuniform";init="uniform"] - expected: FAIL - - [:case="after_loop_with_uniform_break_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="after_loop_with_nonuniform_break";init="no_init"] - expected: FAIL - - [:case="after_loop_with_nonuniform_break";init="uniform"] - expected: FAIL - - [:case="after_loop_with_nonuniform_break";init="nonuniform"] - expected: FAIL - - [:case="after_loop_with_uniform_breaks";init="no_init"] - expected: FAIL - - [:case="after_loop_with_uniform_breaks";init="uniform"] - expected: FAIL - - [:case="after_loop_with_uniform_breaks";init="nonuniform"] - expected: FAIL - - [:case="switch_uniform_case";init="no_init"] - expected: FAIL - - [:case="switch_uniform_case";init="uniform"] - expected: FAIL - - [:case="switch_uniform_case";init="nonuniform"] - expected: FAIL - - [:case="switch_nonuniform_case";init="no_init"] - expected: FAIL - - [:case="switch_nonuniform_case";init="uniform"] - expected: FAIL - - [:case="switch_nonuniform_case";init="nonuniform"] - expected: FAIL - - [:case="after_switch_all_uniform";init="no_init"] - expected: FAIL - - [:case="after_switch_all_uniform";init="uniform"] - expected: FAIL - - [:case="after_switch_all_uniform";init="nonuniform"] - expected: FAIL - - [:case="after_switch_some_assign";init="no_init"] - expected: FAIL - - [:case="after_switch_some_assign";init="uniform"] - expected: FAIL - - [:case="after_switch_some_assign";init="nonuniform"] - expected: FAIL - - [:case="after_switch_nonuniform";init="no_init"] - expected: FAIL - - [:case="after_switch_nonuniform";init="uniform"] - expected: FAIL - - [:case="after_switch_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="after_switch_with_break_nonuniform1";init="no_init"] - expected: FAIL - - [:case="after_switch_with_break_nonuniform1";init="uniform"] - expected: FAIL - - [:case="after_switch_with_break_nonuniform1";init="nonuniform"] - expected: FAIL - - [:case="after_switch_with_break_nonuniform2";init="no_init"] - expected: FAIL - - [:case="after_switch_with_break_nonuniform2";init="uniform"] - expected: FAIL - - [:case="after_switch_with_break_nonuniform2";init="nonuniform"] - expected: FAIL - - [:case="for_loop_uniform_body";init="no_init"] - expected: FAIL - - [:case="for_loop_uniform_body";init="uniform"] - expected: FAIL - - [:case="for_loop_uniform_body";init="nonuniform"] - expected: FAIL - - [:case="for_loop_nonuniform_body";init="no_init"] - expected: FAIL - - [:case="for_loop_nonuniform_body";init="uniform"] - expected: FAIL - - [:case="for_loop_nonuniform_body";init="nonuniform"] - expected: FAIL - - [:case="for_loop_uniform_body_no_condition";init="no_init"] - expected: FAIL - - [:case="for_loop_uniform_body_no_condition";init="uniform"] - expected: FAIL - - [:case="for_loop_uniform_body_no_condition";init="nonuniform"] - expected: FAIL - - [:case="for_loop_nonuniform_body_no_condition";init="no_init"] - expected: FAIL - - [:case="for_loop_nonuniform_body_no_condition";init="uniform"] - expected: FAIL - - [:case="for_loop_nonuniform_body_no_condition";init="nonuniform"] - expected: FAIL - - [:case="for_loop_uniform_increment";init="no_init"] - expected: FAIL - - [:case="for_loop_uniform_increment";init="uniform"] - expected: FAIL - - [:case="for_loop_uniform_increment";init="nonuniform"] - expected: FAIL - - [:case="for_loop_nonuniform_increment";init="no_init"] - expected: FAIL - - [:case="for_loop_nonuniform_increment";init="uniform"] - expected: FAIL - - [:case="for_loop_nonuniform_increment";init="nonuniform"] - expected: FAIL - - [:case="for_loop_uniform_init";init="no_init"] - expected: FAIL - - [:case="for_loop_uniform_init";init="uniform"] - expected: FAIL - - [:case="for_loop_uniform_init";init="nonuniform"] - expected: FAIL - - [:case="for_loop_nonuniform_init";init="no_init"] - expected: FAIL - - [:case="for_loop_nonuniform_init";init="uniform"] - expected: FAIL - - [:case="for_loop_nonuniform_init";init="nonuniform"] - expected: FAIL - - [:case="while_loop_uniform_body";init="no_init"] - expected: FAIL - - [:case="while_loop_uniform_body";init="uniform"] - expected: FAIL - - [:case="while_loop_uniform_body";init="nonuniform"] - expected: FAIL - - [:case="while_loop_nonuniform_body";init="no_init"] - expected: FAIL - - [:case="while_loop_nonuniform_body";init="uniform"] - expected: FAIL - - [:case="while_loop_nonuniform_body";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_uniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_uniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_uniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_nonuniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_nonuniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_all_members_uniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_all_members_uniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_all_members_uniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_all_members_nonuniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_all_members_nonuniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_all_members_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_single_element_struct_uniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_single_element_struct_uniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_single_element_struct_uniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_single_element_struct_nonuniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_single_element_struct_nonuniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_single_element_struct_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_single_element_array_uniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_single_element_array_uniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_single_element_array_uniform";init="nonuniform"] - expected: FAIL - - [:case="partial_assignment_single_element_array_nonuniform";init="no_init"] - expected: FAIL - - [:case="partial_assignment_single_element_array_nonuniform";init="uniform"] - expected: FAIL - - [:case="partial_assignment_single_element_array_nonuniform";init="nonuniform"] - expected: FAIL - - [:case="nested1";init="no_init"] - expected: FAIL - - [:case="nested1";init="uniform"] - expected: FAIL - - [:case="nested1";init="nonuniform"] - expected: FAIL - - [:case="nested2";init="no_init"] - expected: FAIL - - [:case="nested2";init="uniform"] - expected: FAIL - - [:case="nested2";init="nonuniform"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion_via_matrix_element:*] - [:target="f32"] - expected: FAIL - - [:target="M"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cosh:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_const_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,must_use:declaration:*] - [:test="var"] - expected: FAIL - - [:test="function_no_return"] - expected: FAIL - - [:test="function_scalar_return"] - expected: FAIL - - [:test="function_struct_return"] - expected: FAIL - - [:test="function_var"] - expected: FAIL - - [:test="function_call"] - expected: FAIL - - [:test="function_parameter"] - expected: FAIL - - [:test="empty_parameter"] - expected: FAIL - - [:test="parameter"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:let_ptr_writes:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="storage";explicitSpace=true;explicitAccess=true;accessMode="read_write";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute";inferPtrType=false;ptrStoreType="i32"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=true;accessMode="";stage="compute";inferPtrType=true;ptrStoreType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_and_no_assert:*] - [:lhs="any_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,cos:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_struct_attribute:*] - [:target="S1";attribute="align"] - expected: FAIL - - [:target="S1";attribute="location"] - expected: FAIL - - [:target="S1";attribute="size"] - expected: FAIL - - [:target="S2";attribute="align"] - expected: FAIL - - [:target="S2";attribute="location"] - expected: FAIL - - [:target="S2";attribute="size"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:invalid_locations:*] - [:type="attribute";location="module_var"] - expected: FAIL - - [:type="attribute";location="module_const"] - expected: FAIL - - [:type="attribute";location="module_override"] - expected: FAIL - - [:type="attribute";location="struct"] - expected: FAIL - - [:type="attribute";location="struct_member"] - expected: FAIL - - [:type="attribute";location="function_params"] - expected: FAIL - - [:type="attribute";location="function_var"] - expected: FAIL - - [:type="attribute";location="function_let"] - expected: FAIL - - [:type="attribute";location="function_const"] - expected: FAIL - - [:type="attribute";location="pre_else"] - expected: FAIL - - [:type="attribute";location="pre_default"] - expected: FAIL - - [:type="attribute";location="pre_case"] - expected: FAIL - - [:type="attribute";location="pre_continuing"] - expected: FAIL - - [:type="attribute";location="pre_for_params"] - expected: FAIL - - [:type="directive";location="module_var"] - expected: FAIL - - [:type="directive";location="module_const"] - expected: FAIL - - [:type="directive";location="module_override"] - expected: FAIL - - [:type="directive";location="struct"] - expected: FAIL - - [:type="directive";location="struct_member"] - expected: FAIL - - [:type="directive";location="function_params"] - expected: FAIL - - [:type="directive";location="function_var"] - expected: FAIL - - [:type="directive";location="function_let"] - expected: FAIL - - [:type="directive";location="function_const"] - expected: FAIL - - [:type="directive";location="pre_else"] - expected: FAIL - - [:type="directive";location="pre_default"] - expected: FAIL - - [:type="directive";location="pre_case"] - expected: FAIL - - [:type="directive";location="pre_continuing"] - expected: FAIL - - [:type="directive";location="pre_for_params"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_or_no_assert:*] - [:lhs="any_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_logical_and_assert:*] - [:lhs="any_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="any_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="binary_op_eq_const_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_float_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="const_eq_literal_int_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="literal_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="min_max_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_false";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_not_true";rhs="variable_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="any_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="literal_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="min_max_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_false";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_not_true";scope="function"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="module"] - expected: FAIL - - [:lhs="variable_true";rhs="variable_true";scope="function"] +[cts.https.html?q=webgpu:api,operation,rendering,color_target_state:color_write_mask,blending_disabled:*] + [:disabled=true] expected: FAIL [cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_const:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicExchange:exchange_workgroup_advanced:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_whole:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:function_var_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atan:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group:group:*] - [:attr="const_expr"] - expected: FAIL - - [:attr="override_expr"] - expected: FAIL - - [:attr="zero"] - expected: FAIL - - [:attr="one"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="split_line"] - expected: FAIL - - [:attr="trailing_comma"] - expected: FAIL - - [:attr="int_literal"] - expected: FAIL - - [:attr="uint_literal"] - expected: FAIL - - [:attr="hex_literal"] - expected: FAIL - - [:attr="negative"] - expected: FAIL - - [:attr="missing_value"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="multiple_values"] - expected: FAIL - - [:attr="f32_val_literal"] - expected: FAIL - - [:attr="f32_val"] - expected: FAIL - - [:attr="no_params"] - expected: FAIL - - [:attr="misspelling"] - expected: FAIL - - [:attr="multi_group"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:entry_point_call_target:*] - [:stage="%40fragment";entry_point="with"] - expected: FAIL - - [:stage="%40fragment";entry_point="without"] - expected: FAIL - - [:stage="%40vertex";entry_point="with"] - expected: FAIL - - [:stage="%40vertex";entry_point="without"] - expected: FAIL - - [:stage="%40compute%20%40workgroup_size(1,1,1)";entry_point="with"] - expected: FAIL - - [:stage="%40compute%20%40workgroup_size(1,1,1)";entry_point="without"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,id:id:*] - [:attr="zero"] - expected: FAIL - - [:attr="one"] - expected: FAIL - - [:attr="hex"] - expected: FAIL - - [:attr="trailing_comma"] - expected: FAIL - - [:attr="i32"] - expected: FAIL - - [:attr="ui32"] - expected: FAIL - - [:attr="largest"] - expected: FAIL - - [:attr="newline"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="const_expr"] - expected: FAIL - - [:attr="misspelling"] - expected: FAIL - - [:attr="empty"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="multi_value"] - expected: FAIL - - [:attr="overide_expr"] - expected: FAIL - - [:attr="f32_literal"] - expected: FAIL - - [:attr="f32"] - expected: FAIL - - [:attr="negative"] - expected: FAIL - - [:attr="too_large"] - expected: FAIL - - [:attr="no_params"] - expected: FAIL - - [:attr="duplicate"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxColorAttachments:validate,kMaxColorAttachmentsToTest:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:single_entry_point:*] - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="vertex";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="fragment";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="storage";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_2d";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="texture_external";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_3d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="texture_storage_1d";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=0;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=0;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=0;b_binding=3;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=0;usage="transitive"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="direct"] - expected: FAIL - - [:stage="compute";a_kind="uniform";b_kind="uniform";a_group=3;b_group=3;a_binding=3;b_binding=3;usage="transitive"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acosh:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group:group_without_binding:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:api,operation,sampling,filter_mode:minFilter,nearest:*] - [:format="r8unorm"] - expected: FAIL - - [:format="rg8unorm"] - expected: FAIL - - [:format="rgba8unorm"] - expected: FAIL - - [:format="rgba8unorm-srgb"] - expected: FAIL - - [:format="bgra8unorm"] - expected: FAIL - - [:format="bgra8unorm-srgb"] - expected: FAIL - - [:format="r16float"] - expected: FAIL - - [:format="rg16float"] - expected: FAIL - - [:format="rgba16float"] - expected: FAIL - - [:format="rgb10a2unorm"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:private_module_scope:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sqrt:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,round:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,sin:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,var_and_let:var_access_mode_bad_other_template_contents:*] - [:accessMode="read";prefix="storage,";suffix=",storage"] - expected: FAIL - - [:accessMode="read";prefix="storage,";suffix=",read"] - expected: FAIL - - [:accessMode="read";prefix="storage,";suffix=","] - expected: FAIL - - [:accessMode="read";prefix="storage,";suffix=""] - expected: FAIL - - [:accessMode="read";prefix="";suffix=",storage"] - expected: FAIL - - [:accessMode="read";prefix="";suffix=",read"] - expected: FAIL - - [:accessMode="read";prefix="";suffix=","] - expected: FAIL - - [:accessMode="read";prefix="";suffix=""] - expected: FAIL - - [:accessMode="read";prefix=",";suffix=",storage"] - expected: FAIL - - [:accessMode="read";prefix=",";suffix=",read"] - expected: FAIL - - [:accessMode="read";prefix=",";suffix=","] - expected: FAIL - - [:accessMode="read";prefix=",";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix="storage,";suffix=",storage"] - expected: FAIL - - [:accessMode="read_write";prefix="storage,";suffix=",read"] - expected: FAIL - - [:accessMode="read_write";prefix="storage,";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix="storage,";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix=",storage"] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix=",read"] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix=",storage"] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix=",read"] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix=""] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,length:vec3:*] - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createComputePipelineAsync:*] - [:valid=true;awaitLost=true] - expected: FAIL - - [:valid=true;awaitLost=false] - expected: FAIL - - [:valid=false;awaitLost=true] - expected: FAIL - - [:valid=false;awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log2:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,uniformity,uniformity:pointers:*] - [:case="address_uniform_literal"] - expected: FAIL - - [:case="address_uniform_value"] - expected: FAIL - - [:case="address_nonuniform_value"] - expected: FAIL - - [:case="address_uniform_chain"] - expected: FAIL - - [:case="address_nonuniform_chain1"] - expected: FAIL - - [:case="address_nonuniform_chain2"] - expected: FAIL - - [:case="wg_uniform_load_is_uniform"] - expected: FAIL - - [:case="contents_scalar_uniform1"] - expected: FAIL - - [:case="contents_scalar_uniform2"] - expected: FAIL - - [:case="contents_scalar_uniform3"] - expected: FAIL - - [:case="contents_scalar_nonuniform1"] - expected: FAIL - - [:case="contents_scalar_nonuniform2"] - expected: FAIL - - [:case="contents_scalar_alias_uniform"] - expected: FAIL - - [:case="contents_scalar_alias_nonuniform1"] - expected: FAIL - - [:case="contents_scalar_alias_nonuniform2"] - expected: FAIL - - [:case="contents_scalar_alias_nonuniform3"] - expected: FAIL - - [:case="contents_scalar_alias_nonuniform4"] - expected: FAIL - - [:case="contents_scalar_alias_nonuniform5"] - expected: FAIL - - [:case="contents_array_uniform_index"] - expected: FAIL - - [:case="contents_array_nonuniform_index1"] - expected: FAIL - - [:case="contents_array_nonuniform_index2"] - expected: FAIL - - [:case="contents_array_nonuniform_index3"] - expected: FAIL - - [:case="contents_struct_uniform"] - expected: FAIL - - [:case="contents_struct_nonuniform1"] - expected: FAIL - - [:case="contents_struct_nonuniform2"] - expected: FAIL - - [:case="contents_struct_nonuniform3"] - expected: FAIL - - [:case="contents_struct_chain_uniform"] - expected: FAIL - - [:case="contents_struct_chain_nonuniform1"] - expected: FAIL - - [:case="contents_struct_chain_nonuniform2"] - expected: FAIL - - [:case="contents_struct_chain_nonuniform3"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:conflicting_attribute_same_location:*] - [:loc="function";s1="off";s2="off"] - expected: FAIL - - [:loc="function";s1="off";s2="info"] - expected: FAIL - - [:loc="function";s1="off";s2="warning"] - expected: FAIL - - [:loc="function";s1="off";s2="error"] - expected: FAIL - - [:loc="function";s1="info";s2="off"] - expected: FAIL - - [:loc="function";s1="info";s2="info"] - expected: FAIL - - [:loc="function";s1="info";s2="warning"] - expected: FAIL - - [:loc="function";s1="info";s2="error"] - expected: FAIL - - [:loc="function";s1="warning";s2="off"] - expected: FAIL - - [:loc="function";s1="warning";s2="info"] - expected: FAIL - - [:loc="function";s1="warning";s2="warning"] - expected: FAIL - - [:loc="function";s1="warning";s2="error"] - expected: FAIL - - [:loc="function";s1="error";s2="off"] - expected: FAIL - - [:loc="function";s1="error";s2="info"] - expected: FAIL - - [:loc="function";s1="error";s2="warning"] - expected: FAIL - - [:loc="function";s1="error";s2="error"] - expected: FAIL - - [:loc="compound";s1="off";s2="off"] - expected: FAIL - - [:loc="compound";s1="off";s2="info"] - expected: FAIL - - [:loc="compound";s1="off";s2="warning"] - expected: FAIL - - [:loc="compound";s1="off";s2="error"] - expected: FAIL - - [:loc="compound";s1="info";s2="off"] - expected: FAIL - - [:loc="compound";s1="info";s2="info"] - expected: FAIL - - [:loc="compound";s1="info";s2="warning"] - expected: FAIL - - [:loc="compound";s1="info";s2="error"] - expected: FAIL - - [:loc="compound";s1="warning";s2="off"] - expected: FAIL - - [:loc="compound";s1="warning";s2="info"] - expected: FAIL - - [:loc="compound";s1="warning";s2="warning"] - expected: FAIL - - [:loc="compound";s1="warning";s2="error"] - expected: FAIL - - [:loc="compound";s1="error";s2="off"] - expected: FAIL - - [:loc="compound";s1="error";s2="info"] - expected: FAIL - - [:loc="compound";s1="error";s2="warning"] - expected: FAIL - - [:loc="compound";s1="error";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="if_stmt";s1="error";s2="error"] - expected: FAIL - - [:loc="if_then";s1="off";s2="off"] - expected: FAIL - - [:loc="if_then";s1="off";s2="info"] - expected: FAIL - - [:loc="if_then";s1="off";s2="warning"] - expected: FAIL - - [:loc="if_then";s1="off";s2="error"] - expected: FAIL - - [:loc="if_then";s1="info";s2="off"] - expected: FAIL - - [:loc="if_then";s1="info";s2="info"] - expected: FAIL - - [:loc="if_then";s1="info";s2="warning"] - expected: FAIL - - [:loc="if_then";s1="info";s2="error"] - expected: FAIL - - [:loc="if_then";s1="warning";s2="off"] - expected: FAIL - - [:loc="if_then";s1="warning";s2="info"] - expected: FAIL - - [:loc="if_then";s1="warning";s2="warning"] - expected: FAIL - - [:loc="if_then";s1="warning";s2="error"] - expected: FAIL - - [:loc="if_then";s1="error";s2="off"] - expected: FAIL - - [:loc="if_then";s1="error";s2="info"] - expected: FAIL - - [:loc="if_then";s1="error";s2="warning"] - expected: FAIL - - [:loc="if_then";s1="error";s2="error"] - expected: FAIL - - [:loc="if_else";s1="off";s2="off"] - expected: FAIL - - [:loc="if_else";s1="off";s2="info"] - expected: FAIL - - [:loc="if_else";s1="off";s2="warning"] - expected: FAIL - - [:loc="if_else";s1="off";s2="error"] - expected: FAIL - - [:loc="if_else";s1="info";s2="off"] - expected: FAIL - - [:loc="if_else";s1="info";s2="info"] - expected: FAIL - - [:loc="if_else";s1="info";s2="warning"] - expected: FAIL - - [:loc="if_else";s1="info";s2="error"] - expected: FAIL - - [:loc="if_else";s1="warning";s2="off"] - expected: FAIL - - [:loc="if_else";s1="warning";s2="info"] - expected: FAIL - - [:loc="if_else";s1="warning";s2="warning"] - expected: FAIL - - [:loc="if_else";s1="warning";s2="error"] - expected: FAIL - - [:loc="if_else";s1="error";s2="off"] - expected: FAIL - - [:loc="if_else";s1="error";s2="info"] - expected: FAIL - - [:loc="if_else";s1="error";s2="warning"] - expected: FAIL - - [:loc="if_else";s1="error";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_stmt";s1="error";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_body";s1="error";s2="error"] - expected: FAIL - - [:loc="switch_default";s1="off";s2="off"] - expected: FAIL - - [:loc="switch_default";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_default";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_default";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_default";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_default";s1="info";s2="info"] - expected: FAIL - - [:loc="switch_default";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_default";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_default";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_default";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_default";s1="warning";s2="warning"] - expected: FAIL - - [:loc="switch_default";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_default";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_default";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_default";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_default";s1="error";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="off";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="info";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="warning";s2="error"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="off"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="info"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="warning"] - expected: FAIL - - [:loc="switch_case";s1="error";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="loop_stmt";s1="error";s2="error"] - expected: FAIL - - [:loc="loop_body";s1="off";s2="off"] - expected: FAIL - - [:loc="loop_body";s1="off";s2="info"] - expected: FAIL - - [:loc="loop_body";s1="off";s2="warning"] - expected: FAIL - - [:loc="loop_body";s1="off";s2="error"] - expected: FAIL - - [:loc="loop_body";s1="info";s2="off"] - expected: FAIL - - [:loc="loop_body";s1="info";s2="info"] - expected: FAIL - - [:loc="loop_body";s1="info";s2="warning"] - expected: FAIL - - [:loc="loop_body";s1="info";s2="error"] - expected: FAIL - - [:loc="loop_body";s1="warning";s2="off"] - expected: FAIL - - [:loc="loop_body";s1="warning";s2="info"] - expected: FAIL - - [:loc="loop_body";s1="warning";s2="warning"] - expected: FAIL - - [:loc="loop_body";s1="warning";s2="error"] - expected: FAIL - - [:loc="loop_body";s1="error";s2="off"] - expected: FAIL - - [:loc="loop_body";s1="error";s2="info"] - expected: FAIL - - [:loc="loop_body";s1="error";s2="warning"] - expected: FAIL - - [:loc="loop_body";s1="error";s2="error"] - expected: FAIL - - [:loc="loop_continuing";s1="off";s2="off"] - expected: FAIL - - [:loc="loop_continuing";s1="off";s2="info"] - expected: FAIL - - [:loc="loop_continuing";s1="off";s2="warning"] - expected: FAIL - - [:loc="loop_continuing";s1="off";s2="error"] - expected: FAIL - - [:loc="loop_continuing";s1="info";s2="off"] - expected: FAIL - - [:loc="loop_continuing";s1="info";s2="info"] - expected: FAIL - - [:loc="loop_continuing";s1="info";s2="warning"] - expected: FAIL - - [:loc="loop_continuing";s1="info";s2="error"] - expected: FAIL - - [:loc="loop_continuing";s1="warning";s2="off"] - expected: FAIL - - [:loc="loop_continuing";s1="warning";s2="info"] - expected: FAIL - - [:loc="loop_continuing";s1="warning";s2="warning"] - expected: FAIL - - [:loc="loop_continuing";s1="warning";s2="error"] - expected: FAIL - - [:loc="loop_continuing";s1="error";s2="off"] - expected: FAIL - - [:loc="loop_continuing";s1="error";s2="info"] - expected: FAIL - - [:loc="loop_continuing";s1="error";s2="warning"] - expected: FAIL - - [:loc="loop_continuing";s1="error";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="while_stmt";s1="error";s2="error"] - expected: FAIL - - [:loc="while_body";s1="off";s2="off"] - expected: FAIL - - [:loc="while_body";s1="off";s2="info"] - expected: FAIL - - [:loc="while_body";s1="off";s2="warning"] - expected: FAIL - - [:loc="while_body";s1="off";s2="error"] - expected: FAIL - - [:loc="while_body";s1="info";s2="off"] - expected: FAIL - - [:loc="while_body";s1="info";s2="info"] - expected: FAIL - - [:loc="while_body";s1="info";s2="warning"] - expected: FAIL - - [:loc="while_body";s1="info";s2="error"] - expected: FAIL - - [:loc="while_body";s1="warning";s2="off"] - expected: FAIL - - [:loc="while_body";s1="warning";s2="info"] - expected: FAIL - - [:loc="while_body";s1="warning";s2="warning"] - expected: FAIL - - [:loc="while_body";s1="warning";s2="error"] - expected: FAIL - - [:loc="while_body";s1="error";s2="off"] - expected: FAIL - - [:loc="while_body";s1="error";s2="info"] - expected: FAIL - - [:loc="while_body";s1="error";s2="warning"] - expected: FAIL - - [:loc="while_body";s1="error";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="off";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="info";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="warning";s2="error"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="off"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="info"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="warning"] - expected: FAIL - - [:loc="for_stmt";s1="error";s2="error"] - expected: FAIL - - [:loc="for_body";s1="off";s2="off"] - expected: FAIL - - [:loc="for_body";s1="off";s2="info"] - expected: FAIL - - [:loc="for_body";s1="off";s2="warning"] - expected: FAIL - - [:loc="for_body";s1="off";s2="error"] - expected: FAIL - - [:loc="for_body";s1="info";s2="off"] - expected: FAIL - - [:loc="for_body";s1="info";s2="info"] - expected: FAIL - - [:loc="for_body";s1="info";s2="warning"] - expected: FAIL - - [:loc="for_body";s1="info";s2="error"] - expected: FAIL - - [:loc="for_body";s1="warning";s2="off"] - expected: FAIL - - [:loc="for_body";s1="warning";s2="info"] - expected: FAIL - - [:loc="for_body";s1="warning";s2="warning"] - expected: FAIL - - [:loc="for_body";s1="warning";s2="error"] - expected: FAIL - - [:loc="for_body";s1="error";s2="off"] - expected: FAIL - - [:loc="for_body";s1="error";s2="info"] - expected: FAIL - - [:loc="for_body";s1="error";s2="warning"] - expected: FAIL - - [:loc="for_body";s1="error";s2="error"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,bitcast:bad_type_constructible:*] - [:type="mat2x2f";direction="to"] - expected: FAIL - - [:type="mat2x2f";direction="from"] - expected: FAIL - - [:type="mat2x3f";direction="to"] - expected: FAIL - - [:type="mat2x3f";direction="from"] - expected: FAIL - - [:type="mat2x4f";direction="to"] - expected: FAIL - - [:type="mat2x4f";direction="from"] - expected: FAIL - - [:type="mat3x2f";direction="to"] - expected: FAIL - - [:type="mat3x2f";direction="from"] - expected: FAIL - - [:type="mat3x3f";direction="to"] - expected: FAIL - - [:type="mat3x3f";direction="from"] - expected: FAIL - - [:type="mat3x4f";direction="to"] - expected: FAIL - - [:type="mat3x4f";direction="from"] - expected: FAIL - - [:type="mat4x2f";direction="to"] - expected: FAIL - - [:type="mat4x2f";direction="from"] - expected: FAIL - - [:type="mat4x3f";direction="to"] - expected: FAIL - - [:type="mat4x3f";direction="from"] - expected: FAIL - - [:type="mat4x4f";direction="to"] - expected: FAIL - - [:type="mat4x4f";direction="from"] - expected: FAIL - - [:type="bool";direction="to"] - expected: FAIL - - [:type="bool";direction="from"] - expected: FAIL - - [:type="vec2%3Cbool%3E";direction="to"] - expected: FAIL - - [:type="vec2%3Cbool%3E";direction="from"] - expected: FAIL - - [:type="vec3%3Cbool%3E";direction="to"] - expected: FAIL - - [:type="vec3%3Cbool%3E";direction="from"] - expected: FAIL - - [:type="vec4%3Cbool%3E";direction="to"] - expected: FAIL - - [:type="vec4%3Cbool%3E";direction="from"] - expected: FAIL - - [:type="array%3Ci32,2%3E";direction="to"] - expected: FAIL - - [:type="array%3Ci32,2%3E";direction="from"] - expected: FAIL - - [:type="S";direction="to"] - expected: FAIL - - [:type="S";direction="from"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,render_pipeline,fragment_state:colorState:*] - [:caseName="default"] - expected: FAIL - - [:caseName="noBlendTarget0"] - expected: FAIL - - [:caseName="noBlendTarget1"] - expected: FAIL - - [:caseName="colorOperation"] - expected: FAIL - - [:caseName="colorSrcFactor"] - expected: FAIL - - [:caseName="colorDstFactor"] - expected: FAIL - - [:caseName="alphaOperation"] - expected: FAIL - - [:caseName="alphaSrcFactor"] - expected: FAIL - - [:caseName="alphaDstFactor"] - expected: FAIL - - [:caseName="writeMask"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_number_matches_call:*] - [:num_args=0;num_params=0] - expected: FAIL - - [:num_args=0;num_params=1] - expected: FAIL - - [:num_args=0;num_params=2] - expected: FAIL - - [:num_args=0;num_params=3] - expected: FAIL - - [:num_args=0;num_params=4] - expected: FAIL - - [:num_args=0;num_params=255] - expected: FAIL - - [:num_args=1;num_params=0] - expected: FAIL - - [:num_args=1;num_params=1] - expected: FAIL - - [:num_args=1;num_params=2] - expected: FAIL - - [:num_args=1;num_params=3] - expected: FAIL - - [:num_args=1;num_params=4] - expected: FAIL - - [:num_args=1;num_params=255] - expected: FAIL - - [:num_args=2;num_params=0] - expected: FAIL - - [:num_args=2;num_params=1] - expected: FAIL - - [:num_args=2;num_params=2] - expected: FAIL - - [:num_args=2;num_params=3] - expected: FAIL - - [:num_args=2;num_params=4] - expected: FAIL - - [:num_args=2;num_params=255] - expected: FAIL - - [:num_args=3;num_params=0] - expected: FAIL - - [:num_args=3;num_params=1] - expected: FAIL - - [:num_args=3;num_params=2] - expected: FAIL - - [:num_args=3;num_params=3] - expected: FAIL - - [:num_args=3;num_params=4] - expected: FAIL - - [:num_args=3;num_params=255] - expected: FAIL - - [:num_args=4;num_params=0] - expected: FAIL - - [:num_args=4;num_params=1] - expected: FAIL - - [:num_args=4;num_params=2] - expected: FAIL - - [:num_args=4;num_params=3] - expected: FAIL - - [:num_args=4;num_params=4] - expected: FAIL - - [:num_args=4;num_params=255] - expected: FAIL - - [:num_args=255;num_params=0] - expected: FAIL - - [:num_args=255;num_params=1] - expected: FAIL - - [:num_args=255;num_params=2] - expected: FAIL - - [:num_args=255;num_params=3] - expected: FAIL - - [:num_args=255;num_params=4] - expected: FAIL - - [:num_args=255;num_params=255] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_comparison:greater_equals:*] - [:inputSource="const";vectorize="_undef_"] - expected: FAIL - - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_workgroup_advanced:*] - [:workgroupSize=1;scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;scalarType="i32"] - expected: FAIL - - [:workgroupSize=4;scalarType="u32"] - expected: FAIL - - [:workgroupSize=4;scalarType="i32"] - expected: FAIL - - [:workgroupSize=8;scalarType="u32"] - expected: FAIL - - [:workgroupSize=8;scalarType="i32"] - expected: FAIL - - [:workgroupSize=16;scalarType="u32"] - expected: FAIL - - [:workgroupSize=16;scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;scalarType="i32"] - expected: FAIL - - [:workgroupSize=128;scalarType="u32"] - expected: FAIL - - [:workgroupSize=128;scalarType="i32"] - expected: FAIL - - [:workgroupSize=256;scalarType="u32"] - expected: FAIL - - [:workgroupSize=256;scalarType="i32"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,encoding,programmable,pipeline_bind_group_compat:twoDifferentTextureViews,render_pass,unused:*] - [:encoderType="render%20pass";textureType="regular"] - expected: FAIL - - [:encoderType="render%20pass";textureType="storage"] - expected: FAIL - - [:encoderType="render%20bundle";textureType="regular"] - expected: FAIL - - [:encoderType="render%20bundle";textureType="storage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,tan:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,modf:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_names_must_differ:*] - [:p1="a";p2="a"] - expected: FAIL - - [:p1="a";p2="b"] - expected: FAIL - - [:p1="a";p2="c"] - expected: FAIL - - [:p1="b";p2="a"] - expected: FAIL - - [:p1="b";p2="b"] - expected: FAIL - - [:p1="b";p2="c"] - expected: FAIL - - [:p1="c";p2="a"] - expected: FAIL - - [:p1="c";p2="b"] - expected: FAIL - - [:p1="c";p2="c"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_subtraction:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_address_space_never_uses_access_mode:*] - [:addressSpace="uniform";accessMode="read"] - expected: FAIL - - [:addressSpace="uniform";accessMode="write"] - expected: FAIL - - [:addressSpace="uniform";accessMode="read_write"] - expected: FAIL - - [:addressSpace="private";accessMode="read"] - expected: FAIL - - [:addressSpace="private";accessMode="write"] - expected: FAIL - - [:addressSpace="private";accessMode="read_write"] - expected: FAIL - - [:addressSpace="workgroup";accessMode="read"] - expected: FAIL - - [:addressSpace="workgroup";accessMode="write"] - expected: FAIL - - [:addressSpace="workgroup";accessMode="read_write"] - expected: FAIL - - [:addressSpace="function";accessMode="read"] - expected: FAIL - - [:addressSpace="function";accessMode="write"] - expected: FAIL - - [:addressSpace="function";accessMode="read_write"] - expected: FAIL - - [:addressSpace="handle";accessMode="read"] - expected: FAIL - - [:addressSpace="handle";accessMode="write"] - expected: FAIL - - [:addressSpace="handle";accessMode="read_write"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_multiplication:vector_scalar:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_no_assert:*] - [:case="any_false";scope="module"] - expected: FAIL - - [:case="any_false";scope="function"] - expected: FAIL - - [:case="any_true";scope="module"] - expected: FAIL - - [:case="any_true";scope="function"] - expected: FAIL - - [:case="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:case="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:case="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:case="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:case="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:case="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:case="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:case="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:case="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:case="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:case="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:case="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:case="literal_false";scope="module"] - expected: FAIL - - [:case="literal_false";scope="function"] - expected: FAIL - - [:case="literal_not_false";scope="module"] - expected: FAIL - - [:case="literal_not_false";scope="function"] - expected: FAIL - - [:case="literal_not_true";scope="module"] - expected: FAIL - - [:case="literal_not_true";scope="function"] - expected: FAIL - - [:case="literal_true";scope="module"] - expected: FAIL - - [:case="literal_true";scope="function"] - expected: FAIL - - [:case="min_max_false";scope="module"] - expected: FAIL - - [:case="min_max_false";scope="function"] - expected: FAIL - - [:case="min_max_true";scope="module"] - expected: FAIL - - [:case="min_max_true";scope="function"] - expected: FAIL - - [:case="variable_false";scope="module"] - expected: FAIL - - [:case="variable_false";scope="function"] - expected: FAIL - - [:case="variable_not_false";scope="module"] - expected: FAIL - - [:case="variable_not_false";scope="function"] - expected: FAIL - - [:case="variable_not_true";scope="module"] - expected: FAIL - - [:case="variable_not_true";scope="function"] - expected: FAIL - - [:case="variable_true";scope="module"] - expected: FAIL - - [:case="variable_true";scope="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec4_fract:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:warning_unknown_rule:*] - [:type="attribute";rule="unknown"] - expected: FAIL - - [:type="attribute";rule="blahblahblah"] - expected: FAIL - - [:type="attribute";rule="derivative_uniform"] - expected: FAIL - - [:type="directive";rule="unknown"] - expected: FAIL - - [:type="directive";rule="blahblahblah"] - expected: FAIL - - [:type="directive";rule="derivative_uniform"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acos:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,locations:validation:*] - [:attr="zero"] - expected: FAIL - - [:attr="one"] - expected: FAIL - - [:attr="extra_comma"] - expected: FAIL - - [:attr="i32"] - expected: FAIL - - [:attr="u32"] - expected: FAIL - - [:attr="hex"] - expected: FAIL - - [:attr="const_expr"] - expected: FAIL - - [:attr="max"] - expected: FAIL - - [:attr="newline"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="misspelling"] - expected: FAIL - - [:attr="no_parens"] - expected: FAIL - - [:attr="empty_params"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="extra_params"] - expected: FAIL - - [:attr="f32"] - expected: FAIL - - [:attr="f32_literal"] - expected: FAIL - - [:attr="negative"] - expected: FAIL - - [:attr="override_expr"] - expected: FAIL - - [:attr="vec"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_nonmatching_vec2:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:web_platform,copyToTexture,image:from_image:*] - [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=true;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="r32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rg32float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="bgra8unorm-srgb";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgb10a2unorm";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba16float";dstPremultiplied=false] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=true] - expected: FAIL - - [:srcDoFlipYDuringCopy=false;dstColorFormat="rgba32float";dstPremultiplied=false] - expected: FAIL - - -[cts.https.html?q=webgpu:api,validation,state,device_lost,destroy:createRenderPipelineAsync:*] - [:valid=true;awaitLost=true] - expected: FAIL - - [:valid=true;awaitLost=false] - expected: FAIL - - [:valid=false;awaitLost=true] - expected: FAIL - - [:valid=false;awaitLost=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,acos:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,unary,af_assignment:f32:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,render_pipeline,shader_module:sample_mask:*] - [:entryPoint="fsWithoutSampleMaskUsage"] - expected: FAIL - - [:entryPoint="fsWithSampleMaskUsage"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,access,vector:vector:*] - expected: [OK, TIMEOUT] - [:case="literal_0";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_0u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_1u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_2u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_3u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_0u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_1u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_2u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_3u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_0u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_1u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_2u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="let_3u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_0u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_1u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_2u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="var_3u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_0";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_1";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_trig";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_trig";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_vec2u";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_vec2i";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_array";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_array";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_2_via_struct";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="const_expr_3_via_struct";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="x";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="y";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="z";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="w";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="r";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="g";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="b";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="a";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="zyx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyzw";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwz";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rg";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gr";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgg";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgb";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="grb";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbr";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgba";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="gbra";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xy_yx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyx_xxy";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyz_zyx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxy_rrgg";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rbrg_xyzw";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xyxz_rbg_yx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="wxyz_bga_xy";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xq";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="py";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xg";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="ryb";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xgza";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="xxxxx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rrrrr";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="yxwxy";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="rgbar";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_5";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="literal_minus_1";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="float_idx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="bool_idx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="const";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="let";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="var";vector_width=4;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=2;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=2;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=2;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=2;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=3;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=3;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=3;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=3;element_type="bool"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=4;element_type="i32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=4;element_type="u32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=4;element_type="f32"] - expected: FAIL - - [:case="array_idx";vector_decl="param";vector_width=4;element_type="bool"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,binding:binding:*] - [:attr="const_expr"] - expected: FAIL - - [:attr="override_expr"] - expected: FAIL - - [:attr="zero"] - expected: FAIL - - [:attr="one"] - expected: FAIL - - [:attr="comment"] - expected: FAIL - - [:attr="split_line"] - expected: FAIL - - [:attr="trailing_comma"] - expected: FAIL - - [:attr="int_literal"] - expected: FAIL - - [:attr="uint_literal"] - expected: FAIL - - [:attr="hex_literal"] - expected: FAIL - - [:attr="negative"] - expected: FAIL - - [:attr="missing_value"] - expected: FAIL - - [:attr="missing_left_paren"] - expected: FAIL - - [:attr="missing_right_paren"] - expected: FAIL - - [:attr="multiple_values"] - expected: FAIL - - [:attr="f32_val_literal"] - expected: FAIL - - [:attr="f32_val"] - expected: FAIL - - [:attr="no_params"] - expected: FAIL - - [:attr="misspelling"] - expected: FAIL - - [:attr="multi_binding"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,vector:vector:*] - [:case="vec2_bool"] - expected: FAIL - - [:case="vec3_bool"] - expected: FAIL - - [:case="vec4_bool"] - expected: FAIL - - [:case="vec2_i32"] - expected: FAIL - - [:case="vec3_i32"] - expected: FAIL - - [:case="vec4_i32"] - expected: FAIL - - [:case="vec2_u32"] - expected: FAIL - - [:case="vec3_u32"] - expected: FAIL - - [:case="vec4_u32"] - expected: FAIL - - [:case="vec2_f32"] - expected: FAIL - - [:case="vec3_f32"] - expected: FAIL - - [:case="vec4_f32"] - expected: FAIL - - [:case="vec2i"] - expected: FAIL - - [:case="vec3i"] - expected: FAIL - - [:case="vec4i"] - expected: FAIL - - [:case="vec2u"] - expected: FAIL - - [:case="vec3u"] - expected: FAIL - - [:case="vec4u"] - expected: FAIL - - [:case="vec2f"] - expected: FAIL - - [:case="vec3f"] - expected: FAIL - - [:case="vec4f"] - expected: FAIL - - [:case="trailing_comma"] - expected: FAIL - - [:case="aliased_el_ty"] - expected: FAIL - - [:case="vec"] - expected: FAIL - - [:case="vec_f32"] - expected: FAIL - - [:case="vec1_i32"] - expected: FAIL - - [:case="vec5_u32"] - expected: FAIL - - [:case="missing_el_ty"] - expected: FAIL - - [:case="missing_t_left"] - expected: FAIL - - [:case="missing_t_right"] - expected: FAIL - - [:case="vec_of_array"] - expected: FAIL - - [:case="vec_of_runtime_array"] - expected: FAIL - - [:case="vec_of_struct"] - expected: FAIL - - [:case="vec_of_atomic"] - expected: FAIL - - [:case="vec_of_matrix"] - expected: FAIL - - [:case="vec_of_vec"] - expected: FAIL - - [:case="no_bool_shortform"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,atanh:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,f32_division:vector:*] - [:inputSource="const";vectorize=2] - expected: FAIL - - [:inputSource="const";vectorize=3] - expected: FAIL - - [:inputSource="const";vectorize=4] - expected: FAIL - - [:inputSource="uniform";vectorize=2] - expected: FAIL - - [:inputSource="uniform";vectorize=3] - expected: FAIL - - [:inputSource="uniform";vectorize=4] - expected: FAIL - - [:inputSource="storage_r";vectorize=2] - expected: FAIL - - [:inputSource="storage_r";vectorize=3] - expected: FAIL - - [:inputSource="storage_r";vectorize=4] - expected: FAIL - - [:inputSource="storage_rw";vectorize=2] - expected: FAIL - - [:inputSource="storage_rw";vectorize=3] - expected: FAIL - - [:inputSource="storage_rw";vectorize=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion_via_array_size:*] - [:target="S1"] - expected: FAIL - - [:target="S2"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec4_whole:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,struct:no_indirect_recursion:*] - [:target="i32"] - expected: FAIL - - [:target="S"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,radians:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,identifiers:override_name:*] - [:ident="foo"] - expected: FAIL - - [:ident="Foo"] - expected: FAIL - - [:ident="FOO"] - expected: FAIL - - [:ident="_0"] - expected: FAIL - - [:ident="_foo0"] - expected: FAIL - - [:ident="_0foo"] - expected: FAIL - - [:ident="foo__0"] - expected: FAIL - - [:ident="%CE%94%CE%AD%CE%BB%CF%84%CE%B1"] - expected: FAIL - - [:ident="r%C3%A9flexion"] - expected: FAIL - - [:ident="%D0%9A%D1%8B%D0%B7%D1%8B%D0%BB"] - expected: FAIL - - [:ident="%F0%90%B0%93%F0%90%B0%8F%F0%90%B0%87"] - expected: FAIL - - [:ident="%E6%9C%9D%E7%84%BC%E3%81%91"] - expected: FAIL - - [:ident="%D8%B3%D9%84%D8%A7%D9%85"] - expected: FAIL - - [:ident="%EA%B2%80%EC%A0%95"] - expected: FAIL - - [:ident="%D7%A9%D6%B8%D7%81%D7%9C%D7%95%D6%B9%D7%9D"] - expected: FAIL - - [:ident="%E0%A4%97%E0%A5%81%E0%A4%B2%E0%A4%BE%E0%A4%AC%E0%A5%80"] - expected: FAIL - - [:ident="%D6%83%D5%AB%D6%80%D5%B8%D6%82%D5%A6"] - expected: FAIL - - [:ident="array"] - expected: FAIL - - [:ident="atomic"] - expected: FAIL - - [:ident="bool"] - expected: FAIL - - [:ident="bf16"] - expected: FAIL - - [:ident="bitcast"] - expected: FAIL - - [:ident="f32"] - expected: FAIL - - [:ident="f16"] - expected: FAIL - - [:ident="f64"] - expected: FAIL - - [:ident="i32"] - expected: FAIL - - [:ident="i16"] - expected: FAIL - - [:ident="i64"] - expected: FAIL - - [:ident="i8"] - expected: FAIL - - [:ident="mat2x2"] - expected: FAIL - - [:ident="mat2x3"] - expected: FAIL - - [:ident="mat2x4"] - expected: FAIL - - [:ident="mat3x2"] - expected: FAIL - - [:ident="mat3x3"] - expected: FAIL - - [:ident="mat3x4"] - expected: FAIL - - [:ident="mat4x2"] - expected: FAIL - - [:ident="mat4x3"] - expected: FAIL - - [:ident="mat4x4"] - expected: FAIL - - [:ident="ptr"] - expected: FAIL - - [:ident="quat"] - expected: FAIL - - [:ident="sampler"] - expected: FAIL - - [:ident="sampler_comparison"] - expected: FAIL - - [:ident="signed"] - expected: FAIL - - [:ident="texture_1d"] - expected: FAIL - - [:ident="texture_2d"] - expected: FAIL - - [:ident="texture_2d_array"] - expected: FAIL - - [:ident="texture_3d"] - expected: FAIL - - [:ident="texture_cube"] - expected: FAIL - - [:ident="texture_cube_array"] - expected: FAIL - - [:ident="texture_multisampled_2d"] - expected: FAIL - - [:ident="texture_storage_1d"] - expected: FAIL - - [:ident="texture_storage_2d"] - expected: FAIL - - [:ident="texture_storage_2d_array"] - expected: FAIL - - [:ident="texture_storage_3d"] - expected: FAIL - - [:ident="texture_depth_2d"] - expected: FAIL - - [:ident="texture_depth_2d_array"] - expected: FAIL - - [:ident="texture_depth_cube"] - expected: FAIL - - [:ident="texture_depth_cube_array"] - expected: FAIL - - [:ident="texture_depth_multisampled_2d"] - expected: FAIL - - [:ident="u32"] - expected: FAIL - - [:ident="u16"] - expected: FAIL - - [:ident="u64"] - expected: FAIL - - [:ident="u8"] - expected: FAIL - - [:ident="unsigned"] - expected: FAIL - - [:ident="vec2"] - expected: FAIL - - [:ident="vec3"] - expected: FAIL - - [:ident="vec4"] - expected: FAIL - - [:ident="_"] - expected: FAIL - - [:ident="__"] - expected: FAIL - - [:ident="__foo"] - expected: FAIL - - [:ident="0foo"] - expected: FAIL - - [:ident="foo.bar"] - expected: FAIL - - [:ident="foo-bar"] - expected: FAIL - - [:ident="foo%2Bbar"] - expected: FAIL - - [:ident="foo%23bar"] - expected: FAIL - - [:ident="foo!bar"] - expected: FAIL - - [:ident="foo%5C%5Cbar"] - expected: FAIL - - [:ident="foo%2Fbar"] - expected: FAIL - - [:ident="foo,bar"] - expected: FAIL - - [:ident="foo%40bar"] - expected: FAIL - - [:ident="foo::bar"] - expected: FAIL - - [:ident="alias"] - expected: FAIL - - [:ident="break"] - expected: FAIL - - [:ident="case"] - expected: FAIL - - [:ident="const"] - expected: FAIL - - [:ident="const_assert"] - expected: FAIL - - [:ident="continue"] - expected: FAIL - - [:ident="continuing"] - expected: FAIL - - [:ident="default"] - expected: FAIL - - [:ident="diagnostic"] - expected: FAIL - - [:ident="discard"] - expected: FAIL - - [:ident="else"] - expected: FAIL - - [:ident="enable"] - expected: FAIL - - [:ident="false"] - expected: FAIL - - [:ident="fn"] - expected: FAIL - - [:ident="for"] - expected: FAIL - - [:ident="if"] - expected: FAIL - - [:ident="let"] - expected: FAIL - - [:ident="loop"] - expected: FAIL - - [:ident="override"] - expected: FAIL - - [:ident="requires"] - expected: FAIL - - [:ident="return"] - expected: FAIL - - [:ident="struct"] - expected: FAIL - - [:ident="switch"] - expected: FAIL - - [:ident="true"] - expected: FAIL - - [:ident="var"] - expected: FAIL - - [:ident="while"] - expected: FAIL - - [:ident="NULL"] - expected: FAIL - - [:ident="Self"] - expected: FAIL - - [:ident="abstract"] - expected: FAIL - - [:ident="active"] - expected: FAIL - - [:ident="alignas"] - expected: FAIL - - [:ident="alignof"] - expected: FAIL - - [:ident="as"] - expected: FAIL - - [:ident="asm"] - expected: FAIL - - [:ident="asm_fragment"] - expected: FAIL - - [:ident="async"] - expected: FAIL - - [:ident="attribute"] - expected: FAIL - - [:ident="auto"] - expected: FAIL - - [:ident="await"] - expected: FAIL - - [:ident="become"] - expected: FAIL - - [:ident="binding_array"] - expected: FAIL - - [:ident="cast"] - expected: FAIL - - [:ident="catch"] - expected: FAIL - - [:ident="class"] - expected: FAIL - - [:ident="co_await"] - expected: FAIL - - [:ident="co_return"] - expected: FAIL - - [:ident="co_yield"] - expected: FAIL - - [:ident="coherent"] - expected: FAIL - - [:ident="column_major"] - expected: FAIL - - [:ident="common"] - expected: FAIL - - [:ident="compile"] - expected: FAIL - - [:ident="compile_fragment"] - expected: FAIL - - [:ident="concept"] - expected: FAIL - - [:ident="const_cast"] - expected: FAIL - - [:ident="consteval"] - expected: FAIL - - [:ident="constexpr"] - expected: FAIL - - [:ident="constinit"] - expected: FAIL - - [:ident="crate"] - expected: FAIL - - [:ident="debugger"] - expected: FAIL - - [:ident="decltype"] - expected: FAIL - - [:ident="delete"] - expected: FAIL - - [:ident="demote"] - expected: FAIL - - [:ident="demote_to_helper"] - expected: FAIL - - [:ident="do"] - expected: FAIL - - [:ident="dynamic_cast"] - expected: FAIL - - [:ident="enum"] - expected: FAIL - - [:ident="explicit"] - expected: FAIL - - [:ident="export"] - expected: FAIL - - [:ident="extends"] - expected: FAIL - - [:ident="extern"] - expected: FAIL - - [:ident="external"] - expected: FAIL - - [:ident="fallthrough"] - expected: FAIL - - [:ident="filter"] - expected: FAIL - - [:ident="final"] - expected: FAIL - - [:ident="finally"] - expected: FAIL - - [:ident="friend"] - expected: FAIL - - [:ident="from"] - expected: FAIL - - [:ident="fxgroup"] - expected: FAIL - - [:ident="get"] - expected: FAIL - - [:ident="goto"] - expected: FAIL - - [:ident="groupshared"] - expected: FAIL - - [:ident="highp"] - expected: FAIL - - [:ident="impl"] - expected: FAIL - - [:ident="implements"] - expected: FAIL - - [:ident="import"] - expected: FAIL - - [:ident="inline"] - expected: FAIL - - [:ident="instanceof"] - expected: FAIL - - [:ident="interface"] - expected: FAIL - - [:ident="layout"] - expected: FAIL - - [:ident="lowp"] - expected: FAIL - - [:ident="macro"] - expected: FAIL - - [:ident="macro_rules"] - expected: FAIL - - [:ident="match"] - expected: FAIL - - [:ident="mediump"] - expected: FAIL - - [:ident="meta"] - expected: FAIL - - [:ident="mod"] - expected: FAIL - - [:ident="module"] - expected: FAIL - - [:ident="move"] - expected: FAIL - - [:ident="mut"] - expected: FAIL - - [:ident="mutable"] - expected: FAIL - - [:ident="namespace"] - expected: FAIL - - [:ident="new"] - expected: FAIL - - [:ident="nil"] - expected: FAIL - - [:ident="noexcept"] - expected: FAIL - - [:ident="noinline"] - expected: FAIL - - [:ident="nointerpolation"] - expected: FAIL - - [:ident="noperspective"] - expected: FAIL - - [:ident="null"] - expected: FAIL - - [:ident="nullptr"] - expected: FAIL - - [:ident="of"] - expected: FAIL - - [:ident="operator"] - expected: FAIL - - [:ident="package"] - expected: FAIL - - [:ident="packoffset"] - expected: FAIL - - [:ident="partition"] - expected: FAIL - - [:ident="pass"] - expected: FAIL - - [:ident="patch"] - expected: FAIL - - [:ident="pixelfragment"] - expected: FAIL - - [:ident="precise"] - expected: FAIL - - [:ident="precision"] - expected: FAIL - - [:ident="premerge"] - expected: FAIL - - [:ident="priv"] - expected: FAIL - - [:ident="protected"] - expected: FAIL - - [:ident="pub"] - expected: FAIL - - [:ident="public"] - expected: FAIL - - [:ident="readonly"] - expected: FAIL - - [:ident="ref"] - expected: FAIL - - [:ident="regardless"] - expected: FAIL - - [:ident="register"] - expected: FAIL - - [:ident="reinterpret_cast"] - expected: FAIL - - [:ident="require"] - expected: FAIL - - [:ident="resource"] - expected: FAIL - - [:ident="restrict"] - expected: FAIL - - [:ident="self"] - expected: FAIL - - [:ident="set"] - expected: FAIL - - [:ident="shared"] - expected: FAIL - - [:ident="sizeof"] - expected: FAIL - - [:ident="smooth"] - expected: FAIL - - [:ident="snorm"] - expected: FAIL - - [:ident="static"] - expected: FAIL - - [:ident="static_assert"] - expected: FAIL - - [:ident="static_cast"] - expected: FAIL - - [:ident="std"] - expected: FAIL - - [:ident="subroutine"] - expected: FAIL - - [:ident="super"] - expected: FAIL - - [:ident="target"] - expected: FAIL - - [:ident="template"] - expected: FAIL - - [:ident="this"] - expected: FAIL - - [:ident="thread_local"] - expected: FAIL - - [:ident="throw"] - expected: FAIL - - [:ident="trait"] - expected: FAIL - - [:ident="try"] - expected: FAIL - - [:ident="type"] - expected: FAIL - - [:ident="typedef"] - expected: FAIL - - [:ident="typeid"] - expected: FAIL - - [:ident="typename"] - expected: FAIL - - [:ident="typeof"] - expected: FAIL - - [:ident="union"] - expected: FAIL - - [:ident="unless"] - expected: FAIL - - [:ident="unorm"] - expected: FAIL - - [:ident="unsafe"] - expected: FAIL - - [:ident="unsized"] - expected: FAIL - - [:ident="use"] - expected: FAIL - - [:ident="using"] - expected: FAIL - - [:ident="varying"] - expected: FAIL - - [:ident="virtual"] - expected: FAIL - - [:ident="volatile"] - expected: FAIL - - [:ident="wgsl"] - expected: FAIL - - [:ident="where"] - expected: FAIL - - [:ident="with"] - expected: FAIL - - [:ident="writeonly"] - expected: FAIL - - [:ident="yield"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,struct:no_direct_recursion:*] - [:target="i32"] - expected: FAIL - - [:target="S"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_nonmatching_vec4:*] - [:inputSource="const"] - expected: FAIL - - [:inputSource="uniform"] - expected: FAIL - - [:inputSource="storage_r"] - expected: FAIL - - [:inputSource="storage_rw"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,var_and_let:var_access_mode_bad_template_delim:*] - [:accessMode="read";prefix="";suffix=""] - expected: FAIL - - [:accessMode="read";prefix="";suffix="%3C"] - expected: FAIL - - [:accessMode="read";prefix="";suffix="%3E"] - expected: FAIL - - [:accessMode="read";prefix="";suffix=","] - expected: FAIL - - [:accessMode="read";prefix="%3C";suffix=""] - expected: FAIL - - [:accessMode="read";prefix="%3C";suffix="%3C"] - expected: FAIL - - [:accessMode="read";prefix="%3C";suffix="%3E"] - expected: FAIL - - [:accessMode="read";prefix="%3C";suffix=","] - expected: FAIL - - [:accessMode="read";prefix="%3E";suffix=""] - expected: FAIL - - [:accessMode="read";prefix="%3E";suffix="%3C"] - expected: FAIL - - [:accessMode="read";prefix="%3E";suffix="%3E"] - expected: FAIL - - [:accessMode="read";prefix="%3E";suffix=","] - expected: FAIL - - [:accessMode="read";prefix=",";suffix=""] - expected: FAIL - - [:accessMode="read";prefix=",";suffix="%3C"] - expected: FAIL - - [:accessMode="read";prefix=",";suffix="%3E"] - expected: FAIL - - [:accessMode="read";prefix=",";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix="%3C"] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix="%3E"] - expected: FAIL - - [:accessMode="read_write";prefix="";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix="%3C";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix="%3C";suffix="%3C"] - expected: FAIL - - [:accessMode="read_write";prefix="%3C";suffix="%3E"] - expected: FAIL - - [:accessMode="read_write";prefix="%3C";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix="%3E";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix="%3E";suffix="%3C"] - expected: FAIL - - [:accessMode="read_write";prefix="%3E";suffix="%3E"] - expected: FAIL - - [:accessMode="read_write";prefix="%3E";suffix=","] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix=""] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix="%3C"] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix="%3E"] - expected: FAIL - - [:accessMode="read_write";prefix=",";suffix=","] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,binary,af_subtraction:scalar_vector:*] - [:inputSource="const";dim=2] - expected: FAIL - - [:inputSource="const";dim=3] - expected: FAIL - - [:inputSource="const";dim=4] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,var_access_mode:implicit_access_mode:*] - [:addressSpace="storage";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="uniform";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="private";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="workgroup";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=true;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - [:addressSpace="function";explicitSpace=false;explicitAccess=false;accessMode="";stage="compute"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_indirect_recursion:*] - [:target="i32"] - expected: FAIL - - [:target="S"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,const_assert,const_assert:constant_expression_assert:*] - [:case="any_false";scope="module"] - expected: FAIL - - [:case="any_false";scope="function"] - expected: FAIL - - [:case="any_true";scope="module"] - expected: FAIL - - [:case="any_true";scope="function"] - expected: FAIL - - [:case="binary_op_eq_const_false";scope="module"] - expected: FAIL - - [:case="binary_op_eq_const_false";scope="function"] - expected: FAIL - - [:case="binary_op_eq_const_true";scope="module"] - expected: FAIL - - [:case="binary_op_eq_const_true";scope="function"] - expected: FAIL - - [:case="const_eq_literal_float_false";scope="module"] - expected: FAIL - - [:case="const_eq_literal_float_false";scope="function"] - expected: FAIL - - [:case="const_eq_literal_float_true";scope="module"] - expected: FAIL - - [:case="const_eq_literal_float_true";scope="function"] - expected: FAIL - - [:case="const_eq_literal_int_false";scope="module"] - expected: FAIL - - [:case="const_eq_literal_int_false";scope="function"] - expected: FAIL - - [:case="const_eq_literal_int_true";scope="module"] - expected: FAIL - - [:case="const_eq_literal_int_true";scope="function"] - expected: FAIL - - [:case="literal_false";scope="module"] - expected: FAIL - - [:case="literal_false";scope="function"] - expected: FAIL - - [:case="literal_not_false";scope="module"] - expected: FAIL - - [:case="literal_not_false";scope="function"] - expected: FAIL - - [:case="literal_not_true";scope="module"] - expected: FAIL - - [:case="literal_not_true";scope="function"] - expected: FAIL - - [:case="literal_true";scope="module"] - expected: FAIL - - [:case="literal_true";scope="function"] - expected: FAIL - - [:case="min_max_false";scope="module"] - expected: FAIL - - [:case="min_max_false";scope="function"] - expected: FAIL - - [:case="min_max_true";scope="module"] - expected: FAIL - - [:case="min_max_true";scope="function"] - expected: FAIL - - [:case="variable_false";scope="module"] - expected: FAIL - - [:case="variable_false";scope="function"] - expected: FAIL - - [:case="variable_not_false";scope="module"] - expected: FAIL - - [:case="variable_not_false";scope="function"] - expected: FAIL - - [:case="variable_not_true";scope="module"] - expected: FAIL - - [:case="variable_not_true";scope="function"] - expected: FAIL - - [:case="variable_true";scope="module"] - expected: FAIL - - [:case="variable_true";scope="function"] - expected: FAIL - - -[cts.https.html?q=webgpu:compat,api,validation,encoding,cmds,copyTextureToBuffer:compressed:*] - [:format="bc1-rgba-unorm"] - expected: FAIL - - [:format="bc1-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc2-rgba-unorm"] - expected: FAIL - - [:format="bc2-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc3-rgba-unorm"] - expected: FAIL - - [:format="bc3-rgba-unorm-srgb"] - expected: FAIL - - [:format="bc4-r-unorm"] - expected: FAIL - - [:format="bc4-r-snorm"] - expected: FAIL - - [:format="bc5-rg-unorm"] - expected: FAIL - - [:format="bc5-rg-snorm"] - expected: FAIL - - [:format="bc6h-rgb-ufloat"] - expected: FAIL - - [:format="bc6h-rgb-float"] - expected: FAIL - - [:format="bc7-rgba-unorm"] - expected: FAIL - - [:format="bc7-rgba-unorm-srgb"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:function_scope:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,modf:abstract_vec2_whole:*] - [:inputSource="const"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,ptr_spelling:ptr_handle_space_invalid:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,const:no_indirect_recursion_via_struct_attribute:*] - [:target="a";attribute="align"] - expected: FAIL - - [:target="a";attribute="location"] - expected: FAIL - - [:target="a";attribute="size"] - expected: FAIL - - [:target="b";attribute="align"] - expected: FAIL - - [:target="b";attribute="location"] - expected: FAIL - - [:target="b";attribute="size"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,decl,override:no_direct_recursion:*] - [:target="a"] - expected: FAIL - - [:target="b"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,clamp:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="i32"] - expected: FAIL - - [:stage="constant";type="vec2%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Ci32%3E"] - expected: FAIL - - [:stage="constant";type="u32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cu32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cu32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cu32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="i32"] - expected: FAIL - - [:stage="override";type="vec2%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Ci32%3E"] - expected: FAIL - - [:stage="override";type="u32"] - expected: FAIL - - [:stage="override";type="vec2%3Cu32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cu32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,types,alias:no_direct_recursion:*] - [:target="i32"] - expected: FAIL - - [:target="T"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,parse,diagnostic:valid_locations:*] - [:type="attribute";location="module"] - expected: FAIL - - [:type="attribute";location="function"] - expected: FAIL - - [:type="attribute";location="compound"] - expected: FAIL - - [:type="attribute";location="if_stmt"] - expected: FAIL - - [:type="attribute";location="if_then"] - expected: FAIL - - [:type="attribute";location="if_else"] - expected: FAIL - - [:type="attribute";location="switch_stmt"] - expected: FAIL - - [:type="attribute";location="switch_body"] - expected: FAIL - - [:type="attribute";location="switch_default"] - expected: FAIL - - [:type="attribute";location="switch_case"] - expected: FAIL - - [:type="attribute";location="loop_stmt"] - expected: FAIL - - [:type="attribute";location="loop_body"] - expected: FAIL - - [:type="attribute";location="loop_continuing"] - expected: FAIL - - [:type="attribute";location="while_stmt"] - expected: FAIL - - [:type="attribute";location="while_body"] - expected: FAIL - - [:type="attribute";location="for_stmt"] - expected: FAIL - - [:type="attribute";location="for_body"] - expected: FAIL - - [:type="directive";location="module"] - expected: FAIL - - [:type="directive";location="function"] - expected: FAIL - - [:type="directive";location="compound"] - expected: FAIL - - [:type="directive";location="if_stmt"] - expected: FAIL - - [:type="directive";location="if_then"] - expected: FAIL - - [:type="directive";location="if_else"] - expected: FAIL - - [:type="directive";location="switch_stmt"] - expected: FAIL - - [:type="directive";location="switch_body"] - expected: FAIL - - [:type="directive";location="switch_default"] - expected: FAIL - - [:type="directive";location="switch_case"] - expected: FAIL - - [:type="directive";location="loop_stmt"] - expected: FAIL - - [:type="directive";location="loop_body"] - expected: FAIL - - [:type="directive";location="loop_continuing"] - expected: FAIL - - [:type="directive";location="while_stmt"] - expected: FAIL - - [:type="directive";location="while_body"] - expected: FAIL - - [:type="directive";location="for_stmt"] - expected: FAIL - - [:type="directive";location="for_body"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,restrictions:vertex_returns_position:*] - [:case="bare_position"] - expected: FAIL - - [:case="nested_position"] - expected: FAIL - - [:case="no_bare_position"] - expected: FAIL - - [:case="no_nested_position"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,tan:values:*] - [:stage="constant";type="abstract-float"] - expected: FAIL - - [:stage="constant";type="f32"] - expected: FAIL - - [:stage="constant";type="vec2%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cabstract-float%3E"] - expected: FAIL - - [:stage="constant";type="vec4%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="f32"] - expected: FAIL - - [:stage="override";type="vec2%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec3%3Cf32%3E"] - expected: FAIL - - [:stage="override";type="vec4%3Cf32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,functions,alias_analysis:member_accessors:*] - [:a_use="no_access";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="no_access";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="no_access";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="assign";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="assign";b_use="binary_lhs";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="no_access";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="no_access";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="assign";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="assign";aliased=false] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_lhs";aliased=true] - expected: FAIL - - [:a_use="binary_lhs";b_use="binary_lhs";aliased=false] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,group_and_binding:function_scope_texture:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,shader_io,workgroup_size:workgroup_size_fragment_shader:*] - [:] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,log:integer_argument:*] - [:type="f32"] - expected: FAIL - - [:type="i32"] - expected: FAIL - - [:type="vec2%3Ci32%3E"] - expected: FAIL - - [:type="vec3%3Ci32%3E"] - expected: FAIL - - [:type="vec4%3Ci32%3E"] - expected: FAIL - - [:type="u32"] - expected: FAIL - - [:type="vec2%3Cu32%3E"] - expected: FAIL - - [:type="vec3%3Cu32%3E"] - expected: FAIL - - [:type="vec4%3Cu32%3E"] - expected: FAIL - - -[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,atomics,atomicCompareExchangeWeak:compare_exchange_weak_workgroup_basic:*] - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=1;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL + expected: CRASH - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=2;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=8;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=32;dispatchSize=16;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=1;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=4;mapId="remap";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="u32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="passthrough";scalarType="i32"] - expected: FAIL - - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="u32"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipeline,at_over:*] + expected: CRASH - [:workgroupSize=64;dispatchSize=8;mapId="remap";scalarType="i32"] +[cts.https.html?q=webgpu:api,validation,createView:format:*] + [:textureFormatFeature="_undef_";viewFormatFeature="_undef_"] expected: FAIL - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="u32"] + [:textureFormatFeature="_undef_";viewFormatFeature="depth32float-stencil8"] expected: FAIL - [:workgroupSize=64;dispatchSize=16;mapId="passthrough";scalarType="i32"] + [:textureFormatFeature="_undef_";viewFormatFeature="texture-compression-bc"] expected: FAIL - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="u32"] + [:textureFormatFeature="depth32float-stencil8";viewFormatFeature="_undef_"] expected: FAIL - [:workgroupSize=64;dispatchSize=16;mapId="remap";scalarType="i32"] + [:textureFormatFeature="depth32float-stencil8";viewFormatFeature="depth32float-stencil8"] expected: FAIL - -[cts.https.html?q=webgpu:shader,validation,expression,call,builtin,asin:integer_argument:*] - [:type="f32"] + [:textureFormatFeature="depth32float-stencil8";viewFormatFeature="texture-compression-bc"] expected: FAIL - [:type="i32"] + [:textureFormatFeature="texture-compression-bc";viewFormatFeature="_undef_"] expected: FAIL - [:type="vec2%3Ci32%3E"] + [:textureFormatFeature="texture-compression-bc";viewFormatFeature="depth32float-stencil8"] expected: FAIL - [:type="vec3%3Ci32%3E"] - expected: FAIL - [:type="vec4%3Ci32%3E"] - expected: FAIL +[cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createPipeline,at_over:*] + expected: CRASH - [:type="u32"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:abstract_float_nonmatching_vec3:*] + expected: CRASH - [:type="vec2%3Cu32%3E"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,mix:f32_nonmatching_vec3:*] + expected: CRASH - [:type="vec3%3Cu32%3E"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,binary,f16_matrix_vector_multiplication:vector_matrix_compound:*] + expected: [OK, CRASH] - [:type="vec4%3Cu32%3E"] - expected: FAIL +[cts.https.html?q=webgpu:shader,execution,expression,call,builtin,reflect:f16_vec2:*] + expected: [OK, CRASH] diff --git a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_copy.https.html.ini b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_copy.https.html.ini deleted file mode 100644 index 935dad57416..00000000000 --- a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_copy.https.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[canvas_composite_alpha_bgra8unorm_opaque_copy.https.html] - expected: [PASS, FAIL] diff --git a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_draw.https.html.ini b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_draw.https.html.ini index 5412573a942..507d9358bb5 100644 --- a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_draw.https.html.ini +++ b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_bgra8unorm_opaque_draw.https.html.ini @@ -1,2 +1,2 @@ [canvas_composite_alpha_bgra8unorm_opaque_draw.https.html] - expected: [PASS, FAIL] + expected: [PASS, FAIL, CRASH] diff --git a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_copy.https.html.ini b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_copy.https.html.ini deleted file mode 100644 index 7333eab184f..00000000000 --- a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_copy.https.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[canvas_composite_alpha_rgba8unorm_opaque_copy.https.html] - expected: [PASS, FAIL] diff --git a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_draw.https.html.ini b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_draw.https.html.ini deleted file mode 100644 index fdfa88a2521..00000000000 --- a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_opaque_draw.https.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[canvas_composite_alpha_rgba8unorm_opaque_draw.https.html] - expected: [PASS, FAIL] diff --git a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_premultiplied_draw.https.html.ini b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_premultiplied_draw.https.html.ini index ff0a6d588fe..426c1fc499e 100644 --- a/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_premultiplied_draw.https.html.ini +++ b/tests/wpt/webgpu/meta/webgpu/webgpu/web_platform/reftests/canvas_composite_alpha_rgba8unorm_premultiplied_draw.https.html.ini @@ -1,2 +1,2 @@ [canvas_composite_alpha_rgba8unorm_premultiplied_draw.https.html] - expected: FAIL + expected: [CRASH, FAIL] diff --git a/tests/wpt/webgpu/tests/checkout_commit.txt b/tests/wpt/webgpu/tests/checkout_commit.txt index 5507b2d47d3..bc28bbc4dd3 100644 --- a/tests/wpt/webgpu/tests/checkout_commit.txt +++ b/tests/wpt/webgpu/tests/checkout_commit.txt @@ -1 +1 @@ -f2b59e03621238d0d0fd6305be2c406ce3e45ac2 +ae15a59832989c22982acaeaccdf5d379afced62 diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/data_cache.js b/tests/wpt/webgpu/tests/webgpu/common/framework/data_cache.js index e426ffbbc91..74d5af8cc2d 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/data_cache.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/data_cache.js @@ -1,9 +1,66 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** + * Utilities to improve the performance of the CTS, by caching data that is + * expensive to build using a two-level cache (in-memory, pre-computed file). + */import { assert } from '../util/util.js'; -/** DataCache is an interface to a data store used to hold cached data */ + + + + +/** Logger is a basic debug logger function */ + + +/** + * DataCacheNode represents a single cache entry in the LRU DataCache. + * DataCacheNode is a doubly linked list, so that least-recently-used entries can be removed, and + * cache hits can move the node to the front of the list. + */ +class DataCacheNode { + constructor(path, data) { + this.path = path; + this.data = data; + } + + /** insertAfter() re-inserts this node in the doubly-linked list after `prev` */ + insertAfter(prev) { + this.unlink(); + this.next = prev.next; + this.prev = prev; + prev.next = this; + if (this.next) { + this.next.prev = this; + } + } + + /** unlink() removes this node from the doubly-linked list */ + unlink() { + const prev = this.prev; + const next = this.next; + if (prev) { + prev.next = next; + } + if (next) { + next.prev = prev; + } + this.prev = null; + this.next = null; + } + + // The file path this node represents + // The deserialized data for this node + prev = null; // The previous node in the doubly-linked list + next = null; // The next node in the doubly-linked list +} + +/** DataCache is an interface to a LRU-cached data store used to hold data cached by path */ export class DataCache { + constructor() { + this.lruHeadNode.next = this.lruTailNode; + this.lruTailNode.prev = this.lruHeadNode; + } + /** setDataStore() sets the backing data store used by the data cache */ setStore(dataStore) { this.dataStore = dataStore; @@ -20,11 +77,14 @@ export class DataCache { * building the data and storing it in the cache. */ async fetch(cacheable) { - // First check the in-memory cache - let data = this.cache.get(cacheable.path); - if (data !== undefined) { - this.log('in-memory cache hit'); - return Promise.resolve(data); + { + // First check the in-memory cache + const node = this.cache.get(cacheable.path); + if (node !== undefined) { + this.log('in-memory cache hit'); + node.insertAfter(this.lruHeadNode); + return Promise.resolve(node.data); + } } this.log('in-memory cache miss'); // In in-memory cache miss. @@ -41,25 +101,51 @@ export class DataCache { } if (serialized !== undefined) { this.log(`deserializing`); - data = cacheable.deserialize(serialized); - this.cache.set(cacheable.path, data); + const data = cacheable.deserialize(serialized); + this.addToCache(cacheable.path, data); return data; } } // Not found anywhere. Build the data, and cache for future lookup. this.log(`cache: building (${cacheable.path})`); - data = await cacheable.build(); - this.cache.set(cacheable.path, data); + const data = await cacheable.build(); + this.addToCache(cacheable.path, data); return data; } + /** + * addToCache() creates a new node for `path` and `data`, inserting the new node at the front of + * the doubly-linked list. If the number of entries in the cache exceeds this.maxCount, then the + * least recently used entry is evicted + * @param path the file path for the data + * @param data the deserialized data + */ + addToCache(path, data) { + if (this.cache.size >= this.maxCount) { + const toEvict = this.lruTailNode.prev; + assert(toEvict !== null); + toEvict.unlink(); + this.cache.delete(toEvict.path); + this.log(`evicting ${toEvict.path}`); + } + const node = new DataCacheNode(path, data); + node.insertAfter(this.lruHeadNode); + this.cache.set(path, node); + this.log(`added ${path}. new count: ${this.cache.size}`); + } + log(msg) { if (this.debugLogger !== null) { this.debugLogger(`DataCache: ${msg}`); } } + // Max number of entries in the cache before LRU entries are evicted. + maxCount = 4; + cache = new Map(); + lruHeadNode = new DataCacheNode('', null); // placeholder node (no path or data) + lruTailNode = new DataCacheNode('', null); // placeholder node (no path or data) unavailableFiles = new Set(); dataStore = null; debugLogger = null; @@ -86,4 +172,4 @@ export function setIsBuildingDataCache(value = true) { * DataCache. * The 'npm run gen_cache' tool will look for module-scope variables of this * interface, with the name `d`. - */ + */ \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/fixture.js b/tests/wpt/webgpu/tests/webgpu/common/framework/fixture.js index 34ea469708f..d64245f5f89 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/fixture.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/fixture.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../util/util.js'; export class SkipTestCase extends Error {} export class UnexpectedPassError extends Error {} @@ -9,15 +9,20 @@ export { TestCaseRecorder } from '../internal/logging/test_case_recorder.js'; /** The fully-general type for params passed to a test function invocation. */ + + + + + + + + export class SubcaseBatchState { constructor( - recorder, - /** The case parameters for this test fixture shared state. Subcase params are not included. */ - params - ) { - this.recorder = recorder; - this.params = params; - } + recorder, + /** The case parameters for this test fixture shared state. Subcase params are not included. */ + params) + {this.recorder = recorder;this.params = params;} /** * Runs before the `.before()` function. @@ -42,6 +47,8 @@ export class SubcaseBatchState { * (i.e. every time the test function is run). */ export class Fixture { + + /** * Interface for recording logs and test status. * @@ -138,11 +145,11 @@ export class Fixture { tryTrackForCleanup(o) { if (typeof o === 'object' && o !== null) { if ( - 'destroy' in o || - 'close' in o || - o instanceof WebGLRenderingContext || - o instanceof WebGL2RenderingContext - ) { + 'destroy' in o || + 'close' in o || + o instanceof WebGLRenderingContext || + o instanceof WebGL2RenderingContext) + { this.objectsToCleanUp.push(o); } } @@ -214,7 +221,7 @@ export class Fixture { /** Expect that the provided promise resolves (fulfills). */ shouldResolve(p, msg) { - this.eventualAsyncExpectation(async niceStack => { + this.eventualAsyncExpectation(async (niceStack) => { const m = msg ? ': ' + msg : ''; try { await p; @@ -230,16 +237,26 @@ export class Fixture { } /** Expect that the provided promise rejects, with the provided exception name. */ - shouldReject(expectedName, p, msg) { - this.eventualAsyncExpectation(async niceStack => { - const m = msg ? ': ' + msg : ''; + shouldReject( + expectedName, + p, + { allowMissingStack = false, message } = {}) + { + this.eventualAsyncExpectation(async (niceStack) => { + const m = message ? ': ' + message : ''; try { await p; niceStack.message = 'DID NOT REJECT' + m; this.rec.expectationFailed(niceStack); } catch (ex) { - niceStack.message = 'rejected as expected' + m; this.expectErrorValue(expectedName, ex, niceStack); + if (!allowMissingStack) { + if (!(ex instanceof Error && typeof ex.stack === 'string')) { + const exMessage = ex instanceof Error ? ex.message : '?'; + niceStack.message = `rejected as expected, but missing stack (${exMessage})${m}`; + this.rec.expectationFailed(niceStack); + } + } } }); } @@ -250,8 +267,12 @@ export class Fixture { * * MAINTENANCE_TODO: Change to `string | false` so the exception name is always checked. */ - shouldThrow(expectedError, fn, msg) { - const m = msg ? ': ' + msg : ''; + shouldThrow( + expectedError, + fn, + { allowMissingStack = false, message } = {}) + { + const m = message ? ': ' + message : ''; try { fn(); if (expectedError === false) { @@ -264,6 +285,11 @@ export class Fixture { this.rec.expectationFailed(new Error('threw unexpectedly' + m)); } else { this.expectErrorValue(expectedError, ex, new Error(m)); + if (!allowMissingStack) { + if (!(ex instanceof Error && typeof ex.stack === 'string')) { + this.rec.expectationFailed(new Error('threw as expected, but missing stack' + m)); + } + } } } } @@ -283,8 +309,11 @@ export class Fixture { * If the argument is an `Error`, fail (or warn). If it's `undefined`, no-op. * If the argument is an array, apply the above behavior on each of elements. */ - expectOK(error, { mode = 'fail', niceStack } = {}) { - const handleError = error => { + expectOK( + error, + { mode = 'fail', niceStack } = {}) + { + const handleError = (error) => { if (error instanceof Error) { if (niceStack) { error.stack = niceStack.stack; @@ -308,9 +337,22 @@ export class Fixture { } } - eventualExpectOK(error, { mode = 'fail' } = {}) { - this.eventualAsyncExpectation(async niceStack => { + eventualExpectOK( + error, + { mode = 'fail' } = {}) + { + this.eventualAsyncExpectation(async (niceStack) => { this.expectOK(await error, { mode, niceStack }); }); } } + + + +/** + * FixtureClass encapsulates a constructor for fixture and a corresponding + * shared state factory function. An interface version of the type is also + * defined for mixin declaration use ONLY. The interface version is necessary + * because mixin classes need a constructor with a single any[] rest + * parameter. + */ \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/metadata.js b/tests/wpt/webgpu/tests/webgpu/common/framework/metadata.js index daa8b4dbca1..7742a9c1ae5 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/metadata.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/metadata.js @@ -1,6 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../util/util.js'; /** Metadata about tests (that can't be derived at runtime). */ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../util/util.js'; /** Metadata about tests (that can't be derived at runtime). */ + + + + + + + + + + + + export function loadMetadataForSuite(suiteDir) { assert(typeof require !== 'undefined', 'loadMetadataForSuite is only implemented on Node'); @@ -13,4 +25,4 @@ export function loadMetadataForSuite(suiteDir) { const metadata = JSON.parse(fs.readFileSync(metadataFile, 'utf8')); return metadata; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/params_builder.js b/tests/wpt/webgpu/tests/webgpu/common/framework/params_builder.js index 63c6431fd2b..d3d0d45880a 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/params_builder.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/params_builder.js @@ -1,14 +1,113 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { mergeParams, mergeParamsChecked } from '../internal/params_utils.js'; -import { comparePublicParamsPaths, Ordering } from '../internal/query/compare.js'; -import { stringifyPublicParams } from '../internal/query/stringify_params.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { mergeParams, mergeParamsChecked } from '../internal/params_utils.js';import { comparePublicParamsPaths, Ordering } from '../internal/query/compare.js';import { stringifyPublicParams } from '../internal/query/stringify_params.js'; + import { assert, mapLazy, objectEquals } from '../util/util.js'; + + +// ================================================================ +// "Public" ParamsBuilder API / Documentation +// ================================================================ + +/** + * Provides doc comments for the methods of CaseParamsBuilder and SubcaseParamsBuilder. + * (Also enforces rough interface match between them.) + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** + * Determines the resulting parameter object type which would be generated by an object of + * the given ParamsBuilder type. + */ + + + + + + + + + +// ================================================================ +// Implementation +// ================================================================ + +/** + * Iterable over pairs of either: + * - `[case params, Iterable]` if there are subcases. + * - `[case params, undefined]` if not. + */ + + + + /** * Base class for `CaseParamsBuilder` and `SubcaseParamsBuilder`. */ export class ParamsBuilderBase { + + constructor(cases) { this.cases = cases; } @@ -16,12 +115,22 @@ export class ParamsBuilderBase { /** * Hidden from test files. Use `builderIterateCasesWithSubcases` to access this. */ + + + } /** * Calls the (normally hidden) `iterateCasesWithSubcases()` method. */ -export function builderIterateCasesWithSubcases(builder, caseFilter) { +export function builderIterateCasesWithSubcases( +builder, +caseFilter) +{ + + + + return builder.iterateCasesWithSubcases(caseFilter); } @@ -33,7 +142,10 @@ export function builderIterateCasesWithSubcases(builder, caseFilter) { * * This means, for example, that the `unit` passed into `TestBuilder.params()` can be reused. */ -export class CaseParamsBuilder extends ParamsBuilderBase { +export class CaseParamsBuilder extends +ParamsBuilderBase + +{ *iterateCasesWithSubcases(caseFilter) { for (const caseP of this.cases(caseFilter)) { if (caseFilter) { @@ -54,7 +166,9 @@ export class CaseParamsBuilder extends ParamsBuilderBase { } /** @inheritDoc */ - expandWithParams(expander) { + expandWithParams( + expander) + { const baseGenerator = this.cases; return new CaseParamsBuilder(function* (caseFilter) { for (const a of baseGenerator(caseFilter)) { @@ -74,7 +188,10 @@ export class CaseParamsBuilder extends ParamsBuilderBase { } /** @inheritDoc */ - expand(key, expander) { + expand( + key, + expander) + { const baseGenerator = this.cases; return new CaseParamsBuilder(function* (caseFilter) { for (const a of baseGenerator(caseFilter)) { @@ -94,7 +211,9 @@ export class CaseParamsBuilder extends ParamsBuilderBase { } /** @inheritDoc */ - combineWithParams(newParams) { + combineWithParams( + newParams) + { assertNotGenerator(newParams); const seenValues = new Set(); for (const params of newParams) { @@ -107,9 +226,12 @@ export class CaseParamsBuilder extends ParamsBuilderBase { } /** @inheritDoc */ - combine(key, values) { + combine( + key, + values) + { assertNotGenerator(values); - const mapped = mapLazy(values, v => ({ [key]: v })); + const mapped = mapLazy(values, (v) => ({ [key]: v })); return this.combineWithParams(mapped); } @@ -125,7 +247,7 @@ export class CaseParamsBuilder extends ParamsBuilderBase { /** @inheritDoc */ unless(pred) { - return this.filter(x => !pred(x)); + return this.filter((x) => !pred(x)); } /** @@ -156,8 +278,16 @@ export const kUnitCaseParamsBuilder = new CaseParamsBuilder(function* () { * SubcaseParamsBuilder is immutable. Each method call returns a new, immutable object, * modifying the list of subcases according to the method called. */ -export class SubcaseParamsBuilder extends ParamsBuilderBase { - constructor(cases, generator) { +export class SubcaseParamsBuilder extends +ParamsBuilderBase + +{ + + + constructor( + cases, + generator) + { super(cases); this.subcases = generator; } @@ -175,13 +305,18 @@ export class SubcaseParamsBuilder extends ParamsBuilderBase { const subcases = Array.from(this.subcases(caseP)); if (subcases.length) { - yield [caseP, subcases]; + yield [ + caseP, + subcases]; + } } } /** @inheritDoc */ - expandWithParams(expander) { + expandWithParams( + expander) + { const baseGenerator = this.subcases; return new SubcaseParamsBuilder(this.cases, function* (base) { for (const a of baseGenerator(base)) { @@ -193,7 +328,10 @@ export class SubcaseParamsBuilder extends ParamsBuilderBase { } /** @inheritDoc */ - expand(key, expander) { + expand( + key, + expander) + { const baseGenerator = this.subcases; return new SubcaseParamsBuilder(this.cases, function* (base) { for (const a of baseGenerator(base)) { @@ -208,13 +346,18 @@ export class SubcaseParamsBuilder extends ParamsBuilderBase { } /** @inheritDoc */ - combineWithParams(newParams) { + combineWithParams( + newParams) + { assertNotGenerator(newParams); return this.expandWithParams(() => newParams); } /** @inheritDoc */ - combine(key, values) { + combine( + key, + values) + { assertNotGenerator(values); return this.expand(key, () => values); } @@ -231,7 +374,7 @@ export class SubcaseParamsBuilder extends ParamsBuilderBase { /** @inheritDoc */ unless(pred) { - return this.filter(x => !pred(x)); + return this.filter((x) => !pred(x)); } } @@ -239,8 +382,8 @@ export class SubcaseParamsBuilder extends ParamsBuilderBase { function assertNotGenerator(x) { if ('constructor' in x) { assert( - x.constructor !== (function* () {})().constructor, + x.constructor !== function* () {}().constructor, 'Argument must not be a generator, as generators are not reusable' ); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/resources.js b/tests/wpt/webgpu/tests/webgpu/common/framework/resources.js index 72eabeda4e4..aa6ac2c1d5c 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/resources.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/resources.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Base path for resources. The default value is correct for non-worker WPT, but standalone and * workers must access resources using a different base path, so this is overridden in * `test_worker-worker.ts` and `standalone.ts`. - */ let baseResourcePath = './resources'; -let crossOriginHost = ''; + */let baseResourcePath = './resources';let crossOriginHost = ''; function getAbsoluteBaseResourcePath(path) { // Path is already an absolute one. @@ -57,8 +56,8 @@ export function getCrossOriginResourcePath(pathRelativeToResourcesDir, onlineUrl crossOriginHost + getAbsoluteBaseResourcePath(baseResourcePath) + '/' + - pathRelativeToResourcesDir - ); + pathRelativeToResourcesDir); + } // Using 'localhost' and '127.0.0.1' trick to load cross origin resource. Set cross origin host name @@ -78,8 +77,8 @@ export function getCrossOriginResourcePath(pathRelativeToResourcesDir, onlineUrl location.port + getAbsoluteBaseResourcePath(baseResourcePath) + '/' + - pathRelativeToResourcesDir - ); + pathRelativeToResourcesDir); + } return onlineUrl; @@ -108,4 +107,4 @@ export function setBaseResourcePath(path) { */ export function setCrossOriginHost(host) { crossOriginHost = host; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/test_config.js b/tests/wpt/webgpu/tests/webgpu/common/framework/test_config.js index c9806c7b6c1..81984dbec5e 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/test_config.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/test_config.js @@ -1,11 +1,32 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ + + + + + + + + + + + + + + + + + + + + + export const globalTestConfig = { maxSubcasesInFlight: 500, testHeartbeatCallback: () => {}, noRaceWithRejectOnTimeout: false, unrollConstEvalLoops: false, - compatibility: false, -}; + compatibility: false +}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/framework/test_group.js b/tests/wpt/webgpu/tests/webgpu/common/framework/test_group.js index 2d1d3c1c07a..82b409c6145 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/framework/test_group.js +++ b/tests/wpt/webgpu/tests/webgpu/common/framework/test_group.js @@ -1,3 +1,3 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export { makeTestGroup } from '../internal/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export { makeTestGroup } from '../internal/test_group.js'; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/file_loader.js b/tests/wpt/webgpu/tests/webgpu/common/internal/file_loader.js index 2420782e78b..f9f4f17fb46 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/file_loader.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/file_loader.js @@ -1,34 +1,88 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../util/util.js'; import { parseQuery } from './query/parseQuery.js'; + import { loadTreeForQuery } from './tree.js'; // A listing file, e.g. either of: // - `src/webgpu/listing.ts` (which is dynamically computed, has a Promise) // - `out/webgpu/listing.js` (which is pre-baked, has a TestSuiteListing) + + + + +// A .spec.ts file, as imported. + + + + + + + + + + + + + + + +// Override the types for addEventListener/removeEventListener so the callbacks can be used as +// strongly-typed. + + + + + + + + + + + + + + + + + + + + + + + // Base class for DefaultTestFileLoader and FakeTestFileLoader. + export class TestFileLoader extends EventTarget { + + + async importSpecFile(suite, path) { const url = `${suite}/${path.join('/')}.spec.js`; this.dispatchEvent(new MessageEvent('import', { data: { url } })); - const ret = await this.import(url); this.dispatchEvent(new MessageEvent('imported', { data: { url } })); - return ret; } - async loadTree(query, { subqueriesToExpand = [], maxChunkTime = Infinity } = {}) { + async loadTree( + query, + { + subqueriesToExpand = [], + maxChunkTime = Infinity + } = {}) + { const tree = await loadTreeForQuery(this, query, { - subqueriesToExpand: subqueriesToExpand.map(s => { + subqueriesToExpand: subqueriesToExpand.map((s) => { const q = parseQuery(s); assert(q.level >= 2, () => `subqueriesToExpand entries should not be multi-file:\n ${q}`); return q; }), - maxChunkTime, + maxChunkTime }); this.dispatchEvent(new MessageEvent('finish')); return tree; @@ -48,4 +102,4 @@ export class DefaultTestFileLoader extends TestFileLoader { import(path) { return import(`../../${path}`); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/log_message.js b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/log_message.js index 3e5fb1c99d8..234b7c2cc90 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/log_message.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/log_message.js @@ -1,7 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { extractImportantStackTrace } from '../stack.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { extractImportantStackTrace } from '../stack.js'; export class LogMessageWithStack extends Error { + + stackHiddenMessage = undefined; constructor(name, ex) { @@ -39,4 +41,4 @@ export class LogMessageWithStack extends Error { */ export function prettyPrintLog(log) { return ' - ' + log.toJSON().replace(/\n/g, '\n '); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/logger.js b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/logger.js index 77b78f0d758..224af20ddc5 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/logger.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/logger.js @@ -1,11 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { version } from '../version.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { version } from '../version.js'; import { TestCaseRecorder } from './test_case_recorder.js'; + + export class Logger { static globalDebugMode = false; + results = new Map(); constructor({ overrideDebugMode } = {}) { @@ -16,12 +19,12 @@ export class Logger { const result = { status: 'running', timems: -1 }; this.results.set(name, result); return [ - new TestCaseRecorder(result, this.overriddenDebugMode ?? Logger.globalDebugMode), - result, - ]; + new TestCaseRecorder(result, this.overriddenDebugMode ?? Logger.globalDebugMode), + result]; + } asJSON(space) { return JSON.stringify({ version, results: Array.from(this.results) }, undefined, space); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/result.js b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/result.js index 9b2db0e1926..a7eb281daf3 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/result.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/result.js @@ -1,3 +1,4 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export {}; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // MAINTENANCE_TODO: Add warn expectations +export {}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/test_case_recorder.js b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/test_case_recorder.js index 8ca5c0d4d64..7b9a5302cec 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/logging/test_case_recorder.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/logging/test_case_recorder.js @@ -1,29 +1,45 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { SkipTestCase, UnexpectedPassError } from '../../framework/fixture.js'; -import { globalTestConfig } from '../../framework/test_config.js'; -import { now, assert } from '../../util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { SkipTestCase, UnexpectedPassError } from '../../framework/fixture.js';import { globalTestConfig } from '../../framework/test_config.js';import { now, assert } from '../../util/util.js'; + +import { LogMessageWithStack } from './log_message.js';var + + +LogSeverity = /*#__PURE__*/function (LogSeverity) {LogSeverity[LogSeverity["NotRun"] = 0] = "NotRun";LogSeverity[LogSeverity["Skip"] = 1] = "Skip";LogSeverity[LogSeverity["Pass"] = 2] = "Pass";LogSeverity[LogSeverity["Warn"] = 3] = "Warn";LogSeverity[LogSeverity["ExpectFailed"] = 4] = "ExpectFailed";LogSeverity[LogSeverity["ValidationFailed"] = 5] = "ValidationFailed";LogSeverity[LogSeverity["ThrewException"] = 6] = "ThrewException";return LogSeverity;}(LogSeverity || {}); + + + + + + + -import { LogMessageWithStack } from './log_message.js'; -var LogSeverity; -(function (LogSeverity) { - LogSeverity[(LogSeverity['Pass'] = 0)] = 'Pass'; - LogSeverity[(LogSeverity['Skip'] = 1)] = 'Skip'; - LogSeverity[(LogSeverity['Warn'] = 2)] = 'Warn'; - LogSeverity[(LogSeverity['ExpectFailed'] = 3)] = 'ExpectFailed'; - LogSeverity[(LogSeverity['ValidationFailed'] = 4)] = 'ValidationFailed'; - LogSeverity[(LogSeverity['ThrewException'] = 5)] = 'ThrewException'; -})(LogSeverity || (LogSeverity = {})); const kMaxLogStacks = 2; const kMinSeverityForStack = LogSeverity.Warn; +function logSeverityToString(status) { + switch (status) { + case LogSeverity.NotRun: + return 'notrun'; + case LogSeverity.Pass: + return 'pass'; + case LogSeverity.Skip: + return 'skip'; + case LogSeverity.Warn: + return 'warn'; + default: + return 'fail'; // Everything else is an error + } +} + /** Holds onto a LiveTestCaseResult owned by the Logger, and writes the results into it. */ export class TestCaseRecorder { + nonskippedSubcaseCount = 0; inSubCase = false; - subCaseStatus = LogSeverity.Pass; - finalCaseStatus = LogSeverity.Pass; + subCaseStatus = LogSeverity.NotRun; + finalCaseStatus = LogSeverity.NotRun; hideStacksBelowSeverity = kMinSeverityForStack; startTime = -1; logs = []; @@ -56,20 +72,13 @@ export class TestCaseRecorder { } // Convert numeric enum back to string (but expose 'exception' as 'fail') - this.result.status = - this.finalCaseStatus === LogSeverity.Pass - ? 'pass' - : this.finalCaseStatus === LogSeverity.Skip - ? 'skip' - : this.finalCaseStatus === LogSeverity.Warn - ? 'warn' - : 'fail'; // Everything else is an error + this.result.status = logSeverityToString(this.finalCaseStatus); this.result.logs = this.logs; } beginSubCase() { - this.subCaseStatus = LogSeverity.Pass; + this.subCaseStatus = LogSeverity.NotRun; this.inSubCase = true; } @@ -87,9 +96,7 @@ export class TestCaseRecorder { } } finally { this.inSubCase = false; - if (this.subCaseStatus > this.finalCaseStatus) { - this.finalCaseStatus = this.subCaseStatus; - } + this.finalCaseStatus = Math.max(this.finalCaseStatus, this.subCaseStatus); } } @@ -103,7 +110,8 @@ export class TestCaseRecorder { } info(ex) { - this.logImpl(LogSeverity.Pass, 'INFO', ex); + // We need this to use the lowest LogSeverity so it doesn't override the current severity for this test case. + this.logImpl(LogSeverity.NotRun, 'INFO', ex); } skipped(ex) { @@ -122,6 +130,14 @@ export class TestCaseRecorder { this.logImpl(LogSeverity.ValidationFailed, 'VALIDATION FAILED', ex); } + passed() { + if (this.inSubCase) { + this.subCaseStatus = Math.max(this.subCaseStatus, LogSeverity.Pass); + } else { + this.finalCaseStatus = Math.max(this.finalCaseStatus, LogSeverity.Pass); + } + } + threw(ex) { if (ex instanceof SkipTestCase) { this.skipped(ex); @@ -137,9 +153,9 @@ export class TestCaseRecorder { // Final case status should be the "worst" of all log entries. if (this.inSubCase) { - if (level > this.subCaseStatus) this.subCaseStatus = level; + this.subCaseStatus = Math.max(this.subCaseStatus, level); } else { - if (level > this.finalCaseStatus) this.finalCaseStatus = level; + this.finalCaseStatus = Math.max(this.finalCaseStatus, level); } // setFirstLineOnly for all logs except `kMaxLogStacks` stacks at the highest severity @@ -165,4 +181,4 @@ export class TestCaseRecorder { this.logs.push(logMessage); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/params_utils.js b/tests/wpt/webgpu/tests/webgpu/common/internal/params_utils.js index 85b002c16ce..68acd1b7bc5 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/params_utils.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/params_utils.js @@ -1,10 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../util/util.js'; import { comparePublicParamsPaths, Ordering } from './query/compare.js'; import { kWildcard, kParamSeparator, kParamKVSeparator } from './query/separators.js'; + + + + + + + + + + + + + + export function paramKeyIsPublic(key) { return !key.startsWith('_'); } @@ -30,8 +44,55 @@ export function publicParamsEquals(x, y) { return comparePublicParamsPaths(x, y) === Ordering.Equal; } + + + + +/** + * Flatten a union of interfaces into a single interface encoding the same type. + * + * Flattens a union in such a way that: + * `{ a: number, b?: undefined } | { b: string, a?: undefined }` + * (which is the value type of `[{ a: 1 }, { b: 1 }]`) + * becomes `{ a: number | undefined, b: string | undefined }`. + * + * And also works for `{ a: number } | { b: string }` which maps to the same. + */ + + + + + + + + + + + function typeAssert() {} { + + + + + + + + + + + + + + + + + + + + + + { typeAssert(); typeAssert(); @@ -53,6 +114,11 @@ function typeAssert() {} } } + + + + + /** Merges two objects into one `{ ...a, ...b }` and return it with a flattened type. */ export function mergeParams(a, b) { return { ...a, ...b }; @@ -68,6 +134,5 @@ export function mergeParamsChecked(a, b) { Object.keys(merged).length === Object.keys(a).length + Object.keys(b).length, () => `Duplicate key between ${JSON.stringify(a)} and ${JSON.stringify(b)}` ); - return merged; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/compare.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/compare.js index 7e86f6c0f3b..8af64919a2e 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/compare.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/compare.js @@ -1,20 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, objectEquals } from '../../util/util.js'; -import { paramKeyIsPublic } from '../params_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, objectEquals } from '../../util/util.js';import { paramKeyIsPublic } from '../params_utils.js'; + + + +export let Ordering = /*#__PURE__*/function (Ordering) {Ordering[Ordering["Unordered"] = 0] = "Unordered";Ordering[Ordering["StrictSuperset"] = 1] = "StrictSuperset";Ordering[Ordering["Equal"] = 2] = "Equal";Ordering[Ordering["StrictSubset"] = 3] = "StrictSubset";return Ordering;}({}); + + + + -export let Ordering; /** * Compares two queries for their ordering (which is used to build the tree). * * See src/unittests/query_compare.spec.ts for examples. - */ (function (Ordering) { - Ordering[(Ordering['Unordered'] = 0)] = 'Unordered'; - Ordering[(Ordering['StrictSuperset'] = 1)] = 'StrictSuperset'; - Ordering[(Ordering['Equal'] = 2)] = 'Equal'; - Ordering[(Ordering['StrictSubset'] = 3)] = 'StrictSubset'; -})(Ordering || (Ordering = {})); + */ export function compareQueries(a, b) { if (a.suite !== b.suite) { return Ordering.Unordered; @@ -75,19 +76,20 @@ function comparePaths(a, b) { } export function comparePublicParamsPaths(a, b) { - const aKeys = Object.keys(a).filter(k => paramKeyIsPublic(k)); - const commonKeys = new Set(aKeys.filter(k => k in b)); + const aKeys = Object.keys(a).filter((k) => paramKeyIsPublic(k)); + const commonKeys = new Set(aKeys.filter((k) => k in b)); for (const k of commonKeys) { - if (!objectEquals(a[k], b[k])) { + // Treat +/-0.0 as different query by distinguishing them in objectEquals + if (!objectEquals(a[k], b[k], true)) { return Ordering.Unordered; } } - const bKeys = Object.keys(b).filter(k => paramKeyIsPublic(k)); + const bKeys = Object.keys(b).filter((k) => paramKeyIsPublic(k)); const aRemainingKeys = aKeys.length - commonKeys.size; const bRemainingKeys = bKeys.length - commonKeys.size; if (aRemainingKeys === 0 && bRemainingKeys === 0) return Ordering.Equal; if (aRemainingKeys === 0) return Ordering.StrictSuperset; if (bRemainingKeys === 0) return Ordering.StrictSubset; return Ordering.Unordered; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/encode_selectively.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/encode_selectively.js index cb365deb4bb..fe7bb1c1a5a 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/encode_selectively.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/encode_selectively.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Encodes a stringified TestQuery so that it can be placed in a `?q=` parameter in a URL. * * `encodeURIComponent` encodes in accordance with `application/x-www-form-urlencoded`, @@ -8,8 +8,7 @@ * (we interpret this purely from JavaScript). * So we encode the component, then selectively convert some %-encoded escape codes * back to their original form for readability/copyability. - */ export function encodeURIComponentSelectively(s) { - let ret = encodeURIComponent(s); + */export function encodeURIComponentSelectively(s) {let ret = encodeURIComponent(s); ret = ret.replace(/%22/g, '"'); // for JSON strings ret = ret.replace(/%2C/g, ','); // for path separator, and JSON arrays ret = ret.replace(/%3A/g, ':'); // for big separator @@ -21,4 +20,4 @@ ret = ret.replace(/%7D/g, '}'); // for JSON objects ret = ret.replace(/%E2%9C%97/g, '✗'); // for jsUndefinedMagicValue return ret; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/json_param_value.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/json_param_value.js index 1044a552037..ce7be0335fb 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/json_param_value.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/json_param_value.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, sortObjectByKey, isPlainObject } from '../../util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, sortObjectByKey, isPlainObject } from '../../util/util.js'; // JSON can't represent various values and by default stores them as `null`. // Instead, storing them as a magic string values in JSON. const jsUndefinedMagicValue = '_undef_'; @@ -17,23 +17,23 @@ const jsNegativeZeroMagicValue = '_negzero_'; const jsBigIntMagicPattern = /^(\d+)n$/; const toStringMagicValue = new Map([ - [undefined, jsUndefinedMagicValue], - [NaN, jsNaNMagicValue], - [Number.POSITIVE_INFINITY, jsPositiveInfinityMagicValue], - [Number.NEGATIVE_INFINITY, jsNegativeInfinityMagicValue], - // No -0 handling because it is special cased. +[undefined, jsUndefinedMagicValue], +[NaN, jsNaNMagicValue], +[Number.POSITIVE_INFINITY, jsPositiveInfinityMagicValue], +[Number.NEGATIVE_INFINITY, jsNegativeInfinityMagicValue] +// No -0 handling because it is special cased. ]); const fromStringMagicValue = new Map([ - [jsUndefinedMagicValue, undefined], - [jsNaNMagicValue, NaN], - [jsPositiveInfinityMagicValue, Number.POSITIVE_INFINITY], - [jsNegativeInfinityMagicValue, Number.NEGATIVE_INFINITY], - // -0 is handled in this direction because there is no comparison issue. - [jsNegativeZeroMagicValue, -0], -]); +[jsUndefinedMagicValue, undefined], +[jsNaNMagicValue, NaN], +[jsPositiveInfinityMagicValue, Number.POSITIVE_INFINITY], +[jsNegativeInfinityMagicValue, Number.NEGATIVE_INFINITY], +// -0 is handled in this direction because there is no comparison issue. +[jsNegativeZeroMagicValue, -0]] +); -function stringifyFilter(k, v) { +function stringifyFilter(_k, v) { // Make sure no one actually uses a magic value as a parameter. if (typeof v === 'string') { assert( @@ -57,7 +57,7 @@ function stringifyFilter(k, v) { assert( isPlainObject(v), `value must be a plain object but it appears to be a '${ - Object.getPrototypeOf(v).constructor.name + Object.getPrototypeOf(v).constructor.name }` ); } @@ -93,7 +93,7 @@ export function stringifyParamValueUniquely(value) { // 'any' is part of the JSON.parse reviver interface, so cannot be avoided. -function parseParamValueReviver(k, v) { +function parseParamValueReviver(_k, v) { if (fromStringMagicValue.has(v)) { return fromStringMagicValue.get(v); } @@ -111,4 +111,4 @@ function parseParamValueReviver(k, v) { export function parseParamValue(s) { return JSON.parse(s, parseParamValueReviver); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/parseQuery.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/parseQuery.js index b9f5ac2034a..b66b16ce916 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/parseQuery.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/parseQuery.js @@ -1,15 +1,19 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../util/util.js'; -import { badParamValueChars, paramKeyIsPublic } from '../params_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../util/util.js';import { + + badParamValueChars, + paramKeyIsPublic } from +'../params_utils.js'; import { parseParamValue } from './json_param_value.js'; import { + TestQueryMultiFile, TestQueryMultiTest, TestQueryMultiCase, - TestQuerySingleCase, -} from './query.js'; + TestQuerySingleCase } from +'./query.js'; import { kBigSeparator, kWildcard, kPathSeparator, kParamSeparator } from './separators.js'; import { validQueryPart } from './validQueryPart.js'; @@ -61,7 +65,6 @@ function parseQueryImpl(s) { `File-level query without wildcard ${kWildcard}. Did you want a file-level query \ (append ${kPathSeparator}${kWildcard}) or test-level query (append ${kBigSeparator}${kWildcard})?` ); - return new TestQueryMultiFile(suite, file); } assert(!filePathHasWildcard, `Wildcard ${kWildcard} must be at the end of the query string`); @@ -75,7 +78,6 @@ function parseQueryImpl(s) { `Test-level query without wildcard ${kWildcard}; did you want a test-level query \ (append ${kPathSeparator}${kWildcard}) or case-level query (append ${kBigSeparator}${kWildcard})?` ); - assert(file.length > 0, 'File part of test-level query was empty (::)'); return new TestQueryMultiTest(suite, file, test); } @@ -108,7 +110,10 @@ const kExampleQueries = `\ webgpu${kBigSeparator}a${kPathSeparator}b${kPathSeparator}${kWildcard} or \ webgpu${kBigSeparator}a${kPathSeparator}b${kPathSeparator}c${kBigSeparator}${kWildcard}`; -function parseBigPart(s, separator) { +function parseBigPart( +s, +separator) +{ if (s === '') { return { parts: [], wildcard: false }; } @@ -146,6 +151,5 @@ function parseSingleParamValue(s) { !badParamValueChars.test(s), `param value must not match ${badParamValueChars} - was ${s}` ); - return parseParamValue(s); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/query.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/query.js index b7db9fe4a59..e1db8750610 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/query.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/query.js @@ -1,7 +1,7 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { optionEnabled } from '../../runtime/helper/options.js'; -import { assert, unreachable } from '../../util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { optionEnabled } from '../../runtime/helper/options.js';import { assert, unreachable } from '../../util/util.js'; + import { compareQueries, Ordering } from './compare.js'; import { encodeURIComponentSelectively } from './encode_selectively.js'; @@ -15,6 +15,24 @@ import { stringifyPublicParams } from './stringify_params.js'; * TestQuery types are immutable. */ + + + + + +/** + * - 1 = MultiFile. + * - 2 = MultiTest. + * - 3 = MultiCase. + * - 4 = SingleCase. + */ + + + + + + + /** * A multi-file test query, like `s:*` or `s:a,b,*`. * @@ -24,6 +42,8 @@ export class TestQueryMultiFile { level = 1; isMultiFile = true; + + constructor(suite, file) { this.suite = suite; this.filePathParts = [...file]; @@ -52,6 +72,7 @@ export class TestQueryMultiTest extends TestQueryMultiFile { isMultiFile = false; isMultiTest = true; + constructor(suite, file, test) { super(suite, file); assert(file.length > 0, 'multi-test (or finer) query must have file-path'); @@ -64,10 +85,10 @@ export class TestQueryMultiTest extends TestQueryMultiFile { toStringHelper() { return [ - this.suite, - this.filePathParts.join(kPathSeparator), - [...this.testPathParts, kWildcard].join(kPathSeparator), - ]; + this.suite, + this.filePathParts.join(kPathSeparator), + [...this.testPathParts, kWildcard].join(kPathSeparator)]; + } } @@ -82,6 +103,7 @@ export class TestQueryMultiCase extends TestQueryMultiTest { isMultiTest = false; isMultiCase = true; + constructor(suite, file, test, params) { super(suite, file, test); assert(test.length > 0, 'multi-case (or finer) query must have test-path'); @@ -94,11 +116,11 @@ export class TestQueryMultiCase extends TestQueryMultiTest { toStringHelper() { return [ - this.suite, - this.filePathParts.join(kPathSeparator), - this.testPathParts.join(kPathSeparator), - stringifyPublicParams(this.params, true), - ]; + this.suite, + this.filePathParts.join(kPathSeparator), + this.testPathParts.join(kPathSeparator), + stringifyPublicParams(this.params, true)]; + } } @@ -117,11 +139,11 @@ export class TestQuerySingleCase extends TestQueryMultiCase { toStringHelper() { return [ - this.suite, - this.filePathParts.join(kPathSeparator), - this.testPathParts.join(kPathSeparator), - stringifyPublicParams(this.params), - ]; + this.suite, + this.filePathParts.join(kPathSeparator), + this.testPathParts.join(kPathSeparator), + stringifyPublicParams(this.params)]; + } } @@ -138,11 +160,15 @@ export class TestQuerySingleCase extends TestQueryMultiCase { * `suite:test_path:test_name:foo=1;bar=2;*`. */ export function parseExpectationsForTestQuery( - rawExpectations, +rawExpectations, - query, - wptURL -) { + + + + +query, +wptURL) +{ if (!Array.isArray(rawExpectations)) { unreachable('Expectations should be an array'); } @@ -181,14 +207,14 @@ Expectation should be of the form path/to/cts.https.html?worker=0&q=suite:test_p // Strip params from multicase expectations so that an expectation of foo=2;* // is stored if the test query is bar=3;* const queryForFilter = - expectationQuery instanceof TestQueryMultiCase - ? new TestQueryMultiCase( - expectationQuery.suite, - expectationQuery.filePathParts, - expectationQuery.testPathParts, - {} - ) - : expectationQuery; + expectationQuery instanceof TestQueryMultiCase ? + new TestQueryMultiCase( + expectationQuery.suite, + expectationQuery.filePathParts, + expectationQuery.testPathParts, + {} + ) : + expectationQuery; if (compareQueries(query, queryForFilter) === Ordering.Unordered) { continue; @@ -205,7 +231,7 @@ Expectation should be of the form path/to/cts.https.html?worker=0&q=suite:test_p expectations.push({ query: expectationQuery, - expectation: entry.expectation, + expectation: entry.expectation }); } return expectations; @@ -227,11 +253,10 @@ export function relativeQueryString(parent, child) { childString.startsWith(parentString.substring(0, parentString.length - 2)), 'impossible?: childString does not start with parentString[:-2]' ); - return childString.substring(parentString.length - 2); } else { unreachable( `relativeQueryString arguments have invalid ordering ${ordering}:\n${parent}\n${child}` ); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/separators.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/separators.js index 8fbaebdf945..6170cb50020 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/separators.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/separators.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** Separator between big parts: suite:file:test:case */ export const kBigSeparator = ':'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** Separator between big parts: suite:file:test:case */export const kBigSeparator = ':'; /** Separator between path,to,file or path,to,test */ export const kPathSeparator = ','; @@ -11,4 +11,4 @@ export const kParamSeparator = ';'; export const kParamKVSeparator = '='; /** Final wildcard, if query is not single-case */ -export const kWildcard = '*'; +export const kWildcard = '*'; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/stringify_params.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/stringify_params.js index b62bc916936..74808131a40 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/stringify_params.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/stringify_params.js @@ -1,15 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../util/util.js'; -import { badParamValueChars, paramKeyIsPublic } from '../params_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../util/util.js';import { badParamValueChars, paramKeyIsPublic } from '../params_utils.js'; import { stringifyParamValue, stringifyParamValueUniquely } from './json_param_value.js'; import { kParamKVSeparator, kParamSeparator, kWildcard } from './separators.js'; export function stringifyPublicParams(p, addWildcard = false) { - const parts = Object.keys(p) - .filter(k => paramKeyIsPublic(k)) - .map(k => stringifySingleParam(k, p[k])); + const parts = Object.keys(p). + filter((k) => paramKeyIsPublic(k)). + map((k) => stringifySingleParam(k, p[k])); if (addWildcard) parts.push(kWildcard); @@ -21,10 +20,10 @@ export function stringifyPublicParams(p, addWildcard = false) { */ export function stringifyPublicParamsUniquely(p) { const keys = Object.keys(p).sort(); - return keys - .filter(k => paramKeyIsPublic(k)) - .map(k => stringifySingleParamUniquely(k, p[k])) - .join(kParamSeparator); + return keys. + filter((k) => paramKeyIsPublic(k)). + map((k) => stringifySingleParamUniquely(k, p[k])). + join(kParamSeparator); } export function stringifySingleParam(k, v) { @@ -41,6 +40,5 @@ function stringifySingleParamValue(v) { !badParamValueChars.test(s), `JSON.stringified param value must not match ${badParamValueChars} - was ${s}` ); - return s; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/query/validQueryPart.js b/tests/wpt/webgpu/tests/webgpu/common/internal/query/validQueryPart.js index ca21627975f..37e5d08073d 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/query/validQueryPart.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/query/validQueryPart.js @@ -1,3 +1,3 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** Applies to group parts, test parts, params keys. */ export const validQueryPart = /^[a-zA-Z0-9_]+$/; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** Applies to group parts, test parts, params keys. */export const validQueryPart = /^[a-zA-Z0-9_]+$/; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/stack.js b/tests/wpt/webgpu/tests/webgpu/common/internal/stack.js index 98636bd4014..8db1ff940d6 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/stack.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/stack.js @@ -1,10 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ // Returns the stack trace of an Error, but without the extra boilerplate at the bottom +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // Returns the stack trace of an Error, but without the extra boilerplate at the bottom // (e.g. RunCaseSpecific, processTicksAndRejections, etc.), for logging. -export function extractImportantStackTrace(e) { - let stack = e.stack; - if (!stack) { +export function extractImportantStackTrace(e) {let stack = e.stack;if (!stack) { return ''; } const redundantMessage = 'Error: ' + e.message + '\n'; @@ -81,4 +79,4 @@ export function extractImportantStackTrace(e) { // x at async RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:53:15) // x at async RunCaseSpecific.run (http://localhost:8080/out/framework/test_group.js:119:7) // x at async runCase (http://localhost:8080/out/runtime/standalone.js:37:17) -// x at async http://localhost:8080/out/runtime/standalone.js:102:7 +// x at async http://localhost:8080/out/runtime/standalone.js:102:7 \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/test_group.js b/tests/wpt/webgpu/tests/webgpu/common/internal/test_group.js index b836c78c612..3db409ffe76 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/test_group.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/test_group.js @@ -1,40 +1,105 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { SkipTestCase, UnexpectedPassError } from '../framework/fixture.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { + SkipTestCase, + + UnexpectedPassError } from + + +'../framework/fixture.js'; import { + builderIterateCasesWithSubcases, - kUnitCaseParamsBuilder, -} from '../framework/params_builder.js'; + kUnitCaseParamsBuilder } from + + +'../framework/params_builder.js'; import { globalTestConfig } from '../framework/test_config.js'; import { TestCaseRecorder } from '../internal/logging/test_case_recorder.js'; import { extractPublicParams, mergeParams } from '../internal/params_utils.js'; import { compareQueries, Ordering } from '../internal/query/compare.js'; -import { TestQuerySingleCase } from '../internal/query/query.js'; +import { + + TestQueryMultiTest, + TestQuerySingleCase } from + +'../internal/query/query.js'; import { kPathSeparator } from '../internal/query/separators.js'; import { stringifyPublicParams, - stringifyPublicParamsUniquely, -} from '../internal/query/stringify_params.js'; + stringifyPublicParamsUniquely } from +'../internal/query/stringify_params.js'; import { validQueryPart } from '../internal/query/validQueryPart.js'; + import { assert, unreachable } from '../util/util.js'; import { logToWebsocket } from './websocket_logger.js'; + + + + + + + + + + + + + + + + + + + + + +// Interface for defining tests + + + export function makeTestGroup(fixture) { return new TestGroup(fixture); } // Interfaces for running tests -export function makeTestGroupForUnitTesting(fixture) { + + + + + + + + + + + + +export function makeTestGroupForUnitTesting( +fixture) +{ return new TestGroup(fixture); } +/** The maximum allowed length of a test query string. Checked by tools/validate. */ +export const kQueryMaxLength = 375; + /** Parameter name for batch number (see also TestBuilder.batch). */ const kBatchParamName = 'batch__'; + + + + + + + export class TestGroup { + seen = new Set(); tests = []; @@ -53,7 +118,6 @@ export class TestGroup { name === decodeURIComponent(name), `Not decodeURIComponent-idempotent: ${name} !== ${decodeURIComponent(name)}` ); - assert(!this.seen.has(name), `Duplicate test name: ${name}`); this.seen.add(name); @@ -74,9 +138,14 @@ export class TestGroup { return test; } - validate() { + validate(fileQuery) { for (const test of this.tests) { - test.validate(); + const testQuery = new TestQueryMultiTest( + fileQuery.suite, + fileQuery.filePathParts, + test.testPath + ); + test.validate(testQuery); } } @@ -91,7 +160,94 @@ export class TestGroup { } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + class TestBuilder { + + + + + + + + testCases = undefined; batchSize = 0; @@ -107,7 +263,7 @@ class TestBuilder { return this; } - specURL(url) { + specURL(_url) { return this; } @@ -118,6 +274,7 @@ class TestBuilder { } fn(fn) { + // MAINTENANCE_TODO: add "TODO" if there's no description? (and make sure it only ends up on // actual tests, not on test parents in the tree, which is what happens if you do it here, not // sure why) @@ -134,7 +291,7 @@ class TestBuilder { assert(this.testFn === undefined); this.description = - (this.description ? this.description + '\n\n' : '') + 'TODO: .unimplemented()'; + (this.description ? this.description + '\n\n' : '') + 'TODO: .unimplemented()'; this.isUnimplemented = true; this.testFn = () => { @@ -143,7 +300,7 @@ class TestBuilder { } /** Perform various validation/"lint" chenks. */ - validate() { + validate(testQuery) { const testPathString = this.testPath.join(kPathSeparator); assert(this.testFn !== undefined, () => { let s = `Test is missing .fn(): ${testPathString}`; @@ -153,12 +310,30 @@ class TestBuilder { return s; }); + assert( + testQuery.toString().length <= kQueryMaxLength, + () => + `Test query ${testQuery} is too long. Max length is ${kQueryMaxLength} characters. Please shorten names or reduce parameters.` + ); + if (this.testCases === undefined) { return; } const seen = new Set(); for (const [caseParams, subcases] of builderIterateCasesWithSubcases(this.testCases, null)) { + const caseQuery = new TestQuerySingleCase( + testQuery.suite, + testQuery.filePathParts, + testQuery.testPathParts, + caseParams + ).toString(); + assert( + caseQuery.length <= kQueryMaxLength, + () => + `Case query ${caseQuery} is too long. Max length is ${kQueryMaxLength} characters. Please shorten names or reduce parameters.` + ); + for (const subcaseParams of subcases ?? [{}]) { const params = mergeParams(caseParams, subcaseParams); assert(this.batchSize === 0 || !(kBatchParamName in params)); @@ -175,9 +350,8 @@ class TestBuilder { const testcaseStringUnique = stringifyPublicParamsUniquely(params); assert( !seen.has(testcaseStringUnique), - `Duplicate public test case params for test ${testPathString}: ${testcaseString}` + `Duplicate public test case+subcase params for test ${testPathString}: ${testcaseString}` ); - seen.add(testcaseStringUnique); } } @@ -195,7 +369,9 @@ class TestBuilder { return caseCount; } - params(cases) { + params( + cases) + { assert(this.testCases === undefined, 'test case is already parameterized'); if (cases instanceof Function) { this.testCases = cases(kUnitCaseParamsBuilder); @@ -211,7 +387,9 @@ class TestBuilder { return this; } - paramsSubcasesOnly(subcases) { + paramsSubcasesOnly( + subcases) + { if (subcases instanceof Function) { return this.params(subcases(kUnitCaseParamsBuilder.beginSubcases())); } else { @@ -265,7 +443,7 @@ class TestBuilder { } // There are multiple batches. Helper function for this case: - const makeCaseForBatch = batch => { + const makeCaseForBatch = (batch) => { const sliceStart = batch * this.batchSize; return this.makeCaseSpecific( { ...caseParams, [kBatchParamName]: batch }, @@ -288,16 +466,26 @@ class TestBuilder { } class RunCaseSpecific { + + + + + + + + + + constructor( - testPath, - params, - isUnimplemented, - subcases, - fixture, - fn, - beforeFn, - testCreationStack - ) { + testPath, + params, + isUnimplemented, + subcases, + fixture, + fn, + beforeFn, + testCreationStack) + { this.id = { test: testPath, params: extractPublicParams(params) }; this.isUnimplemented = isUnimplemented; this.params = params; @@ -320,7 +508,13 @@ class RunCaseSpecific { } } - async runTest(rec, sharedState, params, throwSkip, expectedStatus) { + async runTest( + rec, + sharedState, + params, + throwSkip, + expectedStatus) + { try { rec.beginSubCase(); if (expectedStatus === 'skip') { @@ -331,6 +525,7 @@ class RunCaseSpecific { try { await inst.init(); await this.fn(inst); + rec.passed(); } finally { // Runs as long as constructor succeeded, even if initialization or the test failed. await inst.finalize(); @@ -340,10 +535,9 @@ class RunCaseSpecific { // An error from init or test may have been a SkipTestCase. // An error from finalize may have been an eventualAsyncExpectation failure // or unexpected validation/OOM error from the GPUDevice. + rec.threw(ex); if (throwSkip && ex instanceof SkipTestCase) { throw ex; - } else { - rec.threw(ex); } } finally { try { @@ -357,8 +551,12 @@ class RunCaseSpecific { } } - async run(rec, selfQuery, expectations) { - const getExpectedStatus = selfQueryWithSubParams => { + async run( + rec, + selfQuery, + expectations) + { + const getExpectedStatus = (selfQueryWithSubParams) => { let didSeeFail = false; for (const exp of expectations) { const ordering = compareQueries(exp.query, selfQueryWithSubParams); @@ -437,12 +635,13 @@ class RunCaseSpecific { try { arg.stack = stack; } catch { + // If that fails too, just silence it. - } - } + }} } } + const rv = prop.apply(target, args); // Because this proxy executes functions in a deferred manner, // it should never be used for functions that need to return a value. @@ -451,7 +650,7 @@ class RunCaseSpecific { }; } return prop; - }, + } }); const params = mergeParams(this.params, subParams); @@ -464,7 +663,7 @@ class RunCaseSpecific { // Limit the maximum number of subcases in flight. if (subcasesInFlight >= maxSubcasesInFlight) { - await new Promise(resolve => { + await new Promise((resolve) => { // There should only be one subcase waiting at a time. assert(resolvePromiseBlockingSubcase === undefined); resolvePromiseBlockingSubcase = resolve; @@ -478,29 +677,28 @@ class RunCaseSpecific { subRec, sharedState, params, - /* throwSkip */ true, + /* throwSkip */true, getExpectedStatus(subcaseQuery) - ) - .then(() => { - subRec.info(new Error('OK')); - }) - .catch(ex => { - if (ex instanceof SkipTestCase) { - // Convert SkipTestCase to info messages - ex.message = 'subcase skipped: ' + ex.message; - subRec.info(ex); - ++skipCount; - } else { - // Since we are catching all error inside runTest(), this should never happen - subRec.threw(ex); - } - }) - .finally(subcaseFinishedCallback); + ). + then(() => { + subRec.info(new Error('OK')); + }). + catch((ex) => { + if (ex instanceof SkipTestCase) { + // Convert SkipTestCase to info messages + ex.message = 'subcase skipped: ' + ex.message; + subRec.info(ex); + ++skipCount; + } else { + // Since we are catching all error inside runTest(), this should never happen + subRec.threw(ex); + } + }). + finally(subcaseFinishedCallback); allPreviousSubcasesFinalizedPromise = allPreviousSubcasesFinalizedPromise.then( () => finalizePromise ); - ++totalCount; } @@ -515,7 +713,7 @@ class RunCaseSpecific { rec, sharedState, this.params, - /* throwSkip */ false, + /* throwSkip */false, getExpectedStatus(selfQuery) ); } @@ -537,9 +735,9 @@ class RunCaseSpecific { const msg = { q: selfQuery.toString(), timems: rec.result.timems, - nonskippedSubcaseCount: rec.nonskippedSubcaseCount, + nonskippedSubcaseCount: rec.nonskippedSubcaseCount }; logToWebsocket(JSON.stringify(msg)); } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/test_suite_listing.js b/tests/wpt/webgpu/tests/webgpu/common/internal/test_suite_listing.js index 9b2db0e1926..81a15cf7123 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/test_suite_listing.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/test_suite_listing.js @@ -1,3 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export {}; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // A listing of all specs within a single suite. This is the (awaited) type of +// `groups` in '{cts,unittests}/listing.ts' and `listing` in the auto-generated +// 'out/{cts,unittests}/listing.js' files (see tools/gen_listings). +export {}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/tree.js b/tests/wpt/webgpu/tests/webgpu/common/internal/tree.js index 0299f354932..8f1e6bad662 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/tree.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/tree.js @@ -1,16 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { loadMetadataForSuite } from '../framework/metadata.js'; -import { globalTestConfig } from '../framework/test_config.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { loadMetadataForSuite } from '../framework/metadata.js';import { globalTestConfig } from '../framework/test_config.js'; import { assert, now } from '../util/util.js'; + + import { comparePublicParamsPaths, compareQueries, Ordering } from './query/compare.js'; import { + TestQueryMultiCase, TestQuerySingleCase, TestQueryMultiFile, - TestQueryMultiTest, -} from './query/query.js'; + TestQueryMultiTest } from +'./query/query.js'; import { kBigSeparator, kWildcard, kPathSeparator, kParamSeparator } from './query/separators.js'; import { stringifySingleParam } from './query/stringify_params.js'; import { StacklessError } from './util.js'; @@ -39,6 +41,45 @@ import { StacklessError } from './util.js'; // - Enables developers to put any number of tests in one file as appropriate, without worrying // about expectation granularity. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** + * When iterating through "collapsed" tree nodes, indicates how many "query levels" to traverse + * through before starting to collapse nodes. + * + * Corresponds with TestQueryLevel, but excludes 4 (SingleCase): + * - 1 = MultiFile. Expands so every file is in the collapsed tree. + * - 2 = MultiTest. Expands so every test is in the collapsed tree. + * - 3 = MultiCase. Expands so every case is in the collapsed tree (i.e. collapsing disabled). + */ + + export class TestTree { /** * The `queryToLoad` that this test tree was created for. @@ -49,6 +90,8 @@ export class TestTree { * `TestQueryLevel` after `forQuery`. */ + + constructor(forQuery, root) { this.forQuery = forQuery; this.root = root; @@ -58,7 +101,11 @@ export class TestTree { ); } - static async create(forQuery, root, maxChunkTime) { + static async create( + forQuery, + root, + maxChunkTime) + { const suite = forQuery.suite; let chunking = undefined; @@ -81,13 +128,20 @@ export class TestTree { iterateCollapsedNodes({ includeIntermediateNodes = false, includeEmptySubtrees = false, - alwaysExpandThroughLevel, + alwaysExpandThroughLevel + + + + + + + }) { const expandThroughLevel = Math.max(this.forQuery.level, alwaysExpandThroughLevel); return TestTree.iterateSubtreeNodes(this.root, { includeIntermediateNodes, includeEmptySubtrees, - expandThroughLevel, + expandThroughLevel }); } @@ -111,7 +165,14 @@ export class TestTree { return TestTree.subtreeToString('(root)', this.root, ''); } - static *iterateSubtreeNodes(subtree, opts) { + static *iterateSubtreeNodes( + subtree, + opts) + + + + + { if (opts.includeIntermediateNodes) { yield subtree; } @@ -144,7 +205,10 @@ export class TestTree { } /** Propagate the subtreeTODOs/subtreeTests state upward from leaves to parent nodes. */ - static async propagateCounts(subtree, chunking) { + static async propagateCounts( + subtree, + chunking) + { subtree.subtreeCounts ??= { tests: 0, nodesWithTODO: 0, totalTimeMS: 0 }; subtree.subcaseCount = 0; for (const [, child] of subtree.children) { @@ -200,8 +264,8 @@ export class TestTree { static subtreeToString(name, tree, indent) { const collapsible = 'run' in tree ? '>' : tree.collapsible ? '+' : '-'; let s = - indent + - `${collapsible} ${TestTree.countsToString(tree)} ${JSON.stringify(name)} => ${tree.query}`; + indent + + `${collapsible} ${TestTree.countsToString(tree)} ${JSON.stringify(name)} => ${tree.query}`; if ('children' in tree) { if (tree.description !== undefined) { s += `\n${indent} | ${JSON.stringify(tree.description)}`; @@ -218,10 +282,13 @@ export class TestTree { // MAINTENANCE_TODO: Consider having subqueriesToExpand actually impact the depth-order of params // in the tree. export async function loadTreeForQuery( - loader, - queryToLoad, - { subqueriesToExpand, maxChunkTime = Infinity } -) { +loader, +queryToLoad, +{ + subqueriesToExpand, + maxChunkTime = Infinity +}) +{ const suite = queryToLoad.suite; const specs = await loader.listing(suite); @@ -229,14 +296,14 @@ export async function loadTreeForQuery( const seenSubqueriesToExpand = new Array(subqueriesToExpand.length); seenSubqueriesToExpand.fill(false); - const isCollapsible = subquery => - subqueriesToExpandEntries.every(([i, toExpand]) => { - const ordering = compareQueries(toExpand, subquery); + const isCollapsible = (subquery) => + subqueriesToExpandEntries.every(([i, toExpand]) => { + const ordering = compareQueries(toExpand, subquery); - // If toExpand == subquery, no expansion is needed (but it's still "seen"). - if (ordering === Ordering.Equal) seenSubqueriesToExpand[i] = true; - return ordering !== Ordering.StrictSubset; - }); + // If toExpand == subquery, no expansion is needed (but it's still "seen"). + if (ordering === Ordering.Equal) seenSubqueriesToExpand[i] = true; + return ordering !== Ordering.StrictSubset; + }); // L0 = suite-level, e.g. suite:* // L1 = file-level, e.g. suite:a,b:* @@ -271,7 +338,7 @@ export async function loadTreeForQuery( } else { return { ...entry, - importedSpec: await loader.importSpecFile(queryToLoad.suite, entry.file), + importedSpec: await loader.importSpecFile(queryToLoad.suite, entry.file) }; } })(); @@ -299,8 +366,11 @@ export async function loadTreeForQuery( // readmeSubtree is suite:a,b,* // (This is always going to dedup with a file path, if there are any test spec files under // the directory that has the README). - const readmeSubtree = addSubtreeForDirPath(subtreeL0, entry.file, isCollapsible); - + const readmeSubtree = addSubtreeForDirPath( + subtreeL0, + entry.file, + isCollapsible + ); setSubtreeDescriptionAndCountTODOs(readmeSubtree, entry.readme); continue; } @@ -308,8 +378,11 @@ export async function loadTreeForQuery( // Entry is a spec file. const spec = entry.importedSpec; // subtreeL1 is suite:a,b:* - const subtreeL1 = addSubtreeForFilePath(subtreeL0, entry.file, isCollapsible); - + const subtreeL1 = addSubtreeForFilePath( + subtreeL0, + entry.file, + isCollapsible + ); setSubtreeDescriptionAndCountTODOs(subtreeL1, spec.description); let groupHasTests = false; @@ -331,7 +404,6 @@ export async function loadTreeForQuery( t.testCreationStack, isCollapsible ); - // This is 1 test. Set tests=1 then count TODOs. subtreeL2.subtreeCounts ??= { tests: 1, nodesWithTODO: 0, totalTimeMS: 0 }; if (t.description) setSubtreeDescriptionAndCountTODOs(subtreeL2, t.description); @@ -380,7 +452,10 @@ export async function loadTreeForQuery( return TestTree.create(queryToLoad, subtreeL0, maxChunkTime); } -function setSubtreeDescriptionAndCountTODOs(subtree, description) { +function setSubtreeDescriptionAndCountTODOs( +subtree, +description) +{ assert(subtree.description === undefined); subtree.description = description.trim(); subtree.subtreeCounts ??= { tests: 0, nodesWithTODO: 0, totalTimeMS: 0 }; @@ -389,17 +464,24 @@ function setSubtreeDescriptionAndCountTODOs(subtree, description) { } } -function makeTreeForSuite(suite, isCollapsible) { +function makeTreeForSuite( +suite, +isCollapsible) +{ const query = new TestQueryMultiFile(suite, []); return { readableRelativeName: suite + kBigSeparator, query, children: new Map(), - collapsible: isCollapsible(query), + collapsible: isCollapsible(query) }; } -function addSubtreeForDirPath(tree, file, isCollapsible) { +function addSubtreeForDirPath( +tree, +file, +isCollapsible) +{ const subqueryFile = []; // To start, tree is suite:* // This loop goes from that -> suite:a,* -> suite:a,b,* @@ -410,14 +492,18 @@ function addSubtreeForDirPath(tree, file, isCollapsible) { return { readableRelativeName: part + kPathSeparator + kWildcard, query, - collapsible: isCollapsible(query), + collapsible: isCollapsible(query) }; }); } return tree; } -function addSubtreeForFilePath(tree, file, isCollapsible) { +function addSubtreeForFilePath( +tree, +file, +isCollapsible) +{ // To start, tree is suite:* // This goes from that -> suite:a,* -> suite:a,b,* tree = addSubtreeForDirPath(tree, file, isCollapsible); @@ -428,13 +514,18 @@ function addSubtreeForFilePath(tree, file, isCollapsible) { return { readableRelativeName: file[file.length - 1] + kBigSeparator + kWildcard, query, - collapsible: isCollapsible(query), + collapsible: isCollapsible(query) }; }); return subtree; } -function addSubtreeForTestPath(tree, test, testCreationStack, isCollapsible) { +function addSubtreeForTestPath( +tree, +test, +testCreationStack, +isCollapsible) +{ const subqueryTest = []; // To start, tree is suite:a,b:* // This loop goes from that -> suite:a,b:c,* -> suite:a,b:c,d,* @@ -446,11 +537,10 @@ function addSubtreeForTestPath(tree, test, testCreationStack, isCollapsible) { tree.query.filePathParts, subqueryTest ); - return { readableRelativeName: part + kPathSeparator + kWildcard, query, - collapsible: isCollapsible(query), + collapsible: isCollapsible(query) }; }); } @@ -462,19 +552,22 @@ function addSubtreeForTestPath(tree, test, testCreationStack, isCollapsible) { subqueryTest, {} ); - assert(subqueryTest.length > 0, 'subqueryTest is empty'); return { readableRelativeName: subqueryTest[subqueryTest.length - 1] + kBigSeparator + kWildcard, kWildcard, query, testCreationStack, - collapsible: isCollapsible(query), + collapsible: isCollapsible(query) }; }); } -function addLeafForCase(tree, t, checkCollapsible) { +function addLeafForCase( +tree, +t, +checkCollapsible) +{ const query = tree.query; let name = ''; const subqueryParams = {}; @@ -492,11 +585,10 @@ function addLeafForCase(tree, t, checkCollapsible) { query.testPathParts, subqueryParams ); - return { readableRelativeName: name + kParamSeparator + kWildcard, query: subquery, - collapsible: checkCollapsible(subquery), + collapsible: checkCollapsible(subquery) }; }); } @@ -508,12 +600,15 @@ function addLeafForCase(tree, t, checkCollapsible) { query.testPathParts, subqueryParams ); - checkCollapsible(subquery); // mark seenSubqueriesToExpand insertLeaf(tree, subquery, t); } -function getOrInsertSubtree(key, parent, createSubtree) { +function getOrInsertSubtree( +key, +parent, +createSubtree) +{ let v; const child = parent.children.get(key); if (child !== undefined) { @@ -532,7 +627,7 @@ function insertLeaf(parent, query, t) { query, run: (rec, expectations) => t.run(rec, query, expectations || []), isUnimplemented: t.isUnimplemented, - subcaseCount: t.computeSubcaseCount(), + subcaseCount: t.computeSubcaseCount() }; // This is a leaf (e.g. s:f:t:x=1;* -> s:f:t:x=1). The key is always ''. @@ -544,7 +639,7 @@ function insertLeaf(parent, query, t) { function dissolveSingleChildTrees(tree) { if ('children' in tree) { const shouldDissolveThisTree = - tree.children.size === 1 && tree.query.depthInLevel !== 0 && tree.description === undefined; + tree.children.size === 1 && tree.query.depthInLevel !== 0 && tree.description === undefined; if (shouldDissolveThisTree) { // Loops exactly once for (const [, child] of tree.children) { @@ -573,4 +668,4 @@ function readableNameForCase(query) { const lastKey = paramsKeys[paramsKeys.length - 1]; return stringifySingleParam(lastKey, query.params[lastKey]); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/util.js b/tests/wpt/webgpu/tests/webgpu/common/internal/util.js index 66979fbc308..6e6125474dc 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/util.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/util.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Error without a stack, which can be used to fatally exit from `tool/` scripts with a * user-friendly message (and no confusing stack). - */ export class StacklessError extends Error { - constructor(message) { + */export class StacklessError extends Error {constructor(message) { super(message); this.stack = undefined; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/version.js b/tests/wpt/webgpu/tests/webgpu/common/internal/version.js index 0cbad1c61d2..5a6e67c1cbe 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/version.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/version.js @@ -1,3 +1,3 @@ // AUTO-GENERATED - DO NOT EDIT. See tools/gen_version. -export const version = 'f2b59e03621238d0d0fd6305be2c406ce3e45ac2'; +export const version = 'ae15a59832989c22982acaeaccdf5d379afced62'; diff --git a/tests/wpt/webgpu/tests/webgpu/common/internal/websocket_logger.js b/tests/wpt/webgpu/tests/webgpu/common/internal/websocket_logger.js index 1f60801f5c6..7a8f92b1a84 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/internal/websocket_logger.js +++ b/tests/wpt/webgpu/tests/webgpu/common/internal/websocket_logger.js @@ -1,11 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * - 'uninitialized' means we haven't tried to connect yet * - Promise means it's pending * - 'failed' means it failed (this is the most common case, where the logger isn't running) * - WebSocket means it succeeded - */ let connection = 'uninitialized'; + */let connection = 'uninitialized'; /** * Log a string to a websocket at `localhost:59497`. See `tools/websocket-logger`. @@ -18,7 +18,7 @@ export function logToWebsocket(msg) { } if (connection === 'uninitialized') { - connection = new Promise(resolve => { + connection = new Promise((resolve) => { if (typeof WebSocket === 'undefined') { resolve('failed'); return; @@ -37,7 +37,7 @@ export function logToWebsocket(msg) { resolve('failed'); }; }); - void connection.then(resolved => { + void connection.then((resolved) => { connection = resolved; }); } @@ -49,4 +49,4 @@ export function logToWebsocket(msg) { ws.send(msg); } })(); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/options.js b/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/options.js index 953c3280fd4..139c3bc29f2 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/options.js +++ b/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/options.js @@ -1,19 +1,23 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ let windowURL = undefined; -function getWindowURL() { - if (windowURL === undefined) { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/let windowURL = undefined;function getWindowURL() {if (windowURL === undefined) { windowURL = new URL(window.location.toString()); } return windowURL; } -export function optionEnabled(opt, searchParams = getWindowURL().searchParams) { +export function optionEnabled( +opt, +searchParams = getWindowURL().searchParams) +{ const val = searchParams.get(opt); return val !== null && val !== '0'; } -export function optionString(opt, searchParams = getWindowURL().searchParams) { +export function optionString( +opt, +searchParams = getWindowURL().searchParams) +{ return searchParams.get(opt) || ''; } @@ -21,18 +25,36 @@ export function optionString(opt, searchParams = getWindowURL().searchParams) { * The possible options for the tests. */ + + + + + + + export const kDefaultCTSOptions = { worker: false, debug: true, compatibility: false, unrollConstEvalLoops: false, - powerPreference: '', + powerPreference: '' }; /** * Extra per option info. */ + + + + + +/** + * Type for info for every option. This definition means adding an option + * will generate a compile time error if no extra info is provided. + */ + + /** * Options to the CTS. */ @@ -45,11 +67,11 @@ export const kCTSOptionsInfo = { description: 'set default powerPreference for some tests', parser: optionString, selectValueDescriptions: [ - { value: '', description: 'default' }, - { value: 'low-power', description: 'low-power' }, - { value: 'high-performance', description: 'high-performance' }, - ], - }, + { value: '', description: 'default' }, + { value: 'low-power', description: 'low-power' }, + { value: 'high-performance', description: 'high-performance' }] + + } }; /** @@ -59,16 +81,19 @@ export const kCTSOptionsInfo = { * parseHTMLFile -> parse_html_file */ export function camelCaseToSnakeCase(id) { - return id - .replace(/(.)([A-Z][a-z]+)/g, '$1_$2') - .replace(/([a-z0-9])([A-Z])/g, '$1_$2') - .toLowerCase(); + return id. + replace(/(.)([A-Z][a-z]+)/g, '$1_$2'). + replace(/([a-z0-9])([A-Z])/g, '$1_$2'). + toLowerCase(); } /** * Creates a Options from search parameters. */ -function getOptionsInfoFromSearchString(optionsInfos, searchString) { +function getOptionsInfoFromSearchString( +optionsInfos, +searchString) +{ const searchParams = new URLSearchParams(searchString); const optionValues = {}; for (const [optionName, info] of Object.entries(optionsInfos)) { @@ -82,7 +107,13 @@ function getOptionsInfoFromSearchString(optionsInfos, searchString) { * Given a test query string in the form of `suite:foo,bar,moo&opt1=val1&opt2=val2 * returns the query and the options. */ -export function parseSearchParamLikeWithOptions(optionsInfos, query) { +export function parseSearchParamLikeWithOptions( +optionsInfos, +query) + + + +{ const searchString = query.includes('q=') || query.startsWith('?') ? query : `q=${query}`; const queries = new URLSearchParams(searchString).getAll('q'); const options = getOptionsInfoFromSearchString(optionsInfos, searchString); @@ -95,4 +126,4 @@ export function parseSearchParamLikeWithOptions(optionsInfos, query) { */ export function parseSearchParamLikeWithCTSOptions(query) { return parseSearchParamLikeWithOptions(kCTSOptionsInfo, query); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker-worker.js b/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker-worker.js index e8b40222a51..a0f13c54afe 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker-worker.js +++ b/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker-worker.js @@ -1,19 +1,23 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { setBaseResourcePath } from '../../framework/resources.js'; -import { globalTestConfig } from '../../framework/test_config.js'; -import { DefaultTestFileLoader } from '../../internal/file_loader.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { setBaseResourcePath } from '../../framework/resources.js';import { globalTestConfig } from '../../framework/test_config.js';import { DefaultTestFileLoader } from '../../internal/file_loader.js'; import { Logger } from '../../internal/logging/logger.js'; import { parseQuery } from '../../internal/query/parseQuery.js'; import { setDefaultRequestAdapterOptions } from '../../util/navigator_gpu.js'; import { assert } from '../../util/util.js'; + + +// Should be DedicatedWorkerGlobalScope, but importing lib "webworker" conflicts with lib "dom". + + + const loader = new DefaultTestFileLoader(); setBaseResourcePath('../../../resources'); -self.onmessage = async ev => { +self.onmessage = async (ev) => { const query = ev.data.query; const expectations = ev.data.expectations; const ctsOptions = ev.data.ctsOptions; @@ -29,7 +33,7 @@ self.onmessage = async ev => { setDefaultRequestAdapterOptions({ ...(powerPreference && { powerPreference }), // MAINTENANCE_TODO: Change this to whatever the option ends up being - ...(compatibility && { compatibilityMode: true }), + ...(compatibility && { compatibilityMode: true }) }); } @@ -41,4 +45,4 @@ self.onmessage = async ev => { await testcase.run(rec, expectations); self.postMessage({ query, result }); -}; +}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker.js b/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker.js index 092d4ee88bc..1d653941802 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker.js +++ b/tests/wpt/webgpu/tests/webgpu/common/runtime/helper/test_worker.js @@ -1,10 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { LogMessageWithStack } from '../../internal/logging/log_message.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { LogMessageWithStack } from '../../internal/logging/log_message.js'; + import { kDefaultCTSOptions } from './options.js'; export class TestWorker { + + resolvers = new Map(); constructor(ctsOptions) { @@ -13,7 +16,7 @@ export class TestWorker { const selfPathDir = selfPath.substring(0, selfPath.lastIndexOf('/')); const workerPath = selfPathDir + '/test_worker-worker.js'; this.worker = new Worker(workerPath, { type: 'module' }); - this.worker.onmessage = ev => { + this.worker.onmessage = (ev) => { const query = ev.data.query; const result = ev.data.result; if (result.logs) { @@ -28,15 +31,19 @@ export class TestWorker { }; } - async run(rec, query, expectations = []) { + async run( + rec, + query, + expectations = []) + { this.worker.postMessage({ query, expectations, - ctsOptions: this.ctsOptions, + ctsOptions: this.ctsOptions }); - const workerResult = await new Promise(resolve => { + const workerResult = await new Promise((resolve) => { this.resolvers.set(query, resolve); }); rec.injectResult(workerResult); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/runtime/wpt.js b/tests/wpt/webgpu/tests/webgpu/common/runtime/wpt.js index a66f852194d..97c6a3886ed 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/runtime/wpt.js +++ b/tests/wpt/webgpu/tests/webgpu/common/runtime/wpt.js @@ -1,8 +1,7 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ // Implements the wpt-embedded test runner (see also: wpt/cts.https.html). -import { globalTestConfig } from '../framework/test_config.js'; -import { DefaultTestFileLoader } from '../internal/file_loader.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // Implements the wpt-embedded test runner (see also: wpt/cts.https.html). +import { globalTestConfig } from '../framework/test_config.js';import { DefaultTestFileLoader } from '../internal/file_loader.js'; import { prettyPrintLog } from '../internal/logging/log_message.js'; import { Logger } from '../internal/logging/logger.js'; import { parseQuery } from '../internal/query/parseQuery.js'; @@ -14,10 +13,21 @@ import { TestWorker } from './helper/test_worker.js'; // testharness.js API (https://web-platform-tests.org/writing-tests/testharness-api.html) + + + + + + + + + + + setup({ // It's convenient for us to asynchronously add tests to the page. Prevent done() from being // called implicitly when the page is finished loading. - explicit_done: true, + explicit_done: true }); void (async () => { @@ -27,7 +37,7 @@ void (async () => { globalTestConfig.unrollConstEvalLoops = optionEnabled('unroll_const_eval_loops'); const failOnWarnings = - typeof shouldWebGPUCTSFailOnWarnings !== 'undefined' && (await shouldWebGPUCTSFailOnWarnings); + typeof shouldWebGPUCTSFailOnWarnings !== 'undefined' && (await shouldWebGPUCTSFailOnWarnings); const loader = new DefaultTestFileLoader(); const qs = new URLSearchParams(window.location.search).getAll('q'); @@ -36,13 +46,13 @@ void (async () => { const testcases = await loader.loadCases(filterQuery); const expectations = - typeof loadWebGPUExpectations !== 'undefined' - ? parseExpectationsForTestQuery( - await loadWebGPUExpectations, - filterQuery, - new URL(window.location.href) - ) - : []; + typeof loadWebGPUExpectations !== 'undefined' ? + parseExpectationsForTestQuery( + await loadWebGPUExpectations, + filterQuery, + new URL(window.location.href) + ) : + []; const log = new Logger(); @@ -60,7 +70,7 @@ void (async () => { } // Unfortunately, it seems not possible to surface any logs for warn/skip. - if (res.status === 'fail' || (res.status === 'warn' && failOnWarnings)) { + if (res.status === 'fail' || res.status === 'warn' && failOnWarnings) { const logs = (res.logs ?? []).map(prettyPrintLog); assert_unreached('\n' + logs.join('\n') + '\n'); } @@ -70,4 +80,4 @@ void (async () => { } done(); -})(); +})(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/collect_garbage.js b/tests/wpt/webgpu/tests/webgpu/common/util/collect_garbage.js index 2696caf79e0..9b7ef10af51 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/collect_garbage.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/collect_garbage.js @@ -1,6 +1,7 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { resolveOnTimeout } from './util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { resolveOnTimeout } from './util.js'; + /** * Attempts to trigger JavaScript garbage collection, either using explicit methods if exposed @@ -8,6 +9,7 @@ * some weird tricks to incur GC pressure. Adopted from the WebGL CTS. */ export async function attemptGarbageCollection() { + const w = globalThis; if (w.GCController) { w.GCController.collect(); @@ -20,11 +22,12 @@ export async function attemptGarbageCollection() { } try { - w.QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsIDOMWindowUtils) - .garbageCollect(); + w.QueryInterface(Components.interfaces.nsIInterfaceRequestor). + getInterface(Components.interfaces.nsIDOMWindowUtils). + garbageCollect(); return; } catch (e) { + // ignore any failure } if (w.gc) { @@ -52,4 +55,4 @@ export async function attemptGarbageCollection() { } return resolveOnTimeout(35); // Let the event loop run a few frames in case it helps. -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/colors.js b/tests/wpt/webgpu/tests/webgpu/common/util/colors.js index f77ba765562..d0716651383 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/colors.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/colors.js @@ -1,6 +1,69 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** + * The interface used for formatting strings to contain color metadata. + * + * Use the interface properties to construct a style, then use the + * `(s: string): string` function to format the provided string with the given + * style. + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** * The interface used for formatting strings with color metadata. @@ -13,9 +76,10 @@ export let Colors; try { + Colors = require('ansi-colors'); } catch { - const passthrough = s => s; + const passthrough = (s) => s; passthrough.enabled = false; passthrough.reset = passthrough; passthrough.bold = passthrough; @@ -60,4 +124,4 @@ try { passthrough.bgCyanBright = passthrough; passthrough.bgWhiteBright = passthrough; Colors = passthrough; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/crc32.js b/tests/wpt/webgpu/tests/webgpu/common/util/crc32.js new file mode 100644 index 00000000000..392d3b947c6 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/common/util/crc32.js @@ -0,0 +1,57 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /// CRC32 immutable lookup table data. +const kCRC32LUT = [0, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, +0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, +0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, +0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, +0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, +0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, +0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, +0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, +0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, +0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, +0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, +0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, +0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, +0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, +0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, +0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, +0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, +0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, +0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, +0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, +0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, +0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, +0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, +0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, +0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, +0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, +0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, +0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, +0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, +0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, +0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d]; + + +/** + * @param str the input string + * @returns the CRC32 of the input string + * @see https://en.wikipedia.org/wiki/Cyclic_redundancy_check#CRC-32_algorithm + */ +export function crc32(str) { + const utf8 = new TextEncoder().encode(str); + const u32 = new Uint32Array(1); + + u32[0] = 0xffffffff; + for (const c of utf8) { + u32[0] = u32[0] >>> 8 ^ kCRC32LUT[u32[0] & 0xff ^ c]; + } + u32[0] = u32[0] ^ 0xffffffff; + return u32[0]; +} + +/** @returns the input number has a 8-character hex string */ +export function toHexString(number) { + return ('00000000' + number.toString(16)).slice(-8); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/data_tables.js b/tests/wpt/webgpu/tests/webgpu/common/util/data_tables.js index f2c9176ff4d..569af1031d6 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/data_tables.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/data_tables.js @@ -1,17 +1,17 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ export function keysOf(obj) { return Object.keys(obj); } export function numericKeysOf(obj) { - return Object.keys(obj).map(n => Number(n)); + return Object.keys(obj).map((n) => Number(n)); } /** - * @returns a new Record from @p objects, using the string returned by Object.toString() as the keys + * @returns a new Record from `objects`, using the string returned by Object.toString() as the keys * and the objects as the values. */ export function objectsToRecord(objects) { @@ -19,7 +19,7 @@ export function objectsToRecord(objects) { return objects.reduce((obj, type) => { return { ...obj, - [type.toString()]: type, + [type.toString()]: type }; }, record); } @@ -29,7 +29,17 @@ export function objectsToRecord(objects) { * * Note: Using `as const` on the arguments to this function is necessary to infer the correct type. */ -export function makeTable(members, defaults, table) { +export function makeTable( + + + + +members, +defaults, +table) + + +{ const result = {}; for (const [k, v] of Object.entries(table)) { const item = {}; @@ -85,15 +95,27 @@ export function makeTable(members, defaults, table) { * @param defaults the default value by column for any element in a row of the table that is undefined * @param table named table rows. */ -export function makeTableRenameAndFilter(columnRenames, columnsKept, columns, defaults, table) { +export function makeTableRenameAndFilter( + + + + + +columnRenames, +columnsKept, +columns, +defaults, +table) + + +{ const result = {}; const keyToIndex = new Map( - columnsKept.map(name => { + columnsKept.map((name) => { const remappedName = columnRenames[name] === undefined ? name : columnRenames[name]; return [name, columns.indexOf(remappedName)]; }) ); - for (const [k, v] of Object.entries(table)) { const item = {}; for (const member of columnsKept) { @@ -104,4 +126,4 @@ export function makeTableRenameAndFilter(columnRenames, columnsKept, columns, de } return result; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/navigator_gpu.js b/tests/wpt/webgpu/tests/webgpu/common/util/navigator_gpu.js index 63b432b4ebe..d5db9f936ef 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/navigator_gpu.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/navigator_gpu.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /// import { ErrorWithExtra, assert, objectEquals } from './util.js'; @@ -13,7 +13,6 @@ function defaultGPUProvider() { typeof navigator !== 'undefined' && navigator.gpu !== undefined, 'No WebGPU implementation found' ); - return navigator.gpu; } @@ -22,6 +21,7 @@ function defaultGPUProvider() { * May throw an exception if a GPU cannot be created. */ + let gpuProvider = defaultGPUProvider; /** @@ -63,11 +63,14 @@ export function getGPU(recorder) { impl = gpuProvider(); if (defaultRequestAdapterOptions) { + const oldFn = impl.requestAdapter; - impl.requestAdapter = function (options) { + impl.requestAdapter = function ( + options) + { const promise = oldFn.call(this, { ...defaultRequestAdapterOptions, ...options }); if (recorder) { - void promise.then(async adapter => { + void promise.then(async (adapter) => { if (adapter) { const info = await adapter.requestAdapterInfo(); const infoString = `Adapter: ${info.vendor} / ${info.architecture} / ${info.device}`; @@ -80,4 +83,4 @@ export function getGPU(recorder) { } return impl; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/parse_imports.js b/tests/wpt/webgpu/tests/webgpu/common/util/parse_imports.js new file mode 100644 index 00000000000..bc970572b1d --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/common/util/parse_imports.js @@ -0,0 +1,36 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** + * Parses all the paths of the typescript `import` statements from content + * @param path the current path of the file + * @param content the file content + * @returns the list of import paths + */export function parseImports(path, content) {const out = []; + const importRE = /^import\s[^'"]*(['"])([./\w]*)(\1);/gm; + let importMatch; + while (importMatch = importRE.exec(content)) { + const importPath = importMatch[2].replace(`'`, '').replace(`"`, ''); + out.push(joinPath(path, importPath)); + } + return out; +} + +function joinPath(a, b) { + const aParts = a.split('/'); + const bParts = b.split('/'); + aParts.pop(); // remove file + let bStart = 0; + while (aParts.length > 0) { + switch (bParts[bStart]) { + case '.': + bStart++; + continue; + case '..': + aParts.pop(); + bStart++; + continue; + } + break; + } + return [...aParts, ...bParts.slice(bStart)].join('/'); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/preprocessor.js b/tests/wpt/webgpu/tests/webgpu/common/util/preprocessor.js index 455406de068..8783ee16e06 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/preprocessor.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/preprocessor.js @@ -1,21 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from './util.js'; // The state of the preprocessor is a stack of States. -var State; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from './util.js'; // The state of the preprocessor is a stack of States. +var +State = /*#__PURE__*/function (State) {State[State["Seeking"] = 0] = "Seeking";State[State["Passing"] = 1] = "Passing";State[State["Skipping"] = 2] = "Skipping";return State;}(State || {}); + // Have already seen a passing condition; now skipping the rest + // The transitions in the state space are the following preprocessor directives: // - Sibling elif // - Sibling else // - Sibling endif // - Child if -(function (State) { - State[(State['Seeking'] = 0)] = 'Seeking'; - State[(State['Passing'] = 1)] = 'Passing'; - State[(State['Skipping'] = 2)] = 'Skipping'; -})(State || (State = {})); class Directive { + + constructor(depth) { this.depth = depth; } @@ -26,9 +26,13 @@ class Directive { `Number of "$"s must match nesting depth, currently ${stack.length} (e.g. $if $$if $$endif $endif)` ); } + + } class If extends Directive { + + constructor(depth, predicate) { super(depth); this.predicate = predicate; @@ -40,11 +44,11 @@ class If extends Directive { stack.push({ allowsFollowingElse: true, state: - parentState !== State.Passing - ? State.Skipping - : this.predicate - ? State.Passing - : State.Seeking, + parentState !== State.Passing ? + State.Skipping : + this.predicate ? + State.Passing : + State.Seeking }); } } @@ -71,7 +75,7 @@ class Else extends Directive { assert(allowsFollowingElse, 'pp.else after pp.else'); stack.push({ allowsFollowingElse: false, - state: siblingState === State.Seeking ? State.Passing : State.Skipping, + state: siblingState === State.Seeking ? State.Passing : State.Skipping }); } } @@ -103,7 +107,10 @@ class EndIf extends Directive { * @param strings - The array of constant string chunks of the template string. * @param ...values - The array of interpolated `${}` values within the template string. */ -export function pp(strings, ...values) { +export function pp( +strings, +...values) +{ let result = ''; const stateStack = [{ allowsFollowingElse: false, state: State.Passing }]; @@ -127,16 +134,16 @@ export function pp(strings, ...values) { return result; } -pp._if = predicate => new If(1, predicate); -pp._elif = predicate => new ElseIf(1, predicate); +pp._if = (predicate) => new If(1, predicate); +pp._elif = (predicate) => new ElseIf(1, predicate); pp._else = new Else(1); pp._endif = new EndIf(1); -pp.__if = predicate => new If(2, predicate); -pp.__elif = predicate => new ElseIf(2, predicate); +pp.__if = (predicate) => new If(2, predicate); +pp.__elif = (predicate) => new ElseIf(2, predicate); pp.__else = new Else(2); pp.__endif = new EndIf(2); -pp.___if = predicate => new If(3, predicate); -pp.___elif = predicate => new ElseIf(3, predicate); +pp.___if = (predicate) => new If(3, predicate); +pp.___elif = (predicate) => new ElseIf(3, predicate); pp.___else = new Else(3); pp.___endif = new EndIf(3); -// Add more if needed. +// Add more if needed. \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/timeout.js b/tests/wpt/webgpu/tests/webgpu/common/util/timeout.js index 77605fc8ded..f70472eeee5 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/timeout.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/timeout.js @@ -1,7 +1,7 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** Defined by WPT. Like `setTimeout`, but applies a timeout multiplier for slow test systems. */ /** * Equivalent of `setTimeout`, but redirects to WPT's `step_timeout` when it is defined. */ -export const timeout = typeof step_timeout !== 'undefined' ? step_timeout : setTimeout; +export const timeout = typeof step_timeout !== 'undefined' ? step_timeout : setTimeout; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/types.js b/tests/wpt/webgpu/tests/webgpu/common/util/types.js index e4aaa93ec9e..0e893ab2fae 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/types.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/types.js @@ -1,8 +1,56 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** Forces a type to resolve its type definitions, to make it readable/debuggable. */ + + + + +/** Returns the type `true` iff X and Y are exactly equal */ + + + + export function assertTypeTrue() {} + +/** `ReadonlyArray` of `ReadonlyArray`s. */ + +/** `ReadonlyArray` of `ReadonlyArray`s of `ReadonlyArray`s. */ + + +/** + * Deep version of the Readonly<> type, with support for tuples (up to length 7). + * + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** * Computes the intersection of a set of types, given the union of those types. @@ -10,4 +58,40 @@ export function assertTypeTrue() {} * From: https://stackoverflow.com/a/56375136 */ -// K exhausted + + + +/** "Type asserts" that `X` is a subtype of `Y`. */ + + + + + + +/** + * Zips a key tuple type and a value tuple type together into an object. + * + * @template Keys Keys of the resulting object. + * @template Values Values of the resulting object. If a key corresponds to a `Values` member that + * is undefined or past the end, it defaults to the corresponding `Defaults` member. + * @template Defaults Default values. If a key corresponds to a `Defaults` member that is past the + * end, the default falls back to `undefined`. + */ + + + + + + + + + + + + + + + + + +// K exhausted \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/util.js b/tests/wpt/webgpu/tests/webgpu/common/util/util.js index 248fc2cc35f..34934af6c04 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/util.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/util.js @@ -1,8 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { Float16Array } from '../../external/petamoriken/float16/float16.js'; -import { SkipTestCase } from '../framework/fixture.js'; -import { globalTestConfig } from '../framework/test_config.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Float16Array } from '../../external/petamoriken/float16/float16.js';import { SkipTestCase } from '../framework/fixture.js';import { globalTestConfig } from '../framework/test_config.js'; import { Logger } from '../internal/logging/logger.js'; import { keysOf } from './data_tables.js'; @@ -13,19 +11,22 @@ import { timeout } from './timeout.js'; * The extra data is omitted if not running the test in debug mode (`?debug=1`). */ export class ErrorWithExtra extends Error { + + /** * `extra` function is only called if in debug mode. * If an `ErrorWithExtra` is passed, its message is used and its extras are passed through. */ + constructor(baseOrMessage, newExtra) { const message = typeof baseOrMessage === 'string' ? baseOrMessage : baseOrMessage.message; super(message); const oldExtras = baseOrMessage instanceof ErrorWithExtra ? baseOrMessage.extra : {}; - this.extra = Logger.globalDebugMode - ? { ...oldExtras, ...newExtra() } - : { omitted: 'pass ?debug=1' }; + this.extra = Logger.globalDebugMode ? + { ...oldExtras, ...newExtra() } : + { omitted: 'pass ?debug=1' }; } } @@ -46,15 +47,29 @@ export function assertOK(value) { return value; } +/** Options for assertReject, shouldReject, and friends. */ + + /** * Resolves if the provided promise rejects; rejects if it does not. */ -export async function assertReject(p, msg) { +export async function assertReject( +expectedName, +p, +{ allowMissingStack = false, message } = {}) +{ try { await p; - unreachable(msg); + unreachable(message); } catch (ex) { - // Assertion OK + // Asserted as expected + if (!allowMissingStack) { + const m = message ? ` (${message})` : ''; + assert( + ex instanceof Error && typeof ex.stack === 'string', + 'threw as expected, but missing stack' + m + ); + } } } @@ -89,7 +104,7 @@ export function now() { * Returns a promise which resolves after the specified time. */ export function resolveOnTimeout(ms) { - return new Promise(resolve => { + return new Promise((resolve) => { timeout(() => { resolve(); }, ms); @@ -133,15 +148,19 @@ export function raceWithRejectOnTimeout(p, ms, msg) { * Takes a promise `p` and returns a new one which rejects if `p` resolves or rejects, * and otherwise resolves after the specified time. */ -export function assertNotSettledWithinTime(p, ms, msg) { +export function assertNotSettledWithinTime( +p, +ms, +msg) +{ // Rejects regardless of whether p resolves or rejects. const rejectWhenSettled = p.then(() => Promise.reject(new Error(msg))); // Resolves after `ms` milliseconds. - const timeoutPromise = new Promise(resolve => { + const timeoutPromise = new Promise((resolve) => { const handle = timeout(() => { resolve(undefined); }, ms); - p.finally(() => clearTimeout(handle)); + void p.finally(() => clearTimeout(handle)); }); return Promise.race([rejectWhenSettled, timeoutPromise]); } @@ -177,14 +196,24 @@ export function sortObjectByKey(v) { /** * Determines whether two JS values are equal, recursing into objects and arrays. - * NaN is treated specially, such that `objectEquals(NaN, NaN)`. + * NaN is treated specially, such that `objectEquals(NaN, NaN)`. +/-0.0 are treated as equal + * by default, but can be opted to be distinguished. + * @param x the first JS values that get compared + * @param y the second JS values that get compared + * @param distinguishSignedZero if set to true, treat 0.0 and -0.0 as unequal. Default to false. */ -export function objectEquals(x, y) { +export function objectEquals( +x, +y, +distinguishSignedZero = false) +{ if (typeof x !== 'object' || typeof y !== 'object') { if (typeof x === 'number' && typeof y === 'number' && Number.isNaN(x) && Number.isNaN(y)) { return true; } - return x === y; + // Object.is(0.0, -0.0) is false while (0.0 === -0.0) is true. Other than +/-0.0 and NaN cases, + // Object.is works in the same way as ===. + return distinguishSignedZero ? Object.is(x, y) : x === y; } if (x === null || y === null) return x === y; if (x.constructor !== y.constructor) return false; @@ -199,7 +228,7 @@ export function objectEquals(x, y) { const x1 = x; const y1 = y; const p = Object.keys(x); - return Object.keys(y).every(i => p.indexOf(i) !== -1) && p.every(i => objectEquals(x1[i], y1[i])); + return Object.keys(y).every((i) => p.indexOf(i) !== -1) && p.every((i) => objectEquals(x1[i], y1[i])); } /** @@ -225,14 +254,14 @@ export function mapLazy(xs, f) { for (const x of xs) { yield f(x); } - }, + } }; } const ReorderOrders = { forward: true, backward: true, - shiftByHalf: true, + shiftByHalf: true }; export const kReorderOrderKeys = keysOf(ReorderOrders); @@ -243,7 +272,7 @@ export const kReorderOrderKeys = keysOf(ReorderOrders); */ export function shiftByHalf(arr) { const len = arr.length; - const half = (len / 2) | 0; + const half = len / 2 | 0; const firstHalf = arr.splice(0, half); return [...arr, ...firstHalf]; } @@ -257,38 +286,82 @@ export function reorder(order, arr) { return arr.slice(); case 'backward': return arr.slice().reverse(); - case 'shiftByHalf': { - // should this be pseudo random? - return shiftByHalf(arr); - } + case 'shiftByHalf':{ + // should this be pseudo random? + return shiftByHalf(arr); + } } } const TypedArrayBufferViewInstances = [ - new Uint8Array(), - new Uint8ClampedArray(), - new Uint16Array(), - new Uint32Array(), - new Int8Array(), - new Int16Array(), - new Int32Array(), - new Float16Array(), - new Float32Array(), - new Float64Array(), -]; +new Uint8Array(), +new Uint8ClampedArray(), +new Uint16Array(), +new Uint32Array(), +new Int8Array(), +new Int16Array(), +new Int32Array(), +new Float16Array(), +new Float32Array(), +new Float64Array()]; -export const kTypedArrayBufferViews = { + + + + + + + + + + + + + + + + + + + + + + + +export const kTypedArrayBufferViews = + +{ ...(() => { + const result = {}; for (const v of TypedArrayBufferViewInstances) { result[v.constructor.name] = v.constructor; } return result; - })(), + })() }; export const kTypedArrayBufferViewKeys = keysOf(kTypedArrayBufferViews); export const kTypedArrayBufferViewConstructors = Object.values(kTypedArrayBufferViews); + + + + + + + + + + + + + + + + + + + /** * Creates a case parameter for a typedarray. * @@ -318,23 +391,34 @@ export const kTypedArrayBufferViewConstructors = Object.values(kTypedArrayBuffer * }) * ``` */ -export function typedArrayParam(type, data) { +export function typedArrayParam( +type, +data) +{ return { type, data }; } -export function createTypedArray(type, data) { +export function createTypedArray( +type, +data) +{ return new kTypedArrayBufferViews[type](data); } /** * Converts a TypedArrayParam to a typedarray. See typedArrayParam */ -export function typedArrayFromParam(param) { +export function typedArrayFromParam( +param) +{ const { type, data } = param; return createTypedArray(type, data); } -function subarrayAsU8(buf, { start = 0, length }) { +function subarrayAsU8( +buf, +{ start = 0, length }) +{ if (buf instanceof ArrayBuffer) { return new Uint8Array(buf, start, length); } else if (buf instanceof Uint8Array || buf instanceof Uint8ClampedArray) { @@ -345,9 +429,9 @@ function subarrayAsU8(buf, { start = 0, length }) { } const byteOffset = buf.byteOffset + start * buf.BYTES_PER_ELEMENT; const byteLength = - length !== undefined - ? length * buf.BYTES_PER_ELEMENT - : buf.byteLength - (byteOffset - buf.byteOffset); + length !== undefined ? + length * buf.BYTES_PER_ELEMENT : + buf.byteLength - (byteOffset - buf.byteOffset); return new Uint8Array(buf.buffer, byteOffset, byteLength); } @@ -356,7 +440,10 @@ function subarrayAsU8(buf, { start = 0, length }) { * * `start`/`length` are in elements (or in bytes, if ArrayBuffer). */ -export function memcpy(src, dst) { +export function memcpy( +src, +dst) +{ subarrayAsU8(dst.dst, dst).set(subarrayAsU8(src.src, src)); } @@ -365,11 +452,17 @@ export function memcpy(src, dst) { * by a constant and then adding a constant to it. */ + + + + /** * Filters out SpecValues that are the same. */ export function filterUniqueValueTestVariants(valueTestVariants) { - return new Map(valueTestVariants.map(v => [`m:${v.mult},a:${v.add}`, v])).values(); + return new Map( + valueTestVariants.map((v) => [`m:${v.mult},a:${v.add}`, v]) + ).values(); } /** @@ -380,4 +473,4 @@ export function filterUniqueValueTestVariants(valueTestVariants) { */ export function makeValueTestVariant(base, variant) { return base * variant.mult + variant.add; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/common/util/wpt_reftest_wait.js b/tests/wpt/webgpu/tests/webgpu/common/util/wpt_reftest_wait.js index b41b3cadf97..89b7fd1a9c5 100644 --- a/tests/wpt/webgpu/tests/webgpu/common/util/wpt_reftest_wait.js +++ b/tests/wpt/webgpu/tests/webgpu/common/util/wpt_reftest_wait.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { timeout } from './timeout.js'; // Copied from https://github.com/web-platform-tests/wpt/blob/master/common/reftest-wait.js +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { timeout } from './timeout.js'; // Copied from https://github.com/web-platform-tests/wpt/blob/master/common/reftest-wait.js /** * Remove the `reftest-wait` class on the document element. @@ -21,4 +21,4 @@ export function takeScreenshotDelayed(ms) { timeout(() => { takeScreenshot(); }, ms); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/cts.https.html b/tests/wpt/webgpu/tests/webgpu/cts.https.html index 60d93b5a8d1..6aeaac3b1da 100644 --- a/tests/wpt/webgpu/tests/webgpu/cts.https.html +++ b/tests/wpt/webgpu/tests/webgpu/cts.https.html @@ -44,6 +44,7 @@ + @@ -141,8 +142,11 @@ + + + @@ -296,7 +300,7 @@ - + @@ -304,9 +308,11 @@ + + @@ -321,10 +327,14 @@ + + + + @@ -336,6 +346,7 @@ + @@ -356,8 +367,10 @@ + + @@ -540,7 +553,6 @@ - @@ -565,9 +577,9 @@ - - - + + + @@ -651,7 +663,7 @@ - + @@ -709,6 +721,8 @@ + + @@ -798,6 +812,9 @@ + + + @@ -849,16 +866,22 @@ + + + + + + @@ -883,6 +906,9 @@ + + + @@ -893,12 +919,20 @@ + + + + + + + + @@ -1611,6 +1645,7 @@ + @@ -1637,6 +1672,8 @@ + + @@ -1710,6 +1747,7 @@ + @@ -1725,6 +1763,14 @@ + + + + + + + + @@ -1742,6 +1788,22 @@ + + + + + + + + + + + + + + + + @@ -1758,6 +1820,14 @@ + + + + + + + + @@ -2005,7 +2075,6 @@ - diff --git a/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.d.js b/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.d.js index 9b2db0e1926..138c3378a52 100644 --- a/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.d.js +++ b/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.d.js @@ -1,3 +1,470 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export {}; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** + * A typed array of 16-bit float values. The contents are initialized to 0. If the requested number + * of bytes could not be allocated an exception is raised. + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** + * Returns `true` if the value is a Float16Array instance. + * @since v3.4.0 + */ + + +/** + * Returns `true` if the value is a type of TypedArray instance that contains Float16Array. + * @since v3.6.0 + */ + + + + + + + + + + + + + + + + +/** + * Gets the Float16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + * @param littleEndian If false or undefined, a big-endian value should be read, + * otherwise a little-endian value should be read. + */ + + + + + + +/** + * Stores an Float16 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + + + + + + + +/** + * Returns the nearest half-precision float representation of a number. + * @param x A numeric expression. + */export {}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.js b/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.js index 58f75c873a6..42543cdea17 100644 --- a/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.js +++ b/tests/wpt/webgpu/tests/webgpu/external/petamoriken/float16/float16.js @@ -1,23 +1,25 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /*! @petamoriken/float16 v3.6.6 | MIT License - https://github.com/petamoriken/float16 */ const THIS_IS_NOT_AN_OBJECT = - 'This is not an object'; -const THIS_IS_NOT_A_FLOAT16ARRAY_OBJECT = 'This is not a Float16Array object'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /*! @petamoriken/float16 v3.6.6 | MIT License - https://github.com/petamoriken/float16 */const THIS_IS_NOT_AN_OBJECT = "This is not an object"; +const THIS_IS_NOT_A_FLOAT16ARRAY_OBJECT = "This is not a Float16Array object"; const THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY = - 'This constructor is not a subclass of Float16Array'; +"This constructor is not a subclass of Float16Array"; const THE_CONSTRUCTOR_PROPERTY_VALUE_IS_NOT_AN_OBJECT = - 'The constructor property value is not an object'; +"The constructor property value is not an object"; const SPECIES_CONSTRUCTOR_DIDNT_RETURN_TYPEDARRAY_OBJECT = - "Species constructor didn't return TypedArray object"; +"Species constructor didn't return TypedArray object"; const DERIVED_CONSTRUCTOR_CREATED_TYPEDARRAY_OBJECT_WHICH_WAS_TOO_SMALL_LENGTH = - 'Derived constructor created TypedArray object which was too small length'; -const ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER = 'Attempting to access detached ArrayBuffer'; -const CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT = 'Cannot convert undefined or null to object'; +"Derived constructor created TypedArray object which was too small length"; +const ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER = +"Attempting to access detached ArrayBuffer"; +const CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT = +"Cannot convert undefined or null to object"; const CANNOT_MIX_BIGINT_AND_OTHER_TYPES = - 'Cannot mix BigInt and other types, use explicit conversions'; -const ITERATOR_PROPERTY_IS_NOT_CALLABLE = '@@iterator property is not callable'; -const REDUCE_OF_EMPTY_ARRAY_WITH_NO_INITIAL_VALUE = 'Reduce of empty array with no initial value'; -const OFFSET_IS_OUT_OF_BOUNDS = 'Offset is out of bounds'; +"Cannot mix BigInt and other types, use explicit conversions"; +const ITERATOR_PROPERTY_IS_NOT_CALLABLE = "@@iterator property is not callable"; +const REDUCE_OF_EMPTY_ARRAY_WITH_NO_INITIAL_VALUE = +"Reduce of empty array with no initial value"; +const OFFSET_IS_OUT_OF_BOUNDS = "Offset is out of bounds"; function uncurryThis(target) { return (thisArg, ...args) => { @@ -25,7 +27,12 @@ function uncurryThis(target) { }; } function uncurryThisGetter(target, key) { - return uncurryThis(ReflectGetOwnPropertyDescriptor(target, key).get); + return uncurryThis( + ReflectGetOwnPropertyDescriptor( + target, + key + ).get + ); } const { apply: ReflectApply, @@ -37,49 +44,57 @@ const { has: ReflectHas, ownKeys: ReflectOwnKeys, set: ReflectSet, - setPrototypeOf: ReflectSetPrototypeOf, + setPrototypeOf: ReflectSetPrototypeOf } = Reflect; const NativeProxy = Proxy; -const { MAX_SAFE_INTEGER: MAX_SAFE_INTEGER, isFinite: NumberIsFinite, isNaN: NumberIsNaN } = Number; +const { + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER, + isFinite: NumberIsFinite, + isNaN: NumberIsNaN +} = Number; const { iterator: SymbolIterator, species: SymbolSpecies, toStringTag: SymbolToStringTag, - for: SymbolFor, + for: SymbolFor } = Symbol; const NativeObject = Object; const { create: ObjectCreate, defineProperty: ObjectDefineProperty, freeze: ObjectFreeze, - is: ObjectIs, + is: ObjectIs } = NativeObject; const ObjectPrototype = NativeObject.prototype; -const ObjectPrototype__lookupGetter__ = ObjectPrototype.__lookupGetter__ - ? uncurryThis(ObjectPrototype.__lookupGetter__) - : (object, key) => { - if (object == null) { - throw NativeTypeError(CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT); +const ObjectPrototype__lookupGetter__ = ObjectPrototype.__lookupGetter__ ? +uncurryThis(ObjectPrototype.__lookupGetter__) : +(object, key) => { + if (object == null) { + throw NativeTypeError( + CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT + ); + } + let target = NativeObject(object); + do { + const descriptor = ReflectGetOwnPropertyDescriptor(target, key); + if (descriptor !== undefined) { + if (ObjectHasOwn(descriptor, "get")) { + return descriptor.get; } - let target = NativeObject(object); - do { - const descriptor = ReflectGetOwnPropertyDescriptor(target, key); - if (descriptor !== undefined) { - if (ObjectHasOwn(descriptor, 'get')) { - return descriptor.get; - } - return; - } - } while ((target = ReflectGetPrototypeOf(target)) !== null); - }; -const ObjectHasOwn = NativeObject.hasOwn || uncurryThis(ObjectPrototype.hasOwnProperty); + return; + } + } while ((target = ReflectGetPrototypeOf(target)) !== null); +}; +const ObjectHasOwn = NativeObject.hasOwn || +uncurryThis(ObjectPrototype.hasOwnProperty); const NativeArray = Array; const ArrayIsArray = NativeArray.isArray; const ArrayPrototype = NativeArray.prototype; const ArrayPrototypeJoin = uncurryThis(ArrayPrototype.join); const ArrayPrototypePush = uncurryThis(ArrayPrototype.push); -const ArrayPrototypeToLocaleString = uncurryThis(ArrayPrototype.toLocaleString); - +const ArrayPrototypeToLocaleString = uncurryThis( + ArrayPrototype.toLocaleString +); const NativeArrayPrototypeSymbolIterator = ArrayPrototype[SymbolIterator]; const ArrayPrototypeSymbolIterator = uncurryThis(NativeArrayPrototypeSymbolIterator); const MathTrunc = Math.trunc; @@ -87,40 +102,50 @@ const NativeArrayBuffer = ArrayBuffer; const ArrayBufferIsView = NativeArrayBuffer.isView; const ArrayBufferPrototype = NativeArrayBuffer.prototype; const ArrayBufferPrototypeSlice = uncurryThis(ArrayBufferPrototype.slice); -const ArrayBufferPrototypeGetByteLength = uncurryThisGetter(ArrayBufferPrototype, 'byteLength'); -const NativeSharedArrayBuffer = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : null; -const SharedArrayBufferPrototypeGetByteLength = - NativeSharedArrayBuffer && uncurryThisGetter(NativeSharedArrayBuffer.prototype, 'byteLength'); +const ArrayBufferPrototypeGetByteLength = uncurryThisGetter(ArrayBufferPrototype, "byteLength"); +const NativeSharedArrayBuffer = typeof SharedArrayBuffer !== "undefined" ? SharedArrayBuffer : null; +const SharedArrayBufferPrototypeGetByteLength = NativeSharedArrayBuffer && +uncurryThisGetter(NativeSharedArrayBuffer.prototype, "byteLength"); const TypedArray = ReflectGetPrototypeOf(Uint8Array); const TypedArrayFrom = TypedArray.from; const TypedArrayPrototype = TypedArray.prototype; const NativeTypedArrayPrototypeSymbolIterator = TypedArrayPrototype[SymbolIterator]; const TypedArrayPrototypeKeys = uncurryThis(TypedArrayPrototype.keys); -const TypedArrayPrototypeValues = uncurryThis(TypedArrayPrototype.values); - -const TypedArrayPrototypeEntries = uncurryThis(TypedArrayPrototype.entries); - +const TypedArrayPrototypeValues = uncurryThis( + TypedArrayPrototype.values +); +const TypedArrayPrototypeEntries = uncurryThis( + TypedArrayPrototype.entries +); const TypedArrayPrototypeSet = uncurryThis(TypedArrayPrototype.set); -const TypedArrayPrototypeReverse = uncurryThis(TypedArrayPrototype.reverse); - +const TypedArrayPrototypeReverse = uncurryThis( + TypedArrayPrototype.reverse +); const TypedArrayPrototypeFill = uncurryThis(TypedArrayPrototype.fill); -const TypedArrayPrototypeCopyWithin = uncurryThis(TypedArrayPrototype.copyWithin); - +const TypedArrayPrototypeCopyWithin = uncurryThis( + TypedArrayPrototype.copyWithin +); const TypedArrayPrototypeSort = uncurryThis(TypedArrayPrototype.sort); const TypedArrayPrototypeSlice = uncurryThis(TypedArrayPrototype.slice); -const TypedArrayPrototypeSubarray = uncurryThis(TypedArrayPrototype.subarray); - -const TypedArrayPrototypeGetBuffer = uncurryThisGetter(TypedArrayPrototype, 'buffer'); - -const TypedArrayPrototypeGetByteOffset = uncurryThisGetter(TypedArrayPrototype, 'byteOffset'); - -const TypedArrayPrototypeGetLength = uncurryThisGetter(TypedArrayPrototype, 'length'); - +const TypedArrayPrototypeSubarray = uncurryThis( + TypedArrayPrototype.subarray +); +const TypedArrayPrototypeGetBuffer = uncurryThisGetter( + TypedArrayPrototype, + "buffer" +); +const TypedArrayPrototypeGetByteOffset = uncurryThisGetter( + TypedArrayPrototype, + "byteOffset" +); +const TypedArrayPrototypeGetLength = uncurryThisGetter( + TypedArrayPrototype, + "length" +); const TypedArrayPrototypeGetSymbolToStringTag = uncurryThisGetter( TypedArrayPrototype, SymbolToStringTag ); - const NativeUint16Array = Uint16Array; const Uint16ArrayFrom = (...args) => { return ReflectApply(TypedArrayFrom, NativeUint16Array, args); @@ -129,13 +154,15 @@ const NativeUint32Array = Uint32Array; const NativeFloat32Array = Float32Array; const ArrayIteratorPrototype = ReflectGetPrototypeOf([][SymbolIterator]()); const ArrayIteratorPrototypeNext = uncurryThis(ArrayIteratorPrototype.next); -const GeneratorPrototypeNext = uncurryThis((function* () {})().next); +const GeneratorPrototypeNext = uncurryThis(function* () {}().next); const IteratorPrototype = ReflectGetPrototypeOf(ArrayIteratorPrototype); const DataViewPrototype = DataView.prototype; -const DataViewPrototypeGetUint16 = uncurryThis(DataViewPrototype.getUint16); - -const DataViewPrototypeSetUint16 = uncurryThis(DataViewPrototype.setUint16); - +const DataViewPrototypeGetUint16 = uncurryThis( + DataViewPrototype.getUint16 +); +const DataViewPrototypeSetUint16 = uncurryThis( + DataViewPrototype.setUint16 +); const NativeTypeError = TypeError; const NativeRangeError = RangeError; const NativeWeakSet = WeakSet; @@ -154,13 +181,13 @@ const SafeIteratorPrototype = ObjectCreate(null, { value: function next() { const arrayIterator = WeakMapPrototypeGet(arrayIterators, this); return ArrayIteratorPrototypeNext(arrayIterator); - }, + } }, [SymbolIterator]: { value: function values() { return this; - }, - }, + } + } }); function safeIfNeeded(array) { if (array[SymbolIterator] === NativeArrayPrototypeSymbolIterator) { @@ -178,18 +205,14 @@ const DummyArrayIteratorPrototype = ObjectCreate(IteratorPrototype, { return GeneratorPrototypeNext(generator); }, writable: true, - configurable: true, - }, + configurable: true + } }); for (const key of ReflectOwnKeys(ArrayIteratorPrototype)) { - if (key === 'next') { + if (key === "next") { continue; } - ObjectDefineProperty( - DummyArrayIteratorPrototype, - key, - ReflectGetOwnPropertyDescriptor(ArrayIteratorPrototype, key) - ); + ObjectDefineProperty(DummyArrayIteratorPrototype, key, ReflectGetOwnPropertyDescriptor(ArrayIteratorPrototype, key)); } function wrap(generator) { const dummy = ObjectCreate(DummyArrayIteratorPrototype); @@ -198,17 +221,19 @@ function wrap(generator) { } function isObject(value) { - return (value !== null && typeof value === 'object') || typeof value === 'function'; + return value !== null && typeof value === "object" || + typeof value === "function"; } function isObjectLike(value) { - return value !== null && typeof value === 'object'; + return value !== null && typeof value === "object"; } function isNativeTypedArray(value) { return TypedArrayPrototypeGetSymbolToStringTag(value) !== undefined; } function isNativeBigIntTypedArray(value) { const typedArrayName = TypedArrayPrototypeGetSymbolToStringTag(value); - return typedArrayName === 'BigInt64Array' || typedArrayName === 'BigUint64Array'; + return typedArrayName === "BigInt64Array" || + typedArrayName === "BigUint64Array"; } function isArrayBuffer(value) { try { @@ -237,7 +262,7 @@ function isOrdinaryArray(value) { return true; } const iterator = value[SymbolIterator](); - return iterator[SymbolToStringTag] === 'Array Iterator'; + return iterator[SymbolToStringTag] === "Array Iterator"; } function isOrdinaryNativeTypedArray(value) { if (!isNativeTypedArray(value)) { @@ -247,14 +272,14 @@ function isOrdinaryNativeTypedArray(value) { return true; } const iterator = value[SymbolIterator](); - return iterator[SymbolToStringTag] === 'Array Iterator'; + return iterator[SymbolToStringTag] === "Array Iterator"; } function isCanonicalIntegerIndexString(value) { - if (typeof value !== 'string') { + if (typeof value !== "string") { return false; } const number = +value; - if (value !== number + '') { + if (value !== number + "") { return false; } if (!NumberIsFinite(number)) { @@ -263,7 +288,7 @@ function isCanonicalIntegerIndexString(value) { return number === MathTrunc(number); } -const brand = SymbolFor('__Float16Array__'); +const brand = SymbolFor("__Float16Array__"); function hasFloat16ArrayBrand(target) { if (!isObjectLike(target)) { return false; @@ -295,13 +320,13 @@ for (let i = 0; i < 256; ++i) { shiftTable[i] = 24; shiftTable[i | 0x100] = 24; } else if (e < -14) { - baseTable[i] = 0x0400 >> (-e - 14); - baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000; + baseTable[i] = 0x0400 >> -e - 14; + baseTable[i | 0x100] = 0x0400 >> -e - 14 | 0x8000; shiftTable[i] = -e - 1; shiftTable[i | 0x100] = -e - 1; } else if (e <= 15) { - baseTable[i] = (e + 15) << 10; - baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000; + baseTable[i] = e + 15 << 10; + baseTable[i | 0x100] = e + 15 << 10 | 0x8000; shiftTable[i] = 13; shiftTable[i | 0x100] = 13; } else if (e < 128) { @@ -319,7 +344,7 @@ for (let i = 0; i < 256; ++i) { function roundToFloat16Bits(num) { floatView[0] = num; const f = uint32View[0]; - const e = (f >> 23) & 0x1ff; + const e = f >> 23 & 0x1ff; return baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]); } const mantissaTable = new NativeUint32Array(2048); @@ -337,7 +362,7 @@ for (let i = 1; i < 1024; ++i) { mantissaTable[i] = m | e; } for (let i = 1024; i < 2048; ++i) { - mantissaTable[i] = 0x38000000 + ((i - 1024) << 13); + mantissaTable[i] = 0x38000000 + (i - 1024 << 13); } for (let i = 1; i < 31; ++i) { exponentTable[i] = i << 23; @@ -345,7 +370,7 @@ for (let i = 1; i < 31; ++i) { exponentTable[31] = 0x47800000; exponentTable[32] = 0x80000000; for (let i = 33; i < 63; ++i) { - exponentTable[i] = 0x80000000 + ((i - 32) << 23); + exponentTable[i] = 0x80000000 + (i - 32 << 23); } exponentTable[63] = 0xc7800000; for (let i = 1; i < 64; ++i) { @@ -371,7 +396,9 @@ function ToLength(target) { if (length < 0) { return 0; } - return length < MAX_SAFE_INTEGER ? length : MAX_SAFE_INTEGER; + return length < MAX_SAFE_INTEGER ? + length : + MAX_SAFE_INTEGER; } function SpeciesConstructor(target, defaultConstructor) { if (!isObject(target)) { @@ -434,10 +461,8 @@ function defaultCompare(x, y) { const BYTES_PER_ELEMENT = 2; const float16bitsArrays = new NativeWeakMap(); function isFloat16Array(target) { - return ( - WeakMapPrototypeHas(float16bitsArrays, target) || - (!ArrayBufferIsView(target) && hasFloat16ArrayBrand(target)) - ); + return WeakMapPrototypeHas(float16bitsArrays, target) || + !ArrayBufferIsView(target) && hasFloat16ArrayBrand(target); } function assertFloat16Array(target) { if (!isFloat16Array(target)) { @@ -450,7 +475,7 @@ function assertSpeciesTypedArray(target, count) { if (!isTargetFloat16Array && !isTargetTypedArray) { throw NativeTypeError(SPECIES_CONSTRUCTOR_DIDNT_RETURN_TYPEDARRAY_OBJECT); } - if (typeof count === 'number') { + if (typeof count === "number") { let length; if (isTargetFloat16Array) { const float16bitsArray = getFloat16BitsArray(target); @@ -481,11 +506,11 @@ function getFloat16BitsArray(float16) { if (IsDetachedBuffer(buffer)) { throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); } - const cloned = ReflectConstruct( - Float16Array, - [buffer, float16.byteOffset, float16.length], - float16.constructor - ); + const cloned = ReflectConstruct(Float16Array, [ + buffer, + float16.byteOffset, + float16.length], + float16.constructor); return WeakMapPrototypeGet(float16bitsArrays, cloned); } function copyToArray(float16bitsArray) { @@ -502,7 +527,7 @@ for (const key of ReflectOwnKeys(TypedArrayPrototype)) { continue; } const descriptor = ReflectGetOwnPropertyDescriptor(TypedArrayPrototype, key); - if (ObjectHasOwn(descriptor, 'get') && typeof descriptor.get === 'function') { + if (ObjectHasOwn(descriptor, "get") && typeof descriptor.get === "function") { WeakSetPrototypeAdd(TypedArrayPrototypeGetters, descriptor.get); } } @@ -511,9 +536,7 @@ const handler = ObjectFreeze({ if (isCanonicalIntegerIndexString(key) && ObjectHasOwn(target, key)) { return convertToNumber(ReflectGet(target, key)); } - if ( - WeakSetPrototypeHas(TypedArrayPrototypeGetters, ObjectPrototype__lookupGetter__(target, key)) - ) { + if (WeakSetPrototypeHas(TypedArrayPrototypeGetters, ObjectPrototype__lookupGetter__(target, key))) { return ReflectGet(target, key); } return ReflectGet(target, key, receiver); @@ -534,25 +557,21 @@ const handler = ObjectFreeze({ }, defineProperty(target, key, descriptor) { if ( - isCanonicalIntegerIndexString(key) && - ObjectHasOwn(target, key) && - ObjectHasOwn(descriptor, 'value') - ) { + isCanonicalIntegerIndexString(key) && + ObjectHasOwn(target, key) && + ObjectHasOwn(descriptor, "value")) + { descriptor.value = roundToFloat16Bits(descriptor.value); return ReflectDefineProperty(target, key, descriptor); } return ReflectDefineProperty(target, key, descriptor); - }, + } }); class Float16Array { constructor(input, _byteOffset, _length) { let float16bitsArray; if (isFloat16Array(input)) { - float16bitsArray = ReflectConstruct( - NativeUint16Array, - [getFloat16BitsArray(input)], - new.target - ); + float16bitsArray = ReflectConstruct(NativeUint16Array, [getFloat16BitsArray(input)], new.target); } else if (isObject(input) && !isArrayBuffer(input)) { let list; let length; @@ -560,21 +579,25 @@ class Float16Array { list = input; length = TypedArrayPrototypeGetLength(input); const buffer = TypedArrayPrototypeGetBuffer(input); - const BufferConstructor = !isSharedArrayBuffer(buffer) - ? SpeciesConstructor(buffer, NativeArrayBuffer) - : NativeArrayBuffer; + const BufferConstructor = !isSharedArrayBuffer(buffer) ? + SpeciesConstructor( + buffer, + NativeArrayBuffer + ) : + NativeArrayBuffer; if (IsDetachedBuffer(buffer)) { throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); } if (isNativeBigIntTypedArray(input)) { throw NativeTypeError(CANNOT_MIX_BIGINT_AND_OTHER_TYPES); } - const data = new BufferConstructor(length * BYTES_PER_ELEMENT); - + const data = new BufferConstructor( + length * BYTES_PER_ELEMENT + ); float16bitsArray = ReflectConstruct(NativeUint16Array, [data], new.target); } else { const iterator = input[SymbolIterator]; - if (iterator != null && typeof iterator !== 'function') { + if (iterator != null && typeof iterator !== "function") { throw NativeTypeError(ITERATOR_PROPERTY_IS_NOT_CALLABLE); } if (iterator != null) { @@ -604,7 +627,9 @@ class Float16Array { static from(src, ...opts) { const Constructor = this; if (!ReflectHas(Constructor, brand)) { - throw NativeTypeError(THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY); + throw NativeTypeError( + THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY + ); } if (Constructor === Float16Array) { if (isFloat16Array(src) && opts.length === 0) { @@ -614,32 +639,33 @@ class Float16Array { TypedArrayPrototypeGetByteOffset(float16bitsArray), TypedArrayPrototypeGetLength(float16bitsArray) ); - - return new Float16Array(TypedArrayPrototypeGetBuffer(TypedArrayPrototypeSlice(uint16))); + return new Float16Array( + TypedArrayPrototypeGetBuffer(TypedArrayPrototypeSlice(uint16)) + ); } if (opts.length === 0) { return new Float16Array( - TypedArrayPrototypeGetBuffer(Uint16ArrayFrom(src, roundToFloat16Bits)) + TypedArrayPrototypeGetBuffer( + Uint16ArrayFrom(src, roundToFloat16Bits) + ) ); } const mapFunc = opts[0]; const thisArg = opts[1]; return new Float16Array( TypedArrayPrototypeGetBuffer( - Uint16ArrayFrom( - src, - function (val, ...args) { - return roundToFloat16Bits(ReflectApply(mapFunc, this, [val, ...safeIfNeeded(args)])); - }, - thisArg - ) + Uint16ArrayFrom(src, function (val, ...args) { + return roundToFloat16Bits( + ReflectApply(mapFunc, this, [val, ...safeIfNeeded(args)]) + ); + }, thisArg) ) ); } let list; let length; const iterator = src[SymbolIterator]; - if (iterator != null && typeof iterator !== 'function') { + if (iterator != null && typeof iterator !== "function") { throw NativeTypeError(ITERATOR_PROPERTY_IS_NOT_CALLABLE); } if (iterator != null) { @@ -655,7 +681,9 @@ class Float16Array { } } else { if (src == null) { - throw NativeTypeError(CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT); + throw NativeTypeError( + CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT + ); } list = NativeObject(src); length = ToLength(list.length); @@ -677,7 +705,9 @@ class Float16Array { static of(...items) { const Constructor = this; if (!ReflectHas(Constructor, brand)) { - throw NativeTypeError(THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY); + throw NativeTypeError( + THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY + ); } const length = items.length; if (Constructor === Float16Array) { @@ -702,24 +732,20 @@ class Float16Array { values() { assertFloat16Array(this); const float16bitsArray = getFloat16BitsArray(this); - return wrap( - (function* () { - for (const val of TypedArrayPrototypeValues(float16bitsArray)) { - yield convertToNumber(val); - } - })() - ); + return wrap(function* () { + for (const val of TypedArrayPrototypeValues(float16bitsArray)) { + yield convertToNumber(val); + } + }()); } entries() { assertFloat16Array(this); const float16bitsArray = getFloat16BitsArray(this); - return wrap( - (function* () { - for (const [i, val] of TypedArrayPrototypeEntries(float16bitsArray)) { - yield [i, convertToNumber(val)]; - } - })() - ); + return wrap(function* () { + for (const [i, val] of TypedArrayPrototypeEntries(float16bitsArray)) { + yield [i, convertToNumber(val)]; + } + }()); } at(index) { assertFloat16Array(this); @@ -743,7 +769,9 @@ class Float16Array { const array = getFloat16BitsArray(proxy); for (let i = 0; i < length; ++i) { const val = convertToNumber(float16bitsArray[i]); - array[i] = roundToFloat16Bits(ReflectApply(callback, thisArg, [val, i, this])); + array[i] = roundToFloat16Bits( + ReflectApply(callback, thisArg, [val, i, this]) + ); } return proxy; } @@ -788,7 +816,12 @@ class Float16Array { start = 0; } for (let i = start; i < length; ++i) { - accumulator = callback(accumulator, convertToNumber(float16bitsArray[i]), i, this); + accumulator = callback( + accumulator, + convertToNumber(float16bitsArray[i]), + i, + this + ); } return accumulator; } @@ -808,7 +841,12 @@ class Float16Array { start = length - 1; } for (let i = start; i >= 0; --i) { - accumulator = callback(accumulator, convertToNumber(float16bitsArray[i]), i, this); + accumulator = callback( + accumulator, + convertToNumber(float16bitsArray[i]), + i, + this + ); } return accumulator; } @@ -818,7 +856,11 @@ class Float16Array { const length = TypedArrayPrototypeGetLength(float16bitsArray); const thisArg = opts[0]; for (let i = 0; i < length; ++i) { - ReflectApply(callback, thisArg, [convertToNumber(float16bitsArray[i]), i, this]); + ReflectApply(callback, thisArg, [ + convertToNumber(float16bitsArray[i]), + i, + this] + ); } } find(callback, ...opts) { @@ -877,7 +919,13 @@ class Float16Array { const length = TypedArrayPrototypeGetLength(float16bitsArray); const thisArg = opts[0]; for (let i = 0; i < length; ++i) { - if (!ReflectApply(callback, thisArg, [convertToNumber(float16bitsArray[i]), i, this])) { + if ( + !ReflectApply(callback, thisArg, [ + convertToNumber(float16bitsArray[i]), + i, + this] + )) + { return false; } } @@ -889,7 +937,13 @@ class Float16Array { const length = TypedArrayPrototypeGetLength(float16bitsArray); const thisArg = opts[0]; for (let i = 0; i < length; ++i) { - if (ReflectApply(callback, thisArg, [convertToNumber(float16bitsArray[i]), i, this])) { + if ( + ReflectApply(callback, thisArg, [ + convertToNumber(float16bitsArray[i]), + i, + this] + )) + { return true; } } @@ -903,10 +957,14 @@ class Float16Array { throw NativeRangeError(OFFSET_IS_OUT_OF_BOUNDS); } if (input == null) { - throw NativeTypeError(CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT); + throw NativeTypeError( + CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT + ); } if (isNativeBigIntTypedArray(input)) { - throw NativeTypeError(CANNOT_MIX_BIGINT_AND_OTHER_TYPES); + throw NativeTypeError( + CANNOT_MIX_BIGINT_AND_OTHER_TYPES + ); } if (isFloat16Array(input)) { return TypedArrayPrototypeSet( @@ -940,8 +998,11 @@ class Float16Array { fill(value, ...opts) { assertFloat16Array(this); const float16bitsArray = getFloat16BitsArray(this); - TypedArrayPrototypeFill(float16bitsArray, roundToFloat16Bits(value), ...safeIfNeeded(opts)); - + TypedArrayPrototypeFill( + float16bitsArray, + roundToFloat16Bits(value), + ...safeIfNeeded(opts) + ); return this; } copyWithin(target, start, ...opts) { @@ -969,9 +1030,10 @@ class Float16Array { TypedArrayPrototypeGetByteOffset(float16bitsArray), TypedArrayPrototypeGetLength(float16bitsArray) ); - return new Float16Array( - TypedArrayPrototypeGetBuffer(TypedArrayPrototypeSlice(uint16, start, end)) + TypedArrayPrototypeGetBuffer( + TypedArrayPrototypeSlice(uint16, start, end) + ) ); } const length = TypedArrayPrototypeGetLength(float16bitsArray); @@ -1020,14 +1082,12 @@ class Float16Array { TypedArrayPrototypeGetByteOffset(float16bitsArray), TypedArrayPrototypeGetLength(float16bitsArray) ); - const uint16Subarray = TypedArrayPrototypeSubarray(uint16, begin, end); const array = new Constructor( TypedArrayPrototypeGetBuffer(uint16Subarray), TypedArrayPrototypeGetByteOffset(uint16Subarray), TypedArrayPrototypeGetLength(uint16Subarray) ); - assertSpeciesTypedArray(array); return array; } @@ -1046,7 +1106,10 @@ class Float16Array { } } for (let i = from; i < length; ++i) { - if (ObjectHasOwn(float16bitsArray, i) && convertToNumber(float16bitsArray[i]) === element) { + if ( + ObjectHasOwn(float16bitsArray, i) && + convertToNumber(float16bitsArray[i]) === element) + { return i; } } @@ -1066,7 +1129,10 @@ class Float16Array { from += length; } for (let i = from; i >= 0; --i) { - if (ObjectHasOwn(float16bitsArray, i) && convertToNumber(float16bitsArray[i]) === element) { + if ( + ObjectHasOwn(float16bitsArray, i) && + convertToNumber(float16bitsArray[i]) === element) + { return i; } } @@ -1112,23 +1178,23 @@ class Float16Array { } get [SymbolToStringTag]() { if (isFloat16Array(this)) { - return 'Float16Array'; + return "Float16Array"; } } } -ObjectDefineProperty(Float16Array, 'BYTES_PER_ELEMENT', { - value: BYTES_PER_ELEMENT, +ObjectDefineProperty(Float16Array, "BYTES_PER_ELEMENT", { + value: BYTES_PER_ELEMENT }); ObjectDefineProperty(Float16Array, brand, {}); ReflectSetPrototypeOf(Float16Array, TypedArray); const Float16ArrayPrototype = Float16Array.prototype; -ObjectDefineProperty(Float16ArrayPrototype, 'BYTES_PER_ELEMENT', { - value: BYTES_PER_ELEMENT, +ObjectDefineProperty(Float16ArrayPrototype, "BYTES_PER_ELEMENT", { + value: BYTES_PER_ELEMENT }); ObjectDefineProperty(Float16ArrayPrototype, SymbolIterator, { value: Float16ArrayPrototype.values, writable: true, - configurable: true, + configurable: true }); ReflectSetPrototypeOf(Float16ArrayPrototype, TypedArrayPrototype); @@ -1137,7 +1203,9 @@ function isTypedArray(target) { } function getFloat16(dataView, byteOffset, ...opts) { - return convertToNumber(DataViewPrototypeGetUint16(dataView, byteOffset, ...safeIfNeeded(opts))); + return convertToNumber( + DataViewPrototypeGetUint16(dataView, byteOffset, ...safeIfNeeded(opts)) + ); } function setFloat16(dataView, byteOffset, value, ...opts) { return DataViewPrototypeSetUint16( @@ -1157,4 +1225,4 @@ function hfround(x) { return convertToNumber(x16); } -export { Float16Array, getFloat16, hfround, isFloat16Array, isTypedArray, setFloat16 }; +export { Float16Array, getFloat16, hfround, isFloat16Array, isTypedArray, setFloat16 }; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/hashes.json b/tests/wpt/webgpu/tests/webgpu/resources/cache/hashes.json new file mode 100644 index 00000000000..01cfb9dad3a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/resources/cache/hashes.json @@ -0,0 +1,106 @@ +{ + "webgpu/shader/execution/binary/af_addition.bin": "345a28b7", + "webgpu/shader/execution/binary/af_logical.bin": "27321b9c", + "webgpu/shader/execution/binary/af_division.bin": "c87f1318", + "webgpu/shader/execution/binary/af_matrix_addition.bin": "69cc5319", + "webgpu/shader/execution/binary/af_matrix_subtraction.bin": "c1d89b26", + "webgpu/shader/execution/binary/af_multiplication.bin": "6c3abeab", + "webgpu/shader/execution/binary/af_remainder.bin": "8bd97400", + "webgpu/shader/execution/binary/af_subtraction.bin": "5a7112fa", + "webgpu/shader/execution/binary/f16_addition.bin": "479f0e78", + "webgpu/shader/execution/binary/f16_logical.bin": "431e624e", + "webgpu/shader/execution/binary/f16_division.bin": "9e3455fc", + "webgpu/shader/execution/binary/f16_matrix_addition.bin": "c0cf381b", + "webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "51edc282", + "webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "a612226e", + "webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "64491a9", + "webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "541863d2", + "webgpu/shader/execution/binary/f16_multiplication.bin": "1448ea2d", + "webgpu/shader/execution/binary/f16_remainder.bin": "cde237da", + "webgpu/shader/execution/binary/f16_subtraction.bin": "2739d887", + "webgpu/shader/execution/binary/f32_addition.bin": "f532fa83", + "webgpu/shader/execution/binary/f32_logical.bin": "ff723c9d", + "webgpu/shader/execution/binary/f32_division.bin": "1f9f3be2", + "webgpu/shader/execution/binary/f32_matrix_addition.bin": "68f190d7", + "webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "a126aaf1", + "webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "5fa08811", + "webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "d9270923", + "webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "9e508eda", + "webgpu/shader/execution/binary/f32_multiplication.bin": "acb51036", + "webgpu/shader/execution/binary/f32_remainder.bin": "26abf1b", + "webgpu/shader/execution/binary/f32_subtraction.bin": "1a895776", + "webgpu/shader/execution/binary/i32_arithmetic.bin": "ae1c1d58", + "webgpu/shader/execution/binary/i32_comparison.bin": "46155b50", + "webgpu/shader/execution/binary/u32_arithmetic.bin": "bab5328e", + "webgpu/shader/execution/binary/u32_comparison.bin": "34d818e3", + "webgpu/shader/execution/abs.bin": "ea7276ee", + "webgpu/shader/execution/acos.bin": "6532fe83", + "webgpu/shader/execution/acosh.bin": "3ccf99c0", + "webgpu/shader/execution/asin.bin": "e4ca1497", + "webgpu/shader/execution/asinh.bin": "a825fb5e", + "webgpu/shader/execution/atan.bin": "83d7b73a", + "webgpu/shader/execution/atan2.bin": "5dc6e553", + "webgpu/shader/execution/atanh.bin": "ff869593", + "webgpu/shader/execution/bitcast.bin": "692546d7", + "webgpu/shader/execution/ceil.bin": "dc82c7f0", + "webgpu/shader/execution/clamp.bin": "8a6b7591", + "webgpu/shader/execution/cos.bin": "37d594c9", + "webgpu/shader/execution/cosh.bin": "e7ef1519", + "webgpu/shader/execution/cross.bin": "ca40471f", + "webgpu/shader/execution/degrees.bin": "2194e1ab", + "webgpu/shader/execution/determinant.bin": "a1ef2144", + "webgpu/shader/execution/distance.bin": "77edf94", + "webgpu/shader/execution/dot.bin": "e8243a47", + "webgpu/shader/execution/exp.bin": "ed53aa3b", + "webgpu/shader/execution/exp2.bin": "f09ed3ed", + "webgpu/shader/execution/faceForward.bin": "ba3a56fb", + "webgpu/shader/execution/floor.bin": "ae0f3a23", + "webgpu/shader/execution/fma.bin": "1f259679", + "webgpu/shader/execution/fract.bin": "6d019f67", + "webgpu/shader/execution/frexp.bin": "cf521b43", + "webgpu/shader/execution/inverseSqrt.bin": "10006497", + "webgpu/shader/execution/ldexp.bin": "a34df4c9", + "webgpu/shader/execution/length.bin": "d8c6cccf", + "webgpu/shader/execution/log.bin": "fb232771", + "webgpu/shader/execution/log2.bin": "5e0540a0", + "webgpu/shader/execution/max.bin": "3dcb4df7", + "webgpu/shader/execution/min.bin": "c1eee2dc", + "webgpu/shader/execution/mix.bin": "ec107b2a", + "webgpu/shader/execution/modf.bin": "3657eaa7", + "webgpu/shader/execution/normalize.bin": "6c6c95cd", + "webgpu/shader/execution/pack2x16float.bin": "9c1bbb0", + "webgpu/shader/execution/pow.bin": "b016609a", + "webgpu/shader/execution/quantizeToF16.bin": "f35538e5", + "webgpu/shader/execution/radians.bin": "63180198", + "webgpu/shader/execution/reflect.bin": "fbd9afd8", + "webgpu/shader/execution/refract.bin": "bd496e20", + "webgpu/shader/execution/round.bin": "2a940af1", + "webgpu/shader/execution/saturate.bin": "31c4b685", + "webgpu/shader/execution/sign.bin": "f5de501b", + "webgpu/shader/execution/sin.bin": "18ff92f7", + "webgpu/shader/execution/sinh.bin": "b6b0fa4f", + "webgpu/shader/execution/smoothstep.bin": "ec4560e1", + "webgpu/shader/execution/sqrt.bin": "746a3e0c", + "webgpu/shader/execution/step.bin": "73253e0c", + "webgpu/shader/execution/tan.bin": "33b15959", + "webgpu/shader/execution/tanh.bin": "39e57783", + "webgpu/shader/execution/transpose.bin": "864aa27a", + "webgpu/shader/execution/trunc.bin": "5a0d2a2", + "webgpu/shader/execution/unpack2x16float.bin": "e882c632", + "webgpu/shader/execution/unpack2x16snorm.bin": "1b639761", + "webgpu/shader/execution/unpack2x16unorm.bin": "c491aba5", + "webgpu/shader/execution/unpack4x8snorm.bin": "f656b21e", + "webgpu/shader/execution/unpack4x8unorm.bin": "9fe4db5a", + "webgpu/shader/execution/unary/af_arithmetic.bin": "833e6033", + "webgpu/shader/execution/unary/af_assignment.bin": "c533f757", + "webgpu/shader/execution/unary/bool_conversion.bin": "2b501a16", + "webgpu/shader/execution/unary/f16_arithmetic.bin": "4ac2bee0", + "webgpu/shader/execution/unary/f16_conversion.bin": "ea17ab50", + "webgpu/shader/execution/unary/f32_arithmetic.bin": "8f702442", + "webgpu/shader/execution/unary/f32_conversion.bin": "23ae43b3", + "webgpu/shader/execution/unary/i32_arithmetic.bin": "8704047", + "webgpu/shader/execution/unary/i32_complement.bin": "7dec3502", + "webgpu/shader/execution/unary/i32_conversion.bin": "45acb16d", + "webgpu/shader/execution/unary/u32_complement.bin": "e000b062", + "webgpu/shader/execution/unary/u32_conversion.bin": "f2ffbc61" +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/abs.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/abs.bin new file mode 100644 index 0000000000000000000000000000000000000000..16111ac66a32c2290a9d7f22be4b0e7d3ef23aab GIT binary patch literal 14696 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/acos.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/acos.bin new file mode 100644 index 0000000000000000000000000000000000000000..3765fcd2bef86bea9a6acd30f366dd0317d055b7 GIT binary patch literal 22200 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 O*!tk_v-d;G6Xjob(*Oei literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/asinh.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/asinh.bin new file mode 100644 index 0000000000000000000000000000000000000000..eda7179e75974c25204038952373bbf36152b4cc GIT binary patch literal 7144 zcma)93rVJb#k3mk=!d1q4b6;>X6dC+B6{#C;Ii>!R0^GYWxPhO-y%gU`Cl^v{H8$IF- zE6=fQwz2YlL+>ffB_Z3R$Lja)B`f_b#kMVMqfXMIIO~MyI0vU*cdV52*9>G%eH_Y1Oo}TQn`yF^6S0QDQ^RvQ{GL?uoWP2e6+EXvd!~%%JT940 zN*$FDFZ;WaeD)XfoaQ3+w>-yZ^auNSPFCT?LY~v-5&k95i7qHB;5jwJhked-hUah0 z=Q$>~o4a_<<(zrBJSWVxHk;=ZWqI!4If9Ux$#dYD&vnMMZ{RwiyNz5YF)@+rY|zZ- zI=g#AxlVPJKi6sBpy4{VL*2O!?2}vvw$=aR2)z6CVo&Bd@S3>}{Ow!^-b1bf_k!!d zJ>@#^+2A_x8RI(eS>-zLnddriySNT~2Swh!fbX&^&w*#cV4efd7B`*)&!}NM2cC7W z^Bj0)j^H`)>>bH-;2G}8b6_tR&2wN+8Ow8EZ}Q9viws7i57EQRxstKnKoc(mvQ8(73oYcH815p~|G zsMPCWQ3uZL@zfa`W7BJ4Q3uZa3Djx7(xX2Mi#pI3mQbf5U(z?hq7HP8BAE8gJV&%}kR>74zd$tz)v^{%-UD}>)@0Gt6 z_dn#>ft&Ko?{|4-xhl^Lzsa-COY$uFf;{U#C(q2k$}<=2&Gx@-?`iZTA>gMUu-l5> z*qhaoaItMGVb!PT+zM;;N&9z548_h2bK=P@*o8$Kc4c6RCx)NExdiOUz)G7_nvr#5 zHwN}~Qw;WEF|ColmQ9WKun&s^*o9%v=Xk|2yk<@Vox9&Kr~#Qr9c5W{F}27_j#9Sq zds_{%z-r23YEmnaH6NjDN|kgN*@AM)@{WuuMb>qQvg-0t-yk!VP`2jqz$j!7zN5@o zmf?*oy@;|Mhcd?@bHiQ>@0t3LL|9=Vozs^}<8e-lJr?Fv4y?X_&b5_n^TjzG_Ewm4 zWF7f*F4JKy=`&^4m#fT7pC~h7r!tdvD6@PgY>X3Dm8E>mP$#T?yYgJ36LvdOdCug7 zshlv<3E}=lINT%B^JGjV(AN@C@|=7oOitKsCoEB=e9d+zEL5#LSLK9_5tZlioiND> z6I_(9X?jhW^$k{LNkf%c$1r84!=45APjI+L^&{wY}HF8OKv5WIcHUuh}($vVKkQBxDOFQr6>peloJ= z$&~G%X!J)GIEAtXzx4sgN~TiQ6<`iT<}sbJ_-UJ_Bg+Y*%p>SV5V8U6MDU(9&h)}Q zB&N-xbI(Ikum_3V*nwbfc~~y?A2A`E&Y5R_IvanVO-GskoRB%lLiLpWsIy@g5~~fA zc}9$jz&Y=El&SP?c>WjnE}-leeHURa3n{CJtc%2Jnqw*3W%$B?tUr!2-?{#CktHvt z?7-YI!aCok%r(kA3g-;(P_{10OqgXUWxY{%3G-Wy?A1B>K#Dwbe@~umH_Ed|*hlQ= sytS!v?;7?HyBC`#_pI1I>|U@*?v;Ni&%Dg?Ebn7^CT$@ZGzmfY5C3K7fB*mh literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atan.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atan.bin new file mode 100644 index 0000000000000000000000000000000000000000..d15ee8b6b7f20b5e312b205668c7d67fb7f32b12 GIT binary patch literal 16648 zcmeI3e@vA39mgMd4vQ#480I3LTu>rX5CqBXjvUVgZ?#YhYjil44(m#~l3CVytFm=9 zMI2~URIYP06fh`31)Sn6{=!4!L@E9tW7P`t$EG9=3$1A+RkrT-q3-&5fA8UZy6oTQ zk4w|MUY~oOd!Fx)&-cSegCt4e^!cf@SW1^(k$x_{NuO7w;;;YvOX)3Q8|mYvPY`{i zU`e|1$6MVY|NZ}33Zc?)lXX zpZ-hBxiJ3HxR$fvS0}&Ja<-4fjcGZbyS9FzyvFYCe}Cx_=2wSu%!5wfszaWSltUhz@6lbRE_8-IGIb5Mn!3;_ zvsIo%r!2Sf%8NJQ!=-y^@#+uUhqBGW!ws)*1Z7({7=DI!T6sFeg zDU7JwgU;#t;0AO~w+AQ9DqJPR0I#+KSBswdf2- z+jpZg9BdOrw~%YmZ&x|=`vr%dp~|7>C^+;kR1Uol!J&7ma_GGZ4vh_! zL*qkmXpE^G8fSt-V^!tQcoiHP^D0LQ6&-qqehy8X$Z}!s&>WQUebM}rX&%Zrzi2Lp zphNRGgywSyIj=+N2{h7PSOVYI%4p+jp_I6AaGh0{6}jt;GLk?7Dm z7fI_~Bs#QaMxjINWfZNOQRvXxI};sRcW2W2I};sR!;R?B`fa3j+=veC1u^K*J`h9u zK@2*yr_4cz_LDiZugpP*_9inrv@e-ye=?&(d)!=fXn&ha``lb~Xs?V%hxW;M+ArhL zp*=SN9olabXx~jhhxYD7bZFmBr2RV)9m)Zc(V_i6neu>SbSRfdMThc;RLUn((V?6q z4IRoy(kL%ULx*yk40I^3$)Nlu10BkdEa*^vWT8CCf)3?cHgqV@vQfTeLx*xUJ35rF z*(qfXLFa9LudST zS`O6;%CsD+IlQgqQ0?L!Er<5OcPDeE(pKlIBkA=cuS7L5y?#Vv!dExc>qk$X#YD|? zvbv#OKjP=3*N^o2k#F75>qk5<^!kx_-q!0!JT~5FK z+~=cW54pdGSe|DI{PvCa@HdET#@~>==*fn-4{ir$iGM}*g2w@Ioi~x?c(Q;wZyX zx!*=EJ&yPCxbrjavysQS$A;o=9=po@HS*@87`OiDnxp(&qK_bpJ~H(Pv!+AH_8ofv z5VMpvWa(`QZOl#|Kz8=PhX?lCS<=Gn<9)~m_g&k^thfnTNmEf1vj>gH#u`T& znQf>?R#9J8&n%4lW$2kj)EVlS)z)HMeQgc*$jI^BA4748yJNXGM(%K9T&KH@dtzjT z`(Y@~xy#DEFmhit#`RZU;2s#ca2v9sZOgaueGYFyHnQao_q@oiDr99QYj&U}DxddhsSdhT{ z_PD1p39l!{1wDni{Fn*$)cbzS2CN`Ryj}sYi+*e^Fl(?Fw*y$KA8Q3RTNdMbfK~gk zd%(PY%nM91h~J6KH3iulQ_8s4L>>-Bb|-X%dphL8X~>pOE1Je*zAqfvh46m37lr#b zXl_~~o!q-2cSK=aTU00aY{>E4uR(FKGZVR2L#{PqT#d1wdo<)Q?$4k&Lrg>r-{%Gs z#+8{WOw1m{A{&Vvi)B_EhpZ^BB#zm~^N?MeH#m=3&U|D`=I704c6tG_4;P$Wz$_&R zSwd2J60@d-$lhPLZy~ejMaZTuieAKQb2_p$>Fd*(jdQOBJ+rGBH@VM3F8waXeP(&g z{T1?E?yaD>={6(xRmdys824UgBjl|;3bHtRvYqe6nvLwT{RXf$Co&}~H;dz9mm+J( zIsmLD2iZW@ZD59F$i}lm6#mY#JY>;|8Q948k;C~Vi;@k@`9oxx z%5%Uve}pVc$pM!5V`L8H1z;bnLYA$(2yDhr0<(?9$d)L15ciP#9q7G_?DZ0ib1L}| zH^}`B6eqI0(!g`DK@lk;Q1{saBo`1Rl8 zgXsO~=f)?s3`y3{jT5!ui7}y{8+~I!KR5cugnn-HjS2nS=o=H_`49e$0<9r_%mH7Yw literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atan2.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atan2.bin new file mode 100644 index 0000000000000000000000000000000000000000..2966b4ea155cc9f5621ee0c26802df131374bbe3 GIT binary patch literal 49512 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atanh.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/atanh.bin new file mode 100644 index 0000000000000000000000000000000000000000..d919b4bcb782602eb2184803c4a1c3b30408dbff GIT binary patch literal 16624 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 Pu>HFHzt06>NTU1~1tLoX literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_addition.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_addition.bin new file mode 100644 index 0000000000000000000000000000000000000000..ebd757c1b6b194e93c9beb5b0057cbc5bf43a888 GIT binary patch literal 237960 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 C!l^d^ literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_logical.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_logical.bin new file mode 100644 index 0000000000000000000000000000000000000000..e386de36b7e828c02101d4889ff1f5fd443d9fef GIT binary patch literal 24744 zcmeHOQEnSY4BZxOfTl(3L--!6n*{j?l8+!ooAx`pnRO%k1`ZX@(~?6E#UVFE&{%g5~sQhKWjsKGWVtdAU+WvI6ul|$dC+KVY$M8?u_xfk~Z;t!wzd6q3zu_Dg~{BHfz`hgea|AC2j(+|8Ne_H=6e_Qw6^aC%dAM@MT237y)-nIJC z@Bd|T|7rGR$-n;tX;MGT+E~`VMEP63^!#hoo(;FpKfsIHW4?AEuOE0({#GwEeIfq9 zEAprJ|13WXzu8Sc@S^%LUptVGKk(-GPix1Y&VR-^P1+m&bo_Jt+x}&HRsRB?A9uGe z>R0}gq-*aVw+GgZ>#TjR|MoDKe}=!PKhDqf;{Fqq^O)BUyr_Q6@A%XDfj8nmXTpc& z&*h)xm3ubOa47fXL#@lyz5t%^%eBXR$xfe3+`6SLXr& zd&8gB4?T1GxAkl5xlY=5`t$K?{8B&Nx>nbW|C9EnFE8p>eR&}MhF|(0uxFwR5b%F{Uj$xs|6o4nJ+Arv1H34I>m!a}<}qLYfmh^D$A6Z; z>E2C0@S^%Lzm09k#~*l;{F+|(g;V(tpdx=d{(BE|U%t-SZ|{G=o3l6kMg8hr zA`w5e|4Gu-&z~#n#Ho_YU+Vp_kveHk|V<@tDmkvo4RqFTx$~s{wyH zFMt>2XVIoFukMRekw2{;dgl21zA_(w=2v;`#vk)}#Pz?nH+^|A{;Dqz=r{Z_{sH?w zeu_U(*Gykt)UW#Tfd7WSs9*8B`ng_w)pG$?|A0TOA9!N_yZX^blau0+-~Yf9{DeEM z|Clex>Bs#32cF<}^*7#Q$6w6<>EGA){OR~Z&!m1Wzt9%~Nbu9Gar`k~kNNlmNASDx zZ}|eVHkR{W_JxEw)<57+#~*l6{jFZ?rXP5M-_?)#+JSuhfhYLg_%rWUJr{8G5BSsZ z2i}~1)0Y?PpX$p4`VD_kzv2(Xf9qd({nY*s_`kb-QNQv(px-?gNa&CE<-Fd8zo&k(5?R})-SUDYiD2F-)etE`0pJ4fW7I@i~3c6POgpf zpZzxc#r0GC0sW>wFX~tQc|gD6FX~tPu70i;&*uZ({z=FGiT>P;KjwG*>G%V0u6`}Y zjz6ux;T#1&-MY5_4S!ny6Z~%eYu$L2fBy%*Wldm7mKE3~Q{H8yb@h8Zu^><}nT;u&YTNwVL{y0C^i|^-r;5S^kd|FfM&(>qpkO2v_510*_Z86eSf$Q^E0P= zK0s6A`hgeKkNG^}n%57!IsX3hm8x$9Ijdj!AE~c*P|l;WkMI}mO@CgjkF))`;g|I> zv3`m_uzsdLFY1r?=NxatU(~PoUH$Fz^J?a~KTqdB>sRLkZu~KyM_lvq2i{!#`}kGs zU)jD`|7ZD4e=g%6h+n^csz0ZYjO#DQ%kUTV$N9NlxaR{?`hgeCKg>tw^O(tsIFJ}Y|?|e%iocsb%)7-Oujk@#`tzcG)t?9aH~hu*Q~ZJWnf|<}U-jn!{f57& zU-7&8xn8*6A8_qkzFqPkc+vdBe8#~wpZ~xU{I374pE!b<$9(+HKG$|JC_` wo4>4g>woZCj^KiwMFKb~*;a~c1H|MC8Oz+coK=jVFy{hSYc2L3;8ivR!s literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_matrix_addition.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_matrix_addition.bin new file mode 100644 index 0000000000000000000000000000000000000000..d387abcd7f208df8c11ad5470307a737ffe8b81d GIT binary patch literal 914552 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
1Q6%QXNEmzp8EI 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 CZ;a;v literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_matrix_subtraction.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_matrix_subtraction.bin new file mode 100644 index 0000000000000000000000000000000000000000..4a1449182109965ae9b9e4ed2a19bb5bb24d5001 GIT binary patch literal 921752 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 Cf|RWQ literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_subtraction.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/af_subtraction.bin new file mode 100644 index 0000000000000000000000000000000000000000..6f0be2978587de4c6c5659248a4e180b8a5bdbf6 GIT binary patch literal 237960 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

kbPh+Gkr~0AV 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 b1Ww4cxGeiVyzBWSa6($~Jw30N`uP6=7)Zs! literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_addition.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_addition.bin new file mode 100644 index 0000000000000000000000000000000000000000..30f099139dd4703bf48014c94b65d115679f83ad GIT binary patch literal 169680 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νw*qHpUV7<#{8ruH0 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 UciiF~6Mjnko{D$8UCiSD2V6^INB{r; literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_division.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_division.bin new file mode 100644 index 0000000000000000000000000000000000000000..c05b627fa121b60fa8315e191c90c0d4e9bf27f6 GIT binary patch literal 120856 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

0fNKdKS_cIBO_-edROs783+X`Dti!n=*ru~Cii zPV(er;46yVHI5{eQBxv40)=-E~dK-^u)%kbf*SA&+Fb zHe@#D)P}ruSQ|3OKW2XTnwwpS;b*q3`s|k=;Ge;s`>pst%O>z+>YL)N?KRJGPe-?C zng7nPMa5CvI^;i9u*ev<}WX zMw62L{S)H!$5Qv-Wh{sK4#p~G^NsS~Nq$lL`#&m-RSYNcWwj5&ZmaajO=ix zMQ6fr?Br9c?~G#=)5(*dI0MQvp`RMYyai*^)knL7v5N7O^WQk1n(?INKL|#SpgWHC zJ86u=i1_Mknmujx_l7aN?jMVB7@c>@N{DJKZ$XaTbUS38lx8+X`y5{J@YArxyVk=< zy((r;qW7{}|3NTvOg|Q5Rz(g}dro%eDH&r~{-pegtxNs)F_zU%M&&Dn_se*|l5yfn ziv{m;%|FS!G%VbBRw}M(S@|cx`S&+3A4FE?2U&&ONci8pzVi=)vE#fPa>*QjV1D>2 zJafqDoOpPfR zcxW2t?7lJ7gVZ@qD386B0W)Wgoh`iX)aTq#b1AOxU~b{1X_$E)3>Mmqsy_FH?DDwd z?#oP-M3K$Y2(r9deYWt^sJ?@FyUpVGX2??$F{?Z>*#l#^A8oD~RYi47Mm6W@dX?MP z>QghS?_h4>t!bG1Hh)?lXS69BOH@5ccvsq|%7cpI9IQ$ zxl^9om7`LFbIwK1zvS=EA?J5oUt@0L!D*Q9oW2ur{yc-94|5f5D97I$M+M5z;xHaJ z*SWPtj_Yg8!|0v}Cr-m$Oc%iX<&`hvtPte_HCrGr7qEtXi43A#uu8nV_N4}eZ4u45 zzQ#P`R7lTjrtmMD}SyypY<(PKE^12HY;P{ z#p< zG;1emd71v&YD~?0bX-g0L&KP{M~*OM&D7XJ)~2|d{ab2A^&QM@e7X8Q_Ip&gv*aujzhWkK+iBH#fd2Qq+W4c-@)9*my&IO|aoc`V8opt*AlH3sb3 zMe&QczJs}qFDGHP{P&HIetU%at9@#a1JW19Cl4wx34z9n9NX_;MO% zb*(Y8F}LkiR+eo{?l@}$)!NIcFA>#uFt_pLB+Qx-Q-;U*hp-sRCQ!~K>$SBc>eEc} zV8`_x%x!!*33J9gn|yYu`I#~Erq0w!nffXRrd>Nm^)=>JzMO=aoY&;~8s-Tj|CMZE zb21YKI&+xh;bNY!fzBTm)z_F?`En9weIJ!lr_kP0DwBz>43?{PEpwRU)QswD%&mMm z33JGQ=g;P-ZPAk|$Gxc@vNBR;wOZXmIcMF&sJ_PB%9qnH(^9Cro?LkR+&Hp&F4m@^98a?_V@IGun@VJDlq1J?MwYO+rm$y z`WkcA;!jTF8_u(9vOhU|%BjrjgYyG}pI!vzOBhTI@Gbh(jOuI5uvpD}Icb~&{tHIA zsH)wFY}zCro%$rIr!ltj=SAQDQHEo`r#@Wh|Q*c(^ zOx|b8k4X<^e@7pc94I@!&OqP#I%&O!eo_Z>b&X>jISsSo6qaua(T26-FTB3`%(k`8hbj*y?VI?07EUjKm)X~y3t*R&=XcIS zrfnPq`nrYk0{+&)+{TfUFgyH9@v?i~?qk=XCzZT=@AcrnpxmVI@Vns?-ND?(k&`g< z*^r-^L*7pPoM5HUGY>Aqk4)KC6P2}esL%EGoG@t0=3jF#w{heo%mc+`^2vETgUNbW z#f%luUOK&GX3OM)`Lscwf5lHNtAeJ3xs4+yVJ?`%Qq^A}+hv6nR%fAnY}YZYOPcfx z^)FC17RkZf#*vdSGuL|_a0Gg+dXhQ5$Lby;H|dip`y51LZso{Hn3kqR5QGRf8C+@)} zef=*`z61PPV{YZhNtjPeodEwDsQP-8=VgX3OfBHkh4Tye7L=RxPn(-~CU|{}dQ_ijwkAr+y0jP5S&RRyw9^G&SZ{j+}(K zki4OV)Vb;H?*TvMnF}-6QJdL2gF9~O!qiZ1(&u0C)83^XzO|7x=2niJgjwfk78#84 zl?$%`<12e#0ba`g?@#{rC&)fDy#;=LmFF3{>Nm?v*;l*FXZoacU3>bZ*g`KAW$WP*A6BT(zp^?*f0i@OZ5%mioO9*z z$@Yv5eLa~};blcsEjQ`siv5kr9cnZk%xxSw3A6Q>D9=d7x_|GN;BKr6$ZCNZE4L}% z3jdb+*2AJcHTn+bHjbQxIa9TVs`@$^7=fL`tVSf2jBNFyCjIjn?78zVAc{j{Zso{H zm0dd0f7G8Pt( zMBjJ%-s-CF*1NaPSEo*$qcI0LaxKi-@1ir+0iUGb1@ccC%zF~BX4}sq4=QiHH6(jw zr`v(Ii7BZu2RU*r%oV>2u*~%QJa{=Hi;IkNzH-`IL*#gVT-dt4h@#O8i3~fz0xogDubh1pPJk|%mP03EIjFS4h5Ax%B zn3W%!#UrcY^mU_W+vqFFD|l+}8!_wZ1Ijz=?Zl6g4(1R)u7$Z>@%y1AbHT3pFTfT= zdHJ4`uyYP7->&!-8C$4>x&IzfvcC&Iu7%lI^Hgi0qsT6SzTGhbJ)tu^3@Y!esrtEQ zfy>8_i)%6OTu!S(^VAk-2+FiqY?YO|E!(#u3pnNG&aHU12bJevZIN|9%BG~#&mn$X z3v+vb4NYgNc!5-8h@Ut$lcmZwdK<@@#_=Xox&2zd72)x%uP zCBl3o<%}ZW2h2t?wFJ)L$xqT<0*5GPDbbjN{J7S$p<|&_W}NfO$iM(SxaTr>80Gan z8RS9b87W;~HRUztAV02!nQ>YxY$pHC>2IHg*4w)P-nL-p7)Bmc{;~6qfj5xTKqZRVG$L%_*?ZizgoJpYPUudQ4|<`yGs%t3x!3-g8p8<49*#a08$ zeBQoK&jYW>IOi*;{)#ok^W#D%;&UXmeu$8NDt?@TV^}M4{!bylmp0@&I18UwTA#H4 z0zDCE-BSLt`CVqOU-H8o3|h<9d$LqsfB!*_To1FhuM#sYtJ=Ow%u-TYXz2?;%dKON z?Ui>hhd6RA%pJ8hPMNFd9qmUbGS|}SWk{bwE&Izmm_r=77G`bFO!>{qbJDj@VpLOh z%ly6(Fi>snr0g&6U@qQ&A4jf*nfx)8Tw0n-l0VK1)7M;*XVMc7V%68m{9EB5)HA+21`G8#G*(`Agze=;+J7#eU%pDE!IlB1r{wUpWFgpPk(s_bBH6?!c41g)#hfh*yBl7yPqi2qNS~H zl>Oy3=AaF^7G~ycGjzPOJd*e&;JW%FUp6Qfw%nmBAF$ZnPwJ>Y8MW$wX zoMe{bRdNc-%BqET(98m9?b7V8UtVJla^zZ=H}BsJ?zUNSx=?O(Zw71AXDHt+JNtNK z87rUpXRzw~%WKR*j$8}#BU6un?Q~Rbd&-Y=9|7`?%5YD4-ag^;xTQ=fU|L+ z0sNHhQLZ*FHgJ_Cw}_Rvxv~ZCsh0iaHRd2ku7z3WD-;=gSZ6g98Rw2leoE#Lrfl;a zu8t$yo2n(ACl@+~pFKOw&%~2~^gZRsbui{l?mOptsosMw5ijg&DrN3Um)+{iXO_)M zqsWQg*G^5?E3d!*AV;o;S?wRS_$&KIo5Ua`6WKA8$o?SM&){86xv6#!^~*b$Lmasl z=B(noNl(qJ;)_W?&ZfRck>}o;gZ0*5-oYH=$h9yhyGEd|sw?3mvZ8LE4ZYGXE9zW7 zPn7I0?_dsbLIM+ZA z>ob%adm4M7TX>W*TK1QBFo!sDEzHSYvm&ZjJB#(w1XeA*I!f6-!{^Oa{%t~8j^*+i zbC4s~!hB`l73`raG&vu<6t_JnFmszp?qS> zWRG0tvAYb+Rz7nAV~)SP#vJ6xwJ7&aiN!njm zVj`tyQ`mwM#z$gw18;fVuR(rXU@bnwn6*zVG1D)aM_wf!%G{SuZ`f_(O-QKn;xmXjnH&L|q{U2oU54$9Pvk9JUe|ZOU zh#wbNi_b7-WxY)HjDSt1-4uG)9_8wYvUBS1f_8pu)#P85$~%~gG1kYA3#`Rw5ObLw z;@c-{WMm|3MQK8lS!OBR)bdNpoMm~-JD3YRo;b!yajp0aVos(KFq`B;0=<>&PoTrB z+)dEi&KX{1d0y4Bx4gz246knGrgFCYbN_fz;7tqqg)+XN$_m2WU?5joKvOUVx&T0pD z!IH^=1kZnRF)`0SM-q|!IgK&I zk9*@@;b&(3%ieQ-oaawga(2KcL*op^v#5o$h?~F_T1MGq3w06$S*g0w8lrxlR$sAOk z)=}C*t&G(c2XmnlJRG?mW^zW&C@H5hw{RG!;+vlGvQLhDlkC;V8gmbq#}~PGEk=*z zM-Ci;z8zb+5nPP&k&8#5dwIN3o&MT55p8}(_ zE4*s$)~@DGkAraxD(|fR@*Tvgu*MwX$n`KkJ^eJ0JiYofm=5L57j6X?(`P8(Djpew z%JZ*ShVpMAQijGH;>h(dzrO!<@W-*WG4PDFIm5g zLe`i=9JwCm!!w70liseB53d~teje!=YtKl@LFFed-jBCn;=m5P9hC2fUxvmU;>h(d zUzxcA%vaW~0O!=qR8Qs^US;M)TXI18?BY5wuUoH;Le`i=9JwCm$%B&z5oH4bLU1%P zxUc$+vN`7|H@fiy z7JJ!fS=0O4xIc(HjqRSY6nn~2mZ_BIUODb-=x!C@q7x5&X9vLn~(=eG3+Ya5%C?6PUoYjc3_=AiQQ z*DUYTaWDrsvhLqP9^B8B^|`zy>*RWEoN`N6(Fc{+dtM5;(>C{S1&^a_k8*XZSQ2f?0p(eS zHGEzoAQ)L=4sqn({V42%`+3vMCUBokYn#A>C}$Ve!5sA&%Io_x+|i)&moH@at8D*e zl%c$iy?z>Vh$Gj-{MdoVzz{3e!Thm{kAaI-EQ$G`^4~fCZOm@d0}H5a!M+^}4&MxM zO$pPgLt+s%C^H+Or<=t3_ZSg5zi}S zlaEM$_aQ%vTK$?gR1|j`@14=wb0l1okZU~~>Fxz+(`p2x1@W@6&xVR`G_brx)Sp)| zlZ@s{sCXKwbEL$|GL0u!}Y_iciWi+k5~d7innGegV^%I0q!%mIE} z53}AU)R5d+cE^v}IdqHkvn{Fi73uPN=g=*DPVoLZm;?N{9%i54rt!(F`e81M$L65& z^!BvAo!t|t;l$*!yS@;zA=i7JWj(yQ5}wLxxo4$4Sl+I;%WAxlbw7vralL+a?3vom zDb`MF&s3JrLFH-B+`Rvj;B9?7r^ejVzaD;E53}ZuWQvw$D)ve4XiF+?s>_q1l8^Rf zjk$-*lV7@b&3Q(W8@#$Ye|F|s@SbPao(0RHym;|(a5#O2^5X{d<+=VSUp#1Xc31B`ky^MQoteSo{veVCjydm{4 zzc~9MFu%C|A~1^#=Ba+8Y|eSgZCd*{-hz+Yw-RzRKkhx-cO%=F`tiSWk}v(e;K)6e zt@|=)LoRZ@D~txOA1CuuPP{#V><^S}W=h6}pf{V26Tw&#^m^2BCA{Sw%pn_cJ@pGLuABE#?z#%{bIRB%@u6Nk5>6X`pY|*101;?X2v!8 z_UV6%y-JjAL?f}sa_79Y(9&`%N4tMs*>YK?T;9PP;K=nbb6+}lm49>cTk!w3JIvKi z^#$z7AJ>Z%)eeBTOs4p8oP0bBH6?!_2kuQ|C@%O@y*t zMVHleu8oiBm3CQg=gPUW((WyBHZ<3Zw zYZvvF*O+^}!NZa3VJ3ehyQEC!SY@E(l2ryu*5fa)G52s4EW+w(iOE?@52n)#U|Wx@ zJ_5G&$n+z9Sfb`1 zSf2o!;2bLLLWpYB|{6U_08Ghgh<*?I=d z*=z=!jrB%P<{4gX%rO648Q0ghY~vqY|HrdQs<9N@_HFzXn-l#eeThoyc(G7C9bhEz@=eU%x9^cl(~ z2a$t0z>(`=X5{uJS2)E(f%3w+6dK!p*S(nS;A?vpV5POs2A>4E>M!qL4shgpm>DUP zku@pX7@QJ)^Tw$$Fv^W0ZA=Q;PKQ`Y;;^-gu}Lf2;~hsryc101;? zX6|!r$_jr|b_P+lJAh<=5cdIbClU7w=`)o5-BT4joX!WuBgj;yIC#ot+aCmUat1b zYs?{zTn{rXn6z(F=BkWi(-e!Ru~(LCpknc)HPc^SWA5=Y4@a(t`CC)p!n?1%S14Q7 zNsdWIDKa@J*`?;2{_+}g4_Co@EVqz-7j-yM{-K!MlDU|yR8&STTZ@a)!)@%JwK%zc>3m+=VUaEw3?$IC4GAt23*>yt=ju%p!x0{z3K!!21WSKLB2l&AI+> zl)dFN#t=X5^|{IYt$qgb;~u;Hsr@W^HE4_>eq0M<-kInis()jpft6>@kao4=4aqo3`H#;05xgWa71N6{b6IAUn6u1u=`ZhK4)Ei8m}wL4NCqJ06QVrgjdz77 zeD4VCMYIjla!A=<-oYH;$MrB@+jk9q6SN6azQzdc5^-vlKCz5Gg_!L{yqi{c7UQ+! zE9))qU=Hx(dYBs$XR{$uHE9#3tnI5?X>p}(*0IoTHGU$r+$#HRzr2Gvz>n);X51r2 zIik$(TE{e^+>q!;I%blMiX`!n{N)|Y0e)N$b0Yi9JF@ef`_d^V+-9OB3IFmrDZcll7ZyMort&LQsm(R+rtTZrZD&LJtuGUf6bbBG_;!%SaIdS=q= z(t2r%CntS14~b7^)o+vKt%s+#yv7{j$MrCC{rpi`EvL*?alMvKnd{_w?VWO{yv7{j z$MrCOWBME5Y7Mbo(pE{C)=q87q)c0=wP%Xuld`|O#@yp(9)4U8Gx_4N)nlvRl)@b? zvlQ+~CaQTSxu)f#!bCOKESJ}qd$WzGt%i&CUFOSPNwKjoKZpt=gqxn~7 zzY4xf`ABvIXO6Uv^sZ92N4d(swI#jfHRcdM?%j{#or5udt@Sma`daoiAQU;lTqC=R z->$Z<;)=-TT>m%9-f|jah#&Xxi@!+v27gce{fd?Xe#ov(xyOPB^JtAR#E)xXEb_N; zN07?>_Fo>zA260}`ONd5{Fk4=^Pkr%W!ud4#ue&b-ZuwtfE(AutM|LvNCWM&K+6A4 z&M}LZJK^+xIAScvCJ1ohdKh*7E6S1y-69;258Y-<@8`V2I!AXLtj*+7clt8Gf9v6N z_JsBQ3wnJy;JVEr)b9U<z+1Oh%{eVH|M18becN5e~)xf31g+yW`qw zWnJVR#sSxDG_kf?sW-C57~-q-FmmrVcYCXS;6023uG@X&+#lZGQ?4xLJoqasqt7A%Pj3GW+4`apu5j*0H$73;$54cYMNymHA_)BVxA^uqpBiE)Y ztIfHrRuidRzpj?y>UMecTH_3H&U!d$1Ej4`*#mohIpDgrC(_c`w=HUnJx=D~nDsDf z9!BnF8Jg|K0oNT)N4955YK%P`1sk*6Ol;eQUvCUw%kMaJ$Dz^uj>~sk#?i<{4}u4I zuIZALlV1U=`xnWf&_bWEsjV=`HVI4sg-l{giMIz^vjUH<>MjQHEblUIju# zx9Z`i%poNB*lkw3QlG1$Y?*V5N;+?H-DE)%mJQSv!Az(0F{n?OnKzB1el$th0h7g^V#4Tk^SWz%mLn74>Mzf zB(LYDS9P3_H%$KVd|P62l#7h<3wgA8wB>n*SH0yO%y-!Qm9JJ~s@24-e9@D;NANzT z^g>rTBS)ksQ)X&ZIVNp+mh_f)Fb8;TJs@Q1kjH|Aru2c4w*O)`Rw;pEt`ENdVD?EoB|9^=Y z$rzT^n3s%d*{Q_HESJ}qLp-=1W*td}5rk647gBMD7*i-^^dS|eD7kOsK0N;{=`F7@ zhj?*4%+=k!i{~Fd4=X75RjZxiW}i3Ct230j3*28`V-E4;dYEsKy|XFz-Kf14cDGJN z<8Uues(0>)>@Tk|r-iSA&rVy5Z)D=%M!!kQ*6&UH2%F+bX?-Y_-=y`etoTiq%WKRb z4qdOG^_pX2Ujyr6T$8eE!LsseSGTzetk$o&_H9e5_3nOojTzbqY&w6y9OZ|{H|q0^ zvXy8w|IZKn1T56r43)*vu`%|nh=m2xUtVMG^`(!C7M#y~s-FS8PPiF$gyosv7ZysM z#_?HmHu5@-$(rMN%R870Tm>qNP5QaGrtli<12F4$$?(~_W|!`hH~SF4a^bz}?# zVwAjh*(A$I#Uj1Z+VS5$VF>mCZA;V zafe$t$bM}*&sA6b@*)mVr<Fd7|Vmob8a;+OpmfD>0l1=x>}gE{!J$q z;G0cNePsCvtk6d$j^NDmZ!VdqMdU%{`B%JZnLs(GM~K(e!kkrdS#zvoMr-D;raX7w z9JutL@>wPKwHZa7eh%@vT9^}IYgN5Q3r0h73N|F;Amu^jX=$gf?AN9-2YFpB%*^+~ zY%MzX3$wWV!u=cY3{%$mUaIBC&W<74gURuNi2fp*+BD`Mud9W*t^ASFT_$>VTRe>z zg_|+APo7xD`&f;?t;_STSR3PS8(Cux^151>t1%84-H?$H83&QFiE)UCR>;PH)xw;qeHq-xk;x7Y?#|%e zjmfiHm>sb9)vZ2Xlzm6*wPGVleAf9^&B~{LLJzSNS~&cv13$zyCjb@}Tm1=1$Bg z>0mCte;==_g*jEch%y;b@^=0faNd`IBT?RRchlJG29!^Gya;7PHk``A+{Z=9{w`d! ze=Vk;nS<72ugEbb=l3TV-;!k|4=6u!UHe87;&rt!(*nR8wALCRbAOwaR;&S(ttCNh z1=aGj7}zpBJA>2DAzoJxvzj|I2W={A$H}Q27K4080$r@-bU=Cj6|auSw`ODqbBNc~ z!rZK`9ZL?{ro4kW#OrEdPMAlT>&1HQn9uO81bQSn zlOw`dPI*vyZ_Z|oImqj3VeW{wO(g>u<&Nlao_Ua?1oMN*Q!%JK|7xCPdQ3oL4)VHM zm{XOPMCU7ECh2@KL4@X!lR4%rln0ehRc`5ieiMy3$m?ohuC5)YXXl}*c{H(~3;99B z+r~_mQO0#7X(?ZgJZ=6~V-E7VT9_HTuex?TcIrm+4(?9CJd<-d?t=25@{InMs?}#B zYs^7jR|_-Oi<=TxMXw#F=jOqXIo45T1eQVNx#HZE$SijC8LQG7bCB27!mQVhx!09z z$I1EJVBV8pXRGaJkq4ExE6%cSn!9C9Ne6R?*A+VQi}}Cq=}VmR^SYF4Rn%N+-D>3Z z#8^sqUWQJgoZK~H{HX?%PsNAIYEsH5>0l1=x_X%PdKvM^DqBBy)o4EYO7aSNn;s?u z%G=ceUL|J84(1TAtA)9(R^chrYP4YeUKTL#ro4R5N!XMIm2az6d&O5S7%J5y#K=aub*69Z)0v!&LvmG zL#~#$5t0LY4THR{7Uqo-QEvJCGW;zmGtwNR(WSc{!W@wD*wjr^MVV@O{?+o{WpFCW zrZ%Uai~ZT2eKm!CNutJQ9n*vHK$sn`$a!}NIGMk%HD%;M<#m2N8&L%DLmbQ@URUTF ze2%2n2MF>2UdJ^}`j+eUO|DeZGC*0b=69LBA;}MOus$tYkDyX{2Xlzm)x)f9S;R~$ zmbPUPvy{}ESGDdq>%G!G69n2wKR||7T`?`qCRkn`yjS-n^ZSpNy9MR7Qd`O7<)i?PAS>uO;pM@mo6V`S5OiJWI% z*s10}Jd>Vy5Ee))^KV6OmdiVs3tYav9>q0$UjH5Js1=ZOasiB}LyJn!u7Ytx`k5tZ zb)m&(Ue;}`J;z(#!5rdswJ>LDZGti_Z&@YA6fJdItVM1M7?hPyZhaQ@bu`>VGTV7)h^151>wV$~Yw?Huv>Oq!d_Js8OJaqlM%v>mI2GTFDF$Z~FEzCOq z7-hz+v{}ehwlU`0;ZbKBYn=IKnAiBrYs^7jR|_-qL3C6$2g)`pgv$QV5qaKP)xykpyJYM-_U?ql+a-sm%&Uyy%ZR;{v+g?Z`^#(0L3>>-%$bUT#`tMj zB?g*}q9!G`Fp}ZQ7QClgwtppM`sE$WAzoLE-TX|8Il7 zg|ZWI42nnZWq~REZDb%=f5eVAF~?h z90uj`8gr1>)xxaf#4@g|jS#zf1ekf1QD2~zf!cQA)|U4gau3}Q}|y^C@~JhW3~@1oog|84qg(?gpwy}SM8 z9n2wKS70qZgP4=a5%3&ZCur-SJmU2)LP`49@hW|jMD~|=Fo$?ufwlMyVot@khn_r? zxz@&`_2*H3J6vm{f1Q)RP?6Qj3fM8c^oFQUxZfw#Paxxgc%7)COSOSoupt@sRL zPNouY(d0sc{FThHXytAK?d+V{pCG=vEzhg`Tgu+@8gr1>6>07ir0QAHGRu_9Ys^7jS70qZgP79;DL7JkF$G6T_KiR_R_tQy?@cSN>V0kcDtEng zPQ7GSSnM4YvV%Fm>*`^4)&$jBpvmPw zSf$os*>*4&W3PwT)x%7lqgfE;ROc>Nt6BrgbDu(KRZC;;;j$xex{YJ7;iA23QRDNG z14qD-##U|wf1rHi;t}vA9&eN*`@#KvxGaLI$cHQICBMA`fSD` zkq4D$#-eq*s=JQ2*vJm%0I%!4pLZdqvi-?Fki72abt!iZ(1M}&7tl|eJDaR;e+u9J zLFKt;f&Qia{R>dydX<->3B&>O$!lMkHM&pgFSVmhF__W2)`eImy5-@zQ< zbsB3S560Y9zV4K{>%Xmh-6>c1{_FA!_8v|20LshvpN!u(p`MBBW7d1wwC$_EHw}I3 z*uF-k6Fub8tV?L!)_a3)TcFTkmV}+}!kjX;69kAeH^49n1ku7rIjB<;4 z2AN?{t;DsYy!JgV$!r&6S zXsvN$X?h79X=!x{9I3f~D{L&3?NP376^o56IiNhtu!hfbp9N~um_xj-cRvdI;C|kO z%pk~Rwzdg&7|Pj&bub)#hVuIU40klB{N)Q7{wmvl8D%K1W6y=g9O8BLFh6$SF|e9S z4xIe4i;sabv`aZ|uy0~O`R|$?&}_`NAo0Wae)< zE=x9Xdxn|92b5=yaAq8*Y_f@K%pqP^53|k8C>a=;&#{`5(Pni#xOfnLK0H>+GtVQl zI|hS?y56&X7oz|5ev%vfyw1jBboqi7R zx_X$k&vrxN-dpeM3!9-Mc=Z-}<7`Rg#jVS0FYa6ToZ$U+Fb8;DJ)ud9dI zu^nlfl313k?MPXf29>AnX!HJ0f^YO~N*Z%d*LiqdJMQ z4b;|Hy%~RNWT&44IWp>DK7Q~xaNfImFIu5|{L*pY=kea@dx628k&=VT&#ivl;1qsB z`Rmhj4(1TAtA}}fb{zSO$JfW#M|0-6rfiRL^-;-!ZA%U)&urJsh0T68vhL?#zKPAq z5O8<($It7S4`t%*2}GBrY%`&7ZzS1O~NJfC9Y*#bYIwsdN8AGz8);%dR z!lYjJ?3Z^i2Y6jQ%ws!m0;^$kBgQ_WtbM(>hQ$>t$2Uy*`S{B_m;=179%kjZ4 z71|Y(4p?70wSaZxj`F$c$kl#%2Xlbe)x%7mZF*c&-hOsFR;x4a6tim$88l;4eC;xI zhH_Ip>-^;%%mH3k4>SFX=uJf5B+B$Ss`?|*H>T>pXkTIedEg7m|ltVme-g=ysjQ*+J$H}`u5)MV5V;^NGiKB?G@Ihq%2Fc z8d)2Zx4g#O)6X7WR}V8e4;c|>-%zr!m4sd3x>%dI;oz=gE zJh46j)9uF1q`$nz9O8Ao?;whA+&Ob6IRBk%cY^bOapsFXIa|+w zIh)OZv$5Xj$vnfWjoAjS+LGS#4(5=(uHe>pr$q)j`Sf$7reu+0jycNo&(9>sTqYUl ztgLd(W!(%6Kda=JE0=dL2Y6lYxrxIpQN@}PkqmD(qUur3bp8?ImnxyijQy_pB*=4;?pZ(?`)u&Zk*ogl4(0%_tB08pjTixmvWd&Rd0C*bAZ>?!@Q*8cX2QOlB^m}$lm`6_>EvqM|zU7J<8Q=>N4)g zmh_f)Fb8;DJ`u3pC0J1P-Z#poyn{Kw>*`_Vev_uG z05-)#o3i!97C&wJW7DIXKHK^XWq)~%ImGMgVW!6sJtrw!U!%3d&@#rSXf&_-Bhlli z>c3PjuQ7*sT|LapvYNImYi(R9qpa80xOQe&;<(}_D{*Eu4R4}an`4=Nd5t;5>*`^q zrHFPU%Cvqvwj;4D8M{!))+ClCT8;eWHRc|t@bJ2Nn7=jkExh}Bb(^wfO5{akK_Zh! zkr8Q*BADa0Pc+p&U4&yE553PL&Px96EtKdaEL;33LRWKqR zZ5f`ClK%1w5QN;_|53ATFzrkH> zIu?hwyn{Kw>uO?_oNG42n&fM3f({1H}BGZo8%ay1u8CSK*tTH-J7U=HxQdYEZ{>vTJK2N`FZ@`yLi19r6S9l<@) z4nr#qWq)}GbAZ>?!+dSuwSC6N&&0x_d~M|#o^ASi&C=IPd3hDSVY9eL%GN_n%9P7H zm;=179_Ge@2DEeIVguGK+TSQ^Th>-uw`lcJwy);Ct+-!XQrXJ-x!~0Eq+OFYjOu@Va`K6WOQMk)3PY*G4(vZZ);*ttm3gH@Wvs zUG5xt45 z_mOxU(ff$LM%EKa`6ID>)qkm9USkgNx_X$ozV@iBrcvgq*|@B}+4VJ%xsImKP!5&X zm_xj-9_DXMe*+w&A(kTAg(%aqq^(AjX?L==Be613_LtX~dpyX)>*`@9&pEbwY!zHc zIFDsS!g+i&ByPvN)U zOTL1i+2qUe`7cop|3;Fef3G);=08bN{5SvPbMynFH^@2rySdiCx6x!21#iF)BvXxZ z)b+}`u*p^Xx#UIs|6FvvdH$39CsI4`unnhPa=~U|K9N^8x?Upo*J-%g_md^b=ZgGb z?@678OPS1E5A(BToxPrQ?%i-5$-TfF3^nWY-@D-=W)~+uN7Ceu+I89|z`<#_f{B~K z&$M=(zVF@aJ2!svMyKO5x=sTu@ZHP4MB~eD_9Eglx?bFO{-ivi{(hy8`CXzL;h$8a zUfZM9XJ2&I>&XrLgjG8JT{U(3ahi1pV<#|cC-{6X>P*d?*NpdO-j2`rqD~o;&3Mf5 z_nw+{dfz8x%0W&UlP|}7<`2}Y)7ziE@wDtC;~h^q?%8iCe*kFY$#vcpz{p?wDHfd_s$E z`>I>FXPk|zJC|&H>8TXa1Q=D{+=+wRGv3D4JvKQ8-wEzwOC%Rhde4H&wRFR1v2R|F zyK!|h#sF8M79@6l;^ewS-JbC`uI{DXOYom&Y&aXy713awKJkphadjsWAuW}aorE#R zCKBZbe#5A5ERL(2d1YzCPQ~BqB}Bz=aC^q%xVo7Ue5^Z$c|Nm@Cp!}5a}V6c_pvlC z$JISIH8(Yy-y)v>>B$s6=Z%S5oIb(GTp6F^>Ru3k9Ill;y!-LS;adlstx`saCT2I30b50&f^tWf+j;nj4S&@S-OwC@? z>+)dXm@krN8m{Rbw+n4;Kb=1Cjn^D!g}V-{GdKCQU^#oMW5#Rn9U$JGy3ez3ypF3I zqcduK-DHo$JO+7oE90JTypF2d=u$)+eXRw=e8<0f?^oS1)i+*8)ot^KFteHD+D%I1 zhvbYY@#CoPFmH;Ff_=MBCU_6i`xn&S;{oG!6z=ri1!OT!W!E-i?3CX_?|2@v2P?Jn4Eo0FsJe|-!M7;AVWTS|QlYNfJ6=cC&D?pNxBm*9Ar;?O6VFH2 zZFn>GG&=k_?z?w|Bgb!kx+P8arNdPtoKpPM>(k>!`XPoO}?R zK}M$h;WH1z!f!ODgWES=N7YR}a_!7D)JhH9!Agj(+dE!I)tzG39Nu|}@trWDC88GU zy1nCdRNdmoV#aH;7ytU>wHdcQk9oY!@jY<7Hq1SCypE|eU);8cG1Y2W;i-nX>OQc~ zZc{#?OUztD>t-Aigo}9Z$LAp2w~c*WaC;FT>Zo zd#a0h!OId)Ep=jb4dB;NxZmCNE}~mxlA)j}YltR`f%BaB#_OoM8xjq7@yw!m$7M{d zj2|WjQ_0p5*C!v{{ZY&d{^O~?L7#MFpTLcXqvYWBjn`4Q|8&}uT{v1~~?IP6VBg;8PSQ9zf>2Ke-9oHw4ua$NYYaQ7!di`-bs&3jv_(YFNymE8K z!R@n)MAe-z&xMTGTjgjnxj1$E#_hPe89APjk{Mlo&xkWdd3knJ-DX5GBeuz5#`uXQ zHll;uH*QDO%^gXMFf(#CH(F=!f-^>Wd3IFY-1p2K8)V#Gxc;~uRX6=P>FaV?{Au0TO5hI0eqFL-$Gw*c<7$h?0e9>f4-WlZddKZJ z+$PdA7_r39amH4!J=?thG6rxRDmZ4x^6Z#8ku5&KTx0Can0eaXn1}6R9ud%VA9#6o zRNb6QbG}PUfU*2Jb^FHasJc^$)Ar4i--KnMee$R|miemrp338ORNbZr@H{g^_Q}78 zMyT|Osi$lgiK@FPQN^A=vxNR$I`bTkTac68=@TE%j;gyY5u0RY2TQrh8tTTE9l*1r z>Tc0ni&?48J&t$W!`ZhjC$3*t&82;a{R6n za~FN$8?U44eva|r#5etU@%}ew9Na!Tc2wP&M2`9dqm--O^OsJh3d$KVG;KfjF^K8*bvZzEr|uG>3aN7c=kY^~K6 z{8id#zl+(;<4!K=0e0-Dx@C77M%E1%f8k;T$2RY%eNRWQ#{Zs-*D-bGv?1!XstPBg z9mutdMAh9Ce_UE77Z?*08F`)W&Np61)oo_{@WeiKtY-uG?ks z?7@{jG0#AGypF1yW7AU-d6P#o$~t{w>M8kq$g^S34}3oIj>P3oW%u_(VqY+4oVtDd zItsU$ffgRkm&LEyWbJe6_Knw3b&~^=?-l$1OMK5~7m2F7!(Go3P5LIA=eN`+zVSM$ zZZpaiSpAiPfD~V9vf31b##GuypF2-)%~wxCwMBkHeR-I1723K z4T0Nd$BwEylO0qI@ps-Kd(qsO#{>9vRNdTT-xQzS?~9EqJ8)UW!5J`KN7dan`^qt1 zf7V3!zCOP;?@{qC{dJPQC*yTYop~ZQi>0$m&{kYkYGMb3^B(%f>!`XL%+@8VRITL} zc&Zt}ow|MFbyVF3UUJ3i*t?HjM7>fR!CC(KiMI)_H6^oei0j;fnH z^$E*U7r|3awnnE<%=1+qucPYD_Fe{0rEh)K+biPKZR#oc>B)0foFDY;!`Xj+5d25)os`vzCYo6t!}X^ zMAz-LheXxAjHpW(J(x>Vj>}UguRmT#)&0(acd&>bCF2Hzwb@eLP`_<{ID(02nXBsAH zc%>R&4LNS}j@bsBv4_-Ie~hb_YxVT15{q-XCv~}*Z`_Wn8{SU9%nXpsL|yU&kTs;T z9XqOS^6czn28#$8@mD9m>W+WDaXYH+d{+Vv&svjnIW(HFpy}ts>n{>jH+i;=md*TZ zCEI5)-*Wu>qUzSMs~9`UFcSy2d4|j5c2wPVY^5&a-lfvmD$lWbhV8Q~>(o(olRuGX z+v9ZNyf@x)JF0H-?2fQWGRv31yq!Mr@$9I&^C^>4FJ*M-i}Tn?m&_zHx^C~d9aT4Z z_5yR?t)cbePl7q=X2e)tBj;cFTx#!YLsfpV&-EndI z?ATFtb3R6WldL8N_iQrj;P(0VMb%yK>~uX{zdp~F=h6E8n{{#Tm~F;uGiuvUjnlX8 z7*%I(yi<#HnN<8Pj0dYzw`aVLtXpM9BNwjtFL-!%T-|2Xe>A`8>=;H<`T_j?AuK>3n?Zv#u`i@a(v{U$XhiOnxfb0L*CR ze3zc_I>adppgZSaE0c4S9Z0^$5(H|$ibs|>vi3}@j9;VKe6$O{{(e2e%jO1&p3VJ z8?WQ)er^Bjm>-O--3Tr4k0l~S2XWCH+@A3|uI>kHjwo1zZTvE`<5$=1pbw^O%gypF4TasLx|$8EMBu>_dN5Ki5m@j9+<=7(OeJXJDAmwBqsjvdwC98;f? zY=doyb$J^y5<0k9kL!;eRreOjlk>df%voA}4kK&xVACD)BbyS~x%;uK36=UjWE`1uuMyuhDd!F$+ z4)_0Rb3ojK?{Y4i!+32Xy*T~t8L#8&9-sXz;)0B?--g~u#YTk1F&DST9uimgU(UXW zy8mMRS=7Dh@}|oX9NXwi^RrowcMlx1W%qmjclqDZKH~I+Z{K4~z1FWe6VJ)R%ZIT> zI5jcl`dxVJB1C!}%(7|+tm0uicX|$t`0(Um*LL9N#mjOf6bORxYk!*8ACgpLO+(XWWj%ox%!&=j2j? z5rpUuPak&1R^PZCSGSq*7dC)jTKh$euwyefx#OQ_+>WdJsKl-p%V+-k7yn1}$&)ir zI(5sKQQoH>)!$|$9nC)}d3%2I(r=(=es%i4bNWOumg0!S;ePettLT$7OEIdlzh5}` zf-|;y{Y9d1XRQpl8Qbda^}8?%{@L{Z;^Ov<+i|#!wH?(# zfoI%~tGj)ueaP_aPiLQs;n_y7iEd-OmEf3-T8%yXdgHa!cfC6EbY}|N#kQ4g7&&Mc zxiWRd9h*GkbzI$yMZw*w+__rb$Lq6;#MPZi?C{T={|vlIX&2ePce^|8dB*Fwy4M-0 z{6dN+f_Cf}yGUH!^jH0eL=JC?T_nnm9rJwT%p{+!X5cuqW5?J<;&9UsfF1xXv5Q36 zv7>Nvt;()a$qHd*{mx?-iNnnp#)sD)z)0N|OF)zzI|}!QB_=gz|Fi_e*hS)S&$Z?- z?)?XeCY_00V%|E>MPtY?lc9FQcw;kGcsEBmTp4m3D z&Cy|AJ9bomrw3Dv*Grd|FkW{qcAy_)>>_cvH-2g3m*VXrau0>xxhuKny%?{f>dX^F zQgLIem}o1GF7S-kadkKLG+?{19$ON9A&K!5G5v78zOb2_esKN=7_Z6TAKm$=yAQ=P zUdQ3yBEHA;H)HJEB*sr93U_O|1upr7LOXT9sM7a&Y_jbyVGt zORQNCN{oB$mG2tHQ?|bwJ4KmaN7Zd+{FuW?lvvsTHt+v!cdlgkZkb<4)&0)wJLnVg z)QjsE(d$uuB2jfO9a_S8&6uXtz}R@@*e-hSwy6(eo%j<))t$gA1l;{cjUN@GiaDdd zORpU}s_w-vEy{Q;vn7WM`}R9ZI|Y|VoWS>DypF0fPi1f4M#J~ufuir-Yri%auZJ^V z+_Q*rT3BznPLKT~4rg2TDtw~*iEag_XIze}Q|*5!fhh<D?X_7KuxMXsF=c4{XU|;|90O_Q0fDpT_XlT5#AF)a7QyUS8-6|a0;Kyzm|P1E7$28Pvhz|EFJN9ezf?ba-H(`r8uZ@b#D0b zhA*4iMw4H`0~v}%tz%HXQnEkz#@x7geiAEs7&BGA0UMXw=FA($Of^qs(I+V)fnd%m zIr)Y$Qzd?TK8%@)Q25CQoOkE{zcEvNzRH$Ec1#@7VJy<*cA1;d{&BrNK_n;4N`|pW z)fn3v#v-kZC&O5z)iL(x8;jIC4w`xIb>najV|-S>%VCVqYM%^ad{+Bp7~`|rCqLg9 zpWboM*y_wrC>G~1W~ND@Rhl;pV`f(SBpJrctUM>fn3>h*o5D^#xgD2*kG> z#-j9$gTq*q)#n=vqEoQD4`Wd(Tfs0EW%W7v`NpF3j)P`R)UJz;42l~$jPd9j2Zu2p zE8M3!jPY3M6XoN8-Q_0p{4mC2_H&K#=p6@*??$m#WnfIaWEeZK@_Y|tCsy@*V;DQJ z@|+A~Csv=6pKt6$?>K0D&TL#bBYFKGEg!TQUWc&=@vI|L_%Ie><((%Vv~hKZu?YE` z3}X>io)hvx?sogHAB)g84#vf{8pimm>a<~uziOYnGmP<9dFO{Q{;JQ(&o{=OZybz^ z8D%nQ4`b)Kex}3NdDZ887(1`pC&Soz)js+8#?JGNgK@E#hB4`?-{mkSUA0e!G3ly( zGK@)A?USExOgi5<7#G_p*_j|_&@jfE-k&y%@m77l87E>G<4r#&!x(SX=j7)bEU8#!jn#m&4d;)jk=PzJOtR{CIgCkG?UTkZCRt^j zWEhjI`kegNk4g4nd@udjH@|~0W&G{8ley$m`0e+Sui$4k(J^q0)3A!?^#O^2lOQu_ z>Bqz*=v}i{wcpJL@CW}5elSZg)%lNz)vnu;vHEk#i}-YYqT9+P?vC+m`APm0v@5aT zZR_Q>ig*gqPg}&5#Al6mu758QV=jN77jMnR zoU7eN;Q8w5kHpn4rj4F1u$sWDTRh{u9g*2;`FS?^KT5jA{2t$)iJ6BOm2ahQ;V3e8 zrT;+7&e$K&F>&{oZch=)Z!Dfar=iZcDb|_)7AM(_TQ=#I@JBt8o`> z;L8~@oMaQ(1oj8MwrJYBJHdUMNUu(N0lgE~9&Jsi^>y5(#OzPrOx}e4zDwGJ?6lX@ zJ5?PN*B)cMjGY-X*|F|fxCi&dSV{LK=-Y)i(l?y;0{SSfy?NPh#rSU7WQJI8>6`Po zzoeHJ-DxkNo8sDIZi437CbF?mPEI5z5M}qirg?TCJMC#5Wn`tN;@UIW+;LCmQe>7% z_9Q0Gws=-26A7Lj<7=(kbM=+cUwxew*WOEeI%s3!`~-F+**I};zl3)qok-E1$ylu0 z(|W6r3;h+>p2?0upAs<^8|B#(S_NeRpIxng{=xvFK zoNwH}5jlq5mDvGfC8wv;)B4_my06e1c4p$$eTF0Sb!-2(Iyx_=og8fci};4#>OkjF zrVgTRGP1s}UhF^Iwo;xmw(Nx&yeRtX%-W2Q4lE9tzb_Wo*n z2j5@&WE=O_-qFTAbxys6F*6lzk)BDb$7-GRa$-oyu@e^hHb0rlvjS1wC`Kdw(IF7uDXQ6OWqb6XUVDrxf?} z@R^6r_ecJMJbcdmg>+t2d*qz$**%IfM=*Lx_oKBRE){mf z;xoRzrF)mqUia-T^g(xf7h?AR@*7AF@mo-CeO#5>;D*}(lV(-FtZvi=Fq z@uJ$harfBn(fp%lKMEc2(cK?~Ja+a*$Q_ycbTDZrP&Q*1 zbnWh^aK1c_1@&E2dw1-)19R9r&fS4IGxKUUx(&>S8ZzJ8eC}5F{zCdLs=e<{eiz?g z_gok4b@z19_N(V!h0NTrCex9AUeb`hi)v5DkEBeW%EsOX^n#IfdqI5{)!w^%-$lLe zo_`nL+2{6t4svs)iTNJ)@s`^Q>bscspn2}>-ihz)&Z#@6jJ{)znf6M1Mc-FY-}T2- zks|b6o_`_#0^U5%`0C8@V%lZq&br%6eK{ zd&OKJ#~4j{M08$${|I!2k)8Vs>AXG`k-X1JZZeRfCB@Shtj;r>eY9k!lGs^R?~Rn! z+2Zbxc1^7ZMoyV~Wj>3A@|+~3^WyGL#q1=H-6}dS*)@XuGqTg4A)Oc39y0BrKf4Lu zbLzPf$g&6hcAOZgiRhp7 zjd|Gr7$?-oy8nXuF0MVXwb5oodt7>A9`><$+Q;5_&}}cI@1ok{97xZ5+9!`Yw!V{Aqk=qKhcgW@Kciy`oN!FG#W#z7SBEI&JjZTE~-810A_+M>^COrpN$KBHjmeLQSIF}HI8xEaONI=KKtFX zqdCuycW-mY%g`Jzs=em^CUn5_-K8#`8j+W}&q3a@XDgl~BkSiSsPCfM%l2nzFT0RI z|9pJkCXAJvRz8kv%Ek zLGvuFE+OAM^Kx!7c{%f6IIsaacf-YBxTxVXW!xF?t^un>l+vHU5RPO ziHA%717@7Foc+zz^|c7uHRIaj+K9}1Qqgl}o`t7W)`v{nx*vmf&8YThdo%VZv>|IF z|8DsR+Ux9m88)kzPj%cmS4ihYwO81`3{R(Q<~{IT*)f9lDs!OXx%26~sP>9+xo?|# zN^DlNQ$18#Uk=XkqS~v@Njm3Vf({xmCkg4isP?SA=6r^6i}GcWGi3N4&5i6lFCm>5 z)gI>soFmvdmzpC~>|&vHyr}j}#&7iAg$~B8&i>ARGp{rKIkxX6oWE&h%o)Q9e--`N zTgQuPPq?~pbi5CSw-@r>htQv8?jF>6QSCLR8^|f&SZ!e3ymkL(+}|fJY{tEA-v3F+ zw{&lIbZipRc~R}Xy8l(wo35s4FP%=&_BXnZK&N;1zl`%Qqo4Kj60~bZwU?>*zm#`e zoPb_fntC2w#>l$8pw5eGuPOQHn`_NAFbQe<^2H48Wd|qj%z;|n7T)Q_Jx_qA+gufrC;kxDx1H~=c*gNr zv1vxNw=Q}{uO0ASseiJv{weC@r|Y*;TnoJic|*lpcH}(`-0P9<5qG={>AR@*5@j=L zO3ZtGuL*nvbbkhIno;f9_1E+auFQ(9fGzH#zME^<7MR&~S^F7SYz?!Nr5drg?SxD%!cadevzssP6)C zr+YR{^QEBnpV_V%*H+K394%6oH8%QbCuQHlkj{&1PtEbH&#?A|E3Z3+bY4_@4e>wF zb3FPbaQeg>+t2dwPzS>>dG6p-ry8 zM&q;>(s@zs@jlF42ON4T1&>X;^N{;8&OhQGpy;FRDGpOVV?^&V`qtk2pUua~0iQq385xPv=Fo zm&&|uWF>(fpq#8Fm@lLU7N8T1tlJCfyr}l{9B-a$dTXg^Zzjcf-B`WZy}!^LFRHzM zzZHG>@an_n`#YE%#PL#c$+^Ff&Wma!Nnqw=kgZ;@YDx9R1(4U)%s+xWF7Q zu07iPUWUKHXs+#lec9>HfWC`sufN_?to^jrn$Tyvw=`4HzoS&6edd&Z6Kv+uOAdBnB%lGqigbEu27eXM+cA$=Fu z-Y<(y^T@?Nyf~Ww;ejL2Ih4m{#-IhTzh{q{WRKpdi77B4}ME*nwu|e#++gE!OhS==Dcn%G{=i;@3sA}W3D>3 zb|ZA^jnaqzczRJwtohYz944ZZD+o;@X=$xEuX8d1)8Evt0)#Wu7c{-pu0Ml4QLk+sKYJW@#{S&MxxawUi)%04yMXnO5%@Tm zHjK{5pIvV$4M(oJh0cXVt>=f$=6*n$5Uyx}S6 zZqtWPq3vhZo`LM2n}l>;Tzibuf9m2gI1A;mY%CkiugzRT+eX&?8Jy!qJ)esQpFqDo zA-2YAGyf0TXdyH#j`&w?FQoIL?k^e5Ke)aDI(5VB2WQRPYpJz_c9yaw=e|Pvj?YkX zLlKQ`6teSuh30s7nLA3t_m$r~ z*_eba1N%;U?Wz5!8TP3c^2(GyY}a3@7bBZfV{ZAi1BlAb`f(Db6&R>(syy~eQf&I(Vv?y-3pz0tIQ)m zbLrEN8?6S$=|_UNW+Cf1x>E)cASZ>^S;ueEl}` z;WwlWgp)#h%dKVHU%9=IzKgoQWHf(q{V&nhU(UWL`fk&qO^5LOT;6n9-&aWAC3j<2 zxB1yjX`sIA&+ix!&NP7b%~7`%vTH`QW#jK;vWJB0YKNB(!5&2WS2O?Y*$)1?Yzt&b<)7 zju-RY+4U^Fwsp9B7~}PS+Wlj!u^HLv&w$R0yTAV23Y=Ev3s0^*i8+9!# z-|@8w`f5hqAMJjr@`d|X-Tw*q_rm@cz~5iE@Itg*Gw%MlZei?~n74|b+RDWh$e-Q! zS=^tIo&F5yytwxI>pgfr#nS5@=!_$W`mi~C<#}0=G>Abl1XnX6x-d5P&{`U+2 z8~DU8&ioSe!!NDvus%Ow8_pZZfj&&)^&{s=el+CUj2oa`Q6SEv9#P2i8~6 z-pcF>+Pk=Z(P=NF^P>6_I;VZPjkel{+K0^C>r<^yqs>oepK^40NarDXT6aqV$W z&e-Z0#^jCrKLVYjZJHmsu+h~&p*ddE^K$=z35<(+ou2D>eZA}4UucdO)t>f$qipP$ zg)gI#o%RCyF0Mb*gQ*!W;ctMu6rTk8brVKoC9%ANt)SNr?oa1fp-h|RwwZ0?FHvVYi zk8u3b#xITL|JMWm_X9tTT~qYDncteo*>@%P)Y5r%=6I%!>$PKJkTN!D!o36Ht9fne zn$dZ6d^O|RlNcKGy=%!n;zapsrif{+-?`v^yr}jVm#3*>@%;GIk5A#wdUH*uy?|Xa z>U+x*@o#UgYypR$oQSXHyzB)uveRBb=f$zY<_o{&akCc%)SGi$2kz^LvLSr8*}FV+}*jq&>SzSJ)KX7 zvgJ#%_r8{|W>kBPFEyZh8b4}453xNyt9))7*tg)^UuX|{OncCIi$7XKTZ>;>{F0gD z`ME=IjwcvQ1W7aF%pa(w@9NC)V%o8GMaIV#8>3k@bnT`AJ0|DM*SQxppTc*5s9QdG#>r?KlfX<3*L;L8- zT%y`WKu^WBA^Ue^-wxgt?&T@pM?g2lwb6g~jE@5RJSz7Q(noP^h<{pc{L-*`B0g&3 zw^qKFfUPmE9r^>%M?hqZEgNPxV(r8kzXJLvuATlmOmA%lE&av%v(DTgWLu1D=byJe z*DBe=N`00FbWL0voOgUJ`x?F*kt^T7aGU|T3gX(3ao&#k{x(=o?#;;))rR?||7OGA z;P~YYU*VJ}aIci+Kq1}JTLT;B?-}Or!E-bEfg3*1i|yr$fl|b`2|h2h z)eiIb*!~RYwYc|B+rjO;Tx<}@Fn>=^|JgZL)blya-=jH1NGHZUpG&p!_w?%Y#SAIt z79H`3Z+hoK!(2B`zOLZ@>A3zJ=DIPuuh4&ixlV7NM)3J;O|;XJ%ynbu zMLpm8sOPge%ypxl&(J(6?)fA?Yrju(-30YRVHXPJpc&?das3VhcCOy~QMf;cxnb1% z7tDng^?VL}{()DQi!PNV_z2gy-s@`_^JOXOi5 z70Jy~jlUGvpEjrBFprAZ&qDKuxc(gGQPKJ~q#xq?bC^d(^=D8&MD-_qRXg2I&u{he z`zVh}P(KvwvB5kNiP%GEzotCQJ2F5&#Pz4jH8RXQ5}ZFo^=E6U1>Zx)*)8N@-Vw9! zzWC|cm!kT!*^B7`tKBf~NMIelw>B6YKe^A~+R8Qfcv5~prZPB z8RoROu6-%0KO4iG7W(-N>4&KPY{?#@VNMJBy9Mn_QT@riyC#ra~_;ru%EpOq!X*f3v0 z*}fFlpTm3!`h5@0AL9D+{hco%IDf!g^tw3=hPegYxQwCohq(S6<`&TNqkw)eJ)RXhL4Wqvr=$9Fm|H;iXGlN9J)iII+yWu}z!+=E^nQX-GF|G z>`#eRpAKX3b3HYnAL9CR7>i$zXId{5a-kpM`g0hIU-xH7Kg9Lt`#TnYNIxV|agZ6S zJ{!iZ=Xe&-50U-3KS3zp>V_XO9OL5O_E{rUcjiT+_cFa7wkpGs!!Z@-<)CFZx^OTL1i*+j>gO-7u2iZ}G) z%%-T!{P2hf<&=!SRk@6g&v65aZNLvA-kRW-lK5YgXDel89t~ z|A%O^rwa?MSXzVshiH@Q4)EiJC$Id-G3l-2{zJ6cv$Zm7?%loLZT{S!qRrm;qsIsR z-1g^3Rw~Uue~LDH>hy57veB6yS6XdhPk@63*hcri= zkslOiD8v8vcHQ^o7?(ah8;N0iioG}K+v(fLbb4RszCuo3OI`z#ZOJwqUrAn}>|lt{ zxp5e>i449PNWHy`qsR|0KMWapu1#;?tu5rmZHwC+428aZ*m_78zbpM4hatIp#C#VL z4~=;}Dch)M5+N;lGkFt8AUhZ$^l=;p#w2B&9UVVDc`LyaGLJV5t&5x>I*)@PLO;i0 z$R;!77|qUP$Z?(CyKrwICu*nG!kek-hwaIB2SbFuj>E9DdkML&m(DJo#ZlzuTTS#p zaw0i_qwFlE+`O;p_CtjJj>Eth49vUg#GYqAFzS3S0=@2s7=0dxVPfyZUc8m(UPA6y z$`j`&OfJ^t6mJK2NKj5E(g}?rM!&~l7@HbHoSm`mn2B>GKBAOOrdxa$JCYrv`NE0R zd@qnSh8TSxhe5}xr%b=D^kfPQ>5dc_DBldPFO8w6?*sZj4#WJ^Jo6-Vl9dJxkQGpPEV(3U$S*kcIFaM zyrDFA_3CWH3djxm$NsqJ%Ud*ea$1Lfx1P4GC5 z&GYxC_ZM<`Y}WJlkrclv{!q;4<1nPsN-7$Fe1UR*EQEd#eN`S8OY`~O9xOe-kHgTC zTmvnnksQq_TfU&jB$1oQKH$6;F?=EJdEowXr4_A)q)uRT*j^S}jUkFJL}6&}XhRde ze5wO2M7e#kZ8W4rl6q-pXJ;X&$TX`lMDc|v49ru|Jk-*Tp5`0Uvfj56Jwf?ZO+d9va5L*e@p;tNq2<|gJQ&`Mb= z<%iE41`?aW=v)G3XJn@zdi)^37osq54$(N-z%!ud6J)if|AFva3JiwfY79|)AqqoF z@;A56v`qismtuZNIXR!0$N|js%=ZGa#^CY;GtOhgH$QTueIagqko=nY(wQY-u(>w# zR3aCo{U`?Y`9evbdG)1ZMZoCGkJ>Cc@C*<5w{A%-uMaC)DEys`ZjU|3vUgpOL2ToRP~x)D9#oj>&XL4Yqr zVK~0yIP}A@6Mu@?8s+0Bj~o3UqtsE+9+VA_cKSi_gMoY@3PX2i7h`kxR2O6Ok%@nY zF_JQMl+jCt2CL|(82dsL2Iii4_w>7%G3Y!L&9hDDhvx1k#zo56uFUO+7`_mNp|P`p zepo!Sh%sq#auIh;nf(yd58G0%3qatF}^oadofPY{tSG9vL2tGLWX)gr5LLFo?L?c01Hv?L|U@?Fjl0z9yq>+c|n zH^gDk7FOow6KkuTUvD3QHcj5nja3-3gQ4^tdwD|~hDyvZt+UgK1!ynoZzDSxO7+{- zi63A!N3IBeDwXj*3$P}RKu;vSnPVZ3()KJ@M=Wm`aqNy!yde%lC3Zb$bDYQJ6C+?1 zl+#@cuD*=n4RIJGJ~H3@baDauk}{(t^USF9gOQ!@B8E4_Vc={<&0NS5wp!k>75b8L zvTMZchZx=vhk^ajO)xguIAJ1>@Cn&70?jdE=anOlu8OiVL}8#d;<|*^OpGoxFW(O3 z&YqVY3{iH5C=7|@Gf7qwjL2MS^c8Tm9}uo>4|yFc4-TzrQFC4h8VsOg~804@y#onALrNYlSeVj z=KPxSpWc7W#ZY>_ynG=N!vZj9Yb)jS^gL#}w8-{lryol7_xXcbmnfC-K8tyCPZMwa z(wXNlhoam(*TgJ_XOJz%+c?vg zoqmYn3sD$alB1^8Z9!L4X1?7W?lCZFK(kBHN!~-8#FF0R!btD<21U;PK=8 zHbF;FzV!dG_x>?d6o(iQVzs6>Q5<9R^p`mhU_HhrBCi$bX{<>E*%Lk*GDnhSs!27;?q>g} zmNy_55Mbs%FD&Hkch6V#>fGwv#d|3`D+NWN>z%%@)aR>PRrh@N+;h(vN$lsr$Isx^ z4^NLh4K2z>rSexV{3)J+XVSUtGeBizs~>#)3|<&m4~P9vxqqb}xvg0t$2{Bf-G zYYbj|!3#q}@|8DM8qmx4f^u{DN!*<$$D6oQt#jYRSYc$1!OPF!g`qv!p2X9*(gp^R zVX?Pg{4m(VhbOj!&4?V%7Ybvj^I5zaUr4!wzHYBL1|QvN?(alm%#7C`cR*In8CPcJ zZ{TVYV`f&AEet+g4@}95;K3w z##3(fgAZTu#E{RWwbwbHOJ}^<+!qT&;Tg}zK*bmQFo+eRHP&|fnD~8Q7UKlu^-#nkpe9tBGNuPBIFASaW4o2Vpr5j*{D0h}S7?nS=)Q^@M z#`@7ql>5g%V%aD!|AH3=J(uI`jW%=Bd=8A}n1#V>UBU}PZL$XYP+O_NK2YAZd<**F z*5zF|?i#-py+rwz@m-dU^71cuVR(7`WoU_4Vql0TW8k6u=;D6@Z|aPn#J4Bq?ig9W z7isju>v37!qZfumY9+D%DJLrl@UUW%c?L3hXkyQV#^A*lyfD;N{&V_S>Z|otypNKh zCz;rQz5b!Bn;BVS@Zt+z7+O=UDX@~&7W9e?D}DRQAbMhO@^;)Ak;C~yVf=EAkL7%! z7YnJc+lw#w=uRWP84n)m=x>P%PuFWH7vsTw_<|n>Mz%^6SwrH@B1V**sbg+mM_d_> z#88Ye^Wh6#81%|CWv*c-ZzY)9o3&~jMV{O*WkA2{W0>qM0a&4q$a~2=I;Dv$x5Yg|d zeX#O`=w33i?guabf)|ElBEjf;dFc|^0p*0b_?IrDWnJ#YWsyyGevQG4FL+_l^GW7@ z&gPR%+?}S(Cl87z$jBOl7hmwgFh4mDD=@z@4~sx~@ZxQlO%7fhG{=cS^b+MaN9Qdc zhZkS)!mu>41TD0U+Gg^O=(}TNs~>#)3tkv>J|xQR)i!JdIJtu=u`WLWWcR^EaBcP8I~ z{#@4jz4l5J_C>qLr((1Mdg7NA|LCV*`4+UFAu3cF11>}x=sxg@WAMYE{0!DEA-$r{ zsBy%ITNr$JgBOO)eg^s+xPq={{U#F4!r;Rjyf8$=+u+sNtTA1yX2q-Cs78z>_ zS!3|>Gk9T0#LvKIfN~;!hIlPDdgWeFj;CV_gBNe`!k{@*EMo<^RJ0zg1H()-gCpMy z$W}jC`y;?2tl!i95?&Zweuj8GhW=Qx=!zWdXDF*%)QiA=wNMxGA%YOd5gQcihH;` z_<|n>Mt=97y8)|Tlo=!55&u?4B9$qdsB!%a_Tm;w_E-90U_5ksFH((WA3Xi>d^2Ka zJaoPevGsllKMY)nynS&Hb85=z8n(m%v!&IG3AXydgD?1Dptqa8a4mC`qSc}=+{hLN z55C}sf%WY;zs_Vcvrbaqr(?ZDidKK77Fs z!#5_5;!69MeiPSD`RK)OTtv%iKkQ`st;qdT{g$ov;R}8kSSN3A$KZ$ITa(`gJNx#^w}652uH`?#ec83P3wCnX^e)(H%H~^*!G|ySVfef8 zzaKX}e*=2{2K06&|HkUCqop(50fx?62Y8IEG5GKWKMbs~$7g`@;nhc>eQ13Mw$k)} zCJ)UFS+?4TFZf}&G<6wTF0WpKUXBlxll24`l9>d2fvn2NRzFz$z|9x@FzlNiMsE+V z?L%*i3@bjE3??`>1{-v%L!mN&`(f1ENjvfD$bp&9YJFpA;t&97!ockoa`k^K9 zb;o)u^nKm$y!9+rB=jCG%4WBhbuWDU3tkwoml^94I{KS3k5=RxBF8NZKK=zS42&yd z6dC0g7Te$sb%{D-j2Y$nc-^+u9(=*?d1&R4#)yl59IFsqvF5Cjv(2;xGf%4@Jothi z2Kv9BTBhgwDU8$fd^aT8s-YsUioS3!|AN=O;FWUb98b)`Zl`i@E{##5H^9% zG2o&6^y4&Z4z33OYztP{&7<~AGABN`iQ|Rrd zWKEzo_Sf*aP;Q{03szI{FMBVHtTEXB1UFys!?1nkda#n~*SCYAhzyI}PTJ7lZnU9a z(WZe)$YhcEc`gPu$4Id(pm&gRu-j;%46aaVpy z_<|n>T}N|$d;`zMW?M~5ZtS+kz`q~AhX3ekDD=Bo8}h^O-KpnbpPyU(E-W+U=EeU4 zKTC7H35(I3X~KF?Hs5LtK77Fs!>;LDVJCO3-2#SkOX|@u^6#&G631Gj20K+tYOq;G z));*Ff*%If;CylId(f!mL&+iNC2yj9sBy@`;KLXEFx)mXh~6GtzYRSKLguw)YtFjXUO*TlIV3zuhvuMerxW=KD>AsOv1<(1`pogi9yzkTT5n_7U#K~-9NqbG+O@j zz*jNrr)+k6Sr|NcgC_yZBYy7b9E!K(_E& z8E^2zP_)XK{iedj=`H_`J zz%2Rg%WE&gq8r)j2cP&yFAS{B%KoRE;9p<&p7pz7HLsugHQWozchB5otqJ(>hF)Kl z+N}D)I;?ViqYewr=ncwC>r23}G_y3**ZptH{|#e>k*$94;0=BlS_fOe(AsDLgUGPn zpH4o7p7>Pb)3`GtTQ=Lv&(OP1(dW$G7H`e~?V3RtSzosgU&y&-iEc;j+L#%_WnJR( z=w)NUdYNi13?Azeo*0l(6wkh77iI2I%6eU*CYec19#RW~2Vd~Rkf=QEl$pIi>nGc0|QYdeb&8aLl(KW0~_+j84YwoVr`>nYaVfI*OYZTYAF5!nk z$5WYITHv#ct;(~dr2DzzYgm`?!=PiqDKiRu^SXqI5x1U655C}sf&Gw2k>S~p=rYDJ zFvjfK*CqTgnAK>o60TK?oUT~QS_I=5u69qvA}p2#6D|V{cEe&!~3CGm65G}=>7e) z$9uoiHi*Ba(B`yNUDoPl|5M(*u^Tp%EqqfbU(33L-}AtFknN2&^qS~OtOAIv*Cjd^ zJK&GkvM%9=VaG!|9zy1cw|Bgaqmf~;-}}0R#i{O&?seV+!wq_?52MNWI;z3!9n>W4(4$kMnnkrRn7i^bz}dFubce3Eiph`sb#m+$0YYe^lYMFn*>t1l?%(=9l zV{MFkK4&X?*{wZPgRQQ;U4yNTWLHEg z>o%|>U)p6 zm3EBB7P`|aTdcno=Q$5eBnAGnbo%%ce6ClrzoU00yDRH?i0sno<3I4y*~&A0r+Mon zC%8+ehyC~KTgLCjYE~?=OQ*+rf}c+2A!Ft-m6Ob+)5E^|>1?T7CX9`f8K+C9$9jRE z&Q1HFxdYmz)5CuI>Ev~89u+pfD?aN1emWU-&3J4bfxTI$kA3#jsUo)+)0IYXZPw{y zkNtG2mEUv~Sk{PL_cQaGm)KuFo%9?lpK|J7KJ=ACUvXS(Z~k2}NB0_wI5*{NRLxUe z*Q#yT7B<%JTD5(nMH5@+&}siY{8qRo@kJEcoOZ3d{fpbbh^WAyZvQEcMozW$MZbl) z@PCL7Mvp|FiVoptCjIT-r@wtM`bzZW=s)872xawb-@1?8EzYOi_`1L7{=#89zOb)#ALt*RT%e)wS5 zjV?a(_`Ry1{6p;4<2?6=k&*EuxmODFZ8wK8{0wvHA6NC0tNO`ieTn%j5x$GPD3qDW zGU6(b%6wTb=C<^hCl~jwxSz>1H&!ny1y+(WYg<+IlckmsYxbr)d<$_iKJ#k7dy!Q2 zlV#oYgIzz_%Wf8YrS5mLxx0zFy>s((7#}ECb%d)r!c`sNs*W({7gZf$_Cr-inEmj< zt|RPaHw){1Zo3&t?c6l>x~ij_R;i6p)uyVWOD4}~c=GwGj_w^*9bL(2$Q*}N9o?#q zuHGwR>Q23%>*#vf%|gt|7Iw3$CoBF36SZ?zdk40#n^IG>sxMkERPXHTR`o?2qYdQm z;GCRHuAx-*HKiY_`kIVQs;j&*%psg+Qqg%Mob@$* z?51D6thBb|c~j4@sxw*DnXKwe^4+{Nb{V;^sydTZok>0qx(0@>jZxK^{2J z56M+)Jy!J=Bfb|^y+!szRd12~P}N&xKUDP=*$-8{MfL;pN`Fx6E&A9^?)i<%YaV8G z{;IlzRoy}H1yywiIX+Z%2iXsLZl&j3Ro%g=?%)Tn?x2s|?B!!FtzpERBuQ0wPipPO zvNw%B^Q!J%tk#vPx_gX=sp{@^s=9kp8JBf)tGat1q`G@Pb~DXl{CfO)Rew(UqO>29 zs{WkJH>>({oM%<_=hzQb{W=VLeh>I+4ZX|t-sW}+gopLeN_3fh#b zI&2N8$<|nDpo(-=hpno^#+qzNRfi2}i~G7&9kvff9k!2SK9JXN`S(#)!{rat8ZKX! z8ZI-DuH_PKvue5YNiCNce<(5)(2&3SLm#?stNJeae$Nk~j!YE&8~mW6j44s(KH@K` z`el7$+fBB4lXD)Q!MeIqFUIKV)nw~wFY03M_PXR~?nL!qUA(fZ>oGZhe;BnTYrN!* z5AHwr^`K9!zB4%zUy1IF=J+Uf*ZPPrzuXkUACdu~Oz1!$B)xWIk zbJ(jeeXL86R)P3Q^b_d5cNP_0BFURLi>Kbw=dfF0`r_eP{ysS?$C|T$7Z)KcQdn2 zm*mqj)w;Akmn{p^r|WaY^D(L_a2HrS6r1Pv^a;B^9ri3t-;oF72a(TZv40Ww?9C(S z&uCAyr?1O)Q)k7xK8IZk)5p47H_q2^W$~H#4C*uw-H0oT_r%a@+OXZz$UCj|x$In+KGxG(#6Miq+4wB(*-*z^-`*JGKxe*VU!TL? zh3UI8dIi^)`UP1#jx~Asl%h(Hb$t%I7p8B=_>OTiON!r$-;z&L(7Gy7R*IE7owwU<^;GOKj~nEG*$*z^g#RoWU)Rm?2+!bv^Gv%&%e^P zPSi=S#^~Sbnlh{QT4XE$I1Y}?`hG81&SpE{vU5S#$2wk(R~xu8j$04k_plj}W!!rB zjfZW!`l1K6ncfqNgE8Oqsyu<+`yT_|#l4?-#gR>aP zIC{;#8NX@WKbM^gx<1;o7=O2~J1gTd$B}qw)-jHx^E2Dd1?k&dYs=Kv!u849T|ZN| z#$~)NGEdXMzQ@GQ)z8*3BFAqXc?;Ks8dqsctEKZe#D7iw02I_+GLzQ=|iGk@KT%H6qzxdmL`NQ9i=bHj6JkC1J|x;|5T z`gOzX^Z8s@f0AcjS-1jCWJjIhjzKUILu+TDV_%=k&IMgxe18m<*H~znE5p->1z+ShsC~Kh%dBQA8u*q%nUNr&V}em zYjUN`N9H@60pW?m{3Dr9Y(Bz1vh7@uzSg}h*t6yv%{Rcz!Nzfi#NwnZy*M8*f4kss zO#95Q54)_j6~7TfANlgL4?GKtL%#g%>1S;_?y_@1*SGV58vZ(Kl*IE#=5c*8LLL!* zUgVQbI~Szy#XT=#oczw4&%*BT?QZQkhL%{ytz&0ewjFTUxgdR=y(cjW>zughh%D`9 zq}K15)6NCyW1Xzztpwv%U1oL3zGNR{$v0@)EqyLK7o@MYw}$I$E;P-!#Y{{xPVy=@ zjgz~#MaCzI|9Za3u;)|Pzv`UtU>149{(e}1&PWI2q{(k#U7u?{7j%7pv+r5--izm6 zgvDu{dj`kYj9lGk_P3xl#%QMX(LWhke#)@xV_mD;7CwXitS#0s>)ADOE3T|ITEo2L z*7Lh8yW_NTLD%=q;cpJ(`8>afo;-E_6poBKKQ(d+T1_0fb$u>77o?B%s$O4s9oNTM zWbHr={mJ;f+J&0cpAySa@Lz`Y=Nkv!z+cxf4UBT2H8*h&*7dpUT+sF1HF_8B)4#oP z!xcO)ORXhijanv${?+GnW-K*7b8>`#kiVDOx^DN6yMK%^Gn?P}% zcVYU(xC+U5KEW0YkkgnU64MVIdI## zuCeL|W-)^1?OLDH-UaE4$6~~vvHBE`@&3n+W$m?VeNKB9q;GC?4&!sQ94+^CuRp(C z?49vw=IvS^W^|k9bwT>#@pv5UWU+(iWkYti)kp3ymbKTe^*QZbkiLky2qpXBtnjh= z*d6HMyj|;qSL?_44>jt|C)e%5#Y1?kKEK;|m{8P=68dAp_0{B83@sJN2snTUSm@r-oq zBXzu0FD$fi|Jn=B5Il9Tpwe!Tj#!sdHIv$O<3BzUF&n&xgdS*$@ZkNbK5U|_@epb?^=h`&Y5v0 z9c#8Bj!k6z{!6uUAv#j;p^h&|nR&0CmA)pYoeR=e=PHZL1k5TDo=I8Z$=fY`E;|>b zkAA0T&pvy$uY2-r2gmLGF&D$+~E;|>b?})6ga3&Bh9Kkrr{>N5$ynyG}!d<2gRpJYqkZs~K`xuEN#cP5c) zQ5$ls@4o|tAO@^-DyY3G9Ub;dgwrTUj{z&QDlrG6Yw zNDt@jTA$O-1?l6cPdhMs;Rx(NYwQ?C&b(dgbK1EeeKo1^bnEgi%&&N?js6ZSZQic+ zIqh7KzEk6;(4X;2jJ-N1rNUNc{3KfPcCF88=YsSlQoE^ku?D-!+D#8m3{Aj)*=yJO zoOUiqUo;-!YU-=?)xPcz#owJwY(QV$uJt+XT#&xjRBOuEH_7CNPyViTIPIKy@3VIw zanvH?_g|`=3(=9rud&V)*Uh*B67}j&>1%S@xgdQtSqF&_9|Tr1-@tr_7A|kM^ttR@ zkUn0`D{s95eO&GN-95hxzh2&M>2uk+Abp>g^`i*u!g%)H>cXy4Q{HarbJ@8deGQq{ zJaxW_nGR|T&uQm^^d(ZeiTTBK?WVk4 z>vP(XE2{@%6uSi*ZQ1xE=b?}AN&>38Oykz+Fpsfj6)x^LDMzY3G9UF@M6q$^h)@ohx_ZcxdbpcthT<^*QZakiKXl z!u8eGYHN5aR*pj7(aEFe;k;ezbK1Eeea-3Sw6SyVth@tV?@Yb}U2M~OoVIQ^V#CZ2 zkGmyS48MEXI`hY&)$CBydYti>A$rp2Kt>L6^^B225#y?haU!m`lrVjaie==GSiOjm zLlW)0DQ?4M@51!Sy34~04`YVK+1A6u55pdCUYDFnuI|4K(%0Q@qP?2-L-%tY&R+PffqMIVv5MMk3D-=ydQ&>kHHGZ)eem||x zY43vc#Zxi<`i(0!jF$0g46U`v8*#;)*Uc`)SNC5A>6@FJGk0q(f<2g9nS<77I+}+6 zZG1a;lbP>X*XLTN3(^-)$N1}=m5#Z-wHR7ElN}&PWL{_d#9E)z-UaDPpGHeWDk zZpr^>?7Y_Jw0A-J;+c5H*t>W=UN@h9^E!#sN@KMcw}tpE{O)DzjGe`W$vHOdq4?V)1-&o<)np=;}>z)ebusrmrKb`~SS~&#-eH zneYGe@IS-iFv{&C=lX5`o?~7YrZ0^q5DUO413rO|F>V}j2UdSN>|B_>maIbDzBmYm zF7Z*_!O`2nn^~9X7$WQ}eU5oum_An4?x@=99T}17bu)fAOP}G8g?U|=z9gOZTs92- zVuEq`vQ%1Py`|*B`c>^*m_A+&{a?IFTB0K|ju?BSug_)Y!u0h|^}`Mvz4#4WS^sK3 z>;Nk$<#m*_K9`*f(|6nCAV%TVY73eMS8l`TEF)JpuRo#nx$In+zFpJ1UfjW zll$9~$AKWv)vfip=5=BEK05U=^k+wMnSN~bqqxe>bO#7t9e)jWu7C9g+YUJFT$n!Q zgBx8Pg{GnPq4mD*=+r0>JUVq4N3*(RU7us0L6|;1jfu*glguPD7|+J~!BZ};Ub3&x z5swn4Z?G}gF!pUQ8BEOQzUg7i^Yk@2=X8h@HqUB$lzlO#Mv}Lk^O?_u=t%cnaUUt8 zMEXbjF-~$Fo-U2*J8UQJBabf` zJ`+XV*ZunbuVbC3C2$ zGGGNI9!XY zBOP39*w^Qp&jmf7yqavjW3H0(ooH+u#*x|Le8;uVAV^=!tb=40N30Jm5$(>grDts3 zfWM9L!ro68r0;nXU(l_u)iLvEuRIUyQ=hKG4t#$64)YwXwC(whYd>9(zGOPVU%z>E z0Cpf*OQ4mNjCg!|Ik9+y%g%*8FUO~jqd#T#(LKI;99m^Y0&9K@?Z?o=`uTMFFN3bH zztP|5>t0#C0!{r%e*$^x3N*1!(T=r`uW5bG`CO1bK8=l}0Zn{L8~BIuZ0xV`d_J|- zwDdXWb3yvrjkegicG4C*w|(Y%%Y{vzdiEX@GRaU^^tyU;d)!2!_I~2+bQ~D_+!|6xIT%b zeoXesZt72moeR^K^y1erj$qWlI5KuKo_I#LZJb}X=Z_9M7p8C5_^lWZYvPAW;|nC> z;Fj@SXy3Jbi#={R>|B^WuIHpHJS+1Umj@>XCoo@?qiMIEPlufg(^r$LNj+@zwu$HM zh}^~6%1+x3IP6@QKF)W(z49$wnXW;U*D12D4`Wo(&V}i_X=(tYaB6W@Z^GzIOSC4> z(EwVsKKa{)ykBAZnlnwzHvV??IcRFGH!m4nb-P>wI`tIP;v-bpO}6E z2v|$#zLk5e=f!2`!mcltrxDwnp@~l^f*oMz24`+ZKbzd3*7dpOb3xZPaB$$Dna2%m z3~ZRs@6Y_e+|TvrEIlq;C-*SBpC;#xk@4fSb=~gIx<7;EzLx#tCRd!d9_Gn;cK%sJ zh?rF}JpWR;fcwo7>=4oY=dyQU*Y(7{C$Jle84S2fD&6_Wc#h&amc!nK>Epi9FE4!A zSXS{WK0ER(>|HGWsAtbVYuf{dy$jR#;gRk5>vM~9hCeJG!I3LG^naQ4Evr8r_AX2x zHG81zrd{j)bc4rr{qtcNmx45tl;#{W- zdOjIXzzBo7M4i#2S)Zz7yfhw7>-rq_F6{bvHC*8_SA+W}>pW~X>pxnb%YPZBkN!5} zSIfL^H;6~GBVM0YV8#4507yphCMhneF|FR zBu=dBbJ)8ueIqjmF#iAj%HQGoSn;PeQ$q_TUeH=wuUY-+vUg$nPLH1kue`K=X&q0d ztVY%k)(>V+X?>%uWN0z#NM?IwqXCX4wtQqP2QQTZzT_nWTSE0 zI#^M&E@!N1@6*G78Kfi4(x&saF_T*?dE0g`?Y75B*E(IuHKp^q4)Wx{e{!yEyo!=J zhxrXnT#W8R$sthKHy(CBN(9$8yliRCpjLUaU-ia2*x0#4H z>v?h5xv=Z2i$9q01?FmS|0LpoS7{;+v_6-e3)9C{9oemvuJdq(C$9&j^||a^m_GW| z=x;OLH9RTef&2LM4%h+Xfz$e&^SYq>$63ycYu|$=&U;>*{_oJl`Otq~d(rC8DC6hK z&V^my-%b8Ko(^MQ`nm_!M{uOYp*=E|$hy94EH>AK@z}&?h3R`~<|Sj*vG!JQWsflrf(f{qSHb%~7zZn?!tAj19hnq^vZ!(VCU)*PyWh< zSFUR3g6>)O^YV9%Ju~_~Z+cZCgV`QkjO_V`Yd#lreY9s!S?gF&!Ok^geap04_s?PH z!mh72abs%FkPkxQL(-X*?CLQyE=!-o&V}jAnxiEcMJi`HKVwAz9smoK4CCZ=}U*NKHVfub1t4Lf? zYOXyA>%(=PCrvzg*R20o*XNqg1wEg%XMZXFJ$l{fX`|Qe_Vq!lKO={o3%kC5ocTv% zcknNp^>Ds(Y37o-i^chl!_I~2qdnV|?1DaHW#H*+3^X7gY-5&X?2+zI`P;>OU_t%K z=boC((}=g?q1r>)Q(Akw_O{mNT&D}tN4o~!^V?0abIpgE9(GRj-rIdta;C-FUpxwaAX!m&n9S8_-ozcn`G9La7otyQr`-3&2>9km z(|8e!aW4-07T9-S2`!VmrhD_~&G59fBtG%x#hYzEtZV)jd_65h4d5EYQ|R7*%bYlN z9+dFwX(L(yv0M|^!_r8eg6{Pfx7&8pVaI~>bR`-BeJA@wt(d%4VJ+X~lMK=YE!?Hk z#45VAS4Z0Q`-<1#RoRzgVxzG?M|gMmeUf;O*hEaHR~8rjbgp%`U_BC}#t5~p#I1FQ z*Y?@-7Ki^auM*M&QUb2T294^m?L z)7ouOR!acCJ8f1~hsUmq6!zD z^=Cu!h1OXCLiXF&tNJx|ynWF7Ue&MB<7Y2+K&@AWJ)iII`ZdC(vpESqC0~N!+`hGC zs=6;#-It)}rKOWDb6^6p#IeR$*Vdk&iO-7 ze=?et@vR&0yE-Y(`Gbi)lK3N^`V>*GjtJIxs`?`4*(lnFp#IG3h#+>OsxRWQ4?+Fe z7;PZ>p{g&Et{*wp-NWk9h(m0!KSF8O| z)#b43le_FgP=Dt2H(+n8x*RV15Y(TH_hx4FsxF6f{t(okdHf%;7gcpR9PwH*c6yJW zNw5CK`>`&E(>|DYGJ7wtRx_ijXL0p>a6$c<*R8<(p{i$*J%{|P>RDjz{zLe$51;?W ztmCKE7OHv{>HNsG&m`#m%j;J3b*p+7PWup)-#Z$LOqDy?7g*JQaIQZD^=DQ8!CD`4 z*@vM1jAR!lcaWN0oY@Xi&MP+UTXpQ?keVw-r%&CLtjCr1`jdITs`?M9 z{WE(2i~A76-Un7A@vQ&gvJYW-vE!i__MxhqklsIse<`d#tGWqSvkzhY$t+{66lb!G zRdo}JdB?)~v#Oh*pHJ8NbXb38c?RB}brW3n!T2cUhewH(#xv!vX;9T0xVnESs6Tal zNL6p3=jYV^rJ(+7RP_e*eiGOEbWnd*^#-nHAHv4Z_jkPkmwk{qq2#AYB_nTD3!uu= zU*+kS=fk(ILzSoB8ebgyAHv?hDo?-ePuKp3u>P#_^jrPu+W!!gH@wPgZ}q3czZ8}S zy2@*B^`~q7A?W$6^4eSd>6$+T^=FmWUiYWVzZCYqzrXX^JLeBU`IbgH&_93i4-`{!EUG^a;f2~LU z@sDGDEYD~AhtW*>+aE@UqEF$sFGpX&&rGEA+D6-~ytW^bytWalh7^8GzNp@J*|+IA zIv>b~@IPLUpI&V(bCVH0ZXHcclB}gCcO}*wxl2DJeP!~L7Jh;;Fvl*mcYo3S1vK__ zZ6zxVSuQp6seXbnNKbSh?LJ!2se7e|OX<&Y+3?fk36h^{(r@~|r(-Kw={CMQ^D~!z zroaEvb@%!}>CX1V{t0pl^yKJAza-uHli2GIr90cdhEMEQ<=$1uza-t|&wRFbfS^L;jc0-HSom9luI>TVy`3S$FT5@_5d(cmefk;)AYPckh|Hy6)au zO}3_(u08)!bUXV%J?EL9)9hhUKf$_LGniw2$hBvF9^;!(Kf(I5k-cnu>-B}Y{;Yn9 z`BXpGpg;WDvzh|(DH-ieR{I}cv+myYUHzHs+3(1pQhvBH*UAr4Q^-v}WN6ClZe6?wC zp!PS8uSe*E=I*A!B(iB&I8rHfNTW<`!3 zj2=V_^DIMFI5K{aeJY+1hJ%%9)4h5lk*V7^AK{th9zOO*Dzn|{5AuYJFPP7qGlb#b z9tQ3SN%QlcK7o6|y&~~^3`{2;=-?hvHtniE6mQ64+T$_L5|PF2FIQlx@+@0 z(I1rAzH_Li`=f+cgyGP+{S&G0J2yXPo{zoJUL4OxXHoHfXl^KzO}pxk5`GbegB6>( zW|vlPJ{vQ{tLx1Ok23UWkt>QQXAE?nq$o|T(@LEkEF&X zaZqNvjicvhaBz;G{s7N1bM8flbGd)^nN+#|EY*-Sf~ zZ#%h%;d(je$$vAP!{ULt?%p-J_(q8CuBl7btC1iw?R+fuU)y|g0b~Caj!aj2eVJcD zo`>u^pFZefw1J(+?grRb@*CRM)TXkX_La64=PMj#d?N@)Yj+D=0xTAG6i*rKYx9j} z!LBv$Yi?!N%J@bQ4%+jSONec!J?Y*r_SLd2U1R^TS6uZ+8Q%!PQGcKgTTwq2;4N1O54Oine8@?Qoa#_1NOYV&<2L~aC_KT_xM1J%GulV%cd>w zgHoQ6*}cr0p8C|c!i zseXiKgy9g|O`A?zpU%x>-b%Z#=dgwYsQ$=wrTwheFnnqs>f!^7 zu(6c&JdN$nd0H9I$T0dm6W!)e6XQhf^iJTQ9LZdyXiM>I_Ux_dk20PSgyY3MFT!@b zc;-dek!K(Lj^dg)C04w=wda_cFZS}vIo3JC?#nlZj-o#n&n{y8UfjEgu{_A0 zmH9P-`s3Yw?_!LaJTr;@pjeg}QPx*`4NZh+hw=@{E_ zz5{#4b10j3)gNU%BM8Tf`(Ff(W9M4XO_^hMYyUB{=i_&Fjy;x_@{AxHUl{oUuKNq; zzkut$Wn>rR+F}hpj+*#5cAdWk?UdPW&QbkQ#xsI&=$a#oBa6Us>ij9_jz?qTYgvqe z>D0(6v{N?iIgYrDX9VH+(t$6*j=sL|I-XO?iDaCw9jKw5GW{;K3pLn%Bj-3uc}5V9 zcMrS^eeYg)7dk$7;B%0fA1TeX$}IR}b@)5jZsREB86h}e&+l5i3w?jr=v||RS+EAW zR7E$xNp*D7miIv^&&cf!rSx|Xp3&|8arckkGuH^w-=)tW^&yGRKv!=`WoggP$@`%< zA5=WUvRIs#7tc{R@@r-cMf!Ur8bLTBnFEni zP}bFCQn_%B!jW-|>{D}%FdU;1Y(}&gVcbglBb}RWgZKStr497ieF2*SZNl-ypy zXCT?eJ0mB7a71Gf>;%_PEO~z)xQ3%0=jS*|xkeC;QhlxqaxVE#pBUZlP|mg=}i z^|3o}zbF^a$#Il&jSw8*6Y<3u*}dY4c!FHx81x@A9K-r9*ImjrvT^=LTi4*}&7<-6 zbH9br_8xs2A-dBwcdo@pV&8QYAj)jd&&m6slxKwDkabl0g6Xf1-#mgf)g$zi|M)Qz z6Hquu;V9!7K{z;v*Yoz)nP*_no)Nz=<>EOCNB+!h<{3daXy4Ux6VC-@w<4A!coREf^alcJ)%s05`8lxzS-t^BWLZ+R8}}Levy4@o)LtD zwlrFbFji*%*CUv(rTM+ib#af1=j1p_c}5V9+eQarxAM6d7oUgx`H?$D@SKWVJSWFd$}@s+B;yHiB+JQiU-zc5 z0oag%rJHb%C@1IF@JtlX$#InOj36Ax$Bsj{vT5C~UHD5pAFS`uT6zYUis$4wN_j>Q z4qYFK@{Z+?qi;?hn1^41a`BuTM=8$;!qJdCZH<-23f6EY`zPTKTz(Qbo*ZxDeqCAm z8TzAmPL89LXN2H@b#JemgG zZCliH^57bgFptpnlMvljEh(-~%)SvLE+L&Oip=&zV)6>{cE*?S1AFbH=hFzo!L??Y zx5vUS=s!q(3B*x2C%+dxU%bnw5rl)j`B>)2#^>DE{jc*!vBuchdlEkClV>|U|9yUr z!coRGf^cx2%4$@UIdAXo*#;bxi{~gD+4Jw>8bLTRJ7(hT=!-rkK5EL3b1fxbYm{>o zj!YLm@g7+FM0#s0KJQ4kI4?H7`4bqoJ?GA4TqDEig`+M$*5pEh{-C@ea&jQS*h#r~ zj_Qw$V`QJ2YXsroJe6}+`o#5|l|F{zIXR9}t`UUehOvIww9aw|<927fgK_($+?W2b zkD&b{OZ^zbi|6DxGJc^ydt4(3hs+Ttojwf{tzmta>n@Gc2+?iTB#TtsJlC4@7Fqm*X^;n20&Xg_s@Hr}t|IXR9}o)LsY=UkzD=gOVvn?qxV@Z3-?o|EG! zMwHCVE#HaN%8m7~CMbn+LkBMgVEe`kLBS$Pz0_lWjy z)9W~8Tq6j_5s78f>(24w5!ib@Z)e|dK5ypv>iNjV1Af|EBM1j=JUP#1d#`Oj?Y*)6 z3P+|Z`_x<`Yx5a5x)JM~u@0ZC!$*|auGZ(%KEpGV<0$1CK{!r`A4AWbJIg0v?>UcV zJMUem=l95QWc)&Z_P9n6j%X@^{g{;Uka*m^vYlPqcyNK80bsT5n8N)T?lWq7d)ThyVkJBtS*`D$pBXMjdPCkpPr_6T7(lf^1$O=b^Pa_Nm{o(9$%Cw()4T18>Ud)}s zQR34G!_h(_Ui=2;@RZs9o3g&bc5{A? zL-UJF&Ui)`j+XI7(+5qzbUJ3!H_h>zH6o8mjDnGK9A!R@FdVE~vukY^Z0WZqzYSYT zS=X~+`?puV1-tqOSYOF;l=(EmaC~&?W9X00TF2P*=?-lD$5uazdqkP-ua3V4|6Kp- z4QRgs_b$g##xufjSal?4hG6T5)`wtcN2f-CkMg5ahapRxLf6PSjxwGRh9j9tpgUPl zpqrQ|vz<6DOF;TiIowhd43$9)=J+lPC$ zZ+dt-*I(+_$o6lQ)V=ibYXD8Ywvy{E;~LpJn^xX**4*srwrg&xn9Kf6IdB-iUC5VE z!ZiYMsQn9d*&ENj42*}YpRFT4g7J{)-iHSt*XuYXTq6vJ-Xq7k`itjYgkM3=+n?R{ z9jsyG@e1m`lyHqO9P}CJs-5&DST#Kl7$3tniT{fsD;y0mg!ZpHhJR_VZ&f~Vhc}!eeY+|_6*f*ZTHTl-qF>T{ZxJDR`hOPms z;>_r$Z%E8pbNnfc;hF#bDQ!zKj*)#Tt`UaAp0}Gm;JlsfSwETiJm>kQpYrFUH$FPJ zMi>rVW|}7$Du>bpS#Cbk3*lDLwCP6@mF|0j-_z}$FyxN+vggD!>UQz z=x>1AB>k|pSEjB2A7$3*ID2vaBBDg6KcQ@F8P^EAFAe;|%39KZZepU$cH(GGKZSeu zl&o)DnffQ)ACkAL`zSdFvM!`~ykz|~q(34&kx3gE+Kskw4f$jnzPo;XJGjvHnd@ir zXS0lF^qyN(O*NHMd5o_67x8Iid2@Yq+qGLImt8D*?U?V5GV{;WB$la=*RF(T1oeTH z%O;WBH#*-17)=t83Br2AEVC-hti$vn;*?#lV0BpUEv0oqA z@Z=d`I2c=3lQ_GY_?~wy-vaJKneG1@a~4RuIbZch3C{?_!8LZSz3cUMuEXo~`T4~+ zjlT!$^9o1CFS1X?Gs1Ah%16&Wh{a#ecJ>E-_w?7>KKe4A5r$){dApw5e|z#cY(3}j z=6uy3*%+-pGoBHKgLa&@n==Qw)0vawU;9PfSSHJ&zSnwUE`*PE~x z-<^66wv;m4pIiMdY(3j4KR5Na3P-6=Bg5u}L)WmaHENB%?q}9M4emp^megSDes}Ws za9?(<-GcU8rgtg(Uh2~b!f~i^2)dtGdjdKrA4(2E_Y>1kz@}6F-t>!*?_0SS{M5+# zeJSG^VfSUeF%KL_{|w#4L7DBuaofxw?%m+}ZMb)T0em@*QlCahe?(xJ8v`3S9vnDm zd>Zn}HvIO3_3uOX_h)|K$uoM-OO~xZ-5c%X8O%wq{1!&Piq9~=h3-Acc(Ip$T?bg_ zs7++QGxJ3;uS6pGO$zZ5C0rw{ADFL>dF&n=ehju;$4YSDsg9M1t$eMedryM;gE?=Q z=Z3j$7SAu9$6P?-1Y+5T&RjT@O?&=KN*xlzH|93iA_?pd*$=<{{D+}i?|V0XaP*B@ zhtJ~`6pk{VMo@onFWm8^txOv^qkVh)2`E&)2`FT)2?fK zZ`=6ZHM{a@1mWmRpM?EBwRQ?N{?zoTo*Xyg2Kpn3ldPSxX;=MG=Fkq<) zQcmy>oM)y6yG|L724JeK*Km%Ja~x${qt{nncJ9*5CFr}fehE7MapoT(*Ej00`SpYK zgBcFWY`1Zgag87x5i*A*pT+fmw(&XfX|xWupue@z+Ax-1KD(wZ?}JjGMs}aF$~0+x z8YkDl-%pu^iO9%*%i=Twc}9&?9ILYGrB6`ctcT>VM z!tTqJu`BRnTv@t;d;f9C*WbU=kGTi;q<=#4_)}*4j`2@uUqT7b2*dIGXdC@elf7uQ zi5fW0(8UK~QxX+R_Ta=2+MRJ_B|IYxhpul;xxL!PJoV1WJ25|`tYhqrte%gIUu2(( zXN2KkJY7fP?6{7_m^Q|`u@5M--SktAql{;S;b1O+(bZA(0oUFSuRaQyYvFnwp0a7r zag_0lFdX#7)BnENFHhe%edeE7+X35a{pV@E+&j`cucawh)-L%~`vFQiaM^ZbU*;Q@#3wAXdt5jXJ7_#AAVK`ozc?mY1 z&m-mC8@plOwal8UFRi}>d`8aiOBv4y!!ghpXuyMz3?vvU!7=f!ZnS};eXtEXPfV2A zZsRE989_K;-5*IF0ft8!j|k7$@z9QkuwwM~j<=2Fm(Q+g%ln{=XY~3ft3a35h}n{7 z^ti-(=NUn|)B0V_rDn<@zGnp!XEA-NYv-93?y>49B|o z3pidS@-w6@SM#yF_B~OnZ)_jAw-5 zAcy#;)hpmQdJUfI?wBNFZ0CAB*Witu<0#`9VK_90F#h+Ke!g%9Cu@xS213aGTU2-smyhkae^S- zU5RU#_l&XaI_BNPx$BttTz?rC2-1)Dd;9v&*UWp)csLXDmdT8XV=SDJbNyu;AW%Ov z|9IvN=v3?E>AJXDD=(~(m)ZVc{Xjs!x$>9Ohwk*5m)ZMk(arg?%%#=bIh$kK^XQ)a zblCW7(Vg4SY~HSHY+(-H`}?Wg{UOLXfBQrH_9^`K#po;1m!toP?;|7~G`l~|ssnyLblr!_I6%)v zSGC<)mn5q{@6{i1RogxK5dMpz>&>&4)pM_EyQlqeMD{5sRc-g|`A~kkh8fg*r}fNRAMo1drS>-S z183DI`TGyu_Jwu5=jP{7hoP$R4ewi3%4!Xb68OYLnI z@8eZRHxk>H*K)?n;g64?w(=2);i~FAV{c+r@42e?+*?;~j5e@Oj`g83xvKZvl04IC zEM!&hxvKZvdtbQkg!@}5e-P_Em)hGb#?`BaYq6d&a&J~OkGr~NKvnZNi)*iH9%Elv zRrA=IM{TaBP}Mxf?w_jWaq4$SWKSjYI8go|);un?x7of9uUe*&)ceir`eH=+N&P1{ z?yv99-)xLq zUhRM;a^O|9fBU*s?O*VqYpnfSYHzbWjDB@AW!;oH#Pt3F<{68s`nTPx{w>CD)(n-} zG?evvS$rTi`Br6bcUAuu98u=Lw0TBW{4{$vvro0pILg}m-rK7Ft<68G`nOhpRP}G| zxGkNNhdF$hpNH+t30PM-jf||`+iY*EV?R)DZ=F{i$5?8=R&`*r{c}|vSo=BE`AMoe zu-NZW)q%Cf^{Ni6{l4g0Fsp`OHxoCC%+4plD*wXoJmV@7`W?m%qPx}}9k_f=?AeE zYMH(5+32O6o*8WVS4ro;q6j_QV=TVoSstKC;gSMK( z>3LpN6BH}RQY*Bo37XXt`C!!qEwi`1e579W!m7HMwtcDUV%q&t)y1^?qpFK(_eWJ1 z)9#O|E~ecd|2pbomf7204(_Txk;KdL&3c7OcqsFPS` zZ-eS7T~oclDEc_o!}A(TrmB)%W9iFMW67?y6m7F=EnU~EwG`uznI9fe9g&imn{IWE z&P{n8PX7)3m^x7SC_DBlFZRyVEs#|$sOx%tT&QmprN0N`Ltl4)VNl9vxBF=KQQ#;b z=po~k6u!0aZBd6IO6xKNVcH@WT=b(zzWM(J(-!%1P%KTp`K4hpJ*S^6-E+lfYKy)6 z5pxXO^-IGPmtX=`>p9!-6)Oc{gq)V zd7ie4af;KJr+*Pl#pfxjMO|12#`>^)^Byo2?oP=wUVNUiy3_?Nv#FQJbBgEde%ngF=2%;ut-5kg-h%N8-!@-uzG`9g;9p@F znR7lq8=u9U-5c-4QRFluy=0+}-iY1+Qp%E}-fF?O7Df*~7KX8ZxPKV9Bxf(>G?(vB zB0Ql-?v3vSI+2;_mq(q~*L-VX^x$V<7?a@y7+HHWzHj!vOpZ=VmB|O92eK@P%#N5I z@R<=TKI; zR{R!@%oJ~A)0Y26*_zXOamFq9 zkdu!Y23us(d0Wn?OI;h}hT!VLzXBfB`AG*>m~zUvgk`Z>xy8qXgQYyJ z$Hy#;TjH87)*>O8Ap*@ueJ<}RosDc^S&mSh2{>Fn{PC24(7uXgD`@P8n&ugmdM+- zw9DII1sS?>HcT&)%AE|?zaoO*LA528~^w*^dsf^={jsKN4g^q#;H|9i?Vs~ zn@4ghSg?8Y*1>C6$a}5*cwrc0K@p4PCGVrGEyk>Hht#$x3lk5`rnbd;XMA{K(7kR* zJ=w;50~U_5;eF^ejKDamk-5$av#N#P){*zq!sx>jgD|GOqu31Za@vnly(wCV7J!#B z`%$+*))>8bVi3mGp4Ohe?#Z(qumj4iGcChx7GmH!vA1JpTO!B9v6v2*qW&QDwL zt;XoZ6N50;_tt@;ezp#stcOB5Iv1To-|deuW0(~iNI5;qxADH&eK-fQ#^}WpgD@t0 z6JSivCcsGf#)TSsFg_OpW4u2GM#?*fYo;Gn3+39vPP-p{cw!L7Lqmt~Zf;@=-NOrq zft0hFNLA80JbV~Pb&HX$e)QpqK^QrAuAQlwTn;j)<~%w+A7duNJ4-npiBau~M?MK@ z3(nLSy?9~}#>Q|1{nA)ypx5I2W6VM+N6dzLAi~TmeXl9=$Zz?kL)I9*cw!L7_HY{* z+Y4=A6xnb>$>bO3S^Z2~{u||Rp11|qaPkNT{}bPYl78))dzDg^gbe z_fh;{^o&_PG4XvR;y0ro%zSHM+~R&&JTVNTFe}5OFjntw!Fxzqb1*VAhyR8isG|R7 z3;lWxH`?MH=l$(2KClQ*wRn0FoQ87yjW+OFz6RkA{5JPB;2g=JX8vERAANXY5XRaA zHv(gGz6tKo9BN`rq-=2-HDAs-4W5S{*Re46cwq@o48q8I#?QX_H{gA`ws9%=cI$E1&yW7=8SSK^PbJF2d$5o?V2^J391V(T|ihUm&y4+=1VA_MXK5Yh(+f z4^Irj$U4aHzV$9xp{|KsKUarct~2|*$jQD0OhLC$PToqaIsI1oJoS2T*gI3(TSH$k zA8m8EiE*1Udup>?W^b0-<=yE@a3ObL+Pd4UQ-xt`!s8DgVy7-$4&{&Uav! zSzVcOXQTtW%wzw#8_YRu!I{>*_E;|t!}#L<7s0Za_vqPu-@)BXb08_ZckEmXh*GPk zY#(d97z?Q}dhx`d=TX;Pru>J?yKpz}TD%K)lk&g4a>Ety3tdUh$Y5kTho#8jTyYCq?&J~< z4v6TmKkoi9tnjabFNR=CR~ln_ua!T}Q6-zJk#bJ)e0^`X^3hm)F$`mGtqDCQ^+hA` zUZ?)B2gLhzx@){9l%3~W7`J$~EWQ|qvB#$}Zl$>xnHPCk%EFxITNt;{ujBvVWqn0{ z=29vB-T54X^KFBDPG@w=YtzTI0Qr_xxYIM8=UW(k_+l7F@q)x}9RbhL{tx;^x!AHEodQP0&yCR4m4 z<%@TKVNj0tZ3DxIoab8@ef)}H7}+nZ@jV)0{ARuHZS)+DY(p<^OZ_-TP8nq3e2vk| zuNZ`p%z*39l*tcH3ST@Tcb{@+5y5zbdImgQS*d2H(+~;eIUVJeK zV>}U0pm#3D7jZN)SlY3aD;@(Tk9o-*uqU_V5efVEp!ZSwV20Z(;P| zi9s0knnY{=F=N%lBDc;x1AFq!{uWxa>^|SZ=))6(Fg8XTuo8{M#v+a)vle~xys1L} z(_9B@p}6};Qt#IhcqdX>T8iguj9xr32&4EBx`T_i zp&u#J^T3vG%Dtw1+vp&A+Kto4^@)ylHFzwwdzUNP=h6eZI!%#S?=tK0Wp{P$=$@%3rgiLsKh`+SYjizfzQY)`h4|F*r-21b#=##otxnQ}x% z+vf8$E-#+Ah5d2bzpL@Yj59jU)406WpF?n^@p8#Rf{{60y_Kl7**9XddMfkfRF=qn zo>M&E!sx>j!!Rn}Tg*r`@z!YnT#AuVV9xU`j6VLvAdFlag>j2_)8dI?7=;UvWodqOOxDki2y>;JGBoG; z7RD{~TXBk8oa20#Q=bw2N*#KU#LI9}d`xV4Tzre^w`%1oKi|UW!xMur*43I0<>W#F zYqufCUjc?I?zJ<|;CkA1p?`^aHhCRF4f8#!1WAx&QK^QyZ9ay#gr5nHw zD0h}Suy!9=>PO2BWBuR`l>5g%0@;1O#^}WpgD`5JM{CS@L&$YD`A5KFbDysDI<;#@a5|mT?sM=;BdWyYx7E6h0=(wUHY9 zH}3N-j6OUu2qXI?x){NFM0%}Co=Sepo=s)x_u}~)qZdyM!kDCWWiOfgD{>;%?())Q zw5-ehrF?npG8mfse2vkICkA2E{+Qe5}W zjAYU~A-RiE?~_zJG|Y}l3!@KT48y2m(ddI?jDFE8ho@5__&56%jZf0T=))HSF-o*o zAlN_@v+8KANiIdO&s>MpE0FX(a>bHzT!_*4 z+W#DeaXf-eravr}=%v&*rXrkX#nZ@Hb*%h~kwo7a&zaSaTa0xUUkt;j`IpFKUPZRm zW3!3_r#!B(2hnR^OBhD><4S~4I+~0yN=KC0kGh32pGwusrr&ixdhx{|jIsEaI?E@( zyeOxBC-FX=5U->5M0MD*ctku=#wXc@IzYt=o6j-( zczI0kFI(i>MEsEE8N^&hsF@k|Vi@p=r5B7>!=-zcN)z55ln8k61=S2Ub5_cDsC`^(3#7=$a`dz3^zbVNVq^viSLFIK(|ole!%ozr`LDF-h=4D6T>jJBpPUQTv$tDjnh~#wMUIDw=WLjIw+g}*Xl

u9Cdo6oO35|MT(&TJ@We2TiSmI_ruQpJ*MJhR3Ci?` zT@tU@SxDJosm^g}lOk3pJv}Nfx(T|kP|En?j@We2T+Lm$k zti^S;e042dTjQCxO%8$&4X)e<_VbLaNE=yW^x=tN7k6`qXdWUU$|yK-8J;fR9oBjn!Yr9oH?C|8D&6@uv5$-hgj! zNS}=xY<}ax6T>hL%?yFx@cvRBS|0+};gR<@ZILq{ojQzb;`2-S@am%$MjxIShB28* zfH7H53@65j)hH=js0P;fY&~Lrz?2 zR=PA#tJ(*`9V5)>N|~NK=4nlL)Je`(lhM_}=)n^MF{-^6b;%vZeHiIczO73(u{58Q zM6;#4V;_7RyGM*{Vf5gMVHk5?7Tyhso!gwN!g#un!$PuJv}7N|F^RsT{GGR+wK00| z#88Z82c-7KQRdyWym#CgxxWwV)q3}&k*$98;E7=v>k^yKNPNomDH&~ux0hNI&4{c@&#}} z%IQ(QeL*7kc_zu}qdWI6%HWGw+k$^)x6ffwi&$~R37fHe$E-HhYS zs{=TPvN>O4^x=tN7@wYc8ag+5mAX%_J`EI`JW$=QPW%~W3CB`4ehmMwku^rI_2-~_ z-QVbMWcQbHf6||Tt;&)2H*JwKcT9f*{muwH%AZ)2RkXai$AX#=Ckk@XwDLEHA3>%n=i zU*8VSD{?ST-0EF&z9-P=%@g0NKk@FERg==%NyHgl=fss}#y_-p2>zH@=fs!1`OKsr zs~q~wp3mF{sa(vP@4*v;`p(M1nn?auW@t^1lA$$`jIPYk%FL}MPitQ{#aPVQ>cJDk zFxFH?Fv?#z{{_U_)i&h|V>U5n4Kq2y`nr@&elh)SY?a$V?|Tl#XtGemDn|un=B0=? zWw2nTiu7Km*SFK=4jw!)3}Z5$V2;imkd%|<1pJ0a?vG4cFOk8-H$#zF$|;S`KwP7Y0flZZ=35)*jviat$r8mOSe$|?$mQ&Ts-m|%FT=a#hMfN@We2T zpPc@E+}~PK19zx3YK=_({k2c7*)9Bb*YvIOJlukBZ%LnxTWo&g<4+74dssi3cUISu zK9n2+YTjSU{Pug(F9PF>Yu^LLT(+J^Q@igf_4~s55y}41cSyMmM0|@Wr$_lVmbac~ z-ZnFcXJc^vHar`HGq*|-0w>FXWgF#@I@WD2w7wE@+$^mn;V)#{@`clpPldPQcmm8 zNt9nA**i^?AMkTmu^bc0-n2zdW)HrInw#u7ul}1Go+NYm`l{R|}($Uoog3 zw~t&8jB|@~m>bNE&Vjd3)-iQy#GOQtSuuFM*gOlP2VV^9$KzwiF|YjEg};Ocmh$nX z<5u$R}CU&Xzq{IS)K zq6a&&O3776${ns)%8_f5X$#KO7=8F+7{=pM$AR(q>T%%u+QeVszEjp7GJ3yK-n&|K7^);=XTYXJlTQuchp4&E{f0d@&3o zpRZGEr-1R)^eNz_{PNn%Xo(v!SWukAh6RcI^7P9%N4FT+>PHX07>03V<^cH1$5;Os z+-u4Q)CVRDm^*#03&k~4nxC3t3S?GW#wuV~3OF5PrM%;75jF6PmqkPMnN9IfmqX$n6 z!&o~|!@6SaLJjwcw!jF+C&YuxOTAy4));0P)|-IV?{EV01!(oNx7`2Tu&cSeFQb&PoRuJChyYrObY0y})TG-qmzK0GlD;}g?QfKxrO_5@H+zHjAT z+;{B*qfGCYYS1^PF-BRQ?SiiXd_leu-)E35{LbY6g=es~UIV|W&D6kkDBrVw zH(GL*mC1L{+=Fv0R#xC(KI_k6{rJ+%OVGJ{bvN!c<(Jl90=nHByTNgIXDRPKxEp+j zM?MK@3(mCq(Z{bC)QFWFSHBaGglx_C^~R+Xvgg#kZJpdX#VZ)|)dmMjxIS z){l=g9s$Njl1G41>H`mZ)bV$Og1rdriIaiCx&6% z%=^e0Ym&X9rZQPDZ-s85Y%*C`7(IAm7)JI^k@vB8Faqh_lWKotq<2q3));+wVi-np zJ;vJSybpI=qV*YxPdQ-}zZ`jf+JZARMjxIShEelA#(e#M?7eG@9oKaxTHQ7f`r3%w zH+D>AE=EUz5w~n0rV~9VM1V?;98oW-NjAxDvb%XG|G9U7Bm&~GIZ;Dht!X4mVq72P zk2xS99%f90zLufZgp(MICOk4^MlVxMiH~lwA4T~Gg@Fg={E99lSKJGW_ zJxR*kjnsRXl#RW{ScfMz!+67i8%lWJV1H?C2~13Ty(ljoSc1Lwk`?@5b^M8jr`6>V zmiJv>yKcB4nV>L4axk7*&Bw^WcqL?f%o)cTJh9n0X2${3mM0AnwccuhhqWGQfrs%f zrfgs3Ti*4?Qe&*c6PsZy@;}@QZ*_pL^GFByL}A=g=2GZ*5!%0 z_`_cmPi%y%-+%YLcL)3LJofHm=q)JndygTH$aYEJEH&P_r^_8&zHSzOkJaRJMQZFj zH^OMDOiHE6Nb*6LEyB*;Hj6~^NBAxKej8a|XLb6q_+jd*99+umBH6Xo{Lwkm_G~ac zCLK&Qc%UC9lP!TWsH$L4c5*M$ZyiiEc%L68R>EiPdsP+R*1xB}CaZ<-V5-6M{4jOb z$qVhOnygtKse`Eouk*vy$trx=YG17HRjBDD6~7!zHF%sKCXQ32b}K1!oFeR5;%ZC3 z)tKt=Ha|?vQDj!4ldmZGjLcKaavL?KIy}t}lZuYF5%4x@Ud7HcKHgYrOm%pfA0`!v zWuvkfZB>ZVl2|N_sSXcogsK0PNAGzwd6wTA-vX9e*wyRb(!R9~eQpO(Sj-gM9=gsjiiC>9lIO7-^m+%zBxpICZ`FvmSfcQ6?;j;6d<}bY4EPKfq zjlKVjrN+eb1BR00DEw^mg}pFs`st>h!q5J-O<%*Sk-@3dC(6OEf%E)fa4`6Ka7%Cq ze+TTR-?g8<7W{GWN5P-q`vB!_gT@?ey*Rv54hDYH2iGa&i}d@#cyM_92K{Zhy&m87 zjvqXaZ}2Dm$?il1viW3n{3dw593!so`|&jWNrbM%R>qDsaJ?A3m}n>?kKrEZ<<;zJ zC$jn0!B~Tjt@k_D!MHuz4lHM*v)BQ8sP|AJqXNcDK(Q^@hSwhlKTc(8`0ZEGwXJU~ z9gKDSc8$g{9*ME<952M!8>ejJDbe>6$G<#=sRz@1RJ!15plC6;Jl%30U1z)%c{nv2-xj;CIb1 z&hMT_ZaC}EQx2tKeeinlI?kr9WUuPh>u-&{gRutRYlbn9cwHT(Vg2zOM_oNt*GkpZ zQz2`Nb@*R1jI6}PT1=E}%`U0a#Y$YdPFEz=x_YS1g{M?n*Gprp!v~vT92y&fKb|!r zBI%rL>qW4Jt5l6JRUmNQSwTY8kzl(+wB)2s{M7FzdvKPk+A=$p1KG$`4WHXH1?c?6w^|9+1Q@hV6dx3WU zk9V=!3k>)z?{vrx#&zc6gyRVBS%-I&bBaKCLGLF$@E*#RK?rMzgmF0hLO2CEh-Dmk zPO;AMgP!bUh8`I23+@BDmxGt_O7=xr&&bqpzSc81|80K0uETrQ`5oos2*&>au0Ak+ zyo%g?scTr7nhPm+9_%~_y_yRtcV6qboT3izX@n8n%djua8blsgcb*vl-wZ0|8C)^w z25hdF{(lrH{mgHgpX+dYXgKbxk7FDuhi5~~A-r>KA87SFw|DyMGucx;_YAL9r@7HM zM$&^Yl9_}&hO&MFvNxf9R_cC)>`<6{KCaiZ!>QBU2xD9N-?XvSGuWqWcnro-KYK(D z3%zjoWD3zW$9eYD;XREo+R@QxlQL%#U7cOmU)R;yA#04acuymYtoO;zjg)PrPpSRM zN}r~}I<8q(36)pY{G67{(;7b)gmL>D&pGKi=8Qdh94R^ z1Rmq;x=2>t^!aHZB})&GNtejeqtjUbXpNCI##+3m(KvD~*gDrjM=QN9v?~TV*OYB^ zx5WAcJlAR5kH%Pw_cX%TmKdS7L=Z&}MetKl4y0dCz-S`g#fA8yfOmR6zNilGS!Yf! zKiBj=&^JNZ_#JRI#Wz9E1!e1@5I;pMehsUEr8AD}jFH28nqd^CV0ZyMv)j7xmQdE5 zf{eqm3B@VMK?>{Zb&enWh&y#MU$0|RK8}mq7cpNio?XNoO?m#cdDA(VRh-k6U-E6X z7KDv_YyPb>j&*oXBaE%>Hvwa3p@X@wGt$95PT85G)#@cm=V)9H>D=vLOnFWP?`eeb zeDd5$+~bivfsV53w8)WU^zyZP?x?Y$CchtC$KTTkIhWBj0;~uiAds3g9^~5QgZ=G>mr+%2O6S7{sK>4$W6)IW3^2Dz1;k*}X zS+a6v#7G4dufSTCQ7&Gg7Vl|vu2~(4wUa2Dx=4uHDb!J7)udLT?vkmg#Upnd)(c77I8KypSpMonqsE@sXeD)6Xi1dHO5-Jrx8YGgYCSu6EVP)O&(a{rQ-Q@ zJXVs!WzH{bL^j`QjJ0@ABaDnhHgU&;{nz%swinMKkwX=;%)2;b{IZH-=3Q?r9gKB& z&pPvE`8^YeZzQ6ZO!-Od-iPdTXt~_p!B~g)G{dMp-rU^~AB6Q&Y!|P@*}hrLQZBW3 zFs^eR9p2LnW6BE>j-WXO83g%-WfP_L4#stkuj`|&S3_-`bG>r_^GuLiFAw$y>CusI z2Q2Rq%Tjv>V;$bJ&hJ6&lWuKSHQqg<)I#%S5jOG(|_sEqeC!pPZ<`&@eFV>O!@Ilq*9d!(BQ zdqP}1?aY)KV=aGABa8v7UQ6dX?sEkq>k8O|T=B~;Sh>B%Sc~^G!Wb2*FLIxYwHaGd zHIOo^GM3wGjJ5ndjWAA+O=C|c$n||2?Ek+P-Z4HY>A=U@K$OevHO5-Jrx8Zxlk@y$ zx#ffXtFk-CYml+qgN7&Bi(;&-5*f}RNaDJcK#!zUh2Y$D~kF!m0{b*?ps_cX*fYi2m*{kHy3VHx&Z zYdQ6SYYyUIT<7?9_v@>&zFxLCWF95OWAM^P|s!Q&4_(bRKfK zy@Rn1?`ee5u9{^Hm93ZIi@b0Y&&Q*?yWkXBF1L3u*5N&kFt*3qc!sy7YdPi4#SX@? zbMf1F{q~*?MwxO)jLe%T z_C2HKX*t)FZ4b24K4}_bE#A`zV<>enLg}i(9vW6&d=^n4?76`X8@B&OslCQni}y6b z$UJ^s(V4ZM`I=R99_+8~iE(X~+iQ%qcuymYN5+pJUM5mqKq!CX(!Yo2f;9$NQIK-E zy~bFJ_cX%DTxFhLowv*iHoOKY+gdl0+nl%87;EvKMi|>^el+F{;pA<}q-ORsbE~@- zp2oA%=2@58I~eQmo^_t{IZcygVNV&a(u@3KPh%xg`=v@Tuo6tTB zp8cwQg3vmR^?+?4QbRfRu;EKZRMd++Jg> z#d{iIWELssXq`*Sd{b()TyC#1*5W;lFt$_=3Cipb!M+jfDnXguBg*YH##+3m5yn&d zPN5cOq^cBCer)ki!5@24nfL|UL-z$(mfLHLwRle>jIq>0;kl+9OFcZ+$>TLh*;dFa zwbvMH@t#H)Lsfqzkh<8RRBE|ud;6M-EI*QGWxQXivy|F980+w!b)KQ+&v0gTFzNwg0#E-5)m1yypO!SgRu_pX@)Va_msqF28_r= z>j1~!(+Fc*{1o&=P^Qm<-iiYfF=ss&%1@EEcQCGV&pN!P5ynt)3Ni?@AC0qYIYkUk z!9ApSuaV2`9gOQ7--&Bp$EN(gZtZK~$=tf!x{Ozm4=*0Z)7!p|9R{bM+}hIuPb;@~ zFxKHcjWBXtf?S=iGcxCBJ$Lhr>$6X}++Jg>#d{iIWPLTBUtMdB)p+lb+PhjVx7QeJ z@t#H)TdK-iAbVadss3gvyWy!baTrxmwOnrRV64M?)_FdaKOX~$g|X4#Ixa?HJ{S`o z=!_l}Go1N{9E^2%Pcw`7u_eA+v*E+nXAx4RkD8^GThJrh>`rFX~AkF^*XB_MBo@N-uFUs8wXYWHI z7P#M`cRK7|$%X!TjA0qqGdzxWPd;8#+vg>bs7Ai7eRy;sl?L^Ao6G+sG@n|?0 z*Lkiuyr&sPy~i#x8AP5nq^wMFIm<`#ITh<1AK9Mrjrh&hv03NY!*N^=@H7l20z3@^ z${a_nq0B2(jj|bcJ&v__Pa}+x^djnAJ`Dyz+4=*-D{xx8LE1ymqh@giEQ4|n9s-TA z7Vl|(rlYgpqZ;?YW+cfH7hve|hDVU^Vh>EdCyI4Psp;a-8pxP^bQ6BaDHr9LqbGHDh(< zSl;QXt}OW`pOr?|c}T2SL7A4USiv|yE2CD0 zgRuthX^4>-qOx<)WkwJ8llUs%cF%R;`yrcPb}4g7|7m*8Lgqr{04ij?e9D7=2X<+ zJtXB=zro@N+(GPm(rVs|&_{kA^v-oC*; z_daOJ-4O1TWU_;?2JdNxF%~~XY(2{{*0J{D&y#|3}GKLj2RXVLdIeEh#trFj-SLi8*a9qP5JY2XmSXg;_#L4z$-y{ zXk`feg0J7%e;6ZcHDYNsOTP;LA7%4zHO4x;ry0g>Y5h;!Gwaj~y?tUU=J&13w_`Rx zI(`i2-N+ha9p2LnBl~CDp4rkP`Mb;i8OPTe%Iub%^~_HCXK%Uu+s?VJ8hsGYeGK&0(m5<|$YYpYU-}eu=)7i6;9UYDAjAISn(+nePzw^xMI`AXt0)#Uz zR{~{z%ML=kekq&YK^kKne@`=vF)PqZW%@|&+*oA$D&I!J7HP@q^{iFT=cADwjCK4y z>*Pt6-`A{vV(VO~cwj~jvmzE{TC&cS%@lZe77@CpB9?=(2Jcz#-d_i!h&_CCnCl|s)$I&Q_zw&RVwBf!Ep5ELac}i?3o1GB{V-4QZ3?oNJdnN2TR{19M zx3s6{f_@DnYmDnXpEd7khOsL%2{{7gF4=^5=fHF*)EMjVo@V37t|#nqLJt&W`--nI3yF7t&pOZf@_VMGeDI9OY%RC&T(Ph6En_rk$w*Dcao#8yyGC{} z*5EzO#<46u!bDOmEH415{+6*7x9{JIXZY4DCgy_j!s6@hxvs%`nqlPVM1`FWj$>5V z8JUr5mir@iHw1endK~NUo@N;7r?9>W@l#k2#p)K!;PgsppM}-HH<5g6{;kHi-W;NN zPcw{~Q;;KAHlbJs83ZjYvk=~~w(lxfZ=O@EcYMuz*0U+UXF3Nu=t%c2P`I(jP zgH31+|BpE_PLs2 zM6pzi9ZLKG5$|Hk_Eo;+T~AAP)??qjtq1PFbyDc5SA+MU4|8c9%kt}SZe$Mi>rO13 zKrK7Uw!eZz$HY?Uh}l!Na-HN##ZoO`omzG^cuzx&qjQKenL9rR9`pF<Rm)+Ul#cE-{<*EM)gGmK~UoI!NxnTuyI|5CQQM}=J_R>X=_%m-ytBg?^9gZDJU zxM|PFfN^ed4tqj#V{_m@lyxkMjZ~4y3nz9ZjcIW(*5EzOFdiR24!-}Fm;U0?V4w2w zrQ?RDi4TDJqt?5^C}&)sIU_3K*26!o-T0I3#)Q&KlM{#6kbCFL?oq~Y*wkHTRuyioi;5`j7j`qNHdgpuKJ>8Km@KTO0Mqn9?y=Da>%Jx;h zWi4-G>0qqEdzxWv?QLQIqIIc-`I_=8=U)NdxX|r|RW{?ab|!2@Hgz{0j5T;qGmL9; zoZe#3oa?b3=4;AV1!E)?uA<8kp74}ym-bjG8YTwj#+euvrJz+KcH!d$5LN4WQ4 zEH%bDyr&t)C#RkSM|g7eNuZ$o;PL}F@7gy(nO+IUm(e~1)W&C_F$Oi_nww$#-o*cd zYp}J}!hGF2(89T+eE-^g&}6J3k?%WjKWrS9k>eC~cuzBoKRob59CO>sHk@n9KV17E z&~3ZA4V;2!mh!fP+rTgQ$}7QYVCjrw9e+tYw(_C7<*$cfa_>xLz#6ngJK4dRMre~dBzUL8oZ|&Mskq``Pg`P9Y@I6|qatxEtccZ4V_F=HHF!@mjGD)^_TOZAjO$CeDiOsY{VI-k zMJiV0^A&3Fo@N+}Jcb;oB^jkHm1)YnQmvtEGEJRvtigMlVdUuKc}y~nfzAq1c^`q! z3W2OK*5N(PFp|44<}%|kc%Dn7CL=N_$BgEbSK3<*EH%bDyr&sP&0`oV!Ff){Q!sjh z@f7wI6FK&ork(;HF_s!*9p2LnW0A*jUqkPGQ0A_O-YcP8*!!r#dzxXq;lK?gJZ7-J zw6+9hp}i86mkun!UVAa}eu_H0rx`|am+NcS4c8&F5ynGK!85D*1vv$;gp6P4b1la= z+$YBu-wb1R956?D(hyPWt=3!6JkojuoI>tm%Jx;hc| z%)H7UUtcZfJ^gpzdv~z^&SURBHi-W5Mt)Da#dF_i^S;gSQc>oP5nngUdfaNT!}MA7 zmjA=xAo|?jg3kB91Mu0WTkz?RfJK+@OU3i4|yw?1Do4Mcc z0D12}_M!joit}AIpTA!|dg*-5`PAM`ePJgUZj6P@vjx2~_J%Lz=5#*{xPs8rJNijv zx?y3yf-D;LNyjzyiq<C&jo;f=1~MaFC){x z&tM4Htv=N|7)s`QKMdSQWbRzR4kr)HqBDIU{Y++Y*FjG84u+C>-w#71U6Nv{InKJ> zfmE4duXJ61+~^$)CG)=@hWXv|h`kS`Ze_sApQ_Gh$X@8F-oa491N<-q64z#Zp=Seg zcd#NCYi_X$SE|<-%D8|Z23EeX{j8)G2CH4L3Puk#FL1@CdX2&GfIJ`Y!@zDe%u$V` zmko1KZ5JD<^p)u~hB98@hk+R(H!ZYG%z)&Gv_@{i6N9-UdA-I^#t-~3%t~#kSaz{( z)TTsdGLAEl2+mBeG2oewC%JjDXFS0V10y9EN5LmmPogQfx6o5D6-KWyh>yYeAQWHl z!*G4DnTezA5h}@WhK@LAr+NoN89(sD zKsJC?1&#|p7GBwT6xR}D&Wowu!BEBzyfBz+27c6++J*A4u&#*;Dv!aAd+LT#|ILm5Bt!qArb*_H>ePPD4A9ZCgm?yH8- zI~dCNffoi|dmL>({R3U^lGQL}G>l$jDCGxU7+8m@clMtQ50E-ktU47*H7eGg%JdpT zDL?SS@VNAR38ex=q&mT}Q(M4JmZ@H2DCGxU7?_`FdBBC}0{q~kHzAsjnVC18Zy`pG zd7DPBF_iKHFAU6;pjVsO6J(Hcl1~vxRnJVXF_iKHFAQ8iTt9!^{9cJn>`7E3V-k+9 zS;`O0y!93Mt<9_XnElSS4pzyQb;`P#D`{NSShL31 z^22

KzOm*HG^Z*x%XgclWywbTKz~Uh7~Ewohc4l|!!BWVX)q4hHj^bNd5+7#6oL zVh)a8i-3Xap%dFr7>(2tJaP7fc|OWI$><#nW&FVFT-><5g(I?$c(gEMMqbtjGlGFL zM5cEzl<@;E3@3M-L>Gtey?z2bfKQ_Cj$_bpPwg116H4xu(K{H*_<Fh0*as)GPn7=uBy~n=3XtnoLa)f^W_xrz(UvKssa75Y3HShRO|K3ub;B#EN zVvi)-Wxf(vAwJit}-_5sY8fzk)!(+%?L zXLFA8Ji!lx%*c-}Jc`+wYt;Cmt6-~~sj25o{piS}?i$`4FBeacp7SQxK%e^zfiU2K zg}zy_?;OBPq4nsGfND7Tb))oi%*7S>VF;wAANLvTZo`g2@C2>5D>w9XbgqXop5S#Z zxX-{lUH7=u`dMKM=E>k-DB}rU7y?to59sj9z0XlxkNLx!KmP|6d$Fa+!`A@T8i4up)D zS9*JQAhup(DCG%W7$Q^e05h|x7-`;<&ylH*;LO#f9Ko#XWNpVdFp-nB9=@sM2$l~t z<_A8`1q~&PWGLt=f1P?FzK-t|H1QkH9VmgNPJ=TI~)A&ew#fJ)qWy( z7`48QU}Zd=Q7PBKP{t3u#vzjWCEq&tEzG{%b4SgqT0c|Ib@jJ)e9OgPuCF{l@WP<| zrop*?#qXs?>oY&AGY-kMrQ#0#&PBK<#NGbf`FX6D=FdNi*SmJ!4UVGq;l&Woruot5 z-0Pu?A9#%e>+*7aI4k~Rt{Aocm{jo1uN!Urp%aJbHxBKwHr5HYv*X2Y3j30Q7gZXv1=B49OAoC(;M6Ks21*jXWF_iKHFATCa>YJVhsFEbFPw(zx zUetP7H%a#cjiHnucwx}hhfS5?!9F!wpH(i_7)tqp7Y61T-n=x7{3%oMFRA{g^|4eA z93H>fITxk;zzYNG^vDckEBCNYkJj5NKA63naVU#J@WPPfk(r!%X2qY~yMU`y>zP?* zvg<0SM&_EvP|6RyFw9TPPna26GPm)be4aP; ze&3%Tm}jMZUJf8uTjb>ViEn-({J`g!cAq^~F=2La4I{|gwjo<7|ZJ5RV6 z%J_j7h8fx0<+?dKKZCiM=c1@Dteed>p7$SkVc^`u*_W?&R+hQS&dO%*t#9ttSKIr%MWPOC55I+GmTK|Ihyv-`s!BFNu@EQktE@SDid{tiAom%VZ z(TvfP*TGQ654E`uTF<*CLR%Q>YuSo;C{aM7s3zRW7IpQ_2JK7mnga z)+g)cr`&b3xzFFG_FcY*Y(z#=#uV++l)iPjg<5Ebp?5Hp@dK}M2&EQEz&az`%V2dBrROLGc|U3y zKk&j3OVv~M^r zmiZ67#)0)ySTltc;|`4P#7a@U!Kg;rKtB_!*9$=sM`aQiCIyd}s5=*KG(Pa6Z@K2N&qKZ?~mSMraJK8pE~euVg3jGc!}?_en730@fby94<6ll|qs;RCX>*54HX z36G9C?pE($DB}rU80f3B9q`1%9ql!HzLEG52H0UR)jJroZmbLgQ1Kk_+enpd3FMq-RFSa!qZyxxGGY; z#!$M?;DsTQn&YOQF0KJt!JcN9W7X?8(`yW+`wU(fW~9b_ARV%zD>Im>gUJAuFZ*N0 z-yBJ0{7kPgl=1{G43Tu9xk>u_MAE6IHE|Q>2Ko_Z*-I(aYYe4+1TPG%5g$n9XjY96 zrUF#6VjX#&g-ow8l=>08Fho+3wI{V(BdO8alM1e}_!mOyM49O|hEks3g~8qhtc%9G zL+YhP(o=#wDoFJjLn%-2!VsBCoYS_<_16SKR$?suQ*HHI>N z;D9GbOs_GN@dG~$><@Q*`MX#(vJc#MCys+3=zjH?USlZZ2YwjXpQR_A zS!|aU>BjQXzL(+iVo#P#uQ8PI13wI`8LDfgvwAu!rn8>9sf<3@H+qesj34-6;9U?) z#ZulKu~aF|ddMeS*61~cGJfEPVQYJ9+sw>ctW|i+?DB%Zw7((goz-X{gRs-xppY@{04nV4RFqH5EKMdSu z=DJYggc&7_bCmR&xADWGcQBOj13wHV!U>*3)nlH%?W~u45-DZ$4u%qb;D;e{*3F2I zw(I6#d;m;k)~=fqy~a?+5BxB6b-#GkBc5~fv8AKnPu*0nF__~O>LqzSAD%TaVM#yu zDs>{oZZ&Rq4lSySPhV_qW*FIMr(mW&FSo z1N)@O3N`7FCjGLqUhQe;H0U*kGJfEPfwjAJpOWj+#f1GxHm`mbeL`5x+vqihGJfEP zf!-t5h^AMmjsI{RroGm2r=N;D=$pJum!VKAsnTu<5|Z#Gk;=`j}<>K(0&E ztNLXtN#E+=qsiym{Gf^dV4dFBmB+O8z-(W6)l1&?V_&=xyn*$@OhqyMyUX~2*YEBx zj4l{YzEmMuIKO}uJgbnbNe_AUhtKp5h7x|@hoL2T&A)N+H?T%$Uh{A4`3-pc+4KE> zJO44D%JdF~5`N%^;YPs_FBYWPI(U{KYxH2(|YYcL{T%Bb<4D5yegOz7+6!t%VX7UHv<6zJ8r>=Y(>@Cx4 z3}yVl4+Hy>vLh)wm9h)z=O%s&*DCv)XL^mHj34-6VBZY(3u9j}b`4{9Fx@-M=rx8i ze&B~8lDmN2Ie2&2jvQ%Ea?BvI*JJb=Lm5Bt!!Ues_@MC{3|}3-YTp0x!1L(6@q@Kz z;5ngAAGeGn$aRs#sF*kvBb&c1lxlMX<3s58f8PH&_Z#$a%k~-4qjJb6HO7h#KjYs2P4`0KC$Nnc!JiSx_AoTJ~H}|HC;Kay;`) z*71tToY3f5&EDYb`^^sF><6y(yiQDqa6Mm?@dUqdU{}tT^z39O&X#oU)Oz;sG~GQl zhBBVuhk zBgpwkVo0SPwp7JNZEV)XZp0D5QcOI8K4uv|@H(dL)oJ^W>mKFO!;^aMKfFEmwmT=4 z@B=>#tbxy1NoG(mR#NL(>C;s0amJy9ANXM)E4uB{ZDxO2*wSr#Z$o^Z)^nd>``+#D zyja2y{4lHuGh?-pcyY~maHNO0)-w(vsIkxBhk<#`>=(|w=FR(VFuR=6Lz8;$Gnn`U z=UkNV13wH|Pw&A#bE+5xrS*(YFl@%bP{I%VFfcw__xQd?_4TH{Eg9J+KEc6I!Vml~ z@K-bHE0!EGMu}-X;}DGJRbwdQ2Ywj1?`->T%l@+M(Jj5Wspmd}iA>NKO8p4tnb`EX z*#GR*X3WI&URzJL^xZD%&HjVNP{t4Z#)0eS|GIh-41nwBlT-f{sI;D*4x`r?Wd6zV z13wIV4(!ERm9z5RwLMs|a#q&*&#wHs%o&l)9<8@MxRKxBoQpF5fft6h?7u(d?7u$+exUV%# zq4+QYiPz?61cm$^)&oBJitlVq+Nr5KWnMC zznML+rM{r(1J_?t#tYnI)jf6xmFTcWmZ(7H-ZPs{>GQ`f;RAlh?n=D=&5JijGUB^$3x+>OBuJpOFFPrE6jxBN5{n6E3 zm|Z2-nvvIirOzF^bp7vjz5mLAO_o}^car<9ye;sI)K6h-HCv)?+-?bJ=^rXz3%meJp>}judJEJ=HxEv>$CtqcsX1`-^ z`r4+inf3gppKki8yz?`D>#yNP{=?v4@b%!9;85^8AQRcATkz>?!5;^I6#NOk4^Vo} z_1Blp@#4e3Gk6~VGp~2r*YtDg9KTM_=8ay?V0zo|Z0+M|ztPJX{USGdIR{c{BYJQa zqrr-uS&wIDelGI~n7-$Y@6C-~&YSSu8|-iNa^^T}^m67n{Brkl#&h81bbiJ>Ep=SE z_uVsn0OXIa>F4sf8n~ty?;3l8@+!y4!_*Je@o|0 zvv+9z8uecdRL|RuUbq{*aCOhyjb6CSMBM0w%Zvi{53-dIS?5mb9x{H+=pCPVS?-tD zGfLN1+USML+|Z3)xQv{fm0nkMd*PPOnVqco{XAM*@*l43i>_(5+jUKV|(;{RO z5w^D1%|?&djUKTvBL6pf#OhwKzkEGnOXp1!vuWct2kQ1~-RPZa{j{v2zR^3C(b&hN zb2(pGwN>jGy>0Z)`l2Le*t1{fM(kMK^kiA~6o@tc{+cE!8`8qo?Rb zPf^x(-RLQ*dx!q=^%N~#Z+i6#3r2zwM3Y{OOht&amnP(m9-A9IHq&03xI#91Y;N?} z+~~2n(PQ(My2obOyy@3ND;kL~Z*KIS+~_^YcsbUr*yueOZ}grNU-3roN!}M5y(c*i zzudhi%jQi}n?(Ma^nu*y$(ZbK%6e*}Cu6wLlaX;j8$B6i99W0Rc0^8lFQQ)3#2x7K zv(b~0of$WJGX8S(WGtIErLLB(l_~uRrFUUa-5+tISD~FZTN}L!cOR?#vPYk-{yTmQ)rPfx zqjz5{9RW6a_YJLl5*30sdiSxX-$w5~_VoMzZ|}acdDE{qPo#R+MH@ZsHhS8r-gO&2 z?KXPaZS=I`x?A_I+vsWc%i7bfY~J+iSrh1usago9gNI%hBuYv$&44t}VYC37LD ziH-fN>%xBo{|BGIpXoA#xANC0h|+JhtnHy!d8r=}KERGLNoN^(_r}MbGr-q>xBo8C zXdE?V2cM~x|9o0GKdGSK^TsD5*nbRNe_U+2FyM-E2lbJ(Rs`xupneH!nLz%K zah2bjIgHMDCHdiek0e(d^8a#NN&a2(ZhF>1{$GtN&2QKiy+nB+Fz+82SH<<6-h(+C z=R79yqw2l?k>KSIj4OBTq*yBS8dn;hBXKzrq4RQdU+~cn6<2OtN-@Gl;|fe~Thr$@ z_vekP-~W04=a@M^glB7HdfuA;x4A!WY``QlWfiuHF?7a_y>QtpJn0FH_YZ*W!x=N_ zDcFB3?XhQj41Qo-72}d#XE_@^UMc?yirg&aMF}fPIFkKb%FRkRk7XJ}A@^mG7v*g< z#uP_#eEV+3F8!_%MqIh~V;A@*(NFLyGAc#C=*p-beGfFRM6X~RMb6te7%MoMC&um3 zb{zj~bQT>>9_l>=6fa?ZNxJs^7@Q%Ish3_!c^d~~1y}RK*t)NE-(WvR`)<6B#K@8B zywoum?+-A(czR*%I@>y?%b>{A=WQH}6}-(4Blos~SNbnwG-aPFcrAD>*Y8j2e$ytP zoU?H-ro64l;ruYNZ^_X4q4U7_z$|(_1wRRJZL+TF?5okMiA;UDjf2tD1G9g5KIeyV zW;7bbSw0^FV>}u|j$WI=I0mYAz|4bD+B=Z?yp4mgg4_9F)cpi02d@XOqbkuup}BuV z4jv93hUO=s8DEj}HV(#w-zD#g=lNlb_C%%!H)}BL2_Ul)18Xy|@1m8ZLW3P&%2L0< z*l3JZoX-y-hmv*ju7{Vh=nrsb}q`C*xYI{#SK+&#f7e?&O z=uN}I--Ex3GWB^IjjxhBCVVLIR+-P{&weiDj)wndTs8Y-IHS8ZaK6)+(s3!{iawb7 zP7g}Ou_EDTns1S-*{;gM$ub)UV}irHt3Tnh$#=;&$@f*`*2mKoJPa9{;5e463V*R& zhI++otbNYL!C1u=y)bsSb-@E8;WD_g!ErjTb#nZn^I#{(AM!R1#wxDpg^_&A@<6F+ z&$+q(P=LA4ou~VTKX5*lxjD0OFjjFzFN~q|zzolZWxD=q|11`$c_i{EGVIUkS%c+l zG{#D<=!NmgktfZ4EnI>8VD9{!xgNQWxfr0X+}!A#xi&?nK5wHjR&qrzj9g217rJ=f zP>y7+)f?@Z@e(-p0Y0j8$^p?7MK-`aWGc#LobZ%^?LH$ zNzBJ59{!%;Ug~*$Oy=oGt@*k;j)CvwZ5)hM{Ll;IcSa6l92ehM#MmwFT*SPW=L7IB zHRB9b{Ll*{d&N$io4`0y4ljh5kKbDgzOb74QT(HJZFp%+H>s{MnD ze}M7&(w;3CyVhb0K0DS(*mChp&{L+q+(u)pFMPOOnvj~i5E}ntR zUK;F-cxKNT=qXd5x6v3Y`Jop^-RqVzeV?tpEpRXG2W?$yfs@fEnzzvyEBT=p#`pHV z2Q2ShdJo6HbMKvy!=(^@#Zao!5({POi7{`ZF;?+jyNd&dkTWKG2G zQg=x{nRn`(?=+@LewfYOl#_1IN%!~|0_jLMfqKiB~FnJ|9a2e#w&Y~J5Rn?UbN zVb9XRm|RzUPuSp(gd=)k)SN32U&l>nTfj(v)2#5qqD^O^gS8;-4PSFGW;pB_L;K86;$W=ehzX`f*CY3vHCGvU!;EP(I*U1molc83(fJv0p^Wo57^^s<7sf!= z>*Rctb$4Vd7iys}U*}<4_!{l9aL_dsU0rvEQ#Q@K0jtje41$zcC4-e2+Sg^77 z)WesfF;;R!FO1x8)|_Bg&SOt{k-Z=sv1r3S%o(@P7%MrV7sg;bz@8rWn;m)gAnv6S zz1Rn;s=kpm#!8Opg)thBfH7K%F!yr5`6kN|Z^AV&dtnB=yJ$mu>RXF9E^3UG9MKEo z+}NDC9xn&jhh)#F*~JLgW+eO2l#4cVi*x4sl^#>(-)fAN9MKD7v@gQ`Xm7D+aEW|X z_Q%&`f1GmBCb}HqH}%GP_4~ePvPV6LT;+i4 zXhVDIpTpjPgRzPqCioj+Ji5D!c~|X2z=!!b#+3T*g`=43iZ;||{u>8l6+iUC*jD|& z6FKVw-nnSxMBho}_F^0JPG?UC{LIJ>#)KCp@0uTaVI-GHcuE9cLv(2deuo*^@4=OZ z^Io)}J@w`sXpEKo&4ei>9x5(T4iWFQGA3@|!12QI}M`hR)pFK|5`9q&TlT{;T9MVsSG$DuFh5S9GU z3#0B|PFZ&`r(CpQC7tWz*YP`y?2KbY-iqHdye+i|+RJU!2ql)ze|ukN-(dgx z($6toMH|{vpT}6q4}HcF>}!5`9{A=b=27o^_{t`5#b4RK3A}dGm0!7H7^C{$d=fjO z(_>f35tDfb(eMNB)0e#lM+^)m;2qV;`Q@!Szma=m+zj@~%0e z7skx*f^#<(fvaer4ac`=qkTNaMq{kxh+Y^!IX;AWwRgFPIj*;_hdJ(ri>JY7hQ>by z{il|OFy9qzhL%1FJ?+iE)fg)|q8CQ;6Y+mIHE5%~PvBga=#AgRa-l9O*TSEoF;;R! zFO02;7UtrX^gjI3zAYHXFJIn*G2OE7%aCt^e-PgmY-msYmdjsq$FU-pImuBocYE#m zxqoKg8DNQ|LuE7(0q>tL{uyxf_Pqf83vvwp z5&=KoTVtO&tm21W7zvBZ7F66;m8 zdGF2loER_%V--L2!Wh^+#kt zhZSw&OKT}tGym4XnBd@h`aJQ!XIlGOn9~j~9yar?miM$UrX_l@XCpC89ce&~hq+W6Zzzplhi4)^GJFfRL(2bAM@1Z4$fU$^@!_; z&!(gF+J-)x&c3H`ofuhTtmKDY6(RwWm0XrJ`&x!oPd zDt_pN@!I}tz@>T0y-W8x=W(!Kw7GWW8h%H{cbsvo;)h-s=O^dEy@r>EF^-g3XZq0i zAzY`n=5)bkeq|n9ZFpiB+|tMzV3|NU83H++O>vWVNqg zTO)p$@xl+z5q)skd{yQ;1uEXp<`?OD6E^lQ%X`gi^w?GU5dARfd`9jk>wHGWrYRqy zjqA(VI2fxqq8CQS-Rsyi#^7ghXP9**9$)(q^EM8~Dvs!dF|e^)eZvt|d{=+B)ErUq zV2Cy}d(q6{6MbgmV65VZei%z*q<}@mT1Co-80;R{jc+BUDzkAgR&hixj5Ffza(!7d z;9}a}#qo-49Fy^nMT@SDgE4u|@jc}R!V$eNW*iE*3S5jlD->QvE@oxnUzzM+OmHOc znjnR|+CK}A_ZWLc3W$IhYH{u%5KExTuEsA|+qcK+QGkam2o0v1#<7xoz5KIMA z$Xs5YGuNib)a&z3Id7veR_-%PmDau1|BUuH?5eca%A$tWS}*aWGc!LqCknbL>gndQbKs zng2+cdgeSb&r#<{W;PDS3V!H^F%n+G^GKQeMemtXexVS5pV>GVEBK)w#;%R|F}Y-0 z$L;{H>SlRm{W})7f`?VdfEgPHV+B9-!}$Jtii7=sl52o_jkK@acdX!tei&o%U(v@! zITk+{eP5KV?@N4}R?gWtq`&zS?HRa!yedxT6##qG< z{V;xd@-rC6-fGYAt*IXHerDy1iKpvR&f92=Rs7HoV=O&zV(ETEjFhP-mTQx51LNB(*YG>` z3iiB>##qG3acx`WO8-6J7RyR7e8|Qv>br-IKT~njtW6ZwSxT-i}y8e6F zO1SUMIuQSpCx916%>0Rl9X95OUYKl-$I#-C@qws(k75m0=EUiGteK4-w@M#k@_cME zZZ@xiITNAO{?fUt;Ts`h{FrZH^Iji*0(DaIHV(!Lj_5azy3PcBTqiG_gs)EfyH4!- z9`bIBp08lvl=hj8gRz1m`e8gOJT}U5;cOgxB)%EyX~P&W#(FW< zJ+pBzR&Yc=jBT~wNVzSsgkFOjDmduAV z*#FD@e}(Jxn2l3A2K&5?##qG>{V)!-huX;ZSh)^dl!xLWaGmRu*MWud=BXPn)^A){ zz*>fK-bQ1r;)s42+xQQ$3vnB`h>a$ zfp5M&FC0Tg~e zhHsJikIaQ!+jABCFmK~vtl)=!7#U~Zl9>CJ?3bAsdUucP-^zKXp7wbg2V(_4^uw6M zZkbpw%8cn^+!tlWgDot+Zv3(m50TA%80pu_`?7EsE1%eRCys-M75!kDjWdo32UPC~KlH;$jzwNYnY@a8i!wPG zd6?#BnT^Jn;z*v?c78K459xP}=9$ic&H=1E);gGXzd!j5_yA?|_sH10O2V(_C^u(xY+DELrqH5YllHaQ1{b)0Nej4>Mrbnm2 z%bqy@gqtT^!4ds1vc_tp;?7umHIltu>Wemieg3b3@zkDE;5nx*o^o?6DmbDaM#g&O zZgLpq9JLkHBBl=;apNRgWEYA|_c=6Bayi9F#Wa$XF?8!bP^+lV1xcv86GkkpV6W}?Y zSoye{8=$yh;{QlEq8~>3xail?{;uw%@o{ONn6^2xas<5W8~eWrpO}&LxlZTZ5{~GH zQS&TvE6v5oxr#PlT>S#L&=;n@2+s3wmTz#@163T+5967sGdNBZM=@U8Q5!Y0SI^-1 zl&LS;^j1&9=G4?F{M%Ejr(9obRj!KHvj>hj;A*Y4z+ouI_z#)`EpRT%MVtHA?t}fv zfgP|hvOd>U9MNwa!-L^L_^z*p;9$f;nR;R@+AOUt0prqvC1AX=cE!P1#Sy(Q2G|9- z+6BJu!LD#bd8e-M-7W1~G3K|%x5RqfsyJel^y5xCbElutuN%4#$Pt0i^1~)R#1w-? zmwv9mWcxR6TiS;CHIn+*k<`xCy&tL9Hmo)H_SoBFK#DvOJ#JNd%wFT>^bKMSM&{Kp zPsaB0RlQzqokr<9#hQMtb1fHR1wZt|sO#Iu!ma<^rGJOqRm!pO@1o7lOFLnc?L#}` zSiukdFh){eHC|i;PoW%19o03#OSxzh$lfz;jO<{n;D>$~SwD;QyEgB;0bGhQ^*2aQ z&7w^xduQBZHZ~5%Dj#Bck65(n=c;?=;r%0+Q*|8p$d!k|t6~)&UbJBxVwCPfI~XhY zq2D;_JV(mRXS`?P9`Gv4MVq$lLo-&<$PUJY7bfqDANpa`arPWL#;{Y*@h#c}l7kUQ zZbmOxN2ZD&`eD>@T#TujUU>|>O2>c|Z5W4`?L#}`SiukdFmfO7hSkmBDSF>g?=Kc@ zLfMDrp16@U#wvd3hf({xv|o$*ldFFR>_r>;Kj{}WK3a{jiXZx6+;diSoCn7FtMkA`ER?Ay#-fehW4^w2y*5Ae!U%@7`K`@w;q{Ttj~E}K zyi@0X*Z=R2{g21&UbO5%>#?iih%&CG)@0K8+Q`Z0`+^5PG>+KBho~_aH2U*;nEHX# zgPE6p+mu-+W?uSm>zXl+jpR6AAG>ZiB4j;oRUFa5R3D?%W?{}{TY5fHW^IeLZYHj>Lc!+MC29gGzm(GO!=)mzoEan!F@uY)``kbLLAX;KeS-y^lJ z$F&ka+!{DysPglQHmnIoKW>ogy^z*9Ay;&BnY}Q!q~-+cOi*q~{R!5bpj@=!^*|dV zJLfv#hRM6)h<@ifP&tpGj9no4kJN|a^DMDZxy;5!W31wcei#{3A4}YQEHU_uucu6X z(Z;R^(tKx)G4UJf_tb~zb*>rT#h5P2oNpQHrRQF4L$2K&{~P#=jjS+KaI|M%EYw$9*Z2F;7AHlR64s&Qb%3w)NJluLyi-^BuAKi@@k8P@9f7U% zfR*HP|FI8^A2#tJIv9Y<`MeG$2vq8U7o}1sfA7>F#}3>?^xC zYU5J%Or*EA)5C&2w=>@xu0!_U&f}`!fquB8kE4@c%l?jCm4jQbDUMeK_w&OQiEk>O z3z75#h{|&+inuEHo*%BP7CqvA_kRq&H&v^?|1qg$U$80Ss`3Lm*LmIRt4{tw!KR3- z%J=7mt7GbOu`U;Db=kUItk>1aYItdzBCdqPCGU#M`JKn?8JXm0L|Lr}TN|QaQ@~Zl z-~4b%uA$CLv^j`b?xD>`EZP8_o`W=BOXP&N`C(&xJ7eCnSa%!$uH)owT)fy|cG`4c zGvc2#wkp2nhb@b(vhh|rF3ZMY6>QA;?Ehfx8OOg<>C5xF2Y#=8XWQ8W?B5yxUTpUR z?cQL)rg*JYa5KL#qo3*P@z;Sx`JDP+Z+{(ll~1a#Yznxl_?RCq#ceDu#eFQUf=vMz zkKKPP#bD2!#Gd+`#{gIIPdEJ(uV35rHFM?2J9YW*facfW3;V<1VDR*jL)T9t>1sQ|1Ma+j{SSA4__h< z4D8guzm2|!Qyj_h?Yr>sJCWgRJ~zS$@9F*EXz+dERb+JKebJTCdHEh_UWr}-YLW9c z4#o-|m*Q`RaeIWm$kEvd{fB!G^&SF>mx7n@x-Hm-*B=KzPG#!98ho{A<6x}dbbc6H z_qFcBP5~CIcpZrmH`#fqV=&$yV0?pD0*qZ}TgTuPnfknqgRz3&`C;Tfe(*~FWsGLp z>w2)?zfUl}7NEyXAic3^V`b52HV(!LuIGo5d-rxv|AE;DfC&8-@%m7J^FI4(WO^Tp zOnp>p<6x}deSR3}=ZvNIPb~d@qSt23*lm{@o>I?q=E3MeXjE;_yp4mgf&=XTjC;n2C8;FW$H5<2V=qmlXt}j{V+0q!`4V;46yET&aqRqQ|=R^_N(ui*>hpXHQEX^a%I3uG2-CwY>5+8e_r>^?Sk*{V=lD18YD~W_*sW z2f_Lgv*`JR^R8-1WHuUO6<74b$ecvxD%#vM$wOq`Vr$_>JU4X?qs;@%*=USaoY4>C ztn@{WB~~Yvn3%bRIpET9^K&C}IPW@cK5wHjR_*`#VPss^BL2hP>i9PJWf`y48|j(r zQDV3FZ0{}f%$TZ}uFOVbtm2Y>7`ZRVy}-_R$M}w=4+ZxQiBaz(5@X)R!I*HHGTxK$ zjh^f(hW53WbkZp2X6W<>j?nu_&&(}~FGRvMG`}G4uv|mnkyGB|g)x+RQ%}hCNI8(0U)GzV z%=ll{o}!$$(HJXvj~B*RY95#x25J3;3z4ZkC3O*4^MG!W59c(J>cRRg6oOi z`JTBRRXliRqcK+U9xse-i92dbtWj@Q4|`(4r2z5Wfy5>eBW3D|F>m8wtl~Y%T>hhg z5?_B5*w5vhf<6dxR_%|V&qDhqV)11J%72mBI2e<$GVkh7c#j`O;S1yl(`KSv{HG@ZvCj8(kH3**ThCwC0?Po6u8x%kAx-$QM{NIi#+NsZ}9 z_Lr&e?l=bfyp4mgiuZV7{LaW>j3fIJv!`)>o2Ld5;%H*0W@-N?qHM{h*^uQJPakn@Gh$ zWHuUOCGYXV$eK#5k;HmQEmdEMb(C7FzEZi3##qUFyf8jJ`ZTx$^Z1#&f9B$ui@1wb zPXC!bXOO!esl5NZjmB8Xd%Q3*XY7^puYl9&{IS;F)?Vy1C|_0UQVZvueknC^ z9E{2Nb;$X~h*wNuA`C|;Y zc7CI8*7qV0NX?V}!vmPdDHm-5Szq^e1enK->|m_oJsEyV$>-{Gy*og?4ZRk%^^teY zV%;!E-%r7Y_Su@&!C1w65=@P*M;p(t)_emprqSpuo}06>?l0Oz=V$P&%I0wgV-@f5 z!WgKYyp-=|Pu^Vv7)L7?Yyw%Akpmgo!I_}Jzf}@yTN@fN8UY% zd#OZU+Vf6htmHjj7$f%AQgs(^vb^Ueb1KhGspLIg7@3FOTkPSOl&=ccVIDf=q78G{dt*KP4kJ6` zXkx(Ei(&V|7^wb##B#UgJ$GZzi*nJ%4*GHbKO*J@dsg!LWBdBm zb$E}&N-&;+d?9*u275I#TvLloy|!U&1^sMBcE+)a_oSE_VO0Ckq3nZ1ug_qgdWL%p zuRadE+GkE1y+301O&p9>yvGY8{S=Y%O?1y41;02deX%GPZRppCQvZd6F}vo9yvGY8 zc|r8%%$pc5;SQAP4=?IzLr%f#!N?BA1jko#K2sU-R;VSJer|LNHC*j5LqKUVE z4m@K1{IlQ-&zjhKD;I5OPyKV}=Ur}A#d{LWjW8bF-Nk&O*U{0Nk7G=!?_M~HXL!+u z`fRQ3jAIq=@xs_1YvUQ$x!A!tCi1r-9}pjO=c17leP+{MY~y*_+0)sBZy`Gv6TXwY zYu@99k#jWjE|YPY!5Y=}w2(d)MH`)`Y0iPhSjl_5FtVpvSM@sUUU(Ykx4PHa*2UW~ zj#<8j#+Yy&{hsn3FN~q;uR(c!@mU=Iu040-JW?*&uqF!oaTr-+tmHjj7@0Q~OYLV} z>hWY}=D&CVk-_HbpFc6{Iqxu{`w+`=-{h?T5G#NKI`&xv! z6uWj6nR;!*J)~G-I*sg%V-@dFm>OVIz10~{LH~*Mr4VDmhI=^lrI=U@2V)iQ@xsXc z4*KTlkN-~#hvCcV?R)`#k{90SVPCsw!@UyPn}6$Itl~Xh7`dj_eh2y{`a1@Ik#f<7 z`wBCxS&&;_r`)ED_jqAU=0D?`rw{&^>NWKQd1a}e9@nhsjlDCD2@bsDn!}yIKjCJ{ zca83u)3V2*eE?kFe*hmq74PxF7>XY`z7%5|DPI*i-W%ijNV#Z3Uo<?2Kc=canF_ zd%Q4aYh;`|*-OytYmRTxMz6<>jmB8Xd%Q3fd#S!~@igY>q47^)4*As55T4;ho626Q z6?LtWYtvkz^`DQNbB_r(bL72G;9QsJ(>dC3vt#%jX0CU}(W!SD*(&(KNB!@amh_Nl zNk0kpium&7Etm_p?E5lupKp@BD@7aHQ*U}pXpEJ-$Ln05*>?t5B2~}$&lmp;{IR$1 z1?XQu4K-9kE!dp7dly_ViflU5Nxo8thFZR~{)_(je z$j&%c@g6UXp{m_NELWxea=ia4j(?M2FWQ7sqlEeb#wy;EJUjncD!-)lUIKo;cOBj% zIUVyC=COuhPDl8Y5HYRvbyKEZ+c57V%M)?Nv5NQjVU&7Ofy9KjRlH^>F`5=*!G`vM z=-Ufzx1LlL@A1N@V<#Z zQ}A&(-MU2fqSet7Kg82%Mx2V=r_l6TE}yf6mJAD)d%!qa%& z6>S3L4>#vPW31#oUKp>9zYSgx+vj$S=Qew_v*sz~GMj7QL$TEKGXGX%)P9~sPW?Sz z7~8VG)^*I1KA;_31C)z4TwiDP&@{$Me~%YN-It2}r?y@({i@ibigMA0J*ueRdgXR^ z9II+Id11V^{~FG(o`3IMy4N|6gZ-k-wJX=~JF+l|lov|_2Dvrj+STjaO#SH6Q(#*!eSjBt%FzTER?s@5) z4#s>ae~*oq$=NsF%f;kdsN&+ ze|Lbn(8f(Lcj0{B?1fR5c#6!%!C1w6{4kcr9srBzZNGNq?+JDf?8diJYdy1ZFjny% zFO1cFf#{Fmc+qD;Uq-&akb^OKzVO}UJzf~e7Yr}J=oI(`xdXWd`Gu8*Q)IG(F~O0% zYu=OSnmv0a0z8KU)|}iIV2-vj^(xN7`gnNFsv4C>uQ68g9xsfi_w|5F`v8hPjd(ru z#2?TT`@D_Dm~b8ap7I_qjDgg2pOyU?%7N5+XP@yzHoeFPMYWT|Y$?@A1MoH!)|f$JGEe)dQ(HIk!9q9zmJ<%&(L9 zc=9&RI9Bl(P@q$DZti{N{z<1izq6J@Y=8 z>!I^RG8+eD1@H00$oV%PbBWv|wQocDg+jb$X5(P2;5~jAyQ+re*0DR_cj&6viaQp! z!hca6TVZS*j1|1c599mqYYg`PNye1>9kj39`>5bOei&o%HP9bHIToJ<{S=g~pF;dl z+Gmm3IOCW+1Cw{fd;Bo!Iiy#@FU-CIc?Wp}`Gw0tdbN3vAI9(OKMY}lw?n)PU*_(wj>xdp(Itm`F zYl>zz8e73_H%2V({AN!JfATM74xO?Ee>Hm(XqkB`d4A4Z)&8i_yR?(`RZIQ&%5h+c4n*ixLj7Ov|0`UN z><`Vp(RmwnqoROZOhee!<-d)~&uSiyVJYt=@f@pJIeBr2_(_e47))IVVzP0Eqf z$Ygy@%B-Df@(9zKQ#l(4V+HT=#3;3`Si>ro`d7N1Rm@sgQs;{GuWYSPRTsa`Q=8vza zFKDGLl*)MzV_{;c0bt`|q^3(Ob-HyC&bhAO zJ$@Lq&m_w=!D>rl5_E0~{QBCj|5%fW5 z-vs>;+JB*Kj;tI3*Z9W%Z-Va{S)c24zANE9ei$`(AYah@f;^&V^TpLKV1EC?)E6WP88t!|C&3y7&)%%&esqD)?bLmyTF=49@u&^EdwzPBufe~kP@OmL)wx?ltc|b zr>VRJ*!W>>nOF(SqSnt*`^gLhL@mdFW!MXiY$7ofBW?v2AWO1D*%URykC_@}0WpAq z=#dK>=soxRZg-#Cb!+PK%J!}Tmj83>bm#u7Zdd*9x#ynK+vFu7WxL#-^bt%ueQernY;8y%H&!>Kk5{*@hJD;Y z_f&_f*YqDpskJrvyZC}baotmC?!l#vC3$av$zf<~e>81a=en_SL*DNW2iI{2-81Wx zM`?XDxwgp}L>xA8)xMTf!=^CnT)nq@VIOzUJ$Ze!xif3kjDPj+U&(qB7|qzUIsEQn zv6-!f1=n#0-ILeH>R2W3+ctpVJ$vFlvUCg|f%{+{XhyOr_y!0}~ySJb*Ul(@m=s}G1?0Mp*IA-<=Y z?ja8PxRbvptB-cC2bet__nf##^a8kP)7P~y;(Htp`Z&=$lm9ikC+}X{xJ<4cF^{x! z9h)|V#_Sdv%R7=-V%x_Z{XJRN(Z)v*tMKIYCqysU*ovkN@ja}I4JFpb_HifOlXo3i z@3?()x4eJt+J{}^Xxfyz7RI`q!?uq*>7KkkTHl2ALC}6-^M}&+rVYL-d|1w(X8X94 z?#b)pk<~}#ooltjqgzMhU2OG5)8h;^`e5Y)r+Wkk*Kr5k zli5ezbIrb!zUEy6v*)_6dz-<5joHuT>aGTT+(Gx`^^x4%rP;=z zHzhV{=Bo<&xP$J=>tmt&ddiJIbNAZp@%c0DV-f5RHa5DS>n!ThGOF7Ie;&}N11`TEwaMXNp6)AUFDbZb!x+HE;h>Kby)*e=qkHoDSeShurCz(j?E5Iy zKNYbt`?;Kr?c+|mC$EphU)CCJqKPW^wjk2~p}ygm{)L97IrcL*^Q z_I+Y)(2v8T-*V6STiMTLeXGZ zcCfyQ_qW~`ePMkQO`A8byeV_XLic|;f2Fv-2Px%Yrc{%bN@I>rFf8w`|Gl?y6F$(V~g@{S0Q)Y{croxRHOHnw#8z; zXWC->-&GejyZ__yugAZ3EcAcJ<0r;X2$yLe=I~q(r)Q(~LH{ROa8j|%{q6qwzq9+V zcR+jX?t$$`^RC#lVB0da5BfdPhm%Sk{QWPJnr|Pf-|nh^dHm(MemDDMTblizo(=jv z(~O|W-#+v8hwS(KwVw7txa5zKiH2;+9sU1hpC`VwmOOjE^**~RKOL#jkz?;gHF+`x zV`HK*Tk@v-*85!T(C4<%BJDw+Ct9;5Pr&cB&xyamsRnJ?U;I1ob90=8W5eH<;5tv% z9$R9zf9HK}_ORJ9H#Vlext4gV-)o;!$8*OT-*2JM&AZ>$Vz2OA|Lxf5@_qdl`fPh* z@m#N_&pm51#kS8~+WNQLXM2TH`aHF_eU|E~uj@aKQsdqJE&429t2(vxJ9&3^X=m5x zE)5&i*It(f%1-aJSE`MxjE+sUx7WR^fB78bmm@XrobOSN;Mc0xWEB6j`01ntEY<4n zk#;@G8nv^bMJ?m@0fz*g-NiG0AFBH+$!Sr&SxN1=(S4))CRnnBy(+z2DwgEa)I&JJE3IJQyy zfWt&@f1Ub+{wQ}5ls}e=L#}=zF$p$4!B$kHiejPF6|oOmw8moGKH!j`$Mf!kk6F-K zNMK(JNh%*n)S*1_L~dZ&PMG64hi}^k3+3B3u>)*P<`o~)TRa(zJg>S zzZNPW6lB3Ox$v;}mQnkFLxNt<<3Rpl@)Co6F5tHcsRl*X;zDtGUn#$M+XCLnKH#wA zvkC5?-}5-IW@6)Cd`?2HtI14QfVmI0h9@{`Z#kss`8*Ef4kFJC*yk70%tAJUkk2@z zIfzDY{zRU|HV2W-J_L4WEr+Skc?W%;$ALZmKQVM$i!%BkX0sE zK-}JPNYVRw9N5#xUO%wk3#PmI?Cw9mgHHDbvImf}y^DL~-C|q7&fap6w+WHOE%C+q z?}xK1XJsw6Hg$@@MCRK_e(;maPs%&d#`A;Y_Lf7+d?4>W5Nmg1{f5M4fqgt4)r58A z1aCm<1#3P}`%c7$@iw!!98%^7c^p_bXFZ+ualf{%S=jvwJ5L@mubceq{z-*p)ZTKa zg86~`75vS7A&yc?UXMwRNRh+$(RRt>^6n z4jujb5F8E`2c`EvD}E+N<}6@Un_i33f-dFASw0Jn+6Np`<_8@-qhn|6emgRPU$3P8 zC3yJi(CK}n(ZGW*4Mg#IWoOO~-WW*DtGIo@A!UA$#X;sUZWd$JvtnP_JferR)_Fq@ z#q9$QDf5FY4ka~7wGJuR)f*L7`h=%SsnrSo39mIwy}BT`bJRZIkTO5W;!sgbRTU3< zze4@!E;`=5R3G#2WRr)QdSw2c9JLQPq|6VpIP|qvNMDxYCGLj0AzItSMuUM%tt8^# zYUYhqzFoSS@TO&EA8<&SA7pXxSC{c%G^fA1HbXd=`(R?m3NZI!&faoJnjd6wAcrTl z-@xSXth6FLnLNQ2nLqVNZcpE$mT`N_A!&Y)#i7)ET&3pVqV_G=?n)plS3wpplgo>o zUEb2{Vwl-m4oUNaEDq$>s5PGk_>N0G*{4~VOd8-lnr)*pc{#x3--z2=4oUNaEDmRu z&xqb{sJJn^VrLPE@~hR|wd|8Eq+Z{o1su1x9Fpb-Ssd^g^<)o=MDISlDEoN*o|ns& z>m`+#6<6$n(Iex>w{SLUZ#g8*53)G)HGZ|PF{{;mm3UXc#k+;ex<;fcPad#|eJywj zVHvfz9K!j4(>0=S+&?|~`9T(kHD5z|O@0H4o$l8RcGWD?zH6KP1&-R;J}1o&I&@%E z<2j8#n+1Sf+x$90qMhw?()=K&&ttsN_^QFy4~-`~@JXxRx>i58JV~ZrZEWW40}dVI zK<5W}98@u*kB3V`SuJR4Wt4ZsU#hyi=`Wqx2OK*3m(OAS{&n%{uD`i1S`@tY#+s{f ztA0A?Ynx!s+7>XMjoSwtQsxI8Jfq`(+`In{;V`&35KT8&9!QVDffhBIGti<&qsHw6 z4k`14EDjeQydXKbo`35*;!Ol!c>9993o7+ZJWIxN>!(ov#PIEBosIQXMC}6(Df5FY z4%G0aZtwZ!zm@yoYxttnRKcP6tfoW3Q41LCk8}0`hm`q276pKSrxTGuabA8<&SA7pXpX>A?q=}?OY%yn(*A?`*~55?^*hot#I76)?a z|L-=M6UIBZj-wN_GhE^mP69~Ad3TeamjN_{#&2(*60Z` z;(9e(Ry=E|vj@jxnwCguMG; zbTa-&tFckk=x494TkM;wvQDuF96I{$Eidpt*YExi{~zAd;9 zDf5Jmd)4xLusQA?J}15|p8DtfJi)c>()&$_5n;=kL^ z6YiD_a^T{j1$Q4>>zx9dr2MkGlzz~ zzYpdc+_zZ{N%Mp(4k)%}J*$^h_n+1A10EfDSva)Wqwr=GuCTNmlI96n9N61km>Lw| zNrg{Wm138!5%{VUZFNEQ8~8Rp>#*gJG*8IlP-&j&O7lj8i8H#x&lBzt)dW8K$T|6K zwAtHl0K1ITmP67!A&bM4D^E%<-TrksQiD_R|9R)8%qpvub8_~apA|UVW=|GL`wb3T z4oUNbEDq#$@?%MJL6P%mTXjFb0dT#tEgahH`4nSmmNm+9NSY^Paj^Lt{Bue3H{9)Y z|J|~yo9BIb)ZsRJoAsgKsU?{qEQh3dLKcT=ngdF%vBRRkZABEt(iXF;Om!8-!M?Gi zIYNj2h`yI&a|GA+`&viH>GQZyJWU*n<1e+~Z51J6Go zGcGT@LhKgiIX!R4pr`1Fy1 z+$HcpahtvU2C%aaIHb%EvN&*E(Gpgp7Fr>V%4t+o^H}}YO?&P`@D202bW*cwhkeCe zbL#k5!UuO?eZSlXFdjHs{!Ygdn2NG(_I%3QOnrF4eMs16oX4STsSCHZ{(`W2VP#E5 z+TEA`OvV+s&A!wMSe*40tAxORY6tzY2J^LOmP69~Ad5ranaT$vmrA+G2L*Q+&g%&ks7@-O*=h z*Zg2ISLm{T9G1^X)P;`^#)E3?t?%7OZp$|Z98%^7SsaKlAffqIqwz?U8d{$>PV6UWG?9p^+ad1Ohcl7T=a4;+OBfPrmm3!I8gE&9$Q@WPm&$ig( z^Ti{~XB`g4Qp)_GgJ<+vIxfxHHn@Jb78S9r$NJH2@%e(wN8DOMn|*24!ol^UbvVaK znIB|v;L0`qrIYJA?=Riien)?4%KRXU!$|Afkkb-8l6>R4#-H3+6diZl(M9nuf)|f| zQgE9+pTZvOEQ7I>GC#=TP#IsNts~U%H_8m?IpNS|Zi+#^jXaqZZ%OPogki~&|N0q6A1b$-uzso#rbnIo}@Uo6B zaGSlWm?U>;nqd`eIV8;wvN+TyYSE>P1aPf25FWg`ELnj04S<)AKPWo2&7My&(!kEr za!8sVWN|1>u40}lrRLk+)(TPe@onk%zv#OH+-A?GILlMcVap+DevrjssP(poQddCy z77mN5wpF$jOIys&d}^%t*5?Nu@4e_dZD-xjDuO%iY&YG>V6Su1{2-^#KK}>#LW&0p z@k|$F2hm-DZY^Hky56>JBgO$u@p# zJlWQsPvPeVyR!j@j_0Dz53)FvMq8t#OI67zY^RSWu{q#2dp^Zkuf^q?0}dVi%jeKL z))TeRyV4US06xEdUQ~oXuACR2FSvK4C-a>)d;1OG^YYn%L(2T1gJ<-8;O8ubslDJa zaZctgag8}P?MuCTg{ml6Ocwc4%;96D0jg1@9vZZ4QOhu(O zdp`C4(Ho+_!OqfhNQy7Y;?Ot#Qd@UoaAhE)YoPwp)BMU6x7qjA%gWhr=w}_a9Fpb- zSsZLV^GTia{h~+@Ty@pXsc;T{YvrQ+Hrni|c5ctQD(IF&()=Kc!^ZIq8NpUnf@kBw zjt!{~*kVuR($c70hb@Ps`9T&3>WMKDf|_I3?zy&WOy#kA3~sZhIvHaL>?|#Zr1?P> zho06C>1oXno+@A}iclfM;x>Ce#aW(94qFaM^Mfo7gHr>k!8zC*NKGxpqN;y&?N@RS zes$tkGJ~@?W@|plx7_+1q2s*~eJ3Ppe|gT&M;*29Yqr-rX`YbNZy&>7vAf>J=WFaZ zJMaq|pKo#_+I0tP=IsLxDf5Ip4mM()7$PElZA3g-MX)sM4t7nUh}s7nQsxPH984@Y z9(49LHoffZd~B{GRO%Uy+Xoy{<_Vb`G@7~*N9|*+=i;d4xA5@7G)CU88pQ1b4k`15 zJPsOzO!P+(*`YDW#DmyKkc!w4jT`}2x;G7*dHaAv$~+;DgNgC2G`iROvP}f=IbB)6 zi&U9)ghHd^E6zsk0}dU}c%3KYahOxZqAyU(Q=L4~%vNJ#5Tf=0hmQVz2oBr_ zQ~Rm_b6rmq@;>t|V16Oyst5ON&faoJnkRJdjK0^rw{~>pC-a_L^#=b$R~hgI#k|*%ozJIqKPS8k>w|W!4>vqYG|j zfwNJ2%OPo=kj0@oSxNoN%GB2CUE3q7$hLs@u!7K7N2oT=%FHfqZ#g8*6S6owdE!Yo z;-%h}9H+InWWT|+CxwY^0pC1&(_Q<C zMbFl{?!a#VTHMA@(d;MaU$wsCh%c@HJJm*P2$n>D5KCe)-+;}` zKH!irKgi=ytN*(8E8n$fI=t1k1&se14>kVo33i_DxP8E(K4x>{e;RF7}^^ePlvMu0$IQEb7q*}awo1DE(M;AD5Z#ksQ5ArxH zuP%!&Wh8)?x0Xeta&+Tif;s!d$tR_S-vIc@>rV)uxV`0&GC#=UP;1TXTI*+5`V<2D zqn@pFR)!_Dw5hSp`@z@SHWj#M_Lf7+{2-6Rf&PKM{6^~owHzH51#SKUOWQ-I9+q+T z@a97@<`hTmY@bu+2VKvq=yOQ^KmR|?ciIuh8SS&L5aa8|nEku#*Acf0z0( zJ_Cf-lJS*h)IUFOZ?AjG{2=SP2l-}7&3)}N$Cw?krDntSS!XnwoZYb115Zh8mERc~ zwGTKX%n$N7Sl=_anUfFCG}-%xk31(aJwo@D5^5|1?A3ToQ2OJXS2YDR&CN>02 zR7l^%dVq-&A%2AD4=|ApIV5#~Wd$hP$()y`+d&{Bg8s~E;PnDt(%FR+V!rF-!MLmQ4 zQO~}pJ07vbh8BzC_Lf7+{Gf|x{5@Tts)a+nSqlg7-s_(hooQRZpFX))6zSfRpONEd zuJ08a@J{xYL(2RhkHa%3pOHQ_ytm_Lu0JEaY)Hj5~H#DYac=TJcrUQ=KTMjAngFFsv{WamRR<8*M#YONJXQb^T zs~?s5+()-QB6B#!Q9Ik`l=(r|?>zb&mjBPm^Ml#Sf$JK36KKm{KR8%XwY{Zwd$iBv zO6x9Crx9FHp;3=iZuBi`Nwr3Dta)teG|t=G>z*<{$hz)hTN|c6TuV01iYhXumQ1ac zX0W894E19?hf8}TZ;k(yR+^dF2OJXS2YDQNjr`T*zV0>hU6T!)tk>kY2DjzMcJ={> zg!w@(hdV?oS0)!9nEZQHBU2w4`TSV&{P&0-K5idyNSGhwaj1{g;%+Fb?U~Qpa_G_tx(1T< zjTsQZN%*@hm`q27tgrXxbxI!MQ8TvUMog*Vgw1n@@UM+wYV)Lf7vk`WuiQ zCC?G2Gl9ux#{WM4cfrgPrbpZFqtD1nOJZzHDxLjmjkBaOq)G5WvDmd_qD?ThlF`TCI|Jh4>w%aJ^a8G-gG@at5Hb4g=pm#dvfx9_0h-0D-U+r`vMLL z^Mp(eCW2+8SwdI^_D4PYvW<0Vu_tc`Sw+Y>;&8wrVV;o3p)|3t;96sjN{xWEXKRf} zvMtu0y^ZXA1mAV^uJAr2%oFlBRC-;Tao603X54j~{mqS=G8&2ECI;JKdmmEf33(hw z8V^Ez2Y5uBh#ral@GV4+wAd3HLgWb8MV(jBMI+*I8t>Na~cHi{j5`-wja#!}Zc&gbyb zsh31ES9Rs|X}{`E@JpL7iHf!@;5PfOT>FYdSaFumIvm`GL)B|KSKxSPHg71t;LhZ8 z5a+w=w~iceE&s{PL63|d-=dan_J_6(idy~X$&bls1Rq>Iv}!q|%oDoqRb2Cxr%Tb; z<#s6=o2L-iAN4FxEpORkzp=F;95z-rR(FkmaODRQ#pbZ(kTOrm<1jou6b{4fp>R-K z1b=bHwMFdywEh#hV}H{B)Bdip;#=OUJR46QO~)JKD|+3fH`#Lp_gQ8J)7gW)&MEVQ ztUiw`t#G!qvE=lS;!10$aa=mOB&$lkg|jX8#3J2Tx#1KddxGa{2_(!9GC5G;T=!a2 zk%4{J{-|fE_`p7De{9$nCeEm*mDOEbQg9y<<_CEkYFl$rv8~r=&r;3Nwt%s3#u?rD z$ekgFg!w@(hi$q0v+6GsyiE;BQ(dM~>?_J#spQE*3!lZlFjb2j4(>z3{2-45`K!rj zZS!4|v)bplzP2duCx2G5SnnD)?Msa_!X8}CwdUpvhFFSg|iQ8 zem-y6VsGa`*jF+e3hqO~{2-45c|c~FJ|tI&W(lz^U~-7G+4mc9NzOjtkT5^U0GXui%YT`QsxJF9Ehg&vC|rZZR4(qtoALO)nn6ssL>+qLjVsY zF3EC8nIGhFu<; zhpua!&td8GlIT*#4|r*NNi-@)MviY$%Qkzyfv1)qjWYHuhm`q27tg3p9j~2U6Ao+J zYtnC?JYav+vplK1WsAK`fJA2#i!{1AlKHa3mP5+?AdkcD$96v^@7?!yzb8kBMM0at zz^*M~XQGpQJd*8m(i*}Si`Vu3aQtF$uMQSpj9z!A@u%wEW7jsP`#bWTVl7A8=al(D z&_~yA%b~5$<3h80u5GNz`~X~Nc1n(GN7rP2;9JNl+Gel0jy_oVz|9Y)d5;1P3G;)X z&*>aYX3V~3r1Uv7O)b^_rM|2O6j-*|n>nTBeO4f}JtU%Z&hdlcMwlfW5+0o$2exSk2jDU+8WO>PdkcbDV_vK^}+F_}**HZtcD9#`nIBHy+Ct zd%M;{e(XY4d4l_pFh9uS(38x05__OI`M_l0vn^oq^R?L*jnP%-)I-SoJ?M2UY_<=@ zC0RghHW8CAq}Bez<}u3RQ0uNmzc113Z>)8XB0CttShm?$y6^GE$$xX+`)OvHU@Ud) zlTe>;76%jzYKE9)v}k(bk1NdBFatXL$;F%NG0K zNrl#uZ?hay<_BFoqgs1Bcx)gX2Ja1ogJMzI<}a{oi`Z3W-B59$wNvH?UA&@wmfrjp z<_FUmhP}=y^MkBD`?|cluk3a{Tw9}8<8gLtO+aFE{8_bW*t?w+@_#{}6XpY%eb(HP zc*@tbsx8%eZ~4&k6cJug^nYEpjOHFz~(W_pS?`))t-Mdspt2IaZ5( ztj{Uy0bi_M*M4)9%Gmbr@e|SUJgFW;d=1ewiv2ED(^3&-WB0_)&c^zjpzp&z%3n!+ zrhX!o6@yxex(|_Bi$Og_t;^W3kM%i0&xd_X?eoy=|4hlV(qbR$bAo=)>vJQ=w9i1@ z$TRKpQ@7a1`kdm=55~f+UFXKz!Dl6LK1g|Dn0E))*|zXDX+G>fh)33`v+Y*(S*Ip{6To2r$y&g*j{uGz;f zH{z9jG;@o6q|YgOJFm|~NSGK4A8$eYL?g1oM^rTJ&wTmJmm_0(x+dV&_Vn*rj80y^ z@#!)q0{^ahgBcTnFIauR4g1)&?wCL7xar-il0dze=Ps!j$iP{ z>EAj>>#&J)kl)lHdE2NL+T+)%*QDP+Eq*HPdKO&VQ`{r%dX(5WXG4ox#_aleQ+xOlB_SNc#PcL_XL8aO_t1w43l;Mhj(0}cr~J&!|iXhC`z zM0sfp*aCg}Qt>6}-y6jnas;b=(4uGK_5p_k-JZw6$9=ti_H|jEeR%O^?f zWS!=$sQ(Er?ki-Zajewdx2R>@KH!j`|de z|JlkeA{#vj_E*4erGDzF}(qx$) zkyE;nk9ywTa!85W$>TuQI&$DunuiQLi!YVm!&}u`a=porXY%Bc56@dp<58`><&ZKj z$m2j}4f1q=$(vwvbAZWc5#;jF%pEc!$n6Z2d!joG?b*1!MsC~epqkkWQ!@=U9^zUcI z&*X@f23w6p3wp^aC_am2)IQ*lqFXz7#_xm78buLRuUDd%z{6LE?y4K@03Lj4;Pju- z8sNbj1E)ly_5p_!-I~Qgw6#;$=r&ZH;)UpY*Kt^o`Nk~zXoBPR0f!Xbn#G~KzjSk; z*Z+sy2XOgjDf1zoJZB%MT!m@#{_;gsI-@rzKPMHVEYC* zr@F(x4NRT5YWdvkU18oBGy8x;if+x~(APTH{fm8>yMet9wa-??WuqoGPtsDWXZxou z&)=ziz+oxWsZrgU#lc@)J6gb8S6j``*6TA-Z3Q@LZ#g9C)+`Rx5qbF+qhH7xmev&U z6+|@ViwYu@sTWddWf5OT#MC3fX5QX%NYbrY9LRNCYG&iJy50%4`-^;LW7%IMzi*DZ z`>4_!$llWIN1EAN4oSK-i$ksX*lNwb2EOA`&#j1>+-zX7vQ?UW&7LJsn{AodTMkLO zHH*WU3pj3XIm~pbM={-+#Q|SNPj{nPzlNWY>c|0C z?1IxHb^?6FW|z&-})y{BmUM!*vc;i%cy<8Aw{=# zXsWng!h45r4{ZH*c>V$(p8EM}^$X(X^JmqkHg6wr=(xtJTk|-ml0&x*mxkhvY-%_Z zp;voG^Pv&F+B2GOW*>0q=wCjE_50UFFRj11E*c5E_Qsm%(7>0WT7$FrHSAeFYg@q1 zKH!j|TRV8h$5QY9JA}jF;y|>uhM@Y}7vBkfK|&IIJIDmz<;PzgQQo zaen!4ew!=nHWDP%W0W1zi8Kme0oR0}d&=HH$;w?M_RUQ`puSRXSs^Y)fQl5Wl7z)mXmS-tV-8;n!d zy0t@(#I;7DzQ+nLxA8;zwOU=twYbfm)m}W|vz6a~LyB(A<6u|N@bjtH+WYPB>b*I3 z9%XQgeSxo=vv>^!2OK)aiR#uo4o0`(r?Hw3g@>N=YOlrK>O!znkO7B|{(Tq@3-X>W z8vdePT-U?y?1I;=YN;(vdv7!6j|w=X=++LNEx!k5%)dMpL6qL&4kImNLqI3eeh>n?D-T=D!->vECUWHx;2l3 z*<)KMMuFb#b?e=tTfxOc3!+4@DU1gId)oqbsy5(|qFeJga9!66SyL>`Zqx;SAx9RZ zn(%_pQR=W)vJHEGAIvwnZ?hbdbZZs|)C6$?R$08PI`piLF7W7xRvD&N>Sb3i*xI8$ zP%bkiVmTz~)+`P-QxI_i?5MRB%y!{j)hL2C``JERc?PJGo!^t2q+7E%RE;VN#0gMS zp{LpX!Bk&pv#%Oe9QKI94erAs@kF_Q9K}!N(LPZA`+`r=~D!R*=efI3a=XvjU{%Vgb3R)s4mhOf);ta-9;wuI-a^;oDqX#0t(KKvzi!)N&!<@V z^{c~T8E{C^tyvr@>#I|YpASzSem?Mb9(Z2Xs@v=<>kCxuyoLdX$=Gfg>-t>Erm^YGT$G*^Q`zPpM7K~n$O}k`)>bI zk)m6(IP_Qg5)0Q~?~CRG4=xYnJ`65DEyt&i4CF3>2a4P5?Kgm(eQ+OAbZZs|uB%l$ z9=|h|(RJ4Ec0DVe8;`Z6Y0rJIYO0}^ma11(yK-ErmKF;8cmD5TsQY0LtnZim0A?pF zE#y@J?_W6}cdX5xPkEc^UfSS3B-z($)sc8B)XX3wyQfu0lnkkYRwH~j( zAgriqO9fkB-?qh`Pw{QO%I#dP$t2x6?end0sI{6_O|30cgNtffwzAgdky?HmZT9vX z!0xlbeVFLfopfs!2bZ~D-dv4+%8$SMRrw826M%{V;5K{e0I-*N_HC9!l5Wl7KsHiF zg3nBHR9HyGLv}sSCQ^pe5eVgTwmM$gMPd=kMfQ z;qxrD*z+mAji;8w0f!Xb+VLKY|E5_vuXPUxm^E|uVc?JPSa*1|+4HGdcZAGhECUWH zx;2l3@jVjTho{l{Cp`zE_gd_&uhK^Zieguxqto)^=H+W%U-!%5R%JYl`-) zTQv?ir0CX64m01L_Z_J>$@=z~$1$!rTCbk<3)*jRIN;Fnd)4=J9tYJ9s5-0Xo_l8~ zzvHv2w835xw%DUJ(1crha}ya#i3_vt%9kY zO1)I7uY#$v+GgJ~wOPT=-g21wS9j8_SsbX`R86zxiH227EvJ!IhI&~?7r4!yI#89V z66LVvkfd9)IMkYZo{<2qHCH|P=J^ePeJ1-Bdp^ZT1G{gt9FlZv7KhU0$K6w(R;-9)f%N&YYZRw#Dgbft-8&g)lqxaMF$2PQgmx32d5yKE3*sS4HJ{-`=^Sd zY46v6=T?dX4k@}di$h=ie0cJ}ef9a_?OWA|cJKK!e!iwXpTaK)cHb6o=y>L+Zq4FQ zns_7>Ua9I0<>z$UWQ`r%X3wWM>ouZ$bHJgafB77G$9kfddRKa~3J5;GeqOv|{{P?cf=IwsPePyP5{pXa>%fR#y`#*09H>u&Z@*>v2hO z0$Chtt-^R?<9$)7;9B2qH#Tla%a)EM@QtH4M7Ort^Qrf-@$bhv(0oa80$CjT#$Plz z_6-?VeeYiy$mkjz8%WD(e&veW?D-UDzj4KV)?quAl5}ephl?jJO1+_r*Dgv0BJhE$ z`=#>2fvX4H@%Vw`6a3c7Mfq*C+1qab@0ZV74oSK-iv!gs5-I~RrXL6|XROx9xbuy`wH{Iek zdp^Zko^lQc98z>^$MZM-Y%MgJv(i0oU?1hFF^TMe^DV@EnmtX{Ka0)0eZV0_x8`xM zk&wgy5J6@mE!oLy_wAY;Lf+FFwGTL?=+-0f!Xbn#aLJepM@`=J+%gY~tr*wp|(jY@tz?mHKCAv18Ug;L!2hRNb1# zVNRvVOidLY&qu4_y#6yFPC>)hu_mJOdU)jaQtF+FK4ux;2YKb+U4mJxq0p-nBh4u51f< z51!eEf415IF_z2%UkTeCP&p}p8FTxE|_h18z`Q?uQ+fNvhX>8^dlKO48V9FlZv z7KiFo<@&870bEgCLXUp@OzTa^JWl*=|1*K&ysba)|llEn6vEC@MFpIcl$Zw z_5p_k-I~W?*b>h-)OEr6_`F?XTJBmuAn$3gj|Gg{2OJV~YaR!y7yRlit8ab{&aM2i zwu>dJx2y$Q%+nT|nSH<^LAT~{sMXI`Pd#(H#(4E?3m88io;>`56YM;Kar=Nn$Ftw* z);tbex#oL!gp!+E=aeWEoj;%vQH0>Qz2(r=zkCjhCl^I8oxl1`@#=vWuP;i~TaMIG z_AP4ZTQ>esu07a)RzEdwZ#kss)-Im$ciiw6>yqq0aX@^V2d?cGUHGiV6@Z6YJDP8! z?y|#{LyB(A$l0-+jMk+M z0@zm_-&)?1=x!ZpzC|mLQ<e)(X3s_P; zk=ly9AAFrfJ~d|_a7fUtUBCPIZ<<|5J`c0muf!gu#g#=_bFllB$iwV+Vm@$Ab_n^5 z&Fasbw+}cZ=+;aQW=~IfxO98k*&Aeb2$h<>kG($Z1ZVe8^}th(gYICmJBnuZ0fz+L zn#aNV>cGuhEqLN3>*HqU9)CHT9)d|vjzV`IO~*#{gFbZah$bFu{;yb{NWe$IBIV>biKdS zXWS7#8h<|w^-b(`o6&zm)o>_0u(v#M*HrUSyUr`TsJ-RTb&c~ml&4D3NabcJdTH&% zi_$-^KkC^RwH_dr*wA8e+}?6X(XCxPew+}cZ=+;aQCdYEE`I#%SF`JyswPtK48#9@i$;0e9T-qZ$ zeEp~N+h+CwhXmc4$D!BAw@0qNUL)Tg+55=SM@~L)TRuN$A8<&}t+^cT5Dix~GOduG zrD|kyA!CalOP>E8@mt320}ctgHIGAW_UeLb_VDVFeY?IzEq%-7P4N?h+2M=LynVnS zLAT~{=$SP_c5L+6jbZj=u!jRnc5<-KV~=Lk0sBwsx6SMW4hgz7k3%dz&qeYz($m{e`gp>sNbqEjVs(Ii%>; zJPv_x&-(n-^XENz#tUeDd)DV?eStHdpXJc?4pyJ>!RlwqgX2Ls6@TDc560hdR`a3Z zP^;O}4mo~S+B0{-5~ z?~B6Yhz)pf^>5_25x2J-Qgmw<&-i_~^VDZW!}aQ(=)7LPC;AWk+08pe$=Me0zEhtU z`+b|Ale3@mW6$BZz2%UiTk|-a>7S8)GjhOZ>NCQJBjd-nsO1k&T@VfzHh(Dnwm5EY zIi%>;JPxvTM>t3de(5()A+SH{S)No_?q5A1WADJ$ei?fQR_~hPxP8DOLAQ2|xA<5h zS7@yn$G|?;Q=>m?&6;cX*|*tKdu?TTMY5cOU6rf2UR+ry7ZJNS%(7-3A#0pLuFzN!Q^DF%(^<5jLmKKs~@1<0q7x`JN-x8aq zJ-J%G`sm~0y#%|gE&+!G-I~e4tU!-+mu^Ljn28j7*{)T$*t2h!UA^r2bvWRVpj-1e zlqRMMTx-lgsgYIoY^@Omw#C}Bhl3p+;Jc3A72byg-I~Xt((Brc=i_cP$$AYf=8_L>XFr3-@?joi#=<*to(xAsy7)xE(IG@8yr(O~bSJjo%OZ`f;6ZoagmqgXs7I2&WSFU|UA|yD=XB`gi z!?Zq@SFqE+O`X@Q`yehx*KZv;;9C9@C96lqk8e@SHv2e@^pDxe8$`5wyb|@oH5uR^(;>x%xxXt1U0uBkfHIoAs)pTze8D!aK z=8t-o47KbV^T&pLVd4sUTFK4D6$Bg-bZZ`m+SF?X+d3TfELA#ei?wgY3EcU}ogs$= z-I~i`+xc6sR5F4q&9@9D53_9n*DE{O7rH~Lm_{80_aQ;I=5Zh=9~t;;em-*S`J8;3 zvCp5?{CrLOQsV@$2bXiX9*YFsn#ZBmy#Tew|1TeZQ2dZ!f7G)NUR{>=uD5KlxB49W zYA)|jO8(Y74(!97?X=xBW|yvQ0kem<&A#7=6L9vySW3{Xc^tU9e&2@f=Kymbf?XYY zw#|N|bBw}78aQk@r0CW>4#e>Jm^_Wxv+;aH?Ads}Hv6Hj_7dL;9?r#vrs&o@4t714 zwOYHj%UQpAt82S$_N7J|lp0sS%CE!0edzE9tG{)sp*)-E-)O4%dphv#sV5H~p7rg4 z@#?kNTOTvndBrV6DTf2D1$I{yAHQ}(fy(azUDFpUMJKQ)*_B;N7p2p!MBiYs?A>W z4}7rlfzz$ix>Es%1l^j+!DLM8Yo;Q0j!L|Fpoe&EDh_sD56#`dX5IAmEUo zTk|-Sjs4Kg+H0lmsHRF=o4xlm8;|nM!#8g|e``mrj`&#e)ioMBxT(WYG-<%;kUCb;5K`Fdw2?G zs~MI*(<7q9l5#sB~S literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..b48be81ebd2a801185ac3d69671e96ada108cd96 GIT binary patch literal 906440 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_subtraction.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_subtraction.bin new file mode 100644 index 0000000000000000000000000000000000000000..386558c3f76873189f04679c754bc4c19e664636 GIT binary patch literal 534232 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ðJ&by6k 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 aZ+_nVEKf3ans4bEAHd;n^$&9J)&Bu=wU*cb literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..cbf224a6b638eb8272b0364fa65aba8e48bcd8ce GIT binary patch literal 601680 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 z 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

|O?Lemg{fF3CEx@voGbOmK@w%`MJ06IcdQO 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..9c36c9e8b5c279dbaddcc46809ff12bbc62d0f2f GIT binary patch literal 2605376 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℞NxRzNlj`osuWeh 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

~`(w)f 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

31ZKPr2sq+0u1+uX9b_i&y9Q z+=OkvTD2f2=O@EC%8)lXcNy5Eo{IKcoYQP^4&e;-B{>bcEc
e7;&Gsfpk#;4SD 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
f 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

F1m84#6MWO~OW>DUaBm;; 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�Gz*GqZkn4Fu%s+z++N z<@#jA)9a-@V%VSZ)uGSyet)6gKRw}n$EVEg6F7XjpUQ_FxOq*o1fMY_�G_*GqWj z*fKZs;eD!duFoA~xwwqaK1-faFRkTyLhesqFP$*{PhKynT>Oph0(|ya@{D?EEzkXX zj1gap_BW7kJXa!j`04-Vc>zBARGvev_Vx^W^JAgB(1U-~*#P5p>Gy z{5qaLg1z#@eV6muC6&>R>6hRGqdZ~0i6`xOIX8$s&zhX@#5KHOMm&ArT$fKHgI|$D z;b3je=*?tCuXw{KPxi-_ey79e-{>!LP?=*3us(;^@ZnQ=4)xOde8zn7@o#)o#vCHg z$T?m+%JWMxDiceL@?@yn@>#4!?`4e=S$QtOXH3a6>ZP^$)b+er^JP6RzH>+S0>Kov zhADYQy|k96+3oYZDE813a(nXm0zOgWEx~6@$usJuwLFX3<4I}~kq<}IA;-*l2|i;+ zJiT5@dyG}&z%I&3@9VEG-92~R-E-z}_W=1}Mpn!%F#h?}%lMLK)Jth4&m3FkWQcyKjPeW&%qDo{$>+E5q&=_PkC5;)BPXb@VQ3n*31S-Y^nG(( zKIxl3&MiRU{1Heyr_B$g$?D zEEuivialb2Kf~EAE??*Eb3x$0$93|Ha?<yPT zOKW)+wZwBb)FdiDKp*wVBjm>%OHsp2@FSjHFC7rW0WsM{dC$En?(6ydCH(*LIk)@E z2guH+kQF1cex78CFL_42bXdtV$Ci1T5AWYXw)h<*^6=Re=7pDHN}f?Kt>t-lL_hl6 zx!XbZIaSDt5gCh3Upr0l=dPGXzHhGOdBECo@U`WD_2gjdBp*dqjL2Agz{PVo!7I<9 zURuZVeEuWajkeg2e{`OMtQeJHCOoHj<%u9Rhr$_Y2VW)^trz27PIa)MZ?msazn`)DgcoZ~}CU{p?`ryRCa7oTHc z-Z$p6ThPBfhV2KQV~+QnN2Bpz8146=URs~em^(g4EGH_HOJG!1o^yER$&j|?bIJNs zU_dXgUCI->_q=qCDtSh|v^Jm9^*Oh-Wc}CLX^Jm-#_LOKd79nc^Ke2=PBZcz`oQ#Z zt{-B4P50lDXVgn;c~0wx%=3DE;{VrFSHq8ZdcAZ)oG0YNF3NVF$IxkSbF|~@#9vt1 z`VWw^|98*$dpxg~-aSC}dZ~~Vqq5+K|G$m?c$GY(UOE}Cm-EcAWzOcq`?ru!^y?Uv z*{0)lZ^}MPo>4EY<+(q0-QMe^{SLC%ONFc$l?AUnv(IxkS1+yQdBS>f^7Z6|VRG_1 zq>vS(vf!0x_NhFFdTAZc^ZAH&W2~~~IZC~hWyPorvjPv&Hs%APJn@{@A?tYl9XAU1 zkB5YNYfELtsH_;u!80(*lh5byXBdSf21e{;cFhS!Lv*GnJw_^w0b!!F8l?`PI-u3q}XbJzXB>!m-y z{~x?wDrCi|T*0Fu{FFSSUi!FS$1}&4``vu_7%1cueLF^FwmF0E?5E@z_0n3NZ;xH~ z*6XFWJIG!y6|!PfuHff*Cf_&L^8EN7Iq`bwBc{VguR{u1F)CN^Q=UV;w2tTb{1>#_ z?<1&x{v!2KmKCEi%x3Y_<0{4{0@{?%zjvQ`>~#tE-B?zP%7D(|smE3Dq%QAA>+(r^ zUd|0-&r{`uo4}~7n2CIb=9XIf6?MpJp6Wm0<|TY;c+)FS^tv=|BYoDr&Cc40= ztQeJnNxYQjP%o|L8FRrb(!Vcm%JZH{NuOKbDF zWj!zUh~uzd%<+tRX)RB)+t2KYC*{rxFEqI#8ThAN4hx`cn z(e)}TMrFe&&!Jx0#Ith_{Cl^)UJ4nH@9CWwm7%(bSDrV(=5@Xe&*AmkE`^N8MDOIO zGE_ZA<-jOUKHq?6@_fQwlX@w^&1m1mAj*Ho$0lr^;ql(D{{F(cM7zG7j&ulYp3H{%)oHPgTB?}(+Bui=&FP%pvJ#(er5vHYk^$GDIA)ys-eIq=F8X>XQK z_}4W@WnFVrR*cGqDS1Y{#3;6o&teTfA_uXy?;yW;{V#b&z0`tdj??G9%|VxKUe3sh zQQ7b%�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 z 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±aqFKWk1(P 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 O$)_+@^{>%owf_UWkz_;w literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..e139fc9713005fd0b83e50c27daa566e511fd82e GIT binary patch literal 950336 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%0Au1X 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�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 lDzCY^xCBKdy;CrL#ku{{!2c-hluB literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..1837ce922c56afb4ddc9d7c8fdf8e651284d4ffc GIT binary patch literal 257976 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 k&HdRqR(ZQVkI1@2;*!N0AGzJL@dX58erx0ssI2 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_subtraction.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_subtraction.bin new file mode 100644 index 0000000000000000000000000000000000000000..32b34f690cc61814f96d20f48336dfdd5217b9fa GIT binary patch literal 279968 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/i32_comparison.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/i32_comparison.bin new file mode 100644 index 0000000000000000000000000000000000000000..4bc8882dea9233a3473218f17e95cabb734ff5c9 GIT binary patch literal 7568 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/u32_comparison.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/u32_comparison.bin new file mode 100644 index 0000000000000000000000000000000000000000..5ba639b3cdad2c48943b58381e8ebf4d2a0ec5de GIT binary patch literal 2192 zcmds%!EVAZ5Jab_LL#Eyh&UiPAP|L~`|0j@v6bv=M9|V}}cV zu*DHqtob`}EI9C)zxd((!yX2w*<4)%t(CYm-Lu9iZRp5nYeGINuvMoe^mV3`ep~Nn zYeGKGrH(kh_P`4`;fxzLb687eb_^J#R(Q%YQd(dw_bjZP7FavY@?=lkSvxJTc3O=q zteqBEJ8cq|S*I0KA4&PjYeV7(`ufDVhOgzGg>^U2T8rI-Ujl2nX9sH;*TGuGb+CRE zXRLF*BkQq?yoj|tqr%#0@5nkc-Q%0i-qO`OK8@~f@Rny-yzRI>^Y1e)@RoZPZ@XG% r^br>~qmRV6Y0s8*TCd@M_e<~|9p3CGE^lSm!CcnV;c*%F-8qmbzd$Qz=1jtHxiqmUpJ+rfqym8S(n zf&5|+f98*5gGI2Fhs_dAkBwi1^Asb&iv^BZM}CxDu1KUbJt&Tiu_3G+Tf`;8TFc6D zuxIA(x!r2bnVECXH+SpRR;B7E3YvR9=NyghobI{(z1{b|#u&4d{`)=?o2q$_xz2o$ z{BE{{L;(hZ+??ea+fyj`wc9?$$pmb!L%{FiQgyK9%n_nr0Ecer+WY#sWY z-L738U-zw_`U}@CkAL*af868Ru;R%H?CbC=l=Vj{}0zLk4xYETMxQ+dE9s9`G4!$}u3a7vv~T?<*DjB* z_|7l?vul^f<&Bd+bnWtZ_XqkXT)RB}W#^c6p@pB)6AGI#2R;d8G3sZyO&r1NCrNax9%aglO?WQ z9_c)(xORD@^W-J2T^{K?Im5NfBb_JokIB!M{7C1?Pq}t^r1OL>8Tt8=AL%?f%eBiR zohS4U&d-s`A%{=<_m z{Gw}@$B%FNmDsh*Bb_Jo1?T5We!S&3&iP+myF5n!{m*~ZwaX)&CzrZ*d8G5?*Im0j zKK7{a?7!waeqP3rpYa+U1eXllQuI zd0g?GUrt=RJkojc0oN{%fAxX>hg`cnes9l1A9n5Xxcd#Rpyy3_r1PZh+V1FnYd$>j zTT`^C1L+TyY5r$?q(Y}Zl~d0GIp^7z`1UP9+a#gxaN|G~p_Zd6QpeA5rVc&2NY$4~9}68)1Z zraV>-{NSfuyFC8&r+$xWzhcVcpZ#;?Jl8IdcO5;p%(cto@ed8D)+?qwUfps3;EE}a z(d9>|wy8f(9l!nMn_lVK8oGu z+U4=@fA0NMs})loU;NWMf6cYaJTSJH1?#gxZ2^rPb1r<*LL>JU;Zy&=62V1_QMzd+n2cAwVi#{U;h4I za=U9g`>iYg?k~9AwVnOB-M{ojZg*{Gzv30$|H|#I?d%6`pZfy0ySB5x;^iOca=U9g z`}Mp2VHdZ%wzD5w_Lk3cyK6i9Z`}G9w{p8{JNuVkdiH0z-L;+lr8_^oliOX}*=czF z8E$uNXaDw&w|$!1UEA3&dC6aWirZb=*=ZPe1Gl@jvm3K*8@Ic*v(xn|x6=T@RiTwC&^0n&t@YfFA+%Fneue#U*D<@ZMam;Si# z+5O3n+uV`AG|-x4X8p({=1TZg*{Gr|aI!xZSm#ovxGT zbGvIhJ6%^_&h4)4>~tOeU%1`1ot>`Rui$pqc6PeXzmnTs+u7-NVI{Y_wzJdk$S-ia zYdbsr?p)06uI=pfJN0^QcWq~<-?d-lcGq@x`W^fwZg*{Gr{B#Qx4X8p)9>t?xZSm# zoqm_y&Cu!bqH8-l{f@td+g;n)>34q(x4X8p(>UQ$Zg*{Gr*XwvZg*{Gr*X*JxZSm# zoyIM{!R@Z?>@?1~jN4t?*=bz#Tiov2&Q9Z~-{yALc6J(fZQyp-c6J)4{Vun=wzJc? z?h0;qZD*%(;JdipwVj>DjaPHKYdbrQGk>4kUEA4dT>4&acWq~Aqkqx4X8p z(|yFpx!tv$o$fmt-0s@WPS>k8x4X8p)1Ph5&VFaMowAd4{5xaJ1MQbkbDpg3?&xFY zKb^X7D!j5@Pvzb8ah2EWKTvrb|34~6pRWf#UkX0owcztr!RK?jjn;pWdBAF%`d8)D zzbdExRXO#q%Bg=R**p|Eiq&SLN=WUh6+9^ETk#c=~}oRqKb+ni_U1IEuFUfzG zqB%?d-@fP+hns&gw%z=bn}6bL7d$_m>^V8M?K!#Uq_f2|8|r@NT)z0n z@sFMDfoI3I2cCU^=0TU3^)w4w`mO)bdYS`WVxFKG(9-tA@h6TuTSBv+r7d|Tp}Ef` z<|NI0mbR0}P9Af%?N5zu+n?J0l(U`l z9sicIZOz8Et=ZPh*(x;4S^nE9hbuJ4xy0P^&9Uv4Z{G4vXInwDo2B21gDYrmbBWpa z(Ac)`p?wcI+iIHCEd5qLxcWh7J4iE{rS0H14$^$)60?D3GfUfs`#0S0Y)5G(v$P$( z?e#m9t2@5xY|HK*+m_wE>~3e< z{gtt8_g8j*#o1Qv8{1axTeZ*G4%{`i9k}bjUCy>{&)BwZ&$>O%_UN5s+oN|rdZ)8( z+C8>y+P!JFvz@qOY&&tsi94LFdHdMbyuEq5vn{3B%JSc~w7Zn%DwmjDyT-O%^vBs& z(kx}^xAOBVKksb&ZynqA-@5-+XIn$FlcnF9&#s}l$tC9S&av(A&ci#M?TVYmwkvMB z;wEQ1_UWHgWG1?gMoQD`Y6djsitLMgXtLIkF@wmN=?VZ~@!Im!>$1Pv7d%J13ZB%r3DL%v4xk(W7B`O`b8fEu67%hO-?zb8I_y=CL!K?TWL;wkyuM;w)!7 zeD>IO`0T@HJKGwXDJ#E^HRrCOc``b;&KukIpSS-!XIn`#WToHAm#w7vF*;YzAKP}F zzw3NwTS_xyrQgz*FQs`gI`=Oe+nN_PFLbsOE5^1HD^9F%woMm}ZJRFIbdj??`l_+* z(N{hCDrZ~w>alIztJl5S*$%vBY&-Cp1FvzmRj(V{R=sZ3>zr-(8^*TXZ`l0?XIu8h zv2EEKm%Y*1c2vi<9n~FGXM2HW!ODNz3$+($4venZZywvWym`x;o$V;iewBVlFF8tc zU-TRBma%QaTQ`W;ul z!`Y6!b8I{E&Li)1wzZd!ZEG)Id%3gSd*#@6@0Isn>1-EYHMU)R)x}pi+imY2+irXJ zZSQurbFLZN&bj8CYn*NSrm=1NrtO=Y?Ig`+mHmA3+LPBhTe5jfbLheczgEo0mIE$g>9+XFOvRr)>f!3SvWipE?EV_UosFF4zt>&CV{*X_B^*)G^R zwq3CGg00SW^T)=vn?H8*$DGZ6Vr;XYuq3C`Z_2i@?eulBRodLo$YyF4^Qn=$P%i0D zwQHy6xeDH$YMUwlWU8G_wd1MybgE7BIuoBK8cnv7sdhHij_ss>I@LB){`IMLZ>n9L zitkLdX`W=_^P0v~d%)Yp+($9aFWze@M*YRy$Ktr&)$HQ9esNsy>R@qPZ)uFbIIdqD z*DsFi-SuE`T)#N3cXhBhuAd#(yK&{@`_jcbY}b;#c*@L;{^>S9SC8gR@t$<$)N$Sv z?@3oq9p_E)o^<8Zk>1P9-V4_T)cewvsrRKTQ}0VxrrwvXOua8%nR;KkGWEW6W$JzD z%GCSPm8tioD^u@FSEk;Vu1vizU731cx-#{?bY<#&>B`jm(v_+Ar7KhKOIN1em#$2` zFI|~>U%E2&zI4S*zAs&wdSALS^}cjv>V4_T)cewvsrRKTQ}0VxrrwvXOua8%nR;Kk zGWEW6W$JzD;+?fq=Lek{`T0S|@_p&@9nbuH$@%2_()sz4`xoy?=jTh_F5Z*Q&zHPi zyf2-fFC+uZyYqyO`T3H!i}$4S^M&rh%lD-7^My|K@;&MNe4!6nz9*fZFLZlZz9*fZ zFQnU*?@8z93q4|5z9*fZFF)nl#rx9v`9hbD@;&MNd?7urd`~(*Ur5U<-;>VImzTPB z@t$;kzWj`97w<{u=gZH!cJZEce!h^NSH35mpD(24mG4RC=gS4IUA!lqpD(20mG4RC z=L_j~<$KbVsrRMx^JS&u#e33~srRKTQ}0XX=L=M$>CfD$-ykPGxj*@FoAYzO zN!+jajhgjyzg66?`0bkYbH8EEk4`xHGdJ;D#_fC!5N_wcZQRb+1mSkRHVC)#HA1+Z z|Mqb^Uo(W;`EMb&^EE`cov$Ur?R-rUZs%)@a64aPgxmRABizo{9N~7p_6WE0HAuLf zuSLS`bnUp^)r(t;gxmSrB;3x|DB*U#RtdNBHA}diuU*3Jd<_$B=WCg8J73d;+xgli z+|JiH;dZ{(3Agh#Pq>}0eZuYhH=W!0S}5Gk*F@oVzBUTC^EFbqov)R`?R?D?Zs%*K za64Z^h1>aBD%{T3RN?k=Z54O5aQ5PgGJ9Qd*AvIf>sfhyArt+{{kNUE?oId=V~N>( zZVeWm&$Y|Ho#%674(?ZsL1y#0v5504KUXm}Db{Y`_Hs=ZH#Xt+VysfE<-+ZJZ5M9m zYrJqfU+ab2`I;}>&ewk7_Hr#4xAqIS^R-~Oy<8i{tp&sFd~FzRFV~83Yr}9mUn_>& z`I<4@&ex9NcD{xTxAV1RxSg*l!|i-+8E)rm%y2tjYlhqTnls$a*Ph{az6K4q^R;NW zov%s5?R;$-ZZFrWack3XJ724Y+xZxb+xglx+|Jjq;dZ{34Y%_(ZMdC})wrFnal`F= z?8fbU%^Pm#Yu|7?Ujv8R`C2&K&ez1@cD^i z4~t{Qq96Wej~S)+CyRULQ&&6sYkk*F=dn1Zd>=i%HXgGsjwy>eT^v&u{jfNuEc)R; z+L%&$Z$IR^NdIc@n6tQU&c2t<^Jl%AXWm=qyqnVVXf&*JBhqqR2F~mCJt~jmuc=&G zSApl3)>YtKT33N{XYtKT33N{XL4U?`TX~b(g&s7X>nheSoj<*v zX|aCkyqR3bbbe|b)A^}&Oy{T8F`b`U$8>&b9n<-#bxh}{)-j!*TE}#LY8})0sdY@} zr`9o@pIXOserg@l`KfhGsXr#xF`b`U$CT#QPOWEJtY11mwT|ih)HHO3>rt?$ln9fhFV>&;zj_Lf=I;Qhe>zK|@tz$Yr zwT|ih)H&;zj_Lf=I;K=Vr`9tq)-Ro( zTE}#LY8})0sdY??HMD2Xr9!`;2lG##OaAeDac((Y>J_E-nunj(gp0Lc~OBx90k_N)Lq=9fQX&{_S8VKi-2Ew_dfp9KqAe>7Y2c~ zFz;Dwk~Ac7|B3m0KMI#;a{r0>yzT6h`%gG6McRL2KHrbR`A_aYLE4kJ{{(3u;{Fq~ z-;ucg1ZimE{uA^0eiZKSb!$uVevsFir1wO`{U>N2HgW$6(w@ZqC+740DBRyWx&H+1 z|0M1|LC;Hz`%lnw@Z$axw6B}E|HOR0ABFpSC-Cm-{k%i^QPE; zV%BeR{|S1oKHq<0)^BqEiFs4(KQZe!x&H(`m!I!HG3!VDKJo8$ZKz$p0N;zRCS3@_rHhCikDn`&smx+F;%4CqMu5ub29Na{r0^yrolP zdjE<1Jg4yK{U`G40*(dj($bYwl{U`F@xnFetllxEPzl*~D6Z!8bN&M6MPvpP5 z!u}Ka?=-E!Grj*r{<}`=@J#PNk&gptEuQK9C-QN_rOrON|3p5{SnKSQ`%mQK5?YsM zdjE-h93$*Mk&k<5eV*z4C-QNUu>V9puKI1~Ke_)zJ`UU9?34RX~``%V`at>HR12ar}a_PwqdFkNZFD?34RXVAUAJTCCbiHcx^TM^Ao&Icd_VRbywdL#D12Y;yIZy4fNc&H4F6}?TxwQWT=hFTY zoJ$%3=aNRixug+rE@=duOBw;^l19L}wEqO>(*6^iOZ!i7F6}?TxwQWT=aNRixug+r zE@=duOBw;^l19L}q!DmVWv$jP@fnSvjCXUprAEN_7BALdTGRxbM&Pa`i<*G6C*`6h zP~MX)Y65g2p?kPRO`zz9MNPnswL->V#XJuitL63Ndh^tnZJW#I&Nn`$E6+dY#r+mF zflXz9l*etZ{}wd?>JGY2$$L^RY69i?B=1SNs0oz)BkxJMs0oz)BkxK1A43zs^QOfN zt2}R7@ywgjbF1RKDXqgJ&YM;|^QINgys2CNMw&ORc;-!My&ZAhwBngJt$5~5E1r4N zif7)m;+Z$4^^wGR(~4)_wBngJt$5~5E1r4Nif7)m;+Z$Cc;-zjo_W)XXWq2pnK!L? z=1nV}dDDt#-n8PGH>Gv3#Cg+-XWo?7Jrd_lX`y^^-n8PGH>LHqXdcy#LEJp)Sg)gX z!o+z~T8~YfH?4T)O)H*xQ(6Z~oHwQQrNnttS~pCbH>LI6#Cg+-XWq2pnK!L??vW~< zdDDt#-n8PGH?4T)O)E6+*_Mw1NgrjpXnwsSyW{Rpe%y9ytT^FU%$v^oP0pKEPR*On z`nh|e@z}j$ihHD4zsY%1TK6xXH=XsHoHwnUnm3*Go18bLb;$C0(^O5{z&w5 z^Q8Rmb#3YIbzi6R8-EYms5L!rnxD6H`#U{vnxE$sK0R-mUl)XV)BHLj%$w%d9a_I| zdfqg@P6_j-`E^a0H_fku!n|pI-4y0c^XsfIZ<=41g?ZEbIxftc=GXmKy3ap3Z<_y3 ztaSFtdDHxNMVL3ue}{y5)BJZ!m^aOT=Y)CF{C829H_d-Xg?ZEbcUPD<&3~tbdDHxN zU6?n`#{t5;X+Cba)b+#UylFnpSnKSQ^QQT@M3^_t$1%dZX+G`|=1uc)k}z+YkE?`v z(|jBz%$w%pHeud0ALj}4run!~m^aPGk;1%bKJNT|*AJ8PrujJaz0N*4Z<>#5uXXmx zdDDCxEXDd*C>Dd*C>Dd*_(N%N*WUYa-MT$(rKT$(rK zT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKT$(rKoPL*Q z=1r&g%)DvIXXi}|BF~#HY69ihM}C%iQ4=WpM}C%iQ4=WpXHgTNTL=0rmY=0w)C3ka zfucU#|DGDNZF6H-cmD8u)$)9DUfgd{6L9mUvt!*wO`xa~dERtU6DZFodERtU6Da#f zo;O|81j_!A=S}}(XaXeuO|5b95p%8CWUA&p^o(h-&*%HhAJYGS5B;xOQO=khwBt#6 zy)89Tryb<~wPqXrzx;olkLx4nbDF#VZ{1GTh0kgGRGeE!Xf`grEWK>bE;q}^`D|fx zf2;fZ+`2-uaqnIA-c@sUi`l~B3R@Xht~+%4^W>lNs=KbbYtBAro?~%^t&DT)5Y7I5 zH{N&SeRKAn=$?Gb*`i+xTN&rpDVmM@r)&P{nmOzC&p!P*Y+)wMG=4?0a#?HsB z(=_YzonQXWFVERzb+X#|xHX$*eg6LE{{H9Y?E8Q9{lDsb-1<$kJ}>_1i+?(2@BFnp zf6e*0wVY;sHr}!Ejye0Y>wb2f^Kt7s&H6m~)+gUOXa8pX-_Vjgm3&<}=X1K=^K<$O z*MH&qIlF7at_`Q{r>;HD=HlEMP_w!Ju38Zat`3pTB(QFCU`o#e1H6 zkMnVBL(Td;cksD`bM_AGf~Atk0`H_o~m$*$c0` z@H*$?){mO?S#s5qtLE&bpSYAHE;l!E`}NM}^uIgrk7f5SyMNB!e*Nv&pSIh=R$e>Y zT2r&RfA?#@`!)KEpIP-8m)os7HS6uT2LzV-L5pR+rDxZ{V; z$E|xc>$CPH0kNSvM=JudrIvpR=nl)AGk93dp+9G;Ff;PU z)fLuLSk?M-b`)k6W|Vp{O20&n%}RaxSzn2(HT`j2g_)K=E>T#fu(<8dnJUaGEE@Q8 zCJM_G77zV7Q-zt4Kd!E@p2DiupR=Pdt1z0-_STtE`Xy@gy>Xir)>l}q>Cf3!m}&Xr z5`|?7i`)L3slu$nqJckWqOeS1@z9?$RhSw1{KWC~itFUO`&zUGJQ&>Fo=S&r5M*g_E!g>m; zT7S-t!mPrKQZGj7m#EQI>eJ8qN?fh!kLxPTwES_2!ZL-$ZGX;GVOC+$z@IZwSf;Re z=+Bud%#8eTb%pg5R<-_|9feti8Kqu~(l1fNwEWjkKkF-TwWdF=t1#2@$0Z8O6c)Gr zIa7tvW4+#fi3Wa_C@fQ0JoM*G6=p{MxVpl63aeUw&W^&Y!i-WcM(LNRk$As{%?j%) ztk(4B>?+K({BeoGGKIx$f6i24R$wPg;|9e zrCyBEFHs{?>eJ8qN?fh!kLxPTwES_2!ZL-$ZGX;GVOC+$z@IZwSf;Re=+Bud%#8eT zb%pg5R<-_|9feti8Kqu~(l1dXKD|!Xtp4d|eI>5e^v87-W?KHZL}8i2;{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D z{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D{HB-D z{HB-D{HB-D{HC8N{X+Ne-Z;8{_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF z_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF_cFSF z_cNtm=>FXsw^?Cy|L%>W`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+ z`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*$y+`*%N6`i1V_hyLGp zKcoA1Zyepfdl}uodl}uodl}uodl}uodl}uodl}uodl}uodl}uodl}uodl}uodl}uo zdl}uodl}uodl}uodl}uodl}uodl}uodl}uodl}uo`Kr=QXMrZ?q7C%qaC@lzxdCJ*7VVtgpn?n*O-1!c5B_mnbY# zSlssKOciDo77hG46NP08i--Q4slv?2A6HjcPhnN-&)HF!RhUug#VGv}HLBMC`|f9b zC9c-=$8{BETK>31VVT0>wm)a8Fsra=;Ln*TEK^uK^yf?!W=8(Fy25%2t6G1~j>4?M zj8ZQ~>6fU{QR>sr`bu1_>5uCw%(VP*iNZ34#chAiRAE+O(ZHWGQCOz1c<9fWD$I=h zadn0D6jrtVoE?Q(g&Cz@jM6VOzp2!xpV9oLH;(2vy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8J zy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^Q8Jy^N5T z(fp>LDg8qC?+yR&yPwhhyEl&R-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P z-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-@T0P-~CMK7pl*J zQlDN%_333)pI%1w>19-(UPkrlWmKPDM)m1sRG(f(_333)pI%1w>19-(UPkrlWmKPD zM)m1sRG(f(_333)pI%1w>19-(UPkrlXG*`&@B52FeOmjXebK$kzZr1)omb=Ow_fG+ zd#`f(%~v`7?yH=B`&CZA|0<_3fXZncpmG`usGPiJW^%}9^01KtC?YW4gbz%Aeg)Sm(U7d0+;UaJ2Kp12l2J09^VDrwDkA{@C@*{t>;exw}3|jJ%0jt26#Nw^QVBDkseiIi> zTfhydKLh$NYV0{F)&HK8drlVhuk${LuQm1fF5sr6$0vYifX8h;e+sw-JR0cv6TmaT zB7E_&VS{z^hiz-vQhLZb1DR(0}y&*pH?9kAEEhxTt@f({p5MJUvUMa(bRj z<@8LM%IUc>mD96jDyQemR8G&BshplOQ#n0rrgD1TOy%^7jV9!=%+Oq$B+xip=F{)-w9JS)}z1J6G2Y*GI@?}PYSQ;+WgZd!VL z0(b^^+}87_fLp+$fu27BJOex)>iJW^%}9^01KtC?YW4gbz%Aeg)Sm(U7d6)ZNUHz! zKU)8zqW*Q>2l2J09^VDrwDkA{@C@*{t>;exw}3|jJ%0jt26#Nw^QVBDkseiIi>TfhydKLh$NYCLgVs{bdBKXJUMf1US1e66X+cL6soJw5?E13Yf)`BT6x;L$+O zp8%c#9uM{WDd1+L$JYVx0baFw{tn<4a0BYkfc~TR@1BwBKY1p3rl^0N(|dSoJiUvj za(W+6<@8RT%IUp4mD9Ur*e8&Y9g8f%YOe=gD*OJrOno-Uqza)bn=%H!VFr0XzddZtM9| zz%Ag>K+m55o&g>Y_53N|W~9g00q+4`rAm^nuVsC80Jne}P=5yWU(~qm`_kvT?fbWV zzqtPEybt1QO+CH~xM}I}3E&yvaa+%y0&W41273Mk@C@*HsOL`sHzPg14tNjns@3y% z0Jne}P=5yWU(~qxds6*h{Jo36SJc1G`yjs7)Z@E=o0cA*0GN~JOey#>-kf_E#T2W&z}IE0Ui(a{3+mOq{r6*?*U%5dj1aJ7H|XV&w&1m8f$0w zPNVVv+Q-)B`=)IMybpM-spszkZd!VL0(b^^+}87_fLp+$fu27BJOex)>iJW^%}9^0 z1KtC?N|hvCU(5RH0B!*{p#BW#zo>EK5$W?CdF03=#r0q3eGp%3>hWE`O-qkY0M7uA z+j{;Ka0_@e(DNsNXMo2;J%0+g8R_wLzi_t+j(@ADf1US1e66X+cL6soJw5?E13Yf)`BT6x;L$+Op8%c# z9uM{WDd1+L$JYVx0baFw{tn<4a0BYkfc}dbTQjNtw`N2l2J09^VDrwDkA{ z@C@*{t>;exw}3|jJ%0jt26#Nw^QVBDkseiIi>TfhydKLh$NYE%wO^fSZ;cp8%c#9=G-UDc~0HXrSj$0M7uAhkE`La5K{5>wxzFuUb8S z2XG6x0rh7<|3!^kzA4rJE#JK5n??QWybt1QO+CH~xM}I}3E&yvaa+%y0&W41273Mk z@C@*HsOL`sHzPg14tNjns@3y%0Jne}P=5yWU({G}P^$kG2Ui>{>R;!55MOKR@m;`8 zOOHG5^Idw^H1p1%XQ1>Au8Gob&X#=eK7 z`rr4^zK4qX*Lfer*P42K7jV!x} z;8m;V?*MKAH=zCu=)b73`a!AwS3kJ=!J__k-UsourXJq~+_d!g1n>;-xUJ_;0k?oh z13iBNcm{Yp)bpo+n~@%02fPP()#~{>fLp)~s6PYxFKQh8hE)Ftzj5#zMg8l%58`W0 zJ-!RLY3cC^;2Gd?ThE^YZUK)5dj16P4DfiU=T8AQBR#$jcn|QZ)$?}%w}2Z^e+Kkl z)Yx#pRR0_9-*A6X|2pr3_*zqs?*eXGdVB(S26)`o^QVAYz@velKLI=gJRa)#Q^3tg zkFNvX1H5YW{2jn8;0Dy60sR*>j@~EL|Iz!7-dEJW&if#~*3{#>fSZ;cp8%c#9=G-U zDc~0HXrSj$0M7uAhkE`La5K{5>wxzFuUb8S2XG6x0rh7<|3!^0Uzh5C%h$Jjy{Lbk z_d$HEsmFH#H!VFr0XzddZtM9|z%Ag>K+m55o&g>Y_53N|W~9g00q+4`wR-*z;1+NL z>d%1wiyAN7Bh~*4_q=dVQU5ycgZNrgkM9C*T6%l}cm{af*7K);Tfn1%o<9LR13Vt; z`BT8nNRO`r-UGa9_52;cE#L;!p8@?BHFkVes{b8d-SO3;{&n65@wKKN-v!*X^!Nnu z4Dh(E=T8B*fJXy8e*$<0cs$her+}N09$yE%2YA)$`8$AHzzwKB1Ntv&EW2B(|7CYC zySu1=o%ca}t*OU%0XHo@J^?%fJZ|gxQ@}0Y(Lm3i0GTqh?}PYSQ;+WgZd!VL0(b^^+}87_fLp+$fu27B zJOex)>iJW^%}9^01KtC?YW4gbz%Aeg)Sm(U7d2Mxlj?ufzE%5*`qz0M#Mhd7d>3%j z(&H1rGr;4vo<9ZL0v-+Y{0ZP0;PFt;p8{@1dVC%59^h50=kEY+0XLxj4Cue8ao{eg z{tw)B;I5+nb>0W@wWc251>Cgs_yq6_@VKq#PXV`pM*}^70(b^^Jk;~2fSZvXUkAJg zc-89pJAhlj4X8f@`Y&p%+auNgx;^Xm6!ow3K8UY1_4qE}rlrRxfMrR?pu7+yZVu{Ta}IQRC4&rTTyL&PVSo>R;!55MOKR z@m;`8OOHG5^Idw^H1p1%XQ1>Au8Gob&X z#-`m;{cqa6X?IcoI`4z{T2qhj0&ZG*d;)j|c-+?Wr+{0)qk*130Xzdd9_sm1z|BaH zuLIr#ylVCQ9l$N%2GpMc{TDS(+#%Kfi91f*QPjWA`yjs7)Z@E=o0cA*0GNN zK>tOJrCq81mv)zSi~84jAH>(1dVCjf)6(M;z%#((ww^x)+yWjA^!y3n8Q}3y&z}Nr zMtXc5@E+h*tLN_kZUHx-{tW29sIhC8RR6o^Pf`Cm?}PYSQ;+WgZd!VL0(b^^+}87_ zfLp+$fu27BJOex)>iJW^%}9^01KtC?YW4gbz%Aeg)Sm(U7d2LXUaJ3 z2l2J09^VDrwDkA{@C@*{t>;exw}3|jJ%0jt26#Nw^QVBDkseiIi>Tfhyd zKLh$NYV5yNs{j4B?!UFDf1US1e66X+cL6soJw5?E13Yf)`BT6x;L$+Op8%c#9uM{W zDd1+L$JYVx0baFw{tn<4a0BYkfc}dbYd$O0|C-OP`D{`DI`4z{T2qhj0&ZG*d;)j| zc-+?Wr+{0)qk*130Xzdd9_sm1z|BaHuLIr#ylVCQ9l$N%2GpMc{TDS3@09BQ@Xo_K zi~84jAH>(1dVCjf)6(M;z%#((ww^x)+yWjA^!y3n8Q}3y&z}NrMtXc5@E+h*tLN_k zZUHx-{tW29sBy(jQvF|X(-k)r^{?|jh_5yE_%7h4rN<|LXMo3TJ%0+g1w0z)`4hl1 zz~iBwKLy;3^!Pg9J;1A0&))&u0&YP48PI=Gx{uFQvcr?)SCxB;w$3s1T3b+~R@pZs^fLE=azXP}h+<^Ksp#P%A!i`e> zFWk6rV^RM)?}PYSQ;+WgZd!VL0(b^^+}87_fLp+$fu27BJOex)>iJW^%}9^01KtC? zYW4gbz%Aeg)Sm(U7d6Z$rTRCYr2m+T*$j9e@LE&P-v!*X^!Nnu4Dh(E=T8B*fJXy8 ze*$<0cs$her+}N09$yE%2YA)$`8$AHzzwKB1Ntv&*c)8^&rSSy&e|L74P)D!HQUG` zKOe&U`+@mu&9MC4K!4K;%bx`LXMz54JM8nMf&MnoKN^I6o+Qve3-phNVV@@r^f#lh z{PjTpUZ8)K&b*NGu@mTT1N}|l`D+5d->9)u{P*s>VW;Q%6XxF!%wKDU@EPJZYf68HMGq2m1E{{i`9RXf71%fp9K16f&Otj?DM37{x;A*8iakG zB+x$#^pA&OpC=9UH>0rp^+5k#pnuhdeV$IBzYX*^f#WN2>U!qpnn$V9}mMmPa5cNMq&Bu zf&RTf|Edl9Je@#)8|ZHW&tDVx{nGmX;`L|s^{YMCpD=&gA0Q|{?H3T_Px}W1`O|&^ zLH@MAK#)J}HxT4c`ws;9(|!a&{AEv|6ZVf z)rNhZPN2UH^f!U$uL=BqqsB(@`m=HSM$h#p%)cL)zt#-P-wpIPt+4z_pnn$VAGgCk zPa5cN1O1~x*yl+C{j)&-co_D1(m;PR3d>&)^zQ}wS8dqm=>+=QKz|c>{+ht=H)=e+ zO&b3^z3u63^7tprzaN;t)(p$v4fHpyu>47&e-`K;x5GY98t88W{i8wH=Sc$nvq1lN z81{M6Kz}m|%U=)l?*;l-ZP@4O1p3=Re-n8An!xXup8piDKMUIyJlCHve|kPNC_gy8{|*V&j$I^^Rz+!^n7iYf8h5UH6k&8v@P;n zf5QCxf%$9Au>9RXf71%fp9K16f&Otj?DM37{x;A*8iakGB+x$#^pA&OpC=9UH>0rp z^+5k#pnuhdeV$IBzYX*^f#<@Ef&%IW!kmDBV8DyQfFRZh?UtDK(yS2;cZuX1|+U*+`tzsl+Pf0fho|0<{F z|5Z-U|Ervy|5rIZ|F3d-{$J;y|ET_r(;t-jS2@+c%BlWUPW7*Hs(+PJ{i~enU*%N) zDyRBaIn}?)ss2??^{;ZOf0a}HtDNdzf{2Am=2E>)q`w9Ell~UuPx@PsKk08l{-nPJ`IG(@#~^>2e+=@c`NtrCntu%Pr}@Vqf0};`@~8R7Ab*;F4DzS>#~^>2e+=@c z`NtrCntu%Pr}@V)|G@8;p1+Eu=N~pk8zcGtE6ksszY5Av&tC=k)ALtB{`CA+kUu?t z735FPUj_No^H)Ls^!!zjKRtgHAb)!QF36wWzYFrG_wR!I>HWJPe|rBe$e-T73-YJ;?}Gg4 z{ktH4djBrSpWeR<@~8Ljg8b?IyC8ph|1QX%-oFd-r}yuI{OSF>Ab)!QF36wWzYFsZ z{C;Wu0WtsHxxJq2PnbWgKM<6k)*lG+r}YPd{AvAxAb(naAjqHA9|-cN^#_9dY5jp9 ze_DSa$e-392=b@(2ZH=*{ed8VT7MwOpVl7;@~8C&g8XUyfgpcce;~-8)*lG+r}YPd z{AvAxAb(naAk07T`=#}lmPq5DrV#x)B2M^{raOH2Y$b_{=#Z*53~Dr}ejk{AvB|Ab(naJIp`u`=#gq zE8_G26G^+^)ARo-r|17wPS5|VoSy$zIX(Zca(ez><@Ef&%IW!k zmDBV8DyQfFRZh?UtDK(yS2;cZuX1|+U*+`tzsl+Pf0fho|0<{F|5Z-U|LYv|A3cA2 zhE)FxXDpm?YX2jZ)AO||r{`%^PS4M(oSv6eIXxe%a(W(C<@Efk%ISGmmDBUBDyQdJ zRZh>Zs+^uzRXIJMs&aZBRps>jsmkejQQ zmDB!rDyRMLR8ITfshsw|Q#tK_r*hi=PUW=!oyuwdJC)P^cPgj-?^I6v-{~CmAMJm7 zmQ?>&oOQ)nMg8lX_CHnQY5!A|)BdL_r~OY=PWzv#oc2FeIqiR{a@zk?<+T5)%4z>o zmDB#GDyRKVRZjb#s+{&eRXOc{s&d-@ROPh)smf{pQ=mDB#$DyRLgRZja~tDN?~Rypl|t#aD`TIIC=waRJ#Yn9Xf*E$FN7d6(L zE7kv+bJv_()W6RAAimbrB7E_&VS{z^hiz-vQhLZb1DR(0@^5<;$e{U-`0?FDvR_=Y0@g zYwGb`z)ee!PXNyVkK20w6mSc8G|=-WfM(1dVCjf)6(M;z%#((ww^x)+yWjA^!y3n8Q}3y&z}Nr zMtXc5@E+h*tLN_kZUHx-{tW29sIm0rQvEM|`O=pc^{?|jh_5yE_%7h4rN<|LXMo3T zJ%0+g1w0z)`4hl1z~iBwKLy;3^!Pg9J;1A0&))&u0&YP48PI=Gqj{lJ|IG`V7Z&xe z^FD~LHTC!|;HIU=CxB;w$89}-3b+M48tC~Gz%#((p`Jel+>G@2I^aFPt5(n70o(#^ zK>Zoee^KMa3aS22tT?fvsDGXJL42*L$9DlYEj>N~JOey#>-kf_E#T2W&z}IE0Ui(a z{3+mOq{r6*?*U%5dj1aJ7H|XV&w&1m8k;VX>VMNkn=UHqU*~-gUu){|UBFFCk52&4 z0FT>x{uFQvcr?)SCxB;w$3s1T3b+~R@pZs^fLE=azXP}h+<^Ksp#P%Aqpy0W@wWc251>Cgs_yq6_@VKq#PXV`pM*}^70(b^^Jk;~2fSZvXUkAJgc-89p zJAhlj4X8f@`Y&p%d$m;m>t4O?)kXd5ybt1QO+CH~xM}I}3E&yvaa+%y0&W41273Mk z@C@*HsOL`sHzPg14tNjns@3y%0Jne}P=5yWU(`788maydyyn1biu%`iAH>(1dVCjf z)6(M;z%#((ww^x)+yWjA^!y3n8Q}3y&z}NrMtXc5@E+h*tLN_kZUHx-{tW29sIlsG zQvI)b-Ky6W^{?|jh_5yE_%7h4rN<|LXMo3TJ%0+g1w0z)`4hl1z~iBwKLy;3^!Pg9 zJ;1A0&))&u0&YP48PI=GWA_`R`rrMA-ES!BU*~-gUu){|UBFFCk52&40FT>x{uFQv zcr?)SCxB;w$3s1T3b+~R@pZs^fLE=azXP}h+<^Ksp#P%AvNuZgzwC|6-dNPX&if#~ z*3{#>fSZ;cp8%c#9=G-UDc~0HXrSj$0M7uAhkE`La5K{5>wxzFuUb8S2XG6x0rh7< z|3!@*RjK}WRCiR1`qz0M#Mhd7d>3%j(&H1rGr;4vo<9ZL0v-+Y{0ZP0;PFt;p8{@1 zdVC%59^h50=kEY+0XLxj4Cue8@j^|i{}*a6)QbAoc^|~rntFT}aMRM`6TmaT6E24fOm8;2GfYP|u$NZbo{19q=CDRjcRk0B!*{p#BW#zo@b0%~JhudGnSx7xl06 zK8UY1_4qE}rlrRxfMrR?pu7+yZVu z{Ta}IQRC<(QvDyjG28R8Q^hS&z}Nr0gncH{siz0@OY@_ zPXRY0J-!Zj5Adqh^LGHZfE!SM2J~Ol*zgvq{x`g3!&{2_*Lfer*P42K7jV!x};8m;V?*MKAH=zCu=)b6OaE(;|2iF{2 zQ`EoC`yjs7)Z@E=o0cA*0GNNK>tOJt?Q-w-@1P5`l9}I-UsourXJq~ z+_d!g1n>;-xUJ_;0k?oh13iBNcm{Yp)bpo+n~@%02fPP()#~{>fLp)~s6PYxFKQfr zyHx+j-+uhi@_)kG!*}f1US1 ze66X+cL6soJw5?E13Yf)`BT6x;L$+Op8%c#9uM{WDd1+L$JYVx0baFw{tn<4a0BYk zfc}dbYcH4Tf9>UKFE8p}=Y0@gYwGb`z)ee!PXNyVkK20w6mSc8G|=-WfMN~JOey#>-kf_E#T2W&z}IE0Ui(a{3+mOq{r6*?*U%5dj1aJ z7H|XV&w&1m8n?Y$s{h;GecQW>`qz0M#Mhd7d>3%j(&H1rGr;4vo<9ZL0v-+Y{0ZP0 z;PFt;p8{@1dVC%59^h50=kEY+0XLxj4Cue8an3bT{hxEqIoA~Ruk${LuQm1fF5sr6 z$0vYifX8h;e+sw-JR0cv6TmaTB7E_&VS{z^hiz-vQhLZb1DR(0@^5`zERW zw{P0Msi=RQ_d$HEsmFH#H!VFr0XzddZtM9|z%Ag>K+m55o&g>Y_53N|W~9g00q+4` zwR-*z;1+NL>d%1wiy9}dmFoZGwI{DF>R;!55MOKR@m;`8OOHG5^Idw^H1p1%XQ1>Au8Gob&XMzUF||73Hrxu}1g_d$HEsmFH# zH!VFr0XzddZtM9|z%Ag>K+m55o&g>Y_53N|W~9g00q+4`wR-*z;1+NL>d%1wiyBY7 zU#kBn-v7k=i~84jAH>(1dVCjf)6(M;z%#((ww^x)+yWjA^!y3n8Q}3y&z}NrMtXc5 z@E+h*tLN_kZUHx-{tW29sIh*FRR8O@tlv`9zs~z0zSh*^yMUXP9-jc70Uo#Y{3+lT z@MxgtPXNyVkB55x6mT=rNNK>tOJ2R%0%* zYfU}A3%F_N@d@A=;Bi~ep8{?Hj|O`F1n>;-c&O)30XHK(z7BW~@T%4GcL2A58&H1+ z^k3A77o_@+7vhDY{&n65@wKKN-v!*X^!Nnu4Dh(E=T8B*fJXy8e*$<0cs$her+}N0 z9$yE%2YA)$`8$AHzzwKB1Ntv&?72>=|2^03xvr>xo%ca}t*OU%0XHo@J^?%fJZ|gx zQ@}0Y(Lm3i0GhWE`O-qkY0M7uA+j{;Ka0_@e(DNsNXMo2;J%0+g8R_wLz2l2J09^VDrwDkA{@C@*{t>;exw}3|jJ%0jt26#Nw z^QVBDkseiIi>TfhydKLh$NYS>Rm^>066KT*`b&if#~*3{#>fSZ;cp8%c# z9=G-UDc~0HXrSj$0M7uAhkE`La5K{5>wxzFuUb8S2XG6x0rh7<|3wY6O{#yh&Cs8U z*$j9e@LE&P-v!*X^!Nnu4Dh(E=T8B*fJXy8e*$<0cs$her+}N09$yE%2YA)$`8$AH zzzwKB1NzUt7&T_<-`W@Li*tGX-~1Da-~5xCe^T%Zo|pIq&tLF-!S|e$_@0w{P8K}= zvBcva$3HIk1J6qQfoC6hw&3f3B=Pk>TK}VhKXF{*PaJ>Zc)^orB%VBzJX7$K$0UC8 z*vVrB-~N=uw?DQ0se+&Lq{Pp8@|-6Ne%tpYe%tqN`+mVM{+`4y{@%skEBL*SOZ?u) z?|r=BYaf&N+Q-&DR`4T_Nc_knM;W8m>xZuaXCGq3mI{vMKZ_OmWHQSmM zymDCLmBW?81;6E+62Ik}w|ukUD-KG0#laN^3%>6miSK)8-$Mmo{h-8GKe+nAf*<^b z#1DSs;5Q1s;eLs4xPQa_1wVS9#E;&0^uB^``MSine0|H;3;x1A5`W>I7w#$ej;~65 z$5(fJwcyL{miV%}m)%|P-CvRT?yv0rO2Jp{llZEAtM(QAz+DnQaMyvm3chZS#MkXv zx2NEb-YM}%?|k&mf^XU_@lCro?JoF31 zm&A9`pMtOayu??2e&y#2zW-K<@4t2btp#86S&6Ut?3&LO{P0eRAKrO*XTh(yN#a-B zbj3{tKlW*fAN%yNPZxaQMu{)nxNu{^%_k*pK50H#aC<|+UF-CJt-ZnCFvr?%G*$TT z6#aMJu+!teT=ZXl!*Y-R-s`2$v-kSF*UO)0wdlY4`qdu)L))eNhqfQuF6ZAU`fuF6 z(c}O0HYxwp+n(Mg=U)*07q%^U{3FqytR8=J%0HU;e#hUZF~#Tg@#qvkT^lZsB`ej# zX&a4k%KBIk{TIxF$Ny>3|7r8I$A4oa_3y@LV?-c!aF4^hvx1zsYVmbeP#CM&)>->T*eYwP!zI^G+3*Nj?;>`=27Z&`)3W=XsabiWmH(ez0O&4vt zsNj#jO5$#J_kyo`wZz@-*9AZD8i~8zfeXIsbrN^Grxtwo8zk;_mn`_QH%i>?zE|)a zRf)UZ$qN2LP2z6%rh;#Iv&7x*HU&R=iNxLR9|hm=7Kyvv5ej~Ajl|vR@daOfsl?st z+6CXYR^o2;;exMto5bDftOdVioy6Vhl?AU{CULjAU%|Jom$+N~tl-DrE^)UyRKc%) zhs53LIR!uRPKmqKMGC(5a*4au7Ycswl@fPvrx*Ok|^^`h>)}J|S_gPe`2W6B6h8 zgv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)}J|S_g zPe`2W6B6h8gv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^ z`h>)}J|S_gPe`2W6B6h8gv7Z%QE>NbbNaukJ|X#Q`h?`K=@XK_rcX%znm!@M_FN`nv^Ai&1`h>)}J|S_gPe`2W6B6h8gv7Z%A#tuxNSx~v66gAa z#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)}J|S_gPe`2W6B6h8gv7Z%A#tux zNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)}J|S_gPe`2W6B6h8 zgv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`b5De??1KY zCnSGOpOE}DeM0ir^a;sd(k|^^`h>)}J|S_g zPe`2W6B6h8gv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^ z`h>)}J|S_gPe`2W6B6h8gv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFr zu1`pu>k|^^`h>)}J|S_gPe`2W6B6h8gv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3 z=lX=ixjrFru1`pu>k|c^y#Lhn3CUm6CnSGOpOE}DeM0ir^a;sd(=rcdZRGUDH-yx$@DYx;!bujvz#zot(}{+d1^`D^-w2vklE0=;NdB5WA^B_igygU36OzBC zPe}fnJ|X#Q`h?`K=@XK_rcV_9Q}x0035j!kLgHMXkT};TB+m5-iF18I;#{AQIM*j6 z&h-h2bA3YMT%V9Q*C!;-^$Ce{eL~_~pO84$CnV1G35j!kLgHMXkT};TB+m5-iF18I z;#{AQIM*j6&h-h2bA3YMT%V9Q*C!;-^$Ce{eL~_~pO84$CnV1G35j!kLgHMXkT};T zB+m5-iF18I;#{AQIM*j6&h-h2bA3YMT%V9Q*C!;-^$Ce{eL~_~pO84$CnV1G35j!k zLgHMXFfIN035j!kLgHMXkT};TB+m5-iF18I;#{AQIM*j6&h-h2bA3YMT%V9Q*C!;- z^$Ce{eL~_~pO84$CnV1G35j!kLgHMXkT};TB+m5-iF18I;#{AQIM*j6&h-h2bA3YM zT%V9Q*C!;-^$Ce{eL~_~pO84$CnV1G35j!kLgHMXkT};TB+m5-iF18I;#{AQIM*j6 z&h-h2bA3YMT%V9Q*C!;-^$Ce{eL~_~pO84$CnV1G35j!kqTv62eM0ir^a;sd(k|^^`h>)}J|S_gPe`2W6B6h8gv7Z%A#tuxNSx~v z66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)}J|S_gPe`2W6B6h8gv7Z% zA#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)}J|S_gPZWIe z{!@FuL-N=33CUm6CnSGOpOE}DeM0ir^a;sd()}J|S_gPe`2W6B6h8gv7Z% zA#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)}J|S_gPe`2W z6B6h8gv7Z%A#tuxNSx~v66gAa#JN5pajs8Doa+-3=lX=ixjrFru1`pu>k|^^`h>)} zJ|S_gPe`2W6B6h8gv7Z%@&9smFTj#j<=MyAZYF?(pdv^VYK%%*!3&z+Ey2W01<@2K zCB^^|6VOsBy-`A9#tTOK!hnJXNd(JG?*=JH;{+Lv;st}CB}ECQrguvWc)?47GHPKG zNeW{E-MzlIXAki7^s}Fr_2sKrU*`9&#j$5``t-l|>CGJb1as^Y%&|`}$3DRv`vi0B z6U?zsFvmW@9Qy=w>=VqfPcX+mQTwCs6Kr1f2{y0#1e;fVg3YTw!RA$;VDqX^uzA%d z*u3f!Y+m(=dVZhRpU@|?XMz6nM4w>us!yJw~U^$9kw`UIO-eS*!aKEdWy zpJ4N=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m z!5sSpbL=VqfPcX+m z!5sSpbL=VqfPcX+m z!5sSpbLJw~U^@)0ZpVyzzC$wjQ{_{kiVDqX^uzA%d*u3f!Y+m&VHm~{wn^%2; z&8t4a=2f3y^QuqO^ZT3+=o8GbPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+mQ96BsIra(W*e94{pJ0xCf;sjH=GZ5gW1nD- zeS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD- zeS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD- zeS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)IrfR#AAO%-^Qup=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbLJw~U^@)0ZpYs8If;sjH z=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH z=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH z=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH z=GZ4Hr%y1)KEWLO1as^Y%&|`}$3DRv`vi0B6U?zsFvmW@9Qy=w>=VqfPcX+m!5sSp zbL=VqfPcX+m!5sSp zbL=VqfPcX+m!5sSp zbLJw~U^$9kw`UIO-eWIS<=X^k) zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)IrfQsu7AISIra(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT z_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT z_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT z_6g?LCzxZOV2*u)IrfR#AAO%-^QupJw~U^$9kw`UIO-eS*!aKEdWy zpJ4N=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPlScOeu6pn3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gmiP|51pJ4NJ#<+KIa4a1as^Y%&|`}$3DRv`vi0B6U?zsFvmW@ z9Qy=w>=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbLJ#<+KIa4a1as^Y%&|`}$3DRv`vi0B z6U?zsFvmW@9Qy=w>=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbLJw~U^$9kw`UIO-eS*!aKEdWypJ4N=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sTUJL=!> zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD-eS$gm3Fg=*m}8${j(vhT_6g?LCzxZO zV2*vF_DA0**u3f!Y+m&VHm~{wn^%2;&8t4a=2f3y^Qup7g3YTw!RA$;VDqX^uzA%d*u3f!Y+m&VHm~{wn^%2;&8t39&+qg4 z6Z(YqEYN?R=o4&S^$9kw`UIO-eS*!aKEdWypJ4NJw~U^$9kw`UIO-eS*!aKEdWypJ4N=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbLJw~U^$9kw z`UIO-eWIS<=k+J_3GKFS&(9aD=R@AVgUqWw!S+{ug3YTw!RA$;VDqX^uzA%d*u3f! zY+m&VHm~|bJ-^TSfIh(-`vi0B6U?zsFvmW@9Qy=w>=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL(R@s&P7e5FqiU+ELX zSNa6;l|DgyrB4uF=@Z0P`ULTnK0$n?PY_?}6U0~g1o4$VL42i85MSvN#8>(R@s&P7 ze5FqiU+ELXSNa6;l|DgyrB4uF=@Z0P`ULTnK0$n?PY_?}6U0~g1o4$VL42i85MSvN z#8>(R@s&P7e5FqiU+ELXSNa6;l|DgyrB4uF=@Z0P`ULTnK0$n?PY_?}6U0~g1o4$V zvBy_mf2#X;1TruC1euq8g3QZ4LFQ$jAoH?Mka^iB$h_(R@s&P7e5FqiU+ELXSNa6;l|DgyrB4uF z=@Z0P`ULTnK0$n?PY_?}6U0~g1o4$VL42i85MSvN#8>(R@s&P7e5FqiU+ELXSNa6; zl|DgyrB4uF=@Z0P`ULTnK0$n?PY_?}6U0~g1o4$VL42i85MSvN#8>(R@s&P7e5Fqi zU+ELXSNa6;l|DgyrB4uF=@Z0P`ULTnK0&R*s`XIy>8)vfr8 z@C#U1|Jg(9F1r46+4_IKi>|-u`d0j0_POkl|9)UZ>W_c*$F2B{{lBsQa^|?7edNIPnd5$T+|OF^BL{xuz~#)l zFaG$(^_h2H{O*fe@#7mmzHvFT;f5bSc70~U4I6G~#UDTR$B$jkeE!{k^0@Vx&%gWg z?{39EdEB4aQQZ*!{wEs_U7z{;pZxt#T5-dn8xCF0Tz%K>!`5f6zU%6{T5fE&I=0pZRY2-Le(?&+I>QIrD@~JD#;Z z^Mp-L*wl(Up0(py%NhG?f8P4c+h6$h7q+6w^OiG@|MzjeKJ)m0fBe6<;y54Y%b9P# zpg4Yg=G!m$_6u6EIKDW3IrFbidgJe`&;09?{`E<%_{QIPoa%1pXI z4_&bBl;zCB|4uCb|M5c?eCUE!+;+;gQy%{Fz2AG5f3{rr-dF8>_4?lLebsyI?{Md< zcfNW#^N% zpLxsc-eTVejy>1Dnc2)UK5*1q)@PpafoFW66_0w$QEyq!?03cq?_8hR?~MJoYHT`%CP5+31?lHOrZIob}tEU7vZ!S?@Tj z6@UA)zx~( z$e$-(YyKCZYd>lHMR=Y4ZwS{v+5RIOu>23_Ydj!SA3J!@%)@8b7PVsavFc;3c<}iL zpa1Zm@BOp-Odk+_W7~0L-EVCBjcu)X-1*1By86!^T6gU2?;z`rz5UqRTk##|zXR6Q zfA-M2o6oqDth@P)o9*AvJI}up*42OZ(7OM6{%Kp6e+Li$_t^8_@4ue^U(avFx@hgS zSpV5W>%Q=ZKO^hD@P}Xc!&dy+)}L*Cc)wWx*+c6Nr{5zEzwz+3?-BK%J+$tzZ+^pt z>tE+%-~8A&x8fTve8Yv0{PXHRduZJiZ++#v*3Z}#Z@uEJt@z4!z4Belb8z#`r@niA z=4Sh!Ry_6Hr@nhRbHSN!zG!{sf-^5TvlZWb(VH(?&V2X9pS*Z|=DRQc?u%RTlNW#T z;^oY)H@DuqKC|o1_UEzn-qw4UGpF9Sg?v9e^}bW@YsD>pv&Ft29uVI8&x=de_j&6- zzxAJ6adFAwlI6_vCLgoZ%Qz4h6xc=q3&{ddcm zbH4df^1b(*Z=UnbR($DYFSYNz2ZaBeZ2rLdKL0uSPy1(W{=nuBEN33`xKlp3KJ%Ez zJ?3$(c*+M)`QUQKj>oq3nH#UX@yb@bVA}=TmNN&wts>v&4}9B!Z?k_h%gVmb9}w(E zjw{#q`Syf7SZT8xDHIL9O`tt3H3#a%OPrE4Q!D3~n9VYUgMB zE4MFap8fU5{KNXpv%miAueai3{^2qIu$=j;r+krqd~to|^54Jw z_gnFhFCOy612fwyHv-`ulKirBBe(k}pEoZLFADpbuT$f*$+sx#_ z$#Uk`4t>(UuFw41p}%%$E7}j7|GJ!c`iowE$NJ3EU-a}Bwc^X~c=;X6nJ-=Yq3^8E zeCgURU28une&<8qS-&7%${eV z1MC^d`?=tN|IgR`d!En3@}K+g^TqQ2|IqV!IQWr2Uw=L)>-IjMTeWz2zqs~%PS)*x zJ`eAJb!*S(WZmB9^Kd7uTYEmw*8ltMeLl}lgI=)qd`{NweLl~A2J6S5CF%d!Ent zU*Bi%^ZEX7-hVk`&*ulM&+L6ZKj4#gQ1?8aKW2Sq@ALU%T8~-I*z@_u^_jiT=Nq?d zT+Z0@`9bS5d!Nq_S{$^TvFG!H*Jt)VpCA0OgO@Y*d`_Ci-skhjoo!8H&-3{c*7w=_ zeEx)&K4Cdy&*x8EpV|9-{>05sT+Z0@`Qhs`d!Nq_KjrY{j6I)|?y>jz{D=$e$M-$Y z=TBbWXYcd*lPmjaeb4jxQR_2%pU;oVk6O;y^EqiFd!NrYecsy00il2EE1$N$Pyg2b z^7;H}uYB5a#-7iQUZ2_fe17y}j$Y2Z>FM8p=K9Q=p8lrg^Z7Hs|IFpgAKbL-nDv?E zvza}gAG7P2<%~U_KWBYr@ALU{?s(2}=HKpqfHanWyZhgk&*#s3z#7W|%h#j%`aXMK zkLJIfFK6ue{J8a*z0c>zZL{=xK)CGp5BaV2nah6vvgPynZyoYm%bDz-K1@1H_D|XJ z`TTc2Y#nCL^Z5zu`|N!_Kj9BfSkBn<`AgSl_CBA#^oW-(XYTp%gQV5m^Wl4z&*vvS zXsu??^ZCoy_u2b={_+Q3zMOgLp-+0{`pi=ged_Z0{FP67<#NWJ&re&Q+53Ec+RIN{ z&fIwIhhDutbK|u)E}zd|{h?PcXMVnA<7?Jue!k`B%ja|ZiDo%t&*!gSn^``ezy9*q zFMX2*u{DpIzP)Mrd|teuSkBn<`8jJd%jffR?muVgpE_syrZtbBI_Fc%=kqsB-?W_h z-j18!x<2#09p76%pTG6yw=QS4Klk=`tk3Luzc1eYj@#d{oUy0#;o8ieXDRzO>Gpy> z&-v%CtzT*Od-mD$oS5PB_r5ca=4Xdq)?52$?fqKM7B&^u={N5=78VB0>k46&uzc9O zXDKWS%Vy1c7Q!lF`Mi10Qdn3tuj>k%2y4gYJx9W#uprJ$5RXgNJ6oL3W}Aw2oqqGW zv9K^`URMaKgyqBLJxgIxST<|kvk+DZ%jeB|mcqiKd0ki7L|8jE?>Q0{g#~e5f_PlA z-c+2=W}Aw2oqqGWv9K^`URMaKgyqBLJxgIxST<|kvk+DZ%jeB|mcqiKd0ki7L|8jE z?>Q0{g#~e5f_PlAUZ>yu{N8L+v98l^UN;sN2F>dVVU@6a*t};cEDFnJ&3hKYDq;D& zdCyWdVVU@6a*t};c zEDFnJ&3hKYDq;D&dCyWRX&ztuwg@r})x~{N^uy$~D}+_T@?rCyrLZV0n>FuQ2&;tU^X5HE zVPVm{t}ARJtR0*890`lUf;cZhJT6%;Z)~+^3!4h-^qcn_3k!qhb%n4>SUzmtvlJGE zWwYiz3t^S8eBQigDJ(3S*L8(WgtcSyo+DvVSPg@r-$ zx$<`w!rHNU&ylbwEQs?G#N(3nn&0a> zTi8@sr{BEiSXdY|uPcOA!t!DBo~5uTESoj&SqQ6y<@4q}OJQNrysj&3BCIXm{~QUE z@0*JA62#+@^|D#>>-T1}_ct5Y+54M~X76t{n!Uf-X!ibQquKkLjb`s}Hk!S^*=Y9u zW~15rn~i4gZ#J5}zu9Q^{$``u`rd;Q*M_WHfi?Dc!2+3WX4v)Av9X0P8H z&0fDZn!SE+G<*HtX!iQO(d_kmquJ~CMzh!Njb^Xk8_iz7H=4bEZ!~-T-fZG=vDfd7 z>&_NtuiqQj+3WX4v)Av9X0P8H&0fDZn!SE+G<*HtX!iQO(d_kmquJ~CMzh!Njb^Xk z8_iz7H=4bEZ!~-T-e~svz0vITd!yOw_eQhV?~P`!-y6+dzc-tBT-R>p z*YAyHuiqQZUcWb*y?$>rd;Q*M_WHfi?Dc!2+3WXa6OW6%es5fNwlI7B-nh-R>p*YAyHuiqQZUcWb*y?$>rd;Q*M_WHfi?Dc!2+3WX4 zv)Av9X0P8H&0fDZn!SE+G<*HtX!iQO*~H^w?{6-ezkfEHy}#MG&fec_G<$!u(d_-r zMzi-f8_nL|Y&3g+v(fDR%|^5LHyh2~-)uB{f3wl-{mn+R_ct5O-rsCAdw;Xh?ETF~ zv-dX}&EDT^G<$!u(d_-rMzi-fn@v0}S+Co;?rdRGVV!>So?~HQ(7dh?Rtd|8&3l%@ zqOfe%yk{Y-5|+=K_bi2lMf19@u!*pCY~FJuED8(ayae&MWW9+vpUpNE>pK1Bbz@;+ z(7dh?Rtd|8&3l%@qOfe%yk{Y-5|+=K_bi2lMf19@u!*pCY~FJuED8(ayae&MWW9Fd z@0Ok|Y$~kNZ{Bk(EDW006~ZcE`LKDN{msU8_WHdiUcWb*y?$>rd;Q*M_WHfi?Dc!2+3WX4v)Av9X0P8H z&0fDZn!SE+G<*HtX!iQO(d_kmquJ~CMzh!Njb^Xk8_iz7H=4bEZ!~-T-e~svz0vIT zd!yOw_hu81i=EGzIG>GX=d;o5d^Vb$&qlNJ*=Tk?8_mvVquKdvG&`S-X6Lif?0hzw zozF(I^Vw*2J{!%>XQSEqY&1Kcjb`Vw(d>LSnw`%^v-8<#c0QX;JTCV9{vbJ@F+La{ zT>dVwXzL###`O@uqU%EZ_OSk8L>Gm^#bo)6#y8SF5-F_aBZa))9 zx1S57+s_8l?dJpO_A`QX`#C|n{j4C}eqNAnKQc(SpBuD0k6+e%-~X}mzq|uheg3si zo%Nl*UO#p`4D|ZK@yhXhsP``&kB(itKKN5_M6 z{(|%PWxXf=lAZtM9p38muYKyQ@AUQhvEyN&*B6dgj^{(Yf9ZI1Je%qL3&$(R^SR!? zbUZBd`mW;>$J+`RD>a6ed_4={nVW8I+j#rN7 zL%o0Lcyv6Q>HQ1GE64M>-oJD_EcE)W;}gf*QSU!;JUSkn^B0`Q&#oW)Z+8Bdcj&Co zzjnKhOs=2}?j zbi4LUx?O)J-L65CZr7nnw`{c3qlw=kd#WU->yZ|I0hj*5_aQ)LGx@ z>-A&D!$7Yu9IqVDhkF0g@#uIq)B6{WSB~d%y?^O=Sm^a#$0v@rquzhycyv5C=Px*q zU)DSMKiK(S-eI{u|JtX{`c7Z3A3GifdVS$|<#;~S`u!tu)Se5m&? z9gmJ@GrfP|c;$FL*ZY@_hlO6>b$sG@JL>&Mjz`CXbN+(!_}TB@{gj>m;-|$=>+`SO zeh*Ksx8KE+ZoiKw-F_!ey8T|Bbo<>r>Gu11((QNjq}%W5Nw?qClWxDSC*6K$PrCiy zo^<=&J?ZxQd(!Q9_@vwK@kzJe<&$o|&nMk}r%$^5UY~a7@ymMm?`G%!{@wTQuFt>r zsk6S**XzfQhk;&SI9@rP5B2_~{n6GR)#qRP)LGx@>-A&D!$7Yu9IqVDhkF0g@#uIq)B6{WSB~d% zy?^O=Sm^a#$0v@rquzhycyv5C=Px*qU)DS1Zg&0;x%-g2>+`RD>a6ed_4={nVW8I+ zj#rN7L%o0Lcyv6Q>HQ1GE64M>-oJD_EcE)W;}gf*QSU!;JUSkn^B0`QFY8_L19twe z_`wx>?lpF{<5R~weZBwK@i5Tq3&$(R^P%3qbUZqq&Gi0-2x9u|6i*YSzt z?Wp%3IUXGk&iM<@(=i{Y4?q~?mO4*xgX`( zj!zx$^!5H@$HPFcFC4EN&xd;d((&kcHq-kTj#rN7bG?7*cv$H5UB@Smx9udc@2?M? zuaV=?@!*`l;5>d=@5J@{soVKK@mnW;tN#A4ed?_5^!56&<6)rJ7mins=R>`J>3DQJ zo9X=v$1BJ4x!%8YJS_D3uHzHO+jf%J`G4qqjU11T2j~0+=kd#Wx82UZzT0lU?e_Zo zYo9vnJAJ)=?06XH^@Zb=$J${Fm9B)Ux|H$#^cyP{Na2~&`cV5NL z|9RDURek=oPo4FhzFt3eJPh>u!tu)Se5m&?9gmJ@GrfP|c;$FL*ZY@_hlO6>b$sG@ zJL>&Mjz`CXbN+(!_+`BfyV&{PuxrDv`uuC3I_o=qy?*R?80htdhrIC>a6ed z_4={nVW8I+j#rN7L%o0Lcyv6Q>HQ1GE64M>-oJD_EcE)W;}gf*QSU!;JUSkn^B0`Q zFY9f(g`NLRw`{tlKL6UM&iYPYuOB-e26}zrc;$FL)cco?N5`|7-oJ3Xay*~w{Y%Hg zLa*;SK5@Jq_5LHrqvOFjf5CbDvfj>{+4}-pIv$+!7o5j0>m7d+JO9Vubo@>A z`PV*m)_3}P{n+s^(CZ7wE64Mp-oJD_I-bq+{)OX}NgF^<&4wK(8+xuN=>ZdjHb#=y*2M`xlN^ zj^}f|f9ZHw==EL4CyuwH-hbqHbUZlcFF221);r}!cK%Pf@su0u^RIpCtnc*o`my6- zpw}0USB~dHy?^O=bUd5s{R_t{$Md<~zjQn-^!l#j6UW<8?>}-pIv$+!7o5j0>)mxd zJO6iGf7kW(`PV*m)_3}P{n+s^(CZ7wE64Mp-oJD_I-bq+{)OX}NgF^<&4wK(8+xuN=>ZdjHb# z=y*2M`xlN^j^}f|f9ZHw==EL4CyuwH-hbqHbUZlcFF221)_dS{?EF9Qxd%R1pMULB zXMLxy*N+_!1HHa*ymCAr>itW{qvP33?_W4xIiAn;{-xt#q1SgEpE%x*djFB*(edD% zzu-K6S?}V{u=9WMXDitKKN5_M6{(|%PWxc~b&CdT}pFZr<_4(I6b=G(Kdi~h(FwpA@ z$1BJ4q29lAJUX7u^!|n8mE-wb?_W9|7J7Zx@rmQ@sP`W^9vu(P`3uhDm-V)PlAZtU zpWOb*`uuC3I_o=qy?*R?80htd&K3VfnHxYUOAo*_5P*f(eZ4i z_b(i;9M9)^|I+cW(CfR7PaJPYz5mGZ=y-6>UvM73taroJ?EK$w^$l0o=U@BOS>NgF z^<&4wK(8+xuN=>ZdjHb#=y*2M`xlN^j^}f|f9ZHw==EL4CyuwH-hbqHbUZlcFF221 z);nnjJO3x`IB7?H{R$AfeJg7f%gy*ob2&i@@Bz2l?x`PV*m)_3}P{n+s^(CZ7wE64Mp z-oJD_I-bq+{)OX}0t*LNMCINpwW|B>U- z@!*`l;5>d=@4lX~`>v|bzxJuKzSGz1$Bu`AUSBv~Ii3&o{-xv5@oc8|FC4EN z&*yso(($m+>${Fm9B)Ux|H$#^cyP{Na2~&`*T0gT|NfQzE9>*Ged?_5^!56&<6)rJ z7mins=R>`J>3DQJo9X=v$1BJ4x!%8YJS_D3uHzHO+fna7ay&X7obwl)$1m$`9JBMk zalCO{pMULBXMLxy*N+_!1HHa*ymCAr>itW{qvP33?_W4xIiAn;{-xt#q1SgEpE%x* zdjFB*(edD%zu-K6S#R4mcK)~7|J3JS`_x(A>Ff1l$HPFcFC4EN&xd;d((&kcHq-kT zj#rN7bG?7*cv$H5UB@Smx1-*FkUpQVlo)7i@rQ^}@Y^L`w9IqVD=X(Fr@vzYA zyN*vBZ%4iV$nofSaL!+F9>1)&`TgwtZ+`#g_t)oN`_x(A>Ff1l$HPFcFC4EN&xd;d z((&kcHq-kTj#rN7bG?7*cv$H5UB@Smx1-*Fu!tu)Se5m&?9gmJ@GrfP|c;$FL*ZY@_hlO6>b$sG@JL>&Mjz`CX zbN+(!_+`D*FJb5Z^h-{^q(1-Jr_TCLU#}lK9tL`S;dteEKGge{jz`C{nclx}ymCCB z>-|f|!$Pm`IzDl{9rgYr$D`xHIe)=<{IcHe_ptN7`#rngQ=fnBQ)hjruh)+q4+Fiv zaJ+InAL{)}$D`xfOz&SfUOAr6_5P*fVWHP|9iKSfj(Y!*itW{qvP33 z?_W4xIiAn;{-xt#q1SgEpE%x*djFB*(edD%zu-K6Sub9=JpZkg|82#1VZ88>KWoKs zz76d8_aSY5nz(B{P#B`{{3dXBkA{_BQHF%;rmb8{4{a@PCsq`apHU!r0riM&R2=^`7rJ4 zDHG>o;(Rts`+ADR`6_WfpQn92W#W8Tr0w5LoS!7lw`1DZGfJF~iSr@x-`|k<_nY;u zxq$t=cg+RYT)ZQkw= zkhH(uFCb~&?jMjeZ}$^Onz#E4B+c9X29oCO{sT$#c0YoodAmPB(!AZTAZgz2Uyw9! z_cKVExBD9;&D;GBlIHFH2TAjGKZK-tyFWtGyxlJ$Y2NOikTh@iQ%IV(`zxf)C;t6r zy<4}kpMP%Mdh1sH^H19RG;#k%d^St_dWyvP zDseuar+qzT;(S=7?cYtDpCrz=W7^j~66f<_+SgMi&d0?0Y?k)*6p8ay;(R_&`+Ca6`LIaazneHe zNt|!Tw6ABBI3E+|L*l=`A@T1w>)mrc`}yad^Y1yI|NN6SKTX`f(@)!foH!o_Y5Nz6 z^Ht(}K1}<1%EbAYIG@eZzMdj+zDk_W=V@P0nK&O7Y5R8*=O>Bt?U?rUj1uQ#;(SQ_ z_ctW|{o3`P^!v}2^S3m7|4Ey->qC?Fx9dfd=I#2?qrIp9?fTQC zdAlApY2L0+O`5msRg>oJ`qiX)yPh>^-mY&=nz!p+ljiOE*Q9y79yV#-u8&Qcx9eq- z=I#2~qw%{ z_5XXm|781I|NO}H&f4wzf4SbS|Cesp|4X;)|E1gY|I+RHf9ZDpzjV9)U%FlYFWs*H zmu}bpOSkL)rQ7xY((U?x>303Ubi4jvx?TS--LC(aZrA@yx9k6<+x7q2oyX74e^~Yh zasH*-`Im0zU%H)t>3065+xeGn=U=*=f9ZDqrQ7+JZs%XRoqy?e{-xXbmu}}@x}AUN zcK)T?`Im0zU%H)t>3065+xge-Jbw1`=brVCw6^8%!n9&$|3*CWXZZUsY4i5;XVU)m z^Jmh${rs6UZ$Ez~&D+nPN%QveXVSd={FyXwKYu38+s~g#^Y-&+(!BlrnKW-de#0Pq?Sy z`%l`uz5kfBzrFvMG;i-eCe7RXk4f|P{$tX-z5kdrZ|^@Q&D;BrN%QvpW7536|Clsy z?>{EZ+xw46^Y;E@(!9O@m^5$iKPJuF`;STU_WoniyuJUJG;i-eCe7RXk4f|P{$tvF z;@_`bf0eQ8A5P0o%lPZBw0XP!DrtYa{witSuD?o}x9hKx=I#2cq#vgL?fR>vdAt59Y2L2CN}9Lpuaf5N`m3aQyZ$O^-mbq&nz!q(lIHFDtE73m{witS zuD?o}x9hKx=I#2cwE4upU%URC?tg1`Ys2@Sw0XP!JZXQs{yb^ku0Kzjx9iW7=I#3P zq(7(s?fUbidAt5RY2L0sPnx&u&y(iu`tziDyZ$_B-mX7Snz!rE zljiOE^Q3vZ{yb^ku0Kzjx9iW7=I#3PwE4upU;F*L7W?_<_}1|){_{`Ty#4-N(*E}Q zcS-a1`*%t6_WO59^Y;69N%QvmcS-a1`*%t6_WO59^Y;69N%QvmcS-a1`*%t6_WO59 z^Y;69N%QvmcS-a1`*%t6_WO59^Y;69N%QvmcS-a1`*%t6_WO59^Y;69Y4eGHzxMe9 zbpLBw*ED?pNt?INA4uBYK7Sx--adaIY2H46AZgw{e;{ezK7Sx--adaIY2H46AZgw{ ze;{ezK7Sx--adaIY2H46AZgw{e;{ezK7Sx--adaIY2H46AZgw{e;{ezK7Sx--adaI zY2H46AZgw{e;{o>@$c6@e`!DV^Usm{9l0O>`6q4OK7T1`fBXEUqz zzhC?OZMuKlFE)JtNt?IN-%i@!K7TuD-adajY2H46J89lNe>-X3K7TuD-adajY2H46 zJ89lNe>-X3K7TuD-adajY2H46J89lNe>-X3K7TuD-adajY2H46J89lNe>-X3K7TuD z-adajY2H46J89lNe>-hH@$c8J|KC8b|KAWc?7jbmbi4jvx?TS--LC(aZrA@yx9k6< z+x7p_?fQS|cKyF}yZ&FgUH>oLuK$;A*Z)hm>;I+O_5afC`hV$m{l9d({$ILX|1aIH z|Cesp|4X;)|Ft`hpIv{uKRf?h_TRGq-uoX(x9e-A+x4{4?fO~icD<~0yFOOBT@NeW zu78zo*Sku$>szJU^{mqE`c>(6y{dG(K2^G1k1E}+Kb3CRn@YFqOQqZOq|)vBQR#NQ zsC2tNRJ-%|+5PVhWaoePfx8c^&%buN|D9ZK_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F z_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F_rH^F z_rKHbJbrfn(}URgKmDN7530|x+4`J>3DQJo9X=v$1BJ4x!%8Y zJS_D3uHzHO+fna7ay&X7obwl)$1m$$dnh~q*B*N9q4oLKK6Tc2`g;A?@i5Tq3&$(R z^P%3qbUZqq&Gi0-2x9u|6i*YSzt?Wp%3IUXGk&iM<@-fa+cGUZi z9FL9%=llid@ymMKj$r41+Y#H2sL#Llsk6S**XzfQhk;&SI9@rP5B2_~-A&D z!$7Yu9IqVDhkF0g@#uIq)B6{WSB~d%y?^O=Sm^a#$0v@rquzhycyv5C=Px*qU)Jj% z#m;~KsQyv)`PV*m)_3}P{n+s^(CZ7wE64Mp-oJD_I-bq+{)OX}0t*LNMCINpwW|B>U-@!*`l;5>d=@2sb>^MBUU&U#vX{R$AfeJ zg7f%gy*r-4&i@_HxZ@f1`PV*m)_3}P{n+s^(CZ7wE64Mp-oJD_I-bq+{)OX}NgF^<&4wK(8+x zuN=>ZdjHb#=y*2M`xlN^j^}f|f9ZHw==EL4CyuwH-hbqHbUZlcFF221*1O@?+4;ZW z*Khds`uuC3I_o=qy?*R?80htd+`RD>a6ed_4={nVW8I+j#rN7L%o0Lcyv6Q z>HQ1GE64M>-oJD_EcE)W;}gf*QSU!;JUSkn^B0`QFY9f8E<69*pS%6J_4(I6b=G(K zdi~h(FwpA@$1BJ4q29lAJUX7u^!|n8mE-wb?_W9|7J7Zx@rmQ@sP`W^9vu(P`3uhD zm-P;NK0E)1J^!%h*XLjR)LGx@>-A&D!$7Yu9IqVDhkF0g@#uIq)B6{WSB~d%y?^O= zSm^a#$0v@rquzhycyv5C=Px*qU)H<0&CdVD?Tg#>`PV*m)_3}P{n+s^(CZ7wE64Mp z-oJD_I-bq+{)OX}${Fm9B)Ux|H$#^cyP{Na2~&`ch?Kq`M>LhcfGJa|JtX{`c7Z3A3Gif zdVS$|<#;~S`pOkDe(ZP{==Fu;mE-wP?_W9|9nWTZ|HARg@qDiLFC7mHy}s-C z#PN32`;Q!tjtA%b1?Tb0dbez5=l_${Fm9B)Ux|H$#^cyP{Na2`Lq|H29E{2zb9@h8;hU%TC3 zL9Vy^DM+{bCrG#ZB}ljXBS^RVAxO9TA4s?R9Z0wP8%VeN8A!ML7f84J6-c-H6G*rF z5lFZD4@kHB4M?~93rM&72}rm52S~U31xUC1188?1zpS_OM0Wmnp1AYG`uuC3I_o=q zy?*R?80htdhrIC>a6ed_4={nVW8I+j#rN7L%o0Lcyv6Q>HQ1GE64M>-oJD_ zEcE)W;}gf*QSU!;JUSkn^B0`QFY8@)5itKKN5_M6{(|%PWxab}!Os7^uekRW_4(I6b=G(Kdi~h( zFwpA@$1BJ4q29lAJUX7u^!|n8mE-wb?_W9|7J7Zx@rmQ@sP`W^9vu(P`3uhDm-Wv4 zBX<7J{G&7fs6PMNr_TCLU#}lK9tL`S;dteEKGge{jz`C{nclx}ymCCB>-|f|!$Pm` zIzDl{9rgYr$D`xHIe)=<{IcF{r?T^Z+o`vmTAzRIQ)hjruh)+q4+FivaJ+InAL{)} z$D`xfOz&SfUOAr6_5P*fVWHP|9iKSfj(Y!*u!tu)Se5m&?9gmJ@GrfP|c;$FL*ZY@_hlO6>b$sG@JL>&Mjz`CX zbN+(!_+`E8Ud_(`b+5ke)%E$;K6Tc2`g;A?@i5Tq3&$(R^P%3qbUZqq&Gi0-2x9u|6i*YSzt?Wp%3IUXGk&iM<@-fa+cGUZi9FL9%=llid@ymKwyoR0s zD_(QOYwGi_ed?_5^!56&<6)rJ7mins=R>`J>3DQJo9X=v$1BJ4x!%8YJS_D3uHzHO z+fna7ay&X7obwl)$1m$0@;Y|@4|&}oudC0$_NlYJ)7R_Aj)#F>UpQVlo)7i@rQ^}@ zY^L`w9IqVD=X(Fr@vzYAyN*vBZ%4iV$nofSaL!+F9>1)&^(=P&x1P22tor-fa+cGUZi9FL9%=llid z@ymMm{~0^~_y5`be^#G=?Neucr?1zK9S;M&zHq#9JRj=)OUI+**-Yk+`RD>a6ed_4={nVW8I+j#rN7L%o0Lcyv6Q>HQ1GE64M>-oJD_EcE)W;}gf*QSU!; zJUSkn^B0`QFYBFrE<67xpL_DT_4(I6b=G(Kdi~h(FwpA@$1BJ4q29lAJUX7u^!|n8 zmE-wb?_W9|7J7Zx@rmQ@sP`W^9vu(P`3uhDm-W8#m+bt12x9u|6i*YSzt?Wp%3IUXGk&iM<@)04o&Ozg+3}Y8{A-^&>pOkDe(ZP{==Fu;mE-wP?_W9| z9nWTZ|HARg@qDiLFC7mHy}s-C#PN32`;Q!tjtA%b1?Tb0dQU!&o&P7F_vG{H^RIpC ztnc*o`my6-pw}0USB~dHy?^O=bUd5s{R_t{$Md<~zjQn-^!l#j6UW<8?>}-pIv$+! z7o5j0>%H%<+4+CpU%&6K>+`RD>a6ed_4={nVW8I+j#rN7L%o0Lcyv6Q>HQ1GE64M> z-oJD_EcE)W;}gf*QSU!;JUSkn^B0`QFYCp3vhyF`8Q)o-f9+FeeW$P2j~x#Ky}od~ zay%dE{Y%HA0t*LNMCINpwW|B>U-@!*`l;5>d=FPzWLe>gwb z{~Qp`c6{o1r?2-PJ01plec^cJcs|tomySorvzgw%aJ+InpX>cg$HPLe?>atlydCxa zBgdoT!8w1ydHmvoS#Rz9$M|4;u(jv>zwiH;zwiIv_kXoN`IpR}{L3f*vi2SKGv9Il zj{9rR|C@RK-}!&n{*|9I|H{w5^7GnH{txCS|HsMyQTv_uGQacQJMXQ%_$l+^r^Qce zzkfIL`*+{JyY{U=V!ri9TYpshA$K!BUt#+nL{X`)#+^e&#orpZSe5zft?WUuS;r*YEv$?dMg@ z&#TU>YTvMn`G#E^cGZ5_*O*`SwadO%`=(o%Z@OjEEw%5wnfcC}civq4@i#F){-)z^ zs{NKPGr#4_w|u$wQ*LB_%8jSoSo>YqGr#NlyRNVO+%GUc_Y3EKq4ozp$NYiMJ@C2O zFa8Yki$8PmXKFv})65V1^kJW_efuYwZ~x@>Pu70yPUgq%Ja%X8H(bs9hO2M5y7rTH zFh6O>Njqx4*7n-(yNdaJSKW72?fom6_pj_i$o%LJ9{s`Euf3f4wU=LedF`9u&wTUyH^0C3U6(T7b?L54Yd`%G z=BHnB`X#mReh>5A@7evH+P7T9e9J{!E~-7ei+OlgcvtQ5!rGVr*TerCWj7hc*heq<=C8SceLdG)aLon$>p7mzAAiB|4fD5dW&7W{_13L? z|I_IFX}sX_&u<&fgR6X_!APV~_7?*=ZU7dTyojw`R9C z%pc!k`ybyrzQy;yhR$Epx~5_N$o<&HMYpUD_}o>3rNTHq3_&^zVN| z*iirbzGZ*rTlU|wf9<;uWWM{r-3Qiw`a#T3Kj`#>YTtD*^IZq;I=J@Dk7vI5@tYrC z`?ZHMzxL2;53T*^!gzU>I++m6_FMC}`&!hGXXHa?~H{!z^PNA-`Y{k~1i z@7r|WrrOVX8uPQBcGlBszvCIqmv?us{iJ6yU*7$?_8Wek`SR|-wIBOz=F7XM*1r9@ z%$IkUto^X(Ghg0)ul9@E%$Ij3tNnov^X1)}YCrcknJ@2dQ~O;nWWK!nNA0J)i23sF z2({m`nfdb5<7+?u1m??6*RFl%iOiRuK3w~z-($Y~bk^E0JBj)7(<^J=@G|DhPxq_+ zypx$PKmDxsdtbqP`RP!#pZQ13m!FJw~U^@)1EsXqjJ2XFoTjYoPzw$~p%8*ZOqU!Up|Y+m&VHm~{wn^%2;&8t4a z=2f3y^Qup=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPt?Bp`cqv$!RA$; zVDqX^uzA%d*u3f!Y+m&VHm~{wn^%2;&8t4a=2f4l=l6O2`SA4)A!yI``s(>m*H5so zPxT2lulfX=SABxbt3JWzRi9wJw~U^@)0ZpYs8If;sjH=GZ5gW1nD- zeS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD- zeS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ5gW1nD- zeS$gm3Fg=*m}8${j(vhT_6g?LCzxZOV2*u)Ira(W*e94{pJ0xCf;sjH=GZ4X{q^@h zuum|@KEWLO1as^Y%&|`}$3DRv`vi0B6U?zsFvmW@9Qy=w>=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbLrd4u*u3f!Y+m&VHm~{wn^%2;&8t4a=2f3y^QupJw~U^$9kw`UIO-eS*!aKEdWypJ4N=VqfPcX+m!5sSpbL=VqfPcX+m!5sSpbL=VqfPcZ*~oV^XuG-Y+>fA>ICFn}Q_tFW*V zO5+#m^vJ@7P)mpg3o#nRk5x2=a{5)4L{QWs^YMZ~5)CGpHB66a#2EZQqpV66C6*K= z#A13vA|Oh1F^aJ;uB?AqvoJIF|MWBS$~A9aeI4#KrA6jyAfyAf zyAfT z?fFpO?_hc5Cs6ZCm2UR z!8rN}#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAf zyAfyAfV%1^Mo@)Int`~=G@Kf&_KPq4i5 z6D+U%#5%v%e1M-|9Q_32=qDIQKfyTq3C7V+FphqLar6_6qn}_L{RHFaCm2UR!8rN} z#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAfyAf6ZCm2UR!8rN}#?enOj(&o1^b?GupI{vQ z1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAfyAfyAf zyAfyAfyAfyAfyAfyAfyAfV%1^Mo@)Int`~=G@Kf&_KPq4i56YKn5^8tQ>ar6_6qn}_L{RHFa zCm2UR!8rN}#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAf z%e*IQj|3(N8dreu8oI6O5yuU>yAfyAfV%1^Mo@)Int`~=G@Kf&_K zPptEM%?J1i#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAf zyAfyAfyAfhE_jj(&o1^b?GupI{vQ z1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAfyAf zyBK>G%o8(N8dreu8oI6O5yuU>yAfyAfV%1^Mo@)Int z`~=G@Ke5j5b^Zx{LUVh5N1~r#dF3ZqUik@@SAK%!m7idFyAfyAf zyAfV%1^Mo@)Int z`~=G@Kf&_KPq4i56D+U%1j{QwvCi)`AK)h#M?b+h`U%F-PcV*tf^qZ{jH91m9Q_32 z=qDIQKfyTq3C7V+FphqLar6_6qn}_L{RHFaCm2UR!8rN}#?enOj(&o1^b?GupI{vQ z1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAfV%1^Mo@)Int`~=G@Ke5j5b^Zx{Lh~%p zpC_I#%JRxju)OjUEU)|o%PT*@^2$%Jyz&z)ulxkdD?h>V%1^BGd(8*<3C7V+FphqL zar6_6qn}_L{RHFaCm2UR!8rN}#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dr zeu8oI6O5yuU>yAfyAfV%1^Mo@)Int`~=G@Kf&_KPq4i5 z6D+U%#5%v%`6u`Z&9gv%p70YaulxkdD?h>V%1^Mo@)Int`~=G@Kf&_KPq4i56D+U% z#5%v%e1M-|9Q_32=qDIQKfyTq3C7V+FphqLar6_6qn}_L{RHFaCm2UR!8rN}#?enO zj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAf0|>gK_i|jH91m9Q_32=qDIQKfyTq3C7V+FphqL zar6_6qn}_L{RHFaCm2UR!8rN}#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dr zeu8oI6O5yuU>yAf3T@cjhKD?h>V%1^Mo@)Int z`~=G@Kf&_KPq4i56D+U%1j{QwvCi*x{t13U^DNMxC;SAV%1^Mo@)Int`~=G@ zKf&_KPq4i56D+U%1j{QwvCi)`AK)h#M?b+h`U%F-PcV*tf^qZ{jH91m9Q_32=qDIQ zKfyTq3C7V+FphqLar6_6qn}_L{RHFaCm2UR!8rN}#?enOj(&o1^b?GupI{vQ1mox@ z7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAfyAfyAf zyAfyAfV%1^Mo@)Int`~=G@Kf&_KPptEM zoqvL#&^!zD=LtW-^2$%Jyz&z)ulxkdD?h>V%1^Mo@)Int`~=G@Kf&_KPptEM%?J1i z#?enOj(&o1^b?GupI{vQ1mox@7)L+BIQj|3(N8dreu8oI6O5yuU>yAfyAfyAfyAfV%1^Mo@)Int z`~=G@Kf&_KPq4i56YKn5=bzvwG`G5)yAf+++vlI^`5l4erJo>q=_g2D`U#SkeuCtspCEbZCrDoU z36ht7g5;&2*vap8{)v7q=_g2D`U#Sk zeuCtspV-OoH6Q3F2;cG(gm3u?!ngbc;ah%!@GU<<_?Dj_e9KP|zU3zf-|`cLZ}|zr zxBLX*TYiG@Ek8l{mY*Pe%TEx#E}XUV|M$bQ!?DKCvj2wg$ohYFH$BEqpIHBIovHrnfSt_t zv1;{K)n9eu0lN>_{j=BO`n5fE&%XRvQupl3pM7~J9=rQks9V3br|y{BE+BQs+;+@u zop{0S3!rZO+Mc=_U-b=AcjK#Wd{rlYWA`_pZvEPxy8r#GGcK&R!O#9Z>VJ;^`&s|{ zS)I5(;@q&!YkTVc=0!gsb$|1szj;w7{@}tNT==toasAq!y2oCB#YN4Z_t@(ndwnNf zanThQJyf@TZBO0Lzv=aFZ`S?%n|}UHo%s5)`_3I{o0+Hm{nP%w6ZiY@ejlzg=N|RVtD2c}k2?3LPW-W#<#9#T$uY9J?eEwONU)#)l{#l>5&xXsdz5Lob z^PcA)`1xk$Jgt&mZ{tI@9^<5B_a4)A?)rzxctw{ovo$nf+h=!W){I{a?NR zt2^<9H@xtMI&<|a4*ha7bM-5(enlr9`sG8vTxah2;DdkH%-r+Adp_8S5B}YQe^+O& z%^#dKGuP(V=9ZZ~IIA=N;o!&pLo@Rq4*m}ZcjDvz;c@>^XO24I1-CadN1brg37zNf5-uaw= zX=aYR^T<0p@j3tUoPVh^pFVqjUo-RRvp;=yC(iGi-&be8dDV^gH#7AFcH)iq-*|tW z`Oq_Nd!U*5&@(>tj844mf!iLaGxdL(nfg<=^Rsb8XN6(9dh^b4lH1pBpZKy2d`2)NS^;;Turb*ym== z?XubDW@ls%z0dV)d-i3v&n0!6eQx#xsB7$VJI$ZB+2?ky=sfiE8vERRnsu9f?mn;I z=b^gBK6l@`Zu|Uxv(Mf4#rxLtWBc5nYi2h4+@E`ip`Cs1Bbu4bKKBuCdPJSEeeNTh znaw`;k)O0d-Pz~v*UW78x%+kYt24IG-M^XH>~r@&Z~r=D``kx2Gn;+xqgRivGq%q? zpqbh1a}Th=wv6p_4{ByM``m+e*&*!CKKB=znaw`;7oPhIb;kC&zu3%d_PM`!;xE=2 z+vh&Enc3`fAA9;^>x}Jl4{c^P``kk>I<(H%KKJp>%x0ha`0DX>#`d{~H#3`k?&102 zb;kC&M>I2=eeMyTJEG1EZ+`I;o0;Lw!+M|l#1}uY&e%Tp=w@cK&pmp-qwCBYkNW15 znwd8q^~QRi`=oC^sm{FchFhM}%+z}v+vh&zmZ#Ji+vh&Lnc3`fpMLw(>&#cb{lGJu znXi8PtMxwjnGZa(&RlTTujI|l1!rAQ?{o8C$?J^mbB}FiHv8OTFSpZ|M~2Iuf8c*= zW-fdFW%WMyKOOj=>P+_6AN~o)c=yU7LcR%>xDb37xKlt5xpL@!Kr_>qS=f0qs+3a&)@ZbyT%#jB_?#0c_kp~}H z?{i=LxEI$M+vlFq%xw0#XT0EyI&=Ls?|(%zbNw~f*ZbU8y#Ez-=11r4|LSJuN9X;h z-sjp;N1Zw1&gT@(%n^4UQSWn$=M;73Q)kcL*vx$D>`&GE+&9kOSZDs}svFO5X8!4_ zf2#Mn=ihjKow@QEw_VW8>^QG@+Xc5>P-kpEu)CS5_YM#3bM0f-&sfF7=p!>n+7Ie) z&a+=1e%Jo_HTJ)+wg0xAcfZEY%P|+i6P{pAY%dw(xOqQ@&EE5OhTm_V>u=bXA9xWt zPWkc!Uw)tyUu3NA{mXB=?x)Rv*I$0yFTbr5ulwnBKdm!=eE$>gZ)X1Z{y)CI6Q5|T z&iv@ScmBAUSgI%5Y^zT3Y`*r4j-t*t? zX=eWCJ^%BbPW*4i>deV!E&sWhIr*%U?K5fl&&z+VGgsaHy1Sd1tM0z)?oNE2u{yKg ztLNWrX7+paes=sm|K|Lgb>^JAj=igyIp?l(?lLE0tj^r}^1ryVnYs1lx4yg+|KiTS zxU3@EDC%*BkZ~SVVdEnMNZ*68Cxb=Zs zJMm6qb>_?$o-}V}&V1pSFYLsV<|obT%$MxsteN@JEnm8&6YaF^mO69v^AG+?GjsIw zkG9Y3gTHd{SL)0qH(hX3GjqvJm)vCT$5@@Y_vG)~*v#B}^1UZ_;&*QR&W&~Ev>Q&n zp_w`DhSO}HcB-*DbIpmL{bDn7&575X*omM0;%C2DXAZgk@avnIL#{u>T+QLe>dae@ zzxcXl=B>xS_4rP___~X)t21|9`$KXbdDpdfUE7I2G*)L$?7j4}%|0jgPV9B!OF#S4 z&(@hMuleFN&CHe8Txp-{Uo=){_I>7)$+_>o&)oN!o%rNWJ=xBEJ7L!+{)C)E@A|~9 zPjup+7^^e4JmufWxp;j<(24){v4693@lH7ABftHT=KDG3BgcHC6Mx%Soq5mEUm0eC$ zqRxEbiq89+nJ-*nugA{&JMXVEM?T@~X)|-=6OMdBC!Re$ds=5My8Nre!PNGp6TfP# z&fIgz3GZ$8x#y634(Y@b-h0A(>&)}t^Wpb2Go}XK(}^E8R%bqO&;fti%zWaYPnZ)r z;7im|rRNimb=&R3Qe5Zd3NO9iQjtXx6GM!!X1}9?+=?l>yAtA zxTF)G_lM8>!#Z>P&wc9RX6E>xJO1Z7@lzLn>f$IDF zT;zJ+y#3ma=Vz~Poj337N1Ju_&c?gP57qqaSfLXR zyZPK^J|1@SVRoE-?(TCRs@c3&|J&66w#U8uEK+yeyN`Q!C!V$YET~(*wx{llGtMA& z_Uaktns=W8b?evm)SY|yZ;-lk4?p+tPW+ACzX5gY*Y?!C`#Z;xx_5u)-QVfN<8~hh zb?evm)Ls4Yr;@s>KYsPcJMpQzp9*#B*Y?!ieD2|-?&foEKG!}kcOMRQ>(}gn;05qC17`FBwNo)(s;lPLb#qEDz+rFf3vwg$iP`AB(?e|IQHowpCRH)njecJqxy3PEA z0y3OB5I0Ndo|32*Rk<@Me9_?z^&$e^i{(H2)e^R&k z`w!eea`Oqr+sn8_I%Fnb13+y zb={#`ulb*|_E}FH)aJ9^SUuUc&v;bx?_jgfc+~SARcCD9L)_73-(#%K*glMSq0K(* zfb-1@?d%I5)BIVRec@vccubwKed@u@%x0f@@P`ksGq!JjY%{ajH$V1-$JQC!#}ntX z*~cIHRdYT&#|lqq_SqaOJmG9Rd)qnY`1j4s=9uH(cm92yv16Abo0-kAi?KRm$3RCl zGn-?eqn>?Kov~vn;(Rv8QpW0x9g{t|*=KW1_T=Awa-FebJK}sc$9Bf*j2$Bq=d(FR zeEOf5^VvDpB+h4Ztoh6*oAcQ@W_@<^{cMg|pZ&#W*BLwZ?KLx-V_#!+#*U$h7up;{ zANxb|LOaLe$2a?Ij>V6^`1m?w$Mh#OGn-@j6AnM2&e*xZiOtOB+`w3!v2zUKjyC5Q zC!K2UXy;tzWrNezNnemoD;t2&KK1gJGVT&nc19M8mlvQj{4GOW^<1E z(nr3u&e*x`%bS_axvsG~W9Q7TY-Tp+%&$E5m379>z0YiBHs{`F&d;nfb`JmB&CKQ; z{;Bv8>WsOGUCqqKO&F^)<~ZKa%xoOT z8*Y3x?-m;_)_4>Vg+tP-o0(4H|vy^_tnfb=<}*u)D$bItK{hORe?Q zY}U%A<=0zTzyG~fmgoOpD^u@fCf-Xa-plL6d+Cbz5^cjaw%ul%XW>h+joCJ9Wwy;) znQgOHX4|Zl**0rsw#{0ZZL?Np+pLw@Hfv?J&03j_;<#;_854D$d;WhvuP9GFj2vf{ zrZ7mv zXeZtu?uWYdYkTV6aouOLdfWZ%xVQf2_>Sw|ahzy2 zW9W-7x!Byy$M*l&&N1}9U-;h7H)byG`-OeK(23vs`S1OF{j)xI@qam}nfctspS!pd z|I0!D<)AwA=l`-VIfnl8fBEx&>BM~x-goC1`lEN>b4at#NALdV-JMt;N!NYuedCfG zL*M(xd*5j8{LtmjG4z>}Qx9wQIdgL6#9ZuQHn7$wd)ckznrQa2>}8#J>k+rwHBmbc z`NX@(@$ns>xWk;~yN-I-QFZ37a!9Us-c{aJcH;0!!zb05UpV5br#9cuFC6g;M|9#< zPrd4?b;f?}-u92PN+Q-<%-e#Z2{Oe=>)qG?=wQHH3V3*I1Yi90z&YjQc z#NxQ(xH|I>k9)(fHZ!)s=5d|)hF^Wduhy9d-~E@r*33Nk?gz~`{pGLy<*(J5Gd}Q( zr!+HXeBg`^bmA|b@{6a`nQ#C4=TB>9zWwXp{`F4${Ar&*tcx<7i^)#RGvAHD34>~~mSEv+*jx$*wjG=Kg_Zv4oN_IdG| z`(IOM?!W0R{buI=o9?%30B`BPrC(>>{Muv4anYM!`)2zbIOZJtFtf}r{n_DfZua@5 zKl`OWGZ*#d!{1zI_IcGwzu(O4^QwJbW!E--|D@lqGl$Uin(On0?e&`L*Ydb#F{!iJ={MX{Y7M=Ki z%KuZ=ng4wB(?8VA{O63Kj*+7VSL?!79P> zWqZ$3u&`>c>kBp$tQ*^VP6UgB1u-u{Y?sVVg&Tj9n`yQS_^oU%SZ~-~Hx(?5+Up9z zD#7w`d(Tp^C|I^=?^y^|36?M0dzONQReN1uu$f@p*xqv@SQN}eOzSKKv0bvkytQtZ zU~|EG!}gw2!NRD$t`MveEFZV`ECq{#WsCNng&Et;6TzZjLCi}K+a((m zt-ps|g3Sf%4cmK81q-A0xP}H3Kqn?1hHMRLEd_8c9&pt!Ft2?o>RfXsJ*TbtP(6AxA!as zi-Ki~_MU}cm0&Et;6TzZjLCi}K+a(*c zuNB%Q*j%vQu)XJ0urO+`D+H?q%g60KOTp}GnyvelY|+jN!79P>WqZ$3u&`>c>kBp$ ztSi=!O$1Zx&VrbiAhwHL-(0kxzqd2HzS&x5*Ed_4UEgeFc73yz+4ap_03jh*Ed_4UEgeF zc73yz+4aqKCbo;6zqi)e`Fks~^Y>O}=kKk|&fi;^oxis-JAZFwcK+VV?EJlz+4*}b zv-9^>X6Ns%%+B9inVrA4GCO~7Wp@7F%Iy5TmD%}wE3@F-7dlG{Jpi#&fi;^oxis-JAZFwcK+VV?EJlz+4*}bv-9^>X6Ns%%+B9i znVrA4GCO~7Wp@7F%Iy5TmD%}wE3@c^_f}@-@2$+v-&>iTzqc|we{W@W{@%*${Jout?UD`3*1BDS%?0ZX z+j~w03#0bBLa<7(eB9o%6f6psE!uk)f>na$%l4k7U}4o>*B5LiSU0x!oCp>L3u0b^ z*e-T`bJhO&+0N|xW^0{Y-)v=eeY2I>_03jh*Ed_4UEgeFc73yz+4ap_03jh*Eidl*e=-vJt1nb83 zo)f{MU_s1F5Zfgi%*1@Qv$?424cqIcf`w6gT_IQ{SUzs=Sqc^f%NFfD3&ASE@@0F^ zQn0XUuj>mo6RaECdrkz4f(0=zL2Q?7&~5#G=`O+Mg7t>&J*R?&QF~n>SS46KZtqzN z76r=|?L7;@D#7w)d(Tp^uxhXC3pNw18{2zM1dD_03jh*Ed_4UEgeFc73yz+4apc^_f}@-@2$+v-&>iTzqc|we{W@W{@%*${JoXg`Fks~^Y>O} z=kKk|&fi;^oxis-JAZFwcK+VV?EJlz+4*}bv-9_MCbo;s=R(Y9E3^4*Wj3F!%;vL| z*?hJ#o6lBe^V!O5K3kd1XDhS$Y-Ki|t<2`LmDzl@GMmpn;n_m> zFC1PuJYVYmrNhHY*Y_Phb9guE{u75shX-f=g0uay!Q+3*=Kt|Oef&??^RM~bsqYPS z{nX)Mr0WZZR}Rm|x_{~L=Zfnvcw{>ZnJKHZCeCbDQ{=f92Fa2me|C-O8`rc62PaPgcy1sCDv4Nm(ZoBz{(c-jxw^RM~b zsqYPS{nX)Mr0WZZR}Rm|x_{~L=iVg}!${W`4zC=Zk9Ggj;nCsQLiaBmUO7Bp>i(s}!%Elp9X@k- zH|qWqhewA8Xa0h-{j$M<&F3Q6^A`^M_JKRkMA+rG0_AY@z!X4zC=ZFLnRY;bEog`wpKuyc>1@iNmAAgEN1@*?!sJ z%ztF_f95})`H$=Q*L?2O_lCND>hLhq^@YPLhv#G6zjSzXc(%~}3x`(@&zHJ?>F}`9 z^?irW9Nvw(|HR?Z;lY`|;B3EaaPQx<`M>w?@BRDr{A)gU>U%?7KXrH*>H5OqmBaI~ z?q51QIy_tG{)NLUhv!S(zjSz5>H5CIXAbX1-GAcn=3*L?2O_lCND>hLhq^@YPLhv#G6zjSzXc(%~}3x`(@ z&zHJ?>F}`9^?irW9Nvw(|HR?Z;lY`|;B3EaaM|Cn`M>P%F8jOn{A)gU>U%?7KXrH* z>H5OqmBaI~?q51QIy_tG{)NLUhv!S(zjSz5>H5CIXAbX1-GAcn=i!dlM~4Sz z{(`gpvcXMXWb=R17jOFFdj2(^JN3PxuAe$QjC6hB@XF!&Sobd-9vz-7bpOKPmBaI; z?q51QtaN?f;WLMKqwYU(cyxGh<}WzgFB_bGJ)8g2uRs0z_55o-cj|jXT|aer80q@L z;g!SlvF=|wJUTpE=>CPnD~IPx-M@5rSn2w{!)FffM%{nn@aXX1%wKS}UpBb=IyV1z zUw8L)>-pDw?$q~&x_;{LFw*sf!z+j9W8J@WcyxHS(ESUCR}RmYx_{~Lu+sH?htC|| zjk^ED;nCs2nZMv{zie>M->~^V=WovWoAvx_K6mPSLtQ_0co^yW!r_&}^Rez6U!z+j9OWnV8cv$KBzQbn@??&B!;_&G3;LKlewqG`Q;InN0ANcG8pIy(t=5wdM zH`Mi0hli1_FC1PuJRj@+rNg7cvxV+oIJ|OrzSR9ohliD}?>l_v@NU%oCk~Ge56=7r zXZvM?Oa42X|4aV+CI5Xr|C-O8`rc62PaPgcy1sCDv4G#G$!yHWR_I6OK$IP({r z?UxNsxr)vIDOa6x)q4IlpF8!vp{}1gJdAXG;qc1g`B?Wa9UdK?Ep-3F;g!SlrS4xk zJgjtm-{CWdccbnoiaON*K+b({gHJ>~6y`iq3Iy{VYec|xR;rUqiFC88oo-K6$!r_&}^QG=zIy|g&ec$0Thj*jy zKXG_;cyQ(~INL89-1h-C|Mz|1z7MSDU-P+B-y7=ssl&ra*B1`29G;JL|I*>n;n_m> zFC1PuJYVYmrNhHY*Y_Phb9guE{u75shX-f=g0uay!SD(;|HCVWSFGn>^SM*s8|wP0 z!^23|7Y?r+o{x3^(&5qJ*+Ta(99}s*U+Vs)!^29~_Z>cScsJ_)6Ng8K2WS3*v;DHc z{!=#p`%m|uuIFF#xl`X8>iVg}!${W`4zC=Zk9Ggj;nCsQLiaBmUO7Bp>i(s}!%Elp z9X@k-H|qWqhewA8Xa0h-{j$O3m$Ui5-2Stkf6eDkeQ&7irw$JzU0*o7a(F)0{Y!^O zhi41jzi@cv@O-KJmktjrUEg>3%;DXr`%fGm9Uh$d3(oe-21mb_&HvHwJ^H=t`PY2z z)c1zEe(LZr()ESID~IP}-M@5rba=MV{R@Xz4$qgmf9deB()E3Z&m7*3y8p!C(c!_F zzu;`YY;etc*!*Afo@?H-o`22fPJM5v>!%J6BVAuOymELx*8NL|M~7z%-M?^n`3uhW%LXU@DVzTj|MbK^UC+PfbEm#H)b&$`hmo!? z99}s*AM5_5!=uBqh3;QCymENH)cs3`hn24HJACHwZq)rJ4v!8G∈u`(=Y$E@kt7 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∈u`(=ZlypGNP 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
L)}&q&HHWV&yW&Zq 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

KZzx68>NC zwSnwd7ctgG;+$9Nn6&E*ob#d%DhX^)#9kM^W-Q`w`Z}!6qrWT9_`b#*n*rw7aa4V% zgCgi>U_+FR5VR zXJDX|M}N9bGc;l)zMu{~GUtIKlFKicb7OAq51!BmJSR3k_%~t^yEx<-Ym*)Z4nK}B zs1sge76S(wewqn5FJi<>?6D|^lz7&`SM)Qmi73Bd&hSD%1BVyp>?)b_z=2HXMRy`5 z&ewdg$@uzB8SVW1&6tntvIkw>u!HP`zMNsl>HENsWt_IA-?71t&3}naL*(|=p&xT9 zI>d-YY#vLDSVKqk2R5WSb|-10_Qa+ka_d{y8Q5eZSN(x!Kk(9Hb&Pa|9EdstZ!V=g zzT!Th{_H2dq7E!_ZFsbhw-Q5_`al(SanBR=ZqmcR5Dj@NvH2Fc>JL2oiR@Tc1L^l9 zl{c?|H4Yt>tNy^|PHgd2ud8DRUEaDpyfYt_y9)c$^+RgUmBUt6|IdleA zx%sp^Nn>3dtK9f5Z-P~BK1F9>l_P(%XRMA@9vZ3R8i7@g{JS5)Du+*KabCnKhm7(j zSmp3CbOv^D`Zu3e`^H!utK58axy9;O<>sQxn_!hAf8!XdW0gar>j+l4xe%R!RSuu{ zH+mRY~&FY zu_!mqjuETNp^M9N9yohAVj0D{0D(PL;`B~G4dT>s=(a6j_#v*&qqqOZ$2#C=ZXz%1 zSjQrd-Djurxej(vVylQac1_n2KiCB!_t$qj?=}3KnKk_k94nSOsFped$Li`j;>T)D zeUG(K$NUrf#6#|}D7Q#MXJC&tbi|Lrl;>Tsu`auN1oj>VMyxKkSRIQTvAVno7J2kA z{oA|@^;pDS7v*>+-Ujx%D7RRm({c3Bm|PpK1?)WxxyOP+Hb|U39I?PL zR$`Aud3YbOh7M5r2^fBetMlmX=VR6ZKXcRPBUt2TmhI3HEOOJa)ov&E#heEgxla&h zux2d#t>M6!LSn=s2I^Skrej~xk6@8|tc^ODxWr0qep;7Xq>e@Iv1n@=qSJBo(Cm8; z6MGK>n;+{Tbp(stbgXY(XJC;>52=H`CH5W$K12SL2a4Q8ZaVQ*&a3N-JbGvh=LHL3 z#7b;_8nK~)MQ%Fymwp6040-l&V=U`K;OL=a^Mf9yj$n}^mgo#D^6X)cWf}BX#E3=g zsOt>*nVE^sz#`8cj#%JE4;`DI265CbSmdS?|2Qvv<$fry&ZD>APw?Gsr|G#Jc4%Vj z3~}r}>R@M4XW-aDUB`Ar*Xh__$L*|A#LXB)UjH-&cLy{x{h^$eyrB+ z2UDhwV4rx%JyzF2U%Q`z z4`a<*T~=@4=%Hi8>hdPo{85g&h>=0Z=8iaf*keJ@Ym6TDSY2+hI<{EE*~9c>KDwWQ zvxg&=Q9V}T>>>R$h(pIcI`&wUHvs#0Zhyy)z57M_`5I-eYhCj5H{EVvteh^l>N>WH zh%s?uWYw{yLF`kr^IjRt{(scK=zQW>rPMJ`U1#7}U0uhrpdSm?{a~8Z5$sbAxyR}{ z$h!OK*ke&{Qqk!+dT92(5B$y+*kaio!!cqJqmqs-V`9W2Mm8N=B;x4dhy`CUXY??z z*F`y=iMN5hF3K&I=ydF{@Kx63TDdleJyzE-U1B^Z_E?ldO6)NFXAd{VvU&qY4;>>` zmp8%Yk8;E!Mg|?5JL2qNkL8)NF0(-nURPq{@yL7z_PQv?GqFM9?BR$7jeM3%*7V1AASR%2!Kz5V~8 zzN4?_KESR_Y~3J^ok$(*AnFW^dt;Y3!4{tKSnc#<-EQxV&AM`CTR&Qdji*h^@Zv%T>lv^y(={S05OxEREzBbX%kbA7e?t>W5L&qTf z048=AID5D;mem_LdgvIjy1WTCf0UyxVr0;y z7*%(pt;-@|1z++4IU%1|GKezy6sAm8T4Ru=o79@|1yx?L9yKfrpf* z41BP6{)F!hS@H~57 zdCI`^?0MxW1JASPm8T3m&z@JFGVnZmUU|yE^Xz%$DFe^5=ar`nJkOq2o-*(}dtQ0U z!1L^RkNOwvEe)>s_TEbU3j2u?W-= zybX+4qBF3GDfd`7^U>C}Pmp-SNuUyo@@D>t%?q)|qTHmE0}&(E-CQG9SH~8M7+s6IAVcgti&FR@`yBI4IQBL6EOS`pU$U_eqhRW;+XZ=cSPctTF9+q zO?2$bl$*3;!0yNIV9ov8O0&C1U|Uhdc?U}!zYC?#zfM$L5+id)Q+^PkPv6b-Bgr*kTc957UqN=za#y9*$T>^;n6shxF4R z4juRC*ke)N0PLU7A|T$+p@TSY5AVzP|L0QXy4EE>kI(G}#>(k(tFB|Kh#1o+MphkL zEaF)0cG{P(7wdLQjLs*HRZ1Q6)O7}qmDY7E3;MBO-4CWo9l<{3kbA7IgRHxsjy)FT zCKa8Iqladnb@_RPy@w%3tS+~zI<}075sMhvbZn7`qlY7wp@{1}4D5ALj%VU+V6TgE zizPZ8dn|m#c@cXLL+-ICZzdzgb7GH0Ii$o6=_gNm9X-tTJLHIEeF%9IZ2l-mEMjEP zv6&HP57Q6UUiyq4y4>rc++q!#fxWJwV_DFTJtxi{j#x%{Kcj~u7UdBsb=(Vepb_%s zh&u6w?eEyJZ<_WuWidnSL_3Yk*XF>n`%-T4ht9yUgSw9G2>QW}2<($;)Uj?8qw|Tq z+mxeL;%#8W>T=XNbUKbzA+a{*gDEo~^p84%5o_pJfUYyJApBDbyeNkTvBU70J=~;+fuo0xvxlkUeM_Bzvxn3{->B1Z_Aqt4Z>ckI_K<#} zGT#@LZwsGZSK_R;#~M1`w-L)sxxWB`JyzoMPCpIe)NvU72^fBePv=udKQQsL1{~82 z9DPlU^*3}jVxL*cP1xmmCv=}!X?8aVY%7Wwv4|0?V~a(Ml|YPG9a|*gykqoO@YU-| z>~&F&XX0&O#OiX3)v-ZhkA<)NzU4b*#7eox>N=)NjOU?akbVFYI}DsX+!)L14IDjm zj96XX1e-s~Q5P{X=-Av5XAgTU=t&QItS+}$9a}8o>|y#bAKlNu*~1abs2(eE_KbbnMHNo3vxV?k7(~^?e}N zR@50*L&hRTtd1=fao%}c9~n@-*+1gEW2BDNlK%4!&|`Hu_^vZ>?$#blbT(p-g|D(M zOCxaXlo5;aW;`*T6MHPmAtiPgJ`wAznPBuVaP-hI<~4K#n?K64hv~=rmVO4#9;S}> zFm(n-EU&=x5sch3Pp>Pn%ZNAompFSkVu6Ft=%HheMR|Bn9rr>VXoS2uqE38a@6XXe zoVTane^VBH4L;%zjH>;dzO1!ltAf~cY_(r&;YYAVr#x0Wb{nRpx6>!RFZiB8ASLu0Zo*YdS_78Zs*7A#!Ho{90C z*ke%+DY3(_%^q%yW%UM*9y&&>E^mU(ALWQej0`$9cf{Gl9?LUjT^ZNwN^CqHna{vp z7v*>+Hb|U39I?PLR$`Auc|;nqh7M5r2^fBePv=udKYYp!_$+$qIHwjkrb8VxkU9ec zrTolRm)#jsN3g9Z%Fm1^My!s_2eIjF#HKUwHZWqr-fK~8u_!k`9VZI?ZOBb0zKVT0 zu!)DC(W~4+>1W8#nrXu#{0t0P%Flp?&cH4X+w9@Sx~va@qlb>qn)fPo1eK($?H`x#{4m^ds0H5BD>$$D%wm zQpdF&d#s_e4L_by>I|QGXSmu}$iml@_ie;VdG;`MOqcq29y$i;2Qab2z}dsC$7)87 z9y-n*rjFTloq@B5)Ip^5W6z0S@K_eQ*F_w68<%GfnKQCv&K-MQl!uf$kQzRnPaW$8 zQ@-ZC@tu-5R!GRLTdITRxxTLtVv|xHevI{f;97xWMLE8p4xG}@z(6T?KdtKkjaZ2< zsIzt3=HBV2%P*L7Sl_&M3(#{O7%1f#Ym*)Z29JN{|AIQMo_+=nH2gFZFlXYZ{8n@# zyYMqGVx`Xu<_ztT4{>;5KCZG~*NaZ)Q)3SP&rTfUY;jiOdF*}da<7EPvG*OD zPRGq&ZHLalCKI{p4?O#UmmaHQV2Fksy`s**=0oJFKk)1aQR!!36N$W)7#fu=WRx517&81DJq#RD z%A0=~Is=Cn>V(CvAKTwnEza9}v1#)6TPTb8d5WmdP_cdYg)cRCo8d-zslj0@+Mg2@Hun_R=N4KJ3t#fOssO_hmK&Cn@`ah zSmnsSjaVJ4JTx*N*9fd~0%HV3otm&>7gp>EC=>?Hgltta9_w z~&FYu_!mqjuETNp^M9N9yohAVj0D{ z0D(PL;`B~G4dT>s=(a6j_#r->PaXX@vxeA-W7b#S9f_l_Avc94I$a-9%7KXUPS~RN zXSf>#w$(+9Sj33cvBR99+3k=q5I}66w z@4z0b>zFPvo)dd4${{6oXnH;i@72aw)`!5+L&u2Kx`hn@&iDTB|GoM1> zm|9|yn~weKIs=OwE7Q*?#N2EJb}Vwl>T;W5$0A3pE^mTGj#!>+#_Cw)h}GqRTCRmI zH=WROKY~T>v7p6R#E6yH{4`=i1B={r@Gt!cb{O*PVXogi^%ZfWhb}ii=v(Rt7CB;x z&cGti9`;z4LEz|NkJaVPP}dpw%*?tRJTA|9;OyauWmM>R4@WG@BNF{Ih@tPX5_=qC zJmVjJza`J2*7xU>#SHTlQO|K;tSCRH4|0p&u~kHjY>5%SV+&0jE8kA?az9wfiG5WE zMyxJJtzBne?+oP@OLRJp6(X_hoW$rWrZ2H5M=WCVLhP|9M=WB%#L+{u$-3-r5ZLM> zMqR|l4s5X~M=WAw(6L1#jvkI!@YU-|j96VBD0PP1>!Pj2>iPzWqlfkt=LH5hc8z0? zMR_xx7|)447Uhr+s6IAVcgti&FR@`yBI4IQBL6EOS`+wZ6PiSnoOsqOy+_VYY( zharxsh1@#U<^Ecb`aUyaZ!7)y9jwLL6l^QX?j$bHyIJb^9VxKI5*^$zs57v|qCD>y zsbeb^>%rH{z+M;ScqZNk_PQvyYDK4GkA<(`zxnPMu~P1_x{m1*<9X;9q#wY<4g<&9 zG(pC)dILuf9cK?y$NQE#1Ea2P+XS0C%Cm>*$NQFk2KKtlKJu{~iIIC^#3J_Rq0{Br z!x76&`n(c*EXu=s>bO_O9&6|TQ77@~eCp^crfjE1+B%A92DVN%%B^7?`>Ia;=yvLR zSLr8DMD?{P*jAL?0UBcwo1}GYv4|0i7_mCGSj2h9aG!Z+2po5S9t$zNUOW?T1AASR zTP)G(*kj?Vtjo24W2cN*UB`5Z@tin%NIxbWIvpdH)wnTM$I(NVn;-Nlbp)F~%Cm>m zLEi$~6LI!1b!I{rnT@KWB2KKrr$1|}(;_Tsw1#a}vvB#o3BBhRdp$;@c-W*XU zzOeV_=pfEj)%WL=MPGxD_yePAKabVtEZC}`Ja*0XJm(raC9y>(j@3>b>vp5gz}{iX zQ7f^nerYm-=sJr?EWo##!%JF&+aI!4it!R`mWG8^xYU|Ug?BNnk~ z4s5X~M=WAw(6L1#jvkI!@Wpu%dtH>{nRpx6>!RFZiB8ASLu0Zo*YdULJH_Q53l_OH zhK|Wn?y-iBiBlh_>v*p=#*s{VUOjRvM#eh4qjJc zd&$FnN zrwlyLqE?YXp?Tkh@`ca)-t{{d(hbe)7t)2#>+ibujf?a*G#|N;E_^=njZa@lH#G0NevusD z^S>Qbx36EnkZx#hzj~4W z!sqs@+yAlGp zUj5J6{p?r#UTEj(pF5u(9~nHx3u@E5G*i^SJ!pXy@oZ{rr9Z%6qQb;Ea7- zuz?OPzYn{`$G=k9&^K)E``3?u1s7~!`|+>5;a@5n`i2d3aKR=lzVKXSL*KA@!@qpt zIb5)T?H8VVNpWtb1Irf$j5l8h&L%->`uWF4*v_{K|&D zVe|Muz5L6#U<2EifB8fISlQ4wY@mY+HevDVFIG164Vw@BNng2N!I@;;~OxHuMb}oY{{HHay?IvY~I-;2eKku;H2il?{Ev250-@ zf(`!;KxISUu)%r%xM0J-4N%$8H*D}X0C2&Ee=nf2p>NpW?*ib04gZEfWkcVv!QTqN z1sncdfy#!yVS~RPfD1PKTLYC1eZvNSQveri`1c1Y8~TO~{>}g{*zj)>R5tVt8~p77 zT(IHaDX47d8#efR1h`4SmA~fAatrZ20#PDjWKS4gL-SF4*vICR8@`4IBJz z1YEG;-%+S+=o>cpdkMH;!@sRi+0Zv^@HZ52!G?ctp|YWG*x>If;DQbR218{-->|{o zTEGPx{#}O3hQ48gzrTPBHvC%+l?{Ev27i+Q7i{?V8!8+6h7JBs11{L`Z#q;q^bH&Q z?FL-1;oo_vZ0H*{_crAcJuSkzS|}25Byth)`OeGKd|@g zt%BwH(m!T~wSzOYvBqA1t|weum>G0%X-upuT)TY6+2xou4&C{ekCvYmHgDd!vCSY4a ztN16Zt9JSRtN26v+b6$x#o1qfB`@`ty!5Z+5AAQC{@MEVYIfIO#Y_D=_GA4m+22O} z%UArgLt67xsA15bqd1{BFEw_(QuiC%(7CJppI=<5HgQ?RNQmZ@0(W z#QeS89?v><`DQE09=p8MT;_kkTYmoDZrOi}3YP5;^NaW1@Nd8G_-qgzUxA?ALZ~w%1BoKdS#UpYiz{do``kgZWPTXJx*He|%<&pPl0GELNYH@@K19 z6VSmm<=pI*(5_wH-(~FcamS3$JWKzQbIG@{r%L|F{(!gq{I0NHpHIcV=PKjNo+|l+ z_*^G@@pV3SE`xn$x<8+im-$q@&Zpuvzmk{vl)Tix!s~oi?590d_3zU8#qTCye)d~} z@5Z&ae@b5GQ`k@QDfnqV6|eKDc&&edpXRe*Kh0;w{vdzdKk*ZXbDxRYy=~mz;#2u) zelnlRUguNsI-io4`INlWx5DduR_t{?OZEr(>wMU&ssA#cl9%~Zyw0cMDU1CZ_xd@$ z$?UPqOMUb;*&pyapA~zZ&yxLNesX`aKHxFcr}L?Joln6}^C@`Nq8e@b5FQ}McgDxNb(eI+mZr{r@@?b;vkdVgE;-=c!m_(%1h-XDzbPuZ(! zead`GzJ>IK*gyVCYw@Q1n%v(qmx-7CQ`zhOsrabwTlbl%?w`f{e1blovOn&X?_XSZ z?%&P%)Bd@Q_D}BRX}-FDDqiN8XR zZYFwi|GPi=IIekS_Db45{O(;oU+MSwxMN1oOaD2iJ^Ps0CF~FUTYkRkcHf zb<6e#{&hZf^84es_U2RaGM|dq`BeP0r^@)Urz&3RTk)^+S+UpoEZHCAKh0;e`Pj8P zpNiM{6#O)wf}iG7@lEDa@mk*kKh0;sewxpU{XzaZpZJNx`Okdx{uZCgPxF)cRQ5Wb zir4v+yv(QMrM?wj=d)t3^I5V#$Y1BfUQPXPV?HG>^Qm~9PsLM)`#13%U-yr9WB#5% z>MQLJc%9FRz0POJ{xHAze^0zWEqXEcN9I%UI-i1{=2P&jX+OTqXT^StneO?Y=Ck6z zMFo5Q59>S3Pv(=lyYs1doln6}^C|c#|B7!ipNdbJ_h*5h=Cfe$)3+I|#y_h6bblM~ zui2|al%Kr*l)UVpir4*9@$3oeEBQ9|PsvOFR(Rb%EB3m7 zmh2DmKkc8}Xa8_5?CqbDm;F=mx_>HO_fN^o{waA`e=EH1pA~!B`2Ef9bNG7d-=*_A zy+6Q=mR~<|Cd>9Zzr;G<)BWw+@BW6*O!51VpM3mHKS=Tq`B zpNiM{RJ`U_@-m;2m;SHtI-eE$`8BEN-=*`5-_6GQvA=U_pPAldJ{7O?DfnqV1wYNF z;&nb1uk|nR(|i`}r}?bdALOt5Cw}5^{xeg1r{C`Pp9z(`%%|dYJ{7O?DS4Ss$xD4J zyv}FEUgxu9e~`bk^U-6=n*Z-v+Stk~;(mh2Dm zpXQUjnCiE^!~J8q_+#RAJ_SF`r{GzW&!^&3w##oZ(^Y<&PZj^je~SuM;~&*O%_no2 z`mgh;c%4tdPxC4GDZh$uu_nC!ici@pKh0;wzs_gH{viL;e8&50u9azh9`w(5ugz$6 zeK6*pz0Sv8-~6YxQ+~34N?!I)#q0j5c+Icm+t@!PFa2BLb^ol`>wK2%5AxUfuvdHY zDS4Ss#p`@3p0d656Vr+BPpLcQC-trHI-eDLozIf}LH^TxT11%Ym;J+BCSK=L*iZ8* z_=uSIhl+18A)jBxYkdp+G@k`~_T=jF)9+6`+PU|)^8PJ*u{)oFpXO8WoA$Tjo6M); zkL(ZlX+A6dbEdod{~-QR{nP%b^3(lO@w$Hs{xqLh^S3fTd}bP-n4Y!j_e}Y_pYZvn z$IlwBY0or!CA4do_jeileC)`0O)34$nk)G>_EgCq*&pzhpRc<8`bN*o__C);{vf{Y zsmfmGv$Zqp#{PUtUglHrI-iQy{7T+3!o$~OmESh{SK1%&I-eDLk8U%%y8PmIv)%t@ z^Ra7h|A4!J*ZCCuG@pXsw0{+Ev+47x_#^uRewxpUf9nWlwA;Uf_(%2Y{)tb_&wpmB z_qX^|ewv@mr?S`iRJ`U_@@>qgwMU&ssC-vr{rZm6|eKD zc*Q;zvicgj!dTj6y+EA~2{CHsT?r}?z##Zd{viL;{cU`I%C$1BPw8LD+iWnS-TifBf51=k$yif< z^ZNt$Hu185xR#XH{ZsK#9lyVeuhiab{NeRi`DuL%yzZaH{5*rJ%kT91gBdNa|6CKx z_PV|j>-wDbPr>v5jopuLuTQpz_V{W4RQ?b0oA%F&{ek~!|E&1Gg8ASxQ~dtpS$ot! zGyTjK?^iH4^qIdK2@D-vI#d2`-!7l8lzV)<p2Yjr!=*5zM znc0&4VSe$uzv!?1L$q_>)7v{0`=oo9m-$roI-iQCY}bDq^P%pvex$w?Ugxu7?;UHG zxMv>Zulr}Sy@PA2-)7V2Q}H^Vf}iG7@a&1tr{Z-!6|eOz@Y8%2?5Fvx*dOFS%_ntt z=Tq@IpMsy}Q}EM#D!!fe4`vki7u!GEP4F{f${n_m6451wYNF;E(JNc%9E#i=Qe^`N``~ z$;2Z#m(C{+0ZZ{Q`SiKUPxD#J&#hMDAJu=F&u#Voz<;Y{+8^`#gBy9-KW8m|>qqT% z|5UuLpOTmTQ}VKZR(Rb%EB1bOZE=5HvOmcGw0~}&{lm4O>t8<~EqU2L6|eiJ;x}18 zB`^D@5LPyIWHAJ+T!r~Pvq?Vp_WG=F*h;jAZK_fKIz?Vp0D z&)xSw%~q#9cKP(V%1`?zea-dxuG;_pDEG{2{HlKZOelULbglfE5Px?YF&}N$8m=j4 z`zaAVY1rlcUBo^g@7SZ~rGM#p$y;>JtmKdE4|vPZSKWSnV`gQ1nOVsn#MhZs_BtQx z?#-v^)@vrk)u|Lc&{@<<0-}c9Lll^1d4g55p8~J%YH}dm*3cl%l z3Vy2Z*7-2(`kI2kNw2Z-oKsyO!>?t ze1BH(vVSUj-9Hu2o?!izyhX=jm)}PJO8Wy|_s@#GN6-DUWPg~S-ru5DonQPEFXqEu zPQ1*g;&nb1Pg&d_s`w_e$1X4R(bt?`_}sJC`K;Kx_s08M#JZLEjJcnm%*Q*izkkpt zJm&akmR-)T;HUW%{FGnCr_A%O_$_*}%1`rI@o&{5gVp#)_3QnOx>Nt{-p2b|$)EPm zn2)1#zf+j9z5T(S?(wJj+*a=o@EX1C?H_PA@Unj@Uhi)euj{AeZTI4V^;Pn+K390X zzpdE&-PQVXb@|EbPu99OANF$MWj+?nW%~pFr}qcn ze(w+PGoiDFpEhjm#dd@Fs$IG!z&UTP$2yxx;a-t6&71J+c@Z+=(sHCyxXO1)}- zX3=r2+FN%1ShnA8UZ3UWuL{fl%^ne!?GN)C^N&dL`k)N)iKq1;^DlXcU-M)BH9z`W z@n>z!zv3y|&wtFHx>J3J`5)%j=fC8?h1G8Um(EY-Z@t80xBiOP`B(fV{V92wf63q6 z{>*G}d4Cq{qvA{0Z-@Df`LE^Y5ti#a%unW@y1VnQc%6U6Yy6Uz`Io%(x8SGw7kuoV zo4jXgu>!7ce~tS;bGfzthSk;OcbY#|z}5Bl_L+bE{%q{Ol9&Bo^0_C`-Z?))oW_J3I4qWvcGul#SQ zKI<>|Gn3)+{uI2KHoKyK6`!(Y`vd=H79H2Jf3rme%l3!)onHU3ZoR+RtKId#z@ORd za4q{c+dlt=_+h;tf7<^m{&oMa*z5jZus>_E{}=2r`_ugU=XZFIHhn&*>j&Hoyv)Dk zb0%2-H9zkEHILOF>$l?1YI# z-=C$woTa{goZ0MfE&DfHtbt|w!~Ep+KVxbB5k2EqyzGCj)myUH`+wzM^Dp?bHunEg ze6z>H`&;?YyFL?t}egR{Qq~GKYk`0KM~%x7u)hW|1)85xR&oZW@|fY-F}OA zN~`hhj^cNvRr|OjT-|Fz-0^Pmnws~C-Ta%}6B6&zr6oz=*CUnU);#g@BeP(H@}1Nd+LIp z-v1T+&F!bxf49EX{AK-;NTH1snf7<`2{olX;UsykO=WMvv*Qeb77vfL%{{{P){^|YS^88No$1C*i{rTJR z{*RvtW7k^N+lwvt&)TK0d9kCpC$6Eoi8n#BD{C%z__jx^se(VUKj3eJ{5H#Rzdr}{ zd3P^kf8c-aU(8bHZ=<#7%)j89$?UOw&p7aZ8{{YRE&6j%pIcamUy%Ma+kbZL&bQ)i zwtc=8uk|hP(|i}~BfDIGEA|KZ``+bzR{WbSX6*A_u|Li)UUm2WKYg`NJk7t!d@KIQ z{(zt6yW+oHd49Lg{@oT{Kd1gJ*iZAl(SDxqjeM+r-roxT>hqKN7V!`2!`|)tccuRa z{^$OAwEg>Y`a133c#n#E>U4ju`ZM*v=iVBwKdt}vPvcMX zt>UL_H~!V0kDGcfJ+hWWE)jveW*xm00yB z*Tian=yT70+8%Xl1E#w!Iy2)#D`kLl1`7PN?ex-f0)nkw4HGf(A z&3C~5p1W-Qm$ko@{Mw_Yy}y6K-N0*p6|eDE_$KrHR@fiqf7$vkYkw>GrS7yp)xP32 zzluMyKjNFrcg6o@?T_sVg zZ{(M?O!L$FDqi!e_#^uxzR7%7{9o4oI6v38E%xtP|1MYGasOK1ziatj&i*(**Z6jt zum4Qg-YGr0o%zp%Kf0Z}=lZ*-YyO%F9b9{Ry5yU^6S506m%Q|>=Hs2zy1lIk`?qV~ z#yz2qe_(%@|A9TSvuiiM%leo3*~#4IZGV0xFY_yT$*<^53j`_VE6d@r|{ASH{D;U03E` z_MiR4tl`?fe-^yVZ^{0$@x43IpE7p#}w-uz-EoqPS1`IWrX zU-OrYf8@W7`PK2G=GY$#^&iJ~jVtpn>pv>p-+v{q^UGfC&cEbkekCvcUE$Nl`?q4h zT{^ydxVre#zsz;F{}r$EtN4`dufI#iKl0yV)$PZZ`7GssVBccbUtRo5_U|-5Oeo)< z#4M-v57w?1Vt)4eYTv`1dwrAjUGg%&l0UNF#`;;aAM3xgZ^qjL{VVyy{0{sd+1u>k z;p*a#{zaty`IWrPujHk^n!jZHBmZs8uZ}Wr_TQge!TkK}JpZ)$P1o@MIeo@1T{HZDhp;Bjwl`hFrM#&l zE6=&){ZkzK|D#sz^PR@3y{*VtRjcva*t2DQNA(}@v14x1zXN;kzD;1YKQ=nE-nZBJ zZ|zOjaP7^%tw)Z!?cIRL5I{%9I?6dzRFY_;XnP0(A^Dp>mJ{9lN=WF&t{Rj0;^RMC`*n9Qu zX8pT)e~#+c{eNb;;M$vi$;-<;j&AUH#>pQCdfYLF&zv7SVb^Z(X)BG3gr}?kgAJjL^f5pGezR!Qf{xCn;|117a^T&i@e-{0_ zo#uaLb>N!zx2&I%m-(0ck-hBy6?@(PEB0H92kx&+_6POp{FnSU8;D(3m)~jsV+Hu@ zYtC|S{l_Hs_eaI+{41Wa-S{muc6nKU^mQxwPp|(OYuCQwW&dNH;<_b!+5ao{y8l<~ z&BhoQ2#Xl75`~-b@`q4KUToi?Jv7`Z~N~LjKYLt{Uo0D4_LddF2B?K z|96`|ekO$9?|;*^Px{Y<{?L|~t~vhhKh_*{a4FB<4d3PSozxz0-|_pa#vUIlKGu94 z9}|l`Tk^hRZeoAH$0ri&_Smnumg_srFaF;X_}|(m?PoUo^C@|mPsQteDn6=<`bxfy z`INlWx5DduR_t{?OZEr(>;Bm`n~z<4`={h}K85`>pMsy}Q}H^Vir4xU_-Q^1_S1Y; z><{wS`NU5=&wb|E&dkGE?%(*S-84U$Pi3$3sd$}F$;*67Ug}%nbv`ThI-e!`gZyeKmH zpYWJ?oln6}^C@`N6t91U|FqfVH?y&StNb*dwfsDT)%ZvCpY~7u{<8NsXFab!nSaG& zb=b9RpFa2OPxHBb=3}pK{#zT<`jPuv$;#O8t{jKnNe_OHl z-Ie=i$^Ib!)Bd@A_7B&>-u@|h**_Jp`={b{|CGG!pOTmLx5DfGS+S>$zkb+0!q-#( zE}fsee@kDJf4RT0mlLn^DeR~D6g++Iy*^sK{@CTy=PEzVXDvUsT8)2H|LOkr?RS5} zXQuIq>HT-$_vp`mW(p1$*2E{T-G2wJY0or!CA4doH(R`#@9}50;&AQpx~A&*V^5WQ z?t@kTmYd%dR_!gjzNfAxzcHV!-G2wJz4?^9%%|cp8(gTr;-fl#&soK{4%lPa-lAHJ z_@1Sx&vNVYS#z7D`vczc z8}nK5kL>Nby8Om`;wKL0KGSJ>e~VAmr}@czDtoKH&!^&}x~Q+@8>YkiV-+9Wxrx2S zzZrjKBrf!~jDKM7-Yvqi{egdd{joGH(z*AHGM|!{`Bc2s-se;Cl*Rh1;+xDKyL{%n z%3FSYKFnoaf05I!{}xue{H607`zJcFzkff-k*8S{%*&icK;|1A2W&H8_6PcX5|LOiI>}`FH z{ZsJtxm#be>g}=1r_WX1@*DdneNF50$iL0T@_Rw%W3P|?Q`;#&**_&O^Qm~Nzt5-Q zqq?ZC*7uLaaqYQ2m&W`m zK4n*z-)a9~M&93?eF?VrlOy#81j$Y$POx_=7ZY9ITj;OTQW|7J1m zvCF5=Ro?O&`zL*UtLKByO!51f_uuj1@-tKZ?j~x64z4NZX0L>H?eh6bxyQ#l!svPF zUwU5hHZRVs=gxx<8+im-$q@&Zpuv|B{#a zl)UtRh1dD4*xTCi3^1Q1`-A+a`D`{HyY}`ExEpw#Pr*;~DfnqV72n4GspETx@-?N( z@8h} zlKnyc(|lU=VyaK)Q}H^Vf}iG7@T@8B-&OpO?ed#H0{#yM79O+CK%auRoE=`R|G1lc>G?ru|d-PuZS*?4GOp zo@m-XYx%j=ZvIF09q>9Idwuht`cCte`&-G&{jK74J{8ZIqrQ@F?-u@|h**_Jp`={cWlhn?iW?R zXUgA=M9dH0arcXG%`>xC(sutHyL`UV@9{D5xM!9A<(^dXZQS!p{>c7-k9VXolO_K$ zvnBh({Ni_ieND8xU$oh^Hy>~}@G_r@*ZEYuEmu?+Yqs*=#(b9S5B%$Vmi!}oyLS6` z5I?Npt?)XZ6?>h}lKnycIv@6G>VF&aDS4Ss#p`@3 zo-)5bWUh03xxZDs)JI>F{Q{TJi>W@HPb+wxPr*;~DR|Zt_wT}g z+U)Y1cPQ`wh5Z3P&1Wq?k8pMQ$$YYw-T73!&Zpp~`4s##pNenM^WFWGHmm$JpDO;5 z{}vUj#y_h6bbpKAKV0tb3pgKpee<8%?(LtFm;F=mx_>HO*H6jI{waA`-z&WCpA~z* zyV{H}-zEEl{7?Jm_SrvN3w!&gH8n+%l`aw&n(YZ_g7+kW{Tf$y!%D(FF!No?>-_Xba2fx zvsc3QVgJmuB|4UglHrI-iQy{+7JVr{tyn6<+7FVz2XAvOmawn$KqQv1@PtfV+X$`4s## zpMsy}Q}H^Vir4xU_-Q^1_S1Y;><{wS`NU5Y&VOdA_qX^|ewv@mr?S`iRJ_ioX8}li7nNP**d@7zY+@Fc(_|^e??DA4yX@9`$d{*pr zK1=q8`NjWx;`Lh}@R<7}^Qm~9Pr*;~DR|bjA3t*1;0|bwf>TCanC^gB`@`_@Opn+vGwGGn zvfcG3^P%pPpVYU)>wH%1bv{e>2l-F)X%S(nU-l1knRuN~VL#2M;3Hyxef4Z7|2m%) zd#%5)pXO8W7s$^e`1)G0Kg{p+{s1%D-M`wu#OKz}m`}wY*&p!J{;B-y{;7D~KLtPS zpMsy(XT`Vi`a|8RKWVet-)a9;@sIrHo>`60n$#YjnZ_rk*UQgL`MZ&@dH;*9+b5>i z&wb`&uY~RH7wz)-O1{U(cU18`XX#&hQu1xgtmKdE4|vPZSKVIz+S4+=%&g=O;vf0f z`E2dF&0>E(B`@=-c%4thYknm!^C@|$e}&iitl0B)8uMMUKgfTY&t~(nYr3b{-r@cM zcLT5UDfnqV1wYNF;&nb1uk|hP(|i`}r}?bdALOs|iJv%}|IBC1r{rZm6|eKDc%4tl z%X~^+>RaJ;J}dS*pC$W){B=I;)&BnRZ07&>O6F79>wGGnGQU4$u5)~gX^&lA>Z7m8 z{(#r{tk~;(mh2Dni~si|?w`?%sXo2GS)cHjc%4tdPxC2w*0di#V(#*r@%C?(pXRfc zpJ%Wd|ET`c{u%Gz*sFQ{$^3IIOneI~pHIc7Y?VLF=k}S8y}tQRZRhndy+62-m-|~~ zulKi#=bFX(D)~0Nl+pNiM{6#O)wg5OfMyZ)NYXT|=& z|1_T!|Jl>s{14(E)qk4Lx8M5%d}fN@f3#0)?!^C_|9{w}dxpOoi8TQoT*~uz^LF`s zrQhS@9Y=i6S^AeXSMqJ_sgggkKj1AtzbowJuWP=H-$G;A{xHAz-Cy{(PTYxWZ$2e2 z^Qm~9PsMBfCErYHkKOz>W9{E6uk$J6ANfagyH?|e^}fCCAJe@P*Y12OUguNr(|ihk z%CF*^Rc{Zkzv4G^C+l0_r}-?{dvwd-o0%W(d2z>k^gD3RdzoE26aH+&W8V4bcWibk z&(GF(`TT5mkGJnV8m>Lw(y@xO<}yAeb_x3f|NP$Q68U+AW&0vO%nbL}N5A9Q@5IdP zwmi*@_g=(=4z77-o8KFE`COaIBW6T=^Ggxa{uiDpCOBNMdGKPh~^ju=&V$ zzv_E%!3MUk`kp7hx3Zyc*gyvtY{KFt-&fhtH*B8#-j{qIF4(~KCExds@2_m=8#d6v z1)H$=>OGYWeZ%G*-~ZKnaKQ$)U%lty|5(}3H*BDT3pQc#xgV%(=o>Z<|Hse$04~_T z_H#e*(0{6I=o>cB!3CSJ_}C9tHuMdfhyK&Yeh?RIVEeHje9aG4HuMb}=-`4)SUmN^ zl?{Ev<~2X`)DPo=4Q!wK;aB`fWkcVvfetR%gvERBt!(HUHm~@R_uh*OHn4r~yl%fBiELRyOnv8|dJI zO<3IX@A+|Duz~G8KmLJ-DjWKS4Rmn9CM@p!iOPn)Ve^59?)(W{uz~HJ zKk?WbDjWKS4Rmn9CM=%&$;yVlVe{A!= z8#ZtG&!71zT(E)dXMXCz|5Dk|H*BDT3pQc#(Vwnt=o>Z<{+EybG%nb{_M<=j>i=5V z&^K(Lg9|oc@u8ooZ0H*{ul}ze`WalXf$fKW=H)+I+0Zv^po0rGVe$CGl?{Ev=H);8 z_`|qh1KYmZ{6Ou{h!?E#C+w~o_-#euNTYx z>F4kJ*UE;q!3H|GU=tP}|4L;;->|vwUqAj8T(E)d$G`H1f2nNf8#d6v1)H$=!gG}k zeZ%Gr|MG?BaKQ$)UwH13f39rk8#d6v1)H#V{@KcgzG3soKR^F0F4(~K`DY*hr^<%D zVFMjpunCKof4Q=uZ`eHkPcQ#6F4(~K`uWF4%;{gP*T#=o>a4{f7rXj|(=ieem<2`TNR-zF`9$T(Aj? zw|us;p>NoH=I`I~SzNGz?OQ(k-2bd>=o>cB!3CSJcNng2N!I@;+em$Z0H*{ z_k7}+zs3a{*go^u_y1L8L*KB04ldY)#V7uX4V$@pHw#V4IAj-f=yVw;*TpE`i9MW|Kt^aj0-lfeZ?O?^+%NreZvMixL^|& zuX(1jp>Nnc^+&IH1{Z8#`eZvMixL^|&4?SJk&^K&8_6H9=jSDugedy`W z{eERb->`uWF4%;{!%tN<^bMQO{ra) z{k?bmE-u)>_8q_bk`Gok^bH&6;DSw9Jo#j0L*KA@$p@c&5*KV>`{a|a`mM@_zF`9$ zT(Aj?kNjq3L*KA@)o*>|H*vuRwjcS;2Y#cnp>Nng2N!I@;#2RhZ0H*{5B$cb-j545 zu>I8g-~8*94SmA~I=EmH7SH}#WkcVvdGoJ7`)jyh1KVeR?a}{U+0Zv^po0rGVX-|? z+0Zv^O#2C3uyNZbuD=I1xb*!YeZyum9bEgoeQ)u^{JqCyUwrQ|@lPPeP2#6Laz^gg z-}8RY`TWl?SQ~PN4ld1EdHZR^dvNXYoAGw-@z#-sYmc{znq5;*=lI6kW7+<|zvX5< zxJmp2d(Yk~xNLrySxoG1pV{lr^@M8+GkgDg?zV~DJ@p*x3fC^5b?ov_SU|gW`9pi_ zqOCaC+yCcb6W`CT*9l!gft-Uh^w?@n7ALb|X*=#;` z?ars-bv^|@&8Og}`YXQ4d@5e+Ti~bpEZAf3aQ~opH}vn)`HlI+cO2*5li9s(+~4B6 zhG~8>pUPh6Q}H^Vl9&0EywtzK>wH%1bv{e>2l?yk4|_HBU*=QtGM|dq`BXe*et*qe z=lHsRyc_d-BB_tQCi??k=d)t3^I5V#%x~<`5|7ku8_LiS#aCP~~e6m*UFF%{xUEeyN!hV`h!B6w4_!bk|kMA8?{+@K2PZd99 zyYY2CEA|KePxrU+{+erLTAv5~oA%EY&&OWh{8PCpKY9HrdD%Y|uluLs*%PeKl5b=G zl)UtBh1dPFVz2XAvOmcGw0~}&{lm4ew|`1r_D{v@{;7D~KP4~wr{rb*t?;^kR_tlx zuTS|}H1+S&`JLV$U`D&I|JvWgQ~z@&%k~HUPxrTPzxx|LGmTG7?=L?y<G$m86N&iDv$prUhOg<8Z^qkW&%fR?OM6+f70;i2Ec=%| zRr$Yse(|$!xU*UB=EB5niQqjLl=O^>o z%)ecG`v=?&yw0cKr}-58G@pvs`Bc2tzrauPS+Jkxvtoac|9pRoPtEt{6F-qS_nDB) zr{Z-!6|eItd6`eiOMNT6&S%A5=d)ygkiX7{z1o{k$;*5yUguNsl==NNbDiVk)hF+7 z6`!(Q`vYF*!(68L2lhIjCHn*a(|lU=V#=?L_Xol5@1KgF=2Q9C{3FbY2n?KXn`DCus{7(C4%%|*6^mKiHpXP%-wA#OE|6K8W?Dfrm zYCG)@**_&O`={dd{#Nn4XQMwQ->d`n*yXb)tGwRd%J@hA<^Hy0f8c+5{Yl-u`LLH0 zFY~E*olnJ6w!41Ym=AU5_`ZUd*T2qZ$$ty0-TbBhEB>eXWUQ%v*+1S1)0udkPhmgJ zr{Fiuzv6X16@O%Zz)$m8@t-z6pB4MV{7$bwn9=h3*ZE|x=kQ=SX0o!HLZzeuY`8(^7%@?$H#Y6@tR-ympxzdZM-Ix{E__u&!3I% z<-Z-+^L1d^{=mP^XKSB)9M|4_N?ztu@j9Q1*ZNDojro+k)VIRxd{*prK1=oo`A_rN zY(94F&ZpvaJ_SF`r{JggRJ_io;z$;*5yUguNsl;QqOJja*& zTh=o1QeSC*!0UWg>~%g%_J{e!|9j&7Y0-wF4+noq&Arv3ObpB4MfI~eb& z3;St41%HA3Ji>1N2l0>mpY~7ue%|i>)&3@)*Kc%q+5W))X+F2leC+kje`-6gkLmrv zjlA67Dto=ZRlM%+l5gYwR`Rm`R(QR?t=RkBv&Cl;OZEr(pZ3q~vwyf2_V!Q7%l@f& z-9Htt`={h(|CGF}zZG8h&x$>5^8JBlGxhJ%`N{jY^fmd{_iq)i^C|dgJ_SF`r{bG+ zz#dok`g`-A*-KJ3-h|2F1R@-m-_*ZEXDWqyClT<7?5f2(+@kG>}R177E|Vz2XAvOml( z{@;_h|3@#T`gA_6;B`I)Kh3A$S<`-ena_&-<{jMq%ygR1ivJcB?B;(E|ET`c{u%Gz z*sE!MYJU??yw0cMkL(Zl(|m59`Pl25|I~I~ALI3>7#JYKY=@a z5`6BT@w=}Nt)GN_r%%t-*=Kze&iV-4=_Bx^Ukle?A$>CZiG8O}#(uAP82`loEdO1f zTkrk=&rI?C%txO+ssBG-=l?y^@!d_V3CzLpJ!L0pdGXm0?ysZ%v9Q^H7D`1 z_LRhD{0VOH)m)@LavR*hI6iIYAGXMGgT@k!hw!VC42xLq}* zzb8Ghndjo4;H*!|KD^sFUVQDl+137H`Pqp22iO75`Uu?VBk+amr*NzInLY}i@h7;` zCu83#a;8s)KaFqIr+wmZ{+TK7Z|$kN(~tB~eAY+dtdGRYs*l7ezYNa$Wcbi#=#%14 z;&=O7pX=&hR((b-9Zvcvob^%oxYqi&X6yfUtgQNsx!!-{gnY_h@mU{*k87d*(q@GC z#Q)5`)2G+M<X1_}2Yx)GE}c*TUhf zkHDQi0v|rZ_19|_;@xHzclzYwtE{a5S^lnnRD9e&3g7j)Y5LgtRzJ0M{XzOjob*vR z_m9GP{Ybp5=a0nun!)W39OLN%fO>X;*K`{?>iD_^5xz zT5&k_kHWcs6h3mU`APrAvR8<6{S<$KbN?jcs~(OQ-+q4pjneDCuZc9D*H8bQ*Z;o1 z-Fo{Qo|(2MrZ?&{)0b?MVa>*OH?by8%8i1-`1o#Ki1(8^!rMFEwr5HEw5B9p);&++ zGyVj(`0B15#c$<8*VLYq{(;&^^C$LMpXSNy$NET|^ieqLqwsMJ`HkQG`dIamIOUhY zS)UBQs#iAbnUnaPKGr+S1^ol;0B3y!?(`A(s7cjF;pP#q5MOGA+L@yG6Wr;O;5&UX z{AqmcyYun-wLAUtX#GrR)Y7eQ)~EYo-036mVKeqm`egW=zu-H41pX@GtE@2oiT{~> z*FTH(hYhZ;-`@o8^f|=6K8LuEPvC|15xC3$^0?RM@_g4ns(zc}+xrI^rPsf$XlRt? zJN>HK7u>(KPZgv7IVl3C{!uvhkHQy~mHuff z_55e5bbny$7%$gf)IW;P{iE=<`uhH$?DuPR|4{g1R_!N?bN?jcs}W@V&+_;82Q61u z|3dooS~#5b5xCPw;4VIemsYi!zry>qEbjEl*e@-Etp8d5yFTmlgHbEL{-{5dem7B{ z6Z3`P;-mhNIQ5UhxqlSC(E68nS^G!gGyVkU{z=&{OZ9;MN%5!g?e_=JD7`znGI!QKAWeMS9KJKg3uocc%M+&>B*G1vM?|7-uG_*@@hpZh0ezuOGspZK5U@AT=m zT>WW(8@3$I`Ut+$N8rO|xPA-ili_zxWZ&tNvCsNs_|y3I{S6vL`n`(vQ!AY23w`jJ z5We4iqg<1p361Z5!zbooxSp|3iSQ&L#QRAZ;q8vSJrj`jDQ1bAcf2C|TvN%P*thuV zu8_7*J(cl4i=Xuwb0d8uPWmXE^-=h^hWd=(z5i7oiBtVEIO~()TXZ#oF#gT)wZA>7 z_N{kprH1_j>;Pwd1n%?^_^3(jpY+M_xjusL^bz>0h_8AGo-? z`|l1fjdfG{XR-dU;r*YKasB{1z`1_}?)pdIEjzPX_cvkRyyF$(OWk2&{sedZlZ&r< zI9`0Tzx7;VeOfIX?({jty*`Jy*GJ&RuG#B&>+|aLkA0$O_iyK(S(mkcBu@G$ob^#S z>m%{1PSZ!?OVbqkWpM7F48M9Wt^ZT}N&Nfyb9MTs?IdykNSyjd;oLt8=l+p6^^e49 z{bg|OpA6qPHG;bT_E`P?UuU%QF@f*>bA|e+uSKUnoj+r(JDmGR@Lm51eAo=n|Gwrz zyxYv;u77gzRaVyjEPw7FJKu1|`e)XpkHkqIg|j{i=lCQ}`beDg$>6L{hR^$3ia&{; z^%=Et{XzOjob*vR>!a{-EnI)3&zS4tqx>>B>yzQLJ}Lerey2}q9$fyckHT3WfjfN! z-aPjArwV6%6wdi2aHmg#@AS#=C-FOd`rJ?-g|j{aclro?>DTuDu}X;g?E2h#_iy-2 zsC^=|lsiqdmu+y*0IRsYC$}eJ1%vUSGuFJs>r)8(G$g{QXC%MgrR4c17B5EHzj5(O z^Ow5o)%QFqKZ~vII%)gHhlezO8sDma^W@jZxCZ~@ceg%Be~FWSjki0k(EfyfQda%7 z{Z$`{8y~N%|6w!YTYP8wkGZaX%QU_^BeFkiW^wNSR*AU(CC>WSN?wvr{V(lveT03h z?^*w6_=8jHC+xfWCUA>y)jz?v_!f-g#kcoA)QfpWvSq>i+~E+VA@3@4v?1zG8i=`yXDP8eh+Ujbrt<^{wy|(qG|5 zEjDWZNu2bT_>4cnPs}?;x<1B525J5@zJ34S`@i)+>VQ{xf2wfa{}sNNMf<7epTyVx z&-gzvn;5bEiT@r`n!j9Z-(oxK|4e?>y4g5he0%>xms;PhWw`zmxYIwuclu}eofGA^ z-~Y9)jOw#Y>Nmr$lKyu8gL^ple30{#IPL!ur}}Ap-TyUSJD~1=3b*>6?f(j&$G_^I z;!pCk_|EqKlzro)0$86Z{xrUQ|Hlg0`@gL-thMm`GwcAT{s(q|)B4l++W#7_SL^y$ z_=#zUQT5CCH!faj{xXg4tp8Q~tzu{Qch#D!f6wW7@$LP8rhnJc)t~iE;I=kb{S*AL zW{$T%?fSpo^v7qy_Kv?`ZQZ#XekKeIBfaNT+Z*^xyVJ?~w-cqFN?AVE!`Yg!8lg_% zo{+%XiFd)CUp-!ccc1C}Cib2FeQub)!dZWXvww+`{t|~Gy*>hW`U~8s7xJM!UbVh` z?xphYoQUuA&)7%wHX{2C&Ero0?kmh+;jF*Hxjqsn{Uwg<VJt-{|emozrb7foSh$ahRd&W()lmb_}2c<#aBHX zFFv~e@42}8aDEDB{S`jrFQk8h@AOabTleqxf9dtb`j=MCaQ#S}^q2Uwzxe%MwQwo_ z-Df)gWg6e!|F#L&`u19ReMo60PsL!l^GaUE+81ed_ z=x1EaNb`G65#QbacVE6gDL#e!{l9v<6raz3WuN00xa)s`FB3kr$E(&S!=Ko9`e*ES z&hg^g`~OV;u4TA>6S&hq!ME5dE9&2d=J$ua|M&hsd;gzWpLYLdXFz^^?)QJz!}0lE zT8HQBTX&GqzU%*8e^fjE{4Y_TTXFx#XTs=OTXoBwmhbHY zS6j0JUwBPk9=`(dwY%E-ceIz!uT}@@Wcic&`ua63E_KgS)gAgK_%6Of{uPLi^gWE< z8phNc`UxDUjbrWUu71VVpN&vog%^v?UNt_2n?=i@#h<{hKzysdiTrAHhQ1m8q`t0x zeQv0)!VBrE@O~}3KCeK0tG=21vHFL;8UCcczJ96mqd?)CbAH^C@sYl%_^LuTr+#&} zi1+8dR$PBqb%(wQezzI*w_kq=`^S%u^i9QAD-h-1x;uY9UxE6S8e_e`Ox3R{e8l=) z9ew*+cl}vc*SJ5j`r6Ckom1=Ae|PxOG|A#_{blSQKfYDpTzs`c+4{Kt7XDrRs;5gn z6X-UN*dKfUnuyu@?)uXHl33qXzqNl8{OTPxvgc3t8S!_0Uq|}dIzqM=oS%nyF^0YB z`pNLC#k2Fh{uldq>n~%!Mt9Ws*8a`KS9888_3O3f`Y!!i)c;N0{ryo`pLzXOeKYl+ z*mwPrv0tcvGyJO`-`c;K{Cm%**N3PdK2tJPmTSw6Nh&+XS48{*r>zeIdZ=?l)}Zp-OU`lk34pX3*)yWvdO%3rYh`#nSd z{WZ-W)@{6&JsrkZZkVsQe}Ns~9G}8_O=|oZypX>C3H~hpt@&@|Unagj*XhrEg>!rg zpYdmSA$>FUxAN!l)fwsjJAVBrKI_lrg8nt^0C({T+|?(67uNSbz@NpxHUF*rOT~wi zU_XCv>i*^QP1N7%EBIu;eWT;tX9~oZ_*VYhenAJf`&0X0n;+Fbh;JL;{4Mqq`rn%W zR{ka8vozo>e19ZyFl?mHABr!qUxvOCKQ@1Ezs^YKZ?!ve{Z{)0m5lqNq33XpFT-Du zU0)xH->=pBDg4;{x&1n0Lwwu#mx-^>jrKp2p=#l9T(OZ}zZ{>oU$Cyy_A7e>zsD5% z-rdk3KZO@`@7euTCcbU_ z1-nz*pJe=7^WVz9M0}P8yzTc_y$0Nq{QGNqKB3|^Li?m&o4G-s?#so`_7&c*)%X-X z_3AS()T~XpT)m5|E>J1A752C zy?<5q>+AlxekNQ$O+Bff3BRzM-_zTj1ZsL?IjJM+X^GdTOxNm}B5_)C8sF%DW}h_I z{?|SEC^+@(QS8^d&{lu@m)WfvC-FU%!b!grf2)7ePx>eQBtGMB#Yw;8_+Qt*{mbRn zofqh*aMn-ZoWI03`k&b^d?qLIo7tb?te?!^;t~;s6^wZQ6gcUZ;#2?S z_-p=>UktZbJ0C>+mhY&aoWF3I2OpX;am_iMF&3ZL<};-#r_JpUWlKkL_X zz1;fR=%4GW{Fk=sj<^0N{lWUF_-64>@s0J{^@BqF{-bH>*6&T!&(81qtt023^p`m4 zC-E7d_Rk!DUH_6_*8Y?DG`@-b8K3k!j{m*?Y}v;BL;Bb>s1d(ERyY_oj<HlW<8bOfiF5wa{zm^Z`^BQNSHFL#vt9i4O0TbsuV&TipTRrlc>bw=J(n;)g|mJN z=lV!|qyL%xLi$Pnq|Y&M*6$eh>HJwT_ILfDP`p0^weec+pY`9)t52#Qy@tPYddUX& z-1yre_&ix2y@tVfi>SpU@%j|U{yr+puXj;-zIAk4RayUK?OB;$U+3BU+KzKU{bu%U zJ&ZMRocP+`w$(LP9=*2Mi1Y_`fRp|br~EYD?)0+$S$}Px_FNhNs(*?<$&d9<*(d!| z{Aqlo|6=;u2=!Mu>#uP3FLBae;-sIzo&Eyn{R_DrkIwQaEtFu|73hM zg5$-v>OXRc^p`m4FLA1$##j9{zSdvitiQs?wR*nvSX_Q()ql)&_%!}$d}sQn?3cz0 zECM+=C5$pU*Q~|#7TdNQ+);Q^cVQ3d99zq`?U~XF7`jO&;8$4TD-qXob^}n zZ;p@j@3uny70&uAoa2)?=`V4rzrdaT0(bf-ytJwxufNv)f5dXR`Zm__;@kDd3OHVU zua5pFw$w19^(k@ce~I^=Lwz;A_P@rLVj+$Dzk~R=|1*5EUSDy17yGx+X7Qb!|0gyX z<8t+F9*!5^-v6fH-v4-iTH1)#r^KoMB~JaJ@wNXoUa!{vS2*{-!h2RB-#GPE_y0`( zll;!z|JB)-t8dHTc=7H1j}=hs+qDe!N#IWZ1b?jQ zKeom2njhc2$C|?&493TIyFunc<-~U{dOX?d(M>oevV}Q z&+=z|mhz%~CKKx;aneWOtdGJuK8crAABmGb8JzXW@ZFxO>bE(*lLZ<<|79_KY()Jd zan?uhojwA0`Y4?BQ8?$Hz@0t`zSAeepTy7o(>~EW_e`#wn1!aF#7Q58vpx!EeI!o$ zNSyM^;H*!E&-$eJllWPmQLDIrYBcWr8c!Np{~hA2kF-zmNu2bN_>4cnS)Y{s(pXXc z!)6wD`t(|a`Y4?G$JD7W<~w}^?&4Q?zgF{8_|n!y7I*q&?6W=@{v>{i$ zONX;Qg75SZ_^=tSuhKLR@oqDVJAHETRaVyjEdO1f_TBk(eYt-!`cBpt>tp9z{nmx+ z54$&@`-4NA`bY7(e-zH^N8)AeABj_b8Jznk!>_xmX#{;!{7L+*&!|PvUp_l;*+ZPyI7uaX9NE_)Z^zH;--oN&Bo%hR^v6 zzSBqGuOhzcp{}nCe;OaZKdlw=_s^_Pw-xFmaHo&JUH%F$7L&cg{_318?)2%le15Ga zq5ZB&h;NQ>*9RJ<>w5%!@XWM5F};2pzDIxlnJF*~#Qfs5>$hRJHC5~+v=QRQ#c3Jg zC$^?ABHThk*0pBZzv1>u^C$K#wz_Ml?IU^{Y5p|6RiC9?zYQbON8+T9!Y%(ZeH7lZ z8)uU84|V#Ur{bghGWIRLGkr3Ai>*cgeNy~M{MZ5ShN8pzKs*k{1c4N;` z{-Mq|lLXHBCG1;#t3C<7#a1Jz`egW%_*tL!iNpD4ro6wkr}9oe(ns+v|1*6Q&iY8a zK%KF_DgU)XeSf(;Zt2`SO6Gl`=w=&=1=3}^9PlP`=_DjaMq`?J#M+L`Ut#b z*XyJ3ey!%O@WrCCpDb?it@>o_!@G^F|Hh8_d;gF=U2E6BtiQrpABE5O6MWa_>gZ$V zWBt_DtsgpnBu@LA!g+sFIQO^2i|rov!u}y~T7Mbb;yc^lGJK1zMsU3N==|xqM*56e zI-K-TxaGf|Kgxc;R`+j(7pSw}AN2FBR>;+#`e&>ahqFF?Eivx&5%|zF_D}j`_%)-m z^Yi|?#|bbj^fIR6j$gA>L-@juIdKYvJ{UQ1qIu6_#dYbNY})<^Lt_^!{brw^W) z;`@`=Z+l)oGacWp#G1ey47a9=ouoEGyr1L|-rn)HGez2`H6`(4yNbOc`@H5Qe`3Eq z@ojrzhR=Imia(97efJmnFXefAW*X}waneWOtdGLEz7jWWhCULf{4zM}li{;IDgGpW z?w@5beQZSiBXQP8@SQ#acls!t^-(zIm%yDq3BJ=O!=J>@`m`th{+UgC3OM$+_Eg>J zNBSr}>!WbiN8+T9#3{cF&iZ8dtWSzRiJ$cuwQ}_@>-i&b(nsN}kHW{by1({Vy?^X( z$9qr2`ixkdf2yCvOS>AzKjTkur;pVEFBc!{qj1(o;7%WbkDS~2r~J2TA-))HKUv)A zlZ&rLko7;y-|5qH4fRnt>mzWdkHB4g3NNIO!uz#ap9JpoN$~6HD1Cio_>=f|ecJaA zv-;jlee8UzpV~(KBXQ~(NXocl-OW$hn{)B4Nc+&>vU>yzS7;@|t{>h#Z83sL__ zocc%M+&>EE{*gHKkHl&HWpM7F41aL?{Xvb!)o*ir^!%XPa`wx9e{E~1-5<*Ov=x>< zzgRzEf8XD3z5NZ(OxqLFdv90YGacXU#F}{iwtH{K@I7TGVYz-=i1+V?MR@DT_MTJP zr!^(yzS7n}>VTKakM&VF>mzWdkHAMx zwf+k4*Ft=$6-qxdb^0j(GyA1waJ=|PpB_u7kHT3WfjfN!?(|W3X=`ThAFGtC&%VE* zFyZ+?5N zpKG*CWd}0oU?7F@0=A{R8X(XMF_j^bxqzN8weS@ytj0uNCU= zSuT$|eUyK$ufka$h0pjC-0yGgse7bPd!l~snGortaMnlRtdGP=ABj_b8JzXW@VS3d z{7L+*&!|rdik?H`F#{W3WBPljK2SJNnre{+0%f8F--NS{$lhm$@EXMGetu7&#p z=`-ef|1IW_PxVoJ)<@yvT4=wt86iILKeO-lx9-d3PyI92io;nS!FT!y+{LGG)<@x- ze*$;1ByRi6xh62H@@&vo@@eH7062;Au-@TFf1*I%&;*ek?m{0Z*#>2qEF6TZ_Y z!=KpS^||%#5Ae*iJuy9%&rHX6Be7-4&wvx#y+-zR#uk)A-tVe_?+qr=~@$kHkqIg|j{i=lmsJR(&K+ z`DJj{C&PDpo~qyG_(-3{^s(XgWb2*LKfn%f)<@t@AAvi46wdl6obylMPM-wd>6774 z;`jSod+HwPV^53=hQmo8g|j{iXMH42`beDe%iyd}hR^z>_>=fqpHVAUf7d@X8vi{| z(ns-GABB%=b${)#djICrULj8T4O@;s!C9XSpY=)cr}5GLW_7^J<;VIcob?g7(?{SV zr*{4+|Lt0cFNWJs7I*sO;;Rv4{m=5>`)9p>8?|!lllAYvJG?Yj)kono{siCkxjOpT z`Bp!*_3LB3f0H=vZwlxAP2pqBV*N?Htoxh9Y5iqz-rq9(y1QBrh4F8WkItWNE7E7w z(&40!!dV}Mk89!nK>Cci-anl`Dt@Yu;x4)G(+vV@?52`nZ zvp$0F^bvUTcy_)Y+AnMWjJ4|hlRgRiPM-vS#8mak@L4~>clz|XE`QcX;jE9qojw9z z`n7QV71AfepV)W$WbF5vhVf7Q&+^~(x%KW3@XQq7ue7H%ci?aH|H}sV%=qpl)&%BY zFh0K97vlY-kMMTK(cW`P`?TgHUe=zH_>4cnExx)dMDg>Qm;Otek>*e1Yv28aeXGPB z7?C~_Cw&yo`Y4?9mw2(O_6p-$47Hyu&iY9IGyCvvBkRAhV?Otf&AkI7)JNg0kHDQi z0(bE#yjb@3s`)E?L3Mh53Eb(E;8*V!!D|^G_Pn;^-M9;T-kWW(CgZb@>hq2pcP%y; zAJ67Pyg%EGaC`4jFe2Q-v5b4p(mxd2z@OM3?~OLZS3RWpB0gw_{q@FOe|-Zqvu)XF zHuhfl#2gH-*;4n$5btY~arkT=zxXEjw11|>`2>am&R^f~#W!Jq1K(eK)9>D_I3qT2 zFb4yi#(40piZg73^Sd`c_*M*Xz#2LqhO`1ywvXV?bk!yo+lhcLha z_vasa`$rUK*aio4Fu-Yy@87RD!!|f?|H$|6#{dW1@8AEgk1Ecv4G!jDfYTUHeoS$O zZE*he(I-EK0S>rNe(WzFSDaxR9L&K0r!hYF3B?(NCwfCKIwpML5Q#TmB2!5j>58sl%DQJi5L zoTnc7+h;Jq0rzj8`O0S%XV?Y@b1=YZjF&#IIKwtLU-|4ypT__P+?PK8&=(YE*aio4 zFu-Yy7rvx8!!|e%ec^>KVSoef3t#%cmlbE&1_yI6z-f%1eN}OWZE!yD<)3{O0~~OF z_SLt1O>u^8a4-i0oW^+eF~u3S!FkKqo_!1h9B`j~?C)P!oM9Ur%)tPsF&=+HafWSh z{{HpHpTGbI+{d5z^EVV{*aio4Fu-YyN1jxiVH=!3f8&uSF~9-$ktcuiO~o0u!ND91 za2n%*8;Ub*gY%njK5zpA9B?1F@r!RM&ae#*=3s!+823D-IKwtLzxdWYPho%q?mbUE z_ie=)w!y(13~(Cb^gD_(Y=iUMw@<%=0S>tKTLI^;bN6DyHaM7r!S{cR8@1SQ_i~KC z27JU2+8_RrQ_JYu)2a?5cf0SjnTYDz(@)sU^SO_BubD^Wj2a9deC-nRYW&Py?ID&H z$sa8icTbG}G89q%@#&8~bC6TV8~W1_2luDXEQdAe{DwXr;^031^dCaJp$~-q!F}MF zpM-crPeUBs(`T-|66N2}$3q<4$6xtFh&S|s)5t!!51jra#2dPV_Q73V`R@>K=ln2Q>a2VI Nq2@jJ&wKuX@&7=o&V2v? literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/ceil.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/ceil.bin new file mode 100644 index 0000000000000000000000000000000000000000..5ec60b6e150d5694fda5f5933f6accd39d76bf2d GIT binary patch literal 8552 zcmai&32anl5XZmvfg*-#2!<38L>mD`t|eGvEn7-BLKYfIp@buahPJ^p$Ocl*uoMx3 zEecV~Q6*JU!%aa1OA}HXI23utV+PT`t0*EAaTF%rnEF$v-fsJE9v8zJ;{aPl#CyvLVb3Uv&RMN@`9Ol2_ap;^?ht64b=={dFI-l|UH+-!~ zWO)P~&i@V)|GQqZmfijX9nLxMI6t;zw4lQ|2RgkM9(afj=N#yiJm~oV9nLw>x$9qh zA05s)(3x=W{#|r9=Rl{raOxd&IOjko@z-O`=y1+~&eDRux6$F81D&6nK5jyXa}IRU zbN~DW9nLw>sk|}!20EN`p!3X((?6lZIR`q0SBG3hhjR{eLfKm{qr*7|I-ZM9Uqpv< z4s<@veD@qWoO7Vl61p5hhjR{erjJWIjSlA==mhI_)S<&U2Rcb(I-W%5CCWL_SzWuh z79I1$;#v-Ln$sJPxg67Y%ut}?J2Li&+wmTu+s_ens#5nIay!xYmQFR@YBZ;4=&A#n zbG7mQ^H$9{SRVhG=Je?D&SuRiE<0DIIZd5XKGB>p8@6rGoZZiL_(*e}D_u~kIsW$7 z*J{qi)g#wv&d|1dR%uRoap#qqL(kWM=Fl_m{~TA}()IW})k$8Lt2$X(S*kOy+bGpp z*O;t2yLP^&I>+aAQ=MDM393W=g6eS3q+JVgOe=@~+M(ZaTg{<+LOac&drN!G zp?g#Z&7phU^O{5V%#NBv_udyYhwkB>HHV%BT{MTDDKBacJ)3%H4n5;u)*O0PCTR{m zb9-qHJ-hp84)p+iHHUhM{+dHQ$w1Aa-e$1oP>(c3bEwxEsyWoNrDzWIeyN&6J!G2O z$w)IMBMo~<>P6FCPM|T}P@qFS?MRn%V(~~rfe!V?W6&8uIR`q_Pme{1a}IQxUf5ANn})fL>0)``xL5#o zQjX`KotYXJt1&h59`a(aO^5AuW}%BMGz;aJk;lj)kLiESt}v9jq)B6ZX!##nQ&9smg~qi zUf+0KSf6XidSB~(O<466WP7jdy&^3A5;E^4?$it3Sh>%H~D+Q=S|?mj_1i4`&UG#>)*}0tsJhkP+Uq*)wX=$^?X2G} zJ3IK5osF)vvkPC^S#E`$-TU0mmX+ICd)cK#eP(54_PQk5okZ1DZLrs+%C01;uCCNx zm;HgAHLbBT|NC}k-m|mF%2rI~Xs0v=>l%aYEVdsrIR-nv!d{mZgWU?)>-;fTTnq+# zh^Xray9H+SpWF-LjO$$J=`YM5gWZb3vf}K=JRXB3$J^_6#$a6?dtGS^7Ky=38`m*i zJ(2$@J8NoZXW7r%SzQM^OO@H4ub=B&syf>1l4O>Tsw?YkuWK)}dsN-BZuYu+-R&&5 zr=4AR#m+{*YG(&~+gZQY?X2PrJL@#S&Q=eyvlf}dqdv33H|=#dWbTft%S>_Ax%%YV zR69#fbFtxOxcsJfrMuV&GeTJRkuEmMj1snfw2O@~GDACU#v%)h4an^56!~1t7x2k3 zo5v$F8AfJhXZi$WITLawNL^?mve3lPL}BTZk!4KIm@KS%3bOrE_D>PkXBx7;)A~*m zwq*vg@)_kbgeA;GmM}A6rmz*c$cl4|bA^Rv7N+YSo*kAs*vT)zy8MECnSY%InSH6Q zVNQe0y^gOC>wJYinRlI_%(_$;oEwxm*YWtV&g1vUeCt%sM^-t%a=yHW#3E#gMTs)c YIwgycl`JY*Bz2J`$RbN3OZb`e7bIeBs{jB1 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/clamp.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/clamp.bin new file mode 100644 index 0000000000000000000000000000000000000000..1ceb3f19a10d30cb69ffd5cf37415f5a8e4ab84f GIT binary patch literal 1008504 zcmbrnQLZ#ilcaTq0U?l(Si)Sf0J!f@y$UYp0ttzmVI<)C%a!%7mRJm%fX3Xb{Jd@! z=@DsFM>=n2Mc9)O;TD!zb-us4|J$FRpZ^ZO|JTp|^z%Rd{KudF^z*;t_dovpFM0ew ze*RDN{m=jI=jY#W{P+0%`7h%i{OIxB&~?Bb>Hdp{y4&$@#>M6S^ON~OcRkVl8-AYX zVi{eR>wh=w>QcHmcAeH`(rH~L9WGCG+32V)lTPb0>7p#XF1fA;btzq3cUPCv#j)$O zE|U%z)n%ijx=cE)%cR4&RF|CZgSwRNRF~4l_`AB4E{H?BcdAS2PIW0=9Ho9#mr18}nRIB^x?I)J$ITq_{W*0H>XNz#bxGZWy43tm zbt&D|*Kt#qTis9mwDl(UV84{^RF~47>QcH>T}p>pZ|l-@+q#r4j=g?W7upY-x}0>e z{=iSV%=H6ZtpCaNpu3*va{153rFGoVzp(SF(Js4kOE>oV!0EPemwd>_?=4b(wTpmq~|lsV+H>2X&crT9?wD>QcH>T}l^6sUOv4(rH~L9on@n zS2RR!`nZ}Sbl>W3>XNz#bxGZWx}@&sT$j>aeH}M-xz*wNRF~u))Me6XT}pSVOX*H^ zDII3L-7ihItxM_R*y~qysrBS*)FpnpuJ+4GSN(OIu9vySFee@OyuUoqWsXj|T>i6h zbHCK}a{ZhAa?(|Q9jEJQT_&B@Wuv3IOggR0q)R_r{c=61OB{FmWztnW=y-EIt;=*h zt;al6z2>NvCz0bXu3vo$69L%zC?Dnr>T{(#5gYuj*3s%-6Aj z@Y8j*UrxHJ%Sl)Lb)3dUdp@Th=rTtqT`nKXJLz&hO*cKav@VlQ>oVzTUUi&wT9=KE z>N4rHE|X5{lIz;!sMay*v@Vmbu2aWJr*+xrs4kOE>oV!IE;&!sC62osO}ZSX?Y~Kv z?GJQXm+5-YQC%jT)@9OZU2+}|>N4rHE|X5{GU>9t)vt7M?7rbO)n(FYT_zpce^7>g zAG)F;=H18596r$9)aCYiH+8wyVH$ehO4mbeJ#IrF79Q>!7+c9j!Opo4=)tqg*fRQsd)@pRC{QenDr>Gi5irs>?}N z^*HHT|8`vHvMx=J({&xW{8#hodWENMdTv#YYTQYub(wTpmq}OS)p4Vvx=cE)%cR42 zRF_;A>KwN4rHE|V_G^4@MaZq64Caop8q(&ad< zev>ZSALuX*s>^ge=%_A}PU|x1a6PIEUj65H1Krnjzf3x<%cRq~OuB4u_1oyEE|X5{ zGU?E+b-5na-Tb{)C=S1z|Y zt;_V>(z;AKt;?j-x=cE)%SKo0%;Tifx=cE)ORft!isNp-OggR0q|>@gI<3n_M|GKW zT9-+ub;yq=>-*;>L+vmB~WxAf$ zWzuDPtKUXf^Qz;1gS(CYnap!;~{kmq;3LDJpS<<; zqocY^x>{!)C!N+M*M<7UvDYv8+MhU1I<3p3)4EJLt;9j66k5}GqKOfcgCY{!0(rH~LUADLSZFE$Z zNmui)~E!uZ=DP0`9PU|x1v@Vklm#4aH zbX1o~r*)ZhvHrL1dCYa)?1SWMpWs-!Xy4VPbaCuDt;?hXMs?Zfs4kOE>oVyuF4ZOH z`=BnRJJqFhG5)SDrHfH?B7e}cd z)n(FYT_zpcwJujR^l>#upi=jsE~$G^m()F|OX_~kbt&D|*Kt#qTOF=nWyoW45B5vx zPIW2WsV=2E)unWp^>)8B-L@{Ji({`})ur}B9#I!vFZH+Qmg-{tQC8C5TrYF|Ko{$O zay{s-C%RnzvvFx1xvraa&^mG5NvCxwT^zd~T9-+ub=l~sE|X5{GU+fb)g|Zqpe~ax z$7z0)F4}i>DP0`94lilHY;;tYNvCz0bQqWFlJj^_mr18}Dcz|qr90K7ba9mWQC%jT z)@9P6UF&j1gWfkZN1$$XH+4zfgSw>dL0wY!bFNG2ZtuIb9$e>Ehjyw<*7HGKCY{!$ zbf>zM?o^l3Vb%4D~lMd}#mn#|`)a6!pQ-nHAldi_AUe)Ws!Pt}MyGX|bXu25r*)Zh z*27mW<0psp#!;?Eb$P|?T$f3wb(wTEuR2aT%$Mp?x@ebm(0*w;T5qq7dQb>#BvI(59!;W}EE>)k-(-qht* zcT<;J-A!F?bwBU@(vFi(>r%Sg{c>|X(xIQ~^4d;W$ZcIFoz`X2XxHs~$L(E{=EmC7U<8s>?}N zbvfy(E+<{p<$>-`-8So>>xeG??~eX&oBz9`{|_epTf6@n;_yn3uZBN+3jO~t27RLY z{~qdc4G+f689vaZw-0pb?E_tU`#^{J{pTlj!FvCGqEkPz?hpJZT^zf=>c^y0KPH{} zG3nHgNvD2HI`w1HsUMS0{g`y>N7nO!AEk@y?))fS9J?-Gw*5Eh)Q?H0eoQ*`W74S~ zlTQ7ZbXYItW74S~ud-#Kw)d;jo%|?WjKA}vbaCuD^<&bhACpe~m~`sLq*Fg89oor{ zNvD3~`XA(@bSFPbck-ijG0&YJrHf$D~8MK0na(3Vxp-Rz-enu1C-F zT-O6XN_X<3bSFPbck-ijv7Wx(Y;X6!(#5gs)Q?H0eoQ)Cp8S|}>c^zR^~jH$?*l(d zck-ijCqGJe@}qQ^H`O`U*Ze45wD0^VT^zek{g`yX$d5^?&L@5;@EvtKPDa8$&ch7_))r(AEi6_Q92yA&-2n@-djIPck-ij zCqGJe@}qQ7@0}l|i(}W7A5qtr4e)2<$4M7;5B#Kq?2!)h%jul1SNS;U^1l6GetAE6 zpu_C)esvlb%gy&!CmpVr`6yi;QP4Pc->ARld81Q5rt9V9>pFG3xn9`O{hh9-eoQ*` zW74S~lMb^ZKPH{}G3jtU@+0ecQJ&eoQ*`W74S~lTQ7Z zbeJ9aG3nHgNr&r^AFr~V^D*gioaS5UqJ8H_>EhURVMq64(y1SlPW_m4>c^zR?8uKv zhjzMOO*&kU{D|d80U{5*E}D-?r+$>~C}%&hj#K~ z(qUEP$D~6$`H|~-;K!s>KT3DC}%&hs%>6lTQ7ZbhsY* zk@J1v$D~s~N_X<3bSFPbhj~+-bA2sGrHl5RAEk?9*QpC}%&hwG6aIgbZ^ zOgi7&`y3N_rQ-yr+$>~o{Ex^T^NVCtXY=rgPF& zK2Ey4Z$G$R-cKIrFuS~8oyN`jKf7M$qpp{A-{j+@tNuDp*Hb?xo%%89)Q?H0eoQ*` zW74S~lTQ7ZbhsY*k#&S0aopu&(v=T%yt$tGFC}%&r+!R2^<&bZJwFdteI}jy zk?X(N&zY}Qze!i))p640d~U86?K?l}dU5PJ^<&bhACpe~m~?2@=LedwF#PoSVO8Wu z3T||0r~6f|>wzDWu6(HDq|355KS~$veH}UP8(p+_UGg`&Xzx1pqsCR8`Z4KndGce@ zVO8YEq{H>dkDTuVKPFxIP{&D^WpDK>U9|W5VSc&Y^m@_Ub-BKq>qUFlY)SNr&r^A32W)eoVTmTOB7|mc7-bbkW}Hg87jjrHkgSQ$I>~@}qQG z=WM^3U$pme@sj+g>!}W_B0nY_u19|4^&j{#>B@&XPP#06TW{&2UDiu}lnzI#i~3Qz zlOLr!`B6HpbGF~CBij2quqyJSuBSS@CO?vU;K!sZAL=;i(Ee{2=J#`6>7u=_1M?$4 zN*B#tr+$>~T_#`LMlSU8j!I zxG|BK&Pi8(oOF5LesI0KpFGfEc6q-#jf?)w$4Q6lkss6NM)hOTsUMTB=2gc@7j|?% zCY|~*>C}%&r+!R2%#Qq+bn3^X!}Z9ItS1T($6Y=qo%%89%7;2my0D}BG3nHgNvD2H zI`w1HVRq!lq{BKXACnH(BR{e}C_o%{eoVR?r{#RoW%~nN*wOu%uBU!XI`w1HsUMRL zvm-wy9oor{Nr&r^AF=!>Kb#`7!CxPJZON9{4fo)Q?H0eoVTYck`ok(Z2JebaCuD^<&bhACnH3CqE{g`Z4Kn zJ@O;x`@oM$r+!R2^<&auei7H-_gAHh=3eJq-;FNXyDs?~U9@+d`cdPm4jB0{>C}%& zhwG6aIgbZ^Ogi;r(y1Sl4)Y^FN*B$&e(Fc*PJWb5>zwV)x6;M2kBgV&$D~s~CLOLv ze&qEZ_%Z3!k4dL~OgglaAEk@tUKjPFbSFPbck-ijCqGIT$38#xW746W{7CMBACpe~ zm~?3Ww|*a*beJFcQMzdE>s3EWck-ijCqGJe@}qQ^-qw%O#j&pgT>25~i~8W_dY@cf zm!Dr={aao6kyqMW5A#SrPP*2=9k={w`s;2TdEb7pj=Y~d&|$p1U!BIy`aiqg_4XmB zKYeagKPH{}G3nHgN!Ql7ouB$KT~Ga(bn3^XQ$Hr1`Z4KnJ@O;#34`Le%g3ZsKPH{} zG3nHgNvD2HI`w1HsUMS0{g`y>$D~s~UN+312dh4lF2`xPoOId#Kv(0{ak`%RG3nHg zNvD2HI?RjiSCbCy`FZfP4)jw#Qvbez?ea0{)Q?G*^KO1jx@>=-Q$MEbsUMS0{g`xU zCqE{g`Z4LyPJZON9{4fo)Q?H0eoVTYck^S?W&4dT+WWpzKk9m_Q$HphE>C_;I`w1H zsUJDt2YyUC^<&bhACpe~m~^?m=11wGedkB%;@EZS$D{*BeoQ*`W76Szl#iUp13xC6 z`Z4L$k4cC5{k*4>$4RGtlE{@$dyd*y+o%%89a6R%Pum8Z0NvD2HI`w1H zp`HAgbm~XxPJWc`)y z)OELxyl+2PN8V2!=rB&+uTJA;{hwWr{FpvBsvnb1{g`y>$E3r0$&X1_^{C^dQ$Hr1 z`Z4L$k4dL~OgdbT{K$IZeig@EJ|>;|G3nHgNf&m+?X&7U>8ihulTQ7Zbn3^X!|W&@ zlTQ7ZbhsY*@v>q5d|vCFbU99|-=xd-2fDDM`!QXw=2gc@r+!R2^<&aucI3yTLwkNc zKg|!o{Fc{g`y>$D~6$`7!C#k4cAi z@*~%SI>&M6$D~s~CY|~*>2lu9k4cy94|M9sbUpQB(qVq&$D~s~CY}0`^L^mQq*Fg8 zo%%89)Q?G*>uY{Yx@^DEMSI_W>PKBqb?V2YQ$Hr1`jPW^;K!s>KPH{}G3nHgNvD2H zx~xOM_&JdACpe~m~`sLq(eJB&nKPwG3nHg(w+P$ zoz^+qn{TCyWA{z{m~?2T=SOl6{Frp=$D~6$eIA^2m>>Bu>C}%&r+$>~KNmu=KjCJM!vfjL( zJQx>zKF?3r%lbdN9{DkSZd5-eo%%89)Q?Gr^^zZxPW_m4Rku1$I`w1HsUMS0{g`yP z9{G{=#D$D|88dOjwd`Z4LshdNF=^<&auc9f4vr+!R2T#x*C*)V@T zuXRki9H-@S(q;PtUD(n6n69UOOuCwX9VeaoG3hWn@?+AWJwKnH#>Mr>k63;d0RQgt zk+LY1=+uu%m-B9ZOuB4;pi@7l>s3AKIO)`nNr!gwW74S~lMe0VN3IKXj^oacNvD2H zI`w1H<-D68lP=pI=*ovWPS;aECLQKSeoQ*`W74S~IZyZz$DJROPW_m4>c^y0KPFwS zulX_Qvi*Th{g|$&eoQ*`W74S~IgbZ^Ogi;r(y1SlPW_m4>c^y0KPFwaH{VJZ$G%V1 zk4dL~Ogi-=um8Z0NvD2HI`w1Hp`D)RlTQ7Zbn3^X%X&3GN_X<3baCvysUMRL?ezRe z?tveZPW_m4Xs6GElMeGEKPH{}G3nHgNvD34?&L@5Fzc-!rHfB^6j4)aJqPP&*#Oy{I4KTf*x5U)8|I@ zW74S~lTQ7ZbeJFcG3nHgNvD2Hx~gv-Cmm)-eoQ*`W76Szl#i?@He?)k`IvO-$D~s~ zCSBOk^D*hvk4dL~OuF)+j*||vBR?jc`Z4KnJ@Vsa!~FTY<~QkboR+sqm+cR9VMq64 zx}N$m>C}%&SL>|fq{HmUk4cC2{Cxi4dgMp0KMH`KT|OqA`Z4Kp-p!9mm+cR9>c@0F z^<&ai-Rd~$&`y3#I`w1Hp`HB5b-|A~?);c^>c^y0KPFwyyZJHcvi*Th{g|#-KGbp2 zVSePtq*Fg8o%)gUg&%R;`7!C#k4dL~Ogi;r(&hS^ACoTIALz=5I!@P9KPH{}G3nHg z93Otfap%XRQ$Hr1`Z4L$k4dL~Ogi;r(q((|ZPKY9lTQ7Zbm~W5|A8NqPW_m4>c^x* zJ3Y@Qo%%89)Q?H0eoVS-Z@!f-j(tC?ACnI4^!!Nffgh7j{g`xUr_Y0v4)Y^FCY|~* z>C}%&r+!R2%#NNPrHl5RAEk?9*MUnv>bm(Fe#Eis^7BhJzs8?*8c)e zoOEcXd`voAhy1{6{JaXa%g3ZsKPFwyr};7Ivi*Th{g|$&eoQ*`W746W@-gYuk4cAi z@*~#;KjOIaW74S~lTQ7ZbUE+l$E3^l2Rij*x}N$m=`cU?W74S~lTQ7}`NEGl?);c^ z>c^y0KPH{}G3j!B&5uc!?GJS7$8c^y0KPH{}G3nHg zNvD2Hx@>R0O*-{s(y1SlPW{O1zn&lTc_!bVwfRjt^<&bhACnI4^*H-;U$~i{`Y~Nk z{g`y>$E3^l2X#?DHrJ!)M{+moRX--3`Z4LyPM-%S9p+7bOgi;r(y1SlPW_m4S=Z*r zq|5djU9|W65U!VgH2w810DW#OKTf*x`f<`>emR|!uKYOZ%8!$-{5a__yUguL zSN(Maciq)F+u>X3rq7M)$D~s~CLP8jKPDaKM}AB?^<&bhACpe~m~@yO`7!CLzIB{* zxZV}Fr_yCT(GbU;qvRjx)Q{2N*r zBkP0$#Bt}xq|0$yohMzkKhT98-H+*d>c^y0KPH{}G3hWn@?+AWJwKnfBg(th8P_8} zV)6sUMRr=iU66blLtur+!S=Q$Hr1`Z4LyPJT?f=0o~2>CjGo9YNSPW_m!r+!R2%#Zw-bn3^XQ$KRP@FR{pKPH{}G3nHg zNvD2Hx?ErLW71{&1D*OYT~Ga(bn3^XQ$KPZ@FR{pKPH{}G3nHgNvD2HI`w1HsUMRr z+naBbPW_m4>c^y0Kl1vo=fdsh^SbV&Q$Hr1`Z4Lyo{zKBxa!ArJ@sSKsUMRr+naBb zuI69INr!fNexx3L#BrC8NvD2HI<(X0k4cC5ksp&z{g`y>$D~s~CLLx+&yPu$?ajBY z`)_cO|Ly00`uQJ!{^QU8^7Fs{{HLG)B_5bctcS8h_HI z;(<>6n69UOOgi;r(qVq&$D~s~CSBE|j# z$D~s~CY|~*>9F4VOp^DbNmoA9@m01g)HWZbJNZ$%7=PzS>EhUR>c^y0KPH{}G3nHg zNvD2HI<%7?ldgPdN1UGhfGBk*KT3D$&b>V{3uYVFq&!f^s`_7Nj#j)$uk4XoN{Frp=$E3sc$d8=I13yZ4 z@}qPoKT3D-N}#Ao%|?W9J_CLNq$T^^<&cEdgMo5|A8N+JNZ$%lOLr! z`B6F?sV?eA=}vx>?&L@5PJWawj@>u)W746W{7CMBAEi6_QM!{KrNeRiJTD#Qz4fDX zCqGJe@}qPoKS~$%-uY3wICfq65p@k4@`w|yGxcwDQTN~LY;=%4(nZ~$T(9y$^SoI{ z-nVOBb-dB#{iOQqc%#GY@_uz17t77}S0^2=m-#4N*7IiE>aXLZQ$I=<$G#8pWvvs( zNf<I$E3sT$d5^fcFM=3!}Z9ISbh{Ba?tBixv1l$Q$I>~@}qPyY#%q< zo4=)tW7nx4lTQ7Zbn3^XLp%8~>98vDW746W{K$1Z@MF@cAEi6_QM!{KrHl3K{3u-< zyH5R>bn3^X!{y13NvD2HI$V$Z$oW3-W74S~r91gix|1KJ!@Q}^xxSX8(nb5ukJ81l z>(q})2aNofbn3^X!}Z9IoW}z{CY}0Gx|1KJJNZ#M%$w?`ew6OyN9j&}lrE0lH@qZ2 zCY|~*>2N*rBd`C!k4dL~l4o9ks`cb-*AEi6_QM!{KrHf~@}qP(ZlC9+!@ReCl?&L@5qTV|{N*BkjD?h4^d4wNYzj|MF z(oz5B^8)6Pp9e{QGj7x!&9BcVb-dA4K2F!m`*vNYjyKoK`$_fJ@kWQ)<^Ae3Zq~o9 zQ^))3Wj^Y9S*IJF`Z4M1I(3|M*$D~7hzTefl zgkIK5e#CZ+0tDA}>c^z3@#;9~^774((nWh8H`{M?(cX3HM_o^K>c^y0KPDa8DIb## zt0F%p9oor{T-O6XCSCbZ$4QrEZ*?wRwD&sayl-^T-gU{}=%T&r)Q=ihb?V2Y!{y13 zNrzRDACnH(BR_J!5B!*PxcP8Tz{V*rHkgS%k|ypqP^>qztKf| z*Qp;huIhl1ACnHNB0nY_u19|4JRbNl>B@&XPP#06t4rykz1IcvBR@(P&0VK{l9o$-elx#l@8jYn`BB$X9acqtOgdbT{K)G+@MF@I4|SY$S@yQx(nY(hm;5Llj#L-* zqjV=fN_X<3bXw~@}qPoKT3DQCDP0`<{M3(0r+!R2^<&bZo&1<|STFf8>CjGo^k*h(y1Sl4wolCCY|~*>2N*rBj@|Tk4dL~Ogi;r(qVoP*Wde9>7u#U zIoEfii}tQd{zez=U8jE3xT*t2eoQ*`W76Sz$E3sj$dA%RbFZKJ zQM!{KrPDfRd-JVyaqQ#bCHXPw)Q?Gr>yaOM{Re(bI`w1HsUMRL?c_)4qPf>a{V3hZ zkJ6p|DBa1A(#5gQPyLv5XeU3Cd*H{UQ$Hph+W)-&dhNr%qwvw**Ma$wALvb8GyTZyRK8m8(rQ{s=tmmI*gb1tJAny|GG{c@2^LGc^y0KPH{}G3jWX zSjVKx_F8AtMf=W=x}NIPk4dL~Ogi;r(&2jKNA8~oeoQ*`W74S~lTQ7Zbh*CfN9m${ z=SS({*mdg1qyt9zm~`sLq{H>dkDSK?KPH{}G3nHgNr(CUxsRgWlTQ68-N}#Ao%|?W z9J_CLNq$T^^<&cEdgMo5|A8NqPW_m4>c^x*JNYr`)Q{4g{3zYYkJ6p|C|w-8Z|cXS zLp%AA+yg%*o%%89&`!_uNr(B7ACpe~DBa1A(w+P$-N}#AVb)teN*BlO8@TkN){{s0 zq3fvU`AJuPoOGB+`f<{Q9kD%5I_fX|%{ubFUHx^u(dGT5`s;Y3!|d{YMdRP-vi^0Q zI^O7TJ@O;xd!ti7CY|~*>C}%&7j|GezkW2N*rBj@qJk4dL~Ogi;r(qVq&$D~s~CSBH{`B6HpbGF~;qP_cum*huXPj%|Yq{H>d zkG%c^KPH{}G3nHgNr!gwW74S~lTQ68-N}#AX`QpZ`Bu6(cHh*GNr!gwBe@5DOgi;r z(xIK6ACnIABR?jc`Z4L$kJ6p|DBa1A(qYzHKS~$J?i;xDqvn}M_@VQw=f_D`ew=ie zNBVKng&mmA>v>SeoB5R=r|VJw=6ZQQss1|NjEmXj{fe%8qs#i&b?SJd!}Z9Iy069c zyKm~pq*Fg8o%%89Fb(o!(y1Slj_QWGOuB5Zx;0(2_qyOE`BB$Xo%%89a6R%PuYcp4 z`Z4L$k4dL~OgglaACpe~m~`sLq|16WKT4-{&h{H!w0GaskGh`f@S6Nc?tveZPW_m4 zXs7$tq{IBkk4dL~Ogi;r(y1S%JNZ#M%zEob>EhUZ1DAf(_<4jMI&S6Tq$@v8I?N;e zIO)O;Oy_l9spHN3%8%3a%8!$d`ZwcZc6q-d{muNc{&k%?-so^W@*}T*qf7u>wd-bEPr#ieQKazXk$D~s~CLP)-ACnIA zBR?jc`Z4L$k4dL~OghYt@=>~I-}zCxICdSl^rNnuNB9xPuB&{UbmhlMhk2wQCms6J zkCU$aIO)odldk+Y>8SrfK1hF4XY`XFc^y0KPH{} zG3laCud=?5lP=rKFC0r3$6jY#Fa0R}q^o?KbmhlMhyL{AqzgM@y(eAyanh9^Ctdk* z(qVS#$4N*1wH_=i+W$LT3<_D_m4II9>3<_8Utlz*4k{Ga&H_w_?>jUW2X zYyMB;V|d{?|31(8_j%60%R~S7H~xdC{KtO$CjZL2`CoZ2|10n1f91XWD<6Kwo{RSn zb>8=H=(~T)XaAe8^UkB|Tb}agjt{-XhrZ7rHL>{6cV6@F&L7jEzyJF@=ilc!|1OVu zQ2syQDgUU)SNT`o&Hu`K`CoZ2|10n1U-`=X)BGzRexfb!A9c?ApYyMLypG@Z-#_wP zc*$5BzTZlz*S+{QErT-{m#`AMl$0 zpYA`dAOEw0$N&8w;}icu{)M;mFT9<9;qCkrkJ?>P6C?k`SLTDS^PV4E`s(i=Vyy08 z_IvqPJ}z1L%kw_|P5!t1gZyuK)RXQXvHZjObI$Mk&oX~BX#Th3#|8TOG5%lQjlbmI z8Xxtb=YPyk{Ew#5zsPo^h_mCt@Km4D^YwdJ!Pn)m)+#z#NpN5{{8{8RbS@#FPw|3r6aCLT4h_|W(I z#qz%yA5)|J->rW)e~eH0_j%60%cCBY{||V|f7JJz{44L~f91XWue_K4mG|NZ{#_n=%KryE8cTe9-rQLfi8fuXp^Kf18*5|A&9>=AZe>{PX-X@8_TS-2B);@BCyKc>h5`&(DR2z{&s0d--2^FaOG4 zn7xyK<=y-%zt8WQf8}w1K&D>)z0SLTYyNGX@*mgh`NeB1|H`}hUwJS8EAQoh<-PnX zkJqsQ^Z8Tf-M`Ft%b)UY{*}+oZ{+`mkLmwDf8$){Pxp^I-pT(RkG9|OFZ z`~OeJNB#c(X8g!w=VKl{|2ePi_jh0a{lDh#^PGR5=luIT=ilWu|1PijcX_0b^8W!( z`Ez;Azsqa>U0(C=^RK`E1y?!n_CM#}AD{E@@|yn-c*(zhfB5wM{Xcbk)z9TM|H?mm z|NqB7m)HDz{F;A{U-R$rYyNFs^6&9${yl!pzsIlncX`df%WM8!Ui0tqYyNFs@~__? zcJuG@nt$cp{44+L^Z%dwhsUq^_xLsc9>3<_<|Y3gzvkcL*Zh0@ntzwq{JXs7-{m#` z9>3<_<|Y5v<-Pw|p8qDV`PcE?{44L~UwOPgc<{gf`E&p9_%;6?zvkcOCI243=HKJj z{CoVGf0x(%yS(P#AA0%wvo$`hPrT;;G=6x|$HzRf4{}}f7Ra&;^>dh z`FDBf|Ndrt@Ra{}9)0ut_j%6$%6s`=c`yGf@8w_l@N>6+Lf`#UKKtMMug+!ve#=w- z-0`8e_|W(HqdpcN`p#?q-T7lWlz*S+{QErT-{nyc%KryE5(FALO6-%6#Ov&inY`_ip^`kKBQ;bKy0=G=4zw^XBus^Edh5@(=RA zQ|2jVS{HgpaAFuoU=Z=rIiH|%x{3-wL_?Q~y-{(31 zKF|4gdCmU^Jmo*?`%V6Rp7X!*UjA3!%m2!I`BxsVFYK}0|8XAuyZkE;KY#f+S00z9 z{41aRE&n$>k}WEiO=%z|Nc()FYdQnp7S4C-v1|_ z^Y8PVf0u{;?{De{p7I~{O5Xj{*}*uG`{n5#cSaye>XgkKlzRG&TIbf_@4hb?>uU996vNq^S_RNVZ`grzs~#k z=%nYr&vX8Lp7ZbWs14=+177m4-ye4K@A8^|<=y-%@8(~5H~-96=AY-Ec|ZTm=jO+z zc%J`-$0eNnue_K4mG|ck{2jn}6p0{4?+8pZVPUR{j?rmvHjG@?QQ|-pjx87iRC|U-?sh zm*>Cr{e9dw==(pItHrPRw|U9`^8Mj|jeFbc{`a~U@cSpUwa;I%9`Eym=3jX?|H`}h zSKiG(^M3xB_w&zuZhkBO3y(`U`CoZ2|10n1U-=8Ock-{in}6kTe?X>R`FWj7ekA|O zj_Y*I_zvJfkKF|4Ic`yGf@8y5xz5FYW*RcWf^JkrR|1;n1 z{;7QSzxg`vJi6%fzw+5{o)zKflL$pFi~U`Tvd&&HMd#{w=TbvHbr0 zS$Xsu`CoZ2|10n1f91XWD<7}pH|kgCy?$tW=l_+%c-`|KujBX4-+X_+@_*0ged+!F zp{~`(hd2Lt`8V-sfB*mgz2}kd%+IGh^8E#mIeo=vroR|JH}`k^J3pV*FY^3l{l4P= zDxe~(}DZ}XBrk6-ie z@oWA)e$Btj^Yh=|f0}=He9gbdulcum$-jPo_>^DGzsqa>U0(CAJo4Y&ealn+-0`8e z_|W(HqdpcN`p(DlzpNkq{oh?b#{cWP@j3tQ_^1cv{{x=#4|~4Kzt402eV+5b@?QQ| z-pjx8ZvK@IKhc)=k2>f5&-qtAUdQkI?;m+CJmn{}eE&xaekLAsI`LOXiVuAsU-OS{ z9sfexFMrDa!0*;i`S*Fwzt402U0(D50k8T0VgHd&?v)eq1kp-ucb*KK@PqxBP?rZ}|uL-}145K7YK_{G0re zf0JMGZ}B(zcX`Tx`14KveV+60^PK;c_wv8;UjCKW{6~M^e|Sy#RX+Q{RQ{Dm*Ot$I zXr|{c`sw+t<7Yqqsr>8s@w(rC?)Ye%_{g)vpYrdHkEv1qeV+60^PGQ|*ZhCLQ~smA z-{jxtIsZP-`CoZ2|10n1UwOQ~u*Y)$$9eSc@~=Gn{N>|Zd0d+EuYC5m{NM1DzZ)Kx z_>*7dW54zM-tnQS{3{=?Pkd-5KFibo_ak@X?|II@&vX8Lp7ZbW(Et5S{lHWHqn_X7 z-{(31KF|4Ic`yGf@8w^4)c1;r#Qv@GUH+BV{KvIAkC&8x<+C4+@BCcxT6oIe4G-i` ze&f9Jn*Te#=ReLnkD46E56#p3uj5}B@p|*G^FBU0>G|*ToPVF^{JT7AL;3%Jm;CGZ zhmlY3^S^xm`NV7f-SIX5%Deej-pxPrmHFrSXWq|0^SSw9;Pd=1JTBqnf91XWue_Ik z{X_Hb@|u5-U-NJClKc3_wv8;UjCK8FncHe z%Deej-p#-Acz^Kd`~Q_Ao2UGv*7E&-FaJJY^L`zDp7X!*UjA3!%fIq?9UCw|f7W?_ z|Cssazh6=P-TdqLx%rL!-|#X0-_PH1F7v0)?{~bD|2rOSzvIVwA3w4!fB&NTWxtXC zoAIsp|10n1f91XWD<7}p_x<@Z&wKsQ_s;(-NAbG<{V!g}@0-u_&j0!T-#wrGkG}su z@qg|=H5VTL#bI0iOY8%kf40BB|8vhH-p`TsK>`|s~B>reTQy!QO}{MI?=ufG5Dn!nH2^MB(1 z48Jmt^jHUBP;`h7LN=HDG( z^Y8PVf1l_4yS(QA177m)eSbK{>-Qh{@ejU#^!&cg`Tn8#clpYF9hL9-y&YfjVp+|2` zHUA#J=HKQe|JUW^XL|4;5;_hFaU_y5YH|IzpVYaSlI=HKJj{M)?b-{aT( zd;FSzk6-ie@|u5_*ZjM@=HKJj{M$U`AJ;SU%lY?t&cDxB?p{Zq=lrj{mw)BsH8T3( z@BjDnKk=G>cl?-JfB)+8n*S3Y`u_e4dTad9cV6><8b6lHJm=r%IsZP-`FDBf|Nh25 z@Ra{}9)0ut_j%60&vX8Lp7X!*UjCI2KV#3m|NBXv_x%_8?w|76|K{tw^XU4Pr~J9& zLvQh+@AF4}EI#y|*ZjNl$8_lL|31(8_j%60%cCBY{||V|KkD&S{(YYF@AI60pXdCq zyqACF-TW&bexfb!A9c?ApYyMLypG@Z|9&;kg{S<5R__03`u*?!7f!FvV@@YNn4CWj zSLi#h`45eZf1&M{KjnYmck8G8`#k60=Q;l_ulfIg*ZluT{o8*(L)P%$(z<^)fB!T2 zCI2SBH+XeK`NCq6V2AItxa=ltKz z|1kbv-;K}tcgKhR?{CHjPx+5}ev^Nn=luIT=ileAtJiPk(Qm!~=lY?(;Q!=5&Ug9O z@iqU--{p~S z{`@cVN57SS9^cPD^M3xBN9{3xC;tl%+{ypSd--2^FaOG4n7xyK<#B(&J>q@;%X8Vk zf9?0riP!vl&^ zUB2p8N0-<9EAQr?c|ZTm`}t=+H@}ttg~uhF{I9&1|CRUhul$ACJNZ}M&A;;d{Nlf# z{WHIRP#*n{zW+b%|07TNkNb)D{O0Gs&vX8LzSjLZ`aI`<<-PnXkJqsQ^Ydq&_xF#P z@Ammac{l&c=jJ!^f5XT0AAkP8&85#D z=KjlT{S%M=_un7x`4@*V^6vnl>Fdw-_vimR9&PWxAAH9D$^U13ZtlE)e9XV|^BEu6 z-q#=3-Pi9c9@qYoN4~$RAM*VbU(f%~>W}^R&i}_eyW^vNlz*S+{QErT-{m#`AMlcY{r+&z-|M{Z{}_+=pUZ3hU0(CAe9!;g{44jr z$A9qsujhB=*Zk}Fdw$Ko$FKRfdC8y0ule`*HUA#J=HKNt|1PijcX`df$FKRfdC9-` z{oytLF0c7_dCkAe|K|Sv996#O_jNDn_rEp&9>3<_*<7pXdDhJm=r#Q4h-h2R!8;_4q3PKF|60dCtGjbN*dE^WFaY zkMh}%#;5sLKKw-6fZNQw`AA3ySZ7@zpicRrW5 zpMUVX^;7;s%g?`4{W$+V&-r(G)PwT>0k8T0;q@aQzyJN~b@p8*&e{k>T{|!(1kAC(a4fv`2D<7}>{o{_0wuz5CJACMQ{g=h- z{4q7kzdL`F_Ah7t>-e01cYM@?p8p^4l>ewN`;UAW&wroi{QErT-{(31E)V_H{Z~Hw z-}^t#qrdN8__gJ;|INp_^61*~*$++S|AwdhL_hnFE8wT{t9p}^OB|Gduo{=NC{e=HDG(^Y8NI+wakuKkEPX{hrT$ z?7-N6b>8=1W}5QP^UwY_U+0}i*LM8uhvuE1D_#pP`Qh=Q&!5U)yy$%7ne(^up(#Gj zJCB+i`Op*}=bew`@5e_!G%x;j&b;P-nZKET< z^Ulu|uZ5TV@c7W@PvtLObUyOT`CIwW6d&iEM@^1=Xo`>X&d2ii2t zu>)iO)p_54ndz2)<+K0I*Lml2b8qf92zK{Kow2yw4wPnSUH} zAIIyS|9Bn0Z+`s#|HNbN{~EtD|H}W&qyNG8|7RZehX>#PpLyID-tT{)S=QgUsea&p z^S|)OLveM~`fqt$y0|*J{7>xPwhoJrJb%Mu+^_gp{x{=e_WAd}PuGv}Gyk9Sujl`# zJh;EVSwDEne`K}izvs8k`~4%^+Wzr*&i~5)$^ZTMujhZ&Z{`2w|DH#_xARB;@8_S_ zy{xal#;v1{pY7OWujj|gYyMpxm)_3*G(LFBk2}8R-{mpCug2H>yW?Z^lz*S+{QErT z-{nz1%Krzv4I^XBt zw_U->ov9>3<_<|Y3gzvkcL*Zh0@ntzwq{JXs7-{m#` z9>3<_<|Y5$_lIwu{}+FL==ph_^Zi5f?~bqecX`df$FKQkp7X!1f6c$gulcum$-l?1 z`Szwn;@Be+C^Y8PVf1l_4yL{;T z=O35X{JXs7{{x=#@A8`e6Ce7%f1tO<4}Iq~|EKXWyzrcVpXdDhJm=r#q5u1v{Rf`% zAN%o}{QErT-{(31KF|4g`S7dP-{nKUauABY)El>H=`Jcu|zr}~X=NI*} z_|SJ=^S_&at%Z5czt402eV+60@~8*p{{x=#4|~4Kzt402eV+60^PGQ|*ZjMD_|@~T zeDl)upT`+uGRM1jf<9lI3@qq&;R`W(KEl~-yDC* zzsWE8xA+$?^ zBKYT!|8e|#e#yVdFZs84)PtV?F~^?Yn)CbqlP~-F!BhUjpU&t0MqBx>{%QVwp7ZbX zoPVF^{JVVCr{%}xp}%_ml+XTc{r5c33%?ux(7Bm^u<OYs+Up45<9X^=1EVd7uaXplJEg`J*>~rtxFHo%qm9e2jPE zLo@N3|GW7YA5)EUsUN-n_j%60&vX7=9(v0E2R!9J>bc8*))4>v`#8bA(dWOUh}WK=07Sf`*%A&ZNS$v=O87}t*i{?l={|IBOtU0(C=@|u5-&-Ky%^Z3m7hR^J-&ReBlg%|-TzblGT*d+na}=h{Wbs01HJIO z@eiGw@q>+@$^Xdni4RTjao+Qb`W*St6d&iE&*g3Be__Nc`By1U`Csa1=3jZdKX~x{ z|J)~7M`-*0iPt+GoaEo;CI9^W<(wC0RrQY`F0c7_dCkAeYyLgHe5)fq5B+oZ z?^M6cH|<~MvwvHE%|G)%FZ^!&L+57vVB=@S1C^UU+QP(U-^B0W54X{hyDlO|IK}t_YWQa$W#7toxh#^tDpaUp7ZbXoPVF^ z{JT8#SNG55k%ujx{VhK@mHofxbMx+MV@!-kM7VEALpINct<`o z#m9N)HUI1UFO2v+|10mk|6h48|0{pYFFpU2kJs`0u3w(_`k^oLpZn}}AJy-F=XciM z{PO+v%KyY?|AX)U&phrA55E6D^SD1e`2PRQ{C&!U`-;bUzv5&0asT;r{+NCK{r__w`TlDB*Yp3=@ln6b{}(*vKl0l5 zU(auy_xne-we|b_>-k^vU->`zzaRhg{Ga(h`M>9p@9q5mpU0(CA ze9!-@7JdC|{+Z|euYA?5j#1+||0}=d-{vL%9>3<_U+iS>;3ENyzl>bzrp!+dCkAeYyMqc^Y8I%{+Z|eul1|k*D-3{>!0li z`CR{>YghjVyyV{-AJ_kiU-R#czvkcNHUBQJ`FDBEzsIlnw|UBc?AN~k`u?r+UH*NZ z^Y8PVf1l_4yL{+-{#?FtUq|J8ese6ujqA_(|A43by1eH9#D~7mA9`#2(05+*e;Pk- zSIl$%eV+60^PGQ|hyL%~{yXg-@Ra}1_xyLh&bfa4{P%gzzt402eV+60^5Ivn|Bg?s z?7z@IUVh6{{&w@f8y{^JANsz3P!o#}edjg*?))(w`uo4nbN+pv^Y8Mg2j%|* zp7M`+e3gHn=luIT=ilc!|1O`I=D%Nz^-C=V==(SP>iKua5B-kMe*6=kA95_5_wn(P z@`qP6|Ln&<6OU`2_$wsEhrW*=d3NR>`p(DlAMn@f^HYfLzyDu8M1Oz&#q0Q;dCtGj zbN*c(^`QKJz-#`0`uc0nlz+Is)SsXK(eLp~{!M<#zsX;h>>rEIOmqH6KDAQ6+IMyI z>xcch86VfX;+nI6=-l&xk38mW@uBbejXXQ!hraWHB}$ z|HV}PSDy19{XIWtp7ZbWs0Zc$1D^69_3iV=^{!mQ`~Blue}4Y^Jm=r%IsZO?U48$! zJoJzG(8l%q{>}Qf{JG=9o9+17kAEtEI(~S&TYvWBpNWtCcH%=b@iCthADW5R{A>MU zdd1gyuRq!-|31(8_j%60%R^83|A43bM?H7>&l=(%{r-RLW1r{z`#k60=Q;l_k9t%7 zc6@44yT1RbZgt%8sSzG8x8r9&{;B-nl*W(OJ%2iW_T!(4$DEFQXo`>XzW&&+r}0Bm ze4KYa=DX+74^8l?#X0kw|8@N*p7ZbXoPU=`Jt+Sl@REQ2{&4NNsy~V-_2cJ1y6OAR zXI}H~@|u5_zb@WC9*_Dz=2I*6%lfqEzh6IW=naqSUHJXYPn^sCm;CVhLmxkr|B>gz z`1zi@_|W(9BhM#3G{whx=W}`6^pa{@w94|1Pij_juG_@;CFTmHO4bsU!BPSwGD` z^BC^J@5VoLQhpXb@R7&7k9=rq|HOIUKauCt_@OC2&O5*6U*~^e#4Gt%DK6oc=RegS z@FBm;^Iv%MKluLtZi|tm)HEeyyoBKHUA!u z`b++2KDAQ6^1Y5f@_#?zTz}0!kB{Ll{BHb1C*^i)^=?|I5U>if6%{O0`o zJm=r%IsZO?W!`@csXp$Nk~K_x~pzwFCd!|5eLg z|H}QuXa9yTu8uKA_b=PAfVuuq!1vVM_@6!aXW}Ez2mT7l#ACi+@saHZX)A2FizrPtj*4z2WEAJoV`<>s)a^Jt%*4FRyod1>olmGki zU(f%l-^%~V|2>a^g{rfuK z=ilWu|1PijSH9=}ZvL8o<$L~De$7Agod1&N(ieK)@5-y46;zs*bj`TN7L?)Uw3 zo$vGS@~A02e_dYl@A8^|<$L~Lwdm_#^Uplzf92QwGtc>7d3YlEXFmIX^MA`reij~= zsQj+{n*W8rcKn)uk6-hD%fIux&L4A={JXs7-{m#`9>3<_<|Y5v#qa<7{(qhK{U7f) zIKM8h`FDAEO7{;rY8A!dCkAeYyLfc&A-i4{$s!P{P+D^=iPtJ zzt402eV+60^VpLu|1KZ;Z+OkWj^Fd2V`0N`{gLm@{2|Al|NZ+@oGVZH*YSf5Ch~tb zzUKeLhrZ7rdTad9cV6><8b8*;Jm=r%IsZP-`FDBf|9;^A=pT5>f9$uO|Gxj~oa@KW zf1l_4`#k60=Q;l_AAa@v@A%Zp{tNw6KDEN*<(AKWXd=G@Px;gNzxmuhcRboGKJyqxg{UgFV+^n%ya&u-&sH8lz*S+{JT8rLHYlH*Zlu@>tFJ3@=N|r ze#yVdFZs9l%rx)6kxwlQ>ih2||0Dk}|05rJBYyk%c&+)f_?!IS@%j9Wu^;4r%Rk7! z^0~y<-!Jl%>W>zB{)a;Le?l|Akm!kU&oKvCq6V2AIm@R@psGO z^Ssv|Q={j9Xl4Bep7ZbXoPU>xp7Q?zPx+5}%KA~@KhOU-=lXH}eV+60^PGR5zplQ2 zTpsm)%%>Iw?Df<9@5WE9@ZrZd^9N7)*^QrLK_K%#@;(1?-uc+Cr}>BGY5v#wUpeg; z|2psEqm%OQ^PGR5=lr`oYD4+|fS3F)-yhDRRsExwTtCgf%WM8!Ui0trntzYaO!Mb| z{r>lF{Zfkp_WG^)pT~ce|CtZ(;uo&9_s&r*Zh0qqaKofo0t6S_lIA5rs^N-VNV6o%z(FfW3a1Y1+RtpIYJDzI)GO=2N@)ht`MV-|>;>6Caw|KXKmI zA9+6Up(#GjJHO^%*MDI|C;!Uh{($!g@A30o#{X+Sf4o1ye=2I*CKQm4FoB7lVpPTz3pW0*o=kf3O z$TRQ%l@CqjH_rS1k366F&=eo%onP~><6juj$-nY${*~Y7_viin|D5FQ{=xlW|NVW* zzm9+8DgUT1eg8k_g#uRn<2BcxpZ`A3`S*Fwzt402T^@SM|Bg>B3fSw1JUr%8D}4IX z^1mBDwTpjf{eq7?pZL(!{)zLxe$4mCho<;A?|hVRKR)`6{NL2idj7Axm;aSN=9luX ze7ug|s9&A;`k}4zpLLAa{qKMAI)2~$?)(3@Jnmip8ox9DoBx4F|FiG^4?OM<&%XaZ z@VGxb`~LqekJ`ls%>7%n?Da<;uJ``E<+Fdoqif4&KQwdwp?Ky0c6{{a&%{Tbzu{4n zulQL0H{)aW_4mJz){pW3`fmK+_x~S_kNQ>qKjkU^k=366p5Hp}`#0O#{_%Ov|H}W# z|NZ#C&;R#6(E0z#|2>a-UFy{$A(2 ze}3QpzkP6d&A-cQ{*~|fzneeuP5WPY^#A66<=6Z(&-q{ZHUG?W{#PFR_b~qmNag>Q zm;CVfVDsmd|CPu5zT(&Xd*iS9cX`df%k%Re^Z7@=f4{0%_y4ti$ZP)J|4Uu&Lyuqc zZ}XD><@>|G@1HTpJm2Tvihq7zR$nQ zYyMpxdy?)SE{`>R!LRw}@j3r%{nq?5&-q{ZHUG?W{%?87|H8NYul$;Sk6-ie@oWBF zUi0trntzwq{CoVGf19WL$A0bk@B6pTclq~u&cDxd{(T;My5-;HL;nr0`PcD#{&Os( zk?a4n9siyG`upP*VHTe9uj7Y4e&YFmH@@co#D~6*54|;h=sU0ZKaC%2VV?8v^PGR5 z=lr`o^ndU6U#vHNCjY=w{$s!O{P+D==UhMj{O|Lef1l_4`#k60<-@OD{~e!Nc+u+@ z`lozqg~!V+pZ)kJ{2zGApUxj>{!Bdd79aY)e$>R`L*IGLzdL_ShyMQO^PGR5=lr`o z>OuMcfT#SU9+ZE)&Y$ofKUe&6{W<^9-|ruIoj)_r`G?r#IsZP-`FHuubbJ4><5LSk zuV47p^S|R$D}3mm@~MTskB>IWUuYcvFsBoLg{1rseIGyae3(D+q3?Vw{{es1_!wT- zPx+62S$~Yb;W__4&-r(G)PwT>0k8T0k@e$}zy9Sp*MG^s$uIdg`6d4*zvSQIGt->^ zkxwlu*z0$b|B-)~|B=VgSN!(z@mlk<<5S-GoBVJ22l?Of5Awg|V*!2sc&Yg}`6d4* zzvSQIZ}RW*l>hK&mw)vy{(ED;|N1=V-{(31KF|4gdCmWh4{h}K{fF1r)B1&0d0g%> zAKDw9@*n+<|Diw4KQ!;>?~jfjd3N~F_xi>19bU)B)F}Vauj}8ex&t{)}&^>3{|=ilc!|31(8_j%60%R_&4|95<7qrdN8`1P0%t@5zuF(29+ zp7Im@j{mXWPU{a%e|`f2`mU0(C=@|u5-NBt##GoMe4KYamcQrGZ{>ffznOpK z_xZ)=XZhd%E06wX-~WHt!R9IdsIPwiANBj=Uz~IOIsZP-`S*Fwzt402T^{xv|KJlTc{Kk3bG2W36P4RKw`B?sbeDp)} z;$P>?^XLDY^;`L0c`yGf@8w_lcpbm7{yOjLM_cBzR&@v;0}{ZHegKmY#s>HIPNU*C=Ydj5YpKI-@P zH{*w2osYb-e|WyX^Bc$b?e~vtYx_T5dpzfV<^SYA$6CgJJ^!nIEB`0|_dN2woj>}2 zzyG_gANAYv*^f;Y`~Ply%zMjc|At4`md}1@rt#7LvtNHIcJn{-;mtHY>hl#J%RkM3 zH$J9D`M=peKYO0@@AI60mq-05{~z#@fBpV&&)@5OpMRIv{JXs7U-_Q@yZIyElz-*X z|C|4nU-QpA=YQoh-<$EX|2ID?kFLY~BOsOkTVC?R^9P$hul%ljWMf~yKhJ+m;~(+c z_s^RDb^Jg1TlrZ2H{)aWl7D;rzrGt^^Y4wn=HKQe|I7D>f8Rf&R(an2i~9|)-{s*c z?SGfo{JT8zy&WI@zxiL+zviFE=lrkynt$dw|0@qq4)c$IRQ_*y$q$bYHh*6EU->ov zEB`0IE5GL7N_CEid`!@iYAR=l%T0wJ!Sm;hO)I|C9f9{5Ag` zzvkcNHUBQJ`FDBEzsIlnw|UBc?AM-vL@pUD3mAM-hk{}Y;t$2BcJ^t}Hri;w9t&-uSw zf1m%#bN+pv^Y8M||LxRY=MSFpkF`?%<8?6MUz|rRxPJWp-{(31KF|60dCtGfhhM$^ zJ3h4Nr}~BdDIZ$pak(v@{rG4051sA)5o7fGKYH_L;$uE1J~R`Lnpk}3dH-D&AJb)? z^MAMgKL3^H{QErT-{nyc%KryEw93bLPx;W^@RXn3{O|a<-f8^MO#Vln9X|BEezAOq$5bxn zIsehG`?t@30k8T0k@e$}zyAHK`)A3&$uIdg`6d4*zvSQIBh#|~ zMn1G!KfHd-hgSLU`|0?hz2P-KLmT~l|H7}wd}x)&{(a1c z_J*hYM8D&I?6;@u52=nHuTOkv>ivWAvHb6N&VO8A*MAtF^6&GUf0u`z^8W!(`Hy<) z`orU@f1LOI`?LJ_f0yU{`{Q%|eg3-o{&9KK`!OF{tsh=L=0mGI?0C$F_J;rYX8m!! zZ}`}+Cq6W_|KgnY-*w>8j}pE3*E#c?|IqUOKk@wh_j%60%cCBY{||V{|MLCepYXWq zzwRG?{zIzYe?IViw7x?G69)&HCed-|&&= z6Caw|e{s(Fy$(G3QKIMhU;Kac{hz7>2Gjk2;5Gjqk9tV{ZC>)P-ycTyv8by5x_>nP zF0c7_dCkAeYyLeR^}l%k&U|RKet7+u53TaKx!ZrggXAxMevyB7yyR!g=U(Xfi}^fV ze@J!yk>?X1n%aMH-p7yf?RoTD`Crz5$nWy}m-?gs!T0~Gj;nur9`%s?>->+rV#%sQRX>sY5v#ouUPiu{I9&1|CRUhzw%!Gm5Zl@v;0}{bT$+|N8r1 zo5!;LJ&$~E{6CNX`uzXt_~8EjW_<9J|Hx|3f6s57_xne-we|Zv=YQq@PZyI0o@AI60pXdDhJm=r#Q5(wt2fXB8zdzjb_d4(UKgQ$y zxV+}yKhE(h|NWJp|31(8_j%60&tp%t{JVVUzu`0AoAG=8 zV=Vki{eQOO!@GljP;ABz@8c)(cQ<}y`@~oN@Az2Hi4V;*zUDv1nDQHaF(}>Roa6dZKhD3;bN+pv^Y8PVf0vJX_x-!$L#y=*{Zl@) z%40ik`RvC(k)MI5{OSCG=Fh}Kf8;|m@v)xW`s4DUnfO?~!{_zz&%cio-1qQ9&;Psi z_wfVZ`v>RW=Q;l_kGWC)Kj10+*5E6CawV`M(>#^U>eykC*!Xf7$GOYAzi0WM$H%po@zEyv+42wa@9|L&&acPEe&6%xxAMP?|4+EU@%w+Z zj?l{fKk%A=kH@%@f18*5>-UFWpZT8W-{m#`F0c7_dCkAaqyCcrnGbF3lYRbY{#pKK zK7yd*qfPR&}&wOaZ=Y9TX{#pKKK7yd*qfPR+2iRZ??ble^-A@E&u-aIsbb8f6l+2|DW<$Q|A8*p7I}g z<@(|8d++>KmizwAwzmI#{`LH?`LFz+{NIoNdj8M+pZwqR$oF>sfAW9FqyAey```Qj zj?a8=#?Sr@kFM?b*$++R=Wcv7QvO22{-@&o_w(0Y=>A8x_w_^eA(_TUeU5x+CjO7_ z*ZVp;f3&~zKdhhfzpnqpbN+pv^Y8Mg4dwp>Uh=QsAMW{kop=9ZJoew^HUBQJ`B%Q@ z|8D-8f8~4rS3dJi`DH%)u>)WGcjedoGtc>7`P|%_@w5Lo|F^v4kH-g}Kb!d<`9Jwz z$B%69_fP-)x$mGAjq*T3eUdCvdJulZ-5^S|=Bx%c(ELi5V+Eid`w@xkWL#7DLd{{8&P z|2qDf|8@M(OyjTlSN_5TEC1{G=#>1syyoBKHUA!u+Q{?Y<|Y5v#qa<6{(qhC^Y8MS zf0u`+wEtZmYx;uEd~f*d$0mC}Kd~9FtJiPMKhK}@e^>vX!~D_zoBvy0^2_6c&7aNu zkNltfuj5Cy_w}de|E2YdZ0~vWLo>}EosxfD|B2W9yS(P#)8 ze%^oAVSMzX#FhV*=lrkZpLou{&vX7=Ui1F}Px+5pYyNxvgvz^Zw=h`#k60=Q;l_ z5B=Z!`t8>bp7I~H;{131b++g^m(R`J^8W!(`Ez;A zzstvd@B7!~L;oGm`Tt=2zrGuv^Y4zY`Tu~I{Ok9J-Tb?}=HKNt|1Pij_xLsc9>3<_ zYIT7G_>c+J1Zulcum$^Y{G z;oM@c^tCM#`u*htulaY!*ZjM@=HKJj{CoVGe~-`N^7G%UKd$fvzvkbY|C)b~ zU-R$snt$a_`PKX@kNyYW|8MJ1|F-;^e{X#7l7IdF@O8+q=HKNt|1PijcX`df$FKSK z_%;6?zvkcOCI243=HKJj{Cj-M&3hd#ulZNr&A;+){*}l3g9qRL|5FE>r~JqLgx|k- z`S*Fwzt402eV+60^3Y%X`RVeSf0x(%f521zU0(C=^3Z=Z{-1r1eTw%n?)a!5{rCTs z_wv8;UjA3!%fIsRI)3B*d!6_9?`V7H|5b;0-ShwdllBI=(j!Tdrsre?FtZq7juJBi z%qoB%wX9S0qJds^FS>WR2m+M{=%d5|5*?^zo~afwqDE8FM9oa8LVv*f-P}z+nwe6B zr2C^s*mL{seDeMOHQ(+J?%yBwZH?n&|NU|1XUC(z^!@)GkK;q>`~N#0$A{AQ|JOX$ z4F0@-VzvG||7*VWCp^0P@n_AqerWdl4~lmEzvUrF=l{stF=979YVydNX2;v|^ZBD6 znmvE68=`g`uzfW8zrEhy|F8BRw*4a?AKOiNfB*k(e9Y;$Z^pMZjlAWR*N^M_o?p*0 z=hv_Qy^bo+`JczX^S>V7&;Pse@BFWMQ| zU-8&zI)3YiW;Z_iDL--i){lR7yk$GDAJ~LPeI9w!?8dj{=i{Tl=YLbbe*WM3=gRMz z=ln0~_rP=hRUWmW{J-Es{-^H`|AG4ban}FLVxE7MkNH>mnE%L+`CrXH=0Ec2zw$rx zE#GwfV7~RkfxG(6`DdQ)H$%p*#_~6@5GXF>Z&i_2V zW&2_O+xymS{pS3~`5&17k?=A9kw<^Oe#hhgvS0Rp%)iRV{A)aF6Y?+fA^+3&hY!^6 z=*QpI=Jm(xf0d8HQ_$QhFBY)?Ap1)=LVg5t@XTB{jUH^gEd;V8^%>T6hA^$5r=3nJw z{xyEizsytq&9CG8|IxqRX8&>ib)NID^PGR3$37kWqw=QzhL8D=FZj>H2@>@ALnf z=lttD=U?Tar}O^{p7L*g8}mQ<&)e)j&cDuc{&k-7uk)OLmA872{#SX^f5SI(5BZPd zw|@L%`DtUJ&HE289@~86O|u&x^?T$^v*Tm_=k*^L{mlPn{gnTizw^K5IsZD( z`B!<=hVuV{r~F&7#{9S9;Wewjx7k0Of1T(2>pbUQ=Q;l>AM>yB%~M1ERNnMseqZpE zKb6P)A9>U4{1fxP8sGD8efG=#!%J!X8nPW9+oSy3_JjY2>;L8WKl1VK;o4od4Ylr#w|Nie)N0FcMFY;6VMgEBSk@!XaC4P~AiN_B4YW{79 za(<-o7x|y~A^($q7Wtp}A^#KKB9+en0CS%I8;pP0zn5?QI1tAl^WQeXJfHtf5c2cD zPx+VlMgCQu@^AYp%>R1-W^1#4UO%7zb)NID^PGR3=lrXD%)iP*Px)1O?2d2w&v^b) z$2a{qe9Zr9{4xL5&;C0e#z+5<|C#6fFUF_*&OGN|=Q;l>AM^i$r~F&3WB$kbTbt|8 z`PX^Qzs__1b)NID^3YTMR37{5E54a~IRB~RgQxtcy!ma+zsj5b8{W#7^XMP)Z{x9l zIsc3KQ~qb3^RM%qf0c*+w|xCr-~IQ?_P3OA{opD8Rx8f`SiiG9@}KMf|KW91dCtE+ zKIdQOk7KN#%Ah0?`@?hoRX*ll&hU*qTeYy6yl zmG|7=k9__c^Lw`W{1@}Djvw={@pJxVKIA`sfB0$reEpC85x&3t#K-)re9XVf$NX#j zoPUj<^RMx9{$)PoU*qTeYy6ylji2+c^6)2LKdJuxk@Gk{l)nG(^N91$`8oeGAMzi+ zKm3&6n17Xz`B(Xvf0d8<*Z4XA8b9Y>~R6@Bi=S|HxDR?RcVH|8V|wp7XEsoPV9?{Hr|l$GHDgKIUKLWBy<8 zlz)|v`B!=9zZyU0UmYLyqw~McbN**u%m2(j=J&VEf3`jQwfir;J-&azYd!zxI_&wF ze|v7foln01zvkQL1Euf(?|2*^O5gwA@i;z|zW=}DaeV0CfACs_`t|&;c`)G5`zKcX zo&Po8`V$^q>G-W5n*IKRqFw*4$477b+3|P&_q=I#JZkbdzG-&6EkB<>`k~qLp8xIq zug}j{`w!dx@i6`m)9lCh^Z#yqyq@rwQ_ufvp7L*b9rHit*W082+iQb=bl%VZUdK58 zo&WXte*WL_cmCHr@}15f{nz)OaIJ&-jO$1JQ@-`XfwuowxX7H zKKdy?Hb>t7O_9z2k@x(s){pu;@}}9(|9Ifh-}Ap3AD#XDzxB_R|26NNKgRmu_3Qor z>>q5iU;n@3Q5(v?&5`$CK0f%6|M>mkF@I-!^na@f`B&v*{#8EaKk{S#SM!hgkNlYb znMeH&K7KIY`eCxuzcWAQpLx#z%r|qV^@sVd{4e>CA08iU`$^{i$lv*&$47l0dDHC1 zw`^ziZ~f5h`I!G{{X_oe`CGOh#vk&(;$!~f_+x%&9<>Sim-&$Y>HEXi^)rmn+Ijv} z9%~~1s(j49$|K+D_~^gR|MU7=z7xLnqj0DHW`52;&!6)@^Vsym{Lv51ZhZ8G{P6g# zAOGxl%XVHrunBM3e&S8D8{d|n^XP|W&&T{v>mTyJs(;LXWj^FT zet-Bt0gvvVvz_N(sXW&71>f?W@U0&XJpDJ$N3+azvq9&$NWbg{n!0-D?a8w@?-v2 ze9XVbqc$P`GEez8zmD%8>^auo{Oj#3|2oh4*Llvr&SRep`B8b(f5XT8$MMJfx3RD< zxc;AXe8>;{Ci@Sa$@-18AItx0e9QI|@A+TxcHH6je&&C( ze#*aTM*jo8&i`wk^FQ-<{?|O`U*%C7%Kru&|L`dgp-<6aQTdpEm2aLH{HyY&AM^Wyr~Iir=Ksi>X6K)n|JC@Of9tbf_8(qK>(`L&_}Cuh z-?kt8d*$Ey>^F@6<6-+XVAd{w02qf0d{F+rHxYBl~#G>u2pS|Nh_qIP0ME zoPV9?{OdgDU*%)|RUUfEugYV0e9KdQ)bUL}=1=8g{#X2%f9q%e9S`H9f5`vLbN(0O zkLUlEg)lyy|7V`_KabD(SNWL#7d++PY8~@G*5BH^em?)}Jm+8MIsZD(`B!=9DSs-D z{q+^!%spKHs^f#F{HVP7ZOp&QoBkW#%9r!#AM$VGv41)Li}_RjXP(dhGtc>-dCtGe zL;u^u`hQ^k{{AER{{OX(kpHoMXPfKC`L|m0@#Bf-{OdgDU+0fwte?uG{$KGi|LXY7 z+(Z6f@RT2wkNH=5^ZPgTxADH?Isfzg$Ls%<|F7KmbwKq0kiQkr`Jcxhj~_E1^Z$aU z^Zy5*hj4z!^`GrL|0*BzuktbfDj)N&@pJw)e$KzfV}FI?kIaYsX#AXiji2+c@wR-< zzskq_t9;CV)%ZF8G9U7yAbN)4c&cDXb z`Iq^SAB~^$ukmyKHGa;&%E$bxe9XVfPv`&e-yax{A7^_!|IYc>#s?qrAHRQ`k3Z*M zmnE%M5zx4fo zpNGs-{_S|e*Z*4nb)NID^PGR3=lrWY^v8Jpqw+ETDj)Ozf~Wkee9XVfL;uzIG5_lL zs2~0PU*|n{=cCSZ{%2mxf8_1C{o3E}ydAC|dj8LOK=bnZ|7*ToAK*PgAAj-R5Agi& zc=VUP|G(pLd?-})0CT`AxC zq1la({!hOCrpV_1$YTv#9`$+TO|zf>@xY@WCED|x|Ji?c{#W}C+y0T)@6P|4zkJs} z2b}WvFW~-VH-FTI@;}cX+t2xs|LOa~e_)M&oa3Ka%=54EG5;zb^B?&!|Eu{U-<1Ez zqyNhP%(r|eeCvk;clB%ePWaZJ@Xg!_-}2n^k4a(_a8d@^}pwETK{$a$97s4*#9yAkstHF;(c6yjQp72nV<77^CAE7`@>^? z&Ni>#KmYgnt31|3{#E&yf0d8ns8k`MXe z@v;5(v*Rt>5Bu+P=YJl5&i_2VX?Ek!`H%d83Htee9v__{|B)Zh|0_P`Kk{S#SG?!O zA0t2Jf96q}aQ>J1kpJTdpZ}qNmGA%i{8c{YU*%B~^1sT*{A+y6cQStKhspZ+x7Bhy ze$M&l@j3tJv1sJ6=_6l1`k~p4kG_y!9>4YDpB+Evf9CJ}&-1rzKg_?~v$h-GmY?(J zhi1>m{7>^A&;Quiad7=({v$u;e_p>`o9FW%^FQ-*{^R(MJmuf~I_7`$ueW*qeE!#Y z&cDuc{&gNT9rCO4rvHYI`H$m|`EO&v&0K$&JDGnoKmIZQZ+Oa293N==+3_*|E8g?J z8XvDcj&GXX_%Z+U_y^{H=6^LlI_dmB^Y{6G&2#=|{?7lJ=lsw7o!=FY*XaEJf~WkO z-^Top{_{5bkMpndoPV9?{OdgDU*+3A8SpbUQ=Q;l>AM>yBZJ!SLQ+d;m`F+7t{!||G zf8l=CBvzsUc@5BZ<`v&jF%5BZ3*$MMJfFL*xxn}G9k zpZ^<-e?or3`~S#O{@W%-ev$t${v%KMw|&L)NA~erKYq9NIDX8(&U5~Cp7XEsoPU*% z`B!=9DZeU@UGpvf8P8wp_@@7ckNIDXKjz>1*?-5w_~;+<{Vt%h3P9`%mR#{#8EaU*qTeYy6ylji2)`^C3SPKj&ZL z=lpB@oPU*%`B(Xvf0duk{~bO9AIE>>L;khz56}5m`Ivu|kNH>mn179* z^RMx9{xyEizs!gHYy6ylji2+c@pJxFKIUKLWBye>=3nFI{L4J$-?qo^|HtFU*&dHS zG5%^$C|{O|bIj|uGR=lS39tv}(>m5$%~q1la({+7Sp_^luR z?0CYxwUUVBC~%{oVho@ms!=@mqhwqbnW1^+RL(e>FZ{r2Ne5Z;Fr(j z>xb+^vKt@udE`yA<6FLy`nCR^|JD34wRZl;7@Pf%{_FGqdH-YkKl1h8`CpIE`8Q3- z-@o9s$M65|=5Mdt@2-C63;B=VA0G2}w)6a}e9XVf$NWcr%>QcsG5?WA|CRrlNBu(n zm~Z`;|7X7CoBYds>rZ%erQ^4LXwLmVkB|P4KOVpJhs8(X2;v| z^YPIS&7P0>pXNX0e^tMj|HzN|U-2>jk-yLXSjQjsJLV6yX~!*pwEpq-vkL|ag9Y5!P=I{K^^C|G9p1{(1hK|Cw**PUru@{=3fqXvgobqc`UvNaz2^-}#^CkNQ0FrrFgG z>v`bO56zyB`RDor9`ZlWAKU(s*Kf@KijVn^p7THRcm7vA zUZea+-umr#S3mSo{>^V={YL+JoBhY1|LHvEU*|dhI?wr6d8_y6f0Z}=H+(bqkl#3d z>&HK~|Jzt-^ZvsNIS;{}$2K2%)9l7a{T_MK?D&}fdHn}QKl8s?KjnYs@BFWM&i~Bc z`Cs##|Czt@zv59F%75go-+p)XLm%beiZ$lH6%Vf&?``%E=U?YJ|2oh4*Llvr%Atd z{&k-7uk)OLo#*_kJnBdJQ+epW;;}ov7 zte^5f^PK;g=lst+=YQro|B**+DF2bSe*4|k4}Fw>JfHG!uQ_jRu0Q8r=Q;m6&-vGR z&cDh-e~i};Dv$m372nJ~od4AE!Bc)z-u(8>`fa>#cq?DdqkqW1jmQ4w{4dr|`JZ{t z|IBm#XP)yv^PK<4<2mI&^44#^yZoY$@^7``^Z!`Cv(5G6{OdgDU*|dhI)5Cae^egz z`-+eGSI2MW9`gT!r~IgV%)iQ`eqW7m<9)OLP(S+oZ=OH;p*iz|u`nL{pYuQSWByk> z=YQtM{Lj2)J6pf?+wX4v=nMIe-ya^=f3|u3G5;zb^RMzT|0*Bzukol~$iK$V`PcYn zNXoy=hx};#oPUi+{k|IC^1}Yt#z*}^{#8EaKk{S#m-%Vm|F?|VI&40C{vGo_^UnEW zZE#v3$gU7em?YE!*f1qAJ#{8l$ zmn17Xz`PX>VFXT_-=lp9t{QK4T7JtsaHvXJ{jYs{y8h_5eHa=D# z@~`qS|0*Bzukn`cZ2wum{hs+huO+hln|8eZ7pa1^(A9(G5{_p&^6>QtD4X(#gV08Xv3oW5Y}S zIySuIuVce29`*aJ9~<8C7iZhCbG??|>$AbOoyfOq2W+!noBX>y=W7ejzs__1b)NID z@-hD^AM>yB*kP3a7d+)pT2H z?=0pCc?-q;sXI{^L<6N-v+Zs`{myBG5;zb^RMx9{$)PofBJ5*n1AN={6}8Rf8^EtM;^zA zK2f0+;Y*Z4XA8b9Y>Atp27S_g~~&f8T%J9`_%*zU3)@>iE!0yy?gJqdpRE`jLzd!}KE`^KY8*{A17Yd+|^CH~oUo)=&A@dCtGi zbN*F6=KlpB^Zyy^hwY2+|KoRy)zAMUFXx};k9w$|{{{XyV5#n(vmN|3nOC<6EAy^)~?jIB)uq zM@=N&^doP}SH`#bFwf_I>mTcH&+W(OZ*AtM{EPgQe~Cvu==^WqSh{IK8d z-xW{!iQ|K9KkolHzC9oFx8m)!9gq4*yym zWb1GJows)6(UtP89~#g9f~Wjg|G59bw;#`MS#D^MB;k{Lj3W|C!hFKl29+cJ%z5?J>Wo&oS=* z$hUrY*!=75k#G5?>wm6)>+ig`M;=}2_^ltBo}a^>2cGg1=MR1R@%-77k+*DT>$h&x zIB)HdM@=4i(>QPKk+=EgT|IFm~Z`Xpz+=w{ns*0`DecMci!70kFIq5)(=h3 z&tcC4AM(TFL*ITn-`XQ@dCt~v-KKHg+9QveJo2V--r6H?%g@J0zm)%J{q6hoef-uA zJipc+dCT(?ZyM*VJ@Rw@WN17xT}&p8v?J`H#Gs z|H!NPXCC!4(>4Ejd))sm({%o4zV&zB+ar&zgY(0D>xZW2=dkC25BZyTAa{PPJ@S_4 zhw;Vp|2#hGCgeZz2PUZGKk{n+Bd_K^@;E-+|8LON9_x?Vg#61q<=?jV&HMkztNEXK zE&nsG<$vb2{6`+o&4A_nN8U4U`Std=|C_mo<45FMzmWe0Z_~f>XYFx(%!%^9;!We{ zZ)=Y{^pCu0oVWJKTeipJ&pbZ*h5XOFmj9X8@;~!h{v&VC?bqt(?XiA%t>wSv6h5-Y zG5^o`J^%jqo=3j>xc;b(k9>c{Bi~=}sNYw7%k&rHH*Gya_a`2E4Bzu(3Dt9;CVK2f0+;G|M>kuHUBCf^B;LN|Bl6Cd;cG`{VNaeO?b_y0Q2`PX^Qzsf^T@Bd%$lz%%PeRKZTdCvdLYx$pf zE&nsGyTk#GHAJpYkLSIW2kA^!`W&fjr-@a?CczwHVS&|B1K$vHo~U`PX^Qzs__1RX*nb1yA|6`hJsto#*_|yq5o& z*YZE}TK*%C=LbC2{BLdRAN_~@Mfr_<>+ig^Bag0>Z~a657d+)Jjt{>5czz>qejD?< z;!U&TP5;E3X2;v|zvDUotNA~S|Kq#yIsfYT(Es+$_~0r3R?lzpuk)P$nb-0^^IHCA z{(!-bN*T405-rFOOu5|p?4^7X{Vb23k`HAy~ zzWsRq?8(SmwzKtHw`rWW_Q<0qkGyG|xAw@}eDm?q56#J+ZRR=u^ZK87KL6`H=U?Sf z56b@wKIA`se^7q^AOGLR|89TVI_rOKi|ZfrAIDeoA9*$Zkv}uv{R1-`lpoapVE-}S z`r$z1y*;iUc}V%z-+6D3Ji1c8^+R*cA6m2nAM(TVhra!EzO_dlb9&@Wqq&(Gh!?(6YiwD%7&|8aaZ|B+YoA9*$Z%zNg|Ki&@c3HfE-GjF`NN4}Yx zjvvgoekuPGk4-4~pLsh*^!(Tw==gz}gyYA|o5p!-^ZJhm9{p1Or}4%7M_$c;%6K{+@WsKk7^0|83h%uivk6{r>|j@|^#9d@cVoujPN{wfsjO&&`14^MB-# zmy7o{`yc&7{v(f}jW3`77d-Ggzt$ed$DAmCE8aAoUu%y%^pCu0oVWJKx8(# zKk@t>c=VS(|J%+#<>&mz`RC)$`Iq^Se~q8>ukmyKHGa;&%E$bxe9XVf$NX#joPU|8 z{9}93|I+zi=daxSVdrt3=lsvSmj9X0^Jn_;`XlnKA0h4Uzi=$z_rEd!Dv!;5HNMT~ z%lS*Z9WTQBPl-o;h>!VyQ9ru=*Llvr&U5}%9(ua|f5B7!&5z%l|8<`8uk)P$nb-0^ z^IHBRZ~Ma{R?UCp?YZ;b9`l1f%KrRv&#J7HEJb(5) z@G-xUw@rHfT6^Rd`A_*m{!_k?|CF}{jPu9Sn17L<@-OmJ{w02qf0d{F+y40`|2oh4 z*LlwW%xn3dc`g5ukNLO$(SLYO`Hg(*2jlsVJi1c8^$+=9@Ra{JKKS<2j~{jnit~Tu zjoI;*=kfTp8h_-U^8dtJ|5$%KrTptW=U?YJ|0*Bz|AMFdTYbODzs__1b)NG-^IHCA zUdw;v@%(_tn*XhB{iFY|zbL(&2M9VSG;L< zyy>5K)9iR#{&zg*e>MMy@qc_bKIdN@ANt?E86Q05-|G2I{&k-7uk)P$nb-0^^9Kxe z9H;-z_LyJP?-=VJ`PSe4@9mLq`KJ39xc;rb^WGkLbfx3BerS4r4tpMW%1@j>^zFy< zXHQ1nvYoBpx=rJ}wMQN`dE`ywytPN(=9`a?erQhqY%|aKpV$Ay^Z8%rIsYn;dQkpf z@FD;4`$Nd5_WnP7|L=*9`B%q}`H#Gs|Hz-2@BV=q4$2Sef3W|UZ~btf@!lT&*D_7{ zXTJ4!-rFOOu5|p?4^7X{Vb22}^26gp-+nsZ+9Pjy&em_;rg7fdBafOq@}_a#+9Pkv z&&Nlce{#ruEV$0{H5ukoly$iK{o{7>H>`UCa**U4Y%UM^pLig5eyu%@Z+YhY z&Ae&)_|xYHmggtlG|pRl9N)5?^XQlIKh0mvf8=p}Q2PGg*8eGwdW8II`C-6%{wLn1f922GWB%s+ z&%BoZnYYZ>^B?&GGd?;<0JUzdF9nZ9IOc ze9Zq7Z~AckB#n>l6Cd;cG`=l&93M~V{IBzzf1T(2t332{{(r$!{_TA9&G}#FIsZD( z`PX^Q|IBOokG$;<^IU)b)!L)~Oh4u?@~yw~-X3{$ealn+)bXL0c+-#bM|~vT^dleh zug)LSq5SJS=U?YJ|0<7qQ2t-=lz-IYtNiOc=U?YJ|2oh4pLs3+kyrB{dE1|OtsOtS z&Hm^7N8X;>Z~y$FwF6K2Gi^Bj$BgH$DE#cW7_=jaF~ANWByGO#y{}d#XseL z!)NQK{OdgDU*|dhDj)Ozf{*$Cg!-qSf6edz-nuVg6@kh5Xa_wm zA9-}8eCvnC^S|IfmTyJ z;3{&k-7uk)OLm52VfZ|Vo0 z@^AJ0CjUCm`PX^Qzs@7ygMVfo{nGV6*AMjtf9K!YS^nerG5?Xr^N0DPADW(@)*i=4 zALTEO-}>>7=g*#xe9ZrfAMk&pRT=Z}0-{v(fmDgVst`Db3wKl7+P=C9;` z;(;sqpLs3+Gq2@8@&{(G2KTqSw{LABq{6}8RKl6J2nb-5rd^5k4|B1&Yl>E=Umj9X8@*nvFvsdyTc{Tr$ z$MK=`{U7(S#?See`H=tk{eh?a#r&&$%)iQe-TYDIk#9QxM_$c8^LqZ7*YnSOGryGo ziN_|C{Lj3W|C!hFANd2bSMncuHUE)U^B;L!AC$iTv-AHWPx-gw$v5x+b)NID^S6;QZ(QzyJRKmiPR> z(>wWc9iSCYW^c{&w)4I+hcyvm5%R>jqmNiQ~pdd?tf=? zJo+Wx^yB!bkHnjPmPOgm=5J%=Q;m6&-qt*)PwT>f~WkW9<=}Q^srys|K8^M z`{#e2BbDd;>*I6&b>8RgkJ|iOz6bxs@moJ$tmZ%Rwmm7?K3hNK-?ZcL&z|Qz=U?YJ|0<7qQ2t-= zG5;T4|8bxMy?$q#>p$gRZle$bYgVmT zel6b#-}*c6?U6^*KqaT`+Kika5{7>sI-v56b=R8zC=3nDckC1Jjp1v^YPIS&B>o_=41Y+`HT6Fe4bytfBu(z{^&2=|G)NM+kVbd{!!m>|39`XHALIUueCvk;&41n={f9iHeCzMLw?`gbDc|~`>G?VAdEhBOasJS^ zAJ3mX8F|dxbs#p+%c{&i`WlQvPRN%m2)4`H#Fk zw_jVox5xG4wU&Q89#%(t96$eSucK<6w*rRxo#+4e{F(pv{F(pv{Bf=O&HBf2-|#Kd zz3y*#?2fPIZ~N27^+#p@d;Z5dWc)7wRUW$FzvHXR|BugK=Q;m6&-vGR&cDk0y8Th*P4D~79wXoS zVVeE%_iLW=qmB=~#G8K159%iIrXP7LU$uT-OXfNM+4|Q!=U?YJ|0<7qQ2t-=lz;4= zukx?+oPV9?{OdgDU*$db{;2ZJQ^WZ`@~s~)R`VZudye0Xr~H_HJpLPNKfCcUzbF1M ziSwo(^JjS;^Na2{{(;vn-t;5imY3Aewr9UKzPFj@{F^4M|FGBgJm+8MIsYn;dQkpf z@G<|NasAEL*r@M6G(-LQ{BQjlKjmNKr~Hfjlz)kD^{38FvzsNuF*d2%Mll}ff zXEJ|d?Ptd?@*l@1zL5WvFXVsAw~64Nhy08Dlz)+*@-Oj={Hr|W-}Xr+f=O`>PPw4dCtGibN*Exdb<99!BhUNo>~4|4e`%kt%177^S{n>{&k-7uk)OL zl}Ejg(Z4Dm^B?(`f2(-#Z#q8YhcTWXYX_e47soff{p|Rd{}n&x-`eB&=GUx#HnwSe zd~1(Gbz&;RJA`+uMLn17Xz`B(WP~0 z^B;L!9~AEYZ9c&|Ov}fQoCg>3FY_V)eE(vb7iQ)4w;6K%WBye>=3nJw{#8EaU*mnh z`6J#B{mZ!jp6b`~P5x!R^{4fZ`DY&Jf!}2Rp)(oZSo_)Sf6Ma|ZyM*VJ^BardE`yw zytPNZEiaw_ff0|!pQU)p|5QIQ|B=u0YktY=hyMKj-H`t{{v%KMM}6u3Up%)0UiG&& z*PrvR^PGR3=lttD=U?TaKgRv1^2kHVxBj&LIS=%}Z?gZ;IpinK-&p(c{8@Y4|CZ+` z-Zaizd*m_RBX1h#tv&K>dFlKQjCeHuEJdFG#rmcE&%BoZnSabL*&rnBu9M50v^}heSJ@Pm&tBH~r`z)I{P2h-*FOJ$yMB!S!^ibUt^Viv|LypwN6Y^g zJmnv|NAw@(U*|dhI?wsndCtGew@eTI%lM{+VD#^}-^@Q5-?V`@z58y(w|@L%$Nvpa z`7{0KUp#L=J09D7;t!KJZ~AflmS<)DrXP7*et|!1eEdK>egBE_Z~bBYjoI^@f1T(2 zt32vK`G3L3{C~#vyJvj=Vf&%}Q~pJM%D>1@`4{;q{}SIa&H3N*O&jXh>RaS}U$FnD z{L}d62mD_7vv%NPej;zkmbW~I{H46<$MG%C3UB(6Z_7*SXVbHvp5NAH{`~u&?*|i% z{%-*O+4EEWMSjY^#G@WD|0+-UxBWA&ztyF$-`dvC_2c~OJm+8MIsZD(`B(Xt>A`;) zZ(8dg>xbvZ=>Lp2ZRD}JlyCj`$B*9&p7IyR2iksiyy>&~TeoR;yyaQpO+VJpmS5$4 zF3fZOSL^rruX)bD&U5}%9`&I7zu+nVR^KfDbNxC0I?wsndCtGibN*Ex`eXE8#+%mq zNB?1em3h-f9-d73){lQYe+!=SWBud)H_zM8jyJz$>u+qr+jvjBX?Eks{IBNkyv@bh zWBu_GUH|Jm=U?YJ|0)kX<^Kgw`L}wG`@i{f*nh2t_$S`~=RVeX&cDuc{&k-7ukxrj zmn17W&4)%}6qyA;SX+!;5eTMfBdi`MNgva&{{9gI7cJP1553k?!_Osjn zmgk4@rR#rejr?Pqx6J$a*5>&i596aBC8+0r8o%`SKi`iSEYAOdkNMYl)Fb3y=0pDZ z{-Njm#{8>%%)iRV{HuJ-zs9#rQ~vgR)50L5f896!2(QxpU(fZA`DebFAOCoM(4_J0 zIp=rcn`FmheviCqoVWJ4e#`UI_@;5*+9Tf%Z%O^n!=IA>Y5foRozDNX|7?HSug%}v zJpY*gIDXEf9wGlSAM(%l4?X)Y=3nJw{#8EaU*%)|H6Hap*uQ(eX@mb;eaXLj-uDIj zC+44dGaY`f{8&5iA%7EZ$du)3Q`Z@nP&-vGR z&cDuc{#71&%74Z;ZK$8`H-F4{-xpke&VS@F+=1U@|Dkj6?}9gc%VSQDylLD&)*k1N z@g8~8IB)HdZ_7*Pe_+I;@nc{w>qJ?v_K_4j;c;eh>G* z2}a)Z&iUhxZ(8UB-|{zZN8vsHReqQMDvuh5^&el&ALF*q|EuGhj_Y?`|G($Y>;Jbr z>e2H51t0TIpZ~Y*V$J41Z}a-6{EPgQf03W^FY;6VC4Q0rEnm$4mT$)j>;$g=l>aTi z-hX(Nk3SN>$p4D(=imAM1@88zR&-2{We!tRDrw^KWggALn1^IsZD(`Pcd582zL2sCSufS`=`sU(A0t ze$xit_QyB#2T%FQ#&2Um5a$2LkNLOu$eUlE=5Ly6{^$80ZQ3V)w#V_&N%_}#&cDuc z{#72eq5Qw#L;k1x2U^j*{#Hz`U(CPC$NZ~&%)iRV{A+y6^l<%be%c*Bn-+qxesli! zd@cWb-u9jSj^pEb$e+ero;klWZyNWHwa4)-+fTe{oVWJKwOk1 z(&ztekaHe!|3C0C|JwMdN65d-hy2I;2Tsp;{cW9GznFiOkNH>mn17Xz`PX>V|6u>_ z`KCny$NIHQlYjSo(*}O5s zz5e!`>(A$Zo#*`PJm+8MIsYmTJ>@^+n-&Ee>xVp)`KAqg+dqSUvhkaC+JAWU3*Pel z#GA(bW9@PMnC~NR8t1J&@>afleDn+XU(`=J|IfUZ|CxWxFP;A*Z_n-5>gVmTet6CE zf7LO(e?|T7{b$7-c^sSk?|(1(EB`O~EB`O~EB~)})bHs2d*quI1svI!>h&dSG?u;*`Azcg+c|>&h(`^nezyF=_{sU}djId+S&g6Y$ah{p zn}5Pz=l@sZqaL3Bw|vZh{QMu&zxH2ikN#ccU*xC!i~N*-k)QG}@r(R#`C|UJd@=u9 z9y{-_U*3Osh5eiH5KqT1i7(_o9lwzOl#lbrbN~GRT1Pnk7~;pT*5>+6`4`8Z@-Oj= z{Hr|W-}XU%t0_ zWaEQx{bBx(ylu0e|0mw^{Ivd&H~l!iEnndm>!OtrK7d++P z>YL?%u0LP@>pbUQ=Q;m6&-qt*=#SBV8E;zaAN`B{Rpw0_c|@zsn|8rdeym^F|K_)+ z^_#}?AIG=nPrPY%yeH1&We=+~7`H%Ux_Bg)z z^=W+5RP#TNf3#(v{MjDIM<<>Cb)L`vI?wr6dDMpT|AG(spY9((iSFaKwYh$L{zrGb z|G|)J|5=;)n17Xz`B(Xve~oXMru^*rrVZR0{z-{%qi|G>xmYvZFHA^$QT@*nRX zK>6_F^|v=3nJw{xu%;KiGeJzG*}KTBa#~d%kG{kEiAFoAxpP`|-iI zpKYmfY#|2Y2xBP#iiJgyIF_y6>DL>|`%wflcw@u)}0 zzcxPjkpFo90#=V7ufMgq{xSb5AM>yBG5;zb^RMx!-@*Rf^GzG-*D_7{-}6lycswnS z-?Y&4{==)q@u6%#BX4pbUQ<)J@D|7CpBhWa57WxiQPKk+=fC1xer&s52W9_{+#4P>xyG&VrXTC)`5)(@%pa?6pZ~q*&(Htf z^XL2jw>;|6uK&N_DgRdAtbTL-&-1^Juk)OLo#*`PJm+8Kp{M+2ylJg}^e^gG=1m*< znEz~i(=K?*-ve*wkU0OZc-x-m-X2%u+iOqf|IB|m&-s5b{*UkG&-qu!ho18Pf~WkO z9kcvfok#zE?*IR9+mAZW`PX^Qzs__1RUY*|#{Hl1rj7NpOjmi+Mn2|08{f1Gp7Qs= ze7ylJZWpXYyI)aUDeUx&`~`CsQb|0<8#Q2t-=A^+3g586KS`p5nE znewmlG5;zb^RMzT{~B+ZX8-Pa)5iMYd6_qDwi3te}5YH---|UOZm2~@%V4^ zsjlCoasHO=C*CyfKWmTUTlsPx{Zjs?^_SlNdmS)Xtp5Wa^RMx!N65d-hy2ICADsKl z>mT>uXUf0I$NZ~&%)iRV{A)bwf3W}dylG?o@Vv~MHuBBfl>hzsrd{wMKPmr-ygje3 z-=vYZJU{WKasOF6&wrf%fl;ONfB64*)c*eGb--AGuYLaamPb88{mn178&{X%~CylJEV@x08NHuBBfl>hzsrd{wMe0@YCZk^&$jLL zw>H;r`utDiIsf|joPV9?{Hr|ll;4auZLA-jmwD4hzL|T-e>T2p7d++ff&WC_o{#xg zdFUT`)42bv&Hg(cc=QYTU(8?1|IBOopZUl9()mB~_S}B0e%>DIhu2#E@!0BUkKy>& zK9k+o|IGh;{>=Y-{>=Y-{>=Yd9^7I6ukfZd-B^F*r_7r+^3B}E@lCtnul?@pQ1-v) z-?saPAGtTYmCreUROXMGw7>t2^U(P7{QsUm-~Yem!L|HK2|HvO$ppyT{tND+- zn*YexKL7JNex|=)Jo1!(Y-jrX-nLym|LZ*GU*|dhI?wr6dFUzs8E;zrruonKO8zt6 zf)K~YYm~nS{xSb5Z}S=RuktbfGk;)#_59Dgmj9X8@;~#B`K9xJPq1 z^fe!2ro&WE7 zsC>-7#?See`FQ@1pI?aipFV$h;A8$(KIUKLWBxUM&cDXb`PcY4|1ux)ukmyKHGa;& z#^1R+d>x{HWB%j#YW^c%yZ#^65$FE{eLwp7x3$Of@0@>aeDERv@$(1N6_=>>^S{c+ z{HuJ-zskq_Yy6ylji2+c@pJxV-gDC*HGa;&#?SfJ_#rp1=8yXI|NbX@-matK_-g(m zujW7UwfFyb9b}&JZ^skm{X@L|*Llvr&U5~Cp7XEr&>#N3%N|ue=3nJw{$KFj_ox3= zKIUKLq5o?9+xPG0kNQ#m=lN^-pLs3+Gq2@8^7h<*pFjWeI%w}7?)<;yJ^ycc&;MKA z^Z$-VZF~OT@pt~;@pt}T^F4p>_&fjac+~H!@$dY<8~@J#Ti!qad&~R#|98A)+dud4 zM?QaJyEw+3*Y9ULynpEDe;+@-f5`bc|0*BzuktbfDj)N&@pJw)e$Kzf&-s`6kUx!| z^RMx9{xyEizskGs{ZZv({v%&K|L?}n`8ogE_~1kSAM^i$r~IpY%)iP*|JC?0|LXX5 zZT!vt!}vdPUd#VH|Hu6PmW^-Qv)||U|Gp0G`r*$1Ti)~kmiPR>rl z{O{w(>yLc=IsYmj^RMzT|0*BzukmyKHGa;&#?See`H(-2pYyNrbN)4c&cDk0`Two| zo%2U^e82wR@zwMHYo79t{SmJJvEAhO6Z5b0oPV9?{OdgDU*(~v^S{c+{HuJ-{|lb- zuktbfDi8fvx1Gb<4_XGR+|D1mnEw|%)EA#(9 zvFQKu`M*E^-{(Jl{_E$z;rBm%{&Rc$@1OsHzR&-K;|L!9YVE)N`5*p!&Fg=|cZvVw z&;R&Kf4sGye+t@v2-@ET?ceL#KmV<+{mW6;eiZFh;C;E1^<%v z!N07{{ma_lKfgDx<8ko1`?sLI{9Djo{w-)P|5mi_--7n?Z$W$cx1hcJThY3ID_Zw& zMeF`8XfOX(wC>-(3;reTgMV3@`6oBEfvaP`N$ zZjZOu-MyVH(!_;ml4wB5fYZTD|Q>;5fi zyMO<3)cwoa+`mDa`Zs7({|0U9U)JXSWi4FYyl#(!ACB|=aY@_#ThY3IciNSIciNSI zcUoFo_istt{aey@|5mi_-;&m^9|Zq?NSpgNXjA_NZR+2kP5sN-+`p{N{mWV$m5+7} zgU7+^e*M5T!$+61*8Mwew`*7a-Dy|;owTd@`t<|PcfB^heyC{u`k|n8|5oPfpZ|V7 z_2VyVAN)(({p9{-ZSG&z=Kdw^gMUf;;9t@{_?NZrUp(Gkzx=z=F8#aFF8#aFj&tzq zhp>;A^ZmGgE8BJd7POatD_XyPAZ`Bli@%UI_ixaq{tepHzd@V&m$kQlM?b)+?QaLH zz5P3C{rZ=+w|`0N*AHB?%MYX0{TsIX`OA6y#pCUDzy956SN`2;$L+d*OIp8v2y0u- z_v6ldYXAIeyDs^R+Uxxr?PDBuS6YAnR?&9zodQeFKHkA%i7$(L7VzF zXw%~_YjgjyHuo=UfBpR0ypG4g>+auz_VRB<>;C;$!M~(^@Gom~|FSmsFKcuElJ>#B zq-IQ!9sY#_@!3($zq8i;YoEE@+r=lni|uZ-zYAL2zf+w9oLbhxsbwvkTG!(9 zhw6Oo{aaOQ*S}S*eg06^;`+C&#r1Dli|dD~){ehrZTD~GUQ65N`8#?YuWauBEo-}f zOLOS{t!Ul96|MWXqILh4wB3^xt^2p4b^lhh?%$HO`?sX+{w-;{e=Az|Z%OO^{YSx* z?%#^GAAdir-CjR5uUEA0--7n?Z$W$cx1hcJThY3I3);)S1?}bEg7)%nMeF{pXx+aR zt^2p2z5H9zx_^Hc{9Dnwe_5ORm$lpL-{$p#_VRB*d-=DZz5H9zx_=AW%fAKf<==w# z@^3}!{;g=;zZI?fx1hcJThY3I|1S8qqILhWHuo=UbN{k-`~IzYy`a7PThLzqt!Ul9 z1?}bEg7)%nL3{bPqILgPwC>-E*8N-1UjD6UyMOs!OYHU4HEq9sC~3QYgEsYV(5C(k z+SI?S#ZkH4PhgMt`%U+6MeF`8X}fffME{ma_izpRC;o7e5}_PYDGr0xE#Xx+a% z?aIG9?aIG9Ev>Elx1{a>j$o{*O|2L-)Xz&J~>wY-Dy|;owTd@`t<|P zcfGdm-_mxwe=Az|Z%OO^<@?&!p2Yde&Mo2I(6!e6%iGQU%i7$(tj+yP+6VuV_QAiT zeef@9-M@Iey?*(3qh0!Uqh0!UqaEkq*AHPIFXwCb|1SKn*1CTSbGZCl(faiRYuBFa z{tfqKuC?92L7VzFXjA_NZR%gv-u@l^0H?Nn!P?uuqxQOf;F?{>DAM}%18c8+JZjy) zJO`W+&*SfO|F3yxr(OAXryb|u{w-;{e@oi#--_1#They_hI=j7p6vcDX}f=eHuZ1N zrv44u)W58~{X6bs_b+R2|BhPsFKh4PFKN4fgZA?8sCEBFt^0S>`sWW(yZigGdA+3d z_ix4ff6LqL{;kZx{ae!d^}|m;qo&2{--@>TH{8RS`Zs7({|0U9U)J9K9nYKYU)J9K z9kuRX*53YIUjK5;7eJ?qAmC{$*|MU(!DKm$VQ5CGCTMS)2PeX#My*p6C7eTfP6cd6Kug_N2dm zW9|0-oyB(7TK8{ZyO)0}TKDg-f`2Po_b+R6|FSmsFKcuElJ>#Bq6oBB6sQ~$Cy zx&IelE8qV+Y2Ckz`+sL`_ixbtj?b>DTD$+OsD)F@S~#_=g;VQV`~0Ce-}e5ksBPE3 zMeWD#|E+56`nRh6RnXe?Z*jZr`k|_|<1e(8do9~By{a|cto7qBj_>#9_Mh(GFo(6a z`?sQX|5mi_--_1#They_R;5fi-M|0%8RxX? z^E3Aj9tWTOv(LApb^lhh?%#^m{aesp{w-)P{}!~De=Az|Z$W$cx1hcJThLzqt!Ul9 z6|MWXqILfkw3mM?TKDhof`2Po_ish({$=g{`q#Ey&|dy6XfOX3w3mM?TK8{3d-=DZ zz5H9yUjD6U-M5SSci81 zL$Y1ccK?>P+x=V7x_?XB?q9ywGWTyu+x=V8cK-%#>ffME{ma_izpRC;o7e5}_PYDG zr0xE#Xx+a%?aIG9?aIG9Ev>B|e@oi#-;%cbx1x3bmb8BTaQs|<|5nj<|Au=w*T?nl z-=IzX8?>o^S)2QpwYh&;3s;A># zeO$l%yU{NFyU{NFyU~tw@au>2{lB)KE8BJd7POatD_XyPVD0)i`Onkq;l9kZw)?lF z?fwng)W1QS`j@r0e@8#SsV&E>z5P3Cuj>b{*>x--tzSQ|_VVwjb^r1llKX#AweH`j^}ipFTL1hZYPWws#{MX2`}IRf+x=V8 zcK=qi?%$HuuOEK;88t2b{i34n{tfqVu5;nn54_#fzhS$ne_4C`cRX*pe_4C`chtIn zS$q3;y8qW|!E3wxJ8swg8@2A=@i^)JjoQq=LA$^IVV>_=+x=VGZuf6R>;5fi-M_yG z{;g=;zZI?fm$kWnS)2Qpv=9Cz?Sp?w``};J=Kc-Z)W1QS`j@q9Pxj+)xUYDB|Bmfv z-tJoK{w-)P|5mi_-(Lm)R{V+SI>MoB20tGyeu{>ffME{TsBYe}gvlFKd(gf8n3< z{lAkox&L?8_G9(p{@+>K{TsA)|5;HBr-E*8N-3{<7R}%lf*1OWW=Kt!Ul9C9V7SA3x)qR`~qP zd{)uAe=Azs=Dc0689aagjq2n6-E*8N-2x_?=_ zfB$CNE@&_R7POatD_Zw&L3{bPpuPNC&|dznXx+aRt^2p4b^jK$mwzkT?q9yw5=YtJ z+x=0?<8MjZ{aey@|CY4fzd@V&m$f)5xBI#5@jkb>e=Az|Z%NzzThY3IciQRiZ>ZZ& zJN~WN{kzkSb!hiLB--u4%UHNy~?rOf>za?$=Z%OOd4{^SWIk-^cHO@P z?d9K!)~_E}yFRA=v!7ck+V0;7f!ef%YD_ixZ%{vEaM z->CI{JZjy)QM>*7F=|}WcK?>N-M=Mm_ish($KR6HuYZ5~88yBBev$e&+?To5cK?>N z-M=NRUqA4CQ~&aIZ~u+r z`8R0y_dm?@U2D64OWW=Kt!Ul9C9V7S7s0<3t^2p4b^lhh?qAmC{w3{$e@Xk`U(!DK zm$kWngEsYV(5C)n?b?&SoagS+J-zN<-tPKdANOxTd-=Dbb^rb<__v~U|5mi_--_1# z%i7$(qstH#p*jaa+upwwx7+@HT-E+kpKrT=vbtTn{w-?T^+Q!_ z$6si}y_Wm?f2&$M{?6L{{lBx;uS@3pe`l>9e@W~94QpF!-M3 z`eEL#`@V{jkK44c@9hM<==w#@^3}!{w-)P{}!}<{0;kJxwgx{h3#Jct!RI( z?~C@|FRAXgzty+f{(fxR{hj>l-ofMj_s#a-U$1K2zm@H}e=AxWf1ZQyH=6I|U*7Ig zd-=DZz5H9zx_=AW%fAKf<==w#@^3}kuOEURmNmPMzm@I!@wcG8j=vSHAAbw?T3-IG zXx+aRt^2p4b^jK$mwyY|%fAKf<==|d{aesp{w-)P{}!~De=Az|Z$<0J--_1#ThLzq zt!TS{`CdyL;o5r~dz_EIC2jX_N!$Hf(sut=wC-Ql;?;KVmp$HVbN^Pf?%$HO`?sQX z|L(NY-``M+op$_Nv-@|a9qZuN4<&8)Z%NzzThY3IOWN*VzSlDMZ%NzzThey_mbBf! z6|MW1wYh&;3s*O<+vDwZ_istt{aewxe|OrIe|OrIe|K71TR;AmwB5fYZTD|Q>;5fi z{rchfd3^tt9)H7qnQLwLZ%NzzThjXVLt(z|U*2x+U)JXSWi4F2xR(`0J+Ie!zIb_a z|F5l&waCt?UHNyXUHNy?uIAhQThey_mb8BT5ZAVtgZsC#-Ru3^NAPb&>;A21-MzodQeFKgYuc)XA6e*E3td%N`SX1h!OZnWbZ{Q6-x2hzHKE8BJd z7POatD_XyPVD0*t`p@%N67Kh0YrB6-+V0j&0e{vEaMU!DVwzUT25kGI$T{o78v^6ySNZrA-=(suurw0`{%>abkf z-&Xr#Q-|)~aIfXslij~1ZTD|U+x=V8cK=qi?qAm4{vG$R`?{xpK&6($W`FGr|`!{Oc zzvFSz{TsEJe}i^^|HC}rwYK}WwB7FCiq`#G(z<_t5&T=xx_>KL_ish({w-)P|C08> zzodQeFKHkA%i7$(L7VzFXjA{PcJ0Z2{4L-AYx{$@yS~@Q{aesp{;g=;zrPCpt!Ul9 z6|MWXqILfkw3mNL``};FKKPfk5B_Cs?%$wI{TsBYe_5ORm$hq8`tg^w`}@yq-xai% ze=Az|FW+mqz9#6`zu~^jwbuPx*{=JyqILfkw3mNL``};FKKPfk5B_Cs?%$wI{TsBY ze_5ORm$kWnS)2Qpwfp-gZ9iAE-M@UVW&ZbzlD7M|r0xDKX}fA*}8?~8#gEsYV(5C(k+SI>6oBEfv`}==wKUeSnowfV>e;3+*UmM?hYyVBa zg|^>A6twW~Lfg*)tZlk^ZT|P;|9~1k!hiY#|G=q>?P3e%oLbjn+w*+a+qL&^ zRjs{$t7`4<$7Ss=f)>{gNW*D$1QHJH|hSI^H=N$dXQ?XI=%-;%a_vZ8hWR;5fi-M|0%8Hb_k^E3Au-A`-xpEXZbwC>-EwjY1Py{ztEo`d_Bx9k2T?d4z6 zUY;cF<==w#@^3}!{w-)P{}!~De+$~nzZI?fx1x3bR-6_VRB*d-=DZz5H9zx_>KL z_ish({w-)P|5mi_-@lW8-4A$N__v~U|5mi_--_1#ThLzqCGF*3THEE{g7)%nMeF`8 zXfOX3w3mMi+RMKct^2p4b^lhh?%#s;@^3}k{ad-$(yt#%+V0>MV9(O#OfBxI}w`TY6ZoA{(0PX&VY`diG{w-~{`?sQX z|CY4fzkILdT?d+PzkVobyMIgC?%$HO`?sP!_k(@5u-?bx+T6da#jEG%4|vZvoQIBc zAD6V|YEsn}7ulw}_%@=Q#7h3o4Zo4c0?zAiaPTFI>2icFm zC2jX_N$b}ST!&+I&$RouvR%9X*Y-2t@44}0KmL}q?%&VP*jN6!#%8#Bq;5fhFaK7we*Hk& z+h=3V{P@fFdv3Jdza_0-KUC)6*AE4)`?oR&_b+R2|56?N`hn(f`i+dSrjFb7>xcDrjTyY&{aey@|5mhq{4Hty`r)T>ZMT2v+|vEa z_hoLh-M=NRUq4jl;MWfYt^2n!2lp>)Z~syqx_?=F`#BqEJD_Zw&L3{bPpuPM{+6VuV_QAib&HWp+segku^)G94|FSmsFKcuE zvUYp_Wb=AO+x;8vwM_k6(suurwB5fYZTD|Q>;A21-M_5O{ma_izd@V&H)=EgMs4Qb zpiTW7w5flCHuZ1Nrv7E^{{G*#@BZUw)YRXb+WoHf-Zb3ziuZ4`7DwfOF0}CPLW_I8 z7Fzgsq3!n&g*m{#3vIt&gSF=0S&LWCbIWx9@2tfu3oV?w*zQJ)_ixqh+WWVv*51EW zwf6Vpvi282`>UYE^>1|!cKuM+;`nP?zSq({X^+F_CEdRzZTD}`cK?R$cK-%#_ixa4 z{|2q!Z$$HT|FYKo%iFaY%yqyk&A+U5|MGS>+V07U*8N-2x_>KL_istt{aey@|CY4f zzZI?fx1@Fd{^RH2`1^66(LJ)*i|0PBXx+aRt^1d??q8mR`;A21-M_4L|I&Of|C09dFKNxY_RIg>+sl)rz5Gkt-Dusv1?}bEg7)%n zL3{bPqILgPwC>-E*8N-1UjD6U-M@6N<^KDdZ68;(?%#^m{aewxe+$~nzofnV3(w!# zv~|sEyF5wS%fGbUjn@5J&|dy6XfOX3w3mM?TK8{7>;A21-MKL_b+SRljix`>+au@w)?lDb^q?P@$YXo=be`R&im7u&7GFk z*8N-3cK?>N-MHaNgyMIgC?%$HO`?sQX|E{&{N%!wsYd)U+They_ zRY5n@4FbDVVdb?}?uC<{KIPT$<&3~siXuE%TyD0UdzV6?kz4pb*zdP;9 zzmxW`eT=ioF=Vs*x1{aBz+)OxP(<=>5V>EDfZ>EERmQyI@K?%#^m z{aewxe+$~nzZI=tKalqJ?^v_z`k|uj{^ff^H{0$0EouGwp)d#c?|Qr8-rMfUwe~Lu z)nTc<{Y%>JU*4{H=JfBVb^k`~`S&-TgTH^Zv4B{T0Ms2j{BFi5B_B>44hp525su!piTYD+NF2w`xni> ztli$fQ`WkF3){W?ThaRQ_t%2Y+`kpA`?sQX|5mi_--7n??^3(*?^3(*FKHkA%i7$( zL7VzFXjA{PHuo=UbN{k-d;eMUdO>^nx1x3b(!G|pzvknEzklQVe>Yn9Z)Lmg--_1# zThLzqU1~S}U1~S}CGCTMS)2PeXjA_NZR%gv=Kf`E?qAmC{$=g<{>kR`injZg@3q`` zvLAm-+V0J^5*{Eg%Rok)3yJ8>OzZqW)@obccJa~@9=ibzq8hS zJ8!q;eX4`!n73=&oVSZtj(NK<>Pp-F%iFd0Z_Dj2=4-V40eBHmS zb^r2q-M_4L|FX8NYp$99Es5sf{^jlB)#gdwuKPD=kCoQ_ThY3ICvEc%&%xfmE%w`b zZQZ}6?RNiGwC>-M*8TgBpHWl){A_>!Z(CbM>;A21-M_4L|MI=J?qAlre@T1!m$a9E zNqhO1w3mNLd-<2Nc=hxHYx^;k?<>CiOWMo7al5D2NqhOXpuPMXwX6BMe=Az|Z$<0= zEod+QR&IWxUj8j;FaJjE>0jFJb^NVp-MFH(NqhO1w3mNLd-<2O?qAlre@T1!m$mL+(q8^8 zXfOXp?df0I?&aT#*8N-2x_=AW%fA(E_b=aT>HF9oXaAP8-M=Mm_istt{aewxe=Az| zFKgYup$>NKi(l5de}lIBcha_N0@k{JciQ;(x8)rAcIofDKW*l_n1lOwHwW@V_istt z{aewxe@oi#-^#s~xYBR?t)%V#Eor-dOWN+=iq`$R)&}o%Pp-A*;~~dOt@}4-M)~_FqpK(sR-oN>K5j+n2 zt^2ofUnbrGp6_ET+x6>*iq@|m3R?H?dcJG_uC?qlJMNvog_?E$uD6S=4E1&Y?zAia z?zAia?zH0^{PN-MKL_ish({w-)P|1Px~|1Px~ z|1P!cNgNbTuNSnJf1|b?tMTc^a1OYxe>d8te_4yE+2_^vGaRG(@wfWl|7|(0Y}fr; z&|dznX#M(uwb$`?tl4$_P|Y5n@4FbDVVdb{)ezqT*dTE6$T?X#_x zeFk%!*Ib49x_{#w&cDC$cHO@_?aIGFyS(?-kG~~tKmL}q-MN-M&M^q99ZlAjav8bcrJARMs4Qbpxxg8VE!#> zyMIeszkcAFE$86=t!&rs|84XAMeuJ$>;A21-M4zY=Ty zO04-SvF5MB!rz?D{mt3j-<-|;Rap2N*_pqQo%tKsslS1p`Wx7(zk!|l%j{(TZ@WkS zm-zdC`+APqzW*-S_uBnEvuzJm!ghbpY};3ou-)G?+uq@y+0EY*+r2%r&CsOY?(Lb~ z=7v+f_|Eg5-rm-vz3tSw-p${0y(zohzlrSIyWWOv{j1j7*AFV&*S{jWtshjj&%ccg zdo9h$us5{Nzbb3~hI-B4P_OwLSo1fq=5JulUuNMiv+$Q$_{%K(WfuN23x5OK$Ll<1 z?Ns-dS@;|3Ou<%!6zv}JX-XDv7dozEPHo#wrg}=XkY2)PYkKq~ZIc=jou7$$F zUxkIg%)(!81N>zc{u1l{66^jF>;4k!{u1l{66^jl3xAn~lf=5e0_*+?toy65@K<4N z{#EuiyT3xc?ytha-|yrv+-b+d^Ah;0u<%!5;jhBNUuNMiwb%V6*8L^c{Uz4@CD#2V z*8OD`{xS=HiFJPk*8LS&_g7)zufoD#g~j|Uu;5tef0>29#Jax%>;4L?`>U|_E%!fUx_t;CD!~^Soo{3@RwQm8^+-^)=|thf5$x;kD2)!So4?bg})VhdjHny zuGr(dX82pNbdAkli8X&E*8Eji_$#sIFYmR)b?e8ozY=TyO04-SvF5MB!rzzY=TyDlGh!SgapjU)q@Z{hN(% z&xvP$!@kU%HGd`6{FPX&AB6V8-@M-3-<)O7+Ng~CSfLGVaAX$#hBmzHS;cw(WUrgs z;B4maiG6L)K=>M)zY=TyN-Wk7vAszf;IC5ew*O%pZNN8e-#$~DlGgJSoc?9v3@An2`+v*!Ci{O&miOs4LAUugZ$lfo!~6h$ zBWv&9h{gR|#b*9i?6D1ae<88vuf$^g5UyL=x1aJcOIh$^PHwTFxf>e@iy(y)}RHdfUu**eeWwBa7>HWZ`dQ?fo&;>-TSe;=Gx% zHvdZXn!gfj{wgfyUx~%~_nrF&e<`<^zhPfyn_{+g6y-w9zY=TyN-Wk7LVMwFUT?8} zNb4=u4=G!$A99w)4F1OU!r$XO34bG-I{7~4oxs-nANqHW+ncjkKPasEtJDjBB^LgE zz2UFI+WZ^#k>;+$U!`97E3ocw$`<~nY~gRp7XIdJ?r&hH{swmHFSEImHvfj}R`1{G zu5-OP3x5UH{Z&}_`|XCm3JZS~7XB(M{1sUDH)RWdQ?~FoWeb0EHupEMQ-1?H^_SVX zzs%-NV*X{e-hb9z7g+aKVc{?Dwan*9tREB>{wgf|Rap2du z%n!U*xN{jh{AIS^zo~40{vfkoZ?J9sAlKX0zbf0;4>H^4-_C};mgW9mnKgeyz229fi))si~L68(8o3z-}czY=TyDlGh!Sor(vmo}#U{urLo{?s;tV|*1B{wgf|WfuN&8{jXq z@RwNkmst0gSofD$_m^1rmst0gSvbio{3X`?4Ximytotjl?ythaUxkIg3JZS)*8Npj z`1_swg*)wdm?z<{!opvLg}(|5f0>29)L!?OSofD$_m^1rmst0gSofD%_{%K(CD#27 ztoci<`zx^SufoD#g@wNg3x5UH{Z&}_`wRICAKEeTS7G6=!opvLg}(yp{u1l{Qs3NP zV%=Y2-CtteUuNMiv+$Q#_cyTSFR|{gz`DN*3x5?B{wgf|6`H5b?0&W`&+V&QLO zhriqg_*=2Zcg^s(V(A^L`75#Juf&?a3JZTF*8JtYmbh+V--@jtB-Z?uSo2q6&0mFu zzd6f3z~7t=<6!n1DVl#gw*8G)N^H*Wvuf$^g z@XF?ru$RjGJ?+aJ_s1`qcg$ajHGd@*>j$B|@HekF_cv$R9bZ2PZD^v7dtQNszp)Lr zexUJ%zZIMLTd}mq+vZ=1HGd`6{8d=^E3xqRjr_Iwq0K0V{e4(JRC`W|g}+L@@K<5s zufV#$DO>oPvW34X8@}`KH)m;l-QU2Pzr?z~1)KU?u-W_@uQA#{Ec{jKg}(yp{wgfi z4+Tq3+Waf+_cVVc7V8J44Ol-2Ed0&eko%jnxxYD^`&+Q&B>Yua_*=1=zZFZ@*ydk} zHGd`6{8d=^E3xKp+-r&N8;yhcE3xLU#G1bnYyK)M{LR_({@?CT&Yt)G*6exz?}Vj& zy6`t|L!0>ydxha|WUKebSsPN;{FUl8evfpvcaJN1{@ z+%ubhr9Hjym+Q^<`oLd-b$=BW{(igRufoD#g@wNg3x5UH{Y}}z-;^!ZKz+<&&s>jLZkDlGivy_RiUlQjX>4+;x^6&C&~Ec_K%_cvt= ze^a*bH)RWdb2j%^VBO!qPW@$e?k}@*f0>>8%WS!Sa&ui_&0pSY*`J%${z|O*E3xLU z#G1bf3x9Jq_cv#Ae{(kXw_sC$6&C(RcIIzjr~U?Z>Th7D{swmHFSGUj-#!-V{@*j( z_w{wxd4FoZe@oc5hbm#4zX{v+t0ZjmH(}e}fHT|uJ+tlX_TA+6{@W{K+u4Ne?=Q~v zV*dlz+uvU#tUX_6w$C{kJLVE*H|})Z`ZJ32IP~|&S-mOy^#18e>=3xAn~zs$m4X5lZh@RwQm8(4EP zuy{X2;{bmnYq^lv?fRatoB12sVE)E>ZLX$z`|p29u5n(k`770H{wgf|m00-u>z6jB z*ZY6Bz9}sHRap4TEc~T?uW#^|S@=t=`%A3*ORW1#touu>`%A3*%Pjn57XA|J{sz|k zCD#27tT{<6=HK{xdQ%quD)qu&g@wNY>;5V%{QXY;!ku`^zl+WfuMt>;4AT{3X`?4Ximytoy65@K<5sufoD# zfpvcs7XI>HOZd=^iN6X9e-#$~DlGgJSofD$_m}$S{u1l{66^jF>;5tef0>29#JazM zHGhe9e*zX}U~CD#1qy_UFc;l024E3xLU#G1bnYyK)M{LNXu#_%_1!#J3~%);Nm zn!kZHf0>29ksbar3x6X!oMaaBZ^e?6=C8z>zY=TyDlGh!SgapjU)q@Z{o8BI4`DBg z`5X6TrmXoZvF5MDV*Mbr7yjn;=Kkhv@WK4e*)V42ufoFL$lChhb)47XZ)9!#KrH;N z*tq|<*DbN;uf&?a3JZTF7XF6)h~{K_Zj!8j6&C&~Ec{hi_$#pPZ^{<_rflJF$`=0S zERC=G8(8y~Sob%u<}b1CZ^35sZ`}WjdWnUM1J(}$3xD%A)(o{J%(66gz-ha#G1cS zy;wg8^}=7J-v0a7$5_z%p^a;QkJG+w$^5JA%k=ke%I};tf2DfOUxkIgIh*^Nv$?-H zoBLa^G`{dxVd1aBV*Zs_^H*ZcUx_t;6&C(VEY=V2y1!vxX70MpzY=TyN-Wk7LVMwF zUT^Mi&gTB+Z0>Ktrv54{{8d=^8`yIHL$6z6&0mSd`hl-o+6MTm)QkBy?Dx!_{A0}3 z5(|I73f~L(tFZ7_VBO!8E&NT{!rzoF{LR_iUx9Uh1=js#Hg(6}A2VC--`QMOSokZj z?ytgP{{1F+27eV6{wgf|Rap2duWmis3+*A*7`Z$IhtFYn9j_jt*@p7|@W=C8z>zX}U~b2j%kXLEmZHutw+ zQ-2i}{wgf|4eZq4z)t-Q?9|`DPW@%J-v7Jx?|&Wr?R!m=eWY#uaAx~ny@YN4CT!am zm9WjSneG0b*>*PB)BA7joy3`KXA`#Xe>k()|G@in+asKeZKu!e z?av>Qdh!0aU6cJ;{5C(mxBC&gZkS6#8yc6?YyJlI>kanX4YsX+)i(6?gUq)1x3gid zr8yb)k($2}YyJk-{0;S*zkxM>18e>U*8F7_{xS=HnT5a1!e3_LFSGDBu;yf7&0l8W zZ)ELRJnhqkzmc_ENbGif&(|39FSF)vs5fWLUx_t;6&C(VEd2fTOB+*ve+7tIZZ;u2xw1tFZ7_Vc{>c@R!=_{u1l{ z66^jF>;4k!{u1l{G7Ep1g}=nQzkxM>iFJPiYyJ}J{xS=HnT5X!3x5?B{tB%7tFZ8w z_gcb-c1-+LSoo{3@K<5sufV#$#Ja!KH}{uV_m^1rmst0gS@_E={3X`?4XpV~tos{S z^Osonms$ABEc{hi_^Yt+S76;=g*AV9uO+T=Kc4-SSo2q6&0mQ%e-#$~DlGhE7XF5D zc-j30?SpRq+CE(xGxL}0ZTcoG{Eh7Jm)ih;BRl+M7XAj-{0*%6E3xLU#G1bf3x6fn z{N=rtxNiM;_E%!fUx_t;CD!~^*mh;M^^U^AUxmf|%Pjm2V`lya*8F7_{zi8A%Pjnj z?C_Ua_#0UBH?Zcf#G1bnYyK)M{FPX&A6{SDnEL(OtNj*(zJI43&;G`JnJH`jO04-S zu~7rJz^wTj>djg6 zS7Nb#;PFlCg}+L@egDJOzc=#N=7)Aj=HIwCbmYRo!e6Cc_^Yt+S76;=fpvcc*8Npj z_$#pPZ(z+|x)$zlV9j4*-Ct(m4zuuAVd1aB!e4=Pe-#$%2WHFPzthJe?#smZ(%w+> zS7Oayi8X%}7XB(M{8d=^E3sHV2;&QXm3rZCWZ^Ge3!8rf>;4jJ{z|O*E3sHV@HnJx zfWJz;n17YMmUw<9vF5MDn!gfj{wgf|Rap3|u<%!6&0mFuzX}U~6&CYvVBHtBU6f0aF)Z|1MWn!gGQe-#$~DlGh!Sgap}F@wKK zz3^9I;jhG+zY=TyN-Wk7!Z^TRrC!XxVNdVe->-t}@K<5sufoD#fpvcc*8LS&_g7)z zufV#$0_*+?toy65@R!+g|ISvo!opvHb$=BW^Y1so$v^B~PhsJ&!opvLg}(yp{tB%7 zE3odb!opvHb$o?GRY^S7G5V@3oxIzX}U~6&C&~Ec_K% z_g7%uUx9Uh6&C&qtotjl?ytbQzX}U~nVtK~?A%{w%l(sEn-$jl<-L}z^!xVwH(mcq ztobXk=C8z>zX}U~6&C&~Ec}&N^H*WvufoD#g@wNoYyJjy>Th7D{swmHFSC>Vzpc%@ zkF@UzJ?~H5oXo9(@QW%V|z z6L$0WRBt=Gz4HnCX}iB?wmow_w|Db5VaM}Hu6Oe{VaM|`W;cJ&tj$q@ZCuh`^Ea^H zZm@m*du~Ho@3wwW**^dFHvjRZjj6wXGbg*7;rWBgn!ll5^EcG{J#B;e8(8x<)NB4S z3xAn~zszp)@2PL_ms$AB^}^r4n!kZHf0>29k+tXRbS>a-WbOGcvG6yr$g#}!F*uDw zJM*=F-?+VR=5MGsXU$)Qg})LDe}5%^;Ti7@?e}lJZwd>474~~tFZ|^;z+bKx{u1l{ z66^jF>;4k!{u1l{66^jl3xAn~zr?z~fi-`Lb$BZ_m^1rmst0gSofD$_m^1rms$ABEc_+b z{SB=7ORW1FSo4=y_m^4t%Pjn57XC5|e-#$~3atC9u<-X6@)tg|W8$yE!e51jzX}U~ z1=jr~*8Qcvxxd7^zr?z~#Ja!C!e3_LFR|`#V9j4*-QU2Pzr?z~%)(!0;V-lBms$9$ zu<%!4-Cu<@e|fJZu5mw}{gqhrS7Oayi8X%}7XB(M{ACvYhH-d}^$xSm-*HdIV`lya z*8Jsq;csMzzs$nl$PRy*g};F{e*U*8B~u z`5RdCS7Oayg@wNoi}l0nOB+*v{_slo^!{P@Sqf|ZhCQ5lz2>jPV*Mbr0sboWwktF4 zO@(^luTpOtRJmUG8|$_8LmRt&E`h(1we;4jJ{sz|lCD#0vSgap-9MXE>uTn4O->}y* z|D8~_evnx6S7Oayi8X%}7XB(M{8d=^E3xLU!opvLg}(}m`8Tlc?`i*Ub2zZ>8L{TC z#G1bf3x6dR>)&@;KcH{zxUad|+n2GHQ&{s?*~7W*|Lxy9gZV45=C8uSUx|gkU&&vzw;dCI6&C&~tj)h+4|3iH z_$$=w{tB%7E3odb!opvHb$j#B} zzX}U~6&C&qtotjl?ytbQzX}U~1=jr)Soc?8-Cu=;zX}U~nVtK~Y`uT7w?kpgU*2o! z`;F4|gT$J@5^MfStof_3@K<5sufoD#i8X%}7XB(M{8d=^E3xLU#G1c>o%$QtslUul z_W!na$oqd!Y~NFN-pktm{h_|Uj_Yk_tNp)cw(S*3>h1oX+4f%k%x?ak*mgGCd;7}j zZB{4j=I^QAcJ_5{LwjJFwYQxg6(F5E4J=bgbIIxXN zSo1fqef@i`H)Xf=gUa^#x3}YuFKtZy{hK)%_IvjAgUbGzvgU87x6i-ldd=U!n!lmF z<}b7Gms$AB>^A?N+5mrGC z%;Fgnv*vGT1J;ww_Bzk?V*X{;{0;S{Ec}&N`1>pQ3(t7JC;U~|U#)Kn3xAn~zuX4+ z%PjmQ*8L^c{Uz4@CD#2V*8L^c{bd&ZG7Eo+b$j)U%1nb;rUr_v%29%)(!Rb$=Ds{N=rtxW@f>_E%!fUx_t;CD!~^Soo{3@RwQm z8^+-^)<(=Wf5$x;kD2)!So4?bg};#<{xS=HBRl+M7XAj-{0*%68(8xxxR(~{g}+L@ZBXTU;cu+h)(`EP>~jhHjjXL7h=sp_#rlC+ z^Ea?qKQL?l1{UiFX0d+Y@l9FytJJ&gKkMyyBY$mvXoqC}m00+z)C+$V7XAvX`zx^S zufV#$3JZS)*8L5v`AgTr{SB=7ORW3LEc|5_{xS=HnT5a1!bxV~ufV#$3XAmvv-zIh zKgL`V_GRX*`75#Juf$^gAhZ|$D)qu&g@wNoi}i!hUihoj3x6XEe`%lYdwSj6Ut-PQ zP_O$-toa*Q_m^0#A9x&67XB*rV*U+#E%6+j{(aN-w0+Bk5^MfStobXk=C8uSUxkIg z3JZTF*8Eji_^Yt+S79;#2G;$hJ-y~{VBKG0&ELSflf;_83JZTF7VF=4T0fv~?YOVG z;BVNMnX~4v#G1bni}i!hUihoj3x5?B{z@#?4?=t4uTn4kRap2dvF2}J;V=7O{stEQ zGHd=SEc}&N`1_UoMSI&Z@mFEtufoD#g@wNY>;4L?`zx^SufoD#fpvcc*8LS&_g7)z zufoD#X5lZp1Ahh9{Z&}_`;GiX8`?4PS7G6=!opvLg}(yp{tB%7E3odb!opvHb$$Ur#z;1J7bO&=^U|XF@z2+~o+xp?$ zhMev5Z?F50FKtZy{hK-2-3;@u%9_8SUh_B9YyJk-{0*%68(8y~S@_E={AG5Ve@}gb zzs$m4t{46W*8B~u`O7T)jjX-Dplh+szo+(2_Wzz)JU60xx8IL@W^q5ytoa+-i`>m@ zuk&0l=3iprZ>TqC;qR~HFFfNtoPSsw6c+v}Ec|5_{&E}OFSGEMSofD$_m^1rmst0g zSofD$_m^4t%PjmQ*8L5v`Ae+(8(4dPLF~4E=29%)(z{ z-QU2Pzr?z~fi-`Lb$^+Kzs$m4X5lZh@RwQm%Pjn57XA|J{wgf|<-L~hp&b){6&C&~ zEc{hi_$#pPFR|_~_09by*8L^c{Uz4@WfuN23xA1qe*18e>U*8F7_{z@#?53et6O#S)8tK9$F z+o7=Luf&?a5{vbN&<6Oc)Z0dI+#d_|!e6D{HmGvF@Hf_L>xXtt_PGT9M%LC3#KPae zV*S9Z`5RcQADA_N1B>+ovsgdy_+tG)Ec^}i<}CbuBY$mvXoqC}mG}SlHY@eQUxkIg z0_*+?totjl?ythaUx9Uh18e@$wQzp}YyJ}ZX6uJ=E#NP+@R#d_zs$m4X5lZh@RwOQ zNv!*;uvkAZoA2rUW6ULCUuMqQ{425Muf$^gAhZ|$D)qu&g@wNoi}i!hUihoj3x6XE ze`)Wn`5RdGmss;Rub$^L9e*^3O9$EM+u~Z^n-2XS|=b`NS5uz2nT5a1 z!e3_l{Cn;j{ACvYa=q|3u;yf7&0l8WZ)ENL1@DplQ`X*k|L?hP&Fc5=1Gk~?e@IyK zH?Zb!XfN)asJ(sfZ&EMvJh7cSvzULm4esx+U)q@Z`(t=U`!ZX}QLnzc{u1l{66^jF>;4k!{u1l{66^jl3xAn~zr?z~fi-`L?dyl_8VAAxb3JZS~7V|H&@HdQ^`5RdCms$85+2Jp<@HeuG$?f>m{hkcnjYyL{C`75zlKM3uG zze>GrRL1>~P%r#d>TQE6*9(7Ry|#X6RiV*NlY{N;M#ZyWvNIKbaG^4I2vc1Y&mu#Yrn;jdCJ{8d=^E3odbz`DNz z>;5V%{1sUDH?Za}T?_X&u;wqZZ}68{_{%K(WfuN23xAn~zs$m4X5lZf?k}`5RdGmsqSHcpTi{BMX1I-rZkf&EK%svfTf>)%_=)t1)KBJ)Hjj zO<~PnsSW0@!opvLg}(|5e{sz|lCD!~6touu>`5RdG z_sGIuW_N#y#rol$oJ8N+@jU;AeVI9H^RL93zY=TyDlGg}Soo{3@K<87eh|hN{wnpt zUxkIg5^Mej7XGpi=5Ju(FSA%b@HoI>;5tef4`EyXm2|v{wgf|Rap3|u<%!4 z-Cu!qe+Ab4Rap2du;4L?`zx^SufoD#fpvcc*8LS&_g7)zufoD#g@wP&!e8>t{Uz4@ zWfuMldo6MQru<%3tbZjI{wi&NzXI$23atApugt+L&1mF;ee?B=$}Zf=Y0=C;aqw?%eyTVyx4MRs#rWxLxd z+uc^#?zYHoZmaCZ#l69Ef5TqTd>^s-E3xLU#G1bf3x5?B{wgf|m00svVd1aB!e51j zzY=TyO04-SvF5MB!e5DnzrX79Z`flx_m}EzE9UL*X7uB}zIlVc3JZS)*8LS&_g7%u zUxkIg0_*+?totjl?ythaUxkIg3JZS)*8Npj`1}2azr?mx#rAiL`tjf-=3i##{xaM4 zfNpTh7D{swmHFSB!hnVtK~Y@3x|+Zv`F53XbV@H)>8 z%k11=VlVt9_QGFcFZ^W|{I+S~pWxN(1>)C+$F z*8NpjtRIM-`^$Sa=l%wE>Th7D{swmHFSEP9M<1H0+qGbJ_xH$R{mbm`FR@rZ(D?2? z99j4q>P`1v&ixJS)Zf5P{SEBYUuJiIk9iaRGQ0bG zWZ^HfyT9rBm&SLWe~$3xAoN`^)UyUuNh25_{n=g}=>88`!D8ft~ux?A%{w=l(J~_m^4hZRh>IKiP8)g*AV} zKFq1V%+BZEz)t7iz)t-Q?9^Xo=l(J~_m|nZzk!|l8`+t^k)8P)*r~sPo%$QtslS1p z`pYc#w)f+H&)e6(%|Q8gtIF)JH|qU-=dEsqg}=;}^Y7MPg@wNY z>;4L?`zx^SufoDffpvcc*8LS&_g7)zufoD#g@wNY>;5V%{QZ8zUxkIg%+CE~wp>4K zt_!UDE3odbz`DN*3x5UH{S{dES76;=g@wNg3x5?B{tB%7tFZ9*mmB^nEc|75?k}@* zf0-@Uznkj<>;4L?`>U|=>GmDm)Hw`nT5aYnD|?;slNrA`dhHaHemgr?w{;y4T*)n zLL1y)g~j@T+3EAMu&*s=&ELRI{SEBY-@s1&Wp?-X=tDDgTlX=$`+H=4{lH`9a}=>y zKQQb59$C!4+=jM-8S`&D?ylqhtzt8OEB06~{FPXne{hcFIl-+s!jMKKQMZ`iAr zJK4W$?SB$${swmHZ(yhX26pN%v%9~?YYcyx-TghX@R!+r{w3D@4XpcnWZ`dQagC2G z{Eck&{w=v~`CcE~zbU^H*Zh^*VE!sB=3j}$`uF`y8&mQ9g~FP@VGrEY-@s1&4eZok zW_N#&c@zFJyZd`&;V-khzsEIg8`SYGiO0@e# zpHuPvnCs1*#Qhty<^G4wb%lk$0_*-NEd2d;!(WAkzs%14Wp?f_vvYrmz3`XV3xA2d z@R!-Szk!|l8`$am%k11=X6ODgTkhZ4To+jPS7G5V?^TT?5_{nj_+t5sv*=DNDHdA%B-@l3N-R|E+c3c07 z>|0;|s%&5Xs_eHLY+wJ1^=|72mF@FyXTRU@S7EpKV!iN}>#gVCb9+c`8Z(yWwu^F z^mYiW`zx^SufoD#fpvcc*8LS&_g7)zufoD#g@wNY>;5XN`OABK+Kin2o?cr&NUZrQ zvF2}Jr~U?Z>MygC^>1sl!opvPHGdTr{#NYi`Prns$9Em@x2pH}40?P2HmR4`Z)5(I z>NS5A7XC`C`OABK=Ke}-8-uT?5_{np`hnSep8Uhs1PW{ZhP_F7z2MygqzegXMsbjrEecSy#vc7&GcK4T9tRI+l&yFnSUv6))@2da(<2J?>oB3O@$2P!U zi8X&E7VC#F4(YS)pXPl#wiokn*z1#fX8ua7`75#JZ(yhX26pN%v%9~?YYcyx-TghX z@R!-$Ut-PQz`DOj7XC&S*Z9cd`9oyO_ZRJYNUW_NB-Z?uSo2q5G5<;|*1zvx+L-$O zv#GyfUr^4PzY>e}1Gi!7Z>V?bFSEP9$6N@1nce+8vhbJL-QVMywhiidzRrDfe~>8%k11=VlVt9 z_QGFcFZ^Y8?r&f*|5Dzx^@F_stX~hVH+RzJ-@w-IkI(hyEd1p*q^$d^u<)1n`s8z} ztsmYL7XB(M{AG6TFSB!hiM{Zb*b9G&z3`XWxxay(`Wx8k{LAdzUuIL!`tP6YYw+Mh zz5hXE-Cu4)S})eWVNcoIU*1EMv+!48;V-juf0>>8OYDWe#9sJI?1jI~&ixJS)Zf5P z{bhFUFSB!hnN2W z&ixJS)ZfU?{Eh6)-@s1&4eZq4z)t-Q?9^XoC;QL3Ki|K!G4=bm+@0>P%65NMcH_i0 z^!*QFz0FjaZKld>GgW8%{hQd{?fy+O(qa?ypiW z{1sUDS7FUx-Ye0J&i?ITn|~$N{FPYqS7OcIz^3Di`Ip(r`k}Q$Vd1aDn!gGQe=GL% z{9)4GzX}U~B^K+4*Nydq z!kWKf4@N$(o4*o^^#iwI>Mz$j_m|nZzsxqPlf5YIredtmxV`Q4_V1yzGW+)e{+{YJ zHuJY)Gk;HP)?V{hV$ENP#rlEAAssXLtJJ$aKkNRy-SAgo;jhBNUxkIg%+CEK_QGFc zFZ?C;!e3_LZ#yRb7HsNo!KVHe?6D14KLj7r_WJr)sTckVtoy65SU)hE&y#;xZc$kC zH|*`m>otER7V8IY!_;4{clY<`Lo;=oCz;*-J+i)j;5PVNLM+w~%(@Rp7V|H+VX}Xx zja$WL{#NX<4e(cDZT^*5tRKQSq|XL_%C1E*4(4yzE0KF<{z|O*E3xLU#G1c>o%+k{ z?(gv$!(V21e~&EuWp;4{D_#0VV<0Fgb50NdO|F$uf*ssGKi8X&E*8Eji z%)b(g_3!(aHm2h9UxhV)!yb(Mdtv@cEY=U)hN-_?@9yt0Z^B<@cYlv8{AG6c_qe8Q zgF4o~++O$hSTFny_161$`nZL9XZ{AZet&VUH)qXXsb2F}Vd1aD!e8Dik$YzIZ`j+B zv+!4`7yc?N{AG6TFR>T?5_{nSN6H=1zXK?;ErA z`?qtwISYSnyPDufoD#-YYTpS7G6=!opvLg}=%~tobXk=C8z>zk!|l%k11= zX6ODgJNGxRQ-32n^Ea|He*-)9H?UKG13UFMuv34To$TM~PWusjWY%^77`~92Px9$E-WViLN$iBVnZP=clsrB~tgUa^xugGre z2bJyfZ)5pgb360P_I{`x_vh>IS7Oayi8X&EcI%hcUii!PPUhd!IOHt+RqAb%LNdO2 zz3{iH_jLa@Y47n_8~m;6Jw5}0zY=TyO04;-u<%!6&0l`kJoi^(&0mQ%eNZ*MdA4eQ_b&Th|d@Hen8?3Kv;t=P=p6I<q(%xwuDm)Hw` znT5aYnD|?;slNrA`dhHaHeme_d`R2t{wnptUx9Uh6&C9UW~cs!_uV;*^@CC`)(;A6 z{wi&Nzs&Cb9(`!0Zr=-LcYlv8*1yc|{t}Dz1NY5+II@_3L%sF;w>B0PoB3O@$2P!U ziN*RM^euZ{vi<$HNqdiNfWJx`F#m>k&AF3*jB6~h=C8z>zY=TyDlGhEcK7#qjo~k| zyT3;k{xZA!ORV`DSoinH!r#ckha-#U50NdOpS5w5*stj|&fn{qzf!$6|0*o}l~}BQ z`91p7-|${KXU$)U#ri>MgZZn}3xAp2{XOPQ_{;3>?~#SS%towVc7yd>T z{?Z)PfB!=t3m&uFv-gy(pZ}ig%~|s|v>|7)e&F_|Ec{jK#rzxIjpt6<{425Wm)~LM z^}=6;g}(yp{t|oPFR>T?5_{nU|Dm)W_$ft~sr*r~tF z&i!R}?k}@*f0?b{ANT95u;wqnYo5QqkXZ9qV$ENPHGdTr{xUoFm)W_$%+CD{?9|`L z&isw+%-_IH{SEBY-@s1&4eZokX6yYA{W>e}>iYX*nQi{cZ1Y!Uo4+bMxXyoRzF==h zJG=dT$bLLLdu`9p)Owq#I@|8w)O!2<+l-C(Z!`AztfId^p0USq=<8pZZR-b_ZR=l^ z?du1bZS!wu`CVN*lU!r?E3xLU#G1bnYyK+i7z3?uZKh4e0rPJkkKJ|n%WWuFb5dd9 zZ^dT*R&3^P&h~a6`ey!0tobXk=C8uSUx_t;`CZ-IUx_t;CD#0vSo2q5;jhBNUuFv@ z&2?s*)!BF6{0*$FANYF#e*^3FX8u-e=I@Cu-XHgIlUVatV$ENLg})LDf9V~{g}(|5 ze-#$~DlGgJSoc?8-Ctra{3Z6nUuNh27HsNo!KVJEY->s~|ElkgH`kSV;jh5DzY2@> z1F^fm$1(HugTk7>{0^|F7wZS5UaTJk7XB)2fWOS{{?a&LtwC+r{UsLb2WH*hBa8W$ z+t6lpo7azQfB)9|SFxGDIos<`)(@e***#?6|4_Ff)Qk0lP%r#d+S}h>Y}ffuU)q?S z?{R1x{cRQZ_&Fk%D4y^ervF5MB!e5ES`hni-?VeF? zF@O2JUcs8b5{vbN(gv&_1Qz}(ZGgYb?*7s^n7_>K{t|2c2G;#OvhX*u@b@@R!r#cw z{0(gR{H%|g#G1bnYyK)M{FPYvOYiCmC*iNc!e51jzX}U~1=jr)SofFM3xA2d@R!-S zzk!|l8`!D8%+CE~wtW7(xvsGAS76;=g@wQLuI|ELg@wNg3x5?B{tB%7E3ob_u^0Xl zd*Ls$bAJOn^*69nf0>>8%k11=X3O^%o9hDW{wgf|rFV4~{wgf|Rap3|u<%!4-Cu!q ze~G>Dm)Hw`nVtI^*r~sPo%+k{++Swr{xUoFm)Y|D+vd8$n!n*)o!@62*JpVCAhG7J z#G1bnYyK)M{8d=^%k11=X6OC}cIt0rXZ}WZ=5Ju9{swmHZ(yhX26pN%v-SJqe(jWZ z9o=7-?AI7M{bjv)l8MemvZFZ{sDh?fz}leO+(A zf19!K{%yw6bAtDIz0|j_H`s4C*tY(iwfESDzJ8F|Hve{(-*vPz*>y92CD#0vSo2q6 z&0mFuzd4)xo3nj9&i*os`8TlUWMJR2@rA#E^=py&Td|qHC-!yz9ol{W!`X+{w~RG^ zrFzX@g@wNo3xDak@`b+&3x5?B{wgf|6TkiO z{-$he%JI7ie-#$~DlGgJSoc?9&0l`kvHN=*GhaVYy#;IjO7)t*5{vbN&<6OM*ZZ%( zAN$sQ-2Nxj+e}T^-QQ!qO^%Fpe~&EYUv6)ksVx^C+5Y_Z+}@qd{LSm_We&N;{FPYq zS7Nb#pz%d}xef4Fskgs>>*K)hI@%c+VBOy%3x6XEe~&EujqJF8`?uGT?eE{t*SO8P#rrpzHGlIq^!g9q3-ecD z;jhGE{Xp-tc7G|in7{m9q+rcoi8X&E7V8J0z3?}$w^%<2^C*HJhLe-#$~DlGg}SokZj?r+K# z{-$gnkHcJI^KbZji=MNHg}+p9)7SFbk#&CqJM}lPQ-7JA`^#+k{A_bwVd1a9y1xnw zf9YMvg}(|5e-#$~DlGgJSob$&3x89#@R!(&`Ip(bzk!|l8`!D8%+CE~cJ42;<@4Xo zb%Aw%6&C)|yN(Ng6&C&~Ec{hi_$#pPZ^{<_rflIau^0X_JNGxRQ-1?H^_SVXzs%14 zWp?f_v*r7X&2@z}fB9X<++T?`en}e`U7$E3?gCmF@o4?AhO%J^Nd; z?N45ZwQ^hks%&5X&e(YWHe>1D|9xIBwfE}{_S+4%t$%0jJ+`5*A7r-8zZ=WX<>vk> zEc{hi_^Yt+S76=Wlr8*C*}~tHZKIj_E3ocwWVd_0HlrNwA^Y=(^tu_F`pflN4rqr% zz1#2K>GPSw!e51jzXI$2Dy;b%o)x>l$1&^gFZ!5CtobXk=C8z>zX}U~bN2lHqVC(j zkvp3=>Nwb(nzwj!4xZ^dT*2G-t-@Vf)}E3xLU#G1bf3x6fn{0+~F-Cr69 z^H*ZcUx_t;CD!~^SooW>=l2)g%bX4G0~%MeZT3Arw>N+DdYOg4k%hmj!~_zj+&q z^+Q^3v3^L|K6c6aS7709Y%lyh=0f-z*_pqAE$`pDzY=TyO04;-u<%!6;V(Zc&ONjF z_w?L8a~=LF^}=6;g}(yp{-$iU|< zH?lK-BRlgquv32nJM}lPQ-1?H^_SVn`-|-!`Ad5ah`%?}p9vQJs%-aHWxKyB+x->U z&EJwu{4LqU-;z!I71_<-GyB4|INiTZ*yFQ`xA%0+@;U134ffj&wy%G)_9pY>wti6A zKL2)BcvieU|5aJ|tJDjB6&C&qtoxg?g}*6V_?xnYzd756et%Zs{uXTNZ^5Si7VNPN z+w))b8pB_uUid4p?ytg{zwueIedl>^eqTSdzDcb4E3xLU#G1bf3x9Jqd4Ey%EqQ-Y zvizQ5%njO@!Qa?kTR+gX*q)yyZ2+73tJDjBCD#0vSo2q5;jhG+zwucy{H1X)etCuD>j#Oo z^@GHkzY=TyDlGh!SgarT`Fb1j@w?q9x0t`-xpK~$zY>e}gVF}99|RWu=4~j}4{5!{ z`XObD^+V3Ku}jtufrY>6`XR70f5SM`_iz0>$Mxo{`75#JufoD#iG{!XtT=ZP{wgf| zRap3|u<%!4-QScg{7u=y-;^!<&Dq@Fz)t-Q?9^Xob0=;74ezMx=MUX=t~Y1lufV#$ z3JZVvS@GOog@wNg3x5?B{tB%7o3e$!DO>oPvW34noBJEsslS1p`pfLxUuJVBG5<1K zKR@fP3#|LAu<)0k70>-uSoo{3@K<5sufV#$DO>oPvW34XTlkx^xxay(`Wx7(zs%14 zWp?f_vvYr$t)KsP*A>?MjiOM#A<$9aHGTZ!B+3s)6o}Zu9 z?D_dw&7Pm1O;~y+Hn`sAFU{-yT~g)mtlr~ujsE;$#vbnr`|~rIZR-b_ZR=l^?du1b zZS!wuRD3JZS~ z7XB(M{1sUDH)RWdQ?~FoWeb0EHuqOx-QU1Y{bhFUFSB!hnVtK~Z2A0Qb6sK0Uw&56 zo}StBGrBjm^{>R5zY=TyO04;-u<$o$bANL-_cv#Ae+xGCS7G6AWM}>ccIt0nr~U?Z z>Th7D{xVxXKkH+m-0St{XENLTmD%R6%r<{jw)tD6rzJ8F|Hve`u-0QV*9s76U^D~(>f2DfOUx_t;6&C*H zZ0>K)=Kkhv?r*`S{wnOazT$OzPp@$~|0dTsXU*Tx-kddm6&C(VEd1qry}7>%3x5?B z{wgf|6tBgAe zXSa8;ou}snsXODnt;TNilX@*SPOEqO`)_K!ZT+B*?^|2{s%&3B$ZVT`HG-<8 z3JZS~7XB(M{1sUDS76;=fpvcs7XAvX`zx^SufPr$+I3dguc;5^{F}Iwv+$SOkh1Qt z!opu(E6@E^Soo{3@K<5sufV#$0_*+?toy65@K<2nUx9Uh1=jslSoq6q>e(CSUuMho z!`2Rgb$=BW{_e56wOL`!UtTM>((l{-TRZN5KNjl;i8X&E*8G)N^H*WvufoD#g@wNoYyK)M z{8d=^tFZ7_V$I*cPW=t+)Zf5P{bhD?|JK_qtTi@&Rkr)9vfpp8-CwcZ&0mq-{1w^F zUzP3titOgE$Zr0M?B=h^Zd`Bkm*d|7sr^;!?dxBW-PR8(+vnfT@>(Nr?;kf<_^Z_W z{YJg;SE$$h68k@hN-l@NVo%+k{Wc}OQA$ ze?@llS7bMTRkr)9vK!a=FUPfV?XOtxwti6AKL2)>=k>e|ef_JlzusWsuhItiE3odb zz`DNz>;5V%{1sUDS76;=fpvcs7XB*i=9uVCzkfTsQ_sIDYyR?F-6DP4)(`C%)(@>- ziT!o7S7Oayi8X%}7XB(M{8d=^E3xLU!opvLg}(|5e>Vx?k>Ye(_>}37W z>*nuUTJN@gP}%OU%65NMw)-oxo4+Ev`75%Uzbf1P71_;Sk=^_i+09>-?f$B4_g7^% zuJg3kNIl!u4`RLl>ho`7+4XkjKX3DIJBImJWzAoyUh`LC&0mFuzX}U~6&C(Vtof_3 z@K<5sufoD#i8X&E*8G)N^H*WvFSGUh+j)iU^RLV{e`U7$E3?gCmF@njZ1-1XyT3Bq z{8icRugZ3RRkr&pv&~?9=i8<|7<)zEuQ)EY4Jv&zkG7M-~WbypX290KRMoC|NXQ2XXE$tC&&9& z6>psX>+h@PPtiqXi zygL6q6R*yHtK(hezlY*o_s`<_0pA}# zvHi!o{%QGdT|D!}yYqDaMxd+wx2}I9-c|lv9q%gtt&Vq<|JKDbKYoTVPx}(-sn1UFE;k@vidU>UdZAZ(TggKNtCLdAvTY zZa;bc`^)Qd@Bhy6M(du+e^tDv@?RBi&vTq__wygie^or>&A+@j-hMvD)AHZCcv}8j z7tg*1FFO|bXn8z@dpw?&|JLw?INp9f#zTE~-Kn}9T=CJ@lfoP|4{F${$1t2kH$m2@%mYP%ln6VW4sZl z&VL{6A3Bi7tMlJ8@#_5dOuRb(t&TV9`^V2d-rI?|Kl9JU{n-8QyT$95b^D2*G5_S> zzkdvT;rqWT-e}$W{5OxcKL5?*?RgIK=jiu-KL7q9U!C*cJRZueyZ@`=4N>m3c3FrM*zKA!daKa`K(2b@PcZ^lEhQ~pD}tKwOG%j2QmIG%Rhm&ZfBG2RGN=fBnC zIpWp%@0oaY{(B}~o&Q$H8`rhYe-Fj$8f`xo-#^>wBHymhe^tD3etrI%$6KHO=JEDC zhxv2x`}yMg{<3;c^XEL?`utbLv-!%~iT=g&v48OWZvSFA#Ea)+JhcCAyihJYPxgHJ zD&isB&FkmI>|X}-&oBG0Q#|XxgX;Gk^`Rif6X#KH?4Mm<6uaBM7YfFBs5izNe4YQS zzSDe$^Ek$MIG@L>^B>B^^$X79crRX^|4`rBcy<0;9nXCH+3NkMFY@;<`X4`|9dSIt z;fU*p&wgwboc}%o^4NJjU&R~eQEv7Am$$drzY*`T{8z-=^Bl%=v|~S?fB%rj?v5wQ zt-JrLuHW!s{rz7RFXlOnXFQ*er{}Bc`&V2)FDHNh(0&~8y}@T3b3gH?{a+yNJvslx z{vl6+Ton)X#&~w!5$^7Idb!v?)EncC0+;!(x_)Im{6QY?GXE`(cbWed$Ggmb%i@`j zKl^xZC-&!`IKS%qVDb88-G1U{cpc+`!x4VsvmaZnck*8qZ?tZG{+q{Jpa16Z_B@C2 z9R1$U=ifi%v2*^L$3wYw`LBvMe5msu%EkWK`PUc+y??PB#uMkOcoye&yio3x|1RR8 zd#C(>a`F4;1?)f2Kb%LoVmyJ}j)!{Hcy`^F$3wlbew?FrMS8@8^r}`)hFL{4kHVKL1tm?7X)V{lj^bi~Td-z1-mT^&rYcKVvz> z!+Dg8@oXG##|!07`R^j06~BA^yx8gfuZoBH10@G{J)YoE9^;AgRXm($PLGH3YP=Dr z&VQ&c`oit|vpk-oT%G@(iC5>pXX4fQZ*{y;U;X~?p?GEfgHO>HYv(vD-2YO=8|T;O zzj?g%`EMR?&vX2J-_PgsHS*Yb{+!1{xpnt{RXp?dHU4~mUKh{D{vltX9K6Hlas10^ zy%ft~JmdKo&+2`lel=bwcglbG^CBL?o$klRADsK=1?)f2zj!{zL;eDHvwtlwjGq_} z=VLs(z6f`_e<&a0;e3oY0@e8se;(&EoX3&lp}xOtPnpl_`8xlhzP0h{{P#?}I{&SX zXFmQs>b*UmS+T!_^-F#IEMC`W`-z{&+28*buOB!Z;R`gS){{`Mb7UrzaIt7yM}80F6K zVmXXwJfDxJzsD=)>vKG7{|iUN!)F|ec=pG4ub&qS-}n7|jE6i00^d`79>=nO59Pl) zo_TZXAI``AjrL={yE~pJr_Y}lFO1*4@kHMI{cr5cem?KtRsO5SbFcSaysP}TE}o6w z&!07(@p{G2qaFYJ^ zU#{}sIi7uAUpOKjKI2%#vp=rp>oT5~3-SDXjHl(lIv&c$csL*9*>&IBvz>_RmpUHG z$9Om&ibZ|L%G$z|FeqsRQ{{tJ(d5?@oc_& zjqA7i`R6%a%yaN1p3i-`%75p0)-Uw$g?RCN5f8&s+;5igyj+Oq=VLtNDFEvC9X!g% zcsL*9*>y+p+xiRvE|EhRXktL!JU> z^~dl3&++>X9_2Bf@qCOo>i;vaQ~tZ^AIisgI3MGUK*(cvzwaowF8|H@w?6;PkBEuAi3ws(;@C z?Yf(fP!7F}pI67jecau6DEIOEzx?`D{rhOVtNgbvo|gaC#nbZNx_D;D3#NR|_2X#g z{I{-uTK-!XPs@Mn;*F8K%73flUFE;k@vidU>UdZAZ(Tes|1FPqasOBSdlSf8tMlLL zc*rZ5XV7kZuHvEG>ik#5!+qn&|NW!UBej3`<7xSCUH`QFw=SL;@q!sok0-~$r{}Jp zmjBj`rz|F-3nTY*|2PglJ$L=I z{I_mAwfwg(-Wb8F{I@#ZRsLHY?<)VTj(3&+*2UBE-|~26{xg4HYu|Uo@Av-snRv)! z=lNwG59QY7zj?g%`EMR?eg3QB;XJMYzn|XUCw38!@29WwAL@;M;{4rs#=lT*9IyTS z!FU|*@O}*SuIk@a{`+V=)Elp#)wjHVs5izNf$IGC(f*+WdAvIRJrl3af6v6L^WW-t zqrUy`Ka6pI?)zu)`ei-*?C~)F#P8pL!L7UhdnO+87`ljd_kDBQPm$kIZe9MH$6KHO z=JD3&zbYQSC%6Ku@?RAX=VQEhKA+EgAEy<+_9fPf{>Ae}JT&w1c-Eff@lbEnTOH5x(a*RJimatYva}V@0oaY{#zYyT-W;k@1c18vL1d; z--oyS`hi=X{}#tX9zz$=ZhU_3-#;1=)Oe5OzhXQe%YUbMG0$OsiRa_|67!Whp0OO_ z#q%+q8S%2C9n|aR_l>Lb-)TI#eW(2Ae;oUVJmtXlA9DY^7{(JPP;ZQfJOyqXe>@)Q zjqyhPm-%nmc#e3N`EPN&%lx-E-evw<7H?eF%lx-GUf1aGv-=6JKP&$|6R*yH^LQw? z?*4BcZ+-ro$6KHOs(3NaVgAHiqXiygL7_jyJAro&O$+*DvegXZI7H<<}3~y8FLp;vtWri)c4~pF#ESEuq}H z{5S94`usPKw?6+>@$CEyR{--T&ZAtMU(9zeH_BgMzgQ0OaK4IX?YkW>lso0Wi+ENX zhwJ`<#1Z|&=PDlN4{+nC$3uBF9@_EIcqp&N8*%FVhx+pQY@ZMA#jEq*Gx6&D_e{Jx z|E-QU>Z|kLL-ES|2cL3Z@V!}=|DK75Jce%}+KtcEzb}Jw>+;{cf9vz#Jl^{JSH&}L zU*pgB=XLS?-TYU@L!OKA;`tcQ_!r8Jqw333&p#_a_g2RF8h;Y|hx~;Z9>cKE}iO7;nU>^B?{^pU+V40h1yR>vFHwa$MJ#p@a! ze&YAN`u8osttb^k!(i2mU-jxiqc6#jf1^>`>BPH?!R5c#TtUhXw=%U&`lv|zus{TEd|EhRT<-c=0o3CED0+`R@`8c1& zd|JLWfdA#-cuZlO$@4x2-^I1F}=d+lv#udE2ez6?l#q%+q8S;WDYP?Wx+5KNN zp4`55`R^*;>il;V&-`flm8U42 y7)I&ZmqDW3y8Jiq-}?MFkGDSm&Eu`le^or3 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cos.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cos.bin new file mode 100644 index 0000000000000000000000000000000000000000..a7951b4470252bbed5e7af6c7b548e0a0ce9903c GIT binary patch literal 13272 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 AvH$=8 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cosh.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/cosh.bin new file mode 100644 index 0000000000000000000000000000000000000000..693b2d3230e74e38b599933a7606f15e8245e0f5 GIT binary patch literal 11944 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%0A{!xF5<nqO~jMEab# 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ℑ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 z%0A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 WN)301<(viOR{qKEW#RkPQ*H1dw={M7FuFfxh z|Kj&6o~xGYVH3}srRk^Yx4iG{Ak`B;Ae+F9Ia`*v+ZZ4$co#97-8#^f@i#aUg$afc!>S|glOk{NIz8! zSH0KsnRVur54-$uhb!h>>R=@!!P`|{qUUtz^Xc~|@;T*0QX`eml!tjPi6�qN5bJc7e>?!dq{kCJ}W!PoI=adg|MRtUH^p2fBE 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%0A)VAdH(YG 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�gZsBK z{{HxTr+i52;(*2PUVIk6Y=6&AeDwX;S%>tvbGx_WBek!_$*tn|Zbmyw>UjMJE%zU` z^uK4q$KGSb`j@@%FUNbJ^-lhLe7-o#A^Bwg^1oZZn1Aob2Xc$w zt{tuZlDgxTFW>)x91Z8_{F&ik@w*qF#V_06WBF{&@0p)5+*|Q$yjeTmDt@j0lKS?& zp#7-6tG^r0VSF>nt8p-1jh8Ka#{Y2pF2E=L=6GWK@%Y8{_*c)!FZ-v#-N z$FHuZJ0rj2#;?bD-1s$|gY7$O`&Rz<^!PPA+P;U4Uyt*+@oP8-+jr6St@>fs|MBq` z`Alb|$Bkc)^SJSAI0xHzMm{oL`0;Jg{Hu27aK9oL5Jib|fsBl}kJU%?mVSEI~c>Eg9 z!S-Fi(|G)9K1hy#|44BjH-3%J!SfNAb;? zQN`bQ{2I=|_FXieWgmZA`jzdQx%K$V)=m7w3HAAht@Rsv-e~-?btG*3-HXq36Slu6 z^V`3F{?!?LNb2GvKL^+!=i@K(N$q>V|A)sn%|;T3kFA^ddoB0xx7Kf*o(JFEjC>?@ z_*nez#b^EJVEdlc&qC_(<>vtV<6H4-er4%se1N_9?eMYqFu$MXaQdD6RsGuuIUXIK z)r0Nt$@u&6o8ytSV|9E6KWzQ8m230ZTg5L>#BbN``8a9c3(hc{qxe{yvg3R4S^SQ+ z@7ETTD5>Mg>MyA~z7@X@Gx9V0Tg5NiH}Fc!r|;i70iWR<#mDwhu>NH)K8xRnx$1vv z|J=}@+4EmMSipm%zI~NH7Qe>Zt>gDY#V4u5_fqk_oWtQp|E&BN&e8b&Sj&^t;b8H* z7vHo9eEE#F@7I@@%_OPAcdy4Kb;q~jH^(im&p&&8t^cV#lE=>;4F@}pdgSpYz~=2M z>)+$&=Z;T#W$VXR{MGx*PN-*!9~!@mCw5%<+roFjd5OQDH@;bM&h7SnQ2d$4%Kvur zhjLh)vbcUZ!;bbZTE5|2jUP|MC;eOeNE!%fecbVvGfvsUH|co~wSMqKd`})f7T{y? zVZ0^(AH>JTSvD?jj=vY+H=L{S!Z4;!ESlAb(FDKV~3j^8;(wTgNYp z>&$DQ^-lh_`j4&O``1UgynXST&+p^2_+9OfdZPd3@zmqX^8j|7;Jcs(*3P5x!Qwab zJNhI4fMWjY_w#qX=|nV+uqM=AakKXm>F1W(pa7ud1!*LX|i4~`!!ewi-4sXt$U z-*ArhFL%m^q^=!NO8j=m_u{ko9c!&l2v+?)E8NXZnkH!a!U-NHC9e?Im^#1e- z_zdSLK86FO#P6%{S-z|NQHtN{`Rx1O79eNwYrLiMZxp}g-;#R%tp4o&)&=+t=V<&g z94IAzUxm-|9d6%6>s#?;{!_;XAAfOOzq$X-_*b5<_P-gpYkcNcJbpdSG7-U5zijSXnZ{X`0H_w;$u94h4}4wHNWTmi(1NcNBo=z+jmAb!lT2%{F2A7 z;X!^@kJ0#e{`mDcNAWS9z(V|Xyl(d|YAN%U_!({A1=)v4|a zyIuSm&ZESy;nDWJ=>NqJe?k8l5^MJq-y7HG&mX@E=B();zT3sG;k*%lv*us*+kF14 z=WAl^I2s=}i(i8~kMVc&_?^b^QT`Sspqh8_@z)4Ln&NXXK5iDj26qtO&Et2peHT=8 zeEike*y5tX#cD{ z36D-^Ve`VR`Lpq6Jdei5t>({$a}*!r$=pX$$E(ddxjwFz3)12CwS21UAm*1_*S~3h z)Jbv9gZ;~_^{o7lt((|Mk5c?8e){^*)1P0w z06Dw=YrLiMm%;Yc^6K$}t((|<{__R+4d-b5vUMaVC4Rg1-HXrqg~9fH`tyrtAZP10 za{r?>yixpW?jdpf887tt^5*}Vj>a#YA7p@6;j{Q%?T<427cHP4zth)doF}QnVeu!a zJH9pkruMb+Zxp|DTu!_O*mv?*^&g7MaE``rDz5gk{Db4qALjVXPe+o%jzYl7c_`6a3ez*Xiqz>OJJ^pG5ha3EzU}rc-)RLku=vg6tjG7k47(5JHh-Bn!+CA{!k+bixu5g+U=_aG_>8w4$7A@|{PcqbNF;Ub zyZL_83+xOh8$b5?-`8j4C#l2n{(|F@y5skH{{0*d-^pLakK#+?$JOzR^4a|5)q>w8 zb@*^JeE0EXKdkVdG=~`}@Bi>Si(kuMQim_|O7Lm<$^WkIpMfuzSK-k5<^EaEPsjWC zvVV>7hf?FW<7xXi!FPdW;&0IZSo|_xtz4>){|muq@yqtV<@RUu1GEFx4;F3VC&sVs zJF@s19p6~|vgadxuI=|Zd%n~O^)j5J_}Kfm*!Y{@%k?Ng8vV24v-V^AqwM#s{*UQ@ zS?BZpj<&iaZG6U?#nI^a#^RSf-|T0~&(AjY<`@d{lpC{Y!qYUYoznoB82b|9m$i zA4x-j>63MOe>|N)+V{m7XWTk|&3`3zxQ!p$KWqCN&e8Z~`T>jIjGMHt; zD}Jq?m(=s5<<#?+-R*nPGjBBhZsQKsxs$)j{}oqi-$8tAd}HyOarg1rdBg2HYdg?5 z@a?W=OH$**_3_^QZ+rcZjlX6uX#kQw+wtph9yfjsXXT$Kt?G>Q=NG?*$I4Y4gYm(} zU-NHCefw(t`Tc#5b8!5fZWq6XbFh8Y4|p7S{$9dfNHJoGoJzxA99<;0Jgrnoz^I!jZ zoTK<|7r%ycuzhEXGaskcK9WA_8C4Pvm--ccexYX_cl`A@j~l;+bFh6EZIEZW{!Q(B z*zwnRvwDy5cf0sCoMZT&`})`R9o;&9^EwFMzx+)7>StT)H%{8V^ALaZ`LXQ&Z(euO z?*B4xz{mDSS-WlBKVtjH@^f}Qf69s^ZG5SHmFLm%jg7x~9fZgCxwhNqTkALUyit7Y z`OobBZ(euO=Fi4On-`6?FWU#2pX2TM+iG9)KTAi)H#UD}@nPlC`-9r9cHU9(rT9Dz z^)J(l1uZ6NaH#y5^`F&sQ$B(CpYeCmGY79PS^S!x*Ym&J?gXFWO6@y{FPG=}WAU4h z_wiZ$vi)zV{kQZ<-(dNF`CkD@#@xndxD4lL z{C<5weI<1`-d7xwy5skH{{7O&XYKbe$lu3Wo}>=PE5#?NJ3ggP8=vuJ@ijWWvG~1L ze3CkR-_+yZoZI*em*E`6$KHRGJkFo~ zo|8~u`fT@$ZG36`STw6TKAwp0;~Du#>hNjqA#ulFE#c5Ky;}PCra7KAJ=F2>M0_%? z#gC*8#|JZxOX`jrKg|D9`znrA|NKOJKoP$kj_rOioWAxyi%Y{fitoc22qks+a5R3q z<9T0UA72_j2HTg7Z}*B@Qisp@q3hc(sG0e}t>Sn4x`gm|QhbVY6d%*qP)hs`K=NnN ze=dD|(~R?0`=b=MwZm5b$L7!PYyOfteAaF(eyv};2#Le7eVp*O;>V9KhTGCD z{)^Kos%6PK+OB#qupDq8h-wo$z{92qz>To1L zRll>vpW(B7SNo$b$l3DQh~Fpcr&d0TU*j#8f1CKV`q#W#xy=9Ucf&avzs%2Q`>NkF z{tTbxJKVlAkjOmH``@An>-b3i6HdRAKWjf+&u{L3OZJvO(+~9bob1DQf&u04zT@$$>k-e2Q{!kjK9F7bc05`C_4M)A;~d5}E5ORn^k_&NZfig4e+6$b zkJ0vBVlH7Eb~xzxrsc2uKhK-hV>mtlFMRLAcYy)r@8WR|<6BT(?Pq#4Bo6of_%)nI ziC?YJ8L8D{I6gF6NgPkt$FF91)^v1!KU+Q(K0Pdn!)<;~{qL0W!#@razl!UO)ao%D zADXQsjwjl`T&(>^WSY+Nbhtc+(k4ert7cN+7*=bJwpVMwzdj^QhEb#X8pzn1aQ<9D=uXH;}Nesw;eyd5`wJ_MYj(RjCzI{*lWqbTJ zoP+HRowvD@#nu>w0@dy>8F}qNE}aWUSs_Rv_Xg z|Cib~^}l2I6h%mU|2*q2m0w!FLFX@u%Wxhyeo?>G``;A5)pKinlW{kG#>ZdellDiQ z@c-fX&}<}e?aS_~Z{9ywT!wQLA6sXTVSC(pUs9;fy8pBIk+_PV)&8gpj_++>_I%~M z56|PX^4a{wc+2JACVuZ`)KgN|?wjjhlpn)68oz9v5YWYMkMD$E{$XQ(p3NTz+m}9H zIq$>s{8_uv{!j6nAB@Ha<7xYNpq0nR(eYXQuJ%V=P;+aCt^Rqv4?yj6I|ZWB$9Q4! zn|@auqw$dnuKMTgaV5ZRw6EeaoTK=tevpAX{;b{P{YzbZ7QdtI`?VQBBy~7wyBj}b zfA@ptm-rjicL6VaJAAU9Jbol~$2ZrHpI~P=NBfr#7sau795@=kJ-!*gyqv?~hW{x( z^Mi*${@DA4?ib*Y)Zw#sWASUe<^JO~ zKb_*x|07xLi`(+QT(0GNt^b+5r91JZ`iJWD;#c#19K?rg3Z4wFrG{JEm8FN!aXAA{}tZvWeu|IzD=+`z7Vt=**ml{2>EcXWT$*A@Vg)Zuu4#&JpA z@vZo^xV3aNK7b;AI~?1`34a$@9vz?g!D#!^cFa6DUX2$v{@T7H^MldxjkV+5f?p(c z`0{hH!eJgChI16(-K;pOIKa{P?eSgk%Ri9o-^?4%8{8lDZvWfh_{Ma4*1ntiy|%x_ z?_m4B+y6GGZ%nhci_Ea9o`?c0N?of1I_1*)ar4w@pnc!!msQ9tXwvJ*zYeC z=P*7Ja1OTbjPl0EU(E-}yZvv=O8BB{ec+uisf>;E1!zr^2-;)AU#-&{X_LVXSA==jUl z*`t*B?Rb4T7Onr0^ppR8{hOZO|KGR%4fSTLaP(XIZ}<6}p8vFc zar_jEl2~rFvg4ipW#Z?Wk2k)B`7YqB^8=P!?OnceuE*&=tNo{kd+P&aUFf`tWu)f! z!{{2x=bhT}HAx?kfiyWfc~_zuYTobUI4OZmM1uk~}*e@a&yD-O|C-;(8H=wsfBEl8^A~IU zr>W)jV?Nd|st-@UUfkRM4&Oy+J+xqWA@#VTQ`uSP<^?o1e z>qWW0dfy-6b8-gx-0N3t-@Setx6}T>M}2wgqgwnwetwUv51co#rNFwib%Hj%?%?Q` zeq;TfrC;y&%|1^`_}RIBKrV7d`Mlp>WBcy=m&WbH7yOK0G``;T`}R9^kHwekj#$5- zJ`Qa>?Km=8TGuXFu7CfK9!Jh7pLd;)?Wor;T;2#CO7u!SnO&^-I5P!}mP> zk~0|JgnFhfzKG9q{o;PatLDe{5!J```n8-`m>&sFVy^=mozt6y>kX)3s_+|totY7k|-LHNv=YI7|&R~3# z=Hq|Q_SpF^*Ofh6zyAl!k34;}^nYwV zURU(iM=|~*{kC{{arDv${+p0Ctlhkd#EM z;rlgf`mgyuAGydG<@*uki8UN--@Set_s4t()z$n;k)R0 zxje5;x7F&pAW~? z=jV0LSL1!XY(IzO-Tz$6ng8jZpEv!kpHIKjf6Dt6<-7NfPxKq|e>ES<_vX*%tbENs zHvY@~hk7>iNBj4Xu@0(Olm72{-YfrmF3ES=-$ipFXFq;C%IB>w^X_|po3#8l@B9ON zheXbp|9(V1Vv9rS*6w4s>7({XzlrX3>*iOF`mX|MhsL+*mo)!d?0fEn^2L_qqx@O_ zkc*ss|MDo`PkH7zh<(p-I3`UOYtu8*2Yhw>2>Q=kpZ70GIm8;iual;G`lbJ#tlz_U z-9W*<6W@#SlQXJc@B3*_ze|4~>5#~2+vlV0?|bAU*2J-02eRp3;h)j?QT-Qee_G4= z)$kp`E!L#B>k1|LPJAaxmTm8R)NjAO@zMBt^XGOQ$og-j-`nzI?N6gIznVCX)1CNU z^hk0>_3P=>Nxy#4^2L74NB#EeqsZO*M{oW&*V9{{m;adN&x&{>BIXRlMUK|zQNR8AD7MSy-w*YBc=Y<( zNWb(O+Ue8u`*zWGB-Z$q_0I!+kTa@Z#-Z22F)5!|!$-d?)o(bySvh1LXgECXuaoY7 zJAc;m@zMG>`hRKr)6(Ww!?#|)mUF-QC1;4<6UA7(`_(TwWB%JtzvMxD zCq(8+=f9%cd3#*HmUF-QC1)_cS^X5(ujX^Os@<=CE$4pqOU__?ljb8jHvOMB@Ba$j ze09!0YJ7LAU-}I;+P}bm&ze6UuEF?bt>zDD} zyMCkb&4_RA`sV}(baDTRxZR%rVm^Sw_N!mZxnKQ~b1(WOj|Q0MdExmf+KZS!+P{ax z+eP1rHR-&5;$OeAoMFBMs!j(-q>D9t^vn4Cmz=@)=EJ_$K9x&!5So`LUgb^#S*ZvGKj=2aoI5a)$X506U!?kuKJ7 z(=TKFk~0|Je3-Ymevyxw9qZR}?pMF$48}JhpRS#)J^!ui8z;>-tPf-(#^_-E_>1~7 z-<{8&`{(;{e(_)Ezx?|L|G3QD#TxFf%6GUu|J8a@AGA?@ zXs+|C;c)bEXuqpncK7wWcRuR3U;p-~e*ZbC2gMrywckOv=_CEpZ_n1R*Dnt5KSlc_ zXH>u5_isn|Rjl!A``vG+{eh4AjmG!;e3&<}hNJxsx=sIz@;&{Yljc|bm+biWX#3OL z=GXUp>6bjG6>HK_embX;?CY1D(f-9-U*`2M$24;vjsrgG_Z;+}w?6M*vT}%h@4v%H zzx3Oa^_#JdvDo)~`QOvbE!K(er1c_aRKLGzc?YrYISxmpi#6$Qm&3fhdGjmq9kT8h zjjycBn>VqBqx}wpO&{sE=~mCrzx=*dzc^mayY*$7Fd<#0DTaI0{#v`!3|`KM_<8-` zjsLp!W&E7|pnrbk`3d!g|GsqoYvXcp>z)1&{PO&RdHeEezNGE-Pw772IqT>2Q{O)` zee6HY=a{N31=h{e_1i^varKMO$r;8FkmIVp7({Xzcn4({^e0VZ=7|O6gY??0Kh%!&T|Wx}CZ z?Kv3Ve?>lG-*X&JNEd6;+q#;Pe3ZW~e&C~@g8DcdlN2G_F(c(ux&Gq*ZpcW#^c!tZ9|uprp8tmD=TjHo zpgx|($N66{zTWkh`u&Bp7t{Vm`enOfJB#Y$m^2<@4TqCHzJ3LLkTc4sbn~m>8>g4u z@AQA*qkjAKQS@u$|8V`x-=W`P4PVo#mwum*%r#Tst5EBE_f_?Mhf zz7{Xbq15xM;bXgU?|%Uw>({T3qFcbu1 zvhw$Qtp9&`^Os4FBWINF4f%;Rega)FCY|5Axa%*GAN?PWZ&s3CzidCfK79S^`S@u4 z8~wku{T-9?i8X%m_}H#|{aVib>X)2WKacuvJN=SJ<3T@1^|8HvEoYSPdHN-1Fuqyi z5!Wy7N4z4w7qwA+9FyiFb|d{-&M4m->M7RpDRy}^>Fl@0<1aab@l6WSUngMy-;Zzp z_)8wmZ@>Drocq-;IfL=dh;O#-%p2eQ@mKRXT-9=%i0b2*G(WLM2Ob~Wl|TM!e&meu zJx{;n48}KUK5_k$M=kvv)yMYZujP#LJ#YLaXE455^NEkY;DOn_eu>#|it6K-G()i)>DO{b`JSg=at7lI|HbFe ze@A{|?fgKCDX%8IollkIqx{{E zAFt2#>!aw`h3CJYFn=!AaCpBz?q7c{Rgs@Ny{LV*ex2)Dci3LLFR+=*3S#0>)*(~(0}f8DwJ-1HU1mkzdPZ` ztTq^5@At`l!z@>(;+f*W>o5 z=l8eIDbw^XzteVnS-Jm|9ll9Fuj{v7&6mKJ9KH+cRX#48qhIPfyU*v;d~W@x*|s>+ zfAnXyvg4ijPWYUB`F{Tr=F8x$?Xq&s|497r@||%U+u3^m&E>o61HAR2!{iEvbd;Qbp6{>|9SUc zdHQYK_x;!WrY`r^zb)l^yJ$XQji1x5ieEcO3;){HP`gp?lYdM2_Pt-3tgYn%=zZ%!W74hAzel6#I^-IoRd^giCc@W>- z>eq7aSHI*8#&>J|0*mJ-Gjeh&AbThf#cy zZ%`lJ_2>MD=3lJg`+8BruY=z|t?`YW|8D;K&#m9ndU)&K(7q1?eY9|?Am6{||Hgkz z^z_U2M;p|Kr(gH}M3(D*zmNEHzrFG?e%|^hem;tCTTf(l(0+&CrZ0}~ggs;W@br6V z_c2+%;r*xJs_~8S9lYl+c=vA%@87L{Q~yQd>-uRyS+fep z*L!}{yXQn%?plF4`JO)Xy!^}W*mHIJ(|jg1f5>#$`Y&nzq7$T}TJ; z`_p_Tly}3I!IvN8yXbLs{b2WeHQpD;c6!L({jsPg_}X*cG{IXJ*L36g4}8w^-=59~ z|9p1l&u93(j=x>|Th51iHd7qJZ9%{2_z(Q#?8lEs`F=}^B=$X@yKcVC$3Es`|9kHA z@hIPqS^2~oK5zUTwLki;wSTMMNBNX)etplkpkH+SH))RK?8lEs`F={8pV;?&2XEf> zhVtK}L%KVE!RK}S2*%fYK5UDl0W*I#@nWAOCsLBi!fb{e$pPztQ-% z^I7XZ@BDY9-`c+5=jiz6#rN-slh{Ar?ep$>a7jMOpB*3AuaGm!cT7@*Y{$NTM*T&{ z@A(%0z8Uq~ua6>k(~md*D^v&X{CD;B=iBnFe{VnkkZ*>>%X>d9NO$5p>7nF^j=x?% z;-oMBeKYDe7+>%DkbC`kq~E$e>Vgmi$G3NZH1Tco6r+#&`*iN}x4=ctsD7z4v4+nZ zf2liveGmPnwqGB`cFBDF^EVuyt2KNc_h|g3-&*<4(eE4LB-U`V{_gX8Ci+cnRKL`j zSi|AyxBhOed;K1K%r_k0g!*>vkNNl9zJB$*ezg9L{%`SL*FV3(4`Pj9`Ms5|U(2~) z{gN}L5AXis$Ms7dZ7(f;F+QlQ7!$|!`n8<<)h{_?{`1b?9@j7KN4#o8I8P1hL$fQd zHomL%YdOPw34mSy7axDg8H{gMzW#SGAJ;E=G{61o*K+PxzvK+YHzB@V`+Ho!n$O{? zcE9?yocq-;IfL=dnonH6X)3s_$JLq#$hwQt=2EFcCTM>?q0v$^|wdQ zKen4c(_w0NuV3Ouua9SBl&wCtI{)pjuRa{#q$$2a6B#*80t7yUr2NoV`^uV2w`$auHGGojdz`8dDr*GF;w*!1)9_ixVcqr1QV zJo^5Zerx4h|31ps;${24zhCqdvBgn!lm2?%M)xO@GpgTqzpLeN#@~eYCDw^A_^Gd8 ze7*Gx>wo|GqW+~$qWY+T>&9P4AMbt_-|^o+2p{#^uaA0EA8kFBZGUYYtxX^4mvMcz zeve5bFSZ1-Zo~UeC*75tQT=+?{~Y}uhWGD+kNSI$Dt?%*g-_U%{$glb@ zJ*9tM@LZZw9e?~KXS9F$DQmsO8vl9y%iBfwfAjihd`|tIgZ}$V((=R_z81$WebW8C z_51YOll8mcxiqCZcj60vaz^$0TULLFHU9JTdrZ3jF@4N;$hu!NzCWTov4+ok{!xp& z!*@}xx_+yBzS{EfL(lJTpYx{albV}#al`Rr0w33Jy_ygH@z!s(eh>BU*1u6V^rL_O zq~|B(`#Y_TdmERX`1byLH6P0VKhF8bIct2IAMNKIVJ2 ze!Y41aQ=MJ`m&t`^?Nub%}=cHpQg^QCVhDR0Y2)tUmr#8h5GQ;&$!Qb9_g3m(+2h7 zuJiT$_n(t~@}JK5K`z?8@=?FR_28^vibjZ2dadwZ_-4pbv6J_3K^d^V;7V z+Mj#Kf}M|jPiML9H;*wyNt)*V0_)* zH)}ez<4Q}v&sWz+)pq!t`7`@3u?3`V>^I!&&)_0wRKIOLXE`d+!KSlax%an{U?>xiPhp%7q zXnSECqx#rhzm_w~_dNZQGZ^2^^o#ouuZZtOZB!rI>(_Ed`JOlak~0|JtZ@(>n{ncC z{gMaqt>Z|HZ+rb(&i(3_oH75&xI1t0@mKRXT-9k}&GZYb-Rl>eyVvg_7~hQehR0tzOzrOVOWff1GtZkp6EGOx zr1`}4i}?Vs_N!mZxnKQ~GZ^2D_=fdM9?fsR`n8<<9e>FgjBi4GQ+IxpHNC$+G`xO= z!}hCRTsHvce)UVvV0;nB`23kX>bU*t*K+PxzvK+YH)%ZL<1g}2Q-4P;s*h)#|9b1+ z*e;h|AAk1w@6GeyaNTGr-*(rZyZG+*`jzF}uYSq7Fa7fSuV;_Hj;_bQAA3>1ku%!A zXm0cCAMgHu|F4r?l8^G&#SeVEKHRU5da!@_JJ!DyYdG5XL|*!RKKhLuQGIyVpN~mg zBiqr=3&+3zJe8vk^>=Wie1AuNVvYZ_l=;=9xBk2&--$2ssQ~$$@s77x+LFefArsk z2n4SWdHO}WJoN2yc>gK5YJ7uy&V7EU{A`M&>NdQ8xB5*F3C7o3zj|=jJ)(Sf{X!xa zs+79%1;;OKf6h32_zC5RHU4`;{-gU7&p19f{(8@uLFH%jp6}grxk|FH59;?E^xvQJ z%y1CP=XAb+tYed+k?t$$`?=^SSjO%dZykWx3VL4tM&OiJ$B7o<72S7x2~J zk6^jg-sL-IJ+6+wtNo|>c+X$;)`t$CFNu1Q(;Gj={!>0rzfGrBzfIRA?04b|zC+Ud z&-s4;vXIZ~|K9a;mQPD9ulM=rH|lhK`_q!V`Dt6{Yx#!Hhn+NEaz^?7oHakO#UXWT z{hUodW!=SnJ}meczhHd5`OCX`ish>nn3M0cKkz+Uzux&}dmdJC_Z_~A)}Xe(SpVYA zpFRDydG*J9heXbheiu9^Z)JQD=cqnB{d)RfyK>i8fUCwg*8d%z#Yg>m>)-gfKR?j+ z;hi6~>lly4m-8n2IXb>Mkf1BZU0BVJy{>Cf8UH;UyEO?e{S*e;^?K9u;0eFu8%_d z2e8S-^P94f8^)*>#dJsKBNBmZPEyfHGbmv7-CI& zYY+GN=(pAmW9`oy-&lXKhL7b&*S{_GpZEQ*H$Q0H_x(qHmLHDq1@Z0T$o@;L@t+@G zJuhCm{*C;j_UDYh@&y%09@ekr+^>Gg8PkX8cHYFAI6kgl@@Rgo9me>!*RSOaj=zWJ z>6e@_|9SJM$MuW*5wD0Z`h}=Iw%4!ajPgBi{3T~FzMJWnJbTx#<=n4+$r+3(cda96w(_{#wrc>X)3s_->|O@~GYK_-i@$t6y>k>LXS)PzwPGFbeP)R>zBB}>(9@dKNB#fkIm=Lz}l~VF>j&! zcB@}<2IITg_)8vj+Vk&i(3_ zoWb~RreBRK*Ol#e{I#6>)h{`N@!d?no@*KADT6+Ggxy-M|Pvi9a{-fWXtlty9M=jQH zf1Q;4t9So1J||~TzwYlpd*A>5DJkEd(tZCmzv+I_`2PK(`G_qA*6j^`5Np!w4s)`v zkJb)5{UG0^?a#Y@uRy$Tt{Y z@A*;ho)cxcwKnC|;k)R0`Iq0Z=j!&S`AlkVp7VCA50+c40NnO3GA_?s(a~a zclajVudW~5oKN%jo;yi>dh@Gu*5lbv_x*{CCmgxL=g- zx2*YzH5}|8#F}*aWpsb>A(7M04<7a3kH|-?;aJN@zp)+k{qv)ITFd#>@U4#TM86^D zu77!y@29N!h&6nSk64pVzj*rK=k)(M$mi)a%ExvZ)d!+bjPcWIzKiBq{n(9fkH**g zewy)#>bGAX^(f!>N$V@t`Y&tx!+et-SN#`kf1oJF@+ExIakJc!KDghr`j^%15B_8O zh{m^_&u-&C-Z%Jc{k~l^zG6+>S^ntxOx!QpzqH@eupErf!}>tI*gpF8Zx8C%U0=JF zkA8c$K32yU`XFaizuxsL#z(AafAq_!f1&?_@paFC*Ye%Auh{$#y>KzcPvi8m`%(UE z`RrH78PzZ2(CgGoXZcI#&;9x+axFUH6T;vS%C4h7~U8@i3oBj{SH!Gja1C5^^=hM^r(fT*~b!q#9_lhxmjANh9{XfmS z-_x(<+^>GgY5Si?{kNTd$)g@_?J&m2c=d5S;d<5otZ~=!|9aIUKDqj}ocq-;Ib;5F z&)<^zNpx&wgkYlg|Bp{aVib>X)1`|81vV@~DT| z4#N6i!20;gys2!bny&BJfBE{goMFCHC}c}rJ4 z?eM?h-(sjQ)^jw!e|MQ_Ja z$6w32U;UCZ7~iCRijTkK(fppLUz`_dF^7{g{%Z1_>l>5h-2MD{H~Pi-IQ;%R{c1V? z^Qr~i>Q_Ji>pbnc6W@#F+^>GgxflJCNB#ah{h|TEoF3M%<=n4+$r+4qR!7ChU*w~v z-bWVJ2l5kR&V&AT)epp)^phq_zg?2==~s8)d2*O9qrhxA)}CLsevh2N_$K6&w&A1S zUZr25H}TcllvgLdlkP#z{py#T!T4t6)3?8*>HT###?8CF#&t)n9me=TQH+V>8{#C^ zq_g}y`u*Yy>lfqme*bwZ{r2mlc>SjN_v7z>z4Z%g`RHG^gRnkYfK41%#~1B_oKe1G zQb4hWPjsPMmrlQU`rzmEe=xr8`kvK%&_!!sF@3;G#aRDke3ETC%NFhte{^g8%RsW^u#P=6)i#2>K|C~zlQT}ZCc3A(NyHkCAF`&4HR+@FN59d}egFI@ zUn|dYc;hnjcgNpJ>qX8e-{$cJAL|{CFXGr=KRqE`tc`C{|9JXkT$~)Gzdnk7jq0~OhtBe`UCI1d&~NoiztPXp@vW6- zIlSxAtiRj;As*z6@@*bp@Uh;p!+DU%&Jlk6-IQ&Bwb>4Y?On991{D?{wbW``4=9$hnqJiD2PI^gh10 zZ}O`7(a&LhB+bw7M=al1zm{`7-^cfvg1Q(R-zz`q{io^g{WhmugYiw8uZ+Wnqv_O3 z@A<6X=;!G8Hs-K=^pCG!%ekIU^YQKzSFg^m#;>2`dO_LT`^TsGV|o54IfL=dnqOSM z;JT`%pV#XH`K4-&pISfC#TWkZ$6w@kWxg^0osf-K%ZGF^CY|G^yMF6}0~73S^h+MK z`_-@IT(4iv=W+e&abx|GGuHmL8-KwAvwQs#H^uySLOx=RPMN(}lm4)Nr9XeazKnil zKBMn1w?6-6y>_o(g334-@!!++8;x()ipIxZ%m?5%wzK_>zm_w~cM|`X?bPXXPSh9Z zSNEgt#^WzJW9@G{{gOv3wO{>O&iMF?^Q5cohi~KiE=B$wkH6#$#y4xZasA?a9M#yb zel2HQznWkBogp}&8R%E{8~*;#1qbr_RkVLjnqU0<*ZOV0`n8;K{nkL5c~nhx`t7lP z$+;K(qMe{(`_-@IjOzDqsIS;X@on?5vini~?#GYk_vLy>Wd66^_-p;PU;SFnsD3rK z`E^lz+x|{`C+v~chU3e8a@YQn=I>wkz0b${6P~SK?{{U{u143d$Qjk|+eQ5(wm9V8 zX3}|I!RYsuso#Em6#dG1_}cT|+vk4(J<|^2J8{2Q|KeSLK7vE6@gM8&Uw>Av8s8k_ z+dRJ2Z{&>edDpN0lr(>_#(!*A-u)ZRzj}OBAFaHO1KEo)d`tC9&b{)n-u?P0a!2*s z{AB&t^il)wA!i^qq@w=6}Jt<$O3E?NJPez{+mFU@oZiHB)tNG-;s(=YD$G2zIp zHXL8%)1Uvk>mHMq>*@E5&#V8^{rE3!e{9FS|9%3u*vI^LQGRkp_4^CzE7ovmDf6pI zKWF{qoJ;ai{_gvS^*#sv=gpr_NjbzCzL9?EH@4HTKC*I1xrXC6q>DA_Y*!=wk~7M; zd3>i@-}#?#eBq~Fzds}`N38K5+m)wZ`d2=mw=doLGJd{Pzqjp-`OF5Zfkcu z{=R;e^5y?fKZ%8(m@h5Ub-%Iya2&nv=$H9?x_*5BIN%J4^i7w`?*9VUm%Sg@p4WBOw|B&<5d`;K) z{nz}a^*#sV>-B%EzgXixEw#Mf=i_lr$FcV3jc;unvwXwn!%p-YY7+F{qkN~N<(|@g z|24mnGv>do<4eBQ4r6?e>bI@ya{PBuzmfCR`fc;-kNFO02j2Q9em?5|xS!ZkVBJ`M zu_nFlFee}7Z5O{u_u%o~{EFp{_#V{<%N?B`algItv47fIe0hEFTj}>J+Sk{?`c-ni zTEFeOR*}seeO#cRq}E#>wNxK($WLr3ux_lsSd(6NaP-ULzLh>cqduR#--nyD2IPFT ze%p2F;?_Iy1t0ahxA^kB=UeHQ?aJ++5r1;NTEEoY`21Jfp|?JY`HaT5rbkbwUi$s^ zN59d}uhs|K)#&;QIbY33U5>9GY!hGa`}6ia`O^66dHLx1Z}k7t_V?)gneEEgujSmY ze#zO*U(x?8^&jIXt)&R^X8Yu%-=6=HN3)=xU#$k-z75}U{gN{n zU%5U}wo~ng^*!ewV(<3bxB8v4IUKHP>E~DLgX4lf{#wpg^KsluSwE@q-K~Bt=YGdua>nATxy-Ll93P7>*ByN;{eDKf`aHUS2(K3zdVlfoLB4P>qQB_j_%*Uey`?h zzYAU5dMCaUJe<|;Exv4jw67lDSgw11gt&6Qz4B3?-ufthKGJVHAG11T{l%7sc4u?i zAN@DskQdKShxea?i}ic8euww(R==tL_7>lBA{XNO;_>Zgl>c-3Ljdmde;4H<=d1O5 z%3A&@f6PaHo`e4T1?7n?1=fxA7i-e%4s-IY|9ITD8h?LHO89GX{5R?6;IPXp`OhcKaKmvviqI(2Yzz)`goM@x1@k#4c`IjVomxm zzTo5W=T0Aw^8J{VPpsi!{*UsVkss^P_s@^=Dc$^P_*Tbv(j3Vd<@+gVeqs$D`+u<} zo$cP!NAnvw*Xmb~_nyNUH(be--1*g|9ykBfua9~#zE@n|E!OyH zEg${HdOS=Km;PZC@9*!`S$N zT#7M#f4k}@Vomxo)dXL^`nmi3fD1Cb!ls!2ym_*h&UQc6FF9j; z+l{~EQOkOS^?_`~*!Uv-)TML$b)Vle;lL|wj``1H& zCGOt!dkDriYenPZFCC_K_xdI7-t`-eZ_*oO{tPdDO$t*RPg$s^hP|ACJG5Gdw@YTHk&i8Xtej8H{gIzPNsIK91@> zU%x1*#<#wo|MB%}Irpnyat7m@)i3e!mpq!^^YyFc`M*n4y33>dS^vm+$-I51nDcYS z-#>qg`fvP$>*E<2<*t8r(%J6E^Jj8e{zv(?oHWNc?bzDUWupVK3z(@s; zs^9Oj<|EelX)Pc9_H6yGj_*Xjsg3IQ2>*$-{zG~{uV%X+kH6#$>Gul#7P}4KMY&jy zs6I5e`PK3zeA02VU3udNxoG#wM}76{qaM|7TaVSnH|oC${*PWCLN;Qyi7&Wne1m-M z_4~~FTW*%SRKL;qexH;>to7eYzBBS;J)WhHUr>%%!+i$#IhW+4{Mr7ET;z=M{e<$w z8V>4DtVv(mzwr2T@chGDC&T<7<)hzNkLdU&0pe!-v^u_%W=GB_-)~v-6KnVmNEd6; z*}j(QHyYm`lk$l*9IN>*nxFi>=e+gLe_K9&@OWDCVO`Wj%XBT5?aCd0C-7zFYxN!H z)BL@4A;b9g{_EDiv3}$n-M@Cq$|Dx>WxZ*c4!OW5ho~~K0t6#*IoKZfnpM#f*LEJTk<&MU;L*oATqBzJF%=QodH6<@gEQVhtbjAN4QfjPh+B-$~=ac75*V zr>x&n|9RJ6PKd8q<3E-=dcFpA6xBy7&vJO}lI4!{OFxDA;3sK^)=vnN7?aL&-S&6E zfylRCAI0Mr$2V(!y?)(wQz+NdFUzNm>O=gd+gARYG`qd?v0aDb3;*@kUs!*!rv0&8 zPrtl=Ngajtku@GtuHo>mYq8vse#sf-dxPG@8a_}LW71jf==v_(b-zA}af#};J%`Tn zv0P8Tu~z8RgqNzTl&d!tqU7-(J7%Idolov+nQdm+gu=it2;) z?DgxVv)qw>$r$rH~+r){*8;} zjOzDv(EQqcF6z&BuZX+u*PhGO`%jNx|0CnyynT1QAOEHP^UgCoeYEtRk38U3Q?_aBaBWEzaNkQWJ#r=p^&9Ak?7~i-b zv3_N_{`hM-e$<`2{^O$lD_rxo8~u_;v8bb{KDO7d<&5%;o}VY)SgBuf z#`Gb&owvAtHJ`&(Ep-&t$M*WQoKe0LvJ-nZj`FcdU#?$dyc_+JN9}&~YdPck)%;`} zHgQBL#hCO@_+UK#V#jEFljgITeu1@n{epA%`aJ~u=ZyGf+s?-0UTKy``LpF~ZimC} z^-Iuf`N_?Gbol-6RWo{;emnm@%D3J4i}?WjwqN~P&h`5J_;(K2e8k%R`N~i3>*KxO zbkA7(+wT0=`i<=@I=+qj5$ive>!1Hx&h>nn56^#>>sOB(kH6#$#y4pziI2ZHA4l_i z-wxleKcfGa_J7;YpDpKl{i32Ur%tEuK3%C_at7m@m8AdvcdVPfe<6?N$2hLn2RxLj zHGcB=Sgx;M%ekIU^YMNs4AjLKZqe<${dG>hoxhNu_g{UtoAFm`#QFbz^=mn|(r+I} zEoFW+@onk7KJ=63H+|o)e`EZY_J7-rzvKbuq;|bNaD1xP`pHRW{eAsver$(PzQ0{H zKe3iilgq0~KOy}z)UWOsj&DLf$#RUxy@Gw)ztr_n7tJ@UkBoe><@0`5mhIoa{;c_t zGs^ciX?|i&96?=-NoTpE-&f}N)31MH`;F?iJ%`Tnv0V554aAikQGK-XEXOew*GUWO z+9k^!>6do#ndmMSj#*IKD|q`uTHv4qeBcb${>vjiw*$mtylj z)>EwU6LK%cq_^@*@@@apK1U8a56Wp#Qx2^9kHy4Ij((^h) zSnf!_R`MiD*eqCz4bVoptG9eCzgmae z;hQ?X-0@E}-}#>r-)($xe5&>#zH`>&T0a=$6J5+(uMhfPEckT4;qxUgx*s{c@q_t~ z{P!qd({;hV*Z!36kjNSH-!ED75o`Q(X8u(-x?g*}&qu#C9mn{*@s0HtYq*Echn=(r z$>i@KXQ@t)%tDo>W}%@e!cZk zjQ^;A;eKLEfpx2XxY+c%!<>ASxA*l~{TFP1kLtH^JN}!r27BjYT=o`Ut~;WiU#*X? z7meT7ixXdbPR>{Jwd-0R^HIOv`Y6VKq~Etm{UNp#Shsea&!*QM9R1R7-%1~!QJ>F~ z<3D^(&R37W?Yi{Ge2m}T;>+{0Z>3+BJG%Zt&R6S~aT}lis*=3*QOswg-@jcoAF-uD z)$N4;#G3TFgQH*i?OW-W<&Lhukn`30WxwlPzaoE&-~IVb`+Tsz%m%EzYyT~bub!7L zUH`U}@6q$iv3@P*e)UVvwei*Cz58Fx3> zw;zAOb^SJc%k@jnnE!nJYW~ahOCGh<(W~{ra((?;&R6p-*DpDP@kKVLt{xOEY}}@E$6HG9@ejnllRsyFrU%+@8X)3c_BZxBX7oWAkTe5A(KP{VE?h_p4uW#^S5F%&*RQ(8~DkeEwYHyYu<8xBhME z`O)7HV6i5?-g#4N4`uhG{Mq)!`vSg|em`H7@bl>Y4ea-7{kGqgz3;!~H?4=aK5A)v z-%wAnrNFxJ{syroz3wn4e-PgZd%jp7Us3MY(fu2jZ^PGq7rMCh)_E7~hQjdXA*&;s?X`EB602m*iVM zmQT)C>$g1@>0`bF>an-@%J(+&_T_i_KNjEH=Yt_%)L;C7__Ew;WygE*<>$;N#&-gT zSa2ZURPAGY7aj-B`g}Ege|vwMcYhu0N!#(||3^RQ=GE+X-S6Kf@MYxtEWV`oC;VHd zU+UAFU!Ak^u^z2|R^H|QLp_@@@g4VzW%oPn5Ah{ul<&8!fMN|F`-i3v-H(28;|sn+ z(*4i%{Aiv3endWEH{qk-*bZ9%ypB(6Ilmgd)$yI^H{=}j-%nZd5o`DuAF(E#e)06d z&)Ghr@!k6Qu;gPqjp_qYD8~3{wf`=fBRQjdpR(pB*76}es^7LgYMnm5Ps%5D8@@^N ztNsh>Lvx#7EnmVX9XHDz>4W<{tAAPD{@_3AHyYn|KHJ52rT=(c?%Dc%yJ&pHnz*z4 z(eu@~UsS)xtQ=wu2jdgfZ(AR=O21c}{}#ImAN}@heXNe}r12nURKMPH=(f^tFusTH z(Eh~Q_$Kwkqw@paxA1KJg6`dY6Pm*E4|8>nlGvS}UAp}eKVPMfgQrt3oqkz5e{SpF z*6}@h{c6NV|2|v4r{VYNrMcdTFZ4^!sD3@2dg=7bXnw%<5sq(0dk*W@YhOWqC|-F* z|AKV`*SdZH=`0`C)i3u$#=F%oIb;6YPQT<)zpB9O_zQK`q1}2pWZikxMIHxkB{*omtw%dIF`P5 z-jL4n;TKoG+z&_ZR=?zo`ENV@l1KfE=2j8AksZ=2~CSl>*)IB)vSi|+-1G<(h2PQREBz;Dmf zuNH8+qM$zRNOqsUb+Me``9Vg3ne&7CUjOOR>6h{KD{``Zu8eO|jJSTuqxn^xMD?NB zl~>H8iY8@q^-B&U;gCOQ&DP`Xy&DzDY6S`X!I%$95Xlhh|q^ zO??0A>X#f&d?$X6jHCTaLOzLn^}YVnrPD8C{gN{n->evM{URSVch;|h_o_Rv9Ulhs z17ueW;;Z>kzcLOZUH5FiE9S)a!u{0lSHI*8#y26KuATAw3$ez3jEmR5e1hB9PPf;u z7O;ALHKD%X4D%&q)cem#r(eeU)qLCfw{`m1ZvL!1{`$9deDGc|rk%YZPGU_u%Xgo@ zb+MdL{d&)#TdNQ1hu25i`lxmO`z~pH#Tq}Y<)eSuPQ&_8yz*-JR>ybJ49OYgJ0{If ztl?vP#F}*aWvPCH@x4O7#Tt&)d>5^6YlpG%Lvx#7Enmhb9XHGM#*g+nj!*mKqyO9b zsCD{n&r|5)8};8r|L@Fy;9{Jk`jzvJdAm9PKzdZa(fEF!l~1hI$4b64j;sEAl0JR` zw^+l?^3SOxALWnjOa7IOT-+}@{{EEaY!6}$$J+6YeAMqb=)b>YiABYBRQjdza`C2tl?vPqWX=-_s6V!Vz=SDXnwcPe|vQN(EV?p^QPCQ{teus z6T{8+?~cC{__%)Scj|j9KCCNaIbGb@?%nxS@4vdfOu40A^Tu^tqw5F%`+w3n>7zT}MZ zdHo!`R7?qE-Po^<#y8gcoT(4Z;!*!eyPLPx{`CD1xmv>~de$x9Z-4X~{oMLzJ?v4w zR-W~fH!ibXNjXyBQT{srOv*vdDBtGs1t04jj&IibHvQ`R6Vk;NN3|{C-}JHn=;x?D z*p9^-4zFFZU5)x@?ic3E@JH__B#SZJ^o!g6E;ul$ZR?}({-XWs((%Ldle=yzYdP-k z^H1dBew}_E{|n9!T6vbkyDrW6x&0sFLC)y-yLo)U$9jk3o3&l^`fbmlvwmf}^5)OHKbn4y z>Z6tCaoBXWtI_yN&M4pLd$wM`>h1E}mm=$<{Mr7m`Azq1>!bAjR{CZ85o`LFmVTd) zexskG`e@~O95$W)8R?gt>-lt^<9$!A(U@P2|Ayb6PdGBG4ab-H^l?m@zv##CH9ht5 zwevdqIjWCVp2uO+*{*#3TF&)+xPEYRp9}of4E)D(VQ1`*^vnHweKVc$8QkBQbUzt~ zZ5%U>@8e$62l1VFe2i~<{dWFYJwMR+QomAL>pxWgCcUmmiR+g#`+eShBTqxTy*gYiw8Z+!kt9&k=-*Xx7FS6dv?wv2zf{)OX$fBo5VuIFRCV2ANV zxr_Bn&R~4ur?`IA-*tV|ZuM(9qxwDJe5d_R7}{MkXqOtV_FTP^{L%Giat7m@kWcc) zSug!QUybji`L5RokFOSfs_*rmhxMz6ku%H(oYPRhDEEp3y!lo28}{GL{8@Q;e**i- zs6M>w;NI`ba$YyOenrkG-`hp&E!MU_hOvt~?<*MnzB23G)<jUTPNjsw|?vGIj}M*1aZRKL&SW4>*Dlva2v{ZfBojsMuLy!)@{Hy$6=M=Q^A zNPC>OzFpSx2lqd7zc61?4vB~L6OzT4bo#|@e`ueqcR0RTL3%&A>mHNt@9Fo9&#V8Q zq~D*ia)^D*e-}NDoKgM$g8GUz99qi!YSPbHKRM@;e3ZYwf78#Y-*eD^-u35G(sINa zKDH}Qzw{g1X;>c__3h&L8`8xZKDMjT_)E?x-{$e1YJKN_!tsTldj0;8v>dUjO~U|NakhFkf1xYyHRm z!*TTbjeeOAIS2P&-SF}FYEcq-tCby&^4Ixi!sq16-RBqPtNVR-9q^?-zBoQt`w-t5 z$F+7C-duITj{s0 z>vH^eQNNM%)%tDo>W}#jXa~3Jqm-ZH^QeDeK4MFObz}X-n)JHEoP3nGUHh7J4<7$& zeX!io`4RWqD<9|Cdy6lx4}L5CentEGI+bR5r~O^D{gLz4`fb;>KIWtDZr4XC|5E+F zp}t~Efpug3#hUcGgQH&__pS8t8TI)*xc)-USL?T3mo9F-)BYxSIIG=Te0hJ&x6&`$ zmD@if{^WeMeyK~*-~IT4kNe%Ok3#$x&i}CY;dHP%t@ZEHxxXggwm%+6KfhWZY*(Y} zFXVhRAIH`4^#k>EG`^>Uo+r2O&-H!#p4`UWk1x-+br1Ua)%sw&^7U&uU(H8dj`d5< zZvI;J&Ck8-8{YjdJPvlTet8_?JE0{6&(FQ`OAC1&7QojjjzUm>(x%3PV4-mOUF@S?(;D}`uWxRpnv@F*Vg;h ze9OmQa;}Xp^;;tb{W9N2^~>Yb($BBf2iuiD{#wpg^DWmeIoHM)$KR~q;<(Pw?fj*t zdiuo<^z*Cr!FDy&FDsH_{(E$O@UVXS>%SL(56^!G`o($EcaQeZjPHbhb~k@!V80FD z!}?tvU(^rt=fBoCuGKH*Ey#Ai`n8;|?q8Pcmz=Tw<#a_rYJBVa`5(DY-HyxkUvjREZ;6d;u6~*S()iZ-*qkl>{Azu$UHRj$<$N{Y za{ZEXZG3h7^?!c|!K@%Exi~c74=i@onRQ)hX*QwluUmo74X2zX^xD`1;lG{!?(Vey`T= z@c!NEH}&7%;(JcyLVQzf{CM>G?$0Ry=k$jF-0A-=%0-Utk{8RpzkNQ0a{r3yX z6I%+b8|yFDq}Lth=l>W4=QsXUuhsm~K(5Pc`tk0+>dPYs^H=}=Tc=;<>s~*YaC~O|Y=0Z`Wjsf(n;&po z_2yUStbE+BwZBLCP|s!%M@<;(rtE&F{UN^OjPm`Klt--LJ0M-GNgu`+d_4YK^|8)> zKW60c^#k9&98=Ub$lnyk(^P!pOWS$*6^|aZ~cqz$9C`Oqxp@T zYxS$gZ~c5&^06LKeJJJpx{d!Xnj<-*d@^sDH?fuv>5uB8`Azd}>!a4`mM`Ozj+_1&>7&Ls*#Ci|m`(Yp|7d*M`Rq1)Tz5o2NA=pf` zv)wP%Z(AR=O23CkuV0P$=r`^c)dyNxF{b^Ezn633J86#O4D)5puh+p=`VGf7p}t}L zcJ1qedME0q`y75gWbgU`j&G&}Ot!&&G4+0^vim*#T8{ndmz**GZKq%I%t5$w|B(0j zy7-Roi*e#RS&secmz=@)CXL6<`CHcXzTe^ab$kAS`vtFh9QOq4CPUX+iV`_(TwgYnIp&sOKZ^xO0F%X%ZuHNMm@ zKA*#WXMQ#Dc-ZLmtIT}5cIKqB-QSLHnosi^^1TM*n>3%z^b0K3BdibPCk8ql==X{^ zd-0`ynQwG{pO8@^UwyCtbm@%W((~VT{%+eZ^BJ9gY&U;KyPGW>zJ9&_ znH;4#+?iip__=cKSHI*8#y4v{ZhfZ{%Tj$r2KAPY3@U}i`UH|u8)_lYoKdt4X z-&l{ZJ`}IK8ot%>oisyoM){6e^Al_M*6O4AjhrF^6KC%)4lmA`KkYCe7{dxo>=22<}cQy(=Q(18ToO)XX)b?lq1&gowL^GoJ;ai{@8zL zI=RRh<@+gXzG4l>>h^ch{CNC1k$;_j|B^I6v77MGZ>=51_)yzo4BzVbPMRY*qvP*y zS@RQX_zp-HYtq@iJbg63ku&DMACu-I)^M!myJ&uO{Z@Vc+oSDI_y6)cE%~r6YGOG| z*Z1^~JO1)GuHV|6Pp`B5TL#~w@$LOr*T1oT){p-8N4VYtj!%_?{-m}3W4|HslLGJb zf4%=!^J#r<*AJ45w&O#6yx-?P<8$h$_0L+Kw2OJ;Izr!ny1%CbPuDEh)i2^p&M2SP z&w;*}63Du-+|l@UNP5V*&R_KXqyCe2H*c-|>H8m2wT6%7dhL(=)OqWlHNQvsT6xw_ z-nh(iNBs*qqkNmkx9V5@6^<|B*q^_hkS^B7H*2|`eye{k*ssoC^!>x}t>sw`uU#(H zFFB+7_1Yh5UySh|%XQmd^_%9<)<^OEWBs4!CwJXc(sDfgHh%0E>|Zwb-$Xy{n~&pC zIKD~i+3WXRoJ{*;xt@M`{gOHg>mxG`RtMg7EtWePf5{o;dxPG@T0a3>j7ev?qwBkD z*KK{2X836T=jpdShtBe`Tu;B`XZwhbZ>>Db;a!(zxo-bAsh`Lh<=Z^I;G>Sh@l9Ia zUcc=*bk?sd*V8Y*KctSL`e@~O95$Whj`T~;DBtPkdp7mwyI1H}$IapQZxG8x_%hR#UQ?#Qp=r_Z~aGp zw(D?w6Ut4NgZYa!d@a3?ubtOXM^SyW@;nZk&T@VITFx*Z)_Jt=$i&iLMLxs$vfQQm<^I9=Ce3Fv{Q_(E`UPiLzc=fonQ^ty$4dPk zg7MADv6+5RE$V3f{1h3bYMp*$rGAm^dcKwV#r2TyX6!rt^8~O=z+iln<`dU1<^#am zuYN7(di`Qv^{{?f{{8Xoz2DT8!T4sxH$485Tl3qmel6#E{c1f=SGDqL`iVb@^WVe$GpghE&ll{F$Qk4FzW*JcciwM*^xJ;*OTWR7tIvN` zU(~O}*|tAqFUF*|=jz?}U-KI|gYiwsCs~fiuRm)(Tz5nrJxjmd@5-{=k$%Y;<$Ig7 z-eOH0HFbV9=`45j`^wZ;TmPmxK01H#^xK|8*KsG1r~B=X{H-0v+8^sF*7)fN4zVVk z<@(h~A;L#*L|mx?jz zEccvB@=^Y}_J1jd$d=~U!#U_bPrs+E`HMAtEZ5U7`KhC@K2T37*KquXbg?F#<&MT* zaz^@KV-Gx_`*+pKlcOj7i;{-ay|W0KNA0W`%>4JDev0(-~av(av)zd@*Fj$ zYyPA5$M_5XHhc-!D{4C%@WHRX|9Cv>)9Jg$U-$d&`tk4Qe7fO7zLkUiW4YDJjz{_H z%jf6Jr~jPk3;D9{-{OnoQ?+P+EVo+O;g;{5^|;m!gM3Nz>-EueK>z7}!{k}ANyCah%f40&3!)lt?4+%=Z$ZN1dxtz_qXnw*NYQhd``|+^R??*AM;Vax9g)IwT0uy+ob!8Ed|z%*B8Z_^t!{G ze3ZAg|E1r)m3}{?KA)$8ealBKa=v=}ZP%qg=A(Z17GK_9{;l-Oa!1!+$oXphGH(9) z8x)k(-mZ_r=R^JKd5-t}Tl=2vG5ykS)XA&$!E#5}UtKK8rb^(*qT9juS9wu904 z=kk5?!v2}(+nO(R^lE*uTwlMI^VNKe+gQKkwBuikKR@@bzYOkw8Q!TwlMIbHDl}=UV^ay5CJ4nJ?^O{o;PaE8=@WeA8M!#5Yx28dTdd{_Ufocq-; zIoHOQ`t|x}=D#w&6B@#c$2ayH!|PXUr!VGPKK|1GYvaobYJA)8hcWK_d}(}jf4Lqq zZ~N7+<=n4+$r+8W=5y-$;rjhbm#%x4*Zb#3HNLymuhxK^`yGGD8H?}fp#4D8ufFGb zlf-%9_^Uj;FW_70_wz+LK9BC-z<#gRZ~I-@;@0=`7v*k#qd#NueM3FPmICX>`y0fX z^tywi-x}Wud%k#l`-*bEj_%*Md>g*@yU@k0cj8<9rhK>S-^h*ed2oOB*75x>_>K0} z`WViy{z3RS54&9-^;mqFkJ!?n>el>Z)9Vh7ei>ID|LXB=c>gK%LC%-+CH3Gxr{eCh ze)ksNGx)3jQf&Nq^#13cv-|{mTjdIeGB~A9Z&Q`tKK%C$>1GZs)B3 ziZ$tVhdKEuZ*BbOw{NB2U%~xrF4(tx4TrMeMIBC_48rL$95Xkhk9>* zHGW#{zl-Kb&M2RZ8}oKEejvS#Z@M4-;`YzrWBuCtsCD}IK54mPt^d~YO{fQKR3Dn# z{A&3UKIym_w~;=$-(LBs-)MZ>`D_>8mHy*(IkwZNJ`lxXOnl!i`iWSR&hkgkSL1$B zzGGGnv4(^3iR!nlk6NYQE6#t5-Gq;Rd$vAS$9K|rkTa@Z?>ThrU!&u1FusTH(Eh~Q z_$KwkqkQ~c?0NdF->1)jr%u-_Uz3lr59gm+A9B_G>iOj=eH=WUdg&~G>G<2$N3G*~ z^!n9^kA8c$eoqp&vYl#t^*zh~bS=&GPJE$X?ibasw13^wHu`9O(`>`>&B!N5`Sf(2 z&oyT|h>mYcH@~8PDKV36xNg9S@5OS4`SMItbPT@wUjOOR>6fv7$;tlbTkDrRTCLU& zV|?&dG1h-q{p8f8S6$A#-_x(<+^>Gg8S|fe{+85#(*GF0GH$o$A71;4@qwZka8SRn zHJ#pumba8*5 zd{4iYGt8GzUh4Rqbo%91ADRz8FI@9>4aPTXHaFK_lBO@$FZRExWjhUzZ^%}R6Gx_F zNAZVlW%oPry>LI+6!V`qPxjL3m+|;Z&KTcz`X!Ir_w7)hPr~+y&*|sneLsWznn8S- z;Pub^+==gm&#$nelMr7*KAYz+yXnxqc4|^$X50Uq(i`>qne)`em_xr9P4N zx4C{%-KXpK8q_a1_dEU)Fc@F7v-tQ+-6$8^X;>euW*vVque#O`oPOKspE-Z#;VI@n zZ=Chg>6fv7>CYJ7cKRicI_`P;g>GH_lEaDb#Lp4n9P{5HA)n31UvkFywmbjD`8cY} zcDlWOwSdzV1yxEYnUce0%O)h{`N@y*DmZ+}VCW&U9F!MJ(X z*XsJH3y+WSA(vtd#~b1#)}*ui(eu@~UsS)|bLispXRUc#ABFkWRnuGl`0@3j?~?8> z*7#{HAN|I55Y~s{l~=>JI=*NZ-5{6r(pdQSJ^NO*YO^KKJ@T0(nrs(fEF!l|!s;e=GUUIPTf{_yycz4L8d_r;>b>KlUH;uWaPv zeo_7Yl;&&?Vhu-BAJp$Tczx|JS^30n!biV7TfeL0J86B%8P)G^N%IqH{fBgklS!vv z-0=;3Y#-71{+N|dtl?n$d6@5_`Q1MM?a}c=&+osedH0;RqZR;e@q^)}KHc%R`Vaa4 zPJM61hjnGu4;>%McjH@+WBtje)h_+@yj|5C-0xTQIuPg2pK3c}zOKE}PXOz$D z=RjRdaa7&duZ_kx*87~Tf0wsEEmGRuytVeH?|;bE8op8cqu=P~)<0{0kMgzhte?Db zneA%SzmPM^w|RUg^%LtIjxXZapTC`uF4o33q5M>mkMh^GFYwXNQGKu-i!~fxyJWi> z_0QZd%$MPh-cLvtW4P%TxBXpkU{c%GN8$bA@k96b{N%2i%6i;r{HXp5_AhM5VvV0b zQH)6+`ft)B_s++9hvS>IzP)~%pRE6yo{C#<^~-ffJU*`zTOZzaX~xg({}2yy zM#taH;|o6eIUL`t?V{Ijdk$R}-=zC{&$r_G2KqUw54Pi8zg{}q)oA=BXOwUBJ)3yT z=ojAezkj>XziQk1D1E<`e%XG+TE2|(b4fnRpPgUPZ}f9iA7c*7$96T+FFDuq>3N>_ zJvqEojPc*_`|}A$X0_q?GM_$gQ4adE@U`H-q@rb{OLub69=QKfZpu_y*_q)USjS zacqIbe>VN9siXTNWPUSm;rM2h7uGM^r{+gLuh)m>w{6$=^$Y-g3MX$Qu_aDcXTJOE-7xeUVSRV-)CL71rkJxnj$DcnVKbjQN zhxV~^W+h`yZN)N8vVR}d_#V@TI)Y2o$YF4@kkGd_? zZ#2H}Q+)g-x6;$k`_r%G4D%f@&l>j6eS2`?dqMc6U(szZ`XvwII{`1p`06;6Z9nX# zvt9Z6wVZMNB5uR@qTI#$C1=ckqT6|k>zCJMG(Y+|tdFGm$#`2DeA^QK?b10e_~WnT z4D$iwG>otASg(r?$6s;=_?D)s@D3orkCVfKHi@|KS%W;m&znF0DQW&NSd{YJk$p8ep*{okh> zJ|17K<5!1o>iBZc&wLm1-NYBi=V~9~JL9<44ugEiuh&P@fsOC*`H~l{7ddao57Zle zISihkEL`)pl&|U9i7)tAzjH9Yza-@oi#Y0g)?chi*H6pqeLf!7bR3Lt(h^($qVHQj zV)=&8hn@6za^8*~$bV^klkUHi?}YtN>AwG(-!$L7#g}~FO22Jgm*c;S`i-2g)^D3v zf6RA4JGfmRrTm3^-Uj^(^ATGLtQ+eu)}+@R=H#Qi?esb69z6cl`e3>4{Qe(=kNwl$ z;>+uU-%7t<5x=ifX_j}|-$mOWIbW^cc3taZKI-mveU$Pq)$beXE4CC^H`ZUQNv}IN z`sH!d(W~|Q8TI*mDcE=7J82Eb`D(s)UHW4_>UVGP<@a;nO22GZZvTwX-Sc-LHNv=YI7|&b9HSevwbrZ_5||Ez~cMQ_Ftx)$>!ftI_Szn54I~`zn1gW{mXLwl5=hQ`zN$dFOJanV*Qdw^P`{l zr(etYYQE+ACFk1svVZR5heq7aSHI+38()0CaP{=d{Fla8Ggxi-Gq|5CqVjZWL|{MmFZ zwY-+yOWUyJ*Z59lAK9|~{C(W#&o`c*GXK&1nVhfYTR#5I-jUzYjQMZ$`<=`CXXW9# zBl`K(`uL1?^?7vv#zlEw&DVZc_P#!v-{{X+eBa;?v8BMeF-~Gldfma%FOU0H5;$(8aB{{a^E&*5h`4BO;JE5B~W6Y>Dfo3;Cy*2gK5$oX=AWOl&eOb7w7q}F zs&3QyYxpFtx^?Np_=1nepQ}FB`R~W97-Bc!qu*GM)<3V~gO`di ze5>O-X^!NK^8J)FKe2|7{l8d~&UWwVqxp@TYxS$gZ~c5&^06LKeJJJpYW%d?e;3V> zoKZd*H|FhT{6M1-R z;r=CSeMN7!ojK{t^-IoRe3SCsoWDKH*R`*U<{Q=rvJnIS{gb9#>j&1a*D~gott8(Y ze=TR2FO{-nOXSnH@$r|O!T4t7iI2bJ(fppLU&OD*k$z?QuwHy8?uR(+cKju0Fun=# z?b}~w{pmk_Kk8pN{&BysK7b(xI%Rz82Ufo_U)IgjFFwA)rkMXcoqFkP_e0NblcZf34*)AOHJH-EVXKqPng87$34LrUdNWhJL!H z+xlyA*@xxpp_Pj{Wqxjtulu>*|0082t>tsl+3pwXxAL#!6Wz{RT)!w^v%B;BnRR@~ zt{C_aadrD=a+KZg#8-Y#-fSrt--O%}`RaT9r%PwM8S9svF~05eOCGHj>k%H`;4U#% zAH&~8aN^7PGxOc8e(BF(e3Mo*u3wyw!*A?|!s8p`P~%Je*54OH+}rg4J;aIc#d3!E z5&%1$9-MTx`>}q>8H{gMzWDhsc{D%P<7xWUVh*PochuvG4`#XF>7OUd8Rp9e_V3+n@65M$!|cF_;SnsnY@FnYckIiq~ubLisZuhy@vkJ9#AuMeV~j?RC-%bJf^ zto7eYzBBTx{!6j>fzr*dhVK`YBi5v!vmSBICHW|SEML>fMb4;xf6AJ# zSi=$RUwHgE=)b=tJ798ZIWjgXpv}N}@{ojPo>A%%{-ugju z(RO^fmVcM;jL+%k)<5fU%l*f4s)hgby{BuI>+1KS$CES4=k;@-F2-=P+|l@UNSedB z&R_KXqyD>Xf11w^$X~4CW4Ye*HONn$xBht@Un|dYc;hn59rZ8djPh+B-%0(%{wW+^ z#IZkrJ0V@Hjc;c8CHW|S?0+@A`uBqU>imVDFYW(ue6H4TcjS+sO4D>@46Pt9gV-_jPku*)E{E4pWr4jCY|Mu zuJ5wlwDnP%;a21CpOWS$*6^`hZ~P@c+sCu?;a!(zxo-bAX}!o9<=Z^I;G=%S@kJba z{kG@Ob@9#WAMg2A{CdA<*?~2ccfo(M)_{PXM=y50XNR4uKI!d{o4fx zChphIZyuY!c;j!=sr6q=FW5)@8j>uH9GUFX_vL! z8T;0M)$lThx_NG$MyPU{=RPd`0Dwxzy56<-pno zc7A;KM%(@D~agXaEx_Rc7NagtlwHYjPZ>*EH}&b^=moT>$lWhwwveY zY4W>Q_?6|Ne;w+#?QecxZ}IgtB@o@tTU@_(T;Mnu)<;%8zaQ!1i}vs9*K&sWZtgP$ zZ!?H5+XFx7^`YtS{WhoUM!(i?)X{odL)GhX~)q+jf}8~u_;Ep@bBAIL9N zYyIb>vs_=l$nOf9*Uk^9U*uEcSl{y>%PsNJ&57@Xk27pEzDe_mkH6r7*}Z;=o7Tn` z8C)OjpINXI-wQrZ+%Lwr_4zNUsH5HLm!PlK@8LoH%Knk@ZS(mv{I*~H(!T)x|EPO| z9oKPXThKTA4DPIIP{6yhmje%KaDWF??W$1&=AV^5tO4;8_V9hep4A)dQKNzCpkggD zgLWikg{-YBARTFn3NFTqMN+b5ZPqWx=V$fH_DA|&RcwAu1Ho;&=`a3SN0Zb5#NdWp}!I3EY9^Xk{)+`fLs^~uWDh+ptEv3-Z% z8v>YEFUW5Ozq!Mg*p64;<0BqD?!5Z7IJfIp`}sa0POJ5+_1)hOtNJC*AioLirH;p} z<^FY}o?rOEVdvGa#kpO->Sy#je^RRi>TYxSy`gGSd-r^>XRl9Y_zCNmc+{R(zZU0q z{pxs2{fd3aqqJtq+jI3waao)7`c!tJZa6ZjZTCm%`@KFtYR{qTaHC!K`y0UbYW=c zs^1n5i=)A_V_ke+G{X=-u37Atp3Fsd?Wo5KXnw=2m0CT_fM3IHTc->X#OS6 zD8AkKoi*;4tTxOq;?(Q+SNIoe;>UJ9{Zc>t{?Oll#m48KGwzeBIP|<9-!I74P)R<2lcH&wtZ;Ki}cw@zsJ~ zwp*=Kcz|!_ejeZR+sc>!M$bRL;}^%LYM;V)&3atR!yrE3X#4^f+7UefpOz1wFL~2? z#Cbn|(EnO~wf9^h2<;3r%aU;&7_1o6f zpW~x`%k>uf`LyCMdAV!@eaQHxTc=<0Beno}usQf*M=P^XvQI`U`O$jjvtTa`F%OnZNhU_4{?!`eI9ib>sC#v8KFM zSc>1|tsOrYw;!e7Z|Kjrxxl{1M_j~t^!(edOMi}!`aK)Jy#MD%>6h(}uD=lH(fTEC z{`ngel+@neABFux{p$Seeg4)yXM0Y+j2m@wv_9DG==uwB9*vLV?)dsalwUo5^!fSE zdLo3R`Dps_MbFE}_rJl%F#oikoL4T}+Vjh?el5=P>X$g}{Kx!VyMCsAC5VNvwoUr) zW`1Y55*{P#`={5>XxG;-x1q3 z^RLBuG`{uoFL7?=_g_lHWC*KoE>q!d*{rTvdbfTi9;@lcP@(VwA<1l!>D`)*e`^WK_c+{R( zzZU0t^-G*v`Q`EbI86Ow|Fit!FwTQV&u?tkpMPt=^q+&rm#6i6*~;%gztcwjlHVEs zGAm2#ytXz#ZSlB#aC%iwypZD`LKAQj?SlFi}PrF>-9^V zTluAaz44j;yYu3Oz4FrMU#+kFo>spW=XvK};@rwFh`Rgz67r7ytLNW(zO4M-aD0m4 z+kgFRah_Md#JM$oj@EDcUD?O+YjM+l+}|IiKjC*qO~G;G_2=(s_xtGk8@C^W?>~~Z`yZ)<^*(-W z-JJZFdyzpoG1azre@*y^0P# zo*z9MzkerfSL`nM7&qoYKR!Q;Pth%}2H$3WXZ1*&QGCB;^(WTgBR^tIIpgB#gZr5u zQGWM+J}mJuPow(K=q;}%PMhO*Q;)bJi?>REmKlC)j1 zHhx?2&FBYgR3GYXdA0Zw_H?+(+eja*cUFAVZBlYjBXCsDAtVqn_07gwKDA-31@x_G*1>=66;;h%>5R?>Tgv z=MUgxegyfw{Dk}yYxzwYhiBIZ{M_W#`h5pHu?9EWA3a}<^`iPE54}#ka>ixt{M+CE z_N0ExdGE6ArC-MF)%q1)mrd+*{6ZhZ8P%_+Q?HzH8LbbPA7Os8#_4YTm$ZDne)W8O zbpPA4`3Drm7#{DR%Vpcw>ThzGJ%1G4EE{p2SHHw*@jn~C{q##b$_Vo`tPgcpUM;_u z`uz!%+xA_4=dNDx`hllYubgoi>z6o#{ALYcT)({DsQx(5g!Q5B%B$sfD%xB&l-u@Q zes5j96pJ6n(f#LN;*8d{E5_lmE1z({ ziw>U*e466WuP`Zu$kRs*|Wb;7^R@cfyXTE3fq(es8sc{u9NQ z;V*YMoN~rx?fGv%{`_$LqPxt~!}W{yH60#|&(tsLon60|v*;J=0rE?oMD;-)s(uS+ zvQ5itc_~8uun|Woe!wr+&paZEFT>I9`ei?Y{3gX0zkWqL>hE>>4f4zNGiV8qFNohI zb$RBLGcM!#m+=hpo3*3y`4{Ko>h8jMX8-eFT-TV;(A35CLL8ocxgW=$R=>m<jN~1!8qLUTgzFII2?Xw?nnI`i=XILx83zioH2ZRub<`jyq4{C`c?n$ zQ?=k--?RPE^VL`{JicUYcmL~G>`##21V4TLWi9VFKJp{hlrt`C^&8}O!u(sT!Lb?NO$ljv7@I%T+wyAhW$fv2v)z$CSTCyISK(v) z`}?Dw)o**ALdS13elz2LGJb)p@*7+~yPv-$^gpQID8IjeN3m8P8}VInT#aA!{1Raj zWAJ^+xlF3qHn;^GtMp zQ*_I#!MB;;Sv?YG6yKjo{fRaB$d6c4&bX|df1~{VJ1ai12FGT6H}&T||84#Jq38GR zbKZbkbYgHb|K0g_2EGjce_4I+hA%M=9X_=0^4rJnAB&IuBhKOZ5peum^K5NgOIY9J zuWP@LUld=KCS+^tzX86qRKIw?&wtIjzs9K>|7!U}KcAmpdOGlQJ=8DwCC+~Scov^G z&Y^e36e8=!acwlevESF+@elml^G~7tnyWSVM9;eAQv4==wtdEpaqh?GXXDq}vvKm~ zW%?hDFT@$ew>!Txj6-{jBgx5bzBy8XmI zVgKOzpQm3OUCeXwoApTIjOzDQ_~d=YDK0Ch2@oY(b6*LNA`{{E;M*9k2Q^x=(j?KyN7AM?t4z7^xf zIKN6C-gRmA-yQ$J2XRL6?anXoG0tIrv*tms-}W53j^D(*DQS5>KJ&gK#yP4F=5eoI zubg=`(l2pF@x4zP53xq4h*B}8oS*-VK3`@3`un45Tqm@!QNPR|u?Al&AMiV){owk( zwddimGv|B{RQ@$RC3mzi8!786Z!f4`hhq9j&(EOx8`9C-xx>7?@jyd>z8pu zd^YQMBfq2XuhqB_XDog)?=D+E|BiLj^Na5zPU`Qx`n5Q>>$hl6wrP1SFC`$4Hd{XN zdz*dy^w5uSTS}z<$KP+N`zJJY*!*kb#&u3~eY(GXEza%uHu5Xuv2G5(Gj_|kvTRX) zv$~1vSN$-bYo4W8{*A{Gs~hH(KmS^s+w}`S%~+id%N>4iI55FR`GueUI^S3~kMUK0 zXW)}OjEpa1938)ik3au1Zad+ds=pGDN1Ib#ipv<##b<_#3>)PaesX)9P;|u+)U0>Du z4!?8l7yjw={Vcy(-Ng0Fb%Xk2oWuG^>QClj%db<;yz=K?i!+RG8DkfW79U`XK{?k; z+);`jjL$dhPsADIH>tn){7XFQk8wVqel5;0zPLspUUYAjS=hd&p z8P_kab5xyb|3AD!zr0?-JtO@RXOQ2d?Zx#=JnHYf`n5RY`rVn|s$b#^@|(eL<~*VA z$LF1o^N*j8oL9f-FS;4k?>qd6g-+?XT2s!?HAcVh$oTj7N7cAa@PF9#D{ZgxTk|lM zf3G_KCC;dR-w|f9hDQ_^W6Fp8*0`yMFuxgocG54upHTBm)`6kx8%go?>u2wGWjQbS z>u2>xoKgLLy{SL3hDV?-#+37W1*6|rrhfbTqiS3yw6IaX?KyN7U(-{8{U(2wKgNx5 zj_RYeXK}n`?Vnf^KlXog{!5%ue7o~IYrojZsNWW+4tIv%T*7*Ih%>6+FX*pWgF{z->a#lAiyUzY6}jGy=Yjd%DLYw$6z zyzfskZp_oLKC<>x+BG=-M7dZ~&b%7Uzr-2Ew>!Uc?eFqWm|w)H*YB@M+YxKx$Gr0N z%lOLvW&69kzpU<`)c@xDxBjC44qt}fTwuS+pI!g8yyNlR{u_>;U`O*?)_N^|^h?{} zOZ4mDyWu!S-P14qOoPvlvbNXovHfb%67g0m6&}T}!t^@!7*Ka$qFjN+HI-k4vl*L3|jel2cV{~F}?OHw~#k!SQ< zttr>i^7qGs$qyBq(9KRMft$#LtiLd2h zkl(ERT&s_EUzZcVoBAWpqxIX?)t}?LB;t(4kAB3K2J6QDi#6r7f}`IL$7$8z_~NZk z+d9XT3XXnx9P{*OeSAZIz74Lw5a-eO+I8s?);Ia<^f@EKS*?5jTSC3T z`fqQ3`T5QNL7b1)2lL7u|A31)kH**LLxEaF z$1%=F>w|eUy8c3(N8@Yj28Z7n5zcDQ!>^tnufG2+p&x_sMb^#Bws!r@yz=#Hah_Md z#MzDCH^eQ$4&pa{PTpGm5|6gaI3KN#v3@Piqw%fRFL4I>9X=;-Ex-6a;skzcp2hI( zuV0Jvy!s{1So|(iS;H+`nGj^7UwtR9D6jAFPbvPm{o>|T`xzdeu^u45HP3?a%j$5y^Iwbey!s{1t?|RUc>*DK{L=qg{nq-6 z!}IFb;yikMS+8H>JPW@#A4j@yoIF||%qxHXwK$K)w|@R5&aM1*zdtnfI;H=WiQl{Nnf}-EtGx5Rqx0(5;ykZ@iE}Hzdi?uTZ4qSM$dg!8UMnoc zWe&IP^Ei%^N9%)mHCjIt=h67q&%YXJ_x`s8CI;t6d-Kctju_{o_3>@iet#Q%f8&Pu zB%7ZN_qzB!dwsn9u56Lby*~Q(-TR}`I(%Od53!}ex{)Wbro2{g^vmOZlzzY86yf*L z_cu`QX#KX|g)U)z!0(I*XSHYJm-$C~w0_yHJ3fO~);lXcuCv|yqZ0C9Fg~~W!0MF! z7h4kT!RF*2<2U1wgRc(_zkdo`?BCJ)9e#he#!cgQHh!;(xWMnh^V{!e|M&Ed0C+I| z-4qvb9e*I@j(b<{AS%x zoJZ@oJs0V7e3wj|vGw2H{K~wyY=8fy_>R*D+Ew$9JU31N+~=QM*IKrU@38p;?W*zd z-5594xBT*R&88pk{x=>^+vzm19a~Pn?)ASJ$7T9`5x&fJI(&$ax4ydKxH|uKLwWhx`H`kH2>McoyHkv*HtLaM1s= z_^$BBe)Qw>v-lL<@@nvH=66<)#2Ll+TT*{w4L*+lVof>o-qS~m8*y&cuO7em^I?gP z{fO#AQ7*40PMhO*Q;)h4s zPlucF8R?_)8yx?DqL^LrF@O8#zdbwtwe#71@bSJQ#yP4FFMeN>PdblT;DBr7krEx`|&FMZsvE^_z`CmpZ6R( z>MuI~2Kl}Gl(fHMEx%dIpT)=fj$WbE=>d)fBVFXP63MD?NQmRG~$W`3bx;tb=z6o#{3gX0*Dt=0IH^C5L*e;N-IZ7H zTQn)#w7ixVl=D5m7g>rQ>DS^6<4b5abvT@I=KWZ|#2Mr_E57*rOFZh2{Rrzr-IdpM z{7wUY<@Yw0ZBi4)m+6Q2>U;es+j8dpc>X2MAiqgr#Py4QO={VXus+~cjMXXH5gps| zTHn(zD)9Kz&cDPNHS{$8%%3G3*p zU#>?;oWt+U;ta135Wh?6#u2BSdB1x79OXA_JmUJbabrKi`cQb~wGj4U+sH51&-9dI z;~%dx_1AH|a_0T&^>dWpq#cdxm)8~4ANvv32YI;Tw|_1duLtk|Prnvt7+*qryX%)Y zWBDh#UADM>iAVjtUcVdpoh{Dr_=5QDuV3N}@|%>8xPIYB&E?hleMdWD&A83a4Mxvb zxK0J7-9^*ca)1YsdcGQQM)m7Ghii4Ite#DwMZN{A=-5oKgM4OEETn346M@GVi_ljriEV{{E~a_0S7{a%Cd`!B>vtiiDrALGV;yh^{D`JKT(`W?mhC-@a>*o(WznABHEt}l0X7K^{)B2c!kN0o=wRLf`s1#aDGR(f_mOzr;&x@ikqSaKFi)(>~)D#h0`nZT&}Fv>m>z_1))7Vn5^DkI&D> zPxPr*Ej|7wf1bBym^`Jy7TX>{UXkO{^0Q(2QP#8?anXoF|Wh?Chc$2ufBgr zxme3@*8QG-86WECRr>uIIK&!!Yi`*&gl5EJHNn39fkQ#+TUKk?KyNEzgg>h`sL?K)KOF)>}RiEubl0U z^h=ykeD4T{Sff)E7h}rV?&$MX>ZrdziuoJWFa3)(_*!`>ev?1DekT5k<3;*yI4nN4 zJJK(4M)mtH5h&Yx$Kz6{FD8C$*X4J{ky&k+-vmEBkMQs7rsr4Bmq+)%G5%}w&(o<_ zKGv_r8P)IQ?)h69&kwKQw`+Gv%X@tgzs!Hj_S0nb^KAUQ^|PmsRzBdj=3xw9YtQP` zD`)?G{W5M~AUeKG{r8wYFsuJQ$8U`ramL~&^X{_s^RK6mR^Ib#zdzgZFov(S*YTSb zx9ms!^gY}4=U}9bA9ePrt;Y?NUe4 z`OVX*SI%~Q{aT!1e0SdyN8Fovj$iU8y57O zw)VRCB{)sCoc?|N;%$Wj;0ss_Y#ZW?(1iC_q_VWx`q61*6*8onCNIF zzZ2Vc#^V*B_8#6Uj15}+t<$<`4v6t=I}dXcV@jHze)YY*UvZ~2fXv@ z*W%p1J{bLu6avxD%M;so_^tY7y&%6C{PydY1bnF*cWQZ$k9hRB^Xk{)+^*k_-_`Rk z+wbGo$Bp%Z{DQBzeia|@J36m^Eza%wRX^`jwS}-pn<-~}M!)aKb!C75Th+~krVhJ) zrR@=a#Ub;^8P9)-bGv@Ezq|80lQ+gQ7Qg-0&x(il9lct=-tWq?-O=?c;*9F|EBFv= zbPAS=G39J`^!v)xZ-0MO)y;$!HtM%MhtA?-yYBZlZrX0e@gn`cC2dEni67e?UB6se_cxk;P%p*C7xq)Ei4(jR zW6E3mrMR5KbnV~DA#$A*HmcuO;iHcF`=gk@Yp?Hm*RR-ru_k_O*VAu3Zq_(P_0ih1 zIJ|j<{U7O^m~Or_TyFh_zmrd zeJ*}C#ZR13d|$Hq6Kim2>GEpI+3q!!Vt;&LUSEUbpQqpVtO&&#d~Da#FY!}HVSOaU zA?+F*f1+HhDQCMQ{Ss#s-|qa*=x@f+Y9#*fEebo2B}Khxm;qoi(nejAUBAKR@~4ty}a z%-pYjU43NiAK^p2@%3@GTdg#3kM9b9Ef2f(SErxL2w#$BWE;m%>kXeTdDD8t>CPWn z>+OxN>AJ}JK7K83#2Jg9H~w*a6>G;Abo;Ut-{WK4nvP@my!q{t0Hnh=d_FAli#U(d zhvI$Dv<|<(NBv)OEPi|QOI}+Z#_)-5mu;l0gkJiWcoAUSl=J1RC z#CbHnc3tapeAKUde^iFj2J4rvv(^(^8mwEp&S%SO1xLS(+mF)6H}vP*?8FcIiSy|3 zrCpc)93S<2Hhy{k&yUhC+jXyB-84gq^Jx8&xAFNeamLm!-sf-pd{1mivUr_%``=dLdv^Ui*005RUi}j1R{eJ0 zf4S2s{NI%$Z|>$_;?e!o(b4)~yS{!c&ZF_I*DrCth~N4>wYB3jzK=M8U(9ny>tn26 zi}PrF>*rtM+{*8p5&=HsO*hZ-`=foi9;Vfc54KM{x}Q2aS|4oJ*RRESG`{uvB~He- zk1Kd^=idRp)3f}tJ>WR4el5=P>X$gT^2_6^?evTCJ6*H9RR5^o>Sy_fIyzb(Y}ePX z#d$Qo_4*~wAir=UW*>gxkMrQs`e3`G^WWO-!#*EGi<$PZK8U~OL7o5fIOcDi$KCN6 z?KHD5zcc$0%fDwoKVtuf`encKvG^))$>F!gjR0f#=tZpMcfy{jE3XIi`09MU)M$Aa z!?*wWuf=)v_)>M3`}k>KKgLZz6o# z{4Q&xJ@~EHLl$Qr^YG#Q6&d^w=8ygLYjK`ezr-2kxBvYiUN=Gf`*GV87wxls;?WA! z(b4Nuw(HNo7U$9U*6Wuz8Q(sxAY!18``-`S%CEM^&n3>QUyJj+`X$a7zwheiA{O&6 z{7%)HaxE>drTC+Mbx-B@wDYgUd0zbz=ehXh_X2*De!tx`F5gDq-$1>i_1k_|_OU)% z+_WF={ZU!>kG_BP75x-j8mt??-yqhM*9wk)E59>p9=tyNj&{F~zQ1w%G5Ff=LYJ`K zkAGZ0@I2~l{4)P&kJbm{)G*f9p>I2m64yL^;JT>WOdr&WXn-ojFW$i-;A0E z>v#D5Q{bxn9*r+)T>djT@vCvudS~PJ3j8&GDYia%_Wbwvta150JMp{ee&RfOe0fKF z-aUSSkNUj^y8#z| zfBf(6`D)nv;r@B={nn~+>_3O5@df-6XB6L`Ss{rv_-g)k<&2BVFYsNG`n`7g(9(~;-{9q+ z*8Dg8h}{JrR_ea6&>hbTFq(_Lg@yqb^EWTNf ztMLntFF;X@#h0+B!_9U_`e41Neu1KxUGY)BQGVO`>^}H-U5WO~{mvckR_eY`ItK+x+{8v4X@G)-8gQz~(AF+nVckB>r%Gtil z@2m&1UKn2jkYsV}rQa~W8U4*se0n}Uy8jK)Se<{YFV^rl{@z5X{w9BR{1DwN8*!dj zzr<da|xqI%KZC}&j0l#xsFS@=*{6w!d|D1Bh#hc%_ zU+!OCw*L8k8r}8RH{A2Lr}5eEg|_^PoOESvTv}>A)*zTs(bnf4x2uu1youMaXDaM(k#~{C4Khy7N^~-q1 z;iRF)h}@d`OVtT`1}h$2;1xQs|}2QH_qYrW^tZZzr-2jH^EQpbda^Y|J;kb zdFzAG{crI4;r!{-&!<_v*g{y{HuF2H3*ro~?-L;P@pH;KuB}}^_s{o3Ypdh8-~6jB z*ZZTOldwM6p^o3L;7P3Eo$b5N-vTbyi{kU1Ls!plvc)&j2lw;*s=q&q;b`?f*T+vu zj}U9(v=txY#ykz{gB{w7U*rXGM)AENeqwF>P%b=~a>iw?euMl@&~LE@2lMA?e7DQ8 zwfu_BAL?y+wfHjjbhz2BH-EJKI6j>dALHNO9|hE_$LIDug^u57{AR}gWbp$o@*LH# zd;Kq=|3Upm`TYevinaRKi0_KyYW!ZLk1xP2*5GFQqvxx!UUdHb4gD2saBQ95THG$n zb`8ewzYr&}yWnHoIL}1&p}kyQ4Zh9%&gzjkqxk+z>QAh}$MN;)`3?A(A5nh)ofV(h zeem7XpZtFMvh~k@!`>D12aZ>B|C~4AmN*#P%ztm+xhnrFSJe_*F=D0TE zmpJ?R<5_&(ILGdZEkxFhuS zXW$TP%4_@H@6+5AKkJ3@WyGV86N<%Hd~AR4`$+6}e}7bsEB$ZOuY2EAhT~jdzsX-W ze$2YR#xFR&c=`p3VxEiNe-nJ{cbMO-k?Qr!JP~W+$Gr0N%lnRad{`ez@%8$BL%CRk zk9jqke~B}S?eH_0ih%aM*I@)kwd@ z8O7&)&PI8OHTvb}YCkW3K}*U-V=7t>rzxdfv?Y${6RUKK9qI#kn0{ z_dS$l@~Gro=d zPH2CDeLw!SagR8i@p~=5h*LlRj&;-Xi|->&+A!n1T_5N`sU%wXT zc6=N86~1(H_?@v^#+7A@@|)F7T)*mv`OG+P*9ZKiYOOw;a^{tMBvSFFVc z_hOv#Qv6_iz7ZE}l;5O&;`${XwT$z2eZXI?*2c*xXI}aGg};e@gZ#pc7>jRM?(jPk z7i^T@tbTUWFJLjwr`0cThVjwQUi{wRFwt==|MourC92cwmq2BnGtWO_e7S#c{=sTu ziy$9uwtPaBsT4mLpJ(jPu$LG<(e1Lu^~-gG`a7?FEzY=pvCbOu%k`4RN2@>J_lEt6 zID`Bq^%tLiiAVjNSHBi#czv*FaOtzvsfMAvqI@O4Rlmd;LYO`MHMs`+qkanAG<7N7cBZ+Touc zq22T9mvIBo;QIL;Zp0cMQCy5EAM!in$gDQZFa2bTW2=7o{e+rlvJMQLeGJOlE8>je+nwLJ_ILRw%rD~9uboT={@B63Z|Aqhs=U?(5*2anPe>VSskNpnwn-xf}U-!Pp1mLN3=S}|X_7vp@5@{2h2`u#O&J7P`zE+`+(zp{VX z`upD)fAub}PtPCpOWWbg@SF?mH~F*UOUpYR-|fHQc$yKutQA}Q=$E#`m*6-#_-;6k zQTOM%6jYr}m-fE@dqxg0BvJ=0Ac1HM6Z+v~N;#&Us`>)6GyJl^- z=GkHK({_i?mqdOMr#pWjE|*dK(BCn?im&PVar|1`wEi{7?-%q#EHip>%>Iit<=Sd_ zeTZ9G)<;3r%{)qEv{kC=W=lCv(IAignAF-vuy0QOaO?j>0==Z~MS~WPnccQD zyn#RW{-~AweuY1=rNO$f|6)yft>EaF$1zWj*2g#W=iA`=3vnKeuU(feVSSUoZv34Q z;jH#-{POdgAEjUBl{@}{f8sn^ziqs9_ys=JbMKEz$b-T9{vFlCmImv_{);u`wSuEx z9>+Kztq?@r&N^SAMH^498?c$5#u`DlHN^=ok+jc>hvi8ILW@Hu&F`L*9)WSo!I2lL9; zuf=&ZKF+J->(9g)@G_}ooR8KA^UBw+#d$Qo_4*~wAir=U#_DvU|E|2&FV#zK*!Fq9ALD$qKA2a& zervzk{-ve z#f>;)_~=Ef!=qRJ7$5zeUcUr-cKvqa<30bMpI>r36&vIi>jA{A;fUqm{`$2z&pZDT z=hpa@xl^`jc`Yv;zx3aivwpANT7RiX$fo;`eU;rT?}3s&IK<*?IMAah_Md#JQDUJ^p>F*37@; zNvtW?+U2#Me{~O!JMa8!ah_Md#Ca}$dEe2G((kufzqs2|} zx%WpU;2&Jy_=*uSIoJN*7`jhn{rZ2Vpmae?21ukZej_J2?R2!IFU-%W85=h6Co&)WWb{v03m zdkx0#3)&M~8mt@pFV>XT3QO^Q{CHfOM`G*0XTSgaM^c1;Bqx5e?kCQp^()UqTDD*F z=lCwDcQ$@y-dnc6|I&UOrw_ENMxGbv#jnG6*!-~)-;Hr&eX9@by)^xJpD*xu+D@m5 z?bveqbw59!aa^X~7valnr^AQ%c+*Y3e?0!$=>vOL$M4@+j}U8c(EqdeuJFfx^yBlh z_*h@8!MB;;Sv?YG6yI-2{fRaBIR1+@<;*WnA1!XgxmCY<{NB%pB|i2est-lEyqY*| zj^9l^5@!^jyM9SP-to?M*Xp;wKMGz~>-U$eM~JoYOYrn8zFCiBKce~oiefCjj6EH0 z=G90aXUE6l0gqxt}g#Tb6SB9FwHa$esXJztGDqxjxZfhIG3r-QBY zTZ>!qdb#xXM``J0t$rtbf1_9vr>*!Hw^!?9Gr!0S;*5?j-gD@vzv%oMq=;dfS##2Lnyfw0rTUiuC5o6z4r{~X-R|9k!F`S|Gm zH$-D~{;|GT@H_Zk%;@=BH;ePU`Xx>~{xBX*KcAnU@26klQ3S317(VuAHNO|&SkmFa z_&i&j=hZK9#^UFmzhy+W8+UyD;`@k`9>;oNeE^0S=(lht+qArv7c*{OCVnrn6hGki zW^sn`r2;{=)Zs`=>0LSVemwsYXOQ2lIO6MP;!%I>M_3;SlbCh<%6dvShu_)a4CBja zE)!pUum5!A%=`QKO{;&5+fpL=`tkRv;eGY|wx52{@}!pi2lc2b{ATqN*Dvv?Wk16DfLk$^#|b;8uDsTF_?_!<`cDq> zo8d2aIGl3k{aC;78|62tAJMUm-$r~ubzwga*Y5-blf&Dz ztvQ>QwcO!%t`+p3v+Fm?Z_;kY^~-gQ`g^^8v5v0ecDHU?hNDl`&k9r4w=sRZZvJIF zWBB&dFY$n1>LjWU@=$q1!L*TIuAk{QiZ8>_?(;9>8RR!9zPNsQT|xc5Ucdcwxp+MQ z@pkoVah_Md#2Mr_gWo>?65^EXx{LGb{raAG^f=ag+4}jik>Aa{`y9SpFaN*JgwF* z{NS)x>-Qb)h<%PvK6}zzT4vO<@4{>{G&c-qx#j}F0VFz346M@ zGVj;wx4%D%?a|NZ``PV&td8FxzSe#y|Ja>k_le)EE-Sym`PaREkhPttexv;Uk`#wn z8^4YCuJBjmmtMo~7qlbR;JyO)HJ9Qy`Lpd47jZ`Q`y1L5Yj8xz7ao5N#_zw9gg`d2 zyWnHoUajBF{Lb26;*8F}e`fV3*2WLzm#&=oH9r3(PMe=vx_*82@1#eF-3Q+d2%P7? zt;eV5_wt;tWt02qEI#0tJU8XcD|ddIfq?gK{k1iI#6@dy2(P+5%WogQe=I)s58mYq z($9YXig;-|+zFmj3G0LLua938AKGi{KjNb8@MYl3kMUixpE~Nt=V#;R@#yKA?YjB} zzr-2E=Z$lSQZXe^bz{4u`R$VQkZZSoc{YAOXZ0i2;P@5(#hP-q>;1kr@mCx{e62l; z!<(1c?r3}=&VK&j@fsC*9q4y=erL3t)rR>^>Zj>f-@l_=tmQZB{?YR_sH3PpJpFok z$#zHjtvq(?t6Gk3j`;QRkB5sj@uPn?|86)ksqOEN;_;|8%s($q?tN2e*V8ZCr;X}k z_xM2{XUE694)Y7Xdi}EhVombi! zy1vW2?(dHxFV+2E{_ynMo}NzgUB>l@Iuxf#5~@Z8$7G_J5>b#yP6rcXU&%jT6enm~yu3 z@>}Dk4#NB<`007fTJGznzQ~Q~NB6%m{_s9r|Lw0|i!-X<%iZ(0YR~u&`0d(V zX#W^Ltq zJl0Kt{W1UWeZ)!qwLFaF-x!A-|JbfS|5}`J{gxOk8+hc~YEj;`JJc`h$KvO$pDzjc z`f+RKvBj6PT-tHUALFb1&N%*b`US3OCwy=t z#>UAjpRi+k9KX8$%&Zq2pOgC8O}~KE@-T+a)2Ua^c8B@}&ai$bIGR@S%XXLQEA)Gb z#c#j)w*p`OX?YmKSH~%L9INm=7QY3NxV%>s{QAc5Y zWH`)SoSbsD>+9Fz+>WnkPqt}!EidcFXW>gXhu<4^C)SJUV?X^8kK&__!snNX{q5rC zl(Su5zZU0qd>i?l*uKN>jQ(cU3-XIN#r2Ep27pH$ZPy3;S#1eO+cN&`bj@~s{aT#c z@pZo=HFf#dkXqaqw(szJ!-2ehC3^q({cPrMb$|5rD>PhjNFGM;?LYrAz5u!zU&rs- z@p)qV4!<*Tv0f~GqT6MQ>lc31xZl68yrbUm`wcr1-=Z!X9m= zobCR+R4-$E*ZvJIlG^_MsAuE1-~3BFYAcS-`cOan>(}DkKL4tp-TAHhCC-k2?nih= z`q*2)yzhwf;P&|q9mv%h9eBSh%XaDukt~g$#-?yagh&AzJyZ-uFk7Jyp`W0T6O{~G8rOT@+XS*)H z@W=Tl%x_X8{ruaWL)YQXTHpKrRnrgZ1?M;RQ>=*-ycc82Tl=NhpWj$7s^3@PqmKIf zqnN+7{~Pto{);v7W4oSy>v1y>yhy*^yu$vE^h=yk{qD|hjhn_V%x_XZy?)*M9<$c> z^m~QB8ow9m_cyd7*5n`C9nHVQ8P)F>#6zsXfhZMY%GvHUm12K_<8H+_gtV| zE@BNnw(IGa_^G3?KGFi?BJCO+f1+HhDQCMQ{Ss#s-|qa*=x{ZEH4!E-9GALygT564IGp}iJA;-c;F zW#G#WzFR#`D|-5+pUdF>x1??wK7HSKBtEuVtyFvzKkla==lm^W{|F!I$v9*4EaCX7 zU$$GVRJg}?g};`EL43e5j-TQkK40>t^@!7*KhTfS^K}K+vaQ9}bnWGz`n$mIHOJ!j zC96NNhF^}aVof<(7xNe&<5tI!AUY_#xL>xDE+qkx}5mkG;YLsw0_&V`g45DU-$kffoDkJnYf>U|zZF`~N2R$jjOI<$Xtt^U?bFe$)K=e)~uMd6U0x{=$CZJQ`oSuJt)S z>eszLDr-MS`u#dUr_%``=dLd-nWttY3@sy!s{1t@<5&|D}G< zWvzaRNAs%X;Z}U==h^dLw(INH;ykZ@iF0fG2K?6VsjcM~-$$IlFXp+U^)c43#d$P7 zj=SUempHfbTh1M1o0iw|QWkV=oA~|FuDsSL)jytp5RX=%j*iv`+x7KpaUP9t{rpRu zFXC6u8?jm5S-Q~vkzeeX)KW)B>x1o%*3UJs)7JQDKc8J6tk*B&8N&xJ#W*~A<-LB1 zM=f=9v_9CbuV0JvXngDSOPoP|C;IVt^vWH6;f^{wt$u;?XnarWSH{tY-*3j ztR>d!cfy{jE3XF(_?=NP$MEgHey$zRe-6g?w0>X3ZwrIvy_Wa<*7T66aa?RbKhI#Ci2=ah_Md#2MrF zUEN&7Vtj_*sajL6rRB90m$BWpU-_L&9obGd|0*ovJR0A6{Sv2*FUO~Po;CV>P~Ggt zFTWS?qxAdjrXBh=`u+y$9j)K?yRwh<(c-54aPN=GAa20#SM*bCX|QhmeuG$3UMo2I zt^CfYd9Z%JquuYL?{D0G48Hce&?T(*<6p1Ov+>LPqdi(5jE}p%01@e6#^-8C4$FKAC}2}s?pS^pJl%4>zC_)Xqg{us9( zrQbh*`;S~;-{T`L;yhZv?YT&wkFZTmqw)si^ z8Q;CjPC|q`2D88>+{uky;AqL@zMMIsJ65G)1IGKa$dH)ycSy$t#0(| zettfqYKH&a@%?}5xW=KwhxWbom5fKr#(uQ%`PulPpUs#!jmO1O{lWNxei3IB-=A3l ziZ%E)^9y{Jq<*heAKT*hZ}<_r3qHoJ>6H52hEIFByc&F)`JEXzcn-$zx2%4|8hqqO ztSM()JbiFK^CQad-p_|6zE|sabNp_~2XRLA>&_qG{ps-;_}IU8f7CX8{F1c4Vojbg zf1buSckv7AL%l7p7GJ`i4mWul>4Wv!`fpqOUWJeGkMi5jXFGm3#*f$KUajA+$aArV zceX!zz8dRA_4}5UVX+1W`FUC&=oj_d?vL7(e-qZv#qNTSaeK8sHuF0xAH*5eulF1} z@*~#7m2nx3FU*f1zn7noe_{=et@wD~(W~|Qe$jk>zYw>+XZ!B+w{FTW>qYfT9(tX6 z<&2Aaegu4sf4e_wlYTGj&wn*8BYcb-^E9dtZFPA?{^7n5?0B#IY608V;x{Se`d#-E zSFIOaA0+kL>y-TT#aMjU@!pkJ-j?bQ_`O-2 z=hZK9GC#M)Z$JGKj|QH3y1#x4XR_TrSC8#84kaBP@H?~K;^o8lBY2#abDX*)@A?&v zPu1G|bIKW)v3`j&$ZuABas47bllp7%iQ!Xk%d3swP3mW_^IzUK_gR=>m<&?H!;qc4#GaaWOz6?j1`09K8rz>Y%#@Dadj~KrF z^h-S2E#~R|>t~!7O^9RVo$txJ!!Os*tbSVkGM+(xvvxE-|KfZcabuo_=Qr|DdF1cb zkVonU@u9_!}5{Zutcf3a^TwBYf7Fe~$MC^RF$Tw1@FdohvwipZTfoJ7(fQYV z4&7d#|F-+1wvB&3C5@n16Q`~C7&qp@{`ytCoB2gv5N8zM8{#L{#t-Gs>Z8T&vTQ+q zCz*H4R_s3bZi~N{&%ayqugx!tGpb*BDaOVxV^0^?)_$p8&H*^SX?^bJ_}T7{+NR(3 zJcWJnwLB#LZTJwSV)lvO+{H0C|GL)?lC~4oZbHg`QM*4+ z%b&)V^?GFc{_X%@Li_14zH259*6Z*;89(7qw;Dfv>*;zezr@+*5B2+O{Je1vsEa9q zsvF0((fr1KU+elsT|A3V@^0B${^|Q)bF~IvoA(C%&U$=J#IJ~@Et6$a&<3pSz4-Gy< zsTfnvxVZUu!;wjCyFUu=pB(?ZIJx&tWo>6Pf7JK|_2KCkD2jP5ezP8Vc6{u2nBT1Z z?e*L8%*L3!;Db1$>x13-1wO_(%x~7b z==Iy4L)Y<}w7xh0^8OXZIjRrlaj##moOv}mKO)ZU`1HKU`6iH<*5GU9rT9($?D)*MG0stawDvq4ww!r2(l2pF@r^zwmjK!LDNV!ASK03{ zzgZjX_3P=QmG}JWd9#22o3`_8{s;>&11m*O}1WBWF4jB`{UV;mOWSictMc6{FV)DWL$ z5I9XI;oLYtAkqHmlsWxt=ET^ zevI2vavJ^GxSdzO7Uy>Tf~Sdm^*kzHAW{t5h4uKY`fc^i^M#(hzL6D2T)*n)GO7KT zhY@`H>(}Dku3z#Cf2;L7;P(c9i8wj`>H8ly{}K;ye8|HPzZrhrb%50k^J=tyW*%;oB^b1&w^LBl}QL45~SZz!AH+B3Xul)6MbFuuFw#M%u{nquX z;{M_KMflD;|91T5t^Cr@i}f4jH!IG#emSqGzw_$X;@m#IP`}Ue%l6A~RF3WQOXF8? z>DKROIqQ9X|H6LfzqZ};>eu27&%bxSQ-ZiRgL#Gdz#R_1m|qGm-GcmP^%B=Ft{VW= zdG%{?#`Rl&FAO{)0L`GB*Hy@y!|x3T^7_@CzIi^DO$+e)7Jf^Xk{)+^*lM+r{B-{8s%EXOQ0nKizr8_`2`o@ul)RtKYCbGX2=| zAP*n&YIOcfoKbx5GJclreW+ipNBz3L-&y0fxRuYDg8XLq$zA-CmS1|_Yx!e-`TYdO zdAmMp`}$9Z!~0!X&I_aSU*e47`+8G&VoN|CZKj;xD;WL0vc!Ga+Wk@bey{W2_8htn zch+{??{A>LjB`{Uo=)F@L#&A(^J=8u%5RS8V|RXM##e2aU&N_jKey-5+4wQ9yzg(c z_yT8&#jmy3;edNFmS4nYq+jBU>i1Rn=(p%Ka(&l3|E2!Kn)o$6mEt$~>)Y4B^Y~Zk zSMqV$`n)7>BmJ^o7++Ex!iS9$ip7|6#>LIQ83$&yVSeGKkCS`fW72j#{a&%Z#_vV? z{SCOqJ{P~6;wR3ie!rl6h`9{mb_E zU;X&K_WBF%ivkYGL*SraT9zx`QU0~O*ig*^6>HaYMr>2;y3y0;xl*na<~6RzaxAezc@Zu`xL$_j%#_i6`!^*ye?bgSKl`s zSbm4kmqdJs^M3xI|55xZuBY%dT|4|%{?z|wliSI}0x82v} z#P6nYBhI7s+t$^en<+XyN-w(%W)!_KztxrAu zw)UO)%?gY4j@B>RU48yG$HqVAiCDv9!(q!u{POzXkJ9gV@b`Uo_`Mxm)O26dK9sj^TaUQK->e4@dgMyOU`}?D~f8G3h|M{C9$Nq~giS}T7 zoPRuyaXwlf%&XD$7vek`A9d+{e$?WoA>YpL=bxX~{_Ba*3V!vxe0={KT&{oafaqaoYKh`MY}kjBvkqJcjw5;rQtFGsa(Ezl__D!M9$&#JQE8@&E7{aT#o)h}^wsq%8~S(f__AKV z#JQDU@(5e?+x#K|Wg+!oE5+ql+dl6*Ip#E5GcgH$HR!+WEKEU;bg7k3PR-UJdn2xCf6fPwRIxzXSb>Uu-M& zTk9*oHyoW}`M3Z1uf=)v__BWfCC;t!Bfp-0>3^+$YklQ+2EPaEW2|3`^XTzqy?%*v zE5H9z0w(a#&%evsc-gm7zc_D(JI48FeQ;hFUcX|u4<29E>zDD|$}g@@PM&`0f31FN z{UvgY^U?ZXUitH{#d$Qo_4*~wt^8^NzfVl$$2`h?L@V{Het6#z<9t5-TAWAYTd!Z@ zjPgqzKjv{Wzo(sl88@}()h}^wQ}7MY5Sc{TaKuRDb>r^ZrkU5M?Xrx-;h_| zM&IAKp(h8=zwLKrAIGo7P4V5|AJuT{f1iK<>MP>&x*?+Mm(H?A0{xNrr#1*-9E?n?Dr>!-#-PeisNW}S$qAT*@<6`o7OuU zzt==uYLC{(?`Z$`I*5F}^#$#TEdi+;`!Cj%*9uGV z{rth>+B_1&_pE;ZNQ&@}RAArZBQD}Rdj4(CMfx1yC2K#<#;?qK%l7wQiZ8AY+$YuL zAM;x*@(=B*`A41`=kVL%3y;q_&qy8u2l}0>eGcCZ$MOEbf2a@6XS$zxddc4W*2jbR z@Z7xG4$G}y_xj(=e$oHl_=+ZF%gbxAh@Zaayy~s5t~ieMTK+v7KeXSB!7&~eOZCzh z#z!3y7jZ`M{h8FSScC6^aXA63_S_}$baaYpgE z>z4%N9q(*+t$y46Z`=6&B`XfGHhx?2&FYW+i0VVVEw2_|#-0v0^U9k)h>P~D_^AIV zzwLas<9B2Hc;6A@9MuO{EXMHr6?r7ql(*}GrT9($IKCAZmkV(bXB6LCDqf|fPNy=j z>DHAquh#0f-5<3{zZ1T{QLKs6R(y;b`|&D$Y~~kvL7Y*1-gD@vzh~E{EpD0~L4Gek zA|Ngnj&+a`LxUzwQ30P5Qm;{rxM( zjs1w~1JNr6{AxePpUai%560(NJrZXaUsiv;4))S-nBRo{_W9@FrY`T-FM2-i-~YBP z{}8=mz%M^fFWfDg;r%iJ$5QO8Cug;!p|BXm1?`emM%>W}nmafb1w0!_9)erYMa zD`(!1=U?Is@|zV$eEm#3>W}>h>jPmD1AhOdB~#te>6g4a{L1gCEE|sxUjOsvS+AUV ze?Pw|tdDV1oI!q*`jzW2HcnZ~`*p(zAIC@53+n?g#8`ZbHkX|!?|56PKhiH8POvE! zKhdpjef*qq@;BBm{7x}^`^~?^qn7>HU%$}jg!b-u2hSeAv&9+4m*FpW`R9}~@5lNj z&LF=@{p_Y+z+yj6t6$&@<3s#J$98;i%9;18^;@sMF>e(({rI0>YQ5d{t8Oo?{aF6N zT``E?K)*7c=~k+jx@=!dD=vL2pMP>ckL&8WpZ~%^uGaGFlr!&F>$l?HhEH_6Y;pZ| z?cdaISRZgB#>Q{>y9f@yH;XfjFR`B;KBt`dHP$b2#`14J{SuG%m;DIq1K|?`eyLyB zT8{RI`n5R2_%Z-y;;ZlVpRRnpeu*>4Z&Da>{o;Ha-D5w(`hY(%oql!4dskksJ1*59 zjL$cVGmI}Oj!WwBIpxgzv3`j&$ZuAB@$+BeQGe`5SRd-HymtD{lbr$`Z;S@AMhu}==WXL9c6p3<@%obb)Ua=TMm=w zZedHY_=#?HOBSD3&b%M%SKYSfgK@mpa{4)X{mi(v_Ji?5_{4zUs@rAHdo9#zYMXw40*_)%oVMa)++L?&<#98=&@XXD=ifKPPppj}%AdWy+v2AE4DvhS{I}SB z@ZA*GtM$7z|A>n=s$cEx@@nIku&0YF`CB{xw)>;D>9;*kq2o7*kNt@115qkwpZLw{ zvGSW^>jU@tLDqJn`i=7YOHv$SZTvRkyTV_MUvzz{@XD*f_XX{UHRab_s$MSFT#Dc1 zkNlO=_WeoXjOzEdytuuHH8`T<3y;4B`7d!YKevs~|4!;h>^}Hz>Q8}Q37Kl^!B@^RVvyj-ha z;*9Fo%Rfc8yqfs2T{r(~+|)yfm-+pJr{@p#)5poZZz^ehPrnU6>IKJ_-QzbaF5-;p z_f`0q*I|CaSFd08U#!VLw(IGa*DtA~us$;L#NzO-Yq8zY{7alsd|#nAu{KVCEyk3y z-O=@3=1sdlN*z8s{(0lvej+`SB`!c-N)bt~>tC+Arda;@h2H;G>Sh z{DQ|`zwJ469lu%Q9^_B;%nsv_B}r0r;eifXzh78Y&qK<>6bX8`0hU^R~|mRf?u46 zPP)ha{Cvidne{sUpIu)i`02-C`1f_w^Q-5}{{3&-&a?TqzkV&w?fNabE!*Amx3u`f zEBIx*Jb&%ur$=!7k@;`gewu>(X7$^zpU1lC@evPj&T6Cj7~^*vaE4$dFTImCjo;}N(k@7=hubmz1A7sp5WMVxliFJPTszYKrc z%5Oj3cKJvDm0uP-so%?1eA=FO{pyl{$JLE9KI1Uz=(PF;&M>|SJm2xi2FUwH{YLps ziX*OH=B4^OuYN7g?ej0zRg?BtUI*hd>oFf5>*HhG^oX>zCs*`5N(y zc4a=*&Ea>(?#y~Yev|r(>lf$afcG&E&$WKGIJfIpJNiDM!>jeH_1)hey1^f>Uq#2~ zjP`Pue~ImQ<$eCyxSdzO7Uy>T;`4>4=U=wp$4}$k;>LPs(J%4@X>nftTAbVUtK%p2 zE4C2!Xfx&Qxm*svH@HY@+x=1c{@LsId#|7U``@1i z!G~BIC*56MO*z}m-t)_DI54Sg_ebgbz4Y6jLuc_d-4xhw@@MA<;-`+H`e^N09B)aQ zmhG*}OSU`GFL6fk?auF9dL>(4UN2#Olltk`&+R#MHm+>f`~F7LkNS=3qqW!JfO|1U zAFchz`PcTJ8z1w!-5;fR_tNi&IGFgcUGMu>^|+dcR^QL!YwcMcB_Efq&&##?CC;dR zchA2XH}H9j#m|eAd*5T$c0K)G6LFzlisAF(_Z!*~Yx0l0jpkqCjE*l~vi4J~!GYcv zW6Ig?HI?Ew`Rn3yD~HIImeL{!a^i$e3IQ~SrSX0h+ zNAoXnM)B>=@2qjZWVK;_5hu~HiPNv}FV>W^T~EK%55GUu?tfFf>&It3zr4>sJ@1$2 zyDi(_|8)4!A20vNzu?#7|LXL!`ul6Ruk0><#6{cTLtOp%)#Ef^cly=hl9#%9&wumq z@%U=NFWaqFDm)lpX71dmfzv? zC2#7FIPd2V-9P5H;(7{S({%~!1Ac+;lGOiI^2}a;*7CLZyz!6Yt61<0ztud($G9~e z$MD^cF949LHTZ_lhn@8};w*8B#P3;r?^)Y_&yVBR;zpb?e0%dtd_PLR?Y=H2em9L9 zaUQMTwyyphAN5=2+erR-;~e=BTYx;+9DK7@t?@fp9}V|^Z+ztCZ2a=RBgXk?eSE)Z zetjQYpCrzs@wMw(PW}Nu^?QGR6r?s>|7pFibG4?rC-L4IyqV&YX z$NIH6&#PbJwDTYHx8$X6-t`Ud`!6_dg8$X}B_3_{BaX=W{@L?Ow(INH;ykZ@iE}Hz z$^*auBJb=tJn8=R<1_O@kE4!`)(6}5=UGbhJL$uCHH<^JskQ=U?L7%J09Fh{+IE-`w-wcIkhQ*Y}r6_fkhk>x1q3 z`b9s0^JskQ^-G*v`Ni?eIpXp^#%JaY_pjA2@u;Paj@Ad;_4R9U9*u9keu;A{zZjP% z_^IPF--GA7a_)EZi`~@G(fVM!L;bQFX>0t{!L#f8r}f)iKVtrtywuHGKeL12x$+p) zFWi2_ajx|<`wc5`IuhU0`rXX$K))07W9|4{>o0+$j?SlFi}PrF>-9^VvHZIXpOd$d z-}%SrgX4xj|1xer2H$%966aQasbAQ;@tOYD@>{QmoLs*a=Xv!@oLl)t{=&Rhezl-p zpY6)qQT_Ugc(ev}boBa^?fUw)IFH7+Ucbb-m0#)?*C{KH@cZ=qi@ZProOk}UIM1tJ z;@rxw9{(=uv$DNce)T=|D;DR)OSKO#y?%9gZ^Fuw7rj7U$9U*6WuzxAI$c zyEuBU{KD^~R$iatm){HcQTqLMQ{3N1-`_yJqxIWqF}? zE-t^o$NarkeQb;0zmv8rb{Bk%8}p!z&)e`Ry5-g2+syB*9*HxG@3*Y}#2S3$N31Dl zTs(bnKl3BX@7~XcB|he9R393><<-P#bNp`VkvOCHe$MJoti^}&Hou`=wm-N&#QwGW zqqgbem!$2A-3Q-{e!xccq288Pi!WhMhnu{O^uc;(#Yg={`EBR39lsmn$Ln&h*6-Jw z@+;Qx&h|&oS7W`Xe&4d<5NmLdpQwJ@{ZX6rJK_6H#qNTSaeK8sHuF0xAH*5eulF1} zj<3=AH^}ehC*+@4%Wu*+Jd2N?i@jRE?>JxkUl-!m{QjSl;&z|Eb>n{aZ|nIHj?dNF z_&Mc_%i8sGyZ>#Ie#>*Qmu)ZoR(_$As6G_k@@nIU9q*N2Enxdv{3eCuPxo_Nsr7>A zAD&LVa<)HOA8>pR^P3TuOdaU^=kX!GCOw{c8lB&OrkIXjy^hfIi_c>x9#N`4;P+;6 zhVf;z*T>H(XI#emB~Ioi-lIACxg_uUi&orEzr>?{nWy{fmpsB&-q}9m;P5-M9s+e* z{Ss%8-wdAn{7dM6vbrH}_u~sb51;h7mR~V^Kv7JmU)}TGmDh21ss2d67Uy~OOPsOz z?WbSj(YP}YUZ>x}-Lipqwm;G@>*46r>X$f!{ATUv-SwA*{;$?A>Q8E4uU~I`1`b!h z7Uy~OOPoP|lls|f{ao*FoPjT@54aHnopS!IJM6e!@0%~h55{NWns9s+UxJ@b2N$QD z*vc9{tT~#0Sr7K?`i=6NwV!eQVm*McF%QD}fIl(d7wf9K=Z?4Y2|dIapKlgt z7+(g!P6u^-?aCP!PaoW0aOoD)$L{NApn9EtwSo5u4OQOj`{f`1`7Vqb>YrA>#2Mr_ zYd_=q<+!N+KIWl*Kik{?`SlmDP)s*Id+TSm5UtGWNqvqx7=gs5u z&Eh=o{7alceiQuk`Iog^#u}tKsqMtUJV-a<)Huz8dRA@p;do zi_gE>zjlArHhzCf>PM`J(^h(e*Rjh}jh%e?Va}=L@{*iz@sNX2RzhuQB*5={sD-T4>%%J26t zTYEm;&iImEXZar;@63C5ebvXW-v6d?m3}Q7@8cSsU;Ydn|Fh!I3S`{#2LlsjdMUy64Gm39_erJsn`yJ*ttH1vI?H%P}Ex$?Yd-`Sk80V-yn8#ub4lgfj``+)< z+!R0Sh4CRy!iT|!C>3MM85cMIfRFud_eZJ6XZ7L5$-QqXYdh}qac1Cvjp~DWyj%SK zo8V)=!~BA;UcW8RZ2mE?JpJ;%BOV{tM?yYz`h7#W*nd!CG1TQ~eMOv6d|#0-VhxTD zm`pjZ>y57OGS2P(DD}9Pe%o{CI@}q^bAkOPe|G+5+!*Iq>DRk1&Af8QKkz}EQGC1e z3w+dXm|yVK>$g3JuH!cerDaQx`Q`WD8Rw`zn8#vEgKbOrw<~8}jr2>L+wtjnhW9yJ z18Q*(KYzQ`el7pB`=hjcFa0uq?&iIW_Va+>nf0u`pT#%EVdKZV8tJ$48$ACQeNHY> zuz88F_}_10+|-8o&G3^u97)T4-SqrwJ`bP&c0)b5A6-A#U%wXTcKvqWb8&c-Zg%_* zzW;J#+=(-$4{!ZE*3E$5890Ob7~`<<8|#;Gi{b-Mci%IG-)6us+l5_Vze%l*zZy5z z@Alt#JQ^6?-Gl*DvG7{%wt4(VlEi>lf`0^-G*v@hLpf?Xt!7t9~w% z+Vkqy;@qxZj?dMf)dz~jbmbghdwu8uEpGH19=2hJ-fb2ieoqZ zqFbleFTgavQuhy&A&DO4;PorPvrS{{z`n5RY`h9kMX8X?i>Zb9N>-)?0 zQ^{f20-w8w9nkj*jtzVDz@zYu@Zp0ZI|Mour z<$Xuz)vv~pIJfIp{qXgDukpF+mpFs`Cin^Kmw42+JdEMnfBv;NqxyZv{dQyhsvd{G z-#IHj_PgExhPd9SYt%dJ`m?sj?t?#^$GoAxivFXGgn|F-AQ+4wQ9yzg(c_$t1rK3aPn4!9R%`9*w2`X$b@;$y$t z{ZZQCXZ7Lfw~cc)eoap$toQn5+<1IcAFVx$!&?{D_6Og8X1y@Jq;VHMOrD{%7*o!; zxcP_tWWU4wW<}EL*S+sCX?;(>SM0CxOTqEEwrAt?TUH!mpNrp3k0Z{ge!l>pSc5}b zSzb-~HS3;hF2%k+Bwv>88jPQ(-*@;IYw$6zyzf6VZp_oLKC<>x+BG=-M7dZ~&b%7U zzr-2Ew>!Uc?eFqWm|w)H*YB@M+YxKx$Gr0N%lOLvWo!4BslR9EkN^FD>v58Yz(K#X zEZ2IY{A+o~)rE<<8!r7;k)9vmWMHXqKjqg_0e=-`5iuA@}~ZX^M3x& z{nXDWe$V1-x_0;lKKAb#xJ&s?Co7OuUzr^>W^xN+1a^iQ>xDn^k z`fcm#&+%Q52lw|!DgL$N3;l>K4c3kQ7i-FEg{AmS-gf$&wFZwrS|4n8bbiEoXT?YT zpN(H$AN*1J{f_+lKDd9CIFHtEyRKDa^FSXrC@87Dzdwrm*R8L)qcURgYf;JX+ts-+lh3x^JJeJ*QvBjd4C&AIz)K^%vqi8XxCX@A_4XoAMat z7uj%m*ApJTz1049<+Z}y_>B2r(i)8O(fVL~eEnLSN8_U|W&JCGdN4j${Ss%le(m?W z*I&p~|NWQ#doFABOFZCrhX3IC`LpMj%qw5N7Uy~OOPpKzC6BOGr}PV3%b5?feg5(L zso=Nf*;ah&=h^E+WBpp3=hZK9#^Oh|-a8(jAD@W_{GL|77Uy~OOPpKzrGCpCuxv$; zveECe`qiVy_rIau+UtK=>x+(okH=SQ%E$V}aTAZ<8b3Y$+3{ul{7alMeD!;!Rlgjc z;lGyG_xPuT^?rR&`JGYibn`E8O+N7-^$T|mM=bxI z)yHc6vfJrcd{66F##4Ph&a?cogWmdz`@3<`6hF`}_A|~$&u`2tfBjrLp#K~^zC5kp z&HQ%yoq8Uh)i364@_WNS2kV1*<)8mroTpzuZ|1jXPqw??Kj8dZ<6zb=dQf@o=igd? zslqs)PrnxD(fHQumpEhN^ZT^WQC=SMDEFB>EWhWs>V0v@aq?(=Ft2?5TAWAYTR;C2 z=T?3>K6~>o{cq%VM&2AezcH`;`M35<0UnHRy?%)^#xH;WPtI#Po%XzguWCy5`}Gy? zD`T9G*2h@C+5zG`8sB>T66aQa_4xh9XW~)II3GQ~F|U06TAWAYTd!Z@+{&-&pZXP^ zjegtjblP%lwY)yoFYh~IoR8MWw^8-0J{hMpX}zHh%P`#63rZi?^z{wU(+`2G3! z|Gpv~VoQT{BTr&Yd95(w7k-b{$M>5e{66~r2I?J+ul+7`3G4m**2X>U$JzL0{?Q(- zU$*Ox&)}8y&Wexo^!@!&P}s`r_ia9~I%WUGmPC87Ir+!<%{b)X_37~Yr@+Pj9j)Kt z_jhaDG=68}_nL?c{2n~N{f_p3PyYyj2jkyOaS`Xy`hCyZ{(Jr$AN6|;#_tQ-6I&Xr z8~ZQTl-CMN@qPSwT$@L>uK%>9XTQJkN7Cc|NKX7_-A|lH>sOwKv~0iT&+%PQ?`-_a zytizB|E2xdOCRm|VDwvU36yMTSIs~2d^0J#&p)}YwQLn%c>ch3f?fx?V3Mus2JNcx z@!j+=e*X7&eZHC=$mhN_{dnu=zCG#`&&`|J4$JjD{kqrxcwDA`>US@E8qfccfv?67 z_z)j&eRaigb^fj6-?RA8el!2He=nEuxLB$`$UopG&ZduT`2I|aO02J~MV;jDIXT>Mh;Gq9!@m=AM{b=L!HhhY1c{TVp^E<0Y;*8?^EvY}T1|P@&Hoj;* z=Dnwn7B}MDs$V^R@8`o3ANvv2hoW3w_le(4JrZXWpSylZK;H4rcHQwA_^7XTf7CX8 z{E`)iSR22s_-6ITenj=5-j-L3FJn)Kn|U?T$Jy~w|51M1`E1AU#`y8RBgQ$Z53pE_ z;rA=@NUSMu*9A-QoBVNnD=sb<;v&u{zPD7oN=uzisXws>AMThTUv&Nr@_YFyE!{2F@|(5%S$zCnH+2%#2T&Aa z@Qpv0E7g7d5@#4+D$r!>aW+qUiuC5o6z4r{~X-Z<^B2v`8BCO)(h)H-IZ7Hi|ZZk_u81}4!<{x zGmI|*U>`rHoOwUiFL84Hz?Vr<5(}O55N!u9?P66Tji1EEgo9I;rC{7hVdnB zZU6a~ID`CV#TQ>c6Oa09<3|i1qF0R3sk^?K^a%g?rWWUU^-G+w`0b}(jq3&ReVu;M z&ZYl;BK6Dto_;OP^Xiv4gZyUo6W1^CsC}J&xxT9H8C{Fam+hxT?hnq7=6am|6TE)! zt&_cS=KcNr*2j%FgZw7-BRaNm%J83U`3N75s@I9a`k=#Zd>-GIInXctMnB(5aMZ`o zDQDh~*UtnP_>QhV>c_moqlUMDo!i)OTTB=Z@s?Cekt%4-@*A&()w}z zVm*MkQRlDIuQv4F@msH3c;hqI&%hbRm*8l3{W6|s(J%36e_MXV@R0_wm_MjroF~U;gCD`(!1^-G*Vev`t8&%f}a=H=_>cbo?`{c1eg?*e-IwK&hKU*Zh%o8hO+ zGr8WTTe5jcU3%jS?;B*jus#4oOgBF3j`yy7xW1b8IN}WB%j)lCpC6rO{jB}u_a`_G zh4q2(i81_sz3C3IrktPKkDjkaoKbw7xoB5p? zH?>jyz9D{MZTwK)>ze$H=U?Is@jGGtTP~D z_^7XTe-zhS+HdxA^!abQAFJax8owFwk6s^w8!`Lv3tW}oAU-+oShlED#+Uz}y))RA8%Nf(CI=`KdQ)DwF}>@AJ7IWXUpNj9{_)eT7IK6zIBIid|@ePtrR;8nTEggTo@qHhdkF4T&m~Z6#^7^gc zpr5tl2Ot0CH`t0V@coVdRdJ(TnfjQ7FCyQa_@b;ctLFF3_}2dW20rGddd(Zw!L`QU zSCP*v>jzP9*xIk+pOBivf&S|9Wk3Aq<&!x6HOCQLuoYj-<i7x=m8&?caT(>d`WJ9|`8JR5#C}4%cE?xzS6{y!C7rDDE6Q!X zUjsVw>Z6pWInXcG?Goj-^ow@j<}=!#L@62NKa^{>zfsN%Y|Hv6{C^w$n(L;dTuZ-& zpLx9cAl>p-w=+p5v(A4Lp9s!g`OvQ2@eN$xTED12S>->JYv~vFFQFs1J|go`xr)QO zuZ413`UR(#?`32@vWicrlTqm?w{?FP?YgXw;vCnGZ&p87-b1JPP_Ct4@S}a~r4Q@A zG|Dymzlr?>PA}i)@fAMk$Q|Fn^{w?=-a}W#H}dh8e)0VhbmY|s>RId8N=LaZ{esiY zC+;{_I+f&Plzwx$bMk?9>-j18p`)@sigVmbzsR4g;w$MX`EbPte(1=nk5Zn+q0>=r zOTXas@*S_fC+9d^e2V{gUex^le3COGTX%eeWBw>*jx! zPOWs5YwK5YKCWLpuT($h!u7xSRPp`kjQZF9tNjK}pZ~1!x2>C+4?My-Ne!LX=WUL) z`qi9X{o*>Wci;GU$h78ul>jA=znPZo423N&iDq-w;q2jeU$W?56@Q$=g9VP zeaQJSTk%u=KmQ|E@s)CI{c6s~`4F!(M$Mb%L+SuNlq+$Ylhe6X{4V@9XW@-+WRUtk zL0dPeI+uLl=ln`LtoSF?kB@8J-)(cif4W?I{MDR({c^d-97m~FF)HqP+_&O8$%)kO z&6_vAfwS@Jm-DgLzw!RH^S{zx=r~&G?eSN0`t>XMEsQT6HgD$ot*l>g`t-5g_zNDk z{pwe9`t`eZekJ8M^$SjCd;{mRnSKQeI(l3ml2Oc7^>c3hO16*lVf>Yh&QLDy}XwzCEu7|jdEgO`^p>NDEYYc3m&%p z>Q{3vv_*Z`k*r zxnAIWT)&*pi^PMh_LI1ej7mqj(RzPb_8T~T{}=K`}fxTxx9x?`w!(>`YrkqfZ%I?rM!v* z^{ezz%D>(I%KpCjprf)rih0-Gzqj;z;RmG;lxsbImCwuV&>7!=IOzCV?Q*Gp!RgiS z=It;0P2xHF{Ac;eT=y8o-|@CSP61qU+)n!aAmxx%?GJHljlbaZj=vux*ORQ`klH7s z(oyay-1Z;%p`(-2f0llakqOBvK9p4T)V#$Ss6ynV^*-{W!nkpODVS*?d-f<@}KCD!x*d+C61DB$X2CuYWlp*2fq~^`}nN!4fQ9h z_?qvBoupoo?e+M9^o8-2d`kZ(=Z9<+-%*Y~#@qfYe&h3di!b=TmwwB-F2jE#`wg7W z)^C|t-{(X7yG=RdzwjIEv-MH94gXDCgWmZt{`3}K ztUH3ApRJFtBggM+iN_@UqH^--d*h5CJw_DnVvm^a*CB&*W%0fv6z zx9_Eo&r+YyQ^G#b-|g`qoX_rG%6;kke9&)i@x}AU-%GzJw{`yooX^%T;?}r3dHJ4vY5y$O z6KCdvj-IU#lxyo(b3U7IxqiWUdwjwDBYXaAJ^zAy#V*z_&Xf4cIQVRRwDqewpUt;i zzu@%67y6~Bqz<=i&F2>D{#l+!JaZP%(X;h|a&7%;&S*Dp99jc=M;(smWc(r);G zD(;fV&Eax>3LZWHI(oJ~P_8}xYR+f#E!QtNAB``^!JJ>6dH>q^)gb3VN6*#=%C+^& z^#bR!`IhS!oWA&8um6C4CI7nLR>_z81rJ;3=-K)}xwd{a=d<~i>ld7l#uxJ|3%ef50G3!_IJ!8+h_~N+$=;+z{_$>4G&#mV-zSI1^{H|<0zOlcH z-}wL6>!Tzt5&if5=XYPEo@7&jdBgJ!WL0`TU`|eRGu^&&d?z_F>iy8y((CiJ*Oy zD}K`H`2a(|@Egv5_W0I({&eCRfb;2mfy@6fEYojq@jVHD_TQ85U;PrVz$D^|3|-T-anZ5 zILwc~Y|h8={x-pCZs^mRUr~QFZ>UGz{+9bs>RF8PQ@dYGhu>&_BWDOsFW;xg`H@w8 z*ZSb&;1@H#!Z!py{uFipz1Dy4B_Fbz@WF3r2X+6vmXB*We=5F*<2%7`lC#r)A0p>N zR`DS|WK}x+V(A0>(LTKK-TM8o;6pq0>O-QCjPldN{u?<*aC-SLevs9Ck;^ILo0N<4 z8~2A$zj}StT7A3@TrSyd_$H}`*uC_N`ai0V9ABq?xwiAC_Fs@am0wZrQvG`4TdrrT z_&&&o`*M5h_hn@NkyU<0`K|Y>;W)2;50N>@Dh~9oUj5eVqgLwoEYEKwy9poshIYD_ zejkqS#PI;9m(O|+owt8M`*6m0_(|FySsmZNepuW8;klH(_4~8nkyYHsGw(Q_Q}TiS z^!yWC;PmPjaj11_rK9|%^XGc~+e-ZoTR(pVzwNDGj^g~O;#<;<_)dHTIKBF{bZVu; zFH6T?cYLGN*R5Z`=9Tp zU+{2!(N5j^5ciSM@jd4qDjlij`vWG;>E;VkV$ghk{esgO-^hGd*KYg56&)qsyH5LTus|Cr}O{O@4h-)`qi9nzL+Rzi<-|r{({pP-!Rjqaaj3pJs)^D zKePk4J~+GdsrZgqw|Ca*INa8+=5+G~DY5pSkq*CH>x1*b{=_wJXJ>pPXXDo|=Yw@+ z`|Fp>J63UT>sNF3t6y+B;~O|1zkb2P_OcybzMpCB{6KO|rqVC(q3a=)j{I%?N{(l- zq!SlkkbE}RujJdCeg&(0{R(II`W<}jZ|mz{xUGBr0+zTO+vBh1?0){-jeg~Ne0Tjy z0b-7;^{YAi)h{@E(Jy$|@%!nQ%faswUC*C+|6gZW-{_ww&DpPh!Rd@|O!8uA}x1#qr;6jt#5>5Ubd=wEzZ#D7@>%bp zTYrC->jVA3|MmJPw99gw_53d9_fyDL`RP$U_-$|fJ{(_Z7vS{j_aOcwtNkbG6epDq zzqIc^5A)`X@0rHkv?Z%J(0*3)jdOnckH3-2Sv!89-NSnID-_9S|3%qT`4#0_;~VzF z|MmK)wfZgZQ`nXd?bNFe@lrC|_;2DIvmc%Jugv>@fy-H~58*@q>5cE}$Q)#~{~qK! z$$8m-!8bo(y7^P_eT=+^tV&1ur;w5l^ry=Q7moAl_d{R~vWf%oA*<3+{!;y(oc^=c z$vnyjzwNExhvPeOJizJgUp`5E$*MS_fA#9u8{hYl>q~YUzLE2@-v73I{NU^RFKjN} z^Cs(}Mp(_=)Q7}3uivWPPv__3`djNl(C*FoRqelOeHrQp&LP~NKOY10kd^paewDaI z*mU@T{;K}3_Mek4{vR%n>@vQ<$6LS8e~P>xeyaOtq%ZZ~kjn!f=WpqHX?(%y<+J)Z zrkp>;ubhH@tu?-(-ltf_f8>0Y`tMbc<8%At|G$gbD!wwVq~rtr>GI(>__^+%SI1X4 zs9eSIAyCn@kyYu)-yDA@J`bE;zRlw+eDJe7zLD!&U%wqCoviX7+LfhW#1($_>Z6pW zIjnY>%eQ`?X5{+fI5(g8scwH<%KWMP2fvu@Pxw&pdVLhm_v+VNHyZDkHGPuauvrx(#fiH#H}^I z0;iYnMcNBl#Ua$msC3-dYu(?4pX>Ee@T*t9upWX3|sfi6kt>5w*2z4}G_A*=XGdP=_LgWuq1uRcn77Kctp z{agA4r<+gWMMnFnnSR@U#c!N}JHAo!spA+p-PTRbC(lEi`8@d9s}D=3RyzD+>sNC= z&d2#!&$)>Al2LJ|=ho)UeEwyWGXprQ`K#=IzJ9^OeDJedA5rRCw?88t?aJ1#=5+H3 z-m!|KBqyWed&ZuWeBJ*Qzk$;k-^k_F`I3MddQ=v~r$Cs`r(`G(@I?lUkegjTtd;{l4_X`w9d)#ZpcM{I%<7;zhZnP^~ zzwn!v@BVY*l6x}BuX)^`lMl4J^3R3e<~+{T{&7yF_90v2{y6D&-u(KN^3H7G=g0LS z`GstipB~q*!&9(?9K$Rz&pSLQ8Jv3~WdIsN*TdDdCSQQVM> ziZ9aJ<1aXUDRARxEbGk-29KWe!=OCZ{TwM*T3N5{NQJ=KHBpD-T$He*z;%2 z>E%0K{Z1Iy|Kd~nXD+wAmn$V-Uw;(8fzuh^$RvLKNQ}0p%*}DuPB-E^ zN{)f;EARXY`Gkrua{l&p=WRapyQLla+TZs2h2Ky=AK%ZC4cSHUE!R`G{a5@3P9GoX zcHXwqFP=|8Kk3#-U_KgemH({Ym4$!o@t5-hr_z2jRcPjeh%avc#wosRn3<1e2FPA}i)@tv3t z^>)WMa(=ab%X{dw|In_i=QoOfg){j2mr`EEA=#5r`arvC=@*<{{qDtweCzd5;P&db z_(}T@?aF%o3gzQ`uRcn7n!_4ba{1Q#7epU8&dnFljx}FtemWg~G236IUw3>Xlhpb( z*F6Ry4@ou$`qTP6$^PuWo%H)5Qqi=LeMrCH^y>Fxm@x*jii1<*&- zj&u6Y8h?+0^CzqLik@!s!Eb1%Zhb`NpmG(*CrKx((&3-h_zO-i-{$e1a((B2oV@WB zKh^qu7q}d<%725Tx5i)EKW|^E^=0t?((xny2Xl}W4&)1qbUv=t{z|*U`MUpE%Xf@i zF4<*#K{!J?{6K$o`N9RS8}UUPUJZ@)Z;{I@eEff$PuAcz_@;_4*8DpE7TsBVEi}tq+`E{Kv;N-!D1xao~J5U(vM@U*SXjPR{sR{U7R2R^rQk zDWA9ba9+`|ul-r$Tj@tMU-SL2Qx#vQ|JL#y1DAia`WN9t{d$Wp;`+VxTh?{mZhznc z=d<-&=GFK425AS@`Y7yg^?x{yY$`Bss6Sbio)4Il5A@$kpA#Q}^R4+6%5Cwj)d$LL zT_54NUiqNk-r|e5O*Vo4SRd7C=uiV#4vbmv;Q4|!|TI-{h>f=T7Bby4$ z8|qJ1rRM_-{o=gurH{{2pU;i^FW`K(e#?F77a(*GczmVS>{ z&%bcKQ{62t6y+B<15)5vwk^Yy?(*N7W16`^s70a&9_{?;B?0K%=yqbtomVm zzqow-6&^9&>le7e=fAbzZ(-iso<9T7$9I%$$m;l>dB^hcS27aQy?%lF@BjV*#$Sq((zQfQl5boe$pP^5v&T1# z3-KB}k#+T2>_3yQQdH?e9SFXnq-){A*Is4TwI3JC#1VYTQ(&>8rf`>Eg zSHGI`+5OA%@fVzr#+T2xem{)XSI*mCtGJg|k-F{6{+ah+-i?0p+4?}cvd3S|`E0(m z^Ji=Q8}e!0e=hN|##t-95#LF2e)9N+c4d#hReYb!w_LyAd{n=D{?F%ZQ^4|elz)*` z>G^;;`C7kNcLYB_TOXgLU43pnzcETpo;<%Vzbl*EdhNgBH|Dd}M=jOwi}-_VDll(| z6Iqp>4`{_#@_qLB_H|^!udU}d^H7QZ}CO@gMGGsQLfoPOI&eW zuYAy_wLS{_o8xcfc0%JqYEXGY{mH8Ie1M_fd|qyczVT!2_eag=PlXGd&(?4A`Q7X{ z_H=LYJq2({OL+45_KTGNOGwS~M*lZ57dW4--(%$RkMTYq^m%gn@1vAQHWipR)Ss+M z&j-xO*Z#wKxK4StK7I{M_-ioyH}QUOKAW$+7wJCV5W(r||F(`VjeGO<f`$T zV8}PyPObovcc4#&_iWaQ>;%$6CJkk@F*~IFSEZzLVsKder^%T0W_5 zGK%lv_)eT7IK6xy0_R6o@m=>Xd>q=BrH|q_aQgIN>D0@IdU*B0wVXe<@!u$ZmN-AA9 z<9n9po03(2qJD+9iW}|Tn*YIXIL|@Vz#4;?)P!&7YdD>@d<(vaMfmy7_{D)c!Nl(e5pM6u)u4_4=rl`c3ck zo42j>3%{WrUVSj#{Hfyj^O^UMRq01g9*%SJjrdM{065)zQ3{Nj<57JSzkySaFRSAl zB%iwdMNVI?U%no1t$$m~Cltx3I3oR6rRTU=@f|g1zxoBIGro~M<<~EGIKR>keSDnT z{3-F}a@xTXI{TW@od%aV0^f~{*dPp&wL(^bL&Ge$VhybK9_35 zchsD2z94`BeEI+Uk18GQzCHee(;45$7=HbNhx0={-1^|`(x=3i%V|HCYQ%TaoNm4- zfDwH8|NM_C9qs;FAAIiS=W(PI^x&XFF1XCThE^d@f+&l)`wJ+jEbYJUp~Qn|HmX5p2a%v z-&^x!D;@2=tzU3D;~O}i&Gai+s7JT@6;3yw_>c6e+TUjSt?s|Az5du-zlbk%;?)P@ zu(f`Xua_@MMzM;ok&br1Sij!*2IlkYSLQ8JUDU&^56O>=(#MhNowj36=l{3IU(M;} z3yFfZp!xjz1*fxrjx$}lkEQ&#o)0{n-~QvTTqm6?ZZ6(_|1{>$a-4g95GAA9e?~gm zeOtfqr!&5R`TY8o>v5?r>fzRhvYe}0PDDnC8S2fvl_eeI9w=1;}KPv*10(p+E@Gj6*ztVdmlI-vWnwjzLE2z-v^wx`u%Uq{26&W8n`tScK~k8DEKGef@Tnbh0|W5#^`k1O44DA3E~t1N9`UIIMPwa$EXEJ8<&_ z@ki|^NhYJXQLfqk#+={$k9vI+&R?nz%TMOIsetku@tx#2XZss+dD>5sdot_%CtUE8 zSHFAlpqXi~5sQ{zJLe`*Cpp5;}70Bc>42R_WKeuZ413`UR(#?`32>vf59a zoIX`L%5B}>MZ2ljMGD@c<*-B4`ALy@|zl?Hb zU|X+$L;LmWx9GIulX5Nn!f)X4>Z8q}`A}|4zu@%p{Vd@iyC}ZR@6RX6FtT;WH%LCA z;*#i)ReYWE`{UJfYKUOA$x*a%x#hijwg31i@YDD=Z|?X8 z&bJqnopibJPYT@)~k?M0U%`Toy!x-T$2uY2C@(9Dh0aK)Y|pFVCNi{Y&RBq}zG(>sPMFIlBQmdR!lp zQOs8P>2dvP&d2#UAM1C9ggP0;O}d@8zs|`w;+y+DaNdsp;`l};Ass7@wrhqV<7t?fcJ~b1VH)t}2e= z{bY>vlzdOWoP#^QLGlR|N91%G=QLkVzs-krM|+RI*6+%q+}8CkIKBFPnb=QcwV%X& zWK=rJjn@0iMmaICt=C7P{d&jW@*X|CWBi>D4cEb~TPY+WxZN zI0JWl1Lsrg*If4)`FKmeC&@4SZzuhJkaEbX_J?v?<1aY9)+u2rQ-*+uX!UY9Fi{^de0lu`M6g5L;1wN z319pVE|=^wz9^hA9e$v{YWy073tl($i#W92zk1Dw^0PI#4Zf-3ixvNr^PT_E;=7Ko zoFB4X#dnH)UTKFuKGMa!)%t+{$qFAI*L=U^$j5=x8b6SK%YSS6imns(t@g)!Ljb4G ze;*^~Lst3eg#3d}=cCi-Z9e#|=-9_+jc=$wS;gIaKkURc0H-y6ERJvF{FdH-KFaaO zc-w!)Z{YO#Z|nGi?|bRDtm`uTH?rTr`E31`dG&ohv|np|)YA5cYX z5B*x}qY(er{NP2}Guc#N-pYMGot_Uc^b5azFMWKL`h1>Jb?p8HoX;MA%YEtle28Cf z@x}MA-%GzJw{`yooX^%T;?}DYvnn$rTUfUCeQ3Q z=;+z{K)Lq#t2v*|hkmO){(|$-_}+j1biIDTBk}E4znZh(@fVzr#+T2xo*z%oC8dqN zr&u`ta$JWqTj=Q7`arq1el_Q_`IhS!oR7wr&p%2wWK|rYU$QD)4kwe6FXvaX=ghXu z1ATm}?_W(Q|2ALd63%}0%k>zX^JiPXod0V53Kn$qY<-~IrhbL<*?g<@Oa17r^_R$} zb^UvkdXiN-eOSMeU)D)?^Jf8sc{1Pf`7;2W@jY`sq+=al$$q(hWj-M1K}XNl2g7U$f0parAf04R;{N*#~ z_<6%P_-uWkTzmZ0oX_T4KK_E!7vG;bn}Mu~uXWudhm%Q%U+S0l9 z&ziGe{esgMUx`98D!%RX+wsM70npL2_3?RR^3Sd3H{`fy^OfI~z3so^H?D`ZJ_`Ln z>-zUa>Pa>gm^VD%Kvt#a0}TD<_)c=lfKl?BE<_Bw^-}oi6|9**v|3=;q&S&>8NAb_mim&iNcPFR+K1z9H zlSA@$iu_NqDm@=CCm-m)I)3om_tNjL!u@MZ*w=jE0_U^!Ti%OwpKp+Q^cG*b?wq$T zzma>>=4^k*Fy}Im)$J^DI{87;QEs+$z^(XVKhD?f6Y+Q?%R|N-az(} zW3b+j^D=VzFV_77;Y0uCjj#0{&Jst>y>$J;&iWk=f&D~Q`SoAopMP1`=i=Yo{;Kh9 zZG2xv<{+y$EdBmV%Kw)YU)c}+*6X9z^1TksM^^Ebbv!z~#62Bu>m&Qm*}pK|{HgdX zef)FcGyZACSN8YL2mN~ETdrqy9LqW$o!-(f?#u11-`_`$BUu&q7m44C6<;|IoZj*G z5SfFl;xP0Z#4lvi;WzXle9&*bK5C_Y&vN~n>?Pk(+E22V=|fAu@Y~+{V6V=fim#-n z-BFd^*gM+f7Q}2{I<7#OFvx2SK{9KeLZk` z^^1O#tZHY5e)Ib~%=`C~NG!5-#~1l%{SFqltzW*NZ>@h@+y11s$teFlu3ydBuYSSl zyT05`zu@7B^s8UZ*{^=V>5OmWc+}T#>-8(oBc3I`(oeee!P%wHjr6NI-F#61tNzbF z{({pP-@ts;{5idknzxGE9)H2Zr}e8}&DpPh!Rd^z#L=%`X%AiV~SzGLn6CFyqF{Q8yofK<0%{c6sB^$X5k^a~yiaKHN1oc)f!;B>|} zayORK$`&W_= zoBTbATOX1inT_sWX-+p^6u`=VTg{*A_k*pTUj?bJTfdTzRJULKYR-Q33(mgud)>Z# ze9~N!QTlDCr^65Qr_0B@9-LnNS~@k-&tLey9@+bR=s)ZAQQ$^BhG0Fv%O3hEWP9nq z_-&fglf6uDKff_@etYZpcjg<&D!vyfzx8|~{N&Z|A#i=kDh}iNH;7-zro(Tvzlrn1 z{KpyJvt0isd&zf{_LJ;odh_`Wv@2MzKBTtEC=Np(!#_tp!PSuYRrje};aC=JUJ42mN~E`#N%c$tr!6 zb+kI&etv`VIR&{-v=&lAbZJSu3vbWxct`h zozU;ed4K#bk;@~i_(~kBbn%b1ejk3@S-;^Ub0>Sr9i)7+DfvcxC$29zz54wWI6tzN z9On9k((l~o8zMOM{BUjm{9f`QtN8vDIDfJ#y~N$%8~Hrz{cp?p`1<|}n~V3nal-T) zY{e(#TkWs3J3haDKi%$p6Z^+nzg7A@;j7k{VLv$S`7`_j3qK)WSfn#o8JCUt3P1gR z+`N5xHlM`zzm56TDRMpFr@DVedfR`Tk2TI(x^C)M_`&Jqv-&xP=g$;KZ0-I}`11Hs zegC%Be}4{KG}%jz;a%i(vMRmR{@}NwW8MF)<+JAT*0|gpe)%%LS?gy8bKTU$Y=4%1E&nyI z&xOBtKIpez|F$x|*7}+J{RQQx+Fwh*Sib^}z4Uts9AUDTeC_*JBcBIOFQ0Xvk4u?9 zFZt4XpLsLy|H*!gzxDbk_;q3b@=E%-WEF?Cezi6J!f$))!_am6{`18C1*dcT<;?g~ z`R`(fk)D$6@eTTQ#`kww|CX%cC_1&$Z}VZ@5!#toAJ+UC?VGIPM!PcaKacEraC-S( zCeDwn;;`Zi-I?pRgb($r*GIvx$j82ZlX`}1HDBa(YDX%)rC<0Be)j6a(5bmT0QEQ5 z4^C3wGwN5(55>Pr{r4irlU06_+>=r1=r_#umlL?yy5k!qpDK=MKeaxJt`qiw{@@?J z9&fFGga4QMZ+rb}&VKa^PWYGOwAO#tbq4zX<@yDWaO8IApW!g!=yv?ooZai!8{f$F_3KyW1L8ikGw=Ae{rIan zy?p!W7o5)iIY@kizR&XT{2B4>R=@C@fJUGHUPjJ`>^I4=HY$Dj{VQ<#__n+LmFsb- zUBCL(oc-z-oX+?L4v2sL3?9y}-}$rV?05VHr!&4$;=9rH?<>wOe}C-N$M)l|)K@sY zeEW^R;B>|}NIvfI7d&kH)vxC4SHIwN#y3hn8|fFY(l&F%BC^{W@Zv#b4AbZxXh_)q-o)ra-{uXSDLUH`V$e}};B zg=})jtxcsjpWn@X~!?j`TjRc_XXRTl$6HFwX6z-%pYG$SS@= z;PgXC$p`wY=ARSq2d9(IdQTJ=!k?FX^xmjB(SCoF@L~M*#`n)$-az(}V|W*4j$~E( z((%_?|F*pUCyv(qne&<0T<~%IN*v)oKCt*T0o>Au90xw*{;r#E63+Zw>M}mjPxJmu zn~%#k-mfuO>qDFGmmE1?a9ZQrQa($+*YV|Yi>{6M3LnZpJsjV;Jgfh^=;zS>n6G@^ z=7Zl_;|KU{eQ-&}@2gz=&W7e|z8`kte8FjrA4~bH@wbe#n(r96eDnRV!k5PnUwp0k z%f&oJ^D$leyd7V}72||gAC`Wt>&vpP%itTi2H zS-(eVzsah0`Bmcg)mnc!a=QbkQ@`f@D@(tn-$~d9`nx^<%=(-f`_1_u*VDTH_ac5G zn?P=CxB1|=o%QkX@0)=OoKF32e*YPK(66=rEyuqR-;2N*aarG2 zM^5T7Y z`W3yNCBEJ2S9A8OUvN6(yP1B$Bk}E4znZgO{esgO->vm4SeWN{^|Af+}7_ zUjRDeyS081-`@2L_eG!o_8Wfz=;Pab{*3rayXjBAGH-$Vy45c@o$=jFzu;lV^?UuR zIr|-d!Rd^z^rQakU%4LdUcZ{t+rR8L{({pP-_7(3p5FDVIs4TwIGyp`Ouro0rR(3m z-~DIJ*{^=V>5T7Y`UMZ$e#c+U*{^=V>5T8j`o;H7J753CZ`>}E{l=c)&!z9z0H;&G zoBw`n@f+92S|7Ev|GV&w@>4rK9e$uc-M-+ro%MT^?~jsI++Rl~|LR=-w$Oj(?>}4L z|CZl{zU{x_H?D^_zQ0eL4_W0W`o3Y_$f|TsO`j?GI=*OsuugrLzmIM`AAxes@Asu% zIIdSdv@dIY6!y2i|FzbamEYliFus$t1n2!B>-(dk1I^cb{#3Yfe0_Z8`xh+zHlN?k zeq;Z6<7=$*9m+aE?LUbcnQ!!Wt>07NBeMUT_lKi37p z^(C7M%$wD}93vlcjQ9DV&y&x8*868J-ZP`Qa|Pz)JMo?5NS{8;=db=Gej=;<`fK2F ze+`EJge%9_$!ER)$kH#p4{6@s#ru4N9OsO$_5P@f_e5#`F2Wkc_aGx#Ps4tx*Cm-8|CCayolIf2k7<+8E)Mm{>PAFST5c0GT+zy8g9 zf1YsAW8%Wc<$e`z^Z9YvpVtpQn@{{>&7V(^>w$i{?w^ z^zwZQ3`q8pZ#YOgS(W}W4)gY6U4O{_LC!x_`dI6~_mRsZt2nIjx7GgOw{jiQy1ujY z!CV)gmwXHQ#dP?M_)eT7IP3c_YyI~jaDHSj`37s=b&%r^;XYp;Kb-Nk-VbYyze}%w zp%bq@*n9J*@?ZP9#PHw9Ip+3Pjc;q?Ykfa`2wV-AA<`CdonAgeg8 z$6r3KrC<0B)~gRLb^cU*mOjdLiQ&JAbL^cD`t`=QT+izGTGzi{M~SmBeqde3-ukuT zUeb;D3O_i#{mUV6iDXlOc{>FDC)vyN#lLR`{nqQFR_fPUUu)ifZs`|(+gl%WKXBg2 zUiz>7{yaGkoZkM$8YhhYW%2KuLBG!UTGzi1-+#usqrLU}GID&$s`w&q=KHtgJaBsT z3!RZw9HiTMBdgNU?py2gkZ-*{YNdY7^?As@=5Fa1enUOH`d}~3pUO`!6Yn9b(oui& z{dsa8INf|v2&3jO^qYS-#k_wne9*5uzJd8@9;p0;{K=~HuOlCSef`T9^sV)8@PCQ_ zL)S+a{jlb1>sNF3t6y;Xt}m_Uo7U?WJRJWLKOZ0GHh-#iM!KChvML?z$JVdr>{q|w z^!d-aep|0!c^>i1e(!hu)tvq67o5)cMve#RSm|KBe!(O06@9t&!P%ux#rL>=HK&^| z3Si|w|M&||XM6+m`NvKB~O_(smhuV3)6?RWguoc-z-oX+?L&Sx|I z3Rd^}70&MUJ2>MTCBD`8v3~r8!`ODOU*I~wpRwkl{_z)p&iDq-$FEKB~O_(qAZTfgAp{QA|e=InR;1*bE#3C^Zpg@&iCQm`jGs{=<6fl zcv*e_S?(JkU+4F~);M+uTmV_cjdtI@{|ruNd?R!C=g;8b{7?_KJ~+Gdsr>XZ@eZ;o zeewM(zOD3&{&8>p{ys7{S*4HCZ>Qt~{ptPGg3^-5b>RAvO$Fx7THn*s?a%S@#B7QC0n@ZZQ8 zg45f-e2APMS>?Y&;B>M&JxY4K&jJ8QMS((aJ&qvHq8hh4}wvcFsN7i;|+_~A!;{%rXPys+SAt}-sC=5U}t?H`nH zt$)M*-T0z##@l=+*ZT>bNmt*PF()G*4=b8GI_=B?^KbHG%F30NU7=k~Oqp)4P zm+Q9wir@H@Q}p@ohsgPmz2q?8FWG8;@EiP8_s>XQ9N)lvhpPWG$K@!;8|@F}gVV`p z%~KeHKQH}y@m@V6zLT69*?Qw^t?xbt&Y$ch-%!@o+~+Ip(AWMf{aW+t=KOi&dLhnE z{SMZ32A48_D*rXFKZI`x;Pm;=xc_3l-?^n<_zl*nkKrKoB&+;1lue~Kug@nwv3EYq z|LXN`;9l7OS@&Pe_p`V3i|60>)~})K_Wdi-2ROa@EzN9M`zyz%W_h5$N}s|9{nqQF zR>s%-eY2ud&0W%O^TBW6*h{}gzu3P2Jh6wt>E-)f;z2e!j%;PmRZ#7lEr1X}T-Up3c%2p{xYuaAOmkdJ-+CiRTj zDh}jNR;9P}3%`NGtB*rqKC+6#;zPOruW^3^oL;^ci3eHD$JpsprK8_4*I!O@Vr1)% zZ;*Uy|4II}KJ4+AujgCq-{AkH?avrzhsX7+Is4TwIIHnl;=j~?)^&!Z4_m+B;r4y2;Viu&~{^8xW&zxvgj{puH- z&i*+{e7BlEBfip)c*nOx;0(!bH2%VGoUfN}KmCH!8DH_AU%zraE^g~rznZgO{esgO z-^c;+&!54=`Sm;gYR-Q33r=TzgT%M)|01U^zyB=x$Z7rRS9A8OUvN6(8zmq2_zNDk z{pwe9_N!lTI^!E8pN;g3>$1J|Yy7Tk`}bo39O=ZW(x z{;B+Xwg3C9&%^hh&iMW=@83#R`LBFWWTmIW?e@2~emP3>r{Zq@zWm5%_Ra_W*6X97 zo63VM7>g&4Z^QTi4U+4WRW1QeZ_*40>`TVZ% zLBG!UTE9O&nCl)RL;sJMu&?!d3cMe2_Kt7X_rD*c9J0!P2T4DK+kD^xr<2cm&kQ?( zKQH+%-ph5L5Bfa?-}v$8$Pi>NIfkR8lU3<0{lag1>-SS&ZnBE+W#n}8{YMk;2dA@t zvECEKh4AMk-^F|NQu4Jvir>KLi|-GC^C5f5F}#bMPFAItaoOM-`MkV-t6KjC{`UC6 z*Y^{fZ}hmFaB#x)d(F7qR{KNwdHvS2`NXeQ|3}Y#&f6Dw-O%qK`PlDY<$NYK7yc7J zWe&@)Mtmj1%x8>mZoVL#xm|KaO5AVrouppqr>*|E%{P~Ct`D%*hc@3YIdZ+g>Es(M z{T7`fzFcn6^=x911!f9v|F+{aiKU#uU1pPl-!#$WgEBZ1S&x7+ zvSgAVZ*4|;N`^UTY*M{FG4k=mXru0zI;B@MDukMEfTDSbQhubLzt!e?`ATtzWcn`}uqLZ4C*O|x1*bErQJC7v4eg!r;~5T@fV!V_->|O@bs=<&DpPh z!Rd_eX8Ps04&CclbM~uWa603=nSQ~;w%_qrbM~uWa603=wSEPwT*tZib{KyJ5GJ_z zb{u~J=;Pb^`WIB)>ldKD`)fPSp8@EM?`Hay`G8>ct6$C8@AwN&XM8ssf5F26?pME> zv)}O-oX+@ereC=p?_R%}vtRv!(;45*^b4Ne^{YAi)h{@m@!d?n9M@Of>sNF3t6y+B z{|CH=E_5^=^miGGDdjFQ}2d7iN=I_T^ z-~X29#uE1R_vgiLTpw$F)WYxIhTo;WWK)58dztv3WL0`T;OhH9-UGkwtl#*Jxsz3V zUxoW?D2G$zyDnP27mhWTjHht)J{)swcB55hb}(z{*|Q<_{aQypW8)V|K-&0 zZhUwSz*--*RKJJ7ktC~hP=1GBr}NS2vk~7(j`ZChI?MAB$tu3`9FtBj>$(g+;mYmL z$2VB-U$CCvXgGL)p{DywgIlh_tE%PYN z_iJRrU*l~)aDmgwH~b*wkxd2W&C>6?z=ymG_xXm%$2sF`y+7*WJyDvQOHH2!-^kbH zUw)G#A8vn~kM*9nYki>HYzg4T{9wX<;d{7$=6p=P!1+_0CGIFU+uMAja0NN;TQz@? z{ds%|*7LEsocSLV56!{5ztK82N#}CW{>}NzBz*BZ@#Xp_?CbcRqSQlE*NDLzh8WsQJHdgYbp>e1jZ!s`atbfA1w9vdVvD z9iC2awLka`$6fW$EBV+P^QYpo*2lkze8w9qz7y{Ur_ro3|bC6YhX#dUiMH|jYw z`WNf@Y>OMZr1j-=$c^}Bzi|#%>!Viky$+lY*;HWO%5{)VhhJLb2afaVBLh|OZKoUl zoA}J$`Or?i@ipUE+KGxg+O?%$JlBom_R{YmaGc00zH(n7CENM{r1>1@vk-io69k;f3N4y%!PJu=@)*(aeL{vz3$eC@5J>0r5QYG)QV{9?90;Y0o0@r_JU-+xB?A-m9jd_CS=|2A@Yh(l|BYWd0J6aSe0 z8#QOY`UR(Rejg;hRUFZNuJmF04?Ge-InJ$*65wy;pY*RN|68qJ&FSU~!cqHAlF2CU z<@yDuGro~Q{Q8yW5zm}o(Wj4(bDKYvpB~q*=ImF$;Pm-#yYUx165nq1t2z7CFF2j? zjT{fZemS4!`nOTyFZTK4ujcGmzuh5CC68ebL&Ge$SmU< z`GnT|8JupuAb_?1B$Z3eg&)F@mBz0ocEutc^uUQOGfw4LH4ZHujX|3FHtyR#V5&R6gT=cbNtAD1EPu+~a%-vl7ChZgL_)r*Lu#t;x51Yoto=`{%-pR z*IifZ-&Xd2*6*X2b$HsZ7+0f^#;%1`a|bhxdL-ua;4tMySM*SzrGe}1E^$I|T& z`Xj6STGAW-n@vQ_>anSYLyxG@v2A^koq)x-_5P&3@wyyzzYmoL)ZbIeVs-GmOaC-SZ zNqJ-y2UE*`?LT4SpSwBl{d5-tNooKABy9={c|pO z(Cy69^;;?5)UU)BoL)YwpR>4|{aoWsdEf1!16^F~(1@m=I}vML?@uXX(fzu`D< z|I8Hgr{b{2wI-@j9)h>r1J3>l6(BJLyah!L3)N3h^tm61F zQqi=LRq4>BrQfoj&)-YGl6x|WucRCPoA?ND_R5F(pEtf{97pj(_4`d2SFQ0E>yB`o zcYG`H(s4Wl-a}T!w|W0c>IF_OpLL&)>E=((C*}XK{_Vm;{7>a4>%MgJ{`16{<@h@1 zFV=nf3wp)fynioz(C;7X-?Vs}uf zn1t>FYQ89h6?e;j@EeZXZG5x%Bz~s z#e2!<_y*Y%bb7P@!}GgmobU6W)y^dMWE402Vz$4raLxbfM!!{jC*gF?PbHURl%FiW zHvKng&VKa^PG9@mPQMa~Gh6t%KmBS>H(!+eV%7d6nT%?e@Jn02l0i561rJ;FlWu)T zwq%r_9@nqtbn^wtFI0SzOh$3TFH7gogEzjBLHzUQQla!Ov{Sb}O18>R)^$nKe`CpT z{#Wqze^xuYC`EC@FN^g%`1rP)KVQ^{{s}+3^-;1_ezN@9^xsr6oc|Sl{N{3(C`UR)2{cWdT@Nmu0PW#iZ z=5+G~uJ88OzuqGJ*qjX^Pi)dG7|2Jw*H(wOM&GidTXM6+m z`R_l2hx3D<-TDysku+{hN3Em2i+zaV*JJdOG|-f4AEg^y^(8 z^ z|MJKBH=lk#NgT+kI7*a~QR#1EN*ac@F(uz|30%fzV9RFM^xO>I_-sA@hkRhII3gYX$d&?mtNrEtIMBxU z=H|b;_0MfS&c|9GVCkdzeo4^>IK6zN+j%347Bl}J^(U*+3wKIB(BJL; z4gNVj9N!sZu=>BZk@u5Te4Ls-Z}Y)#t@$7L|KDiogG>4`WUDxil1^5oH{TCCaem;m z=BG>ftnnB1ujkK&`?mjZ9_ESO_*(OqvQAL@kG+#V@AIMkdi7!H*NS^N-ryU#2HB4f z_s^Wq>zHjSFmI@Tt>40ZpD(vBdY)^zeKGuGJS&B0FCMj2}S0BY6x}70D zwLVJvzc(NBYps9F@o)5hC0^Qp?eyFJ!@481-@Wu}{XWuHX;)v3_aA`^oK8OT{uRn0 zn;ez5!hPF+I1ll&)<)W6m*bhq^VtJeA`5Oj_L7M&CQvJ&Fh-ZoK zDET_CFSpmP=ImF$;B>|}APzc?7zeJ#4>|n0e+Ca9fb+fj*j~Sy)62J?e!=OCZ5Olb_`3Bg*W;31zxvgj{puH-&iDoi zh+Dtl;r#m5ujcGmzup3-I8cAG zD!p*0Bof3gWAZ(qefUt7;_ z$Z^i`_bm6Xl2sh&zsRce!kvKq;xU{-^fRx{d)Cb-G4^@ zwLVJvzc*jer*r((0W1G2|4NR!u{HcR$tgSO*NS`5yTK=1Xa`RH4zB~(lWZz5Z8tI`YieZC=bJ-qS#B>9k49B+l2tV-un)2G2V@^$%_ z-{i=L+aL0Q)g0IQkmJ~VqxZ%Uz=8g%@oUQYF<`9rkKkr&Uw-Rn{@}M# z{-f=Wxh_5xU%Ov4;yZDU;Izh%!f)x9^Z5|6ReaXGtMuFV`SSSTjIXsmuZ&|=e5F1= zTJ2B#SK8q|@nx^hpUST#-SFSYN96bgAD^XDD}5;+^lPn;%KYZ|!6m(p*(yIFK4evT zOTQ==)~k==56xle1AZ~rFHD?c?|jg&H@?>Vxx`WXwH%+qexN_y{;}=|?ZZ31S@CV( z7re~}E^vDJ4uJ{DDjit*UHbcGXs6ctsM0>~jvwawymB8`bC42CU##_IR{v7&Ti)k`ex30(e;=;g$F1TU*xAld8P_(t{ZeEj+a4_o-ztq;kTjE--V9aX=BaiKMTMmu!#865ucSL)}DZ{U13)30E` z&+hR}@*|_;8)Qe&>1bC?{UYDq^*eN?U-29K?A8b3P{%jQjz{&2e522Q)^+4&`t`;) za7F$4mHB}9tzZ3WPIvzz{;Tf;`Nv;y`r4n>&emW5f`|}NPMgIXU!Yz`_GaOoA&#YCpob3{DB;m%%b*(cGa3cze2{r=Ra#4 z^Xr!Zt@Tl;=hMGG62F!5o&G}{>i9<4QT00*7h2<6j&JAlXLo!9`^i84az1%|)F}S< z>O-<2qx5?Syo0PtFTcy1k`MHEyM2MvJN{bFky!d&%7=czS|3&PbN~4WYkgk%9cAr5 zd;Dd8!*8Yh+x{*4@AGl4^QVfV_1r}HU0x%;ljih}zt(dk*8F)XAI3*#e9iTF<#&{; z_y+cm_54QZANe@1J|vf9RD3Ocz%SI18*bO=WV0?fzzws4^kdk?g8{yXd_U z--*xPOTX5-fj5!MHQ%2nTsgi@{eF`2$SOZs`d!Kg{d(j3KCnN?D!!wnlU3<0{TAKw z^||?eHSx23{f6^l!GZt7BAx5eYJcdL^7<|7{d9ZriC_G4+_`@=#}7WgjHlK(VWk^Q7dsm-dj7uiGEi9p(15lYS48xydTN=KZUY&jY7d zzt(*|E@l3Fh!6U`S|2rW&e^{W{jR=$8aRJz{Dt4pKK9bDbzi!9|5^M4PA}g<{6SX5 zk-ap3s`RCN(62MT>+hdNCb!1lS7+Xz+t*I|Mg7St|Djy-`>m1r!0FYm#lfY_pAYdt zzgO#{rpmt!{hITXAcR%BY+awjZ+q((^(U+Shx%K;?D8~rA>K>oAwIMlcYFhr z&^$qLApcq)_V~-!KB~O_(smhuV3)6?N`5=vtRv!(;45u`D~_N!NNS& zs}J+~ElNSvxPo$9*S~W1;N`QfGjjg*^^x>zO}>B}obipE&u01+tnT#-_c`xB?|uDy z_5H}i;AqFq>&w8$`}HgH0r6Wdzt{P*aQ3TT__G)Nf`=W~uYNUWzvC}Bo$(DE55Iop zdR%nTuYNUWzxoBIGrm#cTg_9faiw|x3h|Y3!mAHzck_1D{v^G=K1aV{u8*4FH_q3~ zXZcBTPv+ajzw>hiHlG|F!Rd@|;QX%q7g3Jpv+qAkK5|;W`qiBM>KB~O_(sXctzYo4 zg^s-X*j~Sy)62J?e!=OCZ;*U~)~R(}*V1oZA0^j$UVT{Czt(dT&EJm|E^vDJtmjDB ztMjMopO^BX-CV7YnmFg&Ki>cTcm3}d2hQJoenb4Xw|)=8L00*%`TNh}pB!K3^{@3D z343Y&e25SFa>jT4?-xfVx1QfXyMp!V!_u$iKeT)E_vO+4#P-UEdR(oKlJ=SXdtbl9 zYl#;wI^#;?}?$JW;t4(-2^exDEe^~Sfv zOLLTQ)=Iz4cM4ns#Cb1$SnCGfO8IZYZ9Z^;)5~YAqbPCI{#(ii{hpln|K3L?A)6eM zw`1ggl2z%YJ>2#m{I>V_`zbIVS;hB8(%*#JeBc77w}1H%nS-q2;MDn3rN0Thr^Po! zKF%B8)$i|-a$DnXUcXhZFPoSfI_e+kPA2_Y?qwPP=$I`Dg{=SQR-n*Ev5A;{fPlRs>eB3Ek z`zKCc%4hX|ZzO-R3FO9hn-6{~I`;8d^V4^Mk;p2(=KEpAKj3^^A6)+Xn62UHxsFP45SzoK24&u{#j@a6bTzW&d= zzY!$DRsT}remlNccLYCs^+p_v#t( z6@J9e8(-`GeYsD+F21kM>|f}_s}D=Rs6W}{sJx+Evwt4>P;h$rtowYHehaq|U*Us( zt@TmJr#b!xaZS~~K!0SF|FRDDt{x0fIR`H?S*7y71^zvEbo2B2vZNzsH z4@b7{_)0#u4z&NIbTTy`Ul%W3|F*RKZLeR=*{^=V>6>4b_N3!jbfD80$2Ye_AD=aU zZgbb|kI6~b^M-cVuYSSl^B;8N*RMQ}cosj7(h_#Mf7RwT;yY^2e)S7ZXM6+Vpmn-l zzu=MhcB@~_*{^=V>5Olb_?q)j9d|jJ%x!%PXFdY+Sg$^|AAh9=!s+GPd;UC}o$(D) zUvnP%V0^pPZxvtX{k6U4&+hm}sqa?$mF&9LuW)v+-=Q=8BEG%r7xC>~zux#psi<4O zG9N&ENBKwawZHAhU(MOCe!=PUU;8?8>G%sCjw|Nh-udbF*T0(6%eUY73r=Tzqv*`7 zU%4Ka?D`#lHD|y21*bEsP;;vtRv!(;43=@pbE$^LZuN^{Zda*{^=V z>5OlXfVlMw9=84JS9A8OUvN6(8#y2U{b$Yx>yGx;Z+Q+v&;LHly!~_Q`HgMn_vY`% zTHpVc=T5$n!w&RU#V>QgpVj_}({ca3_5JT5@bP3*fq5&xv#Znd0dw*-Uyg6)@bOvm z=kgqc=KCt;er-L!F-lFG*T2^9KU?4bmgi2AyRZFM`aR~e*1s){ueA=e{EoNwUn{=Q zEv$EZv#x(FeZW8F_xlpp-uZCdYORl28ei-FIL;@V8rqG`Xn*kEB&Rs_Vd)p~A*=XG z+zmeA!uj6ux0F|L1g<~nSo7ud`+V@fH@*^uWE4j`{Wjkz@R`|vJKeu}7r7j=iu)Hy z|0Uk$0~a{G{mc8n9Ap*8kHSG#r61+^W4O-;{hplu`y}O&RUB`HkE}``@^+gKenUU$ z)rY0uqwtYce7{Qiukkh?xWMVs0=PAQ!G7U;c>F*DaY^mqIE2b^BM50Od8Dn27U z{%4qvCwrf7kbF0O=+P_=Hm&W6HBdhq{Moxbl4gZb2KexZ& zG4wmU4Z>%|SNNdcdi~Z~|5?{>?;>-MRsL(~7k-2F>VqlfPsL&AV|Wwzj5n75 zCf?sWAN1>u?~jq|OIG>sDCuNXdP~1pH?y;T!^bdlCws{kq~9f*l5h0S<9yx#PVe}8 zh@2nUOOCmv$BvX^}EZ|py^hW{q6 z7dXBBi?#mE>R(<)F8{^4|15mauQR@bb$_zl2Uq?ZTKau;X8xV^JBWUhO@Yjt=yz!8 z7o1-GA`WB~hoxWmrM12c`mNXZtkmzY_WoZ>zwq16`W?!3koGI;e+tRnH~MGM2ROa@ zMI6ZL_(pDWAF8;+FXsJc;X}J|$5%LBRU8(#tzW(_#=04_Q@1|YP3cql?{WQVPB)+U zZ+rcM(>cEn$#p~0vGO0|}a6W$hf`@ItwE+o{!aa$tiNWeg8^x_N!lT`uw+@e!;{3?RWguobLW5aDBJGe+5owd?WMu$6vV~ zm+JPbU(MOCe!=OCZ;<#_{oKR%uMppEuYch;0qu7D1*bEkGQR0 z{c6sB^$SjCe1qiU)-QP2_B;M+&VI*Va601~C7+G-o7eY@oUdCSk`0;5`E!(hBw3aI zw>X~={}xm7f&R3A(64~g%V({hvA+L(nP$G>#ae$f@_zK6_4=N**T2^91DD^iRsL%} zKMB9>tl#i4&VEStGQL6TPu7U9_!pdB{T{;1F_69F7_95x@;uLdKFoid@il)R_)o%3 zR&lq+U+4qYs}J_x{HZuBeY}Z$#+zvPZ{+>G^FhD$`kuA=wbm&d1N(uj@~i#*ulC!{ z`W-$+E|09@dmA|2e81Ji`*VDq^JnY+fu-NKQTVL(Cw$PaH@>f>JhIA9WgUu6Z|V2C zed+PO{YfHbm{7E9<)Q1(vzenCfR`JpO%6a=34F3riIKAWVCn=At;xP0Z{t;(9 zviJE0K5p>F_r2sp_LA=`>tvF>Om99vd6N7}`_kDj-H_GkEMF#Ou~-#Gi1p08wE z>vt`m)y^dMWR(A!?N9iIz&V^MeXQmCFUg0j;;_~)9OZaxeJK29jlXO8jDF5~e!SiP zP4FArTEA=gB$s5A|Jv#4@B{r-?O*t^ex31^et4++;bUY%vWmN;-{*s$y!x>8Yt3uk z3isP+@Qqxr-2Ou4U)g^Od|YdMqxs#ukxd2O+EjXT{wL)_zxDbQ_;o4Y`@l$K6$hr>#@rTYDIU52QF_Qd&x0a zzu(l-@2m4LZ)j&ueVF(8(7wqkZnP_N{m00B;Pmo+jGP}?#lflbr%H$J%=@Rphx*m) zQ{Y$R)0!Vx^AxlnvWl;zU-%7vcIv~LCl3}M>Tj;!n%MK;^zxPK9qlJGzLEEs&kqS7 z>gSHHl(+QxjiVfY{eD>aKKji3@UvGRAEZ38s-2;Iuh*~U^z!YeUvT>7SKH|qJQCmB z4t;#){8{2&_b+Hywth8dzxoBI&wr%bdGqU6o(DT~e(>y?!-kzxoBIGrocI z@#_~nZ2Q%(=ImF$;B>|}az2~sSFrjWe+3Z6*}v>J{sPb$-@y57reDG8UcYdk^ZS{P z;y?wzFE=KT#R&#zyZ4>11FuYNUWzvC}Bd(kg=IKcht zS9A6|{({pP-_7(Z*W=ymS9A8OUvN6(8#o~T@fSRtU%&d*oc-z-oX+@0iSNSuyY~HO z$%jqHC$uYNUWzxoBIGrm#s*+{=w_p$f<+4^12 z7rA~gf4@`qgVU*B>vvAssr-3)-PHd5Q{lt+WA*wJ_;u;^(GP(k$X;>`$g0IqxlX}pF>F1InZC#{wGSJ4V+H>TEA1wh4AO4U)#T5EPT{&&YL&Bf0lg6 zUUCfOJytrsHU6S~!8-L}Kfl4%PoIkWO-M<@@WzVo$oqTegMRDvDd1kJUt|43{{0)$ zq4Hl#zbJoi{nGuId8_ZsybYZG==vk@FZJIiDUYo36I0BeD*bKbJ#S-5w)+?8*Bf7B z{lf5LU=Fg1uccr31%BE~zsC1U^xle@o2=o#k?RFcFCXVNe=0w<)9>>^zbEJYaar#) zkX3v|r&juHKKN~K{Tk1ex8FZARq=J+fBt*m{KzW*S@A93N8I*b@f$d+`NN2GDWS2x z=f5H!M^^E@3!F|?r61+^>*ufd_>=5!>9@4c#`?Fw`Bu+oo9m;R?+1f_gwxXRQa;On z#ZTIQ#jnY&2l~4mzg)i2{__4te699Z+L`8KZ>P`Oe5c4qly=zQZ}1uOgS4(OZON+k z*IM5QE^u1&=cWGJy8i>;5a;^QIyj&IIG6cT`Kg_LJHFuCS-(TkfsSukS7Y#vTr+Tb z_4__@eq@#ZEdBl%`1l{geLl1=YyA=SpBnnG=6`P^bC6ZsoSHrjzKM^>{&TiJL%+i@ za5-cZAIdeKZ~r&pgMPj7HRhpo{mA|!tNh2Q=`$rC=uh__Sog8Fey!gJ`6}`I+W37M zaC-G?-9NDOTkb2|_FwT^@-f|qnY4fF{SEzE_g^mVvpg7I@w0b)v-E5IzE63tkKsSz z%JFsfFV_7(tA8o?1@H4gzs~qt_fIeGldg;JtMlCKn%^G{fsbpnzk%k>^H$BD2b@nf zIVx|>{(0m>!Rghnb)Uu3Z{arLD||T4TAzabE&qKCTwk)vPp8P~WK}w+rqA1a@EiQR zmwwT{$tphdU-tS1t^qi`eDuBfyw%^IA0?fv;w#*@{a5@Z`JP?<^Mdz8ReW45eb#*P zee{_RfSTXMK;b ze*6_4G2QDIxWVVY{l;Ga`uIq<^R}6O1*?1g3TOBFt?vI8-Eak(_ctORM>MkFV$b<$M47{y6i23!Gm4{t!7|vg-Qd zDCuNXdih0ig& zeBc77SHITp@6z|a^F~(jmEYyP&o@Lq-x*))_lqxnr&#lGsp-?;8~F(6#H$bM`q$D2 z$~C_q{5Ro)KCSgB*x%5v`TMMIBFBkr3gnHg5#LEpaX#N<-G6=;Ie)T>ulf9`aG@P| z_4__B2U*2o>GwzB{xPP*5A;`!ufhlYdgE)X^BCR+Dw;O3iknl@=WV`I;3KmCocDJP z{ht3b&gCSl_*(C00v9;F{mXw!eaR{gtA8o!xBUmcqR%S+Bm1}PzrX%Nj!s7LwbO6& z!EYGny!tTod;Uk936oXazXm4%HQeR{7dX9q*868H{ZfB3Z|~xLzCn&VIrZ^($%m}+ zlXc&c>C)$IzLVrv+M#ZL@GJa0#OJm@aDlVd?^?c3A^BoR?_*N_Gtw8YZyds$?bZ5} zwS30<3bX%ft>1#*O8oYT@82WWpRDq0X_vR#AGp9->vygHK1dwMDh^}ZTfDw;koujf z`O8|qz4|}s#H$aE;{2)nXZf|v3yt`WoFn4w<$D!4KeCF?(C_d@j(-#G^9^!by*_1a zd|$_5-pDGxqok8n=`H=jZ?Il{Fx~vAI1GJU%nJ?wO`K!ze1rJk8{cw0q2pNQ0Xn@k zf5Ezso%OrmzKjvyk>d+auYM1K^CO!I%$ud(7b*Y6y8j~kq2GFa%1Zs3?{~KD|F!fB zzwNA#1@~o=yASlI$A55v)7!sT?_sj~mqQ>V+7979AN1>t?_j;3-MatR((kKtq94rf zk5;xn&Wt~kL-JPUQCc^cH<`b`EBXMZSHI91S;c4R7wyYjzbbslw_bm=)_<=eyNs;j zL;f{)OTX|N>fzN#4(OoyJ_>sP*y7Qdk$Zhc4?$SD6ku3ydR<_iK?`OmLkaO&~pB;^(T+`oUYoqoZ? z^)2Q5_{4k3==et7vtGZN)7`%aN38?De!=PU->blWBCGtjUcd4@*qQU|SHGIGU;Tp9 z8Q&=Jja7UDr!OCW!NceEt6$C8uYSSljIYGeuU}~oXNm79|F7bX^$SjCd;{mRnSKSU-|<%fVS3l^ z;EZqNif*P~@mu%$MSP>rf7U$IKYs?Gk8kt&GveFr_$%`kxUXCNg3}q_$QAYL7d)I_ zzxvgj{f@ujbjCMGeBIZ-ay`!3b$tI>bM|}v3r=Tzqr}&J{RuV4LY&VKa^PG@|B z#MiA~$%jqH`qiBM>KB~O_(sXctzYo4?N`5=vtRv!(;43&`D~A8#X{@iwOF*!u0A5Bjawr>xa)Sr4QA_b#xX$f~%v^b5c3tY7oJS8s&-O)%m+ zalOFl)i2#Qn78`=fu-L!a{L>s{RtoR>y7X0zmO`R=9PzY8B( z#rH9CxgRb62^ToMd>^DdvWmm#U&255c(UnmyMKXxPtN;m*7~h~1S+21PeN94xAY6Y z?XBOLjz1J%NjLmA@e$zk>ete#ksf7T9NGJPLj%0`)8W^ z6|UU>RqYR4;B2iwGW;|c>23dw;y2-}^}CjjbDKXe{dbY9{CbgY#8>#Texr`>T0U!i zqc#4P^xJ%=$W;JGtq-Ixj&I=nsJ~PGGy27L|2J`d;PmqSUHHfZs zIh>sF-D`d0-ukuXHO=|U$bLgR^Xk`VXIuz>s`$PMocJcBCsw_cwD?xp%L z#$WUOk}dtBd|0nOjCl$>i9eP9-bPM*8x8+WyuWuo=+_%xWBfJW5BpC1XRS}hx{tl} zYu#6Pk@%VS4@QnJIGy^n?z3-8yUmrM2gL*$~#UUHc4cW&ty zegnr|`nB#0mbe@Ko4CHCMzB+S$ zd+QhVC#$$ouDSkWWIk{@^=rO=hD(`06(4kGuAdP;jKB5z6zB%|w5~s_c?$9;tN2>_ zh2Oy8)JOW=gLxyXI4nMtYp&m#I6rWD`92CCSbhF_q6p3&T4)w z@kc(-(=T|KA3E~tV|)E-PA}hn`UR&mzS5rj`jzLw&Jy2|tydr0>sNDn`S#N|}NPI&T-^l6p_-2p4a{QSs#zC(> zw%4!b^z!YeUvN6(8#y1pe!;`G-|<&-_N!lTI^!ESAOH9(JYu@nFL0gTZ|$z%`u_BH zn?J*0Y`fPlaGl@J>^J@buowNxd_b`J)vxC4cl-sXGro}n;vav(!};~AU(MO?_zO;F ze1pW-J%5(#an8>Bum)P1QMv ztSivYc@IiU;zz z@oPDc8^7WV+P7yp8^y2Q``CN_?0v822e#)!KP|U@NdIQ~=~7ZU#2JiV?|V*B2|gzf z9aq0gbDvM^!}Ir36gO+I)0ftt6}OVX z`0(~Q0~()(`)9W2=ibp@hl`HRr}&+}pQ5-~8^6DdXm656PilXXCVeS>^K}Et4aSGN zeSv~Z_Uub8aYp%mWqnB+Jze1NVbVX3NNj!o=u!JRzrS$$NRA{8-%|X_ zud@Dv>$~3lucO!H->>MPUvWnJmoL;)l15LcGs8vaCviskP}=3w=xI59%6`MX8RdsT>O1Ha%KAl`MmzG^m8^op2rLK>3O`ZztZm^-%F713+qdAsxTjAoUrLR z!zKAc`g3-FN&OW+ynTMH|NYXV#v~2jGt-ka=^vT?v7eG}@O3CJ>#>jVdGi;q|NA(i ze)sn!$#?3-8RK*2DW@{ev-(4=)2E}qL0rrk^gkzlPhNb;uiX8y-wB`m-+TW^=U@8! zE%%X+*;ns16m+XZ~nYeenvXU7H-GBDLy|^+S&>fsN^g6|uiBra;ZwcQ_m9@U!(r|e3Tezp}AJV`3^QW+V z$(Qy48orl4Rh^C`O*&Gi&p98TN53M6;wTy)-uNs1Cu#UpuOGjbGs?GL{EG9w{l8uO ziih?cAfw}(H-9d1Ftab~_2buaM)~%OUvUQQJHig}_~m}ESCpqXipIzG@oPDweEY?( zID_`>Y2R5t{4ydvNz?x!b^4r=ug4GZAcw}mXnbrRzm_w~w_p5 zJG&2RUcW+di|;RJ{b_0Z*#7>P>jvaJZv2WfXy2ap4bPv&gYu3Wzn1g3@hi@teMj0i z9KR^%3F5%O zr+;*4&mT+sH<&LPzuxzEde49V9KiRd_xm`R3;DeFQ&!Gjyzf7~`kqs(Kh!#XzNdfJ z>(4lo?aOvV;yt(;v@^Gs^elh;}DADI_1>^WPtOWci_=ve)`6{T}iK z?dyGi@zwVfTW-`keL8#{a_k+yUVKPD?(@O#gzwZ#kFoyQc@N<9^N8}3oD6y6Sg`NF zOM>e|Ui?0fC_hQV_mS!D{!?;g{|oYY-+%AL@5dh8?*84ZH{|o)FI(9^ulSuPt3T8_ zeNJkv`*gl+4#|^eJcO{ z`xQ_9pO*{%HXA?Gew$j^8)eAD=IT^@nnvHrL-qd?V~T|9xWh z|4CZ=!fY%2kNy?bAIjNYe;e_QP^*GKutk)HFD zgXQ*FTE5l($M|UGV_cA9d;g2_v0oXXr|tE}{<&Fy;QIX^2nTe)oz5l4zhdQ-S_VMO_%$MsE2d>k7SdzAXKCApGd0BsZ@s)M78DDPCeLmg) zRqI2Y^rm($=r8MI#!;oC+;U&+@UedBKg^f)G2^S!$=6Fdd;`vBzHvT(!TD2<3cj8f z^jC4{I!STcdfoN=gY)UV-@X0MTUU6ae%$9<9rP^DsQ(SLZ|R?DSEhfR_1mRid`}>C z|01rv{m;{1d2V={Ph8@x)+edowejKV?@T?;){V-zcbhN2Uz<6C@#}DS&qbskH-5<_ z&UXKUAJ_92>J1{@=i2@y&1Z1*3;G+FZ}a{S^VauH((KA)83)(3ewy8vEc>73Z0GatKgbL5fd5%8wIkZUqV=kcK`F%52!bY z2mH@+?eBm81L0upyX=3Kv)%s?zn}Vx6;EY-NPZ`2`F#IFIg9UKcFebS{(N>g$o;tg zSP>T;CzEAm1-;D0D5>u=eUnzs*Z}Pj#v6=r7OYLa4 zul!DO76;^R_CIpA^Pzyv{ZINky8lUkhw(r5%hF%&=eEB8;JA^?w|=Q{%fJ7yoN@o- zIFi>-Tl+uDrFOKBZypEdEh7z;x$(F94S)V;IotVA-&2qB;{6}m`-#m`JKF85eos<< z#(A^)hll5Xmb0CY`Wqq3^Kc){{!|OGka>xvOJea!Joo|Ev9se2)LEeZHFR zOD{*Yzj#pjIDZ-+9e;6M(Uamsh67z4*#=wizGrR_m|YUp%ONYKP~4Y~Q2%i_a>5 zo&KVH&pkMkoGL8G$p7Z~J-HxO=nomI{lx>zIjj8p`qTPQxj*7{eU{`_xml(R_u?1% z!hDbJ&qlQ?^vC=3S3AE+_XU?D@4s^67y5a6bbs+#`U}e)v$TAV>hBcwKXB}(zbIc%zRmkTt+Tc2kLzmV zUiypjVf~_h{svynkCJTkKRD{AX8UqoXgB>u`Jkuz`T17*Lpe{)`os0lW0tfd{?`05 zNo(H+`@bk(z5j)LliWp?ZsEt31)m~*6Q)M+FwkC ztkqwA{|me5{x!*v|Lw(B?sI2+OZppZ`>ORdo$tQp(~Dn%tMrSv?JKUm{m;|i;`;r7c8D_?AFlq+)Z=XZ zxr}?a^{0KY`}rTAyS47$rT>Yu-T!EZ>ish64dSX_ME)|bUeF)y9JQ}E{x_U#dK%idzyCGv-|Z}CyZ=Fd_4)zz2l0UaS+4#4Z<-sY zBj5kxPu1)0-xw@syZ@mat&f-WwO0QFf8M{_@$cyT{w$tZKRmMhygr1#<@Za^f5qAE zf2hyhzx%NNu|2PB2gkW~`%-TnN6-2m_CH?tN*Nq~H}^kc$q(A?E5DQ6*#F4c&W8dv z_dn_H=>8}D9mfCIFH3*B^?w{UMppE2|7SVl{>O17_ah7aPUe134Vc=Z`Mc%PIJkZP z7u-Lt@t5jv=R*PY^HudXlCyrNXT|+of5^YM|2fCC%J-h1>%62mIBy=w@v#3{&ba?^ z9v${S%e9~X1^15+mNV{uuw&UDf$|@}|3Ep~SG@Q5+q{35{jxZt{`cIY-APUXnGWg? z;(_}QTrIBs{15Tcynmeihd87D=k6ar%MYbj=;zc+PU^lMKaj3{vHSTSxCV&ox!mIS zN6`Po+3tVjI7>=T_}g1|EBo3O^hZ0l+t=eDFGQukH`e=>7SwOqS8BC F_5bVHKEMC~ literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/degrees.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/degrees.bin new file mode 100644 index 0000000000000000000000000000000000000000..715e6b656f748a0fce3c5b242b30ef9da996ed4d GIT binary patch literal 21640 zcmeHPe_W1d+rM;+MD$oK5>3ma8szct z#D~BC+3^c?ub8!P|n+b*w-4NP|i=W zYoAiifF0u;*W`1o8E<#^6I_@p-! z%6UJk*F(y&o#Oo11`6eTSGl>8aw^BJd{_a6asndi?^90STlXv9fI>NY%4d~Rj@_kk z586PXoL18>-=myIr;nC@4~24~OMOZy=fY>NmYst_IVB;PwoUGUX(-?S16~D3o)i zcyBS~Otac{c?uNDaSv>Nk#YvSu)5>}g>q5~mlRUYisZ11$xtY#D&WC6%9#;gTo?+4 za>kthaNsfIZmNjXC0wXj>8F;6O{9Ge4EqNP$*}S-^yc@ld)$0 ziEU6Qr}W5^Bb4J@a_v|LD3mkQJNPi=yf`VA-N z@^T#y*#_J?!UL7|+QtUkLaC#r>Ob|e(a331KHq?~}dHM@pGp`7D8taeh)kh_mE2SK46 zSLeAIlrwMf#GUU#p`7LESJNqHRP@P=x1dl?rNiJYl;bwD$F{CeC?_y&cN*n1O!{z3 zJrv5xYiGBSat?3$J?#(_%4wGxpGrBeU7NPi9SY^d+Lo=Q9IG!2Qxzzbb0cNsYRV}) z-e=uiD3s%8eQ+h^96PvU^-(C4vtzl_3d-5?Ny}9qLZKW*NlK!e|9H+?Q4WQ2V7@cs zm~hinNI9K~V$3-A3&!X;z8fOUIN!h7SI3z=d9oSj@x=~0PK?VaGfrvtAItgqYn z#;GVM)^T$8^)%x=xwuWoDT;A1<5U!k(Qzt#+nRA67ZfM+^8p{hj584a=N$OojAQ!W zROoev{}p<_O#hpHD97ZFa1PXG#({Izap1h0(a(YJuH(S>x1t=lhB^*hM>7uG3mpgU zhZzU%sg48p)rFt*rI4vZ^yFuvGP z4vbNDlmp|FJ&aTKlmla(J>|eS*B-{Z_LKu-W_!wk@zN2-O-IUsvDcAuVBGBh<8KGb zfic{Pa$x*+hH>1Pa$qiSrW}|DI>UU>nQ~xG=}b8=pSZ%j;z~I%H@Q*{%u8-CKeVUz>D-%!c{zt121KYz*r zAJU(4z<(S8e&h(s0bewLa=;HA3I6Cv$^oBtB;|lV8wh@FAmxB>97s9f7mo%1cr4|B zk3EKRz`r(vpKYWZ@YRi!1Ah7h@Yg3$4*2}zDF^)hAn^NxCy`hq!1u&3zkq0@30bi z5X1Uk^~XBm9*sucp67aAKiq@S$UB33E*g)G!#x&_$L`>sipFEJaSuh~vFEsFqVZVr z13Z@o+Ro_s|>3hfT5nJ>%#VRW*DiCXq`yOCL zDe(TN`-pA&lIonwUoJtP7OeGGt|zIqb(co@oY{{mnESBB%>4nuSSJ(rxz*|?{}P>1^!Ko@^$;Uzqm zltWZ^`{GU9!(njvlw!uBu|=rM+E2087g}9F%rlo_^S_Ax0H@^?MN;ihBz{mywf>`z{Q{sZ`e|+bbJ& zA?ql%c~{yl#41-)EaKytA0rmKieiO3&+kM``3J>%Zui)ZSi=g6d2A1TR$>PfKJ78E<*xv(?p zDs3n>^OcBK5DRHdu{5{MZip4zQOv7bpKgc^#kFv_f9c&baGlqX-=6B~JsLbv=Z4R9J3)MCEw#M~aLvW6#Lfq zsxM;KU!|DUpyq=R8~qx^GKYLT1hL~iC^qQLA#Wn)`8vg-htD65SXOU}wR)@dTZlQl zL9wx;jH3`s=}WPjfwuz@tHX6`xMmB-#*alTdH~gB8*_|^mE$@!=!Q=Sn1EQ&V5&PA zbQ;%Q4TVD~)-L!j!Km}~r&w;t{t(1+11NTPYS~o8x{RdQ;?Sj`h;158v6sV~!Vqgd zhGL__1H%zpG>&2wf2;f(VpVTb%yG8UY{Wt*QY?SYXLArMnM5(;yz%o83wVcO%jPG~ zN9@QHin+vei9yWczbF=nxf%3rOFW>($ciN%P@m&4wFyf+Alrl`9+2aNB_5D%!V(Y2HerbeWSg+W z1F}t6;sMzv{{O}U?ZG#kse~)0r#xffuL!VzzFMFtZU2;uo_7NEyW#I&OF~?o9|zSp z`s`|EM^Uou%AKEI%deNVF(v_x>F0S?{!s551$A6EYT$+*b-|9mNy~LV#oA6cp6yi2 zbx$G(`zW^)YNh46s(^^ZsJvx0T(|kds(=>L?$$`lb(Ib$b}UbS@RaL@eiu2S%Ub_u z(sEt7DjZeKb(O6hC%U)Eu9lYTN{>XtZ|)PWTjzUjM$Zj4KT6AWH&P1gNUbm2hwugS+&BV39CXW0c<+3vv|MLu)hUHv;WM*BcfPdb&dxGXK#!A*dkd#ae%XLHB8>VQ|LOVV;(ntLGp zy5Y0BqP|1jmRA){Pr4{A*O{*7Q14ZRyuOf$Z`58Ye^4kb*R56?Xw^BcYxtnd`fB*7 z^Nkk9Fw-0XvUAtJbh~2TS!sEF??;*LeEun}GyY=Z@bgRdr={h(MbP_l z${kN|-Sbxqy8f~y?u4{lrw*URi*b!jT+i*}XL;2--8?2O*O^A8(j)iqxnZI6Pkd>J zA!A^Hv|Oity)1uRn-jX5n_QRrq-7qKmg`KTb-UDTe7;!d(rSi`={m-6NLsFg$pJ=+ zRtNcY@pbzlr2E&A2c_k@DKLu#L`36r$fCaQj2V%=-~K93TCP)@webo*n=Ewp{d-?t z`@82pX}L~4O~3y5yt2@F6`fx=M)@#DTCOwohBWt&@EK;IyZ$V8`Gn;!c1z23Bh(98 zpT)1s(pS1}e5d);UD9%$I-J#o;j_-7zQ5iY*!8=}Q<>6oo!UGr&+p*%6>l5!ulUd1 zc1p{2rqQ#mqzA4`iuz(N{F=LTz^V*sxehu5%(&~*d3_z8<{V2t_9$Iiu2ZM6oa)V7 zw_@q&h5fFK+afL3sl!s*q%^LJdiUF+%y$o^Ny~L=GfO=BPp)g5o^(C?2gi-la-FGl zCPulWa^2_WJRjuFUz{o}*EyQpm!PDzTz9%la8b&jduyfTI(u~htw`az7K5k!e9?9I zYH7Kywb}tkujIPCsFn@iWM!|Emg`!mH!u&^LB)NaxaIRUH(qVELRzlV#$Wp+USI9m z2OZyT-EtCsS|Uyu0B6S z{b^FC!DRhg)F+Qi%iD`MuJHCLk4wvS(zj?zC(c(r3&}NoR;+einygQ|kA6B`g?1nQ z7hRxEC+>TbI&uGXI<-5vv}{tR^`|L1ooLrh>O}k2=|n$jQYZS8PN!bZm^Mx7ME}+4 z#5mEUPK*~iofwyz)QRy)r_eqG0t1__9@19 zYiYSo%quOqPRu7Z(sG@c$85Py%wM+Ba-Enr?YK_Nmv+)}otUTFah;f-?WN^9;TN>$ zI^hqrmzL{$TTsKEeQ22ZE`fh7+oVT=GH(!ez@m&g{zTsNjI6zvi zi!-J9iWlR)6`|Xq#i@SMa-AtF1#$6Uex5a2Ts&A>u2U~dO+M~-5%s;T#o@!GKIX}NB_me;^NG(sox86&0Tx=mUh1>fr+ zbop8yB~V(f+p6VlaPN)Kwbb%9W2NP~o$7^|itm3Ax^OK|WR#ZccBu)p7vuT$JfY>K zCP>S5>M*z?4c`+X>T}fcU_sJyoyfc4yCZ~76h zA#@_2I89ov6M0PBBP4Vpe>q)Rt~;aUO~d&0{94PKhDpnH7qmPr?ky7ab=UH=5z=zq zS6W^e_Z%@A@QfawPtOF%-oml@#l=goBI!^H` literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/determinant.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/determinant.bin new file mode 100644 index 0000000000000000000000000000000000000000..cef09cd67bd1e75a9778c97c4687d60e5b2c7c2a GIT binary patch literal 6872 zcmeHLy-pl45T5&?h?L@r6qNT02`JS`n1kb|Kv2+8L{X%4AxKG)(ghE)B@cmwL4goN zkw>^k;0?$(w#RGl?yZ3$Ql#C}Fyry(vDcn&c9+*g^ak>oR_GmlpfB{1zQg)qTgUX3 zj^X`e^*8jq0`?KogYQcrT7v2qstUe3ULfk z0U?#*4SdF=c%=Y?pG9A!c!l_?8lQk;EK4Q6=5)%ZNc(rz7)^SN8Zv*veh_f3rZns2Y12CDwMKGsQLX865&PTaBKE+)Gw^m)_Ty!_Sg((( zsE?~psE@;8Lw(eCVJHe-vl5$iY*Q0A%6h}`Yqb+~i+!Pv#y0mQ{rUK$uqNZ`5o;?d z(y?tKKiir5!0T5E0xWA=bGPq_rYG%1Y}R~f`?sOLX&sLM_aOZ~$M1N^d(m8b?fxk2k%4#( zaIme<`=vj|c07#uiG8wsHL)+BpE2jk?>roW=iBpn=$?yj>HTxR_XqvH`2((LqOk5h z*aT1D6fiWQ-*irs7^83XZGur`=sJ4NaGV>uNib8o!tXqeLw9tSV2FO=x0zt>={~{C zu%c_4#TdP>_Y=$(W}nekj2Rz}4-?Eb{lafI#;85D7h}u;-Qu?sWAu?ea<#8%&ll9b zZm(aw*Y*6CZ;;G)@nA5p`OO&}WXb(Mi}Mp#dDi%D;XI#kri-*-UA`M)ZKVavc|S!= zr(w5XH#z$u%mZt;U}ww%D-)+%u*?UM8QU#b=0z#HwB3T;VRn>a4pMBLCvtX+c+#Dj zeV0M*hVyc@?4O-kop179m*d-T82F}6@NjtE&WnSU$HSV05T(+&%I|B_3K_}}G_tNW<`T@G=Hu-9Lnm=2<>`O_ zg&VI}?3QQUxN&p+??dv4r>zxcoY*zfH4Klt>6pWg8= z_@$6xrsz3#tS$A9BFAN`pf|I`-tk}i+-Lu{JO11^{NNjQ{B57}*{|R6&-sqO_#Hd`^2hw@x9#`` zzvaGf-SN9WpuF-E&tm;@`YRe55M6_TmHX4^RZjLo~K*B9=HD{eq;CXKc3e+zW)2ReEr|I z$JgiAXYBa;{QRsP zU!UKP+3|IM`0O2D_m{`*__{wme#h7S?f38ax< zJaxy{^W~NuU(csocYHnHZrkzoe7t?f*YoumJHDRJckK9jzTdgy>wIw6j<55@-8;U{ zC(qvTb-uZ0$JhDj-W^}(tLNuYL299bfzCYj=F@tFPPf zwa@GvZ&yTeC*`iem2g2HqL%F z&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw| zem2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2 zHqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F z&VDw|em2g2HqL%F&VJtT)4ns#em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F z&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw| zem2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2 zHqL%F&VDw|em2g2HqL%F&VDw|em2g2HqL%F&VDw|em2g2Hoo3|+Rw(>&l`T)&&Lkl z?PufcXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWa?Wh0$vvKyb zarX0upZ4>yb9ejM`0={O|9{)~@%9~OKim7WpN+GhjkBMPv!9K#pN+GhjkBMPv!9K# zpN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+Gh zjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMP zv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!6How4aT$pN+GhjkBMP zv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K# zpN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+Gh zjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMP zv!9Kxx1YX#+xXh2r~Pc4{cN25yy2()eC*iWem2g2Hh%njkNs@?c>9jCpY8qG&&Ju$ z#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt z+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw= z&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$ z#@Wvse%jB*+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$ z#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt z+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw= z&&Ju$#@Wxt+0Vw=&&Ju$#@E|V-~ViU?aR}CHqL%F&VDw|e%|oYem-{UZa*7mKO1L1 z8$bTLj{R)>c>9jCpY8qG&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw= z&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$ z#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt z+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$8-Ci)#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt z+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw= z&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$ z#@Wxt+0Vw=&&Ju$#@Wxt+0Vw=&&Ju$#@Wxt+0Vw;+fP3~%=p@er~Pc4{cN25Y@GdU zoc+Avr~Q2F(A|DE&VDw|em2g2Hh%nfAN$$(@%9~OKim7WpN+GhjkBMPv!9K#pN+Gh zjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMP zv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K# zpN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pEvxppN+GhjkBMPv!9K# zpN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+Gh zjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMP zv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+GhjkBMPv!9K#pN+Ghjjy+#e*U)c zweL>***N>zIQ!W+``I}A**N=o!%zG9*qOWiY@GdUoc(N^{cN25Z2b7Y>)6l6kGJnQ z``O-~{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^ z{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25 zY@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdU zoc+Avr~Pc4{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdU zoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^ z{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25 zY@GdUoc(Nkz5Vq2tBkLGcG}Oz+0Vw=&&Ju$#@Wxt+0Vw=&l`T)&&Q73?PufcXXET= z}TWbXXD5J-N$}5e!P9h+0XX=>}TWbXXET=}TWbXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXEVW4L|K?}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXESbr{Di}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWb=M6vYXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=+LVu?VGiaPW##3pZ#o{ z{cN25Y@GdUoc(N^{cN25Y@GeP;ivt4?7-cAHqL%F&VDw|em2g2HqL%F&VDw|el~u5 z+>XCr#*eq}IQ!Y&pZ#o{{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^ z{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25 zY@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdU zoc+Avr~Pc4{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdU zoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^ z{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cN25Y@GdUoc(N^{cL=_ z{i}ETWbK>Nezx~#KO1L18)rWoXFnTfKO1L18)rWoXFnTfKX3SHKOZ}9x1Wu(pN+Gh zjkBMPv!9K#pN+GhjkBMPv!9J0AJ^mWr}5+MJI;Q#_h&yFXFnTfKO1L18)rWoXFnTf zKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L1 z8)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWo zXFnTfKO1L18)rWoXFnTfKO1L1Z}@3H8)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWo zXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTf zKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L18)rWoXFnTfKO1L1 z8)rWoXFnTfKO1L18((jK@orzNeRA5*_WtZ=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWb zXXET=}TWbXXET=}TWbXXET=}TWbXXET=}TWbXXET= z}TWbXXET=}TWbXXET=+LVv?Sr*1PW##3pZ#o{{cN25Y@GdU zoc(N^{cN25Y@GdUoc(N^{cN25yy2()eC)K{em2g2HqL%F&VDw|em2g2HqL%F&VDw| zem2g2HqL%Fe*C!{pC87Lx9>Rn`SSg5-gw$u{?QBXT-VKYKwB?=`X6lRbieSf_r360 z>pFMY)#?7$3*Ps_8!xDq$fe8PPWMsEdtA6|@5W_^H!hpJaoOjM%T{k( zc6;Np;TxAd-?(i1#%1R>E}Oq`+5e483us)rK;zN~8kb(sxU_@Dr6V*hO`&n=3yn)_ zXk5BO(zvvh#-+2A?&*2oxb&CCrNuNZU8ZqqG>uEIXR@ zm!{UZ^tHyNwKXo?E#1eg4f}-Hu{5}JANLjSd*SD=>wI_9+aR(63s4O>-#=@$Mb)5UFV;-G`nDUTrP(zu&8~52c8yE3 zYh0RL>8J5*SIvh#--UcF3qlSX?BfE zvuj+MUE|X18kc6*xHP-QrP(zu&8~52cBOl2c8yE3Yh0RL>8J5*SIvh#--Uc zF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL?9x}p$AM;-?nA$F*Ym$>UFSQNW|!^@{`FnY|Jrq( zyEMCWZ~x#Qd;YW5b?z?b`PcXU%^NTI<#(=q{LTw^b%ay1%h#Ry9?kC3z3K=wJL5Dv z<1{ax}W?n-u&?IuIt>T*`@ol55M{0^|lL_W|!{I zFYg24((D?SX4kkhyT+y2H7?DracOpqOS5ZSnqA}4>>8J5*SIvh#--UcF3qlSX?BfE zvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL>8J5*SIvh z#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RLf9?b8I(OIJKQ+62 z-Kp=0Y$~nw@c)opG9-ahjcRnw@c)opG9-ahjcRnw@c)opG9-ahlzR zpPJp#Xs*t8SARb1^?&F1J7k<@XPjndoMva7W@nscXPjndoMva7W@nscXPjndoMva7 zW_QVN-k82em1dXj^tExv--qjet~YN?P40NT>+aRx5t?28dq4cSkACPk)^&cLq1mPT zxqtsNAA0h-&Rv>ax-b2wpZU-?uIt>T*`@mhAN>8J5 z*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3 zYh0RL>3dXZcIi%E8+ZKOIqo^>PEGD`uDe&C z?=-u7t>5<@|K;>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc5Qx~FE>xHP-QrP(zu&8~52 zc8yE3Yh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu z&8~52c8yE3Yh0RL*PUJ^s6{@7$X=UiZ9DtX=qt3wQ13Q?tw0o%$ZlF5T(t_h@$MPT!wP zvrBjS`Fk|GOZRHS)9j4X?2OawjMMCl)9j4X?2OawjMMCl)9j4X?2OawjMMBk{M77@ zma=Ph#%XrOX?DhGcE)LT#%XrOX?DhGcE)LT#%XrOX?DhGcE)LTmwf$^t?y6I-`PO3 zOLzKNaWuPhr|(gv*`+&uZQSwq?6{YuJ2kn(x$a)w8)$aOS4P&egE@^9{iPcox3!>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-Q zrP(zu&8~52c8yE3E8SDGYh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X1 z8kc6*xHP-QrP(zu&8~52c8yE3Yh0RLM zeC@i>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu z&8~52c8yE3Yh0RL>nWX4kkh zyT+y2H7?DracOpqOS5ZSnqA}4>>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6* zxHP-QrP(zu&8~52c8yE3Yh0RLr&`yTk|b)CD*dEokPym{l{2Yzbpte?7Y*B(7JyL{cR8Tua0F5T(t z_h@$MPT!wPvrBjS`Fk|GbdTRnn7=!OW|!`+*5F5OoTUmJJ){XOoz=}t}V zaIU*o_Z*sCzShg`{#*CIYF+2|e41UlFMiuw@BjLBox3!Z@vE`>pFL7cIm$3 zy>GpLz3sxK*`@pUmiL};X?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL z>8J5*SIvh#--UcF3qlSX?BfEvuj+MUFn{hUE|X18kc6*xHP-QrP(zu&8~52 zc8yE3Yh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP-ys z{`vl2h3d+hT3-61r) zba%}z-CeW0bg%X^&CWQ@&N$7^IL*#D&CWQ@&N$7^IL*#D&CWQ@&N$7^IL&UuPtES= z7`tX?oMva7W@nscXPjndoMva7W@nscXPjndoMva7W@nscXPjnt$@k4J-CeUwch~IF zoqlHn%`V;PXT{O%(w)9Xm1dXj^tExv-}U33p6=A-4(Gaib$_DS)fT;rTb-H{P^cSvaWNNW|!_0pZoaduD4ydG`n=4yu2?6muA>8J5 z*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL8*)=ZBu5oF0jZ3p@T$)|u((D?SX4kkhyT+y2H7?DracOpqOS5ZS znqA}4>>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3 zYh0S$>8J5*SIvhbk{#W_v!I*pxLGS8_WCcaA|hwe(P61 z{<&{h*ZFRt*`@o;JD>2}Ke?`R_xSI+zQb6PR%Y~cj|jIyL6|o z-=o>3JAHpH%`V;J?fLWfXm;sN`)fT;rTdqc_quRtc8yE3Yh0RL>8J5*SIvh z#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52cBOl2c8yE3Yh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc4_xv!6ND$TBOX?BfEvuj+MUE|X1 z8kc65?zgUw!5ib_K(kBtWB>4#_kC(z=R1IAm+sg9->9sFDec`Shc4~I{x>Mhy*`+&u{T|IO-Rb*tX?E!zZ_l5!zqc`lDopG9-ahjcRnw@c)opG9-ahjcRnw@c)opG9-ahjcRnw@c) z-6h{QyL5NWF5O+TOLw~G(CpHk?qxK)bf@3hK(kAC`dM)_yL6}TQKi|XJAG~3@i}xn zgVLRv+~HhzukL#^yL_z={o1cQ=VR+SfA-Pr(*3{_KKh)Gtn1vR*`@m>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu z&8~52c8yE3Yh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6* zxHP-QrP(zu&8~52c8yE3Yh0RL}$?9!d?Wi-2Vr+XyLF5T&OHqh+Soqkpv%`V;PdsJz5=}uo8cYMAb&$e`@CU-d3 z-K%>f%`RW-!Kd7J?<4Cve@@cu(tW}k@4xq!b)CC3yL6xZllR~Ir`C1u((KZ`=cn$! z_e<7w?$Yeiy>EG67B0=MacOpqOS5ZSnqA}4>>8J5*SIvh#--UcF3qlSX?BfEvuj+M zUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL>8J5*SIvh#--UcF3qlS zX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL-=0zvrG3CAG`nF z*R1Q@rP-zXtgrkt_kQuZ&fVqQdwqZ0ym8-8y?340-+SS%U2|%7`MOizquHf9ef=KI zF5T(-b7^+z9&gW|zelr6_xK%m`MX1CcIi%glxCOiv~y{8=}!BZW|!`+*`>Q{cIob# z-KBfAM`?D(X?DhGcE)LT#%XrOX?DhGcE)LT#%XrOX?DhGcE)LT8-8kbM;F*NJL5Dv z<1{0U;&OLw|Q((KaRHM?}D-`PO3OLzKNaWuPhr|(gv*`+&uZQSv> zIsI8oP40NT>+aS4lxCOz-k*Q?$L{&iy3YR&(CpHE!5@6bJzu-7bC+h9?z{ivcii*y z>pFL7cIp1$J@2^Z@2u>8J5SGuQW*SIvh#--UcF3qlSX?BfEvuj+MUE|X1 z8kc6*xHP-QrP(zu&8~52c8yE3Yh0RLm+Y>3+{2f5$yP zxUTc_FU>C9Pk+Tb?)iN$x^!uF>3;hyKXK3Ztn2)BmvhhcopAHU+wQsZkH2$W=kD4c zr)HP0JM}%9UAoiP@6qhioxVSpW|!{q_Wb#KG`n=CeMhrPch~IFo%SfrF5PM8((KZm z_A|{c-CeUwciQ`_BfN0>`><7GNgOLw}L(d^Ql?vXURba%}z-RYiAvrBjSoeea*bf=#c zN3%$Gtb*smUGAb@%GtOS8+@`V(*Xyk|eKuJh+Q%`V-CzxPSc z{;GAIyEMCWpZWKn^z1*mu5*`Wm+oi1>q*aEZ@X}5cIiHLc~1>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu z&8~52c8yE3Yh0RL>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6* zxHP-QrP(zu&8~52c8yE3Yh0RLSw`Pom7^CZnK-CtkcC&H!K zrTer0%afk{{&k(7e`$8<{?e~~{wfAhv;-}R<-{(aMhyLQ5<+2!j_ zeUE0B?)3G0G`n=C@6V;#r91unJ(^v*#}3Qi9YV89ciML}yL5NWF5PL5((KZmb}r2> z-DyA5?9!cfIlnhH-D&UB?9$yeyG!?KH`45k)9j4X?2OawjMMCl)9j4X?2OawjMMCl z)9j4X?2OawHvH7=j{UxCcE)LT#%XrOX?DhGcE)LT#%XrOX?DhGcE)LT#%XrOX?DhG zc9(qL?9!b+hiP`{PWOg&&-vi-tVnmd=g{oZo$h5cyL6{}B+V|}U9(Gfx~J3Z(%m(? zbf@3hK(kAC`dM)_yL6}TQKi|XJAG~3@i{;JxlK*(c)jcH)qR>~m;c_s`OSaz?(bXI z`PqVIm+sr1{Mx(Uxvq1UW|!_ep849l-@UGLmu8plOYeT|-QT#bbC+h9?#q|=s&Hv` zjZ3p@T$)|u((D?SX4kkhyT+y2H7?DracOpqOS5ZSnqA}4>>8J5*SIvh#--UcF3qlS zX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL>8J5*SIvh z#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52cIkf8I`e&Vocm~Y>HY`L zdhOlMTG#n`l4h6gGr#P$cmIiXox3!D9r`Z{&*%_zV z8K>D9r`Z{&*%_zV8K>D9r`Z{&*=_i#*&UmF*X)eb?2OawjMMCl)9j4X?2OawjMMCl z)9j4X?2OawjMMCl)9fz!zS*TaeGb#?(w*)NG`n=Cdk)Pm-RWLNvrBinN7C%l-8H*( zr+YfhF5O+TOLy1o(w%;11I;eo>1V~!?9!dSN0nxm?)0^B$Nk|rJES``xx=~cUft7a zcKKRg^cnxhUH{3t&d(t>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X1 z8kc6*xHP-QrP(zu&8~52c8yE3Yh0RLow~-cb9Y5_4Dz~ z8y|S**ZoHyS=YI{&fTYGm#;hZJ(^v*)7S6O?9!dSKbK~g?)3BbXm;sNyM|_$?ylLT zyK8poPWz5#m+r3Fr916Wnq9in&ZXI0a$Snw@c) zopG9-ahjcRnw@c)opG9-ahjcRnw@c)opG9-ahlzRpPJpVvvcy3^+{%`V;P-axZUce>}$?9!d?Wi-2V zr+XyLF5O+TOLw}b)9ljSHM?|o%`V;P*+#QVclw5OLzJnRhnJ8)7Qow z_mbmGlJ3;x4(Gaib^oW?3-fHedx}o zt?S&S*`@pRJ0H4pz3sxK*`<5e^6m?lX4kkhyT+y2H7?DracOpqOS5ZSnqA}4>>8J5 z*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3Yh0RL8*)=ZBu5oF0jZ3p@T$)|u((D?SX4kkhyT+y2H7?DracOpqOS5ZS znqA}4>>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52cImEv zzVl1s97VHB_o4srp*z27UFT;xnq9h&dgP%yAGfY^mu8pl&))WeJAZLq=kD>}b^RQB z^Tu6wesG=pK6v4-^YN+K7GurOLy1o(%m(?bf;$<%`V;PnMt!t zclw5OLzJnRhnJ8)7Qow_nqm_Vrp{7>s@!Ro)t8^{P#Zfn||Vsr?2b$ z?*Pp%-M{l4@4n+*>pFL7cIp1W-+A{PKf11Smu8pl8{YozJHBsS=Pu1I-8U}phr^}W zH7?DracOpqOS5ZSnqA}4?9zSH@NuBoH7?DracOpqOS5ZSnqA}4>>8J5*SIvh#--Uc zF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52cBOl2c8yE3Yh0RL>8J5 z*SIvh#--UcF3qlSX?BfEvuj+MUAjN8p7TE%=N+0|y5IG8*Ewok=jSMzUAlk$pT7H! z?^@TnOS4P&@&D{+?)dz5ox97ql}M(cKNzf-=o>3JAM5g z%`V;P`*Ue_=^k&-pT9@5OZWJlX8F5AXm;sN`-5he?zC%YcIob#UAntwm+rLhXm;sN zyK(K&2dBRe(;lVS7GNgOLw}L(d^Ql?vXUR zbfUd_RJ2kn(x$a&)S7>(mT5o*&Q=joe>pDM=(d^Rw)aTs#j7LB2)(e+r zm+q6Fe(N*7a9!uGOS4P&Q_EX#yKrfC>Hh9=9}_Oku5oF0jZ3p@T$)|u((D?SX4kkh zyT+y2H7?DracOpqOS5ZSnqA}4>>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6* zxHP-QrP-D4so6Cy&8~52c8yE3Yh0RL>8J5*SIvh#--UcF3m38_0P|ET%1d2 zcIp1=@_r*+nq9h&e&E(;Ja%2@=O~(8x-Wj)A9=>tuj|}B{=2T93vb@|-KW20oul4z z;jZ)MsoCZ0PJNGNm+tiSdo;Urr|-|D*`+)E{5_goy3=`{W|!`+*`+(}51L)N)2^Y} zrMqi(>F%0cy3@X+*`+(}Mw(r^(;lVSr916hnq9inex})_JMD6sUAoiWr`e^uYj&6J z)wZJ98K>D9r`Z{&*%_zV8K>D9r`Z{&*%_zV8K>D9r`Z{&*=_i#*&Q2q*X)eb?2Oaw zjMMCl)9j4X?2OawjMMCl)9j4X?2OawjMMCl)9fz!zS*TaeGb#?(w*)NG`n=Cdk)Pm z-RWLNvrBinN7C%lo$kFfyL6{}I?XQKU9(Gf*X+`ro^3R{bf;$~%`V+tvrBh+#?$Q5 zoqlHn%`V;PXT{O%(w)9Xm1dXj^tExv{p>iKr8_mb!@2HWJ%ea=`C9LK?|*aqd)9S+ zCZyS=`@rkJ^Y$-a*SSlxOZSa``#W#{!F8RxG`n;kdE0m1zTS4>((KZG@$z08F3qlS zX?BfEvuj+MUE|X18kc65?pF;T2bx{u((D?SX4kkhyT+y2H7?DracOpqOS5ZSnqA}4 z>>8J5*SIvh#--UcF3qlSX?BfEvuj+MUFn{hUE|X18kc6*xHP-QrP(zu&8~52c8yE3 zYh0RLJT3Sl79G{C8bHzumm?Rd4&8fB&WHI(OH(@YL+`b*H{ZvrBjS`aPOmy3_aP((KZm ze*PZKF5T(eO|wgPI?vPW(%m(?bf^76vrBi{H8i_)cg-%{X@~K9W7D1X9nCJ?X*bgB z(w+7w%`V+(=hE!bo%S=$F5PLD)9lin_CC!n-CeW0bg%Xj&CWQ@&N$7^IL*#D&CWQ@ z&N$7^IL*#D&CWQ@&N$7^IL&UuPtESwt-EGtoMva7W@nscXPjndoMva7W@nscXPjnd zoMva7W@nscXPjnt$@k4J-RX0fW|!`CZ=l(wJKb|=cIi&{GMZhw(>;=Am+o}$rP-xB z-P37y=}ymz^$dE?adt>|*X+`ro^3R{bf;$~%`V+tvrBh+#?$Q5oz4z4yL6}D*+8>P zcludzG`n=C?@^`Mr8|9X+;Q)l{@kV}cf8(p_v(2?v&(<)x83qDZhPap&d-lDyL7+l zU;V4wzHMFSF3m38N50@wx4mp#=Pu1I-5>8J5*SIvh#--Uc zF3qlSX?BfEvuj+MUE|X1O83<48kc6*xHP-QrP(zu&8~52c8yE3Yh0RLUAj;EBcHnMu63QCA82;zKIR3Vy6s8pI(KPy>Hf~sZ{GIUXWYDSmvh_obJoop zKYQCZec=bzb^f~R{B~+~`MOizquHf9ef=KIF5T(-b7^+z9&gW|zelr6clupkG`n=C zb2rT{-RV3}vrBi^?9!d~2hA?sY1h!~(w+9w+F{R~{yt1QjAoawJMBA~UAoh5q}ioA z?NORty3@|3*`+(}XPRBQ(=Mmkr916?nq9iPW_RgcZ6KPRahjcRnw@c)opG9-ahjcR znw@c)opG9-ahjcRnw@c)-G-l<-LXY?&CWQ@&N$7^IL*#D&CWQ@&N$7^IL*#D&CWQ@ z&N$7^IL*#D&F+%#n_aro=P=DK-Ra&yvrBin=g{oZo$h5cyL6{}B+V|}>E27TOLw}b z)9lino)t8^bf;&~dba({@eE3LdbZK*(w&}}G`nPcludzG`n=C?@^`Mr8|9X+;N|r{@kV}cf8(p_v+b3v&(<)qaOM4TOYTs^K&W9 zF5P#(@>8J5SGuQW*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu z&8~52c8yE3Yh0RLz{AEC!WVNyL7+& zhhKE-*RJdQIZv}o_jUi|MYn$6y3SpiUAkZLiLbf!%hz@89{*j}&qFtFJnbzXUgw7o zU%2a>b!v9`x>Mhy*`+&u{T|IO-Rb*tX?E#OKYx#Am+o|qrP-ysYj){Q=Wd!^y3=`{ zW|!`+*`+(}51L)N)2^Y}r915E27TOLw}b)9lino)t8^bf;$! z%`V;P*+#QVcY0>h?9$yeyL6{#Jk2iM>FhwWOLy1o(w)vaG`n=C-`PO3OLzKNaWuPh zr|(gv*`+&uZQOBBJ>8J5*SIvh#--UcF3qlS zX?E#;`|xp~*)=ZBu5oF0jZ3p@T$)|u((D?SX4kkhyT+y2H7?DracOpqOS5ZSnqA}4 z>`M34>>8J5*SIvh#--UcF3qlSX?BfEvuj+MUE|X18kc6*xHP-QrP(zu&8~52c8yE3 zYh0S$-^bG zvrG5!_y622pTDkimu8pl8{huETYh+5=k9WDxqfcBdE?t}dF~(no^_qO>pXO7cKNzf z-=o>3JAM5g%`V;P`*Ue_=^k&-pT9@5OLzL+STwtIr*kaLF5O+TOLsbV)9lin&hs?8 zba%}z-D!W&?9!cf4b3jyX)n?2(w%k~%`V+(-_h*SopvM5F5PL5((KZmb}r2>-DyA5 z?9!cfIn6HJY46kQ(%m(?OZRH4(Cm!U?2OawjMMCl)9j4X?2OawjMMCl)9j4X?2Oaw zjMMBk{M77@&A4lJ#%XrOX?DhGcE)LT#%XrOX?DhGcE)LT#%XrOX?DhGcE)LTmweys z(w#nsX?E#O_Xe6>y3;*}W|!`CFQeI|JKZB`cIi&{UYcFH(>>8J5*SIvh#--UcF3qlSX?BfE zvuj+MUE|X18kc4_xxW+lb(&q{((D?SX4kkhyT+y2H7?CA-QQjxgGc?q<#Ur}m+mhu z@7Ken*`@n8fBKH6{=mA$gr@lwCOLzMEJ(^v*)A#4n?9x5noq>zYo*?pxNc?PP>L?m+rKeXm;sNJB((R?zHb{cIi&Lk!F|f zv`1-n=}tSBW|!`?pJ{gKPP?3Dm+rLpX?E%En%$*)wLfTf#%XrOX?DhGcE)LT#%XrO zX?DhGcE)LT#%XrOX?DhGb{l?bcE=9fH9O-pJL5Dv<1{r+Y8WF5T&# zPP0pQdREZv(w&|`G`n=CXB*8f-RYT0vrBh+7Srs~ou2VDyL6|s1I;eoU9(GfI_uEv z(%m(?bf>c!%`V;PcQ(-M(w%-*9L+A>>3dXZcIi%E8+Y8Rk26%dQ+aR_m1cMO zT34J-XPh=?oE~SK24|e^W}Mb$oW5q9re>UuW}J3roL**}MrNEYW}Fsgoc?8;=4G7D zWt_HUoStQzhGm>?Wt>*E;io=joF-+Q4rQG7WSrh)oW^9Fu4J5+WSo9voMvR4PGp=m zWSkykoCai^?qi(RW1PNYoTg)(j$@p5W1L=NoJM1uE@OPX{VCV)?>BFJ=~JHg`H!q? zYB86ub@Rs5ZD=v+PG6Tri%EC-zDrt6y3@~9qs63q{0^b~oe;E`bf@P%EhgPvi%EAn zpU`5`-L;r>r}GpoCf(_rMvF;zI{(pP(w)wgw3u|K^C~SS-RT@mi%EAnU(;gJozCsF zm~^K-K#NIt+8MN%bf^77i%ECdMYNc7r@cjsNq5?Dw3u{vE#}g_It$WbjMHL_(_)O% zVvN&bjMHL_(_)O%VvN&bjMHL_(_)O%VmAELVvaNWuEiLq#Tci>7^lS;r^Ohj#Tci> z7^lS;r^Ohj#Tci>7^lS;r^Q_IeTzwV`W&Xkq&wXkXff$d_Z(VGy3@Uk7L)FDkEF$< zJKcL}G3ieCbXrWh)3bsWlkW5kqQ#^;J=jrvzQi>?(~eO#iTo(9cVG> z?pjQ`(^-cWlkTp?q&uC>Xff&TT1>jr&*G=Wq&xi#Fj`Ey)At_IV$z+y=IOYvA7}MT z_v-n2ynV-MG4}qn7~`}U4;G7~`}U4;G7~`}U4;G7~`}U z4;G7~`}U4;Gm<>O*7~`}U4;G7~`}U4;G7~`}U z4;G7~`}U4;G7~`}U4;G7~`}U%&w>F)YVy3?72 z{*vylzoa{zq3AE^PG>XvOS;pUkN%SGbe5#Qq&uBa=`ZO{XJ7hDy3?7O{*vx=R;RzD zJ8b~^OS;pxpueO$Z5H}Vy3-b-zoa{DEc#2j({`i3q`T`cm+sa1kp5zv{$iZ|Vx0bB zoc>~*{$iZ|Vx0bBoc>~*{$iZ|Vx0c6;ivv`oWpnh#W?-NIQ_*q{lz%_#W?-NIQ_*q z{lz%_#W?-NIQ_*q{lz%_<&y9FOS;qNF#RRn>E1wpNq4&E&|lJ>?q&3sbf#4G zOuEzek~*{$iZ|Vx0bBoc>~*{$iZ| zVx0bBoc>~*{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{<7hx{$iZ|Vx0bBoc>~*{$iZ| zVx0bBoc>~*{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{$hN+{fWE# z>$*Rm`is3k{lz%_<&xjLF?~N2{UzP$=N-{s(w&}d^p|vZ{UzO9e@Sd)r?VOTCEe-FM}J9oI!n@D(w)wz^p|v}voHN6 z-RVqCe@S;btJ7c7oi+gdCEaOT&|lJ>HVgeF-DwNaU(%g67X2mNX}i&1(%to!OZV#h zM}IL+e=$yfF;0ImPJb~@e=$yfF;0ImPJb~@e=$yfF;0Kk@Kb*|&e^;EVx0bBoc>~* z{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{$iZ|a>@7oCEe+BnEsOPbZ?-)q&wYn=r8F` z_cHoRy3;+9{*vx=@1?(_JKfXiFX>Lt3i?aB(=&+vlJ4|uqrap(Ju~Sq=}ymL`b)ag zGoJpE?sRsbzoa{zN$4->PG=qZOS-%MlJ0aiqrarP>o4i<`b)ag8I}H$?({RV`TCc1 zr=QJ3f4Ow8p0D&5(F1)oz777mvpDI8T}>Q>C8ueNq0I+(qGb@&ZzX4bf>c~{UzP$Oih1D zcRH)nU(%g60R1K1XU>ClF;0Im zPJb~@e=$yfF;0ImPJb~@e=$yfF;0ImPJb~@f7$R;e>u+4yZ&OF{$iZ|Vx0bBoc>~* z{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc?mj_x&Z^>2sL=lJ0bGpueO$-E-(K=}z}D`b)ag zJ(B*C?sV^^zoa|e)9EkiPR|PZOS;oDi2jo9^lYQQq&qz`=`ZO{&tm#Zy3;eB{*vx= zcA&qcJDo}BFX>Ka9r{bU(-~@gZ}^WL=iYRuvl;y*-Cci4ch_IiozAHAmvndiCEe-g z9n)Vf-K*y-{lz%_#rW~uxc+gzdi~@5cAWlVuTOt5PJb~@e=$yfF;0ImPJb~@e=$yf zF;0ImPJb~@e=$yfF;0ImPJb~@e=$yfF;0ImPJh|(Q-3i|e=$yfF;0ImPJb~@e=$yf zF;0ImPJb~@e=$yfF;0ImPJb~@e=$yfF;0ImPJb~@e=$yfF}~jZ`*-)Zb$>kd7khvD zi*fpkar%pK`pYFheirW?PtBj9On*st*I&||o^AA(ba(wF-Cci4cY4OtU(%h<4*dSC zbf+^3{UzP$tV4fEcREASU(%hT^p|v}Eku7wciLF=mvpD?Mt@0n*IzE(tMeQE#W?-N zIQ_*q{lz%_#W?-NIQ_*q{lz%_#W?-NIQ_*q{bj>X{pC0(@A`{z`ipV;i*fpkar%pK z`ipV;i*fpkar%pK`ipV;i*fpkar(<8-}jevr_W*fOS;p&f&P;2bkCu`q&wZq=r8F` z_elCny3@Uv{*vx=Pp7}6J3TAtFX>LtAo@$X)3c5KlJ4}(q`#y)J&Wlt=}ymh`b)ag z*@6C&?sO)hzoa{zb?7hYPG>0kOS;q9jQ*1DuD_(a>o4g}XH@!2y1V|8?ykRFx>wIv z`ipV;i*fpk@#DF2>=Wb1+jpG)V((9XF;0ImPJb~@e=$yfF;0ImPJb~@e=$yfF;0Im zPJb~@e=$yfF;0ImPJb~@e=$yf+3-_;F;0ImPJb~@e=$yfF;0ImPJb~@e=$yfF;0Im zPJb~@e=$yfF;0ImPJb~@e=$yfF;0ImzTW=$-Ti6Z-%kC--k<(roc>~*{$iZ|Vx0bR z$@l#w-Cci4cY3zbU(((6mvndiCEe*6Pk%{wIy=x`(w)vE^p|v}vkv_w-RTTPe@S;b zo6%p=oz8spmvpDIB>g4b>5NK$Nq0K?(qGb@&eZgmbf>dA{UzOL1JGa6owf!2CEaPW z&|lJ>wh;X#-DzXdU(%hn8~r8SU4OZBug-_`7vuC7MA2Kr07(>;g&lJ0abqrap(-6QEQ=}z}v`b)agJ)QoN?)0pn zzoa`ogXk~mPR};_OS;oDlm3$K^em>oq&q$1=`ZO{X9xOAy3?72{*vx=)}gKaGx|%q$C>Y?>pK70E9)%z*5f>$?ykS2JDpMKFX`_3OS-%Ma_L?@U+FK#=`Y6V zFUILF#*gRD^^fP(f8X(bJ5GPG*QdW2r@t7dzZj>#7^lA&r@t7dzZj>#7^lA&r@t7d zzZj>#7^lA&r@t7dzZj>#Z1}0a7^lA&r@t7dzZj>#7^lA&r@t7dzZj>#7^lA&r@t7d zzZj>#7^lA&r@t7dzZj>#7+-IH-0uFe?oX%wV((9XF;0ImPJb~@e=$yfF;0KE z=r8F`XFmE%y3<*b{*vx=My0=`JDq*$FX>KaYWhpM(^;MVlJ2wt=r8F`+k*a*?zCCx zFX>KOi2jo9w6W+f=}y~?{*vylzg)Uk=P&w;ar%pK`ipV;i*fpkar%pK`ipV;i*fpk zar%pK`ipV;%Z8u&%W=-#^%vvx7vuC7&QSE1 zbf>c!{UzP$%twDocREY1?~#AYakfu)I-}BG(%to!ba(yb(!F}V(qD|zUyRdVjMHC? z(_f4q&!y`h!>j-PwjK1Z%of(`b)m<^o*y!q&uA*=r8F`XA=5Ly3<*Q{*vx=hN8cu zJDttwFX>KaKKe_#(^-=KlJ0ayrN5**oqg#q=}u>A`b)agS)Klp?z92uFX>L(g8q{3 zv{~pc=}udS{*vyrvFI=9PTP(ClJ2g*T)J21EBcFZ`ipV;i*fpkar%pK`ipV;i*fpk zar%pK`ipV;i*fqPhM)S&agN>f7vuC7L7!}OPQr+WkaCEe+sLw`wkx|h*k(w**+^p|v}doTSZ-RYiAe@S6uA?Nq2e{(_hk^p7HdTbf>ce{UzP$OhSK2cRK6PU(%h< zQ1q8{r?VOTCEe-FM}J9oI!n@D(w)wz^p|vZ{UzO9f4Ow8p0D&5&QSE1bf>c!{UzP$%twDo zcREYbU(%hoCEaNY(O=S? zHWvLQ-D$hgU(((6mrM8Rd`N#WPJb~@e=$yfF;0ImPJb~@e=$yfF;0ImPJb~@e=$yf z+3-_;InJrO{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{&LCp{UzP$ zbC~{;?sRXUzoa|ebLcPWPWLkUOS;oNlKztJbnm6Vq&wZy=`ZO{&kFiWy3;d={*vzW zY@@%VJ3TY$FX>LtV){$E(=(p_lJ0bNpueO$ok{2~=}u=I`b)ag8H)ar?sPVzzoa{z z`RFg{PG?E_OS;n;mHv|MarXTl`Tf)B?)uB6d-Z&!zZj>#7^lA&r@t7dzZj>#7^lA& zKb~vHJ~Mv2eaGo9_Wtx2+PSl`}|y= z->3d!?@xa*PJb~@e=$yfF;0ImPJb~@e=$yfF;0KE=r8F`XFmE%y3<*b z{*vx=My0=`JDq*$FX>KaYWhpM(^;MVlJ2wt=r8F`+k*a*?zCCxFX>KOi2jo9w6W+f z=}y~?{*vylzg)Uk=R^97ar%pK`ipV;i*fpkar%pK`ipV;i*fpkar%pK`ipV;%Z8u& z%W)3f^%vvx7vuC7&QSE1bf>c!{UzP$%twDo zcREYbU(%hee2(|qar%qBKK;cw{lz%_#W?-NIQ_*q{lz%_#W?-N zIQ_*q{lz%_#W?+C!%zLiIQ_*q{lz%_#W?-NIQ_*q{lz%_#W?-NIQ_*q{lz%_#W?-N z_^{HN=jW-v*!$C8jMHC?(_f6!UyRdVjMHC?(_f6!UyRdVjMHB(`Ty5n@>#K- zLAPB0v$%O6uA?Nq2e{(_hk^p7HdTbf>ce{UzP$OhSK2cRK6P zU(%hHVgeF-DwNaU(%g67X2mNX}i&1(%to!OZV#hM}IL+e=$yfF;0ImPJb~@ ze=$yfF;0ImPJb~@e=$yfF;0Kk@Kb*|&Y8RZVx0bBoc>~*{$iZ|Vx0bBoc>~*{$iZ| zVx0bBoc>~*{$iZ|a>@7oCEe+BnEsOPbZ?-)q&wYn=r8F`_cHoRy3;+9{*vx=@1?(_ zJKfXiFX>Lt3i?aB(=&+vlJ4|uqrap(Ju~Sq=}ymL`b)agGoJpE?sRsbzoa{zN$4-> zPG=qZOS;n;ivE)BbT*^Eq&uDY=r8F`XG!`?y3-kz{*vx=_NBk1yX!BP?$z^^{$iZ| zVx0bBoc>~*{$iZ|Vx0bBoc>~*{$l)iE*_i2`0@4~r@z?y(_f6!UyRdVjMHC?(_f6! zUyRdVjMHC?(_f6!UyRdVHvH6IjMHC?(_f6!UyRdVjMHC?(_f6!UyRdVjMHC?(_f6! zUyQG}|K8o_$NKy_^%r}8`ipV;i*fpkar%pK`ipV;i*fpkar%pK`ipV;i*fqPCExd# zbf;$!{UzP$*+zd!cY0>hU(%hP#q^hSr)NCFi5?Nq0I^(_hk^&g%4+bf*nKe@S=R7W9{N zr_DltNq5>p^p|v}jYWS+ciL|Bmvndi<#7^lA&r@t7dzZj>#7^lA&r@t7dzZj>#7^lA& zr@t7dzg+Tte@S=x9HzgdJKY=TFX>MA9QsST)4h!TlJ0bmq`#y)-FxXT=}z}_`b)ag zvx5GT?(__zzoa`o+vqRpPR~sGOS;punEsOP^o*y!q&uA*=r8F`XA=5Ly3<*Q{*vx= zhN8cuJDttwFX>KaKKe_#(^-=KlJ0ayrN5**oqg#q>F)Z=rF->!rN0=bzZj>#7^lA& zr@t7dzZj>#7^lA&r@t7dzZgHBo5#L1e!P9h=`Z&F^cUmw7vuC7+Rc*@A~{W z^%r}8`ipV;i*fpkar%pK`ipV;i*fpkar%pK`ipV;i*fpkar(<8-}jevr)LoTCEe-S zMt@0ndS=pJ(w&~g^p|v}XFUBS-RbN=e@S;blh9w%oz6P+mvpBy6#XUL>1;-SNq0K) z(O=S?&XV+(bf+^a{UzP$>`Q-1cREwkU(%h<>hza%rwu@VNq5>7^p|v}%|d@kciKYq zmvpC%MSn?m+HUlhba(yb(!Dw#(qD|zUyRdVjMHC?(_f6!UyRdVjMHC?(_f6!UyRdV zjMHB>{M28LbK#7^lA&r@t7dzZj>#7^lA&r@t7dzZj>#T=IQ? zNq71jroW^+-5cmH=}z|?`b)agy^Q{n?sSi&zoa|ed+9IfPWN>BOS;pug8q{3^bDfE zq&q#^=r8F`&rJGDy3@0m{*vzWjHkb(JDnZqFX>Ka68cNJ(^-f9lJ0bdqQ9g&oz3Vk z=}u=p`b)agS(5&e?sP__zoa{zed#ah?)uB6d-Z&!zZj>#7^lA&r@t7dzZj>#7^lA& zr@t7dzZj>#7^lA&Kc1^ce=&Z%eaGo9_Wtx2+Rc*-}?K#<@6VOefo=W`ipV; zi*fpkar%pK`ipV;i*fpkar%pK`ipV;i*fqPCExd#bf;$!{UzP$*+zd!cY0>hU(%hP z#q^hSr)NCFi5?Nq0I^(_hk^&g%4+bf*nKe@S=R7W9{Nr_DltNq5>p^p|v}jYWS+ciL|B zmvndi<~*{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~*{&LCp{UzP$bC~{; z?sRXUzoa|ebLcPWPWLkUOS;oNlKztJbnm6Vq&wZy=`ZO{&kFiWy3;d={*vzWY@@%V zJ3TY$FX>LtV){$E(=(p_lJ0bNpueO$ok{2~=}u=I`b)ag8H)ar?sPVzzoa{z`RFg{ zPG?E_OS;n;mHv|MboQmcq`T`cm+sZ`mHuL!{$iZ|Vx0bBoc>~*{$iZ|Vx0bBoc>~* z{$iZ|Vx0bB{CF-O&tK!m+jpG)V((9XF;0ImPJb~@e=$yfF;0ImPJb~@f7$R;A23dT zF;0ImPJb~@e=$yfF;0ImPJb~@e=)w^zWw;Dzn@!9f3er6zZj>#7^lA&r@t7dzZj># z7^lA&r@t7dzZj>#7^lA&r@t7dzg+Tte@ST^p|v}Eku7wciLF=mvpD?Mt@0n*IzE( ztMeiK#W?-NIQ_*q{lz%_#W?-NIQ_*q{lz%_#W?-NIQ_*q{bj>X{pC34?fQ#x`ipV; zi*fpkar%pK`ipV;i*fpkar%pK`ipV;i*fpkar(<8-}jevr_W*fOS;p&f&P;2bkCu` zq&wZq=r8F`_elCny3@Uv{*vx=Pp7}6J3TAtFX>LtAo@$X)3c5KlJ4}(q`#y)J&Wlt z=}ymh`b)ag*@6C&?sO)hzoa{zb?7hYPG>0kOS;q9jQ*1DbmpVKq&uA@=`ZO{XH@!2 zy3^U0{*vylzg)Uk&sX}3ar%pK`ipV;i*fpkar%pK`ipV;i*fpkar%pK`ipV;i*fpk z@#DFC^cUmD+jpG)V((9XF;0ImPJb~@e=$yfF;0ImPJh|(Q$H|He=$yfF;0ImPJb~@ ze=$yfF;0ImzTUq5zkmJx+H(4fy*~ZLIQ_*q{lz%_#W?-NIQ_*q{lz%_#W?-NIQ_*q z{lz%_#W?-NIQ`|4@B2%-(=&+vlJ4|uqrap(Ju~Sq=}ymL`b)agGoJpE?sRsbzoa{z zN$4->PG=qZOS;n;ivE)BbT*^Eq&uDY=r8F`XG!`?y3-kz{*vx=_NBk1JDsWNFX>Ka zb^1%X(*~fwq&sa3`b)agW}&~NJ8dEQOS;p>qQ9g&Z8!Q$y1V{z>0X@==`Y6VFUILF z#_2D{=`Y6VFUILF#_2D{=`Y6VFUILF#_2B`e(EpBId0cqjMHC?(_f6!UyRdVjMHC? z(_f6!UyRdVjMHC?(_f6!UyRdVF8RK{q&s~M(_hk^?hW*pbfGA>8wM4Nq0I!(O=S?&SvzNbf+^P{UzP$EJ=S!cRHieU(%h+i>w(_ifM=`Y6VFaIxN_aFQHUf1{i#8@>hv4k|l7>9;Zf%XiBV`oAc9pZ=-cXkwW zcB*(vtTUUThB@L4F`czwjjKwmtA;tX&iZT2YQu=GhWKl)qG4(&VU{#TQ^%|}lo-pH z^X&EhWcPgD@5lAHzkL4jS;F%RAwY}*-xzhv9aHvA>qc4p!)*|xJ7f62C;@%T%& z?e2iTWZUi}_)E6!u7kg1+wM^KOSbK9hQDOn?tJ)5w(Ty7zhv9)sQ62^?e2@eWZUl4 z_)E6!u8zNC+ui~2mu%a+1^$w4duPF4vTg4|_)E6!9SeWSw!ORIFWK(=<=Wowhxm)_ z_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|zQ!X21E%aZlU%i|zP}?f8rB_>1lM zi|zP}?f8rB_>1lMi|zP}?f8rB_>1lM%XQ!TOSbK67=OvOJsa?sY}+#jf62Bz%kY$+kUv@t17dGaY})ww)FDOSbI{!e6p&XB+;KZ96mZmu%ZvjK5^t&UpMK+je)r zU$Sj?68t6GcGtmQvTb)L{3Y9VH^X1DZFfHWCEIqF#9y*)cU1f(+jjTGU$Wi#%eB3q zulS4Y_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|xm`e)x;+ z$B*xJ{KbAg{$e}+Vmtm~JN{xj{<7I`{$M-)Vmtm~JN{xj{$e}+V*C2>?f?Dj|9!VR z{$jsA{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN|Or z_x_S?JA?3-Y}?s}zhv9aO#CI=b{69=*|swtf62Dp9q^ZI+noe|$+q2f@Rw}c9SVQR zw%yI}mu%ae4}ZzF-6iptY}*|bf62DpeesuU+npMJ$+q3q@t17dI{^NYZF{%CU$SlQ zEci>d?Oh0e$+o>?;V;>?cQ^bc+nv8$+xz_xf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SM zf3Y2Zu^oT09e>&EH-9?yBYqHZM*Z~FWI)cB>s|ZyQAVS z*|xhc{*rCGQ{yk$w!1q1l5Kkjz+bX$?-uw=w(Xq-f62DJ3*j%>ws$Q2CENDyhQDOH z^OtLTzaQc+w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FPr`5FULJ==P$P7 zFSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1g2J?=RW5uVMTp+xBe0U$Sk_ z9Q-BQ_AJ9+vTe^u{3YA=?8RTQZO?T4CEIpZ;4j&>GYEglww-PGOSbLI#9y*)XEFYg zZ9C)fmu%bJ0e{K1-AVA5Y};K2f62Dpq41Y%+uaO*$+q43@Rw}cT@ruEw%t+jmu%bJ z7k|li=P%dxe!k)_w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h z<1e=3FSg?^wjcL`!(VJaetfs%FZT2C7u)d{+wqspe)9|4@fX|i7u)d{+t-h8|M}~G z-|ddS*sqVj*p9#0j=$KBzu1ny*p9#0j=$KBzu1ny*p9#0j=$KBzu1ny*p9#0j=$KB zzu1ny*p9zk_r1Sl+s+{TCEIqk;V;>?GZTNwww=ZJOSbKd$6vB-cL)3>+jb|xU$Sj? z9sDKRc89`WvTb)W{3Y9V=fhvJZFfohCEIpK#b2^*cVGM^+jghMU$Sj?b^ImU_6~r* zWZT{?@Rw}cI}84jZF?8OU$SlQSolk}?cEK3$#&;2*YG(^w?X19GvTbJ&{*rAw+whlc+nI^KWZTYS{3Y9V#^W#9wz~uVl5M+_;4j&>yAJ-6 zZM#F^FWI)c8UB)OyYt~M*|xhR{*rCGqv9{ww!1I>lI_l4uI>GN#b0d4Uu?%;Y{y@0 z$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu-|_4Trzje*E}u z$6xH{<1e=3FPr`58@A&ww&O3huOHw3`s;t6?T)|LuaCdjj=$KBzu1ny*p9#0j=$KB zzu1ny*p9#0j=$KBzu1ny*p9#0j=$KBzu1ny*p9#0j=$KBzg+jdzhv9aAp9lUcDCU! z*|swif62C;#rR9M?Tp7?vTb(<{3Y9VC&6E`ZFe2~CEIp~!e6p&cQgDY+ji%}U$Sj? zN&F?-c1OiuvTb)?{3Y9Vr^a8hZFhD2CENB6fWKth-YxK#Y}-2v{*rBb7s6k%ZSPq4 zOSbLZ4S&gY=P%dxem}%tY{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6UpD*A zUyggy&R=ZDUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6v1d-e0n9U&HuI zw(Z$~zhv8?yCnXS zZM&o5FWI)cFaDD4&R?$W{d~n=Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6 zUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6ste?iGi>*na%@ZpUBj=i@J%{pKIG<1e<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^ zw&O3h<1e=3FSg?^w&O3?eeW;XwlfHS$+n$s_)E6!%*0=^ZD%q5l5IQV@t17d-2s2e zw%tkamu%Zz2Y<=7-J$T8Y}?%of62Dp`S6!)+g%cW$+q25@t17d-4}n!w%w`mmu%Zz z9e>HTy#wGc*|v8J{3YA=&Vs*W+ununmu%ZR7XFfLdw0WMvfcU1wY}dD@fX|i7u)d{ z+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wqspe)E^(9<=ip+wm9M@fX|i7u)d{+wm9M z@fX|i7u)d{+wm9M@fX|i7u)fd>%RAwY}?l`{*rBbHsCMWwr39hl5KmI;V;>?XC(fT zZF~0OFWI(dI{uPvJ1g*)Y}*-xzhv9aHvA>qc4p!)*|xJ7f62C;@%T%&?e2iTWZUi} z_)E6!u7kg1+wM^KOSbK9hQDOn?tJ)5w(Ty7zhv9)sQ62^?e2@eWV`d1YkNOm@fX|i z7u)d{+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{ z+wm9Mk9)`AFSZ{)zT5E^`}u3X`H1c7$G7|Xzi+$aFZS!>FSg?^w&O3h<1e=3FSg?^ zw&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FV}tVFWI&; z2!F}8oo)C_w(ZQsU$SjyG5(TmJLB<}Y}?%df62DpN${6!+g%5L$+q30@Rw}c-3))p zw%z&gmu%Zz5`W3I-BIzEY}?%zf62DpsqvR=+g%-h$+o=%;4j&>cMJR_+xE_azhv9q zh47bb+dCHil5Kl;!(X!9`OCGv-w*K@+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M z@fX|im(70jmvu|o`it%Oi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB_{(+Q z`%AX%YZ!mYwmlp0mu%ZJ2Y<=7J1lMi|zP}?f8rB_>1lMi|zP} z?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?Z>_3@E6;UAOBcMJR_+xE_azhv9qh47bb+dCHil5Kl;!(X!9`OCGv z-w*K@+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M@fX|im(7m9Jhc1$FYD*m{p2ro zKlw}DPySN(lfTsc2T-x?bKl#h0ZD+;FUoLGsgHHZ( zY1`R$@|R27&dig)T-tUPpZw+0wln_ZFPFC69ZvpoY1^ITa%tNg>f|q% zw%yH6{&H#Co$ur?m$uy{PyTXg+a2}fFPFC6eNX;!Y5y31Ikorm_2e&gKlw}DPySN( zlfTsc;d} z+IDw1`OBqkcaoF8T-tWmIr+<_ZFi`Xzg*gOH#_;urEPbVEQ< zx}W@|?k9h-{pK&nJ!R)Fw&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^ z*M09V*|x7?{3YA=Y`|Z#ZO3w%wudmu%bJ41dYC z-TCmBY};KDf62DpQSp~-+uav`$#&;2*Y|w0JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+ zVmtm~JN{xj{$e}+Vmtm~JN{xj{&L;-{*rAwgYcJZ+u4S{WZTY6{3Y9V7UM73wlf}o z$+q1c@Rw}codkc$w%v8`mu%Y|3V+GA-OccqY}=g=f62DpCGnSR+Z`2u$+q2n@t17d zof?11w%yh7mu%ZR0REC~d$+(}vTg4y_)E6!T?l{4w!LHFFWI(tH~b~roxfb$`~47q zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf7$Fee>v_UJAbhqf3Y2Zu^oT0 z9e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=s*dwrU-y#jj=$K?KX~Qv72A({&u%|{-fqWV?AOO%Y{y@0$6sv6 zUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%; zuKV6!vTbJ&{*rAw+whlc+nI^KWZTYS{3Y9V#^W#9wz~uVl5M+_;4j&>yAJ-6ZM#F^ zFWI)c8UB)OyYt~M*|xhR{*rCGqv9{ww!1I>l5M+F<1g8^yE^`oZF>j6U$SlQ7WhlH z?VSaG$+o=<;V;>?cP#uR+xG5;zht}fmuq{!AL1{z<1e=3FSg?^w&O3h<1e=3FSg?^ zw&O3h<1e=3FSg?^oBif5$30``FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h z<1e=3FV}tVFWI)QVf-cA_H4jkvTe^C{3YA=EW=;2ZO=&jCENDw#b2^*&vg7H+jdsq zFWI&;2!F}8oo)C_w(ZQsU$SjyG5(TmJLB<}Y}?%df62DpN${6!+g%5L$+q30@Rw}c z-3))pw%z&gmu%Zz5`W3I-BIzEY}?%zf5~>|FW2^dzTz*o<1e=3FSg?^w&O3h<1e=3 zFSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSf5Azxj#n>)x^5@fZ8~ zOHZ~x|KOFwPweO8FSZ}|qTSCwe%@}!U+mY%Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6 zUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6v1d-e0n9XAu69Z9CiWmu%aa ziN9pq&SLx}+jhp|FWI)c1OAe2yOZEA*|xh5{*rCGL*Xykw!0brl5M;5;V;>?yCnXS zZM&o5FWI)cFaDBkyHn#Y*|xhn{*rBb2f$ylZSNNNOSbKu1%Ju5y$j(l*|v8q{3YA= z?uNf)yYrW8d%qvzFSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1d^2<}b%R zV&^Zm<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3?eeW;Xwy$CQCENCF zz+bX$&m81kwz3K25 z+m9dL?f8rReEh|B{Ka?vkiaAww;;yOSbJS#$U2+XFUFrZM!?*FWI&` z3I398yX)XD*|s|r{*rCGo8d3nwmTpGl5M+7;xE~@J1YK?ZM*y8FWI&`HU5%qyQ||b z*|v88{3YA=Zh^mK+um95mu%a+5dM;Fd&k0GvTg5f_)E4sf4R2z`yu{fJN{xj{$e}+ zVmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+ve|F`a@-Sk{$e}+Vmtm~JN{xj{$e}+Vmtm~ zJN{xj{$e}+Vmtm~JN{xj{&L;-{*rC`8pdC;ZO;b$CENDQ!C$g%&ocZa+xCpaU$Sk_ zUi>B7_DsiLvTbJt{*rAwgYcJZ+u4S{WZTY6{3Y9V7UM73wlf}o$+q1c@Rw}codkc$ zw%v8`mu%Y|3V+GA-OccqY}=g=f62DpCGnSR+Z`2u$+q2n@t16O{&H>a=PUkVJN{xj z{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~`}*;lpV+?c z4ci@mv7e8>*p9#0j=ya7n}67jzu1ny*p9#0e%z}Lf3f}e@!gKU*w4pbY{y@0$6sv6 zUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@&``%x&ZD$bv zl5IQN@Rw}cnTfw-+s3w%wudmu%bJ41dYC-TCmB zY};KDf62DpQSp~-+uav`$#&;2*Y1lM%Vxj%hVA%^ z?f8rB_>1lMi|xm~>+l!bk00Od_>28~{KaI|=@hZM*B>FWI&`6#kNJyPM%J*|s|${*rCGOX4rtwmT~Rl5M;D;xE~@ zJ2n22ZM&=EFWI(t0Q@D}_HKc{WZT|Z@Rw}cyAb}8ZF|SUU$SlQZum>KJAb*h_xmCK zVmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{<7I`{&Jl2JAbhqf3Y2Zu^oT0 z9e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=s*dw%RAwY}*-xzhv9aHvA>qc4p!)*|xJ7f62C;@%T%&?e2iTWZUi}_)E6!u7kg1+wM^K zOSbK9hQDOn?tJ)5w(Ty7zhv9)sQ62^?e2@eWZUl4_)E6!u8zNC+ui~2mu%a+1^$w4 zduPF4vTg4|_)E6!9SeWSw!ORIFWK(=<=Wowhxm)__>1lMi|zP}?f8rB_>1lMi|zP} z?f8rB_>1lMi|zQ!X21E%agOi&#diF~cKpS5{Ka?vkiaAww;;yOSbJS#$U2+XFUFrZM!?*FWI&`3I398yX)XD*|s|r{*rCG zo8d3nwmTpGl5M+7;xE~@J1YK?ZM*y8FWK(=<=WoQSNz3x{Ka?yCnXSZM&o5 zFWI)cFaDBkyHn#Y*|xhn{*rBb2f$ylZSNNNOSbKu1%Ju5y$j(l*|v8q{3YA=?uNf) zyYrW8d%qvzFSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1d^2<}b%Nz4I5_ z@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wqs{zW0}G+t)Dul5Kl7;4j&> zXAb_7ZF`pCFWI(dB>s|Zd-mcl*|ujo{*rAwEAW?W+ZlwvWZTX*{3Y9VX5uf|wzC+2 z$+n&G_)E6!?ts5!+wLUzOSbKC<}JN{xj{$e}+Vmtm~JN{xj z{$e}+V*7EgJN(7=mV{*vv^U#{)_eu%%=j=$KBzu1ny*p9#0 zj=$KBzu1ny*p9#0j=$KBzu1nyZ1$VK9Ov-PUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6 zUu?%;Y{y@0$6sv6U#|P!U$Sjq!}v?K?b(38WZRxO_)E6!S%$x4+n$m5OSbLVi@#*s zp6U2Yw(YFIU$Sjy5dM;FJKOM=Y}=WMzhv9aV*DlBcE;l`*|xg_{*rCGli)Aew!04g zl5M*~;V;>?yBYqHZM*Z~FWI)cB>s|ZyQAVS*|xhc{*vv^U#{)_e8pdE$6sv6Uu?%; zY{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y+pZq^Ap?GxxC%+7yJ46i|zP}?f8rB_>1lM zi|zP}?f8rB_{(O$`GW2Ei|zP}?f8rB_>1lMi|zP}?f8rB_>1kwz3=cB+m9dL?f8rR zeEh|B{KaI~4wsZM&P{FWI&`AO4bU zyG!CP*|s|>{*rCG`{FOzwmUWcl5M-I<1g8^cL4k)+xBjOzhv9qS@4%^+q)3{l5Km( z!e6p&?{4@@wmW~hw)guX{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~`}*0+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M@fX|i7u)fd>%RAw zY}?l`{*rBbHsCMWwr39hl5KmI;V;>?XC(fTZF~0OFWI(dI{uPvJ1g*)Y}*-xzhv9a zHvA>qc4p!)*|xJ7f62C;@%T%&?e2iTWZUi}_)E6!u7kg1+wM^KOSbK9hQDOn?tJ)5 zw(Ty7zhv9)sQ62^?e2@eWV`d1YkNOm@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M@fX|i z7u)d{+t-iZ{KWQkzHWE?#eP2iVmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+ve|EbU_1U| zJN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~`*CkP?uWJ?Kfc@X7yJ46i|zP}?f8rB_>1lM zi|zP}?f8rB_>1lMi|zP}?f8rB_{(+Q`%AX%48mWsZD$+)l5IOP@t17dS&YAA+s=6W zCEIp)z+bX$cM|+1+jiH%U$Sj?DEuYcb~nRcvTb)h{3Y9Vm&9MPZFf}sCEIrQ#b2^* zcWV44+jdvSU$SlQ0QgI`?cD-@$+o?-;4j&>cOm>G+xCuyzhv9q-SC%ecm8s1@ApIe z#diF~cKpS5{Ka{N*@Dcm85K{$e}+Vmtm~ zJN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN|Or_x_S?`x?eyvTe@>{3YA=%)wu>ZO=0N zCENCl#9y*)&tCi`+xASyU$Sjy1^$w4JA?3-Y}?s}zhv9aO#CI=b{69=*|swtf62Dp z9q^ZI+noe|$+q2f@Rw}c9SVQRw%yI}mu%ae4}ZzF-6iptY}*|bf62DpeesuUcm8s1 z@8>K2Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~`}*;}alC)pzRuN~uh@>i*p9#0 zj=$KBzu1ny*p9#0j=$KBzu1ny*p9#0j=ya7n-AEIzu1ny*p9#0j=$KBzu1ny*p9#0 zj=$KBzu1ny*nZp_cmMt$KX13=FZS!>FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FSg?^ zw&O3?eeW;XwlfHS$+n$s_)E6!%*0=^ZD%q5l5IQV@t17d-2s2ew%tkamu%Zz2Y<=7 z-J$T8Y}?%of62Dp`S6!)+g%cW$+q25@t17d-4}n!w%w`mmu%Zz9e>HTy#wGc*|v8J z{3YA=&Vs*W+ununmu%ZR7XFfLdw0WMvfcU1wY}dD@fX|i7u)d{+wm9M@fX|i7u)d{ z+wm9M@fX|i7u)d{+wqspe)E^(oZR_~?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB z_>1lMi|zQ!b>I6-w(V;ef62Bz8}OHG+cO7$$+kVq@Rw}cGZKHvwmp0Cmu%ZJ9e>HT zofY^?w(ShUU$Sjy8~&1QJ2UZ@Y};9kzhv9ac>E>Xc6Y#EvTb(~{3Y9V*TG-1ZFeaA zCEIp4!(Xy(cRu_j+jf`4U$Sj?RQx5|cK5|!vfcU1wY{IO_>1lMi|zP}?f8rB_>1lM zi|zP}?f8rB_>1l9$KP_iKia;|&6~g2j=$KBzu1ny*p9#0j=$KBzu1ny*p9#0j=$KB zzu1ny*p9z!_L~pbj=$KBzu1ny*p9#0j=$KBzu1ny*p9#0j=$KBzu1ny*nZqAcV9op z&)e1lMi|zP}?f8rB_>1lMi|zQ!b>I6-w(ShUU$Sjy8~&1Q zJ2UZ@Y};9kzhv9ac>E>Xc6Y#EvTb(~{3Y9V*TG-1ZFeaACEIp4!(Xy(cRu_j+jf`4 zU$Sj?RQx5|cK5|!vTb*2{3Y9VSI1wnZSMg1OSbLZ0)NT2y|dsi*|v8f{3YA=j)lKu z+uq&qmuz?ba&7PTL;S^d{KajYQ2=+{>Z@k|E&A@_Z+TPDs{Ka4si#LC1lMi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?Z>@y z_w{%Dyxoq!*sqVj*p9#0j=$KBzu1ny*p9#0j=$KBzu1nyT=%CQ`j_jR_-LFJ>kNAK zga2DU^-w#5@R$5`+u4S{WZTY6{3Y9V7UM73wlf}o$+q1c@Rw}codkc$w%v8`mu%Y| z3V+GA-OccqY}=g=f62DpCGnSR+Z`2u$+q2n@t17dof?11w%yh7mu%ZR0REC~d$+(} zvTg4y_)E6!T?l{4w!LHFFWI(tH~b~roxfb$`~47qu^oT09e=SMf3Y2Zu^oT09e=SM zf3Y2Zu^oT09e=SMf7$Fee>u*%oxj+Qzu1ny*p9#0j=$KBzu1ny*p9#0j=$KBzu1ny z*p9#0j=x;@y}xAJzJ~FaY}>N|f62BzbMTjJ+p`RR$+kTs@t17dvloBKwmsAFmu%Zv zfxl$i&LI3H+jh3$FWI&;6MxCJoyGV|w(X3^U$Sj?2mB@5b|=AKvTb)A{3Y9Vhr(a7 zZFe*LCEIrA!(Xy(cS-yu+jd9AU$Q;!zHeKfv#H=O+3x)1+TPDs{Ka1lMi|zP}?f8rB_>1lMi|zQ!b>I6-w%@eQpYMz_ z2!F}8oo)C_w(ZQsU$SjyG5(TmJLB<}Y}?%df62DpN${6!+g%5L$+q30@Rw}c-3))p zw%z&gmu%Zz5`W3I-BIzEY}?%zf62DpsqvR=+g%-h$+o=%;4j&>cMJR_+xE_azhv9q zh47bb+dCHil5Kl;!(X!9`OCGv-w*K@+wm9M@fX|i7u)d{+wm9M@fX|i7u)d{+wm9M z@fX|im(70jm*X7U`HSuNi|zP}?f8rB_>1lMi|zP}?f8rB_>1lMi|zP}?f8rB_{(+Q z`%AX%YZ!mYwmlp0mu%ZJ2Y<=7JC=0 zJN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$e}+Vmtm~JN{xj{$l%aZ{2<1e=3FSg?^w&O3h<1e=3FSg?^*M09V+3x%$+jh3$FWI&;6MxCJoyGV|w(X3^ zU$Sj?2mB@5b|=AKvTb)A{3Y9Vhr(a7ZFe*LCEIrA!(Xy(cS-yu+jd9AU$Sj?U;HK8 zcBjT)vTb*D{3YA=4uHR8+ukkkmu%ZR3;vRAdl$lAvTg5J_)E6!-3@=qcIPkG_I^La zUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6q%4&0mglYUeMu<1e=3FSg?^ zw&O3h<1e=3FSg?^w&O3h<1e=3FSg?^w&O3?eeW;Xwy$CQCENCFz+bX$&m8#diF~cKpS5{Ka<1e=3FSg?^w&O3h<1e=3 zFV}tVFWK(=CEIqk;V;?#?DIbIy!Wop`S*6>FWI)U7=OvOo$>ffw(ahKzhv9)B=}3V z?XH8rWZUjg_)E6!Zic^P+wOe$OSbJUiN9pq?x^@nw(ahVzhv9))c8xb?XHf$WZT{W z@Rw}cy9NG|ZF^_IU$SlQLikIz?Hvn$$+o?_;V;?l{N>u-?}zw{?f8rB_>1lMi|zP} z?f8rB_>1lMi|zP}?f8rB_>1lM%Vxj%%W)3v{KaHH^Px+nx>hOSbKqgTG|ko@Mw;w(S{-zhv8I|=@hZM*B> zFWI&`6#kNJyPM%J*&cVkuUwz={Sbf2cIPkIwmT~RlI_l4vfcU1wY{IO_>1lMi|zP} z?f8rB>&L(Cc>l3|ol7@=u^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Z zu^oT09e=SMf3Y2Zu^oTe>^Fb09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Z zu^oT09e=SMf3Y2Zu^oT0{kZq;o1lMi|zQ!b>I6-wmW~x zww-PGOSU_I$@WXvIsE!Ki}9Ci+Zm6)WZUiz_)E6!PJ+K=+wMB}OSbI}g}-Fm?q>K) zw(ZV`zhv9)lK4xu?T(7SWZUk(_)E6!PL020+wSW4OSbJD0DsB0y<6Zf*|v8U{3YA= zE`+~i+upJ8mu%a+8~&2*&R?$W{eFnQ*p9#0j=$KBzu1ny*p9#0j=$KBzu1ny*p9#0 zj=$KBzijrKzZ~bx&R=ZDUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6v1d z-e0n9U&HuIw(Z$~zhv8|Mqx)v3;F8H-E7mf3Y2Zu^oT0 z9e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Z+3Yueu^oT0 z9e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT0{kRwJ zo?pk$+wJ&^{rdQe?f8rB_>1lM%XQ!TOSU_I$+n$s_)E4sf5~>|FWI&;9)HQU-5v0k zY}=g#f62Dpb?}#L+Z_sj$+q3i@Rw}coezJ>w%sN1mu%Y|6@SUL-F@+wY}=h0f62Dp z)$x~X+dBaMl5Kmpz+bX$?=1LBw(VUAf62DJW8p8^ws$xDCEK09T-*Eo5Pz{9f3Y2Z zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oTe>^FZo&XJwJ*p9#0j=$KBzu1ny*p9#0 zj=$KBzu1ny*p9#0j=$KBzu1nyT=%`dWZS-m@t17dvjKm}wmoz3mu%a!41dYCJtOg# zY}>OJf62Bz)A5&V+gX9XWZTXl{3Y9Vw&5??wlfod$+n%v_)E6!jK^QHZFdL!CEIo< z!C$g%cOCpC+jfV-U$Sj?GyEmnoxfze^OtPf9Tk7ccIPkI{=xeDEI#J@`rm(aZSUtR z{$e}+V*C2>?>OE+Y+vWf&0lQCUu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0 z$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y?V`^{f$$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0 z$6sv6Uu?%;Y{y@0$6sv6Uu?%;Y{y@0$6sv6Uu-|_&AaE{@$+^&{$jsA{$e}+VmtnF z-Jg2sgX^sLefj&3vfcShw(V@gU$Wi#OSU_I$+n&G_)E5L`|)?Z@Q2pt{CiySmu%ae z1b@l4-F5JnY}*|Qf62Dp&G46O+no=8$+q1k@t17d9Tk7cw%vX4mu%ae8h^>Q-PQ4z zY}-2k{*rBbx4>VrZSO4jOSbJ@2!F}8y<_1o*|v8#{3Y9+zg*k<{Sbe#9e=SMf3Y2Z zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Z+3YueInIflzu1ny*p9#0j=$KBzu1ny*p9#0 zj=$KBzu1ny*p9#0j=$KBzg+jdzhv9KhVhqd+p__G$+kUn@Rw}cvkZU9wml>9mu%a! z7k|mNJ=5`*Y};9Zzhv9aAp9lUcDCU!*|swif62C;#rR9M?Tp7?vTb(<{3Y9VC&6E` zZFe2~CEK09WZUj$_)E4sf5~>|FWI&`D*lq~x39l<;(O!oo>+J4?>p}F+5Y;nm){nD zxwiN76@RgP{rKA+{Ab;N{yH~q{$f8Lf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Z zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e>&EH-E7mf3Y2Zu^oT09e=SMf3Y2Z zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT09e=SMf3Y2Zu^oT0{kT`}o}b6h+wJ&^ z{rdQe?fA=ef9j!+UH0-c@t17hyw0C>K3)C}KK}lrY}?s}zht}fmuz?bl5IQV@t16O z{*rCGli)Aew!04gl5M*~;V;>?yBYqHZM*Z~FWI)cB>s|ZyQAVS*|xhc{*rCGQ{yk$ zw!1q1l5Kkjz+bX$?-uw=w(Xq-f62DJ3*j%>ws$Q2CENDyhQDOH^OtLTzu)06w&O3h z<1e=3FSg?^w&O3h<1e=3FSg?^w&O3h<1e=3FPr`5FUL8s^B3Fk7u)d{+wm9M@fX|i z7u)d{+wm9M@fX|i7u)d{+wm9M@t5nq_m^zj*D(H)ZF@H0FWI(d4*rsDdzRrZ*|ujS z{*rBb_Tn$uwr4v2l5IOH@Rw}c8HB%N+s-!pCEIpp;xE~@vlxHLww>|#OSbLqfWKth z?j-n2w(YKizht}fmu%bJ41dXX=P%jr{3YAt?)tLzIsgB2!(Xy}>!10>XMgwloLl@Q z+rRU(FMQVbt}Nf7VkEz4=f7;u-?}zw{?f8rB_>1lMi|zP}?f8rB z_>1lMi|zP}?f8rB_>1lM%Vxj%%kiAw`HSuNi|zP}?f8rB_>1lMi|zP}?f8rB_>1lM zi|zP}?f8rB_{(+Q`%AX%YZ!mYwmlp0mu%ZJ2Y<=7J9Vr<7^Y{z13$6{>9 zVr<7^Y{z13$6{>9Vr<7^Y{z13$6{>9Vr<7^Y{z13$6{>9Vr<7^Y{z13$6_}7&0=iF zVr<7^Y{z13$6{>9Vr<7^Y{z13$6{>9Vr<7^Y{z13$6{>9Vr<7^Y{z13$6{>9Vr<7^ zY{z13$6{>9Vr)O|=!cKke*E}u$6~HO|EY(5|5qM<)XuH z#n_I;*p9{6j>XuH#n_I;*p9{6j>T;Do5dW@@twukj>XuH#n_I;*p9{6j>XuH#n_I; z*p9{6j>XuH#n_I;*p9_q_r1kr+rEaem~7j#0gK7DJ#(;_Y}>O8i^;Y@n;Ayph=4dOoNLlz zUXvF8nzUHhq{YQ1Ek-tJ@v=#aolROCE!%&&o@Mzw!_+1%zBXyGwn>Y-O$Gcv;mo$?*e!U0V`};X&m;c}UO#q1tv*WK;d&Mkj`R<`Y4h}mVkGrMftJr=Xec4v0k zwtF{bmuS+1ZZS*^b%Sj@j9c+1ZZS*^b%Sj@j9c+1ZZS z*^b%Sj@j9c*mLK6QQ0Ex&&%+t2&Zmp|u= z*5}-==KGJkakhW!*{}LD-?={Lc0H?aW|wXAJ?SQ{*V^xl@6UnRO?SQ{H)%1u zNsHM{TFh?JVs?`jvzxS--K53rhV9MlCM{++X)(J=i`h+D%x=F57mW z$LzBGk@b%7&UjD2?6Pg|ADCUX?Y#!G%eK8QVRqTJ_b|*Z+xC8k*=5__8!@|V+xsYH zmu-8`#q6?e@6VWBw(Y$fv&*)*|ujoW|wU{ zD=@ok+Zlw}W!ug+%r4t@W@2{P?#wRRcE)3N*|xg_W|!^G?6Pfl9n3D=h_V~~FJ+d&nY}@yI#q1_6 zW;bauyGe`LO?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53r zCM{++X)(J=i`h+D%x>7;%x=?SQ{H)%1uY}@w$!|bwce?}Fv z%eMXAxZ@qN-MN~{9lzd#?ftzUv&(<(H$D4bJ@0MnbG|!acG*7q)^C0Ii`M7dVs_a+ zbD7#q5|ao^C3j=V==pIcV?GuyLV%D*|z&UW|!^G?6Pg|ADCUX z?Y#!G%eK8QVRqTJ_b|*Z+xC8k*=5__8!@|V+xsYHmu-8`#q6?e@6VWBw(Y$fv&*)< z?_+k^?#%Am-oJJ+JKHfk+c7)aF+1BaJKHfk+c7)aF+1BaJKHfk+c7)aF}uxvGrQv% zx-&c5F+1BaJKHfk+c7)aF+1BaJKHfk+c7)aF+1BaJKHfk+cCTAzBjvU+t)B=mu-7C zV0PKIXAWkUZF`nscG*|ujoW|wU{D=@ok+Zlw}W!ug+%r4t@W@2{P z?#wRRcE)3N*|xg_W|!^G?6N)XK%cihafkZxSs%r4vZ`}Z)rY}=pD z#q6?e-&YN@%eH+Fe9UgrVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(KO+xM%->?SQ{ zH)%1uNsHM{TFh?JVs_cK?-hsHW!wIYDrT2$`@M0;`)0e#HIqAjy$9R75ny)t&;6-i z`fncoh4ne#$uPTYKk_Hn@3VW_^JG0BSy?}<#EY{%?u$Lws!>}<#E zY{%?u$Lws!>}<#EY{%?2`_1f*=i<)nY{%?u$Lws!>}<#EY{%?u$Lws!>}<#EY{%?u z$Lws!>}<#EuKV8XvTa|(m|eE**?`$)+nza?UAFC6hS_D?o{^Ycw(Z%A*=5_F>6l%% z?X1A;vOUhAx316m+{Wy(ZD$*1mu)*UF}rMcW|wU{<1xEz+uZ@P%k~57?>hS3`1_95 zedZmXP50a{F8UR@Y~nt++udwe(Br)+zY;Pea`J_-roLi z__DYE$$#th>vL|`bMj_(`Rg{{!|bwczkd(2%eMXbT+A-p<3H#3-^1*(ZGUe9W;bau zyGe`LO*IUgV0M!hvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS-UAFD-HNfm9EoL`qF}q2N z*-cu^Zqj0Q**>|>%;U$-cO%R$+xBNvF}rNr?~Oa&P22sfncVT~J=oqo0kg}0?%RI+ zSugm3^*R6d!R)gAv2T9Y3x8^T&Mjt_?I-^`kH6?M*5}+}cGB`1Hp&AUij(jb8c62`?Imx{?YS)@CBdvf*-ux z&DOK;W_H;&-^1*(ZNGmHv&**q`CQB{+v7jy_us?pvTff-8MB+TnBAns>?SQ{H)%1u zNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=7yKLM0C}x*!d(Xw}vTg6rm|eE*y&SX4w!QCTcG>RC?%LkJ zZZJFBF+1BaJKHfk+c7)aF+1BaJKHfk+c7)aF+1BaJKHh4&3-exvL`~yKH~{d9QuZudUCyUCr&!#%B9nKmM}M z{Gs(Zx9fR!GrMe??_qY?w%@;p*=5`Qd@g2}ZTtRvm|eE*@7KWWCM{++X)(J=i`h+D z%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++ zX)(J=i`h+D%x=?SQ{H)%1uY}@yW!|bwce?}Fv%eMXAxZ|C--D#W29lzd#?cFIbyZq<=$jcsk(NC<; z`EH8YW&7N}`FoE%vOeb)v&;4!pY@g(ziWNYEoPVPC#<{tv7KAYF58{iW!v6AFuQEq zdkton?au77-I-ms?fnk3%eK8YVs_cK_fgC)+xDJ|*=5__pE0{^+j}`?mu-9B$LzA* znccO$e=T5kwqtg-V|KPYmXLhz@ zcD7@7wqtg-V|KP?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=uXt zV0$+W%r5`ApZO>L&qw})^*P^pF}rNv{>-<$_?_!>ZZW%TKkFZU>PtUoeazl-?SQ{H)%1uNsHM{TFh?JVs?`j zvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{ zTFh?JVs?`jvzxS--K53rCM{++X)(KO+uv(|*-cu^Zqj0QlNPg^w3ywb#q6?e-zyHY z%eMU)Rm?8i_Iu-wcjpZj;d{;$9Id)McDm&WX}ed4=6^`&37 zKIay*%l2LW{ySdw?)5phm|eCnTkjs97w;dKUAFDL2D8g{XLi}{%r4vZeuvp*yED6N z+xsYHmu-8`#q6?e@6VWBw(Y$fv&*)}<#EY{%?u$Lws!>}<#E zY{%?u$Lws!>}<#EY{%?u$Lu!y&Fqe6$Ik3*$Lws!>}<#EY{%?u$Lws!>}<#EY{%?u z$Lws!>}<#EY{%@b``+xbZC}HfUAFDnfZ1i+o;jFZw(VJl*=5_Fk(gb!JG0BSJ<~C} zYvL}TeRkP?^e?~TWgqvt>sgH1W&7*@ z{L^3h+v{`wbysuyv$5HJ)r?SQ{H)%1uVS6*X zNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=@4@zNC750Qb3gmrKKZ4OuFv_7j@f1V+JEyMFZ+u1 zIk%WywlDqZSHJu(uFtu}?6Up!^-lA_c(1|ivfY_owmY-Sw!PnBcG>RCF5C7#irHn` z-g7a#Y}@-YW|wVyFURb%ZSVV-UA8;3ySDd#4>3F2F+1BaJKHfk+c7)aF+1BaJKHfk z+c7)aF+1BaJKHh4&3-ex<9V<%JKHfk+c7)aF+1BaJKHfk+c7)aF+1BaJKHfk+c7)a zF+1BayX(F;yKLLnFlLu+dp2Np*|uj6W|wVymSJ|;wr3<}m+j8%vTe_F%r4uV*=75U z>+g(xoBX}8*?#JO_*<`dczw?2AivKp+c$pj)h~bZ`kY(LF5AEL?4NwucdpO5UCr&! z#%B9TKlNQN{gm}Nx9j?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--LSox-K53rCM{++ zX)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs_cK?-hsHW!wIY zDrT2$`@M0;JNjXE**23qng`pvt6+BdYrXr4zyGrLuh04JkJ)AWjJLh|<{So`_j&4}o!RBD+urXmyKHx6mu-6=#q6?e z@41*=w(b2Hv&*)w)cI^F58{iUEBM=TbP~gn4RsIo$Z*N?UelGrMftGaa+b z_BcbHFMn@rwjcc8-t@|ktk3y>vvs!p+;IkF`{6hI)+;{dzqp=lm|eCn`759Q^3PqL z^RK&_+n?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++ zX)(J=i`h+D%x=?SQ{H)%1uY}@yW!|bwce?}Fv%eMXAxZ{1ky>}D5B~Rg>Y?_2 zhuP(?yED6N+xsYHmu-8`#q6?e@6VWBwmY-Sw!QCTcG>RC?%Lk}eZlN($Lws!>}<#E zY{%?u$Lws!>}<#EY{%?u$Lws!>}<#EHv7%&j<4ID+1ZZS*^b%Sj@j9c+1ZZS*^b%S zj@j9c+1ZZS*^b%Sj@j9c*E&OzKIe9Q9pB6@+va?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J= zi`h+D%x=6xm+j8%vTg69 zm|eE*Jr}dfw!J@NcG>RCF553(@A_XA@B5ftwmY-Cw)cMrFgx2ZJKHfk+c7)aF+1Ba zJKHfk+c7)aF+1BaJKHfk+cCS%elxq{YjJ0Gwqtg-V|KP?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(KDdo#O9 zi`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++ zX)(J=i`iw{zE>P(mu>qqs+e82?f1qVPSD<+n#mo%-h=Jkb}+mA=RW!N|MHb@SfBGd z5N4O{J0E`ftA2WY&Mjt_?fc&S!>|6$^*OhgUAB*{cgEMod*gZ^eeA*iK2JT=-bXRJ z{B_%VE@qc)dw<64vfY_owmY-Sc4v0i_Wu8_n4RsIo$Z*N?UzWznR_f^|doQ+c7)aF+1BaJKHfk+c7)aF+1BaJKHfk+c7)aF+1Ba zJKHh4>%KR;Yo}HiYtM7j-p1tomo~PM9_8-6e(I?mE z++udwKK)<(@T;G>KIay*%l5Ng^o&=1&ib6&)!crcUABMi7e4yRZ&{ynyT0CTW|wXA zJ?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rhV9MlCM{++X)(J=i`h+D z%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(KO z+xLpY?6PftMisNmw*B6?!xY*(Su?rg*L$$NI}m1<|J;v#@{?ZmN$Ycdx5DhQ{nEGp z@T>!dLKQubBoz!+un0AyKLM0GiI0V&g`IY{%?u$Lws!>}<#EY{%?u$Lws!>}<#EY{%?u$Lws!>^A$&?2fOQo!Qxr z+1ZZS*^b%Sj@j9c+1ZZS*^b%Sj@j9c+1ZZS*^b%Sj@e!Jz1d~EGrMeeW|wVy=3sW& z9?!TRTA%ZC53|emlYi~~kA24aoLhdMUA7k?6PftzXoPE zX)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J= zi`h+D%x=}<#EY{%?u$Lws!>}<#EY{%?u z$Lws!>}<#EY{%?u$Lu!y&Fqe^gPqygj@j9c+1ZZS*^b%Sj@j9c+1ZZS*^b%Sj@j9c z+1ZZS*^b#=_r2L=yED6NcV?IEi{AI~kH2hv&d(>zF5BPy!Z*C;L+f*HF}rNP{Qr6X zV{crabBoz!`;PB=<)c5lKIe8dw?7-3?f>#i&-=VzSf6vdzAkQNmu>Ss%r4vZ`}Z)r zY}=pD#q6>@{&Rl+J?SQ{H)%1uNsHM{ zTFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{ zH)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?&i|cc4F}rM^yWX8YGv1#uyKHx6m+j8%vfY{8wY~pu zirLwY+1ZZS*^b%Sj@j9c+1ZZS*^b%Sj@j9c+1ZZS*^b$5_M6!q|8DQh&UVbscFfLp z%+7Yq&UVbscFfLp%+7Yq&UVbscFfLp%+7Yq?z->IF58{iW&3OE?~MI`{JpW+erP>! zJ{r#)%r4vC_#1C{&4<_L{4B%lviH3`8_3!%4 z?6PgXhuLM@e*Ye3mu>s=xtLwH?fdUxcG?SQ{H)%1uNsHM{ zTFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=?SQ{ zH)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=x4SYmdEkea`Qgm|eCn`O|NB&F8Jpxy9_Vef>ZA_{YC`eaEv^wy$4b+i!}$M`nHfzyJ7p&-VNO()T>^qw8~iHmqmP`&#?C|LWr(|AO^7 zx0qf2y3hEO|LQfLu|DT^HNVn+-4FlD6QBPvzxu@IpWF5C@6GJ;*KNLs**(yf-@k|1 zW!wIIE@qeQ@t^bi?_qY?w(n<(*-cu^Zqj0QlNPg^w3ywb#q1_6W;bauyGe`LO?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D z%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++ zX)(J=i`h+D%x=;B&1Q1PulHbkcPq>;|G6Lc z&Hwppp0PgXcUR0V+duUWKmPG&uFtu}?6UpvfAT#~{L%WHTg)!o*R6N`=Zn4RsIo$Z*N?U}<#EY{%?u$Lws!>}<#EY{%?u$Lws!>}<#EY{%?u$Lws!?5_J$4}IeL z8hpn3oWCyD*YH0*zSgpR`~#1C@t3X7xy9_VeeYL)&lA6~KIay*%l2!(?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53rCM{++X)(J=i`h+D z%x=?SQ{H)%1uVS6*XNsHM{TFh?JVs?`jvzxS--K53rCM{++ zX)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS--K53r zCM{-{ZTntvm|eE*&!}Q{*|y&scX&yAk8LJ*{CW?zcf-Q$@}K(~f9hi&|DE+YzY}A2 z+5YrPzUPTwUY~P|*=76Hzy8P}<#EY{%?u z$Lws!>}<#EY{%?u$Lws!>}<#EY{%?u$Lu!y&FqeUuXbi_WAGon~#6i`kdSK@7c}lvTeSH*=5^){~l(SZTs`Nm|eE* z`|n|P*|zTwirGzC%x=?SQ{H)%1uNsHM{TFh?JVs?`jvzxS- z-K53rCM{++X)(J=i`h+D%x=?SQ{H)%1uNsHM{TFh?J zVs?`jvzxS--K53rCM{++X)(J=i`h+D%x=%3*fdHj_J=2iv=cVRrdz zee$RLcTYTfea`RNm|eDC^^=c$@n2h?bBoz!`}?n5zyEHz-MPi=uI>H*M$FE3%+7Yq z&UVbscFfLp%+7Yq&UVbscFfLp%+7Yq&UVahv)|0__;+PzcD7@7wqtg-V|KPhu;5|_k783uh02w4YSMk;rIRdFMi4ToZHph z{%mZv?|$Ob{?dEb=iIJ;cW!2vZSy_MF5C9|_b|I`+n>+H?6Pg&e-E?Ew*CDYnBAns z>?SQ{H)%1uNsHM{TFkDs?~U(`fZ0u2%x=W0O@{A%?bmb8`#jI*zOOy!EY5CWadr!fvs+l4-NNGR78Yl> zusFMg#n~+^&Te6Gb_=qVhx3D<7g~iz|EY5CWadr!fvs+l4-NNGR78Yl> zusFMg#n~+^&Te6Gb_1R}Nc4pJ} z#$7zj#o3unPVT~dEc;P+hO_hE^``ee@1;L^yskGq&d%&--uup%zu_`9a z;_OwE2B zZhkh_>{tB8TVML><8{p**TapoGn@P#&dzN5{ym(X+4S?dI6JfH_wV8C%%=ao2F`9_ zadr!fvs+l4-NNGR78Ylh*jMX!7~t#{7H7AxIJ=qVhx3D<7g~iz|EY5CWadr!fvs+l4-NNGR z78Yl>usFMg#n~+^&Te6Gb_ zusFMg#n~+^&Te6Gb_=qVhx3D<7g~iz|EY5CWadr!fvs+l4-NNGR z78Yk`HvM-EaCQrevs+l4-NNGR78Yl>usA!j>37B9?98U0QN`JrP2U@LaW)rcXEr&x z3-ht;M?D+P&VSdle)Jb#e$Vl`b^|!O+w4dGE}UJ{^bqYdOxYR=qVhx3D<7g~iz|EY5CWadr!fvs+l4-NNGR z78Yl>usFMg#n~+^&Te6Gb_=qVhx3D<7g~iz|EY5CWadr!fvs+l4-NNGR z78Yl>usFMg#n~+^&Te6Gb_1R}N zc4pJ}#$EhQ@&w7rUH-n0Wk2fVaCW!ZoL$Rtb|?9bv%9=cXU?wWIJ=hP>{^bqYdOxYR+d9@tR)pFcc%kfz)$6>V`Z`E>KRm<^HEyqc<91qoU+*8Z( zO)bYUwH&Y1a$Hi&@kcGk8MPcw)NY$fa$HQy@h>O&jdN)^o~7lum6qdET8=|$Io_n@xRRFRM_P^(X*nLG<+zWQ z<2zc8<7hcvqvg1amg6s4j@`_VeX^INQ%HXFs=`{oHc)bIaM!EoVQsoc-K#_H)bG&n;&^xBU3? z_g$|4mLKoS&3^er`GY zx#jHVmb0H*&VFt=`?=-p=a#ddTh4xNIs3Wg?B|xVpIgp;ZaMq8 z_H)bG&n;&^x19ala`tn}+0QL!KewFy+;aAF%h}H@XFs=`{oHc)bIaM!EoVQsoc-K# z_H)bG&n;&^x19ala`tn}+0QL!KewFy+;aAF%h}H@XFs=`{oHc)bIaM!EoVQsoc-K# z_H)bG&n;&^x19ala`tn}+0QL!KewFy+;aAF%h}H@XFs=`{oHc)bIaM!EoVQsoc-K# z_H)bG&n;&^x19al^2=^K+fSE&?ks0Nx4)nL+;aAF%h}H@XFs=`{oHc)^GSZQpD&;1 z*?w+0`?=-p=a#ddTh4xN`SIuf=jHut`SE$*?B|xVpIgp;ZaMq8!7-0`m*2ltoX@n`S&tULbF9bbCKe{siG-SL<2c+K%=zxJs|7drm` zqY~ZxKkT#1j{E4o{>UBA`q5u}`8~($nq{k*{mgsc`SKSWuWOdwX7&$W_Rg2z@$%a& z8_w*95AG8mzs<7e%s%1Zo+6fQx3KKIg=OvfmTkJQ?9_#2vo0+Abz#}E3(KxuST^p$vUeAj?Ypq- z;Du!qFD(0bVcE(H%Whs+HuS&BEeu z78aMYuy`G_PdYa2)3jr8JZ7Krm)`mEPd{GQyBptQ_C4SD&X@nr@w#SlKW2aHli&67 z-#cE{?7_S|cY=o>f6C(zKQ8tkU)YOVSe=5|H@)|HFa62mb^Z6^6wJQ*Z{PdUuRmVb zEKb4f*ZlguFMa*-x@K_-W?%6e_rCO%$LpHKDVY88gL}1DoWjE56c!ezu&_9Vg~cf> zEKb4fSA?$vPGMnj3JZ%EKXrzaS98IQ&?D>!ouPd z78a+lusDT<#VIT-PGMnj3JZ%<7}=X`y0AEfg~cf>EKXrzaS98IQ&?D>!ouPd78a+l zusDT<#VIT-PGMnj3JZ%EKXrzaSDljjdm7JVPSC! z3yV`&Se(Mb;uIDZr(pK7OJA$615Uy0qrZ9YOTX-RUGG?&g4vh-zxTfME05PTi&HRr z_q+exOJ8ujuGxcmY1;l@@f&YF_VHV9u{Z_)y~RJ=IEBmiAY40z^t}g{zwh!fm_2g} zWzc(WnEl{?@&k|k@$tH5aSCRC;jtfh?D(@= zEKb4fI}Yw$VsQ!!i&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+l zusDT<#VIT-PGMnj3JZ%EKXr$Z=Axy;uIDZr?9X% zg@wf_EG$l8VQ~rzi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+l zusDT<#VIT-PGMnj3JZ%$$0 z>H8lp-}i9&7%tyeaP1V*&nVy&%%<->xcuKvfA5)7@ZbC1Pk!Q~zk9r{zYaJBv!DET zKjG159ItB@r(pJ#|L7AQ{hH%-&Egcye#W~$;nB}JUe_#6!R&Jm?)hSI3JZ%EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%< zSXi9G!r~Mb7N@YVIE979DU9rmQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%< zFniCj-R{?Z!zq~kz`=c3EKb4f=l=6gc=QX7*Y$?PDVY7b@A+3B{ifq}%^u97X-hxn z-QRrd&2PTN;uJpi@BLW+fKxD=zW)KIU^e~y1y14ey#m)xA^k1`oPyc(GYU8bv*~*e zE+6ORYi9P$DVY8EZ~xC;^0ec1{a)Y{%)a1Hz3L^Ocf77yoPyaGe!;6=@)wTRHH%X) z`}&u>>LtgY-C}VHX5Vmd-!B%Yu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT< z#VIT-PGMnj3JZ%EKXrzaS98IQyAGBr?9X%g@wf_ zEG$l8VQ~rzi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT< z#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!ouPd78a+l zusDT<#VIT-PGMnj3JZ%H%?(;aS98IQ&?D>!ouPd78a+lusDT< z#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!ouPd78a+l zus8*?$Nzrh6SaqM3T8j$*WUBUvyRvGCc`P1{qq0kJ&(NRcwMtNg^yu> z*8@($>@VE)z{9_KyslZCg4vh-M-M#wmB;Iv#VMG5EKXrzaS98I zQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%EKXrzaS98I zQ&?D>!ouPd78a+lusDT<#VIT-P9d>hroN6-SXi9G!r~Mb7N@YVIE979DVTly_!@kr zz79AAvyc484?O(%@w(naI0dusfAs?o|KahvW^oE;-|~GAKK%2?>zX~7htr09?BSm~ zcGl0`VvoIf;}rb&etGZ@I0dum`yX%$X4B7K;1tZJ-~WJ9Fnjsk{r=sWI0dt3PT}(J z=~t&<_RJ}mO~3OHr(ibyE(4r`+4M6CI0dt>3*UQi`C47B9kXXn!R)K<`|A&V-SN7< zCUFX8zvRt7{?Jz)uWJ^kVD{bb`0EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%!ouPd78a+lusDT<#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!ouPd78a*q_W0iq{fhPlPQmQ=|H_X)^b^PH zdgI^}%s%y>{`f=BI9}H*PQmOGAOFdRo^rgd*~`b3w%*_Q<-0!b?Z@kyJ$B)ZQ}ExL z`~yzGZ2JBOoPyc(^A|V;v+4Ig;1tYWcDH}GCQiZZnNu)(<`gdf?tOI%X3w00*)ykL zHvP^+oPyc(y9{s&X4B6o;1tZJ?>)GDT`$+9*)ykL_KA-_`NdB@Uf0(zPQmP3?|$lw z|K9PsW^oE;zwmRP`r^lr*ENe%F#D-5e(H;lKfA@^6wE&3;66hvPGMnj3JZ%EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3L|^t z6c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%>= zoWjE56c!ezu&_9Vg~cf>EKb4f@xNdE9DN;d3TA)z;Qml7PQmQA{HITS@pm1s>)nD= zF#G&_p7!F;IbPT7<>N}5>=`fqu4A`+*DdzgZ#PcCe{b>+I0dum`yX%$X4B7K;1tYW z{@lO+0jFR#?PHvR*)ykL_RJ}mJ#z||f1kcO1+!;P!R(n+Fq^(+I0dumcOK#t%%zc(WnEm>LdxKbEKXrzaS98IQ&?D>!pPn@g@wf_EG$l8VQ~rz zi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj z3JZ%X4Cf`T;8wCJ!JOGDVTlFKl#lUz5jS!-EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3TBW0{h|-6 zSK}1SKK(!V?HApBysrB?PQmO4U-jEBdcs%VW^oE;fA0tXj~D&X@w)zdFCSOhIPZJW zmwwI%kJmMO?4cW{;J-Kd2b_Z0^!*Pw1+(erFK`NG)9-)4DVR-r6Q^J{?O2?G*|d*w z3TDrog4r{tVD`)@T>icH>J-eLIR&$4PQh&Yn&A}8ruPD;U^czSI0dumcOK#t%%E!%usDT<#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!pPn@g@wf_EG$l8VQ~rzi&I!woWjE5 z6c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%Z6kNo^Y z4?KRnu6s33!R%|^|Ih=kKVH`?PQmO8zV!1S_}t@l%^u7HX^TAgbH9A_^YotX~*Ie%%**e zQ!snx6wIDE1+!;P;qvdYSEpe1@-e*ncwJv-$LIE*%XMb<%qf^nUo)J7+4NrE6wIdg z7^h(N%qf^nzw;2MU^e|O1Dt}{^fL-L1+(dU4=&e1dN0nLg8$xkJoY#5f6wu{evfeq zW?%MizUBU}JYLr8x&Nn**ENe%F#8h+_g1kug@wf_ zEG$l8VQ~rzi&I!woPyamhpz)pVPSC!3yV`&Se(Mb;uIDZr?9X%g@wf_EG$l8VQ~rz zi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VL&JjZ;`y zoWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%< zSXi9G!r~Mb7N@YVIE979DJ(2bVPSC!3yV`&Se!y)e@6Wbr?9X%g@wf_EG$l8VQ~rz zi&HTBw~nvD+w^t7DVY7%1E zfA7KEpEkpr@4x5Izx8-sv&X);aSHx>lYhV|m`&gRfKxD=e*OZdVD|Fo{{0U)1+!_t z;S|iCIR&$6Z{ifprX7n@Fq`%^6#ftr(iaH3^)a|XHLOv z`kLVs%%=AOr(ia{$2bMEXHLOvx+ZZ7X4CIH#3`6fzsmrpU^e}X0#3nf`rd=fHFJ5E zm_2g}WznIbPQ+PQmOa{_N9V zc>LKd7N=nL$p`nTVsQ!!i&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd z78a+lusDT<#VIT-PGMnj3JZ%EKXrzaS98IQ&?D>!ouPd z78a+lus8*?$NzreGt?(>3TA)j;65N0r(pIM{@16!@K=x5b^paFnEmyC^64-9o#S=Q zUOukW?VtR!-*@!i@4LkwJK)AC`0q{r0jFR#eg6Ya!EE~Z3!H-4^!p!h3T7`m%fDL_ zr(ibiH=KgmGpArS?MH^Z2A~* z3TD&ic6`m=eYw`nrmq=J!EAaja0+JAdyG>sd*&3(rfU+XVD`)@m`%U)5T{@^{VoHX zg4y&l3OEI`>3a_@*H?Pq&YXh(-oN$@f91Y69k1(WA5OvSo1gKG_r3LaU9&g^vu}C+ zH{SQQ<8{sA6wJQzzHhwmYmV17i&HTB>Vx|_u{ec=#VIT-PGMnj3JZ%EKXrzaS9`Q;}jMar?9X%g@wf_EG$l8VQ~rzi&I!woWjE56c!ez zu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%N&HG44kr4Ih;`#$akUw6E&*`u%DI0gT`$v@x}%%<;uz$utbKYxK! zFnjrP|NaM@g4xR+^6%EfDVRNT3TD%O!zq|Oa|&kD-oz=GO*%a0+JA&nVy&%%<->xLk{uXP?EKb4fyTaE2r?9X%g@wf_EG$l8VQ~rzi&I!woWjE56c!ezu&_9V zg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3L|^t6c!ezu&_9Vg~cf> zEKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%~9{u)wY`F#EdS`Tcvp^LSmeI0dt>`HDZd_w~o?nmw3%Q&)c1TmSQa_kG9fnmu~;jZ^U7 zoBRV#!EE~e2b_Z0^z#=u1+(e*Kj0M1rrm;5Fni_{%$_*~vuVHK6wIDE1+!^y;uOrL z9g9;ioAxnI!ED;yI0dt5&*K!#o;iifzZ+hig4y&j;1tZJ&kd(wHhs--3TD%Lfm1M> z-ea7C*)ykLHeHiA1+!;P!R(n+Fq`g8oPyc(I}dRRX4CI7z$utbKcj$CFq^*j;Bwtw zo~dTfoPyb(xc`xRe&%>xKYwuwW?%WFNAG#<@w#Sl3T8j$&pvw3vyRs_i&HTBoO>R< z=lHW*EKb4fy$AQ8Se(Mb;uIDZr?9X%g@wf_EG$l8VQ~rzi&I!woWjE56c!ezu&_9V zg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%!ouPd78a+lusDT<#VIT-PGMnj3JZ%Jx@7a*DOxK>@VE)vU`5*cwMuXk1KWBd+&Mo(fi(gi#_`9 zjZ^U7oBRV#!EE~e2b_Z0^z#=u1+(e*Kj0M1rhS1^Fq?J@PQmP%Q!snx6wIdmhEp(m z<`m4Py@^vWn|3Tt!ED;cI0dt5cjFYyrag~SFni_{F8{uFbqZ$F$AD8Xn?5(3g4y&n z!zq|e?*&f5Y*vGq^EkhJc|Mp;*CbBC?3q(Ad*&3(rh5~oU^deRHDJ(2bVPSC! z3yV`&Se(Mb;uOq&U-&xU6c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT< z#VIT-PGMnj3JZ%!ouPd78a+lusDT<#VIT- zPGMnj3JZ%Uf1lwJTG<6@B8WdKkLVi*EM_e)ElSZzc={@oPyc({SP<=v+3tAa0+HG zf9~J^fKxDg`JLbX-I_QBvuR)86wIdGf>SVi<`m4HIR&$6zu^?jrd@dK%}3JpkoG1{ z!GCYsu{Z^@X&>Vh%%Yot>7K_am_2g}X4CIH#3`6fzsmrp zU^e}X0#3nf`rd=f{cySG&7L_0vv2(AXFm5wj@R{hfm1O1p-+1DbD#K>XWwFR3TB`2 zoM%7xGmqEx--}Z)`=Nt7{_GZuQ!x9-2m2(kIE979DJ(2bVPSC!3yV`&Se(Mb;uIDZ zr?9X%g@wf_EG$l8VQ~rzi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd z78a*4vNuj)VQ~rzi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+l zusDT<#VIT-PGMnj3JZ%~<+^49Q;1taM z*1`R*Se$~{CqDe_=RWy(UH2%Qg4r*5^PhR{R~@fw_VRJ1j`+vV`O%|C{pc$$0>H8mW3TD&KU*HtXrr-a7Q!tzQI!?jtnNu*E_61JCY}ze21+!;P!R(n+ zFq`%pPQh&2g*XMXX>Z~b%%&ZSQ!tzMF;2m3+TAz>vuV%c6wIDEh0DK}U7dp2^fBNR z%%;x`r(iaH&2S24(|dtaFq__EoPybO?cfy5rfU+XVD`)@m_2g}X4AciQ!tzEd7OgT zGpArSJ)>|6X4CIH#3`6fzsmrpU^e}X0#3nf`rd=fy>mHR%$_*~vp@UG|LxsxKVH{o z7EZzJ!{7NGcYpEmx@K_-X5aWXzT@s6K3>->PQmQsZ~l(Ek3YM`;uOq&$-%u+EKXrz zaS98IQ&?D>!ouPd78a*q_RGT80jIFAIE979DJ(2bVPSC!3yV`&Se(Mb;uIDZr?9X% zg@wf_EG$l8VQ~rzi&I!woWjE56c!ezFtRsJVPSC!3yV`&Se(Mb;uIDZr?9X%g@wf_ zEG$l8VQ~rzi&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ%LMr>Dwr@*d-wnF9d|$fcwKiGoPyb}{l)LN`x}neHH%X)`=oFG zt9L)`cwMuXk1KV#FMIPR{add*Uf1l=`)-_q|K8*ua0+JA_dnni%%-2ez$utbzyATJ zU^ew?oPycZ*KrDF&zyqUv@dW9X47uLDVRNT3TD&J;=lV~Htjc@g4whSaSCSB-oz=G zO*Yot>7K_am_2g}X45kYr(iZc z`)~?o)9*aQDVR;a%K)cfHvNnOPQh&Y-h<11mfp8Br{KT$TkrhmcfIj=U7v3_1+!oK zFaE_{-+H{RS)78|$3NpkcfIO(U9&g^vp;j!hwggE@w#Sl3TA));NB$`r?9X%g@wf_ zEG$l8VQ~rzi&HTB3*qa4Q&?D>!ouPd78a+lusDT<#VIT-PGMnj3JZ%>oYnBX>RdxgWX39?V^-bN#|y zU;CNwI$qa*@6pe0oPz(}b_-6yY}!M|&U$gW9@5UjDfsVA`wgdHHtj;3g4wh;aSCSB zj>RdMP5T(9U^eY;oPyc3=Wz;V&z!>L-=D5d!EE{%a0+JA=Y~@-o4#f^1+(eBz$utb z?=eonY`S)E3TD$aiBm9}u63M(*>n#b_vYWf+(Ty5y@^vWo9=m>g4r{tU^YFYa0+JA zvk#|W_RJ}mO~3OHr(ibyE(4r`+4M6CI0dumdk-%6WP0DuoPz(}Cp`Ye&wk4Bx;{5? z3TEH-+E+aLoyY5%#VMHm;9q~mv!C!Iw^^Km*=PLdE1rG#@w)zdaSCRib#V8J#VIT- zPGMnj3JZ%EKXrzaS98IQ&?D>!ouPd%pU*y+4t)_#wnQn z;vaj(v%m6qU7zzf1+#DXUtaO-Hyy8Q7N=nL^FHw9&;H`$blYhV|m`&gRfKxD=e*OZdU^e~!2b_Z0)KhT^X3w00+0?6X3T9JZ$0?XS za|&kDzQ8G%O}hoBU^eX`oPyc3vv3M#(|*G#m`%G7r(ibiO`L++v}17!X45{#DVR;W z8>e74?RlJn*)ykb`FEnLQ!tx82AqP~^ts^_%%-myPQh$?FK`NG(|e3lFq^I&oPybO zP2v>HrfVIiU^d-DI0dum-oz=GP4_%b!R(n+Fq@uHI0dum*@sgwd*&3(re`%y!EE}S zhd2eZ>31366wIcdQNSsfP2YQPxqmNbtl2ZCVD{_2=kMS7t;g&7?8YgWec~Vg;+;=D zUe_#6!R+h*)Gyun-N);i#VLFYd*?6RdHmTe7N=nLTMzDg#o`ne7N@YVIE979DJ(2b zVPSC!X1^_b9dHT@i&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+l zusDU0y>SW)i&I!woWjE56c!ezu&_9Vg~cf>EKXrzaS98IQ&?D>!ouPd78a+lusDT< z#VIT-P9d>x)OmqZSXi9G!r~Mb7N@YVIE979DVY84<7@CHeI0NLX20`K|I(e`f4r{G zZk&SIr#|#ccYgZux@K_-X5aYJ@4WNJj@LDNFn6X7^KEy&_)mZD@w#S@zH{Rg{P!mR zfKxD=zW)KIU^e~y1x~^2<Ds|5m`&Ft zPQh%t)^Q4E(>;V!Fq`g8oPybO&*K!#UY;dyJzm#m!10Xw*~@uhHa(+o3TD%@52s-E z%qf^n&uW~4*)ykLHvP^+oPyc(y9{s&AH#;9QNSsfP2YQPx!2Qsapn~K_x{1J-u=uw z{^8xvync^y3T8j|uRQOWUwFK(S)78|C;s5`p81sHbEKXrzaS98IQ&?D>g4sVjz6MYDq1)#sPQmQ2 zAKdSV#VMHmYd`2k_|wOE{L{DCqnF$` z1^>OtKj0M1rtg2iDVR+^e}Pjld--$!{s)|b+0^@R3TDrog4xtlaSCS7oPycZt8ofu zQ(wm^m`yw2*cT6^>mlt6oPz(}v|DfrX44+RDVR+=3#VWF>y4G5m_;)HVF~rd~qVFq{6p2wlT$`o2uMhS~IUp>z$im*3Io-?>HCFq^Ii zx`x@au3A6GKFq@udbPcoVIZ4+ro1VXP z4YTRFPS-G-&I`JR*>n!kHO!{-jjmxfottzGv*|phYnV;vJYB==S=YFD%C&2lO&rExHO!`a zo~~gwJxk~sX45l@u35pZ2ET+2Ycfx%q9mye=wWA2ZR1#_VVZc84&t|+4Osp=nrPk`h(f@9@8Jp zp7jT_>6)ZJm_6$cX45@He=wWwP5Oh`bkEZt%%*1v{lRQ{M$sS4re`1h!EAb_(jUyG zXEpu7Y&rwz4`$QZLVqxu&Mf+a*>o1tAIzpRmi}Nio!#^YvuFL`^6xI!{$MtJ4D<)H z>2sq$m`z_Z`h(f@UeF)RruUfsU^ZPl^ar!)nxsFNP1id8!ECyR=nrPoy-9yCo9=n~ zgW2>fp+A^S&nWtX+4StAKbTF=)Z=^A-g4Q}X4A8p{$Td3KbTEt3;n_DS${Bl)*sBK z-+MrRF#G!B-#=W=bvcC_S7A1Np91~CZ2I>t^ar!)`#tFoX4B_Je=vL2AIzTh2eaut zrazcH>knqrHA#Oko38ca9=b1G>**e%KltxW_a^zg6^#`+O z{lRQHW9biO)6Y2KAIzrjU8FylP2bx=e=vLb`9lBP4E@1u`rPObX3zSA*|Yv&HoeF6 z2eW7W!ECxF=?`YpwN8I9o9-d{gV}U%(jUyGd!GJaHa$z|4`$OdivD0WJ^SbnX45m3 z{$MsetLYDB(-}a2Fq_U6`h(eYX3-zarn8X#U^bnx^ar!)?501MJ?jsb?{QxHgW2>k z&>zgE&yD_IHhsvsDAIzp}lKx;eUF-A*v*{k9KbTGTCjG%| zy65Q+X4A8T{$Mseqv#K2)3cBMU^YEd=?`Ypvzq>3Hk|>-zZ<{#?^&8nXAAwo>{)*> zd)6P!rZblQVD_v(m`y*=Kz}fM`JR7&k1YMc>{)*>n?5)CgW0qGVD_v(m`(37{lRRy zcKG>Cv+0_oKbTF|I{m?Hx`*fwX4Ab%e=wWwdHRFd^emx2m`%?p`h(f@?4v)JP0v*N zgW2?~razcXX8`@dY&u)$4`$PuMSn1x&O-Ww*>uLzAIzq+oBm+-tUp|S?rH50X4A(& ze=wUqH~NFw^fjYDm`(2m{lRQ{kLeF))3rl?Fq^JP`h(eYtn%lAIzqElm1{f-ShMZv*}qve=wV#QS=A1>DfnrFq@vK^ar!)SxtX1o6Z3GgV}Vp z&>zgEGmHLUHl2m^2eavnr9YTWXE*)9>{)-f{4Dg^AIzqYf&O4NeQxvzv*~L_e=wWg z3;KiE^d8e6%%*FH{$Ms;lk^9(=~|~hm`(Q({lRRyH|Y;%(>+grFq@tw^ar!)8AX3E zo1T622eav!N`Ek$p4IdRv*`?=KbTEt3;n_D<;;5J@w)!rgX1i``R`PiJ?jr<(-}*D zFniV?%%1fJvuFLm>{)*>n?5)CgW0qGU^cxM{QQO4^d8e6%%*FH{$Ms;lk^9(=~|~h zm`(Q({lRRyH|Y;%(>+grFq@tw^ar!)8AX3Eo1T622eav!N`Ek$p4IdRv*`?=KbTEt z3;n@tIzgEYm)w8HeKuV2eauOqCc2T_a^{)*>n?5)CgW2>oJKl?%|4yda^j^>(%%=C4{$Ms;JM;&$>6)ZJm`&F@ z{lRRyhv*Mx)4fT5Fq`gq`h(f@ETKP`P0uL$gW2@#qd%BU&s6$@+4QWYKbTEt0R6#i zI$P)uX49EPe=wWQLi&T*bjH#j%%-!O{$Td3KU{ui+S(t?rjLRCU^abj^ar!)Yes)C zo8AlhgW2>R(;v*HYlr?|HeHkS2eau~r$3lY_YnQTY`Qn;4`$OnPk%6*o+b1Lv*{T{ ze=wV#ee?&j>6uD@Fq@v$^ar!)44^-lO=k=J!E8FS=nrPoSxA2{o6cDJgW0qGVD_v( zm_6$cX3zSA+4Q;5AIzq&8U4X*dN1e?X4892e=wV_9r}aWbWPG9%%*Fd{$MuUL-Yr; z>E5J2m`(RQ{lRQ{me3!}re_rW!EAc=(I3pFXDa={Y( zP4_1K!ECzc=?`YpvxNR&Ha(;04`$P|kN#jbJyYoqX4A8p{$Mtp0rUs6>1?4tm`!IE z{lRQH3+WGL(-}*DFq_V9`h(fC{&4x->T7>6n?45mgW2@C(I3pFuNnQpYp|PAIzp}o&I1p-9z*Tv+3TXKbTGTJpI9JdX~^1%%*1){lRQ{_R$~A zre`Ys!EAa~(;v*HGl2eJHk~c>2eawSqCc2TXCeK;Y&v7<4`$QZO@A-1oN$~R* z3wwMFH^1xJZ2B1J4`$QnMt?AyzGn0Xv+2E{KbTGLG5x`8x_0OfX45rEe=wV_b^3$Z zbPv%V%%*#j{$MuU^YjO^=~+U5Fq@uH^ar!)*++jco1Urk2eau}O@A<(&H(y@*>twh zAIzpRi~e9XorUxVv+0bbKbTEtH~qovS%0|v_g2>aU^aaW^ar!)bE7|)OzgE_n7`*HeEaP2eav#q(7KV*E;>dY`TZ&4`$Q7Nq;b#?s@uy+4L--KbTF=DEfoh z^z5TQm`%@A`h(f@tfoJhO=kf8!E8EP=nrPonMHpvo6bV|gV}V((jUyGvzz{4_N+fF zEd9Z3`WWaBX4B_Je=wWAX7mTM>Aj#om`(37{lRRycIXdg(=|zdFq^J*`h(eY578gY zrhAkAU^do1Rhh2eawfM}IJzo~iT)v*}q)e=wWQ0Q!U3bhgkR%%(Go z{$Mtph4crr>5Qd6m`!Il{lV;6f4KZN*w+4FHhm2A2eavOqd%BUUo-lH+4Nq}AIzrr znEqfkT|4v#v+0_oKbTF|I{m?Hx`*fwX4Ab%e=wWwdHRFd^emx2m`%?p`h(f@?4v)J zP0v*NgW2?~razcXX8`@dY&u)$4`$PuMSn1x&O-Ww*>uLzAIzq+oBm+-tUoL){lRSd z80ZgX)8|HiFq^(+^ar!)y`VpsP46-N!ECyA=nrPoHA#Oko33^GgV}Ts(I3pFdz1cP zHr?~|2eau}LVqxuo>BA%v+3DKe=wV#sq_c4=~+#GFq_T*`h(eYw$LBUrZbEFU^bnF z^ar!)jHN%AO=ma#!R%Roxcqln*ZyEOeGK#mv*~lAKbTElGx~$s^j^>(%%=C4{$Ms; zJM;&$>6)ZJm`&F@{lRRyhv*Mx)4fT5Fq`gq`h(f@ETKP`P0uL$gW2@#qd%BU&s6$@ z+4QWYKbTEt0R6#iI$P)uX49EPe=wWQLi&T*bjH#j%%-!O{$Td3KP)W$!EE{%=nrPo z=SF`po4#iB2eawDpg)*R?=k(sY`S*n4`$OfNq;b#u66o@*>n%lAIzqElm1{f-ShMZ zv*}qve=wV#QS=A1>DfnrFq@vK^ar!)SxtX1o6Z3GgV}Vp&>zgEGmHLUHl2m^2eavn zr9YTWXE*)9>{)-f{I}ZI{$MtJ4D<)H>2sq$m`z_Z`h(f@UeF)RruUfsU^ZPl^ar!) znxsFNP1id8!ECyR=nrPoy-9yCo9=n~gW2>fp+A^S&nWtX+4StAKbTF=RQiM2^sJ^o zm`!H@{lRQHTj&pF)0stoFq_Uo`h(eY#?l|mrn8&=VD_v(EG+%OZ2B1J4`$QnMt?Ay zzGn0Xv+2E{KbTGLG5x`8x_0OfX45rEe=wV_b^3$ZbPv%V%%*#j{$MuU^YjO^=~+U5 zFq@uH^ar!)*++jco1Urk2eau}O@A<(&H(y@*>twhAIzpRi~e9XorUxVv+0bbKbTEt zH~qovS$}x`8@_bz4`$QHKz}fsJ~#S<+4MD|KbTGL1^vNndXMQ3X4ADpe=wV_N&17? zbgk1L%%*#Y{$MuUoAd{>>7J)Qm`%?T`h(f@jG{l7P0v31gW2>ncb zAIzq+h5leRomun;v*|3PKbTEtEd9Z3I=kr)X3zS=!qOkirjLRCU^abj^ar!)Yes)C zo8AlhgW2>R(;v*HYlr?|HeHkS2eau~r$3lY_YnQTY`Qn;4`$OnPk%6*o+b1Lv*{T{ ze=wV#ee?&j>6uD@Fq@v$^ar!)44^-lO=k=J!E8FS=nrPoSxA2{o6cDJgV}U;(;v*9 z^@lI|qA!~JgW2>k&>zgE&yD_IHhsvsDAIzp}lKx;eUF-A* zv*{k9KbTGTCjG%|y65Q+X4A8T{$Mseqv#K2)3cBMU^YEd=?`Ypvzq>3Hk|?V2eavH zp+A^SXBPdzY&r|+4`$ODOMft%&TjgH*|Ywzu=EGB>0_Wjm`$G>{lRSdn$aK3ruTyW zU^czS^ar!)+Mz#~P1hv-!ECzL=?`YpJw$&no9<2egV}V?(;v*HX9@kmYdZyAJ%%*2G{lRQH1LzNC)7e6QFq_US`h(eY7SbQgrZblQU^boI^arzN{o$*h z{vXc$!EE{%=nrPo=SF`po4#iB2eawDpg)*R?=k(sY`S*n4`$OfNq;b#u66o@*>n%l zAIzqElm1{f-ShMZv*}qve=wV#QS=A1>DfnrFq@vK^ar!)SxtX1o6Z3GgV}Vp&>zgE zGmHLUHl2m^2eavnr9YTWXE*)9>{)+USo(w6^fAyM%%;zc{$MtJ&FBwi(|bXGFq__E z`h(eY?a&|0rfZV^U^ZRr^ar!)9-=>(P4_1K!ECzc=?`YpvxNR&Ha(;04`$P|kN#jb zJyYoqX4A8p{$Mtp0rUs6>1?4tm`!IE{lRQH3+WGL(-}*DFq_V9`h(fC{_uw1e*WAa z%%+cl{$MtJZuAGU>1#%RFq_^B`h(f@9@8JprfY}(U^ZQo^ar!)TBkplP4^J}!ECxW z=?`YpJx_lyo1P`~2eauJMSn1xo_+KOv+0>ie=wV#)$|9m=?tJhm`!I3{lRQHv*-_I z(^*J=Fq_U;`h(eYcGDlsp7n=?r9YTW9|QftZ2H{j4`$QXjQ(IYy%+Qcv*|siKbTF| z4*kJwx+dulX4AD!e=wWwA^L;abZ^oh%%*#u{$MseOXv?~(=&?xU^YGb=nrPoGnM{e zHa)B94`$ODKz}fs&KCNE*>q;nAIzq+kp5scow4)>v+3-nKbSr14}aq)K6CC5X4A(& ze=wUqH~NFw^fjYDm`(2m{lRQ{kLeF))3rl?Fq^JP`h(eYtrZ(AIzThhkx+ZPoMjP+4M2cAIzrD zjs9RZea+|(X488?e=wWgWBP;HbnVa|%%*FS{$Ms;>+}b+=^mm#m`(R4{lRRy=jjh- z)3b#BU^YFY=nrPovyc8@Ha%164`$P|n*LxmodNU*v*~Q1KbTEt7X86&It%F!X44r< ze=wWQZu*1Sv;MHK^ar!)W1v5nO`jY6!EE}P(I3pF_k#XlHoeF62eawgp+A^S*ChSH zY`WIz4`$OnM1L@w?oIlG*>um-AIzp_3H`xrdPdP7%%*1_{lRQ{rqUnGre`(%!E8DM z=nrPo*+PFXo6aoygV}Tz(jUyGGnW2fHl5w{2eW7W;eUJnljr_mHhm2A2eavOqd%BU zUo-lH+4Nq}AIzrrnEqfkT|4v#v+0_oKbTF|I{m?Hx`*fwX4Ab%e=wWwdHRFd^emx2 zm`%?p`h(f@?4v)JP0v*NgW2?~razcXX8`@dY&u)$4`$PuMSn1x&O-Ww*>uLzAIzq+ zoBm+-tUoL){lRSd80ZgX)8|HiFq^(+^ar!)y`VpsP46-N!ECyA=nrPoHA#Oko33^G zgV}Ts(I3pFdz1cPHr?~|2eau}LVqxuo>BA%v+3DKe=wV#sq_c4=~+#GFq_T*`h(eY zw$LBUrZbEFU^bnF^ar!)jHN%AO=ma#!R%Ro_?M1fHnsl#2eav8pg)*RpBw$bZ2Fqf zAIzrrg8pDOy~p$iv+3HQKbTF|B>ll`y4L9rX45@He=wWwP5Oh`bkEZt%%*1v{lRQ{ zM$sS4re`1h!EAb_(jUyGXEpu7Y&rwz4`$QZLVqxu&Mf+a*>o1tAIzpRmi}Nio!#^Y zvuFKbVd)QM)5k!6Fq=L%`h(f@HKRY6P45N$!EAbu=?`YpwL^a}o32UvgV}Vg(;v*H zdx-vEHr<=_2eav(r$3lY&l38B+4PK}KbTF=KKg^%^h~8cm`%@W`h(eY2GAeOrn80q zU^bmu^ar!)ETlh}O=m3q!E8Fa=?`Yl`okUnKl+2&^fAyM%%;zc{$MtJ&FBwi(|bXG zFq__E`h(eY?a&|0rfZV^U^ZRr^ar!)9-=>(P4_1K!ECzc=?`YpvxNR&Ha(;04`$P| zkN#jbJyYoqX4A8p{$Mtp0rUs6>1?4tm`!IE{lRQH3+WGL(-}*DFq_V9`h(fC{;;t0 z2eav8pg)*RpBw$bZ2FqfAIzrrg8pDOy~p$iv+3HQKbTF|B>ll`y4L9rX45@He=wWw zP5Oh`bkEZt%%*1v{lRQ{M$sS4re`1h!EAb_(jUyGXEpu7Y&rwz4`$QZLVqxu&Mf+a z*>o1tAIzpRmi}Nio!#^YvwuQ=xMTGX$KQL4O&`Nmf4Ie_&+V!|++x$$?5aQ9V$*wZ z)gNxL={>&c54YHK?OgSTTWq=}ulmC+HeKsi{oxjy?xCyxaEnd%=2d^V#io1ysz2Of z)3fBNKip!|GwP~8++x$S@2WrCV$(DAsz2Of)3f@jKip!|8F1AfZn5cXx#|zM*mP!H z^@m$*It#D*!!0(Qu~+@!7MsrQtNw6{{S*4bpU7VIhg)p=7_R!mEjE2_SN-7@o4#gO z{oxjy-ixdLaEndv@l}7g#incLsz2Of(=~b3A8xVfTEFTKx7c(KUG;}sY`QnE`ok?Y z-Sb!d;TD^oC0G677Mq??SN-7@o1T4F{oxjyo~c*;;TD^o)mQ!D7Msq1tNw6{O=rth zf4Ie_GwZ59++x#Nc-0?nvFVJx>JPWrbar3$hghylpU55`!*AU2ggfpqn?45m zgW2@C(I3pFuNnQpYp|PAIzp}o&I1p-9z*Tv+3TXKbTGT zJpI9JdX~^1%%*1){lRQ{_R$~Are`Ys!EAa~(;v*HGl2eJHk~c>2eawSqCc2TXCeK; zY&v7<4`$QZO@A2sq$m`z_Z`h(f@UeF)RruUfsU^ZPl^ar!) znxsFNP1id8!ECyR=nrPoy-9yCo9=n~gW2>fp+A^S&nWtX+4StAKbTF=RQiM2^sJ^o zm`!H@{lRQHTj&pF)0stoFq_Uo`h(eY#?l|mrn8&=VD_v(9N#N3_Xo4-W1v5nO`jY6 z!EE}P(I3pF_k#XlHoeF62eawgp+A^S*ChSHY`WIz4`$OnM1L@w?oIlG*>um-AIzp_ z3H`xrdPdP7%%*1_{lRQ{rqUnGre`(%!E8DM=nrPo*+PFXo6aoygV}Tz(jUyGGnW2f zHl5w{2eW7WVPWYHX4A(&e=wUqH~NFw^fjYDm`(2m{lRQ{kLeF))3rl?Fq^JP`h(eY zt(%%=C4{$Ms;JM;&$>6)ZJm`&F@{lRRy zhv*Mx)4fT5Fq`gq`h(f@ETKP`P0uL$gW2@#qd%BU&s6$@+4QWYKbTEt0R6#iI$P)u zX49EPe=wWQLi&T*bjH#j%%-!O{$Td3KODa+V(t%S)5k!6Fq=L%`h(f@HKRY6P45N$ z!EAbu=?`YpwL^a}o32UvgV}Vg(;v*Hdx-vEHr<=_2eav(r$3lY&l38B+4PK}KbTF= zKKg^%^h~8cm`%@W`h(eY2GAeOrn80qU^bmu^ar!)ETlh}O=m3q!E8Fa=?`Yl`oqG~ zAIzqYf&O4NeQxvzv*~L_e=wWg3;KiE^d8e6%%*FH{$Ms;lk^9(=~|~hm`(Q({lRRy zH|Y;%(>+grFq@tw^ar!)8AX3Eo1T622eav!N`Ek$p4IdRv*`?=KbTEt3;n@tIBA%v+3DKe=wV# zsq_c4=~+#GFq_T*`h(eYw$LBUrZbEFU^bnF^ar!)jHN%AO=ma#!R%RoSXlal+4M2c zAIzrDjs9RZea+|(X488?e=wWgWBP;HbnVa|%%*FS{$Ms;>+}b+=^mm#m`(R4{lRRy z=jjh-)3b#BU^YFY=nrPovyc8@Ha%164`$P|n*LxmodNU*v*~Q1KbTEt7X86&It%F! zX44rzgE_n7`*HeEaP z2eav#q(7KV*E;>dY`TZ&4`$Q7Nq;b#?s@uy+4L--KbTF=DEfoh^z5TQm`%@A`h(f@ ztfoJhO=kf8!E8EP=nrPonMHpvo6bV|gV}V((jUyGvzz{4_N+fFEd9Z3`WWaBX4B_J ze=wWAX7mTM>Aj#om`(37{lRRycIXdg(=|zdFq^J*`h(eY578gYrhAkAU^do1Rhh2eawfM}IJzo~iT)v*}q)e=wWQ0Q!U3bhgkR%%(Go{$Mtph4crr>5Qd6 zm`!Il{lV;6e>nbIopXOMn?45mgW2@C(I3pFuNnQpYp|P zAIzp}o&I1p-9z*Tv+3TXKbTGTJpI9JdX~^1%%*1){lRQ{_R$~Are`Ys!EAa~(;v*H zGl2eJHk~c>2eawSqCc2TXCeK;Y&v7<4`$QZO@A2sq$m`z_Z z`h(f@UeF)RruUfsU^ZPl^ar!)nxsFNP1id8!ECyR=nrPoy-9yCo9=n~gW2>fp+A^S z&nWtX+4StAKbTF=RQiM2^sJ^om`!H@{lRQHTj&pF)0stoFq_Uo`h(eY#?l|mrn8&= zVD_v(JpT<}I`;>&>0_Wjm`$G>{lRSdn$aK3ruTyWU^czS^ar!)+Mz#~P1hv-!ECzL z=?`YpJw$&no9<2egV}V?(;v*HX9@kmYdZyAJ%%*2G{lRQH1LzNC z)7e6QFq_US`h(eY7SbQgrZblQU^boI^arzN{b6D04`$QHKz}fsJ~#S<+4MD|KbTGL z1^vNndXMQ3X4ADpe=wV_N&17?bgk1L%%*#Y{$MuUoAd{>>7J)Qm`%?T`h(f@jG{l7 zP0v31gW2>ncbAIzq+h5leRomun;v*|3PKbTEtEd9Z3I=kr)X3zS= zzwr;gdhQQq)5k!6Fq=L%`h(f@HKRY6P45N$!EAbu=?`YpwL^a}o32UvgV}Vg(;v*H zdx-vEHr<=_2eav(r$3lY&l38B+4PK}KbTF=KKg^%^h~8cm`%@W`h(eY2GAeOrn80q zU^bmu^ar!)ETlh}O=m3q!E8Fa=?`Yl`oqG~AIzqYf&O4NeQxvzv*~L_e=wWg3;KiE z^d8e6%%*FH{$Ms;lk^9(=~|~hm`(Q({lRRyH|Y;%(>+grFq@tw^ar!)8AX3Eo1T62 z2eav!N`Ek$p4IdRv*`?=KbTEt3;n@tI( zP4_1K!ECzc=?`YpvxNR&Ha(;04`$P|kN#jbJyYoqX4A8p{$Mtp0rUs6>1?4tm`!IE z{lRQH3+WGL(-}*DFq_V9`h(fC{;;t02eav8pg)*RpBw$bZ2FqfAIzrrg8pDOy~p$i zv+3HQKbTF|B>ll`y4L9rX45@He=wWwP5Oh`bkEZt%%*1v{lRQ{M$sS4re`1h!EAb_ z(jUyGXEpu7Y&rwz4`$QZLVqxu&Mf+a*>o1tAIzpRmi}Nio!#^YvuFL`_|IR={lRSd z80ZgX)8|HiFq^(+^ar!)y`VpsP46-N!ECyA=nrPoHA#Oko33^GgV}Ts(I3pFdz1cP zHr?~|2eau}LVqxuo>BA%v+3DKe=wV#sq_c4=~+#GFq_T*`h(eYw$LBUrZbEFU^bnF z^ar!)jHN%AO=ma#!R%RoSXlal+4M2cAIzrDjs9RZea+|(X488?e=wWgWBP;HbnVa| z%%*FS{$Ms;>+}b+=^mm#m`(R4{lRRy=jjh-)3b#BU^YFY=nrPovyc8@Ha%164`$P| zn*LxmodNU*v*~Q1KbTEt7X86&It%F!X44rn%lAIzqElm1{f z-ShMZv*}qve=wV#QS=A1>DfnrFq@vK^ar!)SxtX1o6Z3GgV}Vp&>zgEGmHLUHl2m^ z2eavnr9YTWXE*)9>{)+USo(w6^fAyM%%;zc{$MtJ&FBwi(|bXGFq__E`h(eY?a&|0 zrfZV^U^ZRr^ar!)9-=>(P4_1K!ECzc=?`YpvxNR&Ha(;04`$P|kN#jbJyYoqX4A8p z{$Mtp0rUs6>1?4tm`!IE{lRQH3+WGL(-}*DFq_V9`h(fC{&3&N{mqYC`-9o^G0-2( zrq7N3U^act=nrPodqICNo8DvkgV}WL&>zgEYm)w8HeKuV2eauOqCc2T_a^Dr+`m`&Ft z{lRRy*69ys(>+9gFq`g8`h(eY&(j~wre_KL!EAa)(I3pFXCM8+YAj#om`(37{lRRycIXdg(=|zdFq^J*`h(eY578gYrhAkAU^do1Rhh2eawfM}IJzo~iT)v*}q)e=wWQ0Q!U3bhgkR%%(Go{$Mtph4crr>5Qd6 zm`!Il{lV;|Km5`0`pEI$(mVb$c{l&h!9MfyKg|BK(%%=C4{$Ms;JM;&$>6)ZJm`&F@{lRRyhv*Mx)4fT5Fq`gq`h(f@ETKP` zP0uL$gW2@#qd%BU&s6$@+4QWYKbTEt0R6#iI$P)uX49EPe=wWQLi&T*bjH#j%%-!O z{$Td3KfL-$zxAZGKbTD)1O35l`rPObX4BV<{$Mt}7xV|S={=@Dm`&FX{lRRyCg~4m z)3r{2Fq`fn`h(eYZ_*#krhA_LU^YEV=nrPoGm8FTHa+|34`$OdmHuEhJ*(*tX44r! ze=wWQ7W#wPbY{^X%%-!D{$MtpvGfPCm$Ung$4i~yhc2DK>{)*>d)6P!e(Ujn|9kZ@ z&>zgE&yD_IHhsvsDAIzp}lKx;eUF-A*v*{k9KbTGTCjG%| zy65Q+X4A8T{$Mseqv#K2)3cBMU^YEd=?`Ypvzq>3Hk|?V2eavHp+A^SXBPdzY&r|+ z4`$ODOMft%&TjgH*|YxeN#Fio{%dQ0Fq=LG`h(f@xzQiYrmq?O!EAaj=nrPodrW^Y zo30)DgV}UV(jUyGYn}dJHr+$?2eawkq(7KV_dNZtwhAIzpRi~e9XorUxVv+0bb zKbZahD0}m;UF*8)`%X!Hw9w2j&A=1~lrWW$VY^|oVY^|o2R55MfS`$UYKk0bYNqCN z7@A`g&Sv63P7k5H8aYLdM9u@5Lpbp08=0nQw%_w}KgVkSe%}_~W4(WzhX-qY?%RFe z*L9uOTI;&5^LEeO$`6(8^25b9|M^>_`JuAz-=O?ZS@*LkKUCKJ&XgZ2>uw9>hswI! zSoxu{?!Ke^P+51MRDP(eyRR!hRMtI)lpiYV9-GP!m35DK<%i0;bBXdpW!*VS`JuAz z+^76dS$9rVeyFTFS1UhM);$L(KUCH|wwag-50!Pdh4MpX-EFM=P+521QGTeb zyH6@VRMy?sl^-hW9z)6xm35Cz<%i0;$Gq}GW!s>z-SbA1d4Bhst*Op|b8dR{5c_U4E!+mmezI<%i04`JuAzXH$Nt zY?mJ@+vSJKy4zU!p|bA2qx?`=cb`;#sI0rMD?e1$J%*GYD(fDb$`6%wk9p;X%DQuj z@)DL+)!-4@CZm36nV@mKvU50!Q266J@=x^tBBLuK8$Px+y; z?wqRpP+51bR(`0gdk#>3sH}T#QGTdwmmezI<%i0;=UC;3%69povj4t(p5g|t^Pj({ z?6(&7``7dNi^_KSp|b90Q+}vymmezI<%i0;+gSObvKPMN@_W8|Z0hswHhl=4Gm-MLTsp|b9rs{Bw{cdk}` zsH}SqP=2Vadu~yFsH}U=QhuncdoEOdsH}UAReq?fd+t_#sBD)X4!Z4c-!{z;m399H z<%i0;pH2CpvhH`L{7_kUTPQzN*4@U+50!QI9p#70y8EQ^LuK84UHPH1?lGkNP+9lb zRDP(ed(108RMwqKlpiYV&QZz_m38Mn<%i0;bE@(~W!<@2`Ju91eyFT_Zc%=yY?mJ@ z+vSJKy60HshswTm`P{>6%4Z++`OV6HamfzfxSsq_+5ML6aEt5750!o9^8dg5`=-x; z=<^qqbw8W(LuI@CP}wd&RMy?b$`6(8@&_+050!Q2DCLLBx^tiMLuK7LRr#T^?p&?>P+9jJp!`r-_uQiVP+9k!rTkD? z_gtv_P+9jJtNc(|_uQ@gP}wd&yyq1+_|-H&RM!0)lpiYVem3QY%DUf~@7 zS$7*NKUCJ;ca$G0>+X}v50!QIb>)Z3y2p_6LuK7#Q~9B??lG_YP+4~_QGTebJ4Y!$ zRMwsQlpiYV&Z)`|m38N8<%i04`JuAzxkdS*vR!_tY?mJ@%X9DA=by{>caKd5706M`2g5|4`YDPrv6Kb}Yxpk`ee^Xl0*y$B!KR(&ZRg<%h~1 zxcpp)mY+@ep|V|msBD)XD(h}z<%i04`JuAzKB@dr*-u{j-6OuX9OLgy`JuAzF{J!Z zS@+mfeyFT_%qu@s)}2d~A1dq4QOXaMb>}|ihswHhs`5i+-ML!%p|b8dK>4Av?zu(z zp|b8dOZlO)?zvF;p|b8dR{5c_?zvm}p|V|m*nQB22c`L;vhLrY{7_lp z-uS?~JaRe4=N9FM%HDF*M-IOIa*V9imdzRDVv-S59XeDE!oWBk6#8kPOtUp(+GH+aMRdr;P>?7NrW z?MKV+ce&jTbw68|HR|_u_XlN-%63_!vhMz?tWnu6YgE=f-jp>e>mJ9-8kKeD2W5@Q zy7P{*MrGakOj)C{?mVfiQCWBXRo1AiJFhEiRMtITC~H*KJr5~sRMtJeDQi^LJ#Q*& zRMtHoD{EBNJmEbO8kKdAO=XSBy2re-MrGZ(L|LPv_PW=;W4Zq1JElyqoI_T#MrB`6X6e2cKQ2DPfOY5Z#~BB@^__U_Q)5U6SJqEetOJ4?soT! z*%y5M$e4Z0o9`C0fA_fC#q2*Hxqr<541YMwoOgI!)ceD7mD>M5>`MB5mw!XdE4dCM{85^V~Vz5GcJyvvo#F|yheDtq=_e{{%Wmt$nLDf|z1$!2&XtIuy%*5y8J z3YG0Ph03~|s!gG?-KJ1km#eiYRMzEnZ3>ljJwTg6WnI6}rchbeTeK-u*7YH63YB#| zOPfMvU4PT2P+8XtwJB8A^-XOGm32KKh~yDS=YO@DOA?=d2I@n?KTDW#B@`r ztot`;Q>d)_*|aHC*8R@3DOA?o7TOdl>uzIh3YB&D9c>Dgb@xea3YB&Db!`fjb&nx! z3YB$_O>GL5b&q*%3YFzt^6upr&%fFfD(lWs+7v45&VAYxD%))em38N8Z3>m`HigRa zoO6ri7=I7i6e@e@U;go-M=r<6YE!7}P4EAsLvFVmBdgahDtpRx553D7%Q3PG^Ln1= zD|`OIC*A2!mt$m?^TO(;P+7M>Xj7=HdtF4ELS@~1FtjOD*1g|Tn?hyXXG^pxB&;@t zgw>{yu-X(7R+~b?YEy7*y*{`$g@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-M zrjW4O6cSdOLc(fONLXzOA-mc)6IPo-!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdO zLc(fONLXzO39C&ZVYMkFtTu&&)uvEc_c=gq3JI%CAz`&CB&;@tgw>{yu-X(V>pst* zP2qpA=DmyB6e{c9dq4+qxun|^>i50D*=OA47Rxba7;Orbec}&)c*ygXV`Q}{RQAHR z{PCf$UyhO0rcl`*9d?&{;Ek*{h01oDLSn++8D(m`?HigQ%o~2EpvaY{rQ>d)#h1wJ<>-wfPh03}ft4*P@ zt{-btsI2SV+7v45`n)!U%66Lq8)3RBRM!0)v?)~9{cPG4D(ik{+7v45ZVPP+m36nV zHigQ%`;In+%DVfcHigQ%`?@xT%DTspHigQ%$EG%g%DTtAHigP|n?hyXIZB&CW!xT&+!^vaee{lmFK8x%}n%<83?_R`$!w^UAg5xkZ~oWuN%rKR)ys%P~F= zX;Y}|e;&5?kp1tmcX}>dnAP_wRQApnedR7kEXVkLm&f|*rchb8KWI~^tb6~1HigQ% z_ho8Rs4V|oKLesop|b8Xnc5T*R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+ z!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZWLGzZgw>{yu-X(7 zR+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-M zrjW4O6cSdOLc(fONLXzO39C(^vhFjE+7v45KBJ&bp|bA12lN$}xw=iEe&6RE{I7>x zxEy0P(xy<^Eie4zL(f=_k=3S9*#nnN;cm+@vf30X`{E@_zNX|!UFWH?E~jc!sBE_> zRMzEcZ3>ljd0m@AWxGwGvaVlfQ>d)#E!q?+>-vy3h03~~rA?u-uD@whsI2RS+7v45 z`ldF8%DNt_O`)=`A8S*ntn1y{6e{cbyf%f(cAEmbU%Dw&*8Ll_DOA?|Y}ynm>wah2 z6e{a(3vCLOb+@rLh0417jy8qLy8EOyh0417x;BN%y2p?mW>GNN5=mEdE>xRBW!*I>v?(O4Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ z+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEuZ=)lDH`wJ9X5Hid-M zrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&C zRMuTDNSi{!YEwv9Z3+piO(9{mDI}~mh03~X8E8|etow|DHigQ%_a4w~T$bxLh5CKp z`>{Vd^or#eGnY1n%Kqr)%li~=G3P#Q3YC4`+n3jd)V>)I45+ieP!b^St{LSlj{Y{%fWnC}Srchbe zH?=8L*7aCz3YB&JSers+UGLVWP+8aKwJB7#+Z5RH(oLbV?%$wIp|b90)22{a_dC<3 zP+50dXj7=HyN$IeRMy>hv?)~9-6ypvRMy?swJB7V$IuIxV?6I@Q>d(aY-&@etb5FB zQ>bjWDOA>-qqHeh)}8ybDOC3Ag5NF24Ic9zWJ{|YB@%Bc}%Wu3ibQC{Xv^TW!?K9 zv?)~9ef~n5LS^~ydi@7&3YB%&rP8L5u-X(7R+~b?YEwv9Z3+piO~JACZ)$2&NLXzO z39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b? zYEuZ=)lDH`wJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2 zn?k~BQ%G2C3JI%CAz`&CB&;@t%DU?UYEwv9Z3+piO(9{mDI}~mg@o0nP}#H1wG6Z= zRMve)L7PHl-Fpw{K`x(ln?n7*7rx^T_jto{j9E^bLS^6n{LAn8-sKosZ3>nB<$Lcu z{LafUvf30X`_U!)ezD}=C08Hiem0k@wJFr^>+-rbh01oDLSd)#o7xmA>w2s84Ow_ixaqP+9l0X;Y}I`<-c1sI0p!v?)~9-NxD!D(mh$+7v45?vvUSD$9NSZp$&A zOSCCew%Zgc>mHlh6e{Z;^V$?D+ieP!b>}E;3YC50a!!24a*V$RZ3>mW!@IwG#J!ed zWVI<&_6BF~Jp2~RF|yheDtpWS^TB)GemO>VVOBr;P}%=F?4oj5v?)}U|E|}6(56sXcO4>a3JI%CAz`&CB&;@tgw>{yu-X(7 zR+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-M zrjW4O6cSdOLc(fO2-($5Az`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~m zg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&Z zVYMk#)?Ld$n?hyXXB4z4RMx%sfX+lmuWYv|RQ3)}yzHKbEytKAwJB8gQ8(Rr_>-1n zWVI<&_L+b6-6LMQ93!hup|X!!GWGA4T&+!^vM#S{Q>bjWDOA?=3vCLOb-hKKLS?&6 zp|ahkP+8aCv?)~9^+Ih5m34hnn?hw>kJYA7S=W!XDOA?=Zfy#cb$wo&LS?&6fz2)5 z6e{cf4cZhc>wY$E3YB%gGi?f$b+?5!h040ySers+-F-)!LS@~3Qkz0$yG^08-KJ1k z_t?~?P+9kw*QQX}Zd0f%=dJ^nqn!IL<6K?Y-#GeNM;*N!BdblJvQPWQcaM1Ca*V7t zh01>DkozD0$>kW?g<1XVLuFs_j{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~m zg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzOA-lRM zB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXk zt4$$cwJ9X5Hid-MrjW4O6cSdOLS@}`0ktV4tTu&&)uxcJ+7uF2n?k~BQ>d)FmVq{f z%DT@eXj7=Hd+!1L%4OPaQ>fqf&1<(E{_f=%v!^zN%HH)k-#y}pKh~yDS=YO@DOA?=d2I@n?KTB=v~*Lbtot`;Q>d)_*|aHC*8R@3 zDOA?o7TOdl>uzIh3YF!)^WfzeA8*m`HigQ%$EG%g%DTtAHigQ* zbGg>*<>h*>%X#R%oKq|Njph7wT{%bTeF~L5a>uidI(|9E->)`>%AWV|?;r8Zx{SVp{D(gOfp-rK({CB{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm z5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzOA-lRMB&;@tgw>{y zu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7v45u4SN2p|b8X3fdGZ z>)v}n7js#;+Z5{ez1Pov^N8b?W6ZSL6e@f1fzLYX(&ZRgZ3>k=@;$d(bHZ|rtTu(p zzJBQdZ!bMy=@;wV&*u7tHii0qU2oB*P}y!%sBE_>RMz!3Z3>m$xpcw@m0qY#p|Y-T zYE!7J>#^DtD(m{OHigQ%-mOicvaZi-Q>bjWDX@*Dn?hyXzd@TqW!=xFO`)>xccx9D zvhKFfrchaT8*5XjY_};?*4-zyDO9%G6e`GL5-Ljku?!O%6Tyi<*hsyrx zv6rlU{c?<~HigQ5=nJ=7bJcQ;tTu(pZn^HcN9|sYkzJTe-M`_}mp=MFUt5lmUGC$n zn?n7*Zhz3GP+9l>2W<+Kb)Ub`rchaT{ReFdm37yj)TWTI+7uF2n?k~BQ%G2C3JI%C zAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1U zSZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLddRe3JI%CAz`&CB&;@tgw>{yu-X(7R+~b? zYEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O z6cSdOLS@}`0ktV4tTu&&)uxcJ+7uF2n?k~BQ>d)FmVq{f%DT@eXj7=Hd+!0g&E?;2 zQ>fqfPoDAgqh7NdV^-FtP}$wDy4{)wFUQDgQ>g6a_q}B8N0(z{wJB6~?b0nyDg8p5 zLSE{!x<0Q> zp|ahkz}}T^3YB&L25kzJbw8Unh040$nKp&Wy4ymVLS@};tWBY^-KJ1kcc0XzP}y!% zsBE_>RF=o=kC&r7=HJgbs{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+ z!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)us@# ztD8c?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-M zrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&C zB&;@t%DQVAXj7=H`;3A%h04139?d)_ooQ33th+6= zDOA?o#@ZAr+ieP!b@xea3YG0Pg~~p6`I`?HUeDissO;@d{QCMsmt%Y!>wOB9J?~qa z);)7MMpm0bWzRqOvbBG@93#6htDk+S?Ede4#hTkL$H*@C#nnxrvTlFSrchb;{s(Oe zm35!L(56sX{<~iPL7PHl-Sup=DI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%C zAz`&CB&;@tgw>{yu-X(7R+~b|u5Jnmt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO z39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b? zYEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+W!<$5v?)~9eMUi>LS@~159ovJ50&jU zh01<(_uJNfemTZ$uT7z{2VA&m-NDN-vf30X`{v`nzW&|IF|yheDtq42g`Qpd(9*L` zaz9(QDb(-l`kOX|%66MVWnJIYrchbeW3?$%*7aj;3YB%eTbn{ozXO_{yu-X(7R+~b?YEwv9Z3+piO(9{m zDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO zA-lRMB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1U zSZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu(py6XaJQ%G2C z3JI%CAz`&CB&;@tgw>`{S$8c1Z3>ljpHa}JP+9lh1G=N@7u}{%zwfq#Hmo~)ImXVQ zO`)=%KH%%?zqTABt4*P@2mI}mHr#bNMpm0bWpBH5EWDA`-;%7X>u=f=D%))em34hn zn?hw>kJYA7S=W!XDO9%G6e{cbyf%f(cAElQQ@SZsmVd)}%Q4<=+7v3=Z3>ljzcXzL zm36m;HigQ%+gO`IWxGwGvfNicz8vH4L7PHluU+ov|6cCv%VX#Y9>0D*K(+etZ3YF2~3&%<5+!D!bwRA6vI$IYxH5&#Z0=m38}rHigQ%_djS;sI2?^ zg*JuCy6Zn^Q>d)FK8!Yngw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm z5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&& z)uxcJ+7uF2n?k~BQ%G2C3JI%CA!JuKg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%C zAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mh03~X8E8|etow|DHigQ% z_a4wQU2o|&h5CIzf6dkFzqK4=7ty9r*%!RzNgH0X93!hup|U$R-twfgmt$nLDOC27 zrMuyctTu(pcAG+FUEkEEP+8YwwJB8A^R5uT7z{-KM~Plx_-@ z?KXwVcAG+F-S14BLS@};p-rK(?l#t@P}#GWYkNMjT;FrK-+he7P-S2B@i%RH^Ky*$ zNo@+1eeOeUdD4rQV`Q}{RCddCPusA2IYxG2R^O*k*{`iX=Y;Pq$H*@CgVjx;vTlFS zrchb;{s(Oem35!L(56sX{<~iPL7PHl-E~~FDI}~mg@o0nkg(bm5>}f+!fI1USZxXk zt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~B zQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(A4gH-&`NrjW4O6cSdO zLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{y zu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrchaTEdy-|m35y{(56sX_ud0Ksq0SNrcl4{*%v>4!(*3Y>^RyKDtqanw>;^6 z%Q3Rr6e|1KkG^Ts*Op^swJB6~+tLZ|UwYxvH@CT;&Gk)f3ibQC9;;2EvaTO%Q>bjW zDO9%G6e`bjWDOA?|&a^31*4-A`6e`PYf0KXs{I+u6xsv-sWw&iz zx8>~R7+Gx!mA&QvdDEr?mt$nLDOC2z!w)#=gyk67g;{-{LS>(N#g8|d{z98VW!?23v?)~9U4K%WLc(fONLXzO39C&ZVYMkFtTqM5 zzMy}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3L(3? zDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO z39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b? zYEwv9Z3+piO(9{mDI}~mg@o0nP+4~^18oYGb)Qktrchb;-UIrp>tx-gP`~efXYYT~ z{>w3TCv6IqebB{k+Vq&^7+Gx!mA(Jw<+bMJ7+Gx!mHp1rH}OVRn?hw>kJYA7S=W!X zDO9%G6e`bjWDO9%G6e{a}XWA4h%Wd?=nBmU9u^c12FdyM@QP~4edhtnjU5=4mZm-o%p|Wm& z(56sX_x=ZM3YB%AztE;oS^m3T|3RBVW!?2BwJ9X5Hid-MrjW4O6cSdOLc(fOaO_>n z=UcQXB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1U zSZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7v=| zbyG-KZ3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O z6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@t zgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDOA>7%Rrk#W!+~Kv?)~9z4w5w>v~qVDb(-# z*rWbp(^HmX>}1*$D*K^B)@`|JIYw5SLS?V~`_FH?dO1c`n?hxuxpY{(k=3S9S=W!X zDO9%G6e`bjWDO9%G6e@f8XK%c7?Q)F2Uu_DN{o0Plo_5`GjI1_= z%0BcbpWk-ga*V7th00#?iVa&nupA@1Fsq+^sOd{z98VW%=)V{ReFdm37xI(Wa2F+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@t zgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$c zwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?lI0ZVCyj zO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fO zNLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7 zR+~b?YEwv9Z3+piO(9{mDI}~mg@o0nP+4~^18oYGb)Qktrchb;-UE6u`$J{BO`)bjW zDO9%G6e`g4Gm%sUN_4WMShss{J{Jwr%erMVgD*Kf`eC%o8TaNLz z(56t?hkohH+s<2#kzJV8&puRk_m=l>dC+o{yu-X(7R+~b?YEwv9Z3+piO(9{m zDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6hd}&Q%G2C3JI%C zAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1U zSZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2 zn?hyXbpf?0B&;@tgw>{yu-X(7R+~b?YE!7JyOx1Ah040mC}>lttb6YP9h&{2vfZXo z*{5Cc$!#xOjg6GcYN$=r!2?FYE!7}qds%voxi&rBdblJvL9MHH{QtVZ%J0R z+Y~C>Z3=8G>84QGM=jTgd{VhiO?|Z;)pK#ipmt$lX<|_AnzjxK{Q*ZDOyH6e2<#)BZDb(-l_6KbW|ARH}f6%5- zS@-!1Z3>m;zw7lMv?)~9T@OT?Lc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~B zQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm z5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMlQ?CPeF zu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%C zAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDOA>7%Rrk#W!+~Kv?)~9z4w5= z?fPc7Db(+Kqvt>3v;&r7?55fjDtoK<+<51K%Q3Rr6e|0@U9aB#U&}GF+7v4Lz@^L6 z=|@(7_o1@groe78ZVER&`^vKpSdQ`gF8_uv@jI*R&a00&^TEq8vf30X`|00(_3p1M z$H;0^sO(cNxY^EUFUQC(%%|MH;RUB%ciO9#V`P_~e|1x+-`DLA+7v45-v6LYp|bAt z7upmm%YWDFKWI~^th;W9Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ z+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~m zg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzOA-lRM zB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXk zt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~B zQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO`)>xS_aw_D(gO@piQB& z?!5g?)uvF{ zAD?yQSvM&=!NUF{KO0-fxGCJ?0au=N`{fwFuQr9s-v6gZocYM*7+Gx!m3_(uf4=*< z%Q3Rr6e@ezXP>k4$mJN>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+ z!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ z+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b|u5Jnmt4$$cwJ9X5Hid-M zrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&C zB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXk zt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzOm37xL(56sX_ZbCk3YB&5J)pb1rW!?UuO`)>x{SVp{D(gOf zp-rK(?)nef6e{bkKdDV2VYMkFtTu&&)uxcJ+7uF2n}TCMT|T>`O(9{mDI}~mg@o0n zkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkF ztTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+pi zO(9{mDTM6mrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C z3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+ z!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ z+7v45u4SN2p|b8X3fdGZ>)v}n=VyPYY_};?_BCI*=b3L^jg6Sj=1uyqnD$w ztD6Fw#keVa`BtAk>pROavf30X`|vMadgi&yF|y15_v-Z&D(m(KZ3>lj?|;yyP+9l+ z3vCLOb=QB;rchaT{Yh;K39C&ZVYMkFtTu&&)uxcJ+7ujnZuyLjHid-MrjW4O6cSdO zLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{y zu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5 zHid-MrjW4O6hd}&Q%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{m zDI}~mg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO z39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@t%DU?UYEwv9Z3+pi zO(9{mDI}~mg@o0nP+4~^18oYGb)Qktrchb;-UIdl_J_)Ln?hype9?!`I(#|C?yt{2 zutSWS!VS*ea`r8jV`P`_w|YH=%DVkQn?hyX`yaF^RMvg|LYqQm-Sr=|DOA>7S3;XY z!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ z+7uF2n?k~BQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~m zg@o0nkg(bm5>}f+!fI1USZxXkt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fO2-($5Az`&C zB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nkg(bm5>}f+!fI1USZxXk zt4$$cwJ9X5Hid-MrjW4O6cSdOLc(fONLXzO39C&ZVYMkFtTu&&)uxcJ+7uF2n?k~B zQ%G2C3JI%CAz`&CB&;@tgw>{yu-X(7R+~b?YEwv9Z3+piO(9{mDI}~mg@o0nP+4~^ z18oYGb)Qktrchb;-UGG-_J_)9Q~3EMG(2?Wo-0SJJYeN9E5EZG4_G;8^?x6~a^B({ zeDuo7e{Tsl-20Q2<@oQt;RY*vmv6nYa>Mig!|S*Cq1WH=eXrm9dtQIvzj%G~cfJ0_ zYrX!kZ+ZRu*LeNuU-$a{U-kOSzwGrxuJ-z+U-0_+&w2f-Pka5WPkQ~@zxVnRKH>HK zKIZioec0;(kn_AkAD z*jv2*o;P}Z;~TvGnLqdXIj{Blb+7XJ@4v$9H@(p77hK@=gJ0(Lcf8o^YhUQ~k3HY( zyZ^}R*F4wj=RVu(E6?=$-aqvE^RGw$mFv;p{0#qnj=UcI@1E}Y)2~PW=cjr8-0RVQ z=6dv%>(f{K_g|WwJ)fU@J^DXikAC{k`0w*~*P|bK1JA$tdh}npq354}J^J43(O35K z-{;&LdHtH3czyTHy#BGD_xjpfc>Nu>^!mZS zj$Yq*XRp8Ku3kUv?p}ZGuY3Jgzv1=g+{^1fKHTe%zK_?xa+KFkTjTXB)_VQObzXnV zdaob2!Rs&D==J?JdHo5Sy?*Uhub;Ku>sRgY`ubg7zjTk+54peBUw*dN_x~-gKm8o9 zfBzv~f7rvl{>4XneewBMkJ^GTj&;Jjfx1CPj zb~<_6>Evyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZL6<%oxJUM^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvRJQ$=kR2q0ie+CvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>Evyvlee8t-gY{9+v((Or<1pxPTqDpdE4pa zZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4pa zZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4pa zZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4pa zZKspBt-j>#H+Evyvlee8t-gY{9+v((O zr<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((O zr<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((O zr<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v+P` zCvQ8RyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UT zCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UT zCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UT zCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=g<6^7g&I=kvDH$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxE-J6|a-G9Z%kNI(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Ot1o%`egER~w$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4k zbn>>-$=gmRZ#$j5ZS@teleZmD-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9 z+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9 z+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9 z+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvleewD;&t-2 z>-$=gmRZ#$j5?R4_C z)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C z)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C z)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt33^(AkA@mim^olf3%I(gga zEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(gga zEvyvlee8t-gY{9+v((OtFL&SyzO}Mw$sVmPA6|WoxJUI^0w2- z+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2- z+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2- z+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2- z+fFBMJDt4kbn>>-$=gmRZ(DuI+YkGe&)ZHXZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVm zPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVm zPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVm zPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVm zPA6|WoxJUI^0w7iyiVSBJbBycEvyvlee8t-gY{9+v((Or<1px zPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1px zPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1px zPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1p> zzU1xiU*q$()5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt4kbn>>-$=gmR zZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI^0w2-+fFBMJDt33^%bv^w;fO3 zb~<_6>Evyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3%I(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZL2SN`{`fzdE4paZKspBolf3% zI(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3% zI(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3% zI(ggaEvyvlee8t-gY{9+v((Or<1pxPTqDpdE4paZKspBolf3% zI(ggaEvyvlee8t-nROR*U8(CCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>-$=gmRZ#$j5?R4_C)5+UTCvQ8QyzO-Iw$sVmPA6|WoxJUI z^0w2-+fFBMJDt4kbn>>Evyvlee8t-gY{9 z+v((Or<1oweecST&-hh9D|`R1PVRO(x!dXFZl{yGolfp{I=S2F zvyPZz%b~?G+>Ev#wle?Wx?shu4+v((Pr<1##PVRO(x!dXFZl{yGolfp{I=S2F zvyPZz%b~?G+>Ev#wle?Wx?shu4+v((Pr<1##PVRO(x!dXFZl{yGolfp{I=S2F zvyPZz%b~?G+>Ev#wle?Wx?shu4+v((PtFL&S-0gUBx6{epPA7Leo!sqoa<|jT z-A*TWJDuF^baJ=T$=yyTcRQWj?R0Xt)5+aVCwDuY-0gI7x6{epPA7Leo!sqoa<|jT z-A*TWJDuF^baJ=T$=yyTcRQWj?R0Xt)5+aVCwDuY-0gI7x6{epPA7Leo!sqoa<|jT z-A*TWJDuF^baJ=T$=yyTcRQWj?R0Xt)5+aVCwDuY-0gI7x6{epPA7Leo!sqoa<|jT z-A*TWJDuF^baJ=T$=yyTcUyhQ-7o*L&)rTZcRQWj?R0Xt)5+aVCwDuY-0gI7x6{ep zPA7Leo!mX@HD8mzM_>7x+&$`hSH8Ua+q?JWa`N}=Kk>|G54oKjKKlB;Ev*ylf#`(4tF{^-09?Sr<22-P7ZfEIo#>waHo^QolXvSIyv0wEv*ylf#`(4tF{^-09?Sr<22-P7ZfEIo#>waHo^QolXvSIyv0wEv*ylf#`(4tF{^-09?Sr<22-P7ZfEIo#>waI3F)ogD6Xa=6pU;Z7%qJDnWv zbaJ@U$>B~XhdZ4d?sRgv)5+mZCx<(o9PV^-xYNnuPA7*uogD6Ta=6pU;Z7%qJDnWv zbaJ@U$>B~XhdZ4d?sRgv)5+mZCx<(o9PV^-xYNnuPA7*uogD6Ta=6pU;Z7%qJDnWv zbaJ@U$>B~XhdZ4d?sRgv)5+mZCx<(o9PV^-xYNnuPA7*uogD6Ta=6pU;Z7%qJDnWv zbaJ@U$>B~XhdZ4d?sRgv)5+mZCx=^o$>E1w?Q^)($>B~XhdZ4d?sRgv)5+mZCx<(o z9PV^-xYNnuPA7*uo%}uOHD{BSMGiKeNW$)&&l7j|CZgC4*8uNKKoza zbKRbOUr!#N{db=6fiw2`#t2c<{;Tv;T!NzdiWm_0iYQOEv~%lh>V2UUxcq-Rb0Yr<2#6PF{C9 zdEM#cb*GcpolahNI(gmcEv~%lh>V2UUxcq-Rb0Yr<2#6PF{C9 zdEM#cb*GcpolahNI(gmc>rN-HJDt4lbn?2>$?HxhuREQ*?sW3H)5+^jC$Br5yzX@J zy3@()PA9KBoxJXJ^19Q>>rN-HJDt4lbn?2>$?HxhuREQ*?sW3H)5+^jC$Br5yzX@J zy3@()PA9KBoxJXJ^19Q>>rN-HJDt4lbn?2>$?HxhuREQ*?sW3H)5+^jC$Br5yzX@J zy3@()PA9KheaY*We!=H;r<2#6PF{C9dEM#cb*GcpolahNI(gmc| z$It%D_gpmi?rnKj?gVLg&*LI-lOq`Sgd*r$=-?eWLT}6`fDN z=zMxc=hHVjpWe~=^pDP`hjc!Dr1R+|oligMe0oaf(^op5-qQK>m(HihbUuBi^XWC6 zPrvDWdd}>>eR}+@tn@y;r+)ok508KPPv_HvI-fq&`ShaBryq4bJ*o5QOPx<|>U{cB z=hLG)pFY+3^s3IMUv)k`tMlnwolo!TeEL`C)5AKSKGym4vd*WUbv`|<^XY4yPjBmd z`djDI<2s){*ZK6i*?-5L@$pB$>wJ3N?7wr*<-_BbzE}Of8GL%*>|e6y{ew^coBen1 z`Ox6g184uedplCXa7fges5H>} z&>4pgKD}}F&pP9`2cP~p`xl>a+2GS7XaB@APapPT`sC>Ucdp*$b^4^^>61>UPdc4G z>2&&})9I5=r%yVaKIwG&q|@n>PNz>goj&Pw`lQq8lTN2kT7Bu0>p$oFq|@n>PNz>g zoj&Pw`lQq8lTN2kI-Nf0bo!*z>61>UPdc4G>2!MJsPA2wU%#P8&i>pN>64?c#{)fb z)c3A@b=$Su<{mlwH{Wrap@-5VXaD%qw+yd4(IaR7%cp;5@ad7Wf9B3d3_X?}Is0$i z`L4mIN6!8icYbT|>5;Sl)15!JYv0dDkDUEq*!63JPmi4agLd6x@ad7Wf5@(*2A>`| z`}f#&?BLTQXaC;2jvst_5-jJkL-MUWarZ(JD(oe`Si%vU+H~%WcT&-$j+xn zc0N6_^XZYDPmk<;dSvI*BRiiS+4=Oy&ZkFqK0UJY>5-jJkL-MUWarZ(JD(oe`Si%n zr$=@^J+kxZk)2PE?0kA;=hGuQpB~xy^vKSqM|M6va`xBkI%RnNqessE+R3L!R)5Rz z_4LTuKW^8y!KX*g{`y^~4n93{_BZU>Ir#L*+26G5%)zHe&i?7U9y<8+$k~6$uE!5P zJ#zM+xa+xtPmi4am+!iG@ad7W|M6Y_IQaC)+5frS2aK;%Y_9&M-KP&eJ#zl~KimE1 zgHMl~{d@0OJM>(7{xN568hR+ba`ctE>6K2WS2~?u>2!Lf)9IB? zr&l_iUg>mtrPJw^PN!EoonGm5dZp9pl}@KuT7Bu2SAE*|N~hB+oldWGI=#~A^h&4G zE1gcSbUMA#>GVpc(<_}$uXH-S(&_ZdQQx~VzweJ;Is5bLjP%OcpZg>Ia`bio=k>`^ z-@EeEE$469*URXYv;P;TzT?z=KD~1GuipNh?fZOs&_>6Nqp+8u8he0t^VzjeoDgHNxV{mXWIXz=Nkvw!)Hj|@J& za`r#C6M*Nuk3t!W#`i?JD*6Np8<&G~7Ur(=`{ZH<=dhqF$v;UbLUmbjU6Nqp{T+J; zpI$lpH$MFrhu010m9u~M)9*9*^vc=4|LG4Oe0t^Vzxnh_2cOp`XaCMS4GVpc(<_}$uXH-S z(&_X{r_(E)POo%2z0&FQN~hB+oldWGI=#~BORqfZlfG9vonGm5dZp9pl}@KuI-OqW zbb6)J>6K2WS2~?u>2!Lf)9IB?r&o^p-j(_DV)V+{pWmNKubln)bw_&T?9cs?emVMj ze9$XLeecT0PWj9!`+6b0a`unex@qe^pI$lp7i@dY@Omk|a`x|i>e`{V(ko~GC8xf6 z@adJafAy)~8hm=??B8(vFATkxUOD>*Z9jDI>6Np8`1W;!Pp_Q)`))sF@adJaf4}Xg z4?ewe_D|V<#^BQ{XMgMVvj(4DIs2z>f570=D`$WE_TL(Odgbiz*nZC7(6M*Nublmz)8m6)+4=O!>OXjRe9|jB zpI+Jd^vcesS9U(Vvh(Scolmdqe0pW)(6M*Nuk3t!W#`i?XMflBhYXJodS&O+E35y|;p^#@vwz0+ zhYvoza`w;K{>Z_nSI+(ewm*9C>6Nqp;O*xQKD~1GAHDs_gHNxV{U>gJ_TbYiXaD@| z7Y;tXa`xZ2{au4kublm>w*S-M(<^8HHmBWneBEGU^?&cQ=MFx-a{l_8?)b%_*U~Fz z|2aEeJoxm=*}voIhYh`yUOD?acb+r!PI~3+&%KjgIs5bLo%G7tpWjzYzZ`w#YWk(q z>6cEYUpk$B>2&&~)9IH^r(Zgqe(7}jrPJw`PN!cwoqp+b`lZ#EetGTR`+n(k`lZw9 zmrkc&I-P#$bo!;!>6cEYUpk$B>2&&~)9IH^r(ZgqemUxUSLW-D&@X3y{(K|-a`xx< zt6f$roh?5ZeEQ|=&;6HvIs4~reb&&A>6f$r@~sySKK*j`|M%7p4nF;I z_CK`svx85+oc$}e{?p*oFK7Q#Tdx^>`sM6@Ve7XCpME*}U)uWJ!KYu&{y%R0m%*oB z&i+4b{nx>#Uv@tIa`wNv_1}iCr(bqH{j&4vmz__)?0ouV=hH7cpMKf-^vlktUv@tI zvh(Seoln2)eEMbQ(=R)pe%bl-%g(1?c0T>G^XZqJPrvMZ`eoG^XZqJPrvMZ`eo6e{PzwCVaW#`i`JD+|z`(NMsgW>sue%bl-%h|tX>ko&o zr(e$gH@E)B;L|T>|Jz%CGWhh%+5eZVE5m+HznuLaY~640>6f$r)2%ldeEQ|=-+0?E z3_ksG_HViEc7sp9oc%j*`;Eb;U(WveZJP(5emVP(+;-mJ(=TWLo!kC;@Oj;G_J8rz zgNFT|emVPZKlMF>Prsb~x&P8HXaB3G{oBxA>6f!V_fPue?9Z=z(l2L!e!ngKa`xxX zb2&&~)9IH^r(Zgqe(7}jrPJw`PN!cwoqp+b`lZw9mrkc&I-P!L^`&1v z;S;`JI-P#$bo!;!>6cEYUpk$B>2&&~)9IH^r(Zgqe(7}jrPJw`PN!dv`reiKdX@Cc z*`KeEL%*E;`E!r-%h{jbze>NH{kezHFK2)5k@U>b*W-xSFGqdv%E#~brTgvckMzsg z-+A&mC-3v=m$U!5P2b$K&!=C`{!>nQ&d^`!m$N_jX8Psq|Lo?Q5B-*YIs13te4oLm zU(WvVn>PG^XZqJPrvMZ`eo6e{PzwCVaW#`i`JD+~p`Si=qr(bqH z{j&4vmz__)?0ouV=hH7cpMKf-^vlktUv@tIvh(Seoln2)eEMbQ(=R)pe%bl-%g(1? z&i>;!KXthO(=V(42ZK+)oc;4QKW*^om$U!7o1ZcG^vl`*z0J=WeEQ|=KXvo-2A_U8 z`_J6`!ojCs&i)HFUpV;m%h`X;=C=$!{c`p%-TZ;Ur(e$g)tkRP`1H%!zx9@bhkc%Y zIr|UU^7z50U(Wsyx7=vx-}KAbf7jM42A_U8`%l>RjG>>>FK7R8r#@xqpY+SwpZh2M za`xxfKk1jVKfmvmemVQ|=RN6{vp-)~h<-Wx%Ek0cr_(Q;PQP?I{nF|5OQ+K>old`W zI{nh=^h>AHFP%=mbUOXg>GVshFa2`AkNJM-bo!;!>6cEYUpk$B>2&&~)9IH^r(Zgq ze(7}jrPJw`PN!cwoqjp$dspVacR;_K{rUQ;^vl_wubV@^oc;OpkMzsgpWnwyznuN~ zbx8Wl0U(WsyPQKyb(=TWLhbP}?@adPc|D%&{GWhh% z+5hp$|7-B+mz__)oc*7ie6!)}>6e{PzwCVaW#`i`JD+~p`Si=qr(bqH{j&4vmz__) z?0ouV=hH7cpMKf-^vlktUv@tIvh(Seoln2)eEMbQ(=R)pe%bl-%h~_wbpNGac0T>G z`ad_^|LK>VPrvMZ`eo6e{PzwCVaW#`i`JD+~p`Si=q zr(bqH{j&4vmz__)?0ouV=hH7cpMKf-^vlktUv@tIa`sm?-F&$J(=R)pemVO$+;q#~ z>*<%Xf0IqO9(?-c?El=R+YLVba`q3{bf>|mU(Wu)o9;FE^vl`5&!+ngKK*j`&)D>c z!KYu&{GVsd(=VM)zjQkN(&_X|r_(Q;PQP?I{nF|5OQ+K>t-kcj7k$|G zOQ+K>old`WI{nh=^h>AHFP%=mbUOXg>GVsd(=VM)zjQkN(&_X|r_(D(eecTrcRA>l zvp-*Nm0mgf^L2CRm9sy8{*hie`}6x(>6NoTzy3(Coc*~!(l19}k3V|lsPA3*ndA3A zeqV2-SI+*16StqZ&!<<;{!=%czhR$Gublmd-|vY-Z>3kx{?BZ@+3>z!dgbgNw(&lL zPp_Q)Z5z)Re0t^VpR@5XgHNxV{l{&5^5D}eXaC6?pEdaO%GrO~#^((_y>j-Sx$y;q zPp_Q)=WKlO;L|H-|GAS-ublnoZG7qQ_4LZlr&rGYA8mZu@b&b{&Zk#)KE1N@>6M*N zuk3t!W#`i?JD*6M*NudM!`4EKL}W#`i?JD*5oc${{esb{Xm9u~C#(x`pdgbgNaMJC^-F$8J&pGKagHNxVzy1p+ zT{HOf%Gp2f6NoTzwee_ zIs5bHKIxUSKVNT%UOD^ob#CdEvp@em6?*09E7#I1oldWGI=#~A^h&4GE1gcSbUMA# z>GVpc(<_}$uXH-S(&_X{r_(E~zVyliukgLn>GVpc(<_}$uXH-S(&_X{r_(E)POo%2 zz0&FQN~hB+oldWGI=#~A^vY4+yE6YhM|$P#&wr6Nqp?6Np8s|~+4 z`1H!^-(m3Sm9zg#8}2yx^vcesSI+(c8x9`6o?hAc^vcesS9U(Vvh(Scolmdqe0pW) z(LhgD`)@t8(u#6^vc=))P}DNKD~1G?{>eVhh3c4D`)?T`+aWk>6Np;d*g2ny_H@$ z``_QVcktj;F-bt^V{rUAydgbiT@3*B_&i?#)PkQC-&(|BGSI+)? zom+b4?9YE+gGVpc(<_}$uXH-S(&_X{ zr_(E)POo%2z0&GSuYAh~eXn#nz0&FQN~hB+oldWGI=#~A^h&4GE1gcSbUMA#>GVpc z(<_}$uXH-Sa@6;(ylBrWhriE5ubln)?>o{fXMg@X9rViCpRcz{ubln)dO7sU*`Gh} zNUxmz`TeT&%GsY^ccfR&{@fqwm!q%8FTHZqm-pGOxpvLmD`$WGaiZ{Vj*yORt>$W7cmPe0t^V|JM3*2cKR! z`{%8H*5K1CXaCvjFBp7!)$?nJ-xE?>6Nqp+V$@ozMfv$`Si-pr&o49y|VM^m7Pzo?0kA<=hG`YpI+Jd^vces zS9U(Vvh(Scolmdqe0pW)(>#rDmdgbh2zW%Dgr&rGYRqMYx`1H!z|N8nL3_iVb_V+ts|6!M=SI++J zPq^FQ(<^6x!wIJjKD~1G&p+W$2A^Iz`~Q5xb%Rf@oc*Vtc>b_U(<^8H5gVR3^j3Q1 z?Em@w-Z}JAdgbiTy^~%!`}6Ca^vcGVpc(<_}$uXH-S(&_X{r_(E)POo%2 zz0&FQN~hB+oldW``qC?pe82CNPN!EoonGm5dZp9pl}@KuI-OqWbb6)J>6K2WS2~?u z>2!Lf)9IB?r&o^pa($mY7Y+Acdgbi@!meK%{w^)Oa`xxH??|tl{rT^7&?{$uzP=B= za`xxzj;F_p8z?XMcX(kzP6bbAO~?j=mn>yk0r#%XN8=IrEr(y^&ry z`vj-Sc+U=F^vcesS9U(Vvh(Scolmdq ze0pW)(*hW z=#`yMudM#s;r>al?0kA<=hG`YpI+Jd^vcesS9U(Vvh(Scolmdqe0pW)()+MxS0e`@gwv-SGAF%Gp11-TJ|& zSI+)X>rNbedgbgNyYA${r&rGY3G22EKD~1Gx2!v3@adJa|A2MBJ^1v>*?;`HKNx&^ zv;W59-!=I3%Guwu{t-j(rB}}W#uK&= zy^~%!`}aQazC-V%SI++2JL#3PKfm5dubln)eYW(<*`Gh(Nw1v!`T9ci%GsZ+wUbrdQ7X2lrex9E1gcSbUMA#>GVpc(<_}$ zuXH-S(&_X{r_(E)POo%2z0&FQN~hB+t-kciD=zoF(&_X{r_(E)POo%2z0&FQN~hB+ zoldWGI=#~A^h&4GE1gcSbUMA#>GaA`-@Edj;F&pFa7XMcXbD!p>{=hq$Sm9szh zNBZUH>+w&o9QEb(&Lgiqa$j$xSI++HkGW*%rS!_#|K~N=4X>BdD`)@d_kI3-_kDkQ zlaXa8AiUo!ag%Gv+3wHFOOy>j+nzxI;B zr&rGY+tyw_`1H!z|KDprF!=P!*?;%iD+ZrlIs2Eb{m9_cD`)>blTWXl{r9f@`0(}g z%Fd@(&i-FdUr(>>e0pW)(6M*NublnAneHF-%Fd@(R{s;j{gYnV`Si-pr&o49y|VM^m7Pzo?0kA< z=hG`YpI+Jd^vcesS9U(Vvh(Scolmdqe0pW)(6NqpxwYRIe0t^Ve|_!u2A^Iz z`#)TJqha@@SI+)zj=k&P(<^8HxMQ~sKD~1GpMUJD2A^Iz`#(MQ#>4JQubll&$DKa- z^vc=)%yIuT`1H!zfA+c;551LMIs1Qe{Kto0O0S&#xp&elXMcXZlU_Od^ZRV+m9sy8 zzLQ=#`}1{$=#{fSU)PpiIs5b9RiRhT{`_}6>6Np8&5rAaTuiT={nK|nbja28%GrPK zo{tQGVpg zFTL`#_xfJxbb6)J>6K2WS2~?u>2!Lf)9IB?r&l_iUg>mtrPJw^PN!EoonGm5dgZ9^ zUAbt_CByxfUOD@R>^f?=|I;gH|FRt)8XiCN%Gp1B`?}%p;?gT;fBw6U^vcj;F&pFa7XMcXbD!p>{=hq$Sm9szhNBZUH>-<2k9QC~`&;HF9 z{pP-2NUxmzYmfZF&`ar+vww%9?{W0Lucuee{!fqoxuLhxD`)@0W8O6Q^vc=)_Ax&h ze0t^V-)hZ)L+_u(y>j-~uh~5K^vc=au;$dk zr&rGYNo!6Ue0t^VpS6NX&();wv`t`eq z`xm{k^XZkHPp|BJdS&O+D?6WF+4=O!&Zk#)KE1N@>6M*Nuk3t!W#`i?JD*j-quGur(Kj@X6Pp_Q)Q`ek1d_BE#_P4LO|KQUrXMe|j*+w&rnzPp_Q)$FKSQ!KYWw{&Uv6c<||!vwzW=cMd+ia`vxU^QFP3 zSI+*g-uIAU_oY|P{vX}6Np8%(0t>-b$~W{msYi8hR(aa`xxm zNw1v!`SnhEmt zrPJw^PN!EoonHC>@pbQEmKF4!?zh*NXe3617bZ$mP!<#gMbS_cXhWbhWR$PkqA0`WpfAPMSV)M(Twaqx*T9^)|s;ndW- zo@YPx`|jV%`Xm3m-`XvKsO6?o2{KnPpO6$1NI$uW7uC$ITt>a4TxY9bVw2mvS<4Wtevi9}Kd(XP6eE;Ig+>bx_$nyPz5wIr+wuH+Ni_``Rfx zi%W53?l+(E^|Is2+>cs2VQurz$CbICyY}3&aAm18@u9NTf_*p4g5c3e5O_-K+i~UCjw^HjO8ocbe&yJXD`)qAD&JqYa%{(yV>_-K+i~UCjw{D@TsgMm%CQ|+ zj_tT|Y@ckna%{(yV>_-K+i~UCjw{D@Tsgacr~LQDm18@u%>Aot|Es(nSI+LYmK|5- z{`Ix*l^s{+{>`=TmmOE;{++cSmK|5-{x56)QFdIJ`@gTcIrQu9arZ5yT9$uW7uC$ITt>a4TxY9bVw2mvS<4Wte(mJlRjw`L>O6?o2eD+7& zmDX{kbzEs3S6auF)^VkETxlIwTE~^vaiw)!X&qNu$CcJ`W$o*e_nmch`ToU~xu1CO z|0>`AxH9)oANZT{^MfmMf6V?f%FiFJ%>6U_zBuE`+z;%1a{Zj58)jdhpW}!t^Y!_8 z9Jn&~d|y>unR~uJ4zA2Sf6ozD=AO^1;>z6fz9X*8J^hF;>pnfc;L6%Jp0i#4?(*hw z30LNRaAm18@u9NTf_ z*p4g5c3e5O_-K-6!KauAF`S^UC)Jt{mHO<=BoZ$97yfw&TjN z9aoO+xN>aAm18@u9NQ-wt{mHO<=BoZ$97yfw&Tj&pT7G1^4||vj_tTI_j6Z&r@S6l z=Kjpp-zz(=%>7xbFDN^%%>6m5FDg5(%>B1lFDyH*%>9DZSCt)C=Kh-1OUsTcbH8l$ z%Ch6i+^=8#a@lcZ?su&IMEQGFT$%fkryN&yT$%ehr~GEwab@mTopNp2ab@oN*M6nA z8CT|h?5U>~m*UFY&-sPt7MJ46+|!-7GWWdSi7Ru@=WKCh?)m$jxH9*AUm;wXd%mA7 zuFO3@M+H~ro}b@|D|5ei@0-eXC9cfO6$1NI$uW7uC$ITt>ent*C!un zuFU=9gS*Q2Kd#LEvj;v`etvLe?!UPIm&?x|uFU;!_I-WEmARk2_Zj8qpZk@$-@NBr z_5G-?pWX9w9C2m7K0l8GSLUAYtBNag&-cf{mAU8dIpWIP^LbTVnS0)M#Fe?HAMs_~ zr^g>$S^N6r3&(xqxXt4luFU-_C){$v=8h|KKkUR~PTbsaW$uS;eQ*e*ha%{(yV>_-K z+i~UCjw{D@TsgMm%CQ|+j_tT|Y{!*jJFXntapl;KE5~+RIl52AcU(F9`bqhFBV0MQ z_-K+i~UCjw{D@TsgMm%CQ|+j_tT|Y{!*jJFd+AM_cQEKU|sn zkGI~n{P)F`v-{o3jw^G&ZR_33jw^G&ed|w@9arXlmy_;Yc3heJJx;n`*>Pp=hn#d+ z*>Pp=4?AhG?6@-b6HnS+c3heJnJ4{f*>Pp=uQ=(Fvg69!zkJdyWyh7dKk?*el)pE{ zmAT(>^1X{|ab@lgK4q@B6IbT`Z>Ox69arX_?!=Y3=lxDxnR`BGiz{=_-|xhgx##-| z;mX|e{cLe%?)fuOw?`xR$>a>kW)pI+DDO6$1NI$uW7 zuC$ITt>a4TxY9bVw2mvS<4Wxtu6)@Q?n>*p(mJlRjw`L>O6$1NI$uW7 zuC$ITt>a4TxU%;3$p_E+So!|ter4{f2Om?u|8ZsR*B$tL`T4<>x$oP5cKP|kmAQXm z-z_t)%>8M5f1~{TmOY|#}QZN>+|zCaAofKzN)w~ z_k4dGT$y|Ro+GZzJ)c*_mAU7AM_ieE`Vn8&eR_Ptm9=l&?>zRq$8H`Mab@o39RJ+o zH+Ni_`&G-=miwi+GWY!_{7P{vuFUxH9*|bYT0pR?z>l> zP?k`-qsO-3MY{!+e`^Dw;xN>aAm18@u9NTf_*p4g5c3e5O_-K+i_*?7p%m;|H=4{D`#K-s`B3tSB~wta%{(yV>_-K+i~UCjw{D@TsgMm z%CQ|+j_tT|Y{!*jJFd+AMJx5+Kdv0xab@l=UU_x-?}saMf9c9=%Z@8^zi{PG%8n~@ zfBDKA%8n~@zj)Pp=UtGDR?6@-bJ67&f z{@xQ;=Dz#HGs})EbASJdpC~)7%stP$xH9*5ZoRzxy&bO1{V^x~QgJD+%>9CsFD@>{ zmAR)oab@m#zY|yHp3m9h%G~q!J8@<1`MyH9GWUExTU?oYevS&R%soH96IbT`&fS-n z>pEPS`=O^DHRH<+>7A=KlSClNnd$e)j%n?%%xrz?HfG^?@&y>tbA)`}Tv6 zE7#SyGWQRk^@(y_&i%@|Pp{i>rFC3s9amb%mDX{kbzEs3S6auF)^VkETxlIwTE~^v zai#VRS3cl!ccpb)X&qNu$CcJ`rFC3s9amb%mDX{kbzEs3S6auF)^VkETv@xhGWWIS z%G|F%@P+d8gDZ1?{Qf7GpFdog`wz)=KjxnZl7^w?!UkLkIM0f z`<1!>e~-R<{hXyw&+hp-j<_;kpP$EpD|65HRmGLL=lkQ}%G~q!9C2mt`MfHw%suZr z;>z69kNC3g)8iMetbKj*lSkkG=*{CQuFUz65KmH|U$CbH%`1n6BJFd+A?~cEaAm18@u%>9u3_dglmapmmmA6)+X z;mWZcSB~wta%{(yV>_-K+i~UCjw{D@TsgMm%CQ|+j_tT|Y{!+k|IG43%D;bHIkw}< z-0!!1Sb06J%>Dk$KVNoSnfuQzKdkJyGWQ2B&y^il=Kj#-g|g$y+#kMtLfLU;?kmgN z%8n~@-?e;t*>Pp==Pdtb*>Pp=7cIZO?6@-bFD-ww?6@-bZ71w5f3JxvbN_Na&$BeU ze|6=bi+gcpzW$J{4=V1&mAR)oab@m#zY|yHp3m9h%G~q!J8@<1`MyH9GWUExTU?oY zevS&R%soH96IbTGy6e&9x(rw5{+8YED%W+mGWYwO_Mc{4nfveV{iAYSi7Ruzb>Hp# zHm^_k{mR^bdH=cPx)xXF-d&md_JhATf9!2#$CbGsyR=$diz{_-K+i~UC zjw{D@TsgMm%CQ|+=KkiT`tNTt8Q*c`?CalM{{7?1u^m^A?YMGm$CYC{t{mHO<=BoZ z$97yfw&TjN9arZ5mZkXjchA1Rr~LcHmHGO&F8yiQab@mrTY6vFab@mrUwVJpab@n8 zEq$o$xH9+mEL~Z4T$%famOfT?T$%evmp)r|T$%d~OJ6EGuFUk2|#d zy&|s6eb;fnRCZjM`=1>5-^z|Fb3f+zQ_J5Q;>z5Abo||mJ8@<1mn^@%?A))+{mm!5 ztGEDC=6-Ph)5~=&uFU<01AkZUw{X8Q_ifFUxnJJySJr)c-GwWy<4Wte(mJlRjw`L> zO6$1NI$uW7uC$ITwQsocxc9j$t>a4TxY9bVw2mvS<4Wte(mJlRjw`L> zO6$1NIJ>ORqSLUAYkAo|7&);*zmAU8hs<<-uyzhuBb5B3w%eqgG zf4H*tjpuBS{O*yP$8}tp`#l!!TU?4Ob3gIu?d5(cuFU;!kN*3zyLS7*>Pp=*Bx_n*>Pp=w;uEFWyh7d-*L=+7B~O@$CbI?d+{M<$CbGsx_DICab@m@ zEgn;LT$%er7njP8D|6qnxLkHznfnooD`m%(xgQxjuAJRZDzC?tV>_-K+i~UCjw{D@ zT$%g)V*TgCm18@u9NTf_*p4g5c3e5SPsVp#Ire&7Ikw}h^UIDabH8x$lCtB<-2ZIxy0YWS-0yPi zPnEwH#Fe>kKX!N7ab@lo9sByS=AQRE zab@oLoGq@*J%7IwSLUAYD}*a^&-b&%mAU8VsNl-n^Yc4#W$usL@yq492v_F*$(=Wq z>ndEC`%$}A%5@p8%>BRaervg|!a4TxY9bVw2mvS<4Wte z(mJlRjw`L>O6$1NI%G}eB__FTP<0G!DeSLDq5l=f}^Spp7 zbN{2GUUSsujw^Hj`23CYn>((|{lgFc^M`NlxH9+oh2`Q}T$%fUg(sICSLXh^3oj`< zuFUaAm18@u9NTea z?pMV>ANMQAc3e5TUt9kD_;#-9J_S`Ecdfjw{D@TsgMm%CQ|+ z=Khg|`p<_ebH94wGv%KjSB~wtGWU-!Twh*~D|5eg;fAu~%G^J@@VT<%%G_^S`1`Ws z%H029;k#wWmAU_5;f}K7%G?h<`tb7idbl$8|9tf6Wyh7d|JS46R(4#O`+bgiNcnp^ zT$%fOj`>L0ab@m*xA>jnT3ng?RmWaaT#74mPj}+V-1B}XuFO53v&EIU=kIso%G~pP zg>Yr=`F^&zGWYx(67&2|KD<5gDZ3Y&pS>p*G0H8_dnZtUAeBpmAP-( zbzHeF!$uW7uC$ITt>a4TxY9bVw2mvS<4WteQu~H0cfZSB zX&qNu$CcJ`rFC3s9amb%mDX{kbzEs3S6auF)^VkETxlIw)^4uMJ-`2PW$xXTxu4PQ zSLWVbnfq_<{r&Ru&;82W|9#KB%JBnN=KjacmAU`Su7{T67p~0x^*i5Pj(@l^_oH^4 zP>!FtGWU0Ezp@;Eab@mXw{5SVGj;Xso}c50EA#dFc^tSh_k3SfT$y{mKMtC{=KiuHUtR8( z;>z5QIO@3KR$Q6;1xH;}c3heJ^+)~Bvg69!|K+IvC_Apq{XX*#E-uEExj$_F*s|lw z+>f4LEjzBveP#YpWyh7dug*WZ?6@-bQ|EV=9arZ5i1|Hb$Cb1D_;#-A^z7{&D5ljw{D@ zTsgMm%CQ|+&hC#d|9rS|Y{!+e`~LEJTsgMm%CQ|+=KkpU`sd@y+#fT4M)}{zmAUVk zKeOz(GWUJ+XO|sU=6-Pg>1D^2x&N2>=ad~+=KkCBFD*N+%>A|V|E=t}GWVz529P_y1 zPF$ILx)WFCp7%R(W$yW$Ew0Qxf4>t~=AQ2>ge!B;_p`;7x##Do;L6sxh}$$xqooyHRZYrSLXinyB2qCp1*Nr?yuVY#u-=U z-d&mdbN9ZmTvu|xGWYJv+@G-jS7+{5=H6YIdtO)L%G|pv>ps0M!j;x>rFC3s9amb% zmDX{kbzEs3S6auF)^VkETxlIwTE~^zH(Yu1W$sGrxY9bVw2mvS<4Wte(mJlRjw`L> zO6$1NI$tLZb7k)N{f{ei@2GZ7nGlWT$%fA zdwz1pmASus_n(yG5BDo`f55IS<@kjwbAR*B_m|@zuFUL)$-Dj=#7v z_wCzum*Y40D|7!JYuBx99$#@~?)f>6xH9+rJPur$d%mwKuFQSrd7lr=?)iI;xH4a# z&#U6f-1EL8uFO6Ch%f6tJ-*^f>v*#E^~srsKec!iPv-vWEpOSf`R^M~=6>1{XO{b@ zcry2|9C2&e@nr5t&#e~k;>p~fI(L5A@nr7*_uL!Gjwf?}>)Z#+jwf^f;M_H3$CJ5V zJ@;2-$CJ5VJ9ksr@nr6wnfqed@#O6OwX);Mu^mt5e%)MsJ)Ruf@nr7T$LsOr*p4T2 z|EqXCo*dipWbQY{>+$5+jweU=$@q>Z$6k*o$96n9yMMj>_rsH8JD!}~zgb?7C&zX? zIlF(WydF=E?Rau_zoon$Pmb+)GWVP3>g(}j?q8m}wfy;bGWV~~{h;i4GWT2OZZA8Y z%>DMcdzQZs!;`uH#F6(aJD$w_up^HuJD$va^~fD%$CJ7L%8}=m9Z%-|&Lb}`JNGGb zzuQrVl)q2IlexeBsP~s0Pv-u*@GhRr{lhG@i`8d$R7+>m5949Zy=vlh*O1bv$VuPg=*5 z*72luJZT+ITE~;t@uYP;seQwfPrKATX&p~m$CK9aq;))L9Zy=vlh*O1bv$VuPg=*5 z*72luJZT+I)^486J-`3)WbWOQxpzbH{!|M^Ep*KnS0)E#FKTO9$)dKbv$VuM_R{^)^TI) z>yuwU{CUNtxH0#u5C2Trabxa3IQ)*XB&Rabxah z#f}?u|K-?mWA0Ck9XICwq}Xxe*p3@>KRaH}eaNvLH_qEiWiLZp{7nwp>_t+?e|-wp>zn+?e~@x4ggXxH0$ZxBSnt{cA`3bJ=lY?r)m=)8b;>nESa$o?qOF8*@MVsB?=eabxc3O5B)x-p9m^ zx##nK zcQ@wV-I#k`cjCs}yBl-wZp=Nen{i|A-HmmhUf1A8>$uT6ZnTaYt>Z@PxY0Upw2m9C z<3{Va(K>FljvKAxM(rDJ{MWa+8?EC;>$uT6ZnTaYt>Z@PxY0Upw2m9C<3{Va(K>Fl zjvKAx#@fw|x##ykZp^*AG57Aq-1FxbH|E~mnEUN}?p^-giRW8$f5qi=AQQz@nhYm$6x$t9Y0#fkJj;{b=+tjFIvZm*72crTxcB+TE~Ib@t<|vXC3cZ z$9dNAopoGi9nV?Ean|vhb=+nhuUW@w+9%#|nSDJTvyQ{8<1g#D%R1h&j$u4}Ub2pptm7l=xX3yls(pR(z{9tczmLH~xu0|RZpW|L%E-{V@Elkbq-aV9i_fYP6 zJ%xvI?;gs%dnot39>hbrcMsKldOpTO*71;aJY*dYS;s@x@sM>qWE~G#$3xcfkaav{ z9S>Q@L)tey^apQo4_U`U*71;aJY*dYS;s@x@sM>qWE~G#$3xcfkaav{9S>Q@L$#ZS za?kI7Jd}I)Q10DBx#!O>9?HFYDEIE6+`ETz?;gs%dnotgn}>40di!6N<1Ze{{juAA zsT{xYQ0|{w`-gJ;$3wXvSpC&<{=h@I|KrwwnekBW`FZqsDEItaK|GXuem(>q%01ub z6A$H{@7IEda?jtp!$Y~}bCh_f?$hHh9v+gI9qWE~G#$3xcfkaav{9S>Q@LDun)b=*_?`s8;Ge{pdW z?#Vq}gnM$&`$)Ja_k2DP_vD_x4~Khl&-Y=$J-O%mf8w6p^K&O~Pwx47hqx#A%T_+T zvUwi`_vC($lkPX;p4@+X^}=%A!accvbM5=(yoY;o-@oli<-Cb|a{tu!&zJKq?#X@Y zjz`Y8C--;kylTchxp(*E-rbXXcTeu!J-O#~6Yj~qyC?VVp4{`g5BKEW-Bb7Jc^CIs z$350@k9FK*9rswrJ=SrLb=+ee_gKe0)^U$@++!X0Xy0(pPrb?AV;%Qc$350@k9FK* z9rswrJ=SrLb=+ee_gKe0)^U$@++!X0)Nby{J-`2PPww44xp(*Eo;GW#`eJF8H z?)iQqxF`4g{V?29_v!H$_gKe0)^U$@++!X0SjRoqagTM}V;%Qc$350@k9FK*9rswr zJ=SrLb=+ee_gKe0)^U$@++!X0SjRoqagX+icidxNk9(}+9_zTrI_|NKd#vLg>$t}{ z?y-)0tm7W*xW_u~v5tGJ;~wj{$2#t@j(e=*9_zTrI_|NKcWPgs z&gzTG`3mpk{`Ix*mGd3m$^G%$o>4v5t4F;~ndG z$2#7zj(4o%9qV|*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0KyLl(~{Qk!~xp(j6-o2B1{`}&d+`D&j@7~G1dnfnqo!q;3azA0m zBWApl`^UH6SdPEk=gIvSw>_a8zwu7)H?MuG9RKl7?oV2MRylv*o!q~-^~W>b$^E>Q zKP=}jyp#L-@jqEV$MplVdwz~L-pSYJ=dt0P-1B|)@lNjf{)l)d_k6z#ypwzWUK8%A z`}FvXd#vLg>$t}{?y-)0tm7W*xW_u~v5tGJ;~wj{$2#t@j(e=*9_zTrI_|NKd#vLg z>$t}{?y-)0tm7W-6Ysdkz8?2j$350@k9FK*9rswrJ=SrLb=+ee_gKe0)^U$@++!X0 zSjRoqagTM}V;%Qc$350@k9FK*9rx6}KFR0ja8K^}`$o7Y_k14<+>?90ZzAr=J>Rb% z_vD_R6Nh_p&(9~vJ-I)0d7&KlaZm0Sue`0CH*inxw{QK48TaJ=tkoBk^A_&O{i|!Y zmh&F&$$j6pv&wlB_vC)f_P;IXUGDSbe&UYp<-E=FZMk38+>?8EPww44xp(*E-rbXX zUN_;M+`D^n@9xPxulsOM?%h3gpPpB7k9FK*9rswrJ=SrLb=+ee_gKe0)^U$@++!X0 zSjRoqagX*5_Z;~;caL@4V;%Qc$350@k9FK*9rswrJ=SrLb=+ee_gKe0)^U$@+*7-` zC-?mR$33}s_vGH)lY9RB;-1{QdvfpY$-TQL_wJtDyL)o)?#aEoC-?52+`qW??Q;Cb zJ-I(+^}KTaz&*Ktf9q{C?#camD=#VMFWi&+-IwoM&VStJ$^F8m*Dh^7=YV^1&(E30 zJ-O%Sh2fsu^L^iOPwx3Xez+(1e7^?VQ}^ld8TVMnJ=SrLb=+ee_gKe0)^U$@++!X0 zSjRoqagTM}V;%Qc$350@k9FK*9rswrJ=SrLb=+ee_gKe0+9%#|k9|Gvv5tGJ;~wj{ z$2#t@j(e=*9_zTrI_|NKd#vLg>$t}{?y-)0tm7W*xW_u~v5tGJ;~wj{$2#t*efIZ? za8K^}J`A`g_k4dp+>?90pFHl#JwL|`_vD_RpN)HR|IpIM%5fX_`q=SAVaZw{TDHUtRlO<-CV`a_{cRy}Kv(?w;JcdvfpY$-TQL z_wJtDyL)oa>n7Zjdv{On-95SIbsz4@y}PIG)AK6sv5tGJ;~wj{$2#t@j(e=*9_zTr zI_|NKd#vLg>$t}{?$N&Co)5p)-D4g1SjRoqagTM}V;%Qc$350@k9FK*9rswrJ=SrL zb=+ee_tb9g$vwaSaZm2uJ-K)HY&rko zp4?x#^u}`j#67v+d+{NQn=ZmVx##B~@B?)m=YxF`2~A3EGq_v!H&_gKe0 z)^U$@++!X0SjRoqagTM}V;%Qc$350@k9FK*9rswrJ=SrLb=+ee_gKe0)^U$@++!X0 zSjRouC*E<7eLe26j(e=*9_zTrI_|NKd#vLg>$t}{?y-)0tm7W*xW_u~v5tGJ;~wj{ z$2#t@j(e=*9_zTrI_|NKcWPgsGv3Ml+|}PH=PSIE`&ZV!Q_gpI zC-=SE&MfCk?(^h+&Gx^ZxzCe(_fGEJJGpo7G>4zSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?`Yrf&h}Tk zcdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%o!ZSix##yk-pRdtC-?51 z-1Fxb@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGCV*m}o|cXEHh%FE07 z3-9FqQ_Bx1=RdrY`)ilpR?eSzC-*}ak1FS1yp#Jo7cO7e^bp?3JwKlp@8q7Jw}f|c z&-c~FJ9VEPpYe`$yki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq> z*71&Yyki~jSjRio@s4%8qkZBX@7UMl9qV|v+dH-m#8%tm7T)c*i>4 zv5t4F;~ndG$2#7zj(4o%9qV|v*U3^+~=@H{QuTKmQ5un*&JGtL~`RB{=9`EG-(v{bi^9A0?{l{DHI^&(( zpT7G18SmuYy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7BJ+Jrh zPVU`1b)TM3@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71(^4e#9WO81U+ zyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-Yu%c_;V${>MAHckkrhy_0+X z{NkP5yLWQ$-pRdtC-?51+`D&j@7~G1dnfnqo!r0N?(gLOwAJU9^9T2La{poTPVRrO z@``f)!aKR&XZg@_{=+-Dzi#Q$a{k0SxgWN8OgaDJo!sBMaAi4vv+dH-m#8%tm7T)c*i>4v5t4F;~ndG z$2#7zj(4o%9qV|v%`|#5>-xug5#q@s4%8V;%2U$2->Xj&;0a9q(Aj zJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->XPVMWH{M;hElY4$1F5b!g z;QZ6e@ec3ge(k~y<#>sAaz9~lM>*c&o!sBP^!{?Z#yh#+Z~3rtyvIAazj)=<<$Qs6 za{tlR$&7b$@7~G%D{KEWbAKoI?w#DbcXIFE$-R3g_wJqCyLWQ$-pRdtC-=Nw!aKQl z@8sUSlY3t8;ho&Ocj`VppW+?sc*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|fcJof|`TdV~ za_`>By?ZD3{Q1Q@xp(j6-o2B1_fGEJJGpo7MT)C*6zwl1(KfV0Ga{j|RxnHt$Svh~=o!lR~xKz%+cqjJ{E_}3{zwu7)EAx*k z=YPDD`v>Q)ncMUb-pM^b_Z08ceR_PxJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71(^iFdqXUypaJ;~ndG$2#7zj(4o% z9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%o!ZwY`8lq5 zC-+JRvMJul==L@`(`@c2s*71&Yyki~j zSjRio@s4%8V;%2k-|)^Yf9&3|j(4o%9qV|v+dH-m#8%tm7T)c*i>4 zv5t3YH}B-0-~V_g_wJqCyLWQWpI^L_d-qQ6-8;E=@8sUSlY940?%g}Nckkrhy_0+Q zPVU`1xp(j6-o2B1_fGC_Sb9e}f8w3ow=6D~^Do}X{qlv6mGd{=$$fSH(dGP)cXGda z?yt)A1K!E~v0KjAvgskbQ}^ld8ShxfJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>+9%%ej(t7ev5t4F;~ndG$2#7zj(4o% z9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(2KbpPaYl1?6~y zcXI#w+z-m}3h(5;Xa3A`yu&-WU%l{|a=gSlxgWE5YB}EGo!sBL^rz)`jdybI-pRdt zC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXIFE$vv-^@J{aCJGpo74v5t4F;~ndG$2#7zj(4o%9qV{U`-XSUztFv7 z9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%3*Zr;f~zyI-0?%g}Nckkq$ zKfib<_wJqCyLWQ$-pRdtC-?51+`D&j@7~G1dnfnqo!q;3a_`>B{e>$Rm%p#${!Z@q zU4Bsc`#$dPD4GpE|$0od5Ao?$^%URIVTJ zPVT2~d1AT#z&mxH9-r}!b-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a z9q(AjJJ#`zb-ZI8?^wq>*71&YyrX^M9q-uJ;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|f_Vvj#wmh#KZ}3j;U!J?Q z9IxPVU`1xgWi_R*tuLC-=83y{8Xj&;0a9q(AjJJ#`z_6_e$Uh3Ylj(4o% z9qV|v+dH-m#8%tm7T)c*i>4v5t3YH}B-0-~V_g_wJqCyLWQWpI^L_ zd-qQ6-8;E=@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGC_YTn8H$mX5g zuWa7Q{Sotf%K0DfXj&;0a9q(Aj zJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(wLc*i^T^?1iR z-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T) zc*i>4seR*fdbXTbjyHHG_nYT#DaR|kll!CR_m|@x-pTzV3!f@~Kg9i=+>c&do$*fY zZ&`ZxjCXSH-pRdtC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXIFE$vv-^ z@J{aCJGpo74v5t4F;~ndG$2#7zj(4o% z9qV{U`-XScU*g`ej(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t3YH}B-0 z-~V_g_wJqCyLWQWpI^L_d-qQ6-8;E=@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6 z-o2B1_fGC_T6$MGe{z2(_ahfiD(7GB@8o{v!Zqdm&HbI+A2I*9a{k9VxqoKvYvuX@ z@8o{QmUGMX2i~ds^!SW-tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ni2?|8?)9`9JkJJ#`zb-ZI8?^wq>*71&Yyki~j zSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>wXaXkZr;iL#^#;ecQo(h zepT~M?(@w%xxcx2C-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXIFE$-R3g z_wJqC^Lh#Iv+dH-m#8%tm7T)c*i>4v5t4F z;~ndG$2#7zj(4v+dH-m#8%tm7T) zc&B#rPVV{rk9TtK-pRdtC-?mM#XGro@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6 z-o2B1_fGEJJGpo7Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2kpLoYR_Vswj zI^MC4cdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-l^TZlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7*71&Yyki~j zSjRio@s4%8V;%2U$2->Xj&;0a9q(x0@Xld(;vMUF$2#7zj(4o%9qV|v+dH-m#8%tm7T)c&B#rPVV{rk9TtK-pRdtC-?mM#XGro@8sUSlY940?%g}Nckkrh zy_0+QPVU`1xp(j6-o2B1_fGEJJGpo74v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4F z;~ndG$2#88KJkus?CbH4b-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a z9q(AjJJ#`zb-ZI8?^wq>*71&Yyi+^g`HgZvndjMZzj5wc<$g5Jv*q5slY940?%g}N zckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7Xj&;0a9q(AjJJ#`z z_6_g6_r?A^n{~Wn9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8Q@eR5_x%3H zJGpo7By?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$-pRdtC-?51 z+`D&j@7~G1dnfnqo!q;3a_`>B{b2J>-KWQAyki~jSjRio@s4%8V;%2U$2->Xj&;0a z9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2kpLoYR_VswjI^MC4cdX+b z>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-l^TZ zlY940?mOlmU!LFP_jhvd-pRdtC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#Db zcXIFE$-R3g_wJqCyLWQW>m|ICd-qQ6-8;GG^&Z~Iy?dwb)AK3bv5t4F;~ndG$2#7z zj(4o%9qV|v+dH-qF6{om1|_JJ#`zb-ZI8?^wq>*71&Yyki~jSjRio z@s4%8V;%2U$2->XPVMHM-1GY%@8sUSlY940?)meJcXIFE$-R3g_wJqCyLWQ$-pRdt zC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXIFE$^H6ve<$}dn|JCyJwD?d z>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8% ztm7T)ct`uhJKnLc$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0a9q(AjJJ#_|?Re+eGxv9Lzj5xHGxv9L@7~G1dnfnqo!q;3a_`>B zy?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$-pRdtC-?51+`D&j@7~Ehub1#n?%g}Nckkq$ z*L!#;_wJp#PtT`#$2#7zj(4o%9qV|v+dH-m#8%tm7T)ct`t&cmCo< zet*Y0-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|ypwx=|Kpw9yLWQ$ z-pM_Ge(_H3-8;E=@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7 zX zj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8qkZBX@7UMl9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v*Sj zyz{IX@8sUSllzYO(`WAQpa_`>By?ZD3yxzk*xp(i>eR@8{ zJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2;0LymQ8#c*i>4v5t4F;~ndG z$2#7zj(4o%9qV|v+dH-l^TZlY4&u4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ni2?|8?)9`9JkJJ#`zb-ZI8?^wq>*71&Yyki~j zSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>wd0*%pYcxaH_m;1=KfCZ z-8;E=@8q7xTfCEd_fGEJJGpo7*71&Yyki~j zSjRio@s4%8V;%2k-|)`2FYx<2*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(Aj zJJ#_|?dF}_^ZOs~By?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$ z-pRdtC-?51+`D&j@7~G1dnfli|Kgq8yLWPbRJ*^Ed-qQ6Pi)?)`}FvXcdX+b>v+dH z-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tWWN& zPyFlgj{P}!$NIPLq~jg?dc0#D?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a z9q(AjJJ#`zb-ZI8?^wq>wd0*<&Uh#H?w#DbcXIFE$vuy^cqjMno!q;3a_`>By?ZD3 z?w#DbcXIFE$-R3g_wJqCyLWQ$-pRdtC-?51+`D&j&+8?;lY940?%g}N=k*@m$-R50 z?$h%r-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|mUj&;0a z9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@lNgLo!s;LAMfPey_0+QPVV{hi+6JG z-pRdtC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXIFE$-R3g_dNgNo!q;3 za_`>B{l<2GC-)~c@6>&Ie8xN0@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq> z*71&Yyki~jSjRio@s4%8V;%2U$2-<1ch)EV^?1kr9K2)w+jr9Oj(t7ev5t4F;~ndG z$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4Fv+dH-m#8%tm7T) zc*i>4v5t4F;~ndG$2#88zTus_+=+Lr;~ndG$2#7zj(4o%9qV|v+dH z-m#8%tmB>9%{#g0_dnjry?ZD3?w#E8=NIqf-o2B1_fGEJJGpo7Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio z@s9S1cf4a?k9Vx&9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7z zj(4o%9qV|*71&Yyki~jSjRio@s4%8V;%2U$2->Xj`j`jOzy-x*71&Yyki~j zSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#_|?dy}v&-&O|>yydkt{eY1x!caao89yK zAMfPrZ#Z!Cfz8*S{rTDb3HzV6e{=ut-_Gv&^NV-#&wtL|7wp}9{oQYv-S60Q@6$H- z*IYllU$pymyEpfTUN^hv@#}q`p4~6odBx7n*Prs|v-^oV9`!(Bd+`hU0 z(#L1_?w$Pq|0`>^tZlyj*&msGefLhjzI!M43sx>(+5Gb#aQW4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4(LV8x zckJu&j&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a z9q(AjJJ#`zb-YtM-Z^*X{!Z?Byuv%V=kbpBqs~2#m%Lv=?s>e$JGtla`T@(cdmis! zwlcft`Qo;%vwNOzp1nG|=lSXzYqNWv?|y09?4IY#>$cDCdA>bm$LyZx>-X)P-Sd3^ z&|R~8UN5|6_w1h68+Si#cF*gT=kJ}}^LppI`)2pNUcx*1-#4$fZaOf#=k?mogR^^H z@8O;N^YeP~=qKeqJ)h#8`nqYyJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2k z$2*gIY+QYdp0`+x9G?D_LEcqjJ!`5U|wd;a_m-ibYb{s-^Gp2v^DJF(~S zXYfw!dHfo@6MG*22Jgh4$Irn#vFGu3@J{S`{Qkz(`F*`U$>aavop^noKW@8n_Vs!G zdD#`Sd!D}r@5G;<=fA-_vFG`7@J{S`{vEs%d!D~{zialNFVFusUpBkv^~2zu`1AAn z<6qyFub&=I2Je*DP5a;->4SHq58jbJct`r+9qEI2qz~SaK6pp^;2r6Mccc&Akv@1w z`rsYugLkA4-jP0dNBZC$>4SHq58jbJct`r+9qTwn`rsYugLkA4-jP0dNBZC$>4SHq z58jbJct`r+9qEI2qz~SaK6pp^;2r6Mccc&Akv@1w`rsYugLkA4-jP0dNBZC$>4SHq z58f$Vy%T#LuLkeLp2xevJF(~Sa_~;@J{S`z8Sm| zd!DZb@5G+xyTLoL=lOE*PV9NU9lR5Jp05Y*#GdE-!8@_%^}^tt*ztW&$CG%o@bLj zJkKV5c%DuA@I0IJ;dwUc!}Dy?hv(U(56`nnAD(BEK0MD>I^Oxj%>AAE?{$5W-~Yq& zZ1MWMKZci^4e^ZH?Uo-O|Te4ZZf)Yngs&%^U<<#p3OJkKV5c%DuA@I0IJ z;dwUc!}Dy?hv(U(56`nnAD(BEK0MDReR!TtI^MB=KX}JF-myMB&nAEV@I0IJzj%@V zIm7d8^7VMf{&$Dx+2reo=h>v=9s6@O{&G$G@I0IRIm7d8((#V{`NQ*U^7X^>Y|@A4 z*`yE8vq{H0_P>jFtm7T)!}DzN=MT@bNgtkPlRiApCVhCGP5SUWoAlv%HtECjY|@A4 z*`yE8vq>MGXOliW&nA6%o~`utNj^V&^IZOWU7zIfYIvS4UZ2nJ;+^{6Wqp#*|Kgq8 z^LRTv&lZ1vK7WjN^7Z-rGTzBOpMSBJ)a-PJGtlc=XfXg ze10A8`UcXH3?_wi2ddA&3|&ldlE^Y;hvPQE^W{{Zjgp4WTB z^K9|we<+>@;{Hy3{q(#!JkM5MH|@joY|@A4*`yE8vq>MGXOliW&nA6%o=y7jJe&04 zc{b_8^K8tW&$CG%o@cYZ;hpoP;~ndG$2#7zj(4o%9qV|v+dH z-m#8%tm7T)c&B#rPVV{rk9TtK-pRdtC-?mM#XGro@8sUSlY940?%g}Nckkrhy_0+Q zPVU`1xp(j6-o2B1_fGEJJGpo74 zv5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)f3e{m>v+dH-m#8% ztm7T)ct`uhJKnLc$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0a9q(AjJJ#_|?dF}_^LT}Ka_`>By?ZD3Jl^7++`D&j@7~G1dnfnq zo!q;3a_`>By?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$-pM_$m+(&R-8;E=@8q7>dw3`J z?wz_%&!>3DI^MC4cdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndGNBf3%zI`X&v5t4F z;~ndG$2#7zj(4o%9qV|v+dH-m#8%YB%rXp5Om?C-?51+`D&j&!1ns zlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7Xj`hig zcdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#88KJkus?CbH4b-ZI8?^wq>*71&Y zyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyi@!7B;Ws@ z`#ZVk`{(1G+`D&j@7~EhkGFUy_wJqCyLWQ$-pRdtC-?51+`D&j@7~G1dnfnqo!q;3 za_`>By?ZD3?w#DbcXH3`CA^b+_fGEJJGtle9^T2ld#CQx^C{l3j(4o%9qV|v+dH-m#8%tm7T)c*i>4(Z1oGGwyPajmHZ%&NMT>zhfQmSjRio@s4%8V;%2U z$2->Xj&;0a9q(AjJJ#`zb-ZI8@6>MI$vwaS@lNjDJGpo7B zy?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$-pRdtC-?51+`D&j&+{+d$-R3g_wJqCyLWQW z&;P?ab)O!e@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZJJvf&-;c*i>4v5t4F;~ndG z$2#7zj(4o%9qV|Xj&;0a9q(Aj zJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%3*zCOv%H^w`;ckkq$pRdgGY`J&u z*71&Yyki~jSjRio@s4%8V;%2U$2->X zj&;0a9q(x0@XlY{iFd5y9qV|v+dH-m#8%tm7T)c*i>4v5t4F4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4 zv5t4NPrTzD`+B@%9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->X zj&;0a9q(AjJJ#`zb-ZI8@6^6NIjg-tTkhA#=Y?^9C-?51+`D&j&*LrL$-R3g_wJqC zyLWQ$-pRdtC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#E8dI|63-o2B1_fGD4 zy@z*l@7}5V^n8kUtm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c&B#rPVV{rk9TtK-pRdt zC-?mM#XGro@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo74 zv5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4v5t4F;~ndG zNBhJ(-m$O8JJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(Aj zJJ#`zb-ZI8?^wq>*6~j5>ytB^cXIFE$^8-W{`=hD$^FWB|9;-DAon8|Pb$Y-ypwzP zPVU`1xp(j6-o2B1_fGEJJGpo7*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(x0 z@XmYh#5>mUj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@lNgLo!s;LAMfPe zy_0+QPVV{hi+6JG-pRdtC-?51+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXIFE z$-R3g_wJqCyLWQ$-pT#Oxo^$f-^u;#Ex$42ow`qt&v?f=-m#8%tm7T)c*i>4v5t4F z;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4(LV8xckJu&j&;0a z9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`z zb-Yvi`s85qPVU#W`#ZUJ@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJ zJGpo7OL!;u?w#DbcXH3`J-m~9_fFlX=Tp369q(AjJJ#`z zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8qkY3WhuzKZ?^wq>*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0a9q(AjJGGm4a?kI7ypwzPPVU`1x#!O>-pRdtC-?51+`D&j@7~G1 zdnfnqo!q;3a_`>By?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$-pPH({QjByJGpo7*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq> z*71&Yyki~jSjRisC*JXneLdc>j(4o%9qV|v+dH-m#8%tm7T)c*i>4 zv5t4F;~ndG$2#7zj(4o%9qV|By?ZD3?w#DbcXIFE$-R3g_wJqCyLWQW>m|ICd-qQ6-8;GG z^&Z~Iy?dwb)AK3bv5t4F;~ndG$2#7zj(4o%9qV|v+dH-qF6{ombw8 zcdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%o!ZSix##yk-pRdtC-?51 z-1Fxb@8sUSlY940?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7v+dH-m#8% ztm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2+yJ zPtIuG$^A3!{!Z@QJGpo7Xj&;0a9q(Aj zJJ#`zb-ZI8?^wq>*71&Yyki~jXy5S8`ki>kI^MC4cdX+b>v+dH-m#8%tm7T)c*i>4 zv5t4F;~ndG$2#7r-Mo`~e*fd0+`D&j@7~Ehe}3^!?%g}Nckkrhy_0+QPVU`1xp(j6 z-o2B1_fGEJJGpo7X zj&;0a9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(Aj zJK87S@s52x-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH z-m#8%tm7T)c*i>4v5t3YH}B-$y_0+QPVU`1xp(j6-o2B1_fGEJJGpo7&IKE*rM z@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>+Bdv2xw}8lW*zTX$2->Xj&;0a z9q(AjJJ#`zb-ZI8?^wq>*71&Yyki~j)NbC%J-`3)PVU`1xp(j6oBy?ZD3?w#DbcXIFE$-R3g_wJqC-?H@XrOo#fIPQJ3|NV|` z?^lqo|44hkg4`e7o@dMb=5~K4_jB6)ow`qt&v?f=-m#8%tm7T)c*i>4v5t4F;~ndG z$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4(LV8xckJu&j&;0a9q(Aj zJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-YtM z-g!#7pUnGF=l+?wFP8h!ygys+kC@+6p5NvD3Ua@4;S=TkU3kBO+>cybnR&m0+~2hH z&T_nd!1CXj&;0a z9q(AjJK8tAbN)TuJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U$2->XPVMHM z-1GY%@8sUSlY940?)meJcXIFE$-R3g_wJqCyLWQ$-pRdtC-?51+`D&j@7~G1dnfnq zo!q;3a_`>B{VhxHDd$hTll#$&YvugQ`?KYK^}=V$`J4A=%l$F)XO#0l@6VR|m*;LR z*AKiOb?(pD^1O2W!TV9yeR_PxJJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8V;%2U z$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*71(^iFdqXUypaJ;~ndG$2#7zj(4o%9qV|< zI^MC4cdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndG$2#7zj(4o%o!ZwYr*C;;Io{x% z+^?OxsT{BHPVT49?=HtXyp#JC%{#dt(Y%xU8=H4>@7~G1dnfnqo!q;3a_`>By?ZD3 z?w#DbcXIFE$-R3g_wJqCyLWQ$-pM_$m+(&R-8;E=@8q7>dw3`J?wz_%&!>3DI^MC4 zcdX+b>v+dH-m#8%tm7T)c*i>4v5t4F;~ndGNBf3%Zn>9x$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4solJjdw&1po!q;3a_`>BJ%4`jPVU`1xp(j6-o2B1 z_fGEJJGpo7*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq> z*71(^iFdqXUypaJ;~ndG$2#7zj(4o%9qV|v+dH-m#8%tm7T)c*i>4 zv5t4F;~ndG$2#7zj(4o%o!ZwYkKJ-cIo{x%+^?Sdt8%=;JGrmUKe`<6@J{ZRFMO>0 z{Sfzea^JGJT#mQAA9e0;Sb9e}UUPpZ_n%&VU^(8uY-M(T;mSqjd~w^>*}Z!w|NQQq z+`D&j@7~G1dnfnqo!q;3a_`>By?ZD3?w#DbcXH3`CA^b+_fGEJJGtle9^T2ld#CQx z^C{l3j(4o%9qV|v+dH-m#8%tm7T)c*i>4(Z1oGGwv+dH-m#8%YB%rXp5Om?C-?51+`D&j&!1nslY940 z?%g}Nckkrhy_0+QPVU`1xp(j6-o2B1_fGEJJGpo7tP zx0UlR_jhvt_`>z&{LTHH-1p6&UC#e_C-+*71&Yyki~jSjRio@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`z zb-bf};vMhU*W(@Qc*i>4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8% ztm7T)c*i>4v5t4F;~ndGr}p*9Be$GZjyHHG_YclpQ;t`7C-;^4N0s9p-pT!g3m+}V zOT3f&Ll>9I@fPpoe#z2h<#>&Ea_`>By?ZD3?w#DbcXIFE$-R3g_wJqCyLWQ$-pRdt zC-?51+`D&j@7~Ehub1#n?%g}Nckkq$*L!#;_wJp#PtT`#$2#7zj(4o%9qV|v+dH-m#8%tm7T)ct`t&cW(G;_l|YEV;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8 z?^wq>*71&Yyi>b*C-?mR$2+-q@8sUSlY9RB;+@>PcXIFE$-R3g_wJqCyLWQ$-pRdt zC-?51+`D&jfBNe4S2yp!+;-*czrP=Cot(6}zwCt@3(wd`TIWZ z@8tgWrT3TfC*H~ZgvA}@{EK&Tzjon4v5t4F;~ndG$2#7zj(4o%9qV|v+dH-m#8% ztm7T)c*i>4v5t4F;~ndGNBhJ(-m$O8JJ#`zb-ZI8?^wq>*71&Yyki~jSjRio@s4%8 zV;%2U$2->Xj&;0a9q(AjJJ#`zb-ZI8?^wq>*6~j5>yzWQoLY`IcqjL_&V6vkJGmb{ zzgmuWcqjMwE?ilTmv|@l!xoPz$6LIU`|Fl2EyruTlly&^4=u-g?(gLO2P>~A=L_!d z&IKE*rM@s4%8V;%2U$2->Xj&;0a9q(AjJJ#`z zb-ZI8?^wq>+Bdwj{b$@e*71&Yyki~jSjRio@s4%8WBvaS_V!VB7UaG5Zo#UR!a*$- zZRI-#LLh{|Fc1d9$Pf~SK%8VUL~1Rfp!Ey1YPCwOVqc3|Z55Sj>n9$uij<-pRIDgV zkJ_RZKM_-Z4(^7^ioP(>uoL9pm(laeBu%yD=^f+rj&XX&IK5+>-Z4(^7^ioP(>uoL z9pm(laeBu%yEsHo%HWneQkNaq<7Nqx8|_&eoOD9f5Y0hm-lOWC;hLldt`aPr+3o7Wc{nl z@q*q-|D&BoB~{dn)B&(|-#lYYE+(vSB}`tjaLKi)g($9pIJc<-bi z@16AHy_0^tchX-p@xpTa;QUVdpKjP=&^zfbU;kI-_(kue|IKv=l;a=0lm2~cuP?_> zdMEv@{Y%*&^iK85@6Ys( zaeBu%yc$9pIJ zc<-doy+`k)AMc&&myf6Pj&XX&IK5+>-Z4(^7^ioP(>uoL9pm(laeBu%y-Z4(^7^ioP(>uoL9pm(laeBu%yy_`{K(Khed3P>y_5g@Ki{zDpm);0di|Tr@r&L`zyG>J%JGlh zN&lg>HBk8!%kINf8M?lDgH7^i!T(>=!N9^-V6 zak|Gi-D8~YF;4dwr+bXkJ;v!C<8+Vmk#oAoem&h|obEAB_ZX*pjMF{F=^o>Bk8!%k zINf8M?lDgH7^i!T(>=!N9^-V6ak|Gi-D8~YF;4dwr+bXkJ;v#t$`?mB9{B0|HC@$N}K-aYAa_t8D+$GfNc z<>MyZW1Q|WPWKq6dyLaP#_1m8bdPbm$2i?%obEAB_ZX*pjMF{Jm%8W5M|t-cr+bXk zJ;v!C<8+U4y2m)(W1Q|WPWKq6dyLaP#_1m8bdPbmr*i9_^!fa!d(w}0Px|rhNuRG@ zx+nd3_oN^1p7i70lYYE=(vNpf`tj~bKi)m*$Ga!}os;*K_kX%4{U1!cq#Qpu&y)Ta z8y-C9p7gI>|MqhHqI=RmcHQc7{G)r)e{}6<%JGx#N&n=!N z9^-V6ak|Gi-D8~YF;4dwr+bXkJ;v!C<8+U4y2m)(W1Q|WPWKq6dz6oy(>?a<=^o>B zk8!%kINf8M?lDgH7^i!T(>=!N9^-V6ak|Gi-D8~YF;4dwr+bXkJ;v!C<8+U4y2m)( zW1Q|WPWM#4IC{o`&oA#QbWi#_4!*CvFLC{X^q)QKUk2Ti{za?*w7hT9J?ZZ|;%7&! zbQ9f^{v~Vwth{g2J?R&ZerS2$r+d;rXZ_2{af9wj|NRX=9du9nCr2II> zPC4$;J?Y20C;fQ$q#y5|^yA%=e!P3qk9SY{@$N}K-aYAaH_<)m$Ga!}c=x2w-ADJN zAMc*(myertk8!%kINf8M?lDgH7^i!T(>=!N9^-V6ak|Gi-D8~YF;4d=U+SJ;f3$ax zak|Gi-D8~YF;4dwr+bXkJ;v!C<8+U4y2m)(W1Q|WPWKq6dn&i?NuSSux+nd3_oN^1 zp7iZRO`q zobSos|J;qc%g?Pi-;@5X$?uo|&(TaI6JPx{BL zJEk1}=$`bSU;FiP{G@x*U%uwbLHDHJ@9+Z;U-|o^d(!{v7B|K zM_UixRo;*2o%EL-cEzA~($B4a(x7+J-+ILDgWgI1^tFFj-mmGM^glRyRNn9Do%Byz z|NL^ipm);WyWz)!-bueOadA0b(L3qCJo&HXct`J~-?DK>IbL#}C;d%RpDV{(&hw;S zw`pTJUSBgk^y9sgk00-y^y9sge!O?mkM~ac+)MOM`tjaLKi)g(bMMhR>BoDg`sL## zyD=^f+rj&XX&IK5+>-Z4(^7^ioP(>s-0@1)P?KfRNFym!)%_fGnJ{n9(> z$9pIJc<-bi@169&HFMa^%AUUFmf`>YyQgm$^iDp0!&vX6|J2l%%lj|AlYaZgCzkhb zdMEwelRqf$|MX7!Kb*L{96#ut^bb02-$C!Bf7kjCm*W?`lYafWjpg`9@1(zb?GMWF zlio@H4{L56^iKN6AAZiDchdjfBk8!%kINf8M z?lDgH7^i!T(>=!N9^-V6ak@wO$T{6(zn<Bk8!%kINf8M?lDgH7^i!T(>=!N9^-V6ak{7S#nE3J^w;Hmhwe## z@L@-l_ccD>mVVXhb%X9n|E43}Gw7c5b8DYe-nZ$V^j|yrzN1%;i*!%=^VdJU95?8m z^#8WuKL_2Des1C^<+w%nr2o?7x65&l?n!^<#wV2HCf$?%#Fy; z$Nk6741fRMoH?ZIhSzT%`tk0`-+#P&(vNpf`rJ))Px|rhNk85_>2vqdJ?Y20r~2jN zBHd%0?lDgH7^i!T(>=!N9^-V6ak|Gi-D8~YF;4dwr+bXkJ<6B5=ZBB=?lDgH7^i!T z(>=!N9^-V6ak|Gi-D8~YF;4dwr+bXkJ;v!C<8)8u);;O-`A_$xAMc*@u1@2HjIBi)n! zSC0JkBUe11Z%hA|hrfN$J?S5K+^?16JLh@Q|LtKPDEol!Nq^Cymz48BbWi&G4*qHR zxhv;+(q|XZJ?Zm25&e@sKR-tYrO)pb(L>cQA3x|JMdV0t>J!G67GENT}r-zKwL&oVL z7mLON4pMu za``z6J(T`chyF!*Kck1zfB13#Sbk2#=ibt9Ib!FahteOpc4E*&=|6n*KMr~*{pR&M z%khLBO8@l@-yQT&`YjW?%JGaIO8BoC0{df;IraeBx& zJ!G67GENT}r-zKwL&oVLiq4fFur-#yy_fY!r9!j6DUwSD0cn_r?@1gXs z*?i^Zl|BC0TZg~@qh}shexAd5pnUxMrf(edQ2G-#O%Hk~{pY5>UfzE>50rk_#@{dR z-}F%W|D60~dH<(}(!YM<9p(5z52ZigxHW?wO8?dM_mtxoJ(T{!bMRDgA{9J*Rj&D*gH4>8Z}sRYU)*^83?Qou{*g{+Z?R^w!Y-LGg6g&_APi`fKQ) zUOXK(^cNRTk9D3d8~TgN<42?3(`otmCmvKEPp@^JZcD#A9#6leKQBBTmwq8UJ(qr0 zc)BkAe0cgU{m$@oUiuy3>AlX=eMA3yRn#_31n^rLb5(Ky{$`Qm8RAsfp1 zf4VXK$5wrze2>-I)Hf z8@@8=#`KdDXO`nW-I)HC$=k|qpc~UqZ=5Z=gKkX!_fwxLyM=B{f8?eUHm&R`K0lcL zZPOnpyNUB?=^r_BaM@j)M@#?e&3{#P+n!s8{^wgBx^?A${{^!{Ki-Y``{(YY8`F<> zWBT!KOrN`%ZcIPkjnyx|Zs?INfNR zZdAV1jkh1--DsR{G)^}fryGsajmGIl<8-5Oy3sh@Xq;{|PB$8-8;#SA#_7h&tsB$l z^Pg@^Ki-Y$$Gb6ozJBS(^yA%_e!Lsgk9TAG$IPrQ?_YFd`u9)YRNntMkCuLN)9K~? zlk;flzc_VgdHN-KxT!%mrhj1l zUdOKd{&ZvdE7rYf(2eQ;>Zo@Px-tC~N4}{XUpbGK{(VP$WYCT2A945r<@n8cwDezi z+_%cljp@ep*_Cu-`aBOuH>S_eC(@1S^ZQzKWBR;~1>KlFukS}UrqAo0(~ar#{!esc z`n(@5-I)HqLw-^A72TNru0wuQJl&Z78;9IiJl&Z7_CxL|o^DM4h46G^=jq0w|4#Y+ z>Bi2}jYEHTc|6_NdAf1v?<$X{8#_-o4*j>vBjV*jmOiCou?bq-x`mn8#_-orvG$2o^I?s-8l4LE&qOWWBN}Xa$E6qWBMBp z`Jctpjp;vl$j!ymjp_6Lv2-f=)>GOIQbYuGbei;3jK0ilE zN2bs7iu7dl%ln$1G)_-ezBsz!z?;i?N_sN=D-U~p`8gv!nf}8CbsE_;NYO#h*& zPn11FPo_U&)A3~w(Ua+~8tcjQkDNKE>@j*W{diBNAMeTZ<2{)^_b5G?e!M5skN0Hy z+|%@A`thEue);)MPa3Bujnk9H=}F`Cq;Y!EI6Y~co-|HR8mA|X)04*ON#pdS@}-{K zyvlphI6Y~co-|HR8mA|X)04*ON#pdSaeC4?J!zbtG)_+%rzefmla*UfrqAa;J(+&I zC)1DjWcu%H`^mPIo}nkxUpo8J*%iO%=ZAi@b)WL{sMmjX=wG+_E#>D~oQKTc|958A zl=m-sGW`dqZ=PQH-=`L1-^=?iJ(>P#8=qU=zv;>Jd!4xdpeNIR zcH$f5_(4ym-*wzm20fX6^Rc@IJ(>RN>+T-(WcnkHKCv7h`CMlDL)IQuKIcPErvKWS zd&~FLI1ibA(-CKv-lQkfXK&Jz>GM1$J()f~_eoEt&+o(0lj-yNAoOJVylx^rnLe*4 zPfw=L`)kpY>GOWW^kn+^RZm^D^8BSI({EdKe)05V`Yo$=6;Ds5KV#L7;_1osr?1*x zJUy9yQ+Rr^^Ymor>B*r#xBTzZlbxq0hyI-MczUw)^knDh$T~!}XPj;T3>^wc0{*?Ir>B-L1lj%>6$J3LYrzbm4Pj;T3>^wa=^jpf`KRucL z#8sP%rzg`-tUA4TdNTd`Ri_qDPo_V7)kN|1Wcs{6FFlz)?`K6%rqAoX)064*`iS&o z`n;Y9J()hgcSldA&(ERKlj-w(BVCz3`;oq^etDnMm6b1!b{u>``Mf?|nf^hm_b#80 zp)1q>`jL+qbY=S29`)Dd=dgU=Fa1Z4x#gIZ_ifHorhnarw+^~8{b*vJvJ2?S^jA+_ zKj_Nz8#YdrT|!r;fA`e&W!KP^=?~j z`3+^)ah@{$&$c|I>_W~{rhoSAi_5OOf7{UCwe3e`m(rE_`0=hxKi-w;b63-q>BqaW z`sL>>U1^-IG)`9B{uuU73D<`-R(A z-XHG&=i%eWyD}et>FmqO>z}SnKi-w;U$^9a-*jdALr*+r(3R;Qn0W9BD}TRqW%@rq?#e+| zrvJdPA0KpO`i;kIF2^^nbCUiiNAFp>ldeqv{k6XsbY=P*j=Z@Xf9cBf*`0J{`aI7` zSEkR;&(f9Y^ZSN$W%|4h3tgE$uS-c+rqAp3)0OG-K4x@f`n<0*U77wftG`tC4PBZ3 zldC^pJYAXoW2-+~JYAXo#?_xLp04aXU77wPt3Op9PgkbDAv|5#dAhRmbYHf)0OG}VRd~xUDgme#*RH;)Jf5yh|H0KCEuOAS|Nhn2 z7f)BFf6wY`i>E8o=Y5dr%Jg}^FuF2*URR&4OrO`Gq$|_s^;+o4^!fcox-xx!PL-}q zpXVLv%JkWf^kwzS`<#TCuS|c-+S|%;k*-X?{g~e^ z$6dNI{rMZ7Ht5RqUp)TK<5zY8U77y1lW!e#W%|_{*Oy&FSEhf<)YWCz(3R;A*tDkX zBDymD>!;sQb`@Qje(#yblwC$wrhnB~SEm2zmR}omW%_5${!!VLbY=SSu1r6-{erS< zZ<`xFe!MI5@wuz%%Jk!1S^e_!lCCsPR~n})jnkFJ=}O~trE$8_I9+L+t~5?p8mB9b z)0M{QO65ykdDI&3O5=2;ak|ntU1^-IG)`9%+_Y2j?r(|K;YlZC-hQ zr7P1PHnYCGf64@SEm2z)UTbg^1n}4rhnDOH`n>)pU70@bhd@`R&-=vDmFe^T*>q+4 zQ`ekR&gasV>5pGCQ#@Un{+KnJil-~nAGKy<@pNVSBi5W)JYAXo@HLag)0IO%Q9NCl ze$|@l>B`R2m7S+6J5N`3o~|7F$zkj;2^K@nB>B`R2m7S+6hkku|e$bWa4_;F}U77x%HS5ab>B{tv zU9+}$x-$J^)*MkhU73ErHHQ^XSEhg1nnxE;SEkSVOw*O=^L}h}W%|5-0bQ9suk%S) zrqAo%(3R=)`;ByE`uw~qU70@5JJOZuvmfcp>X-LDU0M0!XrI-;ReGMTOn=3ZZ!AAg zr7P3luRslOa_ zW%~U#9awe|U77y!=_|{wqASxsWM;pz%jnAVuh{(Bvgs@J_t~5?p8mB9b)0M{QO5=2;ak|ntU1^-IG)`9< zrz?%qmB#7H%B?HYZ=64Ce&zK^SEm2`+}Gw-{P|xV`uXioEkD=cd}TiV-fjP#p>&p8#U77whCtfw^%JdhW@a#cXrr&-1#pU?&s_TZo|9duETaHh3 zWj_AS_1`Ps^Pnr!UvB`R2 zm7S+6J5N`3p04aXT{-mcEq}k9uk1Wsnf|S7>*MLl&eN5hrz<;8S9YGR>^xoBdAhRm zbYB{tPUiu1ufT#i1+H=l2}x z%JlhpRk|{Lo_C}x(`P@@m(?%tf4Z{r#nD3#e?<9yCS95S!lN%edSzG9mFXXI>=EU2 zMs#KR|M$3umE%6=E7Kn~dCZ_I)8BW}FHTzd-={0nKV|BYL06`K(58LLE}|>bKX3Y# zWmnOa=|?krmt96zroU|StIMvVE7SjI%c$%^x-$JUW?wM7^5^4xW%_S!`+nJ_bY=SO z+n-!^E$1uKe|GLGWfxD+5B=o)nPpegmHGJbuB?9fc|}(mrz?%qmB#5x<8-BQy3#mZ zX`HS!PFEVID~;2Y#_3Aqbfxm8u6*P=?@HrzrE$8_I9+L+t~5?p8mB9b)0M{QO5=2; zak|ntU1^-IG)`AmzBu~u!p9d@USHE+8~UlSuFS`OaqjEo^+Q*tKX3a*<@HBbroV67 zFUsqeu1x=;*;kg=Kj$mc@3r-}%lijinf|Xgzqh>q(3R;YW==2fUvy>q?@a%sy#LXa z=`Y>%vhw~(SEfJplye4Mnf|to-yC#h`fr{1y+K!|zu|;W4!Sb^1IItCe9wZeOn=64 zPblXz>B{u`Z1}CxopfdT>`uBeeV*^6E7RxaZ0XAM`Tb71GJRf8h^|bZ*Quo|)8~CX z=*skYzeBn*ecu0_u1x>fb*szIo$1Q-`>#8sc)BwEZ>~F_c)BwEBi8*+@pNVSeb+sv zc)BwEe_QwH;_1rH)0OG>S+{?AJYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR>^xoBdAhRm zbY^xoBdAhRm zbY`>B{tr zM?bW9x-xyB{tZ-jS|M zpZ!Q*R=?Z_bY`nf}Ssmy}&aSEm2pr|(&I8C{wF#hYJQb{$=r{(D<~ zv1R3dpRP=Q(d_feuB0o|e`DKyWtY;G>CfH%q_S)2%Jk!1nSOHqj6qkX|KP$+WtSiR z#Qgo2pEq=6ecUpqD~;2Y#_3Aqbfs~+(l}jdoUSxZR~n})jnkFJ=}O~trShe&eARmI zO5=2;ak|ntU1^-IG)`9}^9`mHm& z%KH~xnSRg5@BR3d|311h{aZJ^chHsTUvtXa2VI%|cTPV1B{u^{Z6_v zeO_0Hu1ufTv85~1=lxOW%Jg|ZNxCxqyVier{mQ=&U77yP>)%^EU77y1>)&2HU77yX z>)%{FU77y!^?y}7U77wB>)%j3U77yn>;Iy7x-$KrtbbkcbY6JYCs&y0Y_hW#{S2&eN5hrz<;8R}TGa%fBDzD?3kDrhn=B`gpps^K@nB z>B`R2m7S+6J5N`3p04aXUDSEhf- z`d1fESEhf_`d1ZCSEhgd`adn6u1x=&^)D-)u1x>5_0KP!u1ufzqo*s==lvP!%Jg|3 z4!SaZURRZ_OrO`sp)1qp_Z;cU^!a&Jx-xy9ccd%RXFt-H)h~AfU0M0!=qpG4Yq{EU4SN?p1ccpQ<(l}jdoUSxZR~n})jnkFJ=}O~trE$8_I9+L+t~5?p8mB8O zUmRVx@QLzs5zbepKXv|`L06{#r@1@I>xc7|>7TUyndS9ISEm2Twmk=3nf?{Ce^Fll zbY=QOx2_*_W%}zjf4sc^(3R;goVj$+mFW+B{1Jn$O#h`#-yU>j`Ug&VaCv{_`<3bc z{NyXk`!ijc{_u^*mh+i(W%?seJh7b5q$|_^*9nW|_(4~u&+eov)93k4x-xx!&X%rB zpWpAKE7Rw7h3Lxkc|BXYGJW1Zg|1AW_vNH3)9-WKW6IBU>B{sEI&RB{uKa@@m; zrz_L{V#9-rrz_L{e8Zl_)0OFex?zvv>B^!1)#B;O^gr1!DxR)P|6k$h%Fff3ou?~1 zPgi!HuIxNr*?GFM^K@nB>B`R2m7S+6J5N`3p04aXT{-lN^xoBdAhRmbYji>E8oe|^Jui>E8o=lvV$ z%Jg|Z4!SaZURRZ_OrO`sp)1qp_Z;cU^!a&Jx-xy9ccd%RXFt-H)i3u2U0M0k`ObCs zm-EPUW%`?s|3dkBGF_Se;1iE7yMnGv|0gHErtB8FGW}nk`nIxrIA585kLiaGx-$J| zPyd%eSEj#U^RvpXqbt+jzU4cEu1tUa?8RkQ(v|7|Y1>_cu1tT{_VdcFr7P2aX6{RK zE8R&~rayjurtE4y2b=!y7H%xNob#2{FaNvKmB#5x<8-BQy3#mZX`HS!PFEVID~;2Y z#_3Aqbfs~+(l}kIe5os+IpJMtoUSxZR~n})jnkFJ=}O~trE$8_I9+L+t~5?p8mB9b z)0M{Q%F5}=o6GZ;u1r5Ye{OmHbG|bDm*?&*uOGTH{ZqDIQeJ;_W%>uUJ!H_8>0dkh z*7EwNE7MPGJ!8<7>2KZq%vFP~Oh5DZa|d0S{;{X6Ic??rgU`XH-+Jnf z^8QL!re8gET=_f+U77wf8^1K@%JdhWbZPmyB3+q2yOXX=pXWR2%Jlg;Te>oRe!r8h zOrO^kqASzq^=#?N^m!i@x-xybi5C=4S9YGROn>3T^ULGu%Fff3 zou?~1Pgi!HuIxNr*?GFM^K@nB>B`R2m7S+6J5N`3p04aXT{-lZmVZCGvh#Fh=jqDM z)0Lg4D?3kDcAl>6JYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR>^xnW{(_16?@w2zfAYj7 z<@rHZcAlA$=2hh>-0mFZ7Ebz9jzbY=Q~IPEiKH}N^x^zS(R z?*?6&{+!L{m0d?yrvK!Ye;#yY`nlOBm0d|!rvLP|uMWC0{TbVLlwC_#roUzGpUN(# zE7Ko4f7<-YE}<*aUo+N~)i3|M(v`;PO5=2;ak|ntU1^-IG)`9&4(l}jdoUSxZR~n})jnkFJ=}O~trE$8_I9+L+t~5?p8mB9b)0LGk zj;>$$$3a)7pPAoTp8s@Z`rGI3F0UWDGW|2Rzqq{q=*sjDK4;%SSEm2l*=x${pRP=Q z-qwo;U77y=%|9;hKXhgKugv`Gpexf~@%T3lx-$LyPWwoCf21qZ-+t;{<^7eeOn=fT zTg&HU>B{tXoP1CDxgh5&(`R?mmFe?*CtaC7KW9rB`R2l|%pU6JYCs& zy0Y_hW#{S2&eN5hrz<;8S9YGR>^xmL^!Jp1U%ImMbY=Q)OxDNKm7S+6J5N`3p04aX zUDB`R2m7S+6J5N`3o~}&)_4xOtD?3kDrvK{XcgypO zu1tUXGQg(bY=RyJ`P=(KELNkSEkR;tJ0O}^SmQnnLhiGzN~(^Pw2|Z7e|*L z_xkcV7rHY2yHC2l{5+ekO#i}DE-$-=u1tUAX(yE3L|3MN;^|KtbY=RZHcymYM^~o* zn=OAg=*sk`&CZrxNmr)-`)#)jx-$LA+s`Vymaa_yiMh{}T})S|KYIR@va9LJ^zUD| zVPR#raK5to<$pK2(l}jdoUSxZR~n})jnkFJ=}O~trE$8_I9+L+t~5?p8mB9jFLmV; zHhNbYrz?%qmB#5x<8-BQy3#mZX`HS!PFEVID~;2Y#_3Aqbfs~+vhu~zM;AU_p1+*0 zOuu!0cX|HPmFd4ZcW-(9(3R<5xc&0-`lBn;Km45E9&}~;8)iRMUjKAu`pdUoIq1st z`<;2mvMeEh=n#pUxHbY=R>H@%^JPL{4rKYQwY z=}x*beRd~ZnLf{V(v|7+bGCG4`uu(;U70?wD@0eO&+FOJmFe?7Ds*M~yniQMnf_@T zpId$|N>`>of8*1Nrz_L%+W7m$)0OGxHvVq$bY=SO8=qJ_U77yejk}AdE7Nb=xKKP@ z*?GD${p`kF6JYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR z>^xoBdAhRmbmh>`m*)pv*?GFM^K@nB>B`R2m7S+6J5N`3p04aXUDB`R2m7S+6J5N`3o~}%P*2bOX`9)WDo~}&4W#f+Wc)BwEnH!%_JYAW7 zX5+cV)0OF`H_jGMSEirZxVd<`GW~{)Q^nJj>GM90bY=Ry9|v8TKCi1vSEkSF9Zf{%j%c=g|4i8>2tOx++WUT(v|7=n>wU?4vVf#|Kd%r zD!YiTOuxtJ`wY4={jY3(*q|%ZU$W)0L06_{fAzxkWtY>H)i3|M(3QsNO5=2;ak|ntU1^-IG)`9qmM0ot~`I~%Je(tpIV;(bY=Q`=6+aSKXhgKE4IJ2y#DCQ^sCNUH|War zch25dUjKAu`mb!gXV8`DFF5mAgRV?}>lt4gbY=QKIsJF8C(r> z`$GA-99@|{yOXX=pXWR2%Jlg;Te>oRe!r8hOrO^kqASzq^=#?N^m!i@x-xyhyJ$W z>B{ssPyKW8bYB`R2m7S+6J5N`3p04aXT{-k$D9;bNvh#Fh`j1c5$J3Rarz<;8S9YGR>^xoBdAhRm zbYB`R2mFYhg&kwq?^K@nUo2EWjo}YAO z`WwU3mFYh^b!&M%U77yxr#@9YU77wvQ=cfFu1x>#sq2fUE7QMa>gwX@%Jg|3N4he7 z-j9Q>OrO_Pr7P3t^>OIR^!YtUx-xx!UX`v)pXVLv%JkWf^kwzSeM47PzBt-?((ZCT zldeoZed<}|=jn81`lmhqxn);z-JbLpo$dF%~c~=^zD~;2Y#_3Aqbfs~+(l}jd zoUSxZR~n})jnkFJ=}O~trE$8l^2O0D3%8Z$FI}1b!udB{sQHl0#DU77ya@O0(SPnE~hm7S+6J5N`3p04aXUD6JYCs&y0Y_hW#{S2&eN5hrz<;8R}THj<@rTdcAlB`R2m7S+6J5N`3p04aXUDo#pH&riBC{n49FES|1Re^hw7GX0U8PAHG3E7Kpb>GGM90bY=Ry9|v8TKCi1vSEkSF9Zf{ z%j%c=hpw!A>3rwL`^$M^x-$I(r#-BE4vel$|I(Q&$}XcT(_ee$O=b6SpON&RKkN3g z8|ljQCvDq0=*skaY~Q!+TDmg*JLaw_yO^#_zwi7(WmnUc>91P2y6kegvijw}SGv+T zU1^-IG)`9J`9CYqf4VaLgLgb) z$4b}HmFaKWeph+@(Us|+e$Mj-U77yEvo9TVW%}oy^^)@bKv$-J-jECt6b>-(`bY=SNPP#IEp6{e9)92@G>B{u^{Z6_veO_0Hu1ufTv!yH3=Y3S@ z%Jg~vPP#JvZPRy`_kX%F{U@exE1s@Q{}0o*7Ef2E|KRk^#nYAP-#>j*@pNVS_f6ke zJYAXoz0)5lo~}&)?&%wfrz?m4`r_%z^zWLkp04aXUD6JYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR>^xoBdAf4wuPe_#y0Y_hW%_qa*T>V9 zou?~1Pgi!HuIxNr*?GFM^K@nB>B`R2m7S+6J5N`3p04aXUDB{t% zPhVL)U77xQ)2}R^u1ufzailBL=lwY7%Jg|%Rk|{LULS|9OrPI#q$|_s=T+&-^m*Qq zu1uf(NMBaJ+(&d}<%^>$PJLrJpGjAypE-Sd`FTEFnf?)H9x&+2^e;KzTE&RyBPbY=S2%w0L?%JdKH+^g(rx-$Li7v5HOIbB)(^4}X>X`HS! zPFEVID~;2Y#_3Aqbfs~+(l}jdoUSxZR~n})jnkFNm%8$?Gv1ZP=}O~trE$8_I9+L+ zt~5?p8mB9b)0M{QO5=2;ak|ntU1^-ItbB2F*TVP9^Ovqnf7Sd4%JZMDOuuHw#GotF z@Bf6=Pgr^V(Us}1JLltru1x>avwyAp+=%m)>Gz1wGtiak-@Nte@;O<$GX0~r99p`Q z^OfndJL$^wdA^gbOrM{#r7P3t_dDsz^k0eV3elD6^Ln;)W%|623SF5#@83yRrk|KO zz5HB|u1tT_%t^)5mFW+gSzkO|nf{=eql%|1)Bn!Qn&Roo^pBZYT|8Zx{?Rj!E1s@Q z|64PM6;D@oo~}&)sF_2{6JYCs&y0Y_hW#{S2&eN5hrz<;8 zS9YGR>^xoBdAhRmbY6 zJYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR>^xoBdAhRmbY{mQpnSM00cky&( z`u~0Up2gFZ>GM90bY=Ry9|v8TKCi1vSEkSF9Zf{ z%j%c=iLR`Car7&v?OncKL|3N2`-~r#^8uW%O#ij5_m*8qSEk>6_Qiv)O#heX{>`8( z(_cJy>7Xmq-?8&QcCPGVx-$LC7XG~Ka=Nnm<-ZrY(l}jdoUSxZR~n})jnkFJ=}O~t zrE$8_I9+L+t~5?p8mB9jFLmYXH+xqarz?%qmB#5x<8-BQy3#mZX`HS!PFEVID~;2Y z#_3Aqbfs~+vhu~z&lVnZ-pccvu1x=h`EL!nGW`>GTr}v)^e=kCpAEV){Ugpjpu9d` z@WtW({ztamI_S!L{4KM$mCwo3mFcfI>y72-Qgmhd>`uBeeV*^6E7RxaZ0XAM`Tb71 zGJRfGh^|bZ*R!Q7)8~Cu=*skY|4zCx{d+cFTh7B`R2m7S+6J5N`3p04aXUDB`R2 zm7S+6J5N`3p04aXUDbGPoOK)Up0Gm*_E8HOn>aTQ)RbuzB2s@bEgfuGX48@eq_*<>7TlA$)GE%U;cB` zmB#5x<8-BQy3#mZX`HS!PFEVID~;2Y#_3Aqbfs~+(l}kIe5ot<-0EFvoUSxZR~n}) zjnkFJ=}O~trE$8_I9+L+t~5?p8mB9b)0M{Q%E}i<2b_20pexhwwQIj!E8WTY%JlEw zal@c1)BpP1Bg*TG^OfnZJ@=;a`lKt$ zGJSr|maa^n-|wU=)8}=C=*skYJzKgmecnffu1ufz@1!f!AG&pY`MDfjnSQ^mhZRp( zrr&GpZx>HjrhmxRM-@+3rr%@h!;7aY(~q|9Q#@VSdAc(F16%egkEbg;Pgi!HuIxNr z*?GFM^K@nB>B`R2m7S+6J5N`3p04aXUD6JYCs& zy0Y_hW#{S2&eN4c|FH7>rz<;8SEm2Pmil6JYCs& zy0Y_hW#{S2&eN5hrz<;8S9YGR>^xoBdAhRmbYNv`hVN`@O^Nw`oz(+sQ zm(?%#7hPHT;^+%!e6yU-q$|^3aMmA`^AU7q`YX@*+p~i|D`sF`2eQBJ&G)`X{r!S4um&WN!pB%g@*7%k;09 z{fpx1%k(dueRc8lW%?J*zOs1wGW{RUzPxz)GX3*rFDstDOn>R@%ZjHjhyJC-)0gR= zJNw7Q)0ds6FFQ|PcAmcMJbl@D`m*!%W#{S3&eNBjr!PBCUv{3p>^yzhdHS;R^kwJi z%g)o6ou@B5PhWPPzU(}G*?Ic1^Ymrs>C2&iNqPR$mz}3C(?4gnKAyhpJbl@D`m*!% zW#{S3&eNBjr!PBCUv{3p>^yzhdHS;R^kwJi%g)o6ou@B5PhWPPzU(}G*?Ic1^Ymrs z>C4X3mz}3CJ5OJxfA;K)%j<`}O#iIeKPsNSO#jUA^kw>I%)X#Jp1w?f(d_ezr!UiA zF#D|H>C5!z&t6*Uav>GS)J^kw?| z+$w#UKF>eWm+7-3>CEbvJB+@peCfRB=KIU}V)`M0@0II|(3k1Iz2kf3 zybPa*P5-M4zcJ{`^jGcvz@RUyU;cB^m&WN!8mBLf)0dSm zjy`bSjf1{S|CU|v8uVrQPwo8jpfA%Ovg4@oI^z6g`n#X-GN~9^kw?|z9)T|KCd%GU#8FN+tQcm^S&zdW%|6ICw-az!RPE-eojVTrhj1DLyD&_ z)Bj}Kp2gFb>3^_oR6Ko|{=RL$DCdXi%k=kd`#;6gm+9}>_S53&%kF?h5^yzhdHS;R^kwJi%g)o6ou@B5PhWPPzU(}G+4@oM>C5i%^kwJi%g)o6ou@B5PhWPP zzU(}G*?Ic1^Ymrs>C4X3mz}3CJ5OJBp1$lnec5^Xvh(z1=jqGN)0ds6FFQ|PcAmcM zJbl@D`ZE1p+kRAzAM|DC>C5!r+V+F;c=|H^H@AJic=|H^H@4kZJbjt|E8FfVp1w@~ zPuuP)p1w@~>1|&vp1w@~_uFnMp1w?<_jRN%)93v;=*#rkVf1DCyj~7{nLfYwNMEMU z&#%&#>GM1!eVINxlFqDtxzp&&$`?o3&GcpZ_niCTa$bbKOn=&rv&$}~FVkPQ>*Hm2 z^L@+oTX*js^kwzS|K0SZar)9YeQBJ&G)`X{r!S4um&WN!7QLFrHWGJWEI;PhY0rx&0~S@$_Zq>C4X3mz}3C zJ5OJBp1$lnec5^Xvh(z1=jqGN)0ds6FFQ|PcAmcMJbl@D`m*!%W#{S3&eNBjr!PBC zUv{3p>^yzhdHS;R^yScBP+lLLzwA7HnSRIi`gr=X^Ymrs>C4X3mz}3CJ5OJBp1$ln zec5^Xvh(z1=jqGN)0ds6FFQ|PcAmcMJbl@D`m*!%W#{S3&eNBjr!PBCUv{3p>^yzh zdHOQ_T)aN$%g)o6>9=oxa(R8ym+8;l{-omR%kAYOrO`yp)b?t_aEuY^!Yhf`Z9g? zFMXLlJCe?-*rgY)%0ch>(2XBIWNTL zW2;~O@1ie_)0f8SOXKvVar)9YeQBJ&G)`X{r!S4um&WN!GQlNU70>VcS~2M&+mQGmFe?(Lv&^Oyv{9MnLh8YLRY5G`+Cxq>F=5Q zVR`?cE7N~-?%v|*%JjF--CaCgnf}XjcNR}qrvIn8JBp_((|>X9>&4TRou@0)e}3+3 z^xoBdAhRmbYB`R2m7S+6J5N`3p04aXUD zS07JTcAl>6JYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR>^xoBdAhRmbYB`R2m7S+6J5N`3p04aXU77x~b6+X1Pr9=6bY=Qm=e}GX zPgkb@%-olXrz_LnGWSo#)0OEzG55LR>B{ss&V9Ogx-$I-=WZ;Xu1ufzccd%R=Y2Zp z%Jg}?Rk|{LUN?uXOrPI>q$|_s=U3^<^m+b~u1uf(NMBaJ+;?>& z{Tp|_vz(8iE7N~x;fLjX4_#UP^8YSfX`HS!PFEVID~;2Y#_3Aqbfs~+(l}jdoUSxZ zR~n})l`nPW^t^Yaak|ntU1^-IG)`9GOOiU70>VZ%bFE&+mKEmFe?(Lv&^Oyv{9MnLh8YLRY5G z`+Cxq=`WnWv|LA*u1vpU{;9>&mFc(6?=GIMOg}Tfvv|5P{q+2~#nYAPPn|!fc)BwE z)co1S)0IPiR`GOY`i=9|)0OE@n%`O;Pgi!HuIxNr*?GFM^K@nB>B`R2m7S+6J5N`3 zp04aXUD6JYCs&y0Y_hW#{S2&eN5hrz<;8S9YGR z>^xoB`cd!c%I@)WW#{S2&eN5hrz<;8S9YGR>^xoBdAhRmbYB`R2m7S+6J5N`3p04aXUDB{tn&rcRlSEfH;{^;WA%Jlor zA5=VDnLh9DNLQxM`*hHi>GOK4bY=RyZVp|UKEL-!SEkR;tGOM?bY%Lxt`HrWKCf#_N2bsFsnC(>^FE$*Wcn{I+);iG zL`SB-W#P8s>B#gSTlie@bY%LEE_}LpIx_wB3;$R=9hv^Rg`10~BZvMI#nX}LKfLhq z;_1lF(~;?~jmOiGou?x^Pe*p1j_f=g*?Bs$^K@kA>B!F0k)5X_J5NV;o{sE19ocz0 zvh#Fg=jq7K(~+I0BRfw=cAk#xJRRA2IzDJB zou?zye`ujTo{sE19ocz0vh#Fg=jq7K(~+I0BRfw=cAk#xJRRA2I^vRWc{;N5bY$o0$j;M|ou?x^Pe*p1j_f=g*?Bs$^K@kT560_{j_f=g znf~tztqar(|UU1yx0 zGfu}Dr{9dzZN}*}<8+#F`ph_8W}F@~PKOz%zl_se#_28Nbe3`Y$~awRoSrgHM;WJ| zjMGiV=_TWIl5zUTI9+6%9x_e`8K-}Y(>=;Z&gmTc_4JK#y2dy?W1NmLPQMtZTa42y z#_1H}^oeo0#5g@-oDMNge;B7bjME#&=?vrag>kyVI6YyUjxbI?7^fSI(+kGw1mpC9 zak{`bJz$&;FwXur&h9tP-Z#$9H_pB{&aOAko;S{pH_m=H&Tco(Uax#{l=nMeucy!J zRkGL9=k-R|>*@3RV(j(w`ME##dip$n!(LCHyPVx#{qpW+uUEb}`u48-%6TF7diBeX zW3L-$uN!Bt8)vT@XRjM)uN!Bt8)vT@XRjM)uN!BtD_`2{SN*Qr-H~-Vp zb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H z~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vp zb>r-H~-ZM=j?U+_3U-y>~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H z~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-H~-Vpb>r-G~iDmapUZ8X&ym`@8bR(a+C&X!&_MJG}bk$FakWv%`(E!;Q1UjkCjzv%`(E!;Q1U zjkCjzv%{4y?eM*y>^s~zJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@p zJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s z+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYj zI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DYjI6K@pJKQ)s+&DX2`N%mt+*@;l5^nSHHZk+1-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1 zIJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8 zyW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs z+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yIc9lIlJ3_ zJ-gdDyW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8 zyW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs z+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+c>-1IJ?_8yW2Rs+cWh>*}k`pv$u`2 zw~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6 zjkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9n zv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2 zw~e#6jkC9nv$u`2w~e#6m5-dWx9!)nw~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6 zjkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9n zv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2 zw~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9nv$u`2w~e#6jkC9vFYWDPFY&!? zoV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(F zy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|Pm zZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfPr zoV{(Fy=|PmZJfProV{(Fy=|Pmt$gI1y=}jqy=|PmZJfProV{(Fy=|PmZJfProV{(F zy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|PmZJfProV{(Fy=|Pm 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 z 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 k&G^c@KK{Rgz~{^1`U$MM9s`_}&X|KdHi?;gk1 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ånePhI9^e`tgJtA-14_5jGoF9 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

gcEXA9cu={0AMm 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 QIe&A9+2T(=bDF{ZKULpLj{pDw literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/exp.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/exp.bin new file mode 100644 index 0000000000000000000000000000000000000000..0c4ed5bfea0a6a59f5bbcf72edbe9c39b4bd55f1 GIT binary patch literal 26480 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 Hz*GDuu^!7K literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/exp2.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/exp2.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ffbb062f1b2ef67ee6f77844daee1f688a58354 GIT binary patch literal 26480 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/faceForward.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/faceForward.bin new file mode 100644 index 0000000000000000000000000000000000000000..13436dde01b1008e59c6d6b8d8e8a87db54d7ac4 GIT binary patch literal 4207088 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 ki9(VRn z#@8_uH_;-0YsyQBu z9xA%KpFfNezS;f=_w!iJV?~d<(zrdFb3gHZ{_$?qc&_OEIC`ATT|cK|ywlhDudQq6 z@8k9F_v7pI{^9Ges-I@Iewx|(X=dxEnXR8@wtkw~`e|nCCz-LIWX67y8T(0Q>?fJ+ z{2d$8`f2yG_4DR@KD(@+WX9u9GvBB8FPZrv&95`F_0!DOPcvIT&20TNv-OkA*iSNJ zKgo>!Bs2Dt%-Byd+x5?l%=ygyc>BrY&-vW*>ak)x{v!Bs2Dt%-BydV?SS>Uz1(dPcmaa&20TNv-Q)= z)=x8AKh3;N^XtrP{WP=nlg!vpGGjl#(t6+`$=Z(Cz-LIWX67y8T(0Q?C1PmkyY0} z$&CFpv-Q)=)=x8AKh13YG_&>7%)8W2Gh08&jQu1t_LI!mPcmaa$&CFZGxn3r*3aGh z;uiJO%+^mdQ$Nv6{X{eM6V235G*ds(O#MVN_0!DOPcvIT&20TNv-Q)=)=x8AKh13Y zoIgXc?EL-B_VNCk?c>t-f0~*4X^(yP$)jUSpL+ki-Otodyq~F`Xr_Lmnfi%l>Zh5l zpJujxn%VkkX6vV!t)FJLewx|(Ie%VkRX@#)$DeP;_sN^>Uw_l&)K9#h?fBE~XX+>3 z&(u#eQ$Nv6{X{eM)6CXSGh08+Z2dH|_0!DOPcvIT&20TVHS_5%#rJ8Kh13YG_&>7%+^mcTR+Wg z{WP=nbDjfm^8eb9)=x8AKhbQ*pKrJC#%FLJ<~(12?5&@8KT|)^O#MVN^%Kq1Pc&0M z&20TNv-Q)=)=x8AKh13YG_&>7%+}9&=E?Pjw0@e|`iW-hCz|Q}9nI8FG*ds(O#MVN z^%Kq1PcvIT&20TNv-Q)=)=x8AKh13YG&A;dn#XeL^K*|s=Q$_W&Dc-6pYinEA9pJc{w5*?G z#(tXl{&VLqU4QKD`sY034r?fJApJc{! zBs2Dt%-BydV?W7^{UkH?bDBwV{rMjINoMS)nXR8@wtkw~`e|nCr?fJApJc{nEA9pJc{7%+^mc zTR+Wg{WS9~_0!DOPcmaa$&CFZGxn3r*iSNJKgo>!B(wE%o=LK*pJujxqM7=MX6h%J zsh?=3exjNBiDv32nyH^=wtkw~`e|nCr*qX^WK}=SZ2d$t^%Kq1 zPc&0M(M7%+^mcTR+Wg{WP=n)6CY-c_zuKewx|(iDv32 znyH^?rhcNC`iW-hCz`3BXr_Le+4^Z_>!+EmpJujxn%VkkX6vV!t)HjQydP%!tm>zk zt)FP7exjNBiDv32nyH^?rhcNC`iW-hr!+EmpJujxn%Vk!YUav* zn%Vk^X6h%Jsh?=3exjNBiDv32nyH^?rhb~)`e|nCr!+EmpYu$T zlmG1bAwP`A^=A9y=_a>++Wn04L+pO0e&YR1{X{eM6V235G*ds(O#L*o_0!DOPcvIT z&20TNv-Q)=)=x8IKc|@_C;!>~Bs2EY%yj%Y&xyMJ*yHEl?S8g?n%VkkX6vV!t)FJL zev%pcNoMRPnX#W_#(t6+`$=Z(Cz-LIFV6Fqt~Vrpev{1DPcvIT&1}b?X10Es+4^Z_ z>!+EmpJujxk{SC+X6z@Kv7cndev%pcNoMRPnX#WY=lM&^`blQ&r!Bs2Dt%-GLq zCdu{Zd+aBfv7ctPewx|(X=dxEnXR8@wtkw~`e|nCCz-LIWX67y8T(0Q>?fJApJc{< zk{SE?@;rZOSwG2){WP=n)6CXSGh08+Z2dIzHq8$)v-Q)=)=x5HKgo>!Bs2Dt%-Byd zV?W7^{UkH?^VNC&(z1S%8T)Bw>!+EmpJujxn%Vkk=56YynRjV^h?%XQWX67y8T(0Q z>?fJApJc{7%)8W2Gh08&jQu1t z_LI!mPcmaa$&CFZGxn3r*3Wq+$*O*u+4_lQ>L;41pJ=9jqM7=MX6h%Jsh?=3ewx|( zX=dxEnXR8@wtkw~`e|nCr7%+^mcTR-QSB&+&qX6q-Ksh?=3exjNBiDv32nyH^?rhcNC z`e|nCr!+EmpJujx&NE3?_0!DOPc&0M(Md)XbIrG_&;+&D2jcQ$Nv6{X{eM z6V235G*ds(O#L*o_0!DOPcvIT&20TNv-Q)=)=x8IKc|@_?|vA6_lNr*FU(*1^Zw7T z@3-T3>9%dh+xO$vH{-vD_D;?`*XX)A{?vEF`M7-?zaDS@vi-6%Ure)2CjSZZ#r9%o z$BGW^czb8wOrQ5R^Jcpl&Ro%-x1V?B{JAhQf7*T;=C9kY9Z1MzT94p`}R=Luiib#%vam1Va^pD-&Z?x zexHe%$M4DCw%>;QdV4*79k*w5_u4C&?_R$nEA9pJc{8GR6xyhr3AIE>cJT#fic>Zo?JAXIxLz*9AW;=g3 zvz@=2+0Nh1yi4z&H}m*C`RT}We6Nn%^Y`cO_>;_d{!V5*e8Kh13YG_&>7%+^mcTR+Wg{WSA(KM%)_|3A4QQ8@qr literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/floor.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/floor.bin new file mode 100644 index 0000000000000000000000000000000000000000..a4b363825bea4e03beae563fbd046e228948c10c GIT binary patch literal 16016 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
    w@fShyoI`lv9xzPMPwsp{eVti!zf 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 Nv&JVAv-o-^`xp4M6-xjB literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/frexp.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/frexp.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e20d4ce033d25c1a12f314eb12b8d1ae7067723 GIT binary patch literal 37680 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/inverseSqrt.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/inverseSqrt.bin new file mode 100644 index 0000000000000000000000000000000000000000..731c62903cc20ed648cfe9e95f9cbe24f964211b GIT binary patch literal 70440 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/length.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/length.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ecedd7d997fdce8df99b8f5d3e07b5bf8306629 GIT binary patch literal 48640 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/log2.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/log2.bin new file mode 100644 index 0000000000000000000000000000000000000000..7f6d35346b33628496b0e7ca5269695b3817f5ca GIT binary patch literal 106968 zcmb5%c~sTq8ZU4(O*4=%9CNl~nnPxiW74CUil{lJrj~Qgv!!9;oRo-2;5?+FA%?SP zDuWt{h=>X(AoDzLHn17@{d(8E>ptJRxNF_>$M>9dHlOpb!Oh;k-}^rA`_{9tu&_er zTYO^C+u~b`WfsekZ!PBh&;MR+u?Amrsb^tf#(&pAEb6}g4`++|_|Mn>yG|Xm#Tyn? z!PVxmqEv{*28|n4M(0_?=+0Y*AocgzH3;v3@l+upy$&AGh8d ztiPA%(1C$_5N*2nbs+QBvJdgSJ|yFJVi1{cdbbXoi0C?>dVEdB`js`Fk2RUwJ64gY zTT?Hvvbr9bKW^uQWRkGOP1a1C}7#;CD!-aon?j28cFGy7-Z4Vf#;j z4WfSVke84!i&=M%cP3z;>iS_RBOw886# zOqhGpopXpb9?@TssWaE}PU0L-GV878k*WIX{X2gny3Wj@>&YDOYIA$PXPevF;59~O z?ryKo(hzMtqTR@39Qkx`m!qE!)@G;SAer=by9YODznjc@tJ7qjhWT&k(BHFwcnnUKN3 zx8HUQ({)~U7D+<%_i}UI@ufBo-=8Ish&CO^G#{?b(zw;K2GPcC;|?+%-JPW?qRsJ6 zk!1Y+w@Uz`%^!}Jb#z8MYI`IFq(|T#@*5Y(I&!a2N@f8H)(-rlWylj=3R$< z(hAWgv125e^Zvif6-1lBp*3VubG#%6(PoHa^O5@JdME#YG)J`Ybo-c09m&rz28#;}J5p3zm>MZ+lFxAiBeVbqRn5CUSu3iCu9Pm%{4n8GVeH? zl;(&w*H7Oj+3;)!VUp<{D0jr0GMrieC8yS-0lM1qfuMYQ?Z?PD@lA?L&v(Poa5JsBHs zUul78b1#21nR2J|VzKc&nLje7llj{5FPVwxI#u(Rkny$klgo%U&z3lmSrO$YKOow8 zIPD-~>3%`pMYO4^zlTi9@Qad-X!A#;7a2#>MZCt?>`XpR#_QxIIg02yK6XB2tQ{^( zGen!W!!DCC<>2eD^S`chUtjm0JAIqXo?TbO6Vc|E;1Dv6J6)Bgh&HD>Mw0RIzbY3I zZOr%M$apwhlS7C$UcMP*Dr2tUHP2>Qlz~ixx!0vJqU&rMT0Rm) z&ad#7D~L8%iW`w}HTcW#h&HXQZOEKjc|*=2+Pv@BoJ`~V8~FQT6YA53O!|VGl85Lz z*4^GGGa}(8{s!3?!#*T4dg9+Q5z%#ibo-c$Wys(1E~3rBwf)E(?t4p4BHGMwvL|EX zeG7lfZ0?-;lFX(iw`B*S>)gp7O{U!GHvZn(%$PQbj9c1m@j`T+!x_`bOm@5@GZ1Yy zc+Mp=?cyDog=kYce+e01+W@?81dwSmbq$%R>jLCEMAr#l;zVY7RDi5Qw6Ptxg-lhS zKzYM1kj!4E9b_!s1M&XDCf?tLj89&mTtxKuDzCqXOv>;eyhjC*Nu9HgOu+FV`3KQ; zjzxNr8D$ER@rX7bjz3JsZA`FuA=+$9K2FB#WH8?A*!;EiG?|5E!LkC;b#w8UGgn;jC*v^io{U4ZIeYpxnLWGi;eC~j z-??Bi;ZgVGIil-q4-O&IxYK>S_uePdJv)rdq-FPII-={G=om@H$NxUwpV?$AjwaKj z?myBJ(RHfs$C2@H_y_OdY!Z7Vld*IEM+PCfj)!jsnTnWyq|OUAE&At?$!Z%Sg@~@R zILbh#!Q2ph7O-*MW+F4?Y>0e|=sKH+){sfc3Bl(Dn-g!KEP)a zo5fvi$@IAJK>8rMPDjV)WUTTZh%KUx{LqSwL$^>FhiLP!Pa87n3qtW3$L4x^dormf zLnQ~%bsBejpUjAaP<#%u3H#v#GEG}Ol-7u@V+i|@%;<>^@ma~n`NN)MjJqF7C8F!B zbNiT#WynK(p0asX(}&Cf^Fuj~=sE}1_9Jt+Zx}vv!^r$&97v|c@-S(K=sMpx*^{yH z4#Vd%n<=vYB#x z92w_}k7OsJpU?DZlgPNGJ;F5rn~>I1$#icSE}tN}&cTf7WF|X?<2r%O^PAt1vECFe z%@AGZN6)!rrd;5nZQb{t`02wvTbW@tDlxZ&r}GHtez7MsyvU zscXngUH2H*By9ek`6C%m@5gck(RIR>IFVT%^%&PJY)*1)%${A(aJ|aLt#crmu@|1nWJK5b z>s&CI@Th0Fre$O9bDxY=^)sRWJNGDDtFt+tn@Z;L)hM}% z=sLKbCsPpe*HsLGCeN5z`Yfl z8#kJg>HYYH^hfmb!TlE*tNa(Z|6+40u?3kx%a;;@=sLJZBjeERCGOGKn5h29Q}iAx>5yx(@Dz z$+TD=hkIc*Td#jc=Cn(k_#(Ov?w85fc*o&>nT_L6Au~NFPUaxG&exVh$?S}a6IVo= zjnQ9_*;f`P2N7*>-%VyylX%>B$CGKgW&|0>9`P~((RFZdPNsZ#JnqfeG;Qff=9k&= zvIo(1aQ{xG+zE9yvf230STdu$;$=Ld>);-rjPu2K+~czu?KFXm*TZ-@is(AuOq)c; zEiE470Bp7m_?pa8bG)oUbRCQpkm=s?6~+o)k?B!A$V|KV3gZ%NR_vTl=IhW` zG855twru#GOuv*@7`tHe*YZVV%$2X?%_=q+-yq{_n}G3+1o~c+zFS6SaE}BThUn*m zF%UA>h9zJOgw33(tH{{SOpx~wT?gYNWTvi5z&Ht;m}%?CY;#SJUlCpB=FA_-czP#b zEQQUrxf{srxsxECh^~Y27Bb7D5-{GvrgGiSWcubO$Y4a*`9qw^q}NZBJVcvkBQ}%S z*d|f7A=+TvhD=qTM2y?8`F7e?GIJagWf7w5T%Ws*%;hjQQ9E74#tScGz?6{7!e!0v%AQoMI}luqU&HBiHuKPBF2%} z>dEvG9_Vrj7?tQelnF-$x^p*GS$Ht8X3<{$rwXpbGg?c zGHv=N%ln9aJ{V^s<2EK4<7{kv*Bl{JFeh0`5nTskabyOrPsUgrn-{l^ky+)MEb9?n z2jg{QyiO)#ypGL)xBeh=)<0SN5M2jjdStvGC1XsF&Eu)3$m~r{mi>sXgK^x#&KtgOh9xUj6;&ydng6tkZgjwT_AJcFGa!-T?b>8 zWHRoiV62jj>+hGyn4-a#r(!IZ&A^}jA=C7oG--|KI@^Ln$TaShhVfoDv5g*( zDYHwH8bsH@m@t`$5os6`X7kt4hhz?ZlO`t+T?gaFWF{?3!?-bb`nH8PWG1ko{d1)+} zUH#I<4bgQl9!|!?Asyr4Y&x`iMP~2xblH#SIv6u2B(W`v~6Ttq*geZCoFDq_+x zKF_8@<18{R+3B(u(RKb_kxj<3Djj3^Z00=6A+y;kLw-SY9gOpn$!eQ{aeg*0j^>m3 zqF08DLUbL>1(0!<49o?v*|M~V%+v81@)FT?7DXAzG?<%#`2sfIeQqSvb8Uv$A-WFc z6v&L+k%2h{HY=N#k(un3Au|wN2lEbOrku^dyaStShH^5aZ)C_sMAylkRY}G!Gy`)J zY#b%MrbVy=Wur?7FnUZ0H3=1ggU=sK8lA+u<2Cgxn&ocg2znd>JqXJWiz7dTqt@L@ zMAyL_5E;)VS(pQ2^VR?>GP^ovi5sHpV4jG~%HCO+Ct{Nl*qF?iAz3mB(RDDFM5g`t zEX*abi5~e5nao*PQh-n$Ya24BR%T(oiA~xwHj_7J$qYo-!JHJ;sd3A~oD>_&+3%7$ zcsxr^Ai56bt;qDakcD|GHe-s|TnWgMzY$#rb6ZrW_v0+gZL#s$(u~aMS6SkV=sKAH zB4d@Gh50Ww?VGhAv!pspRwKF&=E%qdT4rO8ESrqqxt3%awaykBMAyMQ8X1Rf*_cOT zGj-^DWSj?N%T7esDYI@(#&={k=Gxe_j%O1-C0m{&x(?>!s80HVY|O{8sra!i8RNQa zsYG-g%-NAKZO7MNN8QI2HEU0%*dtpi5N$B8M<(@THs%ERoR$BWD|L^ zGnwUY=g2xl*TFm^nWn9BFwe-w(Xk7e3te*LI-=`fE|Sd9zB!nSWRpII%yOox^g)714Dt=Sybsgj~$| zviaC{Aek>`<;rM8*TK9nnHI})F)z#}>G>csDNebPjp#aL6eytl#4lNHm)BGAyXQjE7gdugL!H) zJLB+gfoOB4h>cA)o-?A2Q}h>9XJ1(^=CawmxIK)FRsB4%MRXm^caz!FBoFi5Z2t4x za57o#@}v;abucGR#<52p=ET|jI(;M=?*Vyo9?^9$Z%(Fscpm1>*}VPHC^Ew)<%uJr z>tJr3%rCR^Ft^U;^c$ne+*_U}4-s7l^Y3KJo$!1%vYGmF44KX@dC~*XbudRyW|UVR z=IGgcaQQ1T3s2?A3PjhzJU$uci+PyGXJhR;p3I&*d6@TPgSmb(UJvsy*U!dg@kBN; zFo=FW=m#L$dg@&u7jQdGE2>Q=ow%$yW12pUs>kM*NCozz5+7c zTjry$fX$`G)5z56oG%R#T?f4fWFGgu3&H08(K%!yPvy%CMAt#T1es|U^U*KC=A!F7GI6)_B?ZxS&{IL?>(G4k zRIs_`ynxKZsC!^DN^mvdN+@k2xbX62Rw`4Q0uJtt(gxfY=3gw2lWKag=dSRh`Au7kc5GM?TA=u2UuzoNM>?!fy_X39rVDE>6>4G z9vC+9PMgTsR1`=HMAt!|44L%$h3JzhB-83Xo2xd3atqOQ&`U#gHnu55FAbZ>FgBle zEtKJiu7iFXs#Ddc5dAi6yq>eU{CT0=M06eWW% zF3-XDLbMr~&1U@aLYazagWevhle3`^y*+H~O4!25l>YQ~cLN6AZ0nu!({az%u5nTuUT2v?CcoF)w*gP&| zbN5`4gd)05%|;KZ6LhUe{zbG|`S$N*{thaVU_=}AeUb4C!@nt_P5Tc#$sCO?lGBJb z=nW&YGr0)8VQgZDdXZU@S0t+uT?hSRWJZ~a&_BlJ)U5qvI=^9%9*C}k9y2nPRtEH# zvDx5!fXu@d28l#;ossVxB;(o1fIc)f(~q;6-qRp+5M2koYE-99e*=2e*f<8Uc`?)= ziHNR)em1J(HpYN{HZ~(u*bJF!kdcV4gPu34Q!vMXo;Nn*-#kjjYnefgBDxOx;>ZkK zZ$Muhn}r`9BlBV_elA4ULGK)yRjvl~&awGz>~S&;4j7~{qU)f)j*QnyJZD6k+iOpd z>G+pHx+2=32an8Ie*=2(*i;;5)Ag=FdLgj2I_Tx2 zI(w51=;dQ`IG>F<*C21^u|dBd)md0(K))XwiB=gD;3SS(!;T?f66WE^)Eqt}tmhu{81X64>u`4Q1|&<{yw@1bJ!L$WE|>qqAN z>0-Hp=sM_`By-=d7(J709^YpZbE8-i5M2j-l~gC=ZZY~Q*<7n&V|Y|7<%q7c`}a#! z#}tjPzmB@6{KDYG0G)G*Fi5R)!Flb5xt;n%9{9-S@y9})*`wN z`bEh&3^bx&lufrWH^_7tW|S_7u7jRZGR84R^pvt$;&PMB-6{Cl5nTs;r(|}|Hlpv8 z&5aN?6PFm}8${PZZz|Pkw$6y&R5rG6-X`;GlTl(3T?hTEWcKXB?-|j?Y1kby!}b}) z5zz)cu4Kv%8`0y+rf7QrnbY1z@kMkU^udxDd%=i4ST?Ie*cfl%-vZHf_J1Elbv*AH z(JRZQPNQHleI6NQAfoG_pO#E`lo9>3Y>te+OJ;7OQ5GY*4tj3Mlw=vvbIayS_j_cv z78}I{(RI+5OUA0&h`wAlRnctry;&j$5nTtpyHuy?J0lhiR2-=4tkr(bn`Aj zZ!;V34Nu4{@hg$lh^~YFXEHwiCFp-<^D2~0YEX&fAi55Eq^VA;hb8EdX4A3tGcu0P zN@N0}>!6RC%un$p=%Z${df9U_-svTB9?^BsYfUD+pai|vY$Ai$7)&Knj_5k*$EG?> z>XxD(yOhjl&0@%W^meIyis(A%*(Ni>wiG?vY_2YTL1t!~QkjS7I_T>rv!Zh;`nuT+ z3}*B5N2RhI(RI-KO?7tlD@E@&n@26<$hb+Vcp*q=sM^{Co|i* z6uszdytX8f8NI7iCL+2H`qjzUxtF3}oz0>IHmweoN(V&OK~Fo?sXSSVo_02)K1(I@ z!nafs5nTs;?_@4tEk)lun|_DW$hh1omA#0rgWh;DGeSzy8_%Y96`P(BrDBKZI_RIL zIu$Xc=$~iPe?}&mdr7785YcteV^78<8_yZh#xa1+=wkePA=;o1pXyjvm7))y&C-rJ zWFFKjlL$oDL9afU%~oaT)n{{PM=qJZ&B|mjqU)fapG;QUGW7GaiOONK|AR6)hUhvm zNAs!97rn~R^UtR3_yRI{{mR6M=sH*zK*n9lur7ej>KknOIF!jiMAyOE0jl$Kd>Pgb zuzB9WKxWxDWwI90b+EpGOoO>)SYN1VVBG{6yU;SMoA|#> z%PKObBg@1W(RHx4f{aaU8P-;?x#m($W;e- zgEbmd=Tuc0)@ZQt?`ttuuhFPm-z0A#x(?QHkeO~}!a5E%7mCtM|Y)fr%K!kQ5_fgRr< zvuU_Vb|AVA)|HS68f(J35;l>q*wmR~l7@(`gS97A=df1Q6(+1tVdFBTKAEH+O_GV|I#|O(#%8k#YgpLyYW5}>`&}ma647EAEXVpLHU%r$Y+7F~ zI}lw5YoMsktKx-)mc(qjx}Oz#{I;mdHo7$i|9I7M@Dr5Ei15& zj7`fgTauY?TOmskT?cE;$TVtQfwg9A7TB~RbFNc`TtajmtVbi`(5(XN(bx=%XOrH$ zLh=w@2W!@-j`M&DtXX5@^(UL=L-6}SbRDc~qdLALE3mGO&H8n029K+dVTi7SwQp1> zd`bn@zOhLf+J?+G-&M$LMAyOkI5O!A@UtV@MA)J)oaU@ab-yFas8dbmQ?Ai56L z>rtK5lNDI6$0lq{2QpL7RmgXUu7fpwWFB6sz?wcb-?ZyUX5h^V8G`6KSocTf&!7sd z`(v}Rkd5tw3V9FFb+9&&>THatz}i4IR>5piqw%vNx(?P4Qk@YA6<9yW<|7X_KIs*5 z5z%$9#*pf~m0y81hHPHU{|}k@C3xRJbRDciBokCsfpv&%8V=}8re(cKX^-eSSgS~8 z`P-FPtH|b#)dytmHmQ_QMAyN3MlwxXRbo9Oo600Mb30VZVno-$nn$X0p-Uy!JhHiS zjZNi8l~T7C8?1|@Iz#(bVqGMg2EVb{HMmmT5dD0xc9QBm8diz5lWd}AeMqM9=t^md z=sH+mNoMrKO02JB)3aYUGA`d#%3eg*!5U05_hwgO4JMnnt-F({T39J>EMkLonq+#f zti(D^Hp|l4%>S`cmLmH3U@a%r*}th0YdP6Wxx*%8N2P=#x(?QRQXS*&O04%}^T3l$ zyWcCNGotHYO(@kFez+2ALfHf^XS4KVrK~}89jqIrI_^G|SU1Y%vyr{XT)tQ-HxXS2 zYfH&I^{>R*QZ~}*V=_enm10749jrekV;NG3^`~sYs@eP}yi&R&x(?Q;Qk_B1E3rnE zO?(WSadDM01<`e|j+N@nO~KzXqRpBsY}RB~%1?+kSnEo4wiH!jtt%UMH#U1rmEwu$ zI#>@&bq<&-u^yJqr%Ua~9DlP)&LFxD*36RewyMIKSvIpAJ|*L0TO}6}T?gxG$((zy z3hQdwH0jcpj88|@L3ACgy(M$DYZcbsvT=B`ADNTAs>BD;b+A5{%;COOSf9(LVH%r# zgRA5qqU&G{FV)#OtO{#**^Iu&W`kpuY({h)tn;NhizifJoiCe~r`SxLRwdsdx(?O? zQ=KnoRbeeKn?>8$^!mO^`Xagx)(cae7R#%!UYO0$d4tH9*H+1!>)2pTF_{#nDy%7H zbK=X-$lTvrC1HquK3I25=Cn%{)*Z9i*<~=9t$VA)1<`e|Hkr(~`>U`vnT?^5J(>Q; zs^oJ-*TMQ_GB(~-Sij6BHIGe(Z!7L5 z^q?xNgJv`RDw_}gt&)!sT?cEWsZMEl71m0#Nj|_P@OhPlAi56LQ&XLtarnDHw8{UO z&FGXWnTTkEHP=+fCL6zJM4QcXzaaCpuu5Jc+F)HanSEvWTSl}w=rD}TxSA@Nf@p)a z+hnZjS7YsVHJSb&e@Q0f?P>`}bRDekCbOwYHP&~t`L4xqGIlMiWe}q4U=28#tajB{ z1J1_MVg#8(ovY;!MAyMOaWalQsq_2z8)-(+)qOtqXrbRDcor#izXRbx#$8}msv8Q)Y(KBDVj-8$9z zWp*{zt+R1-W%I$pYUzpSI#}CIb?z;%#@co^?boyUZe6u3Ky)3ff2TU-PWb(7WV2!J z7&2~KtHle^b+AUBOlOyBtdVCk?W?h5Zn#xTAfoGF9X***Ue#Df&n9TlS7c(3R7*0V z>tL-tnT4mSvDTiAU)OPDN_?uN3ek129-oZ!#cHg_XVaG)<_M z)`&LPAAst(rQx-KX!A)Vn?||SVuNVY-C;7-*{Sqfa)wY zS7V<6Hp!RRB-F2wbVS#|UIbLwJn>3Tm!f)~WL3ADL!$2lzUJdqPU~|&pTQbd;)JR)I*TG&5WEQWg!Cnn)O!nWA zx$|R<+(&dB?B_tndJ}#wM4M-Jv&ekAy+-CE+F;KIGQPjoV9y6OpLU;3#6XhGRsRu*TEhgRL9gFUw<9-w-cJgru7GA z>4a#5eLSen;2vh|tL@BswY$8UPB^uFnuxAL>$sA|Ko*`@=zF=ei+AMEQVS{}|sE+MSGxil>)A|LQ zE_2QD5u%?D_8y@+0~VRF_XwNf7&Zu{R4Fk8C#UBh2EA=sMWHh3YJiGGqT1 zHvcJLGbhe0ix6E0d%RGc$;oEy@xtaaBb(uwW*LL%I@kw>>h#SwV;>kcvE^+3V>C;5 zMAyMyF;vHFQ*jQLNlc_eFrLKj=5M9S?-emqiJ(CvZI(R>|0Ghoqv#Peo?^k?P zQQPBPe!Nju+vC5LbSSCq@q$$@hT0wGvvuk_Y>HF@PwLPAY z=8;z0<3s0EC)f74cjCOn+8%#vW_WyUk1vh=G`6dSsqOJkq8dci_PFPS6;Eq> zydokdqPE9pjFIr#9uIu@=fm0_e}80?2em!E^Pdg>)b@Dx(3HEiJw7^UR8Vb?UmSep zPHm6d-fDfTw#R?yzx_sSkH=oiyH?xdgZoUrQrqJvF5bCV+vD{<`oOQY$G`X8<6GO~ z54)QFtnKlhXTCdA+vD!Q&q0X|{uYukG=X?x);qd)(LB%B{A?t#_~8UEAZU8ohF z9Oq0YwV5x^E)wHtle4^ zybRF>uh070WVXl%PC~T7YrCN~;eW>khalSE@1l`5ofbw0w??$V-;|X$VQv2nzK>{w zzsGm98SH;MxG$m&{+63)GwaLC!P5|J@IKH~n>#6IgRdjn;60={nct2EUq`gT`%f!v zat3<@ry|P;2cC7d`5KFX2zuE!IKef@cHtQHXGK~4PK3C zgU_aqwdpxOHs}LH8+@+y(Z;v&rJ&P@Huy~ZRGW&IzXTN{+TioFzcxqSwGZ+{w83Zb zAZ>p1jtX3fXoJu3!P;C74Gi!_w81riXmdDs(dQ=-ZE*cCRGVd=Tgh5P8(e#Qsm=R4 zzLjo>Hn?sXsm%_T1F{>@2G=~Jv`H9pSJDw}aJ@w9iRuUEiY1~AuC>0>b=(@gJ;V#q z2G?m5v^n!fyCHue+Ta>*vNr#G-Dk)nL>pWmPSNJT(2+xqBii8F@*8ck8qXY3h-icB z(iz(94_YB80_TM=z=Jv>{Rg{Iv@Rv_BoT6&%~mzM7zas$x@*Wur5 zQx*HikT>G~AcJf8McOPJaDK=NMAyOf|59z*xn3XA8PNv!4$HL}^CD=-Bt#qBcdXK; zxPRD?3Pc;+v#ix7{Cw1q=ZH4A-}ynCJe#B;MnoIjD{auG>7tw=tr2Z-pXH>@bN`Yd zafmkf?AxSGmDxN5w`fD(!e{+_i%%?iTYPIV$6~p~GKhbkw`gy!nuoGq{nJ#`O*eqKVSQp_s(PXS&jSXywX!FOdH|c%H zbLhapJ%~14{5p_%YuShRULTV2J28mNH@#a2PDFGa{9I(LUs>b%Sd+QEV-=aYHT423 ztLu^ZpS`h&IKoLdmo~b1tAMq77afWLn)i7Vs{j&3daeGVNSE0$L#2+}>dzV^Os$ zpuBPy8N7V$^=qu2g>!((yy?F-X?C_$C*$SFfG9*ipU}l!$gDZlDqs$x4PHNF!rYVY zoI|wni2jO9ow=TO66avl3qQ>N9#2_sHIGcySMT5X8_{Ow(Dh^vc(u8`-?PnaZSWc+ zGk3SwXK9Ew9?@=OGLC#YxXaN`2Wzv_aF9%TyWN8uwBJo;z13+lPecD6Y(#V&ybj46 z^~)F>fM_#w=nXOzt_|(q-qX-tn{hMml3CupwY@W<&CvCa$asbIv_FezgV!pV(4C*# z$0FKv@k=68cl9{?cM)yg3(X<()A3pMzaiRKrInEB(0-+TZ$uls1U}cVXS|l}@tXdx zjoWWKhUq#lJBuVC`g^%K@1X0ahwsmlNJN{CW10`wb(Y4hmNkerZX0)y>FDk(T@h`L zcZwwA@4sCF5N-Z&Y(7GNujcu?q%ES&pn}n4EH>_z28cEhPCLlhxVuRUM4NOwA2RPc z?2}fAHi;c0$(;B9U9KS71P-kslbYitIfynx9GlZM=sWobq&cFEr`yM58iyQ`rieCi z`J>5HIvtU^8;_8&U9g1AdD~-h1<`emJMAE2<$hdj5pDj8^djSEIw2DfZLZn*ka@@9 zq%=pgxqkXK8Mj@h#0$~pLdQrl=loC0B}AK(z8PdHW4xvA3vV)RLu<$+=bVu&MAx}l z+{i({#`YM_iYKDYhmOt3G|vB1nj+dX?e;#I5eYt6C*worXSa{ZScRMuTSV8H<77|9 z#@iSDroLqE<&P#)?sOhKVdu&Gkujaj*N%V5OhkXLs`*RE_}cnmZq<*>vn5VsRz&&9 z4~VYg;k1K{rTYc!QGS6;RsB6=QiflYY(&@jBhrhEqv;}EV{CRNA1C8=@)Guwy+n0< z?0m>rJ6y(|p_j?L9d?vROd=@BQmZAf2@sX)7sjG%&C<(u>Sc5)p_5sIhn@!H}Lnx zCe)`5ne+uWv5xU3)v@mOKA8~-H}N;f#u)Y?nb8yf#(Jc`sm_mXACs{R`5S9a*c@Ej zkIdn|x3I3@7S);IWKYJ%`xgF|+1xqxC7Df4Zlgc=Hr2V4KblOr({22{vzak%5*fF& z+vxLSb2wutrzA z>)8CY^)#7VPqyP zyN~@P*_`MYNyf+jKHi_%WGs#*)1>Y{*k|w``d(G{0_$*-Ky3Isp%GnU?KgDMA&>AvH zIU)GGV1s>#9QAdSch7&Z57EE$e6SY}ne!|D#b*keLxu)q$}j$l{b<-+E^b7|)$lJq zci3QG5;7}$Kft~u59s;4XKh2~)XE3=Y+|#xt1X!x7am}L3O3lIfs9rD1MJbj2Ky9{ zap)F`eF{S9`CzR+ne+vr_>5zN_3C6&PljT>I-ADb-X}96Arzm3Y_M*bOw(2mv2OVx zJs+&yB{O>BLwr`U!TMD)#@!FGew7W@aFVeMd5F(bHqUDMkU3y}h;@u?u$GU^;l5$` z%nhUGjP-0}S}YI4dNwv#(?!O{I}D%8Y^GQaCG$&MnCwCHdmYyHklEDa5k9*gk-_>F zGUdY`VSNi5tnpyu1hbJ1);W-IzW5019N0{sHi?W|+9O;8utC2&neHva(eEBk&lx@6 zWF|X?<2r#2`ku*HZwg1>GaK~&l9_ff9M=+Twr=>IOuv+H^uMyf8Ej;HZ6D)$<1syF z^g)ujHtaF_AlcYVT|;K-y2rRCVe|LQAIW%nKSnMu^NpU+&xJFG$RrPcf-{HM;2a<_PHUdv93VD0n}eC^0UES z`DDVQp5dC74fd}mV^#eO``5Fm_c{IS*yo*0#E9qE=ba7qUMDkY*>hYQ zv%!AoWRC26j{VTt;QE=2kNUl26LlvU%&?Y zr#=QfZyjhiG>_VflpDY{f@k%BsCmQz`Y_RX@XnlV%-6{tA zuEx;Mg?kV(-aTV*55flfladJ<8-x8x+2B5f%=r~DxKCk&eLTr5+8cv?JlSAxO)}*d zV{k9S2K!x-nHCv?{Vv(yeus>!AqMw5Z07%9Nyf9u3+xN|f_^`^CnB@5_Y2$;vBCa{ zWZI8^f&CNN;J%5>sg*Bq-^2#{43epFdx3oh*O#u{oUB$K8{TKf|t0D zV}pIr$e6a{>#w6e<8ZG>CiUb?-0QKyeqm((40?(E!q{LBFES$%UgCa`4ffR{6IAsQ z`)aYlJtLW>tzvP{7)#F?`%jS>+BX*aPqD#$C7IC^V{u=}2KzLT>Af-*`!un^y(byt z?pWM=vcY~vWZZpXv7Zqe+@F%M42i}4DVzOYenMt$N-XyMVS~MR$Q&@o;vSX__QxS} z?!7qdj}u3~L)_<*Iovl6_qlAaj|`c`6XLLs3>(}FlWDO$4)?-ru-^)q(=Kt?Z-ou+ zm&w?8$KigN4fZ7=Gd(B{`;xH1ULj<5#>HW;5H=g5zaX=(EDrm3u)%#dnN3aNao-(J zzeDVELB_F1JodR@gL`u_<-_A~Z_Wn$L6G@nc0BfjV1xU2GUZOFvylz!c0rRI37!)JrB0y5oOzQS0+ zEBZZSy*io4yO|LNKzy|A|$qd>5 z3hSTQU|fRCw2QAWF2M%tgvopz`U>lW*uJfDD_>zfEgOt)kny!m z!1zW2{hqPzl+55B30QZ^24f&(t_@4T7zi7z&m?0zGXd)}*&z%IU_hWB<76(+NyOL=8=NCf zCTBw;&JkyW@gFjl?ui)xVT1F($u#>j5$Aui!59&lhJlF~BVvPdyUCA&ZHkq{_C*hoIHW-g0lRP{L<56sI zzBQQvGm~(>H5-gsk#Sm+gfS~NIG38tS(hZ7OU(x3T4Vx_Ct+NRjd`O7nc!n}7vcWhcnZ1WnFb>HE=iQRI@0Wt}ZrNb0l1#?k z6pU4}asB-g8B;XA{yOSD4&#|@a`5%nQ3mJBl1VqG;Cxv&81p1^_uW*Cd8SewoC`~4 z&j+bE7nTjiMaeh}OvSh;8=U7##yBPw=ee@M*eRLavr{p4$_D4Kl4-Us73Z+B!T2hf zJ-hIn5&iqY`Ke^e4yWS$R5locB{TLyD#l>h;M`L(o_AB_2%^6i#%alfN2Ow%mJQA; zB~y}>it|d@U@Vu6Rdp)Ha@pXVQ8G>6Ny9m#Y4m(>hA5fFozgJg%Oq+L|H)%N6lMTj=$xK?7hH+yyIFFM|oy}=DkCP3?mdPC1mxi%r zHaJIyC_FXa?pc*x(#HGB&XpILD3+<}b)3rTV`N+nnV8>UgY(14?5~@J^TV>}wShSxGM-JcFbBj2=YEmd)iDd_ezCzk5t)^} zvoKG@2IqB=88ajc=XJ5cToRe~$yp;0!G?r&eZRzKIRa$09R% zbC%3N^mQHPq{!5`WnoT=4bHV9bMSZ;&b4BLc`GtKE@WZeiVe=AB6B4m3+GX>!Q2*^ z-jA~|x5WnMNRc`HDhuaGvBCTo8LRv(%zv@L`A=k)RA=G*CpMTPBNJ$ujXAPx`W@oj zCNhm$XXD%^Hkd~v;S3A{(5$LuUEgIXHJGhkl2cXC%|KRSxDE+2Fh!G8ek!;Jh3*n2RJcv~LdP zBH7@a8#0fE<=~tfHkhv@GkRhU<}2CYd>S(MX6N918a9~IB-49k4(2r3;9MCp`#0s_ zTp2c)_atN7or8H#HaHK4%<#iGI1h#m=0?f5`{ZD5lnu^tA@kHf2j{r3!Tc#1%a9z* zpR&RED`W;e&%yaCY;d*;nYk%Bm}6ywb5qD{DaygQDQqwgOXh$%2lKFOaNY?SZ>wCK zcalr5L(J8ZIrm;J=4#pCoDwo;yXNAY5;mC6C3CoMF6MLD;CvA>JBQ_pE27_9Fy~8V z@q}E=`Le;eAY{Irm5Xyh*kE3mOpE2Ym=|V)^E}9;IOXCz4>p)PCUe>)7jwsKa1IBV zZ};co91b>^UnXPYos0QpHaI_n%+1TWI6s38=Ag+;56ZA; z2r^mi@^C%`8_bE5aqN+YIdL{P*MW@pfIOV*zy|Z?WXgx2%$}10Z^lWf$ z0hxuT@^Eee8_eUAalV*`d3-iFZ-C66J9(J*WP`bWGF}h!FxSrp=LE2cfkE`^5d8pT z+|u&U55T5}!(=jB40+h!pAC8j$SgJIp=W>%_T?w@m1REm<b3XRdXM^4YGLL)bqxXOf_Q5CPX`hdM@Y$e0fy`vbeDo)n2&x5HWyvzk%_yVkNw%%pr?Y&*P;37sbGVB)yX`J%E!Ly zY|wW>re8`v`YzaDKXfw33i7cZIvez6kTF;0qc?*M_Aw_jwP6AFF)yHh3-oW0@wF{L z{{|cEKTgKf9$$YQb?<;44>E&$6rjh04fYKuv$1~x_6=u)J`gh3h83U>gbnulCX+d? z0Q-HjL9YlI+nELE6=8#Yy2%V!RDgZD**#cZlep9s6sOS-GVE`)jj7&k31r zt_A2hVS|0K$+#UXz`odQ(3e8S)4KqDDQvKxHJeK?h9oN$pzRynhknj$n?!GKo1NX?E6f{rlJ7*KC?le44L%$ zh3Jzhq@TUjeKuEZ3gs4}e?RD@p*kDe6rz`gO=K9G&$|}Na75QZzYW!?>Qjh*8#Z3g z*;etDrxMYKV0 z57o)pP>9|hHg=_Ke%?_i+Ywy{{XbO4(!CJ0|Q?8TTuNasbhF&__h3VPGNph}aBozl+TJhlS#d=sM^%B9j(Xh+ZQ$3wpVbaY!zd zafq&iek3wJd4=dlV&fsdlBr)_D3*w>gPtWaQ|lF>XQ_xx_=Mlc{Apbz7Z6RwVx- z+N^y0cQStm6-h9n4f?*w_=Vx$6w#*r2cBe(Miu&mk=dDCgx)YVu|vJcEXga9 z)rhWx{xLG6OhxD)V{>ZOelnfkFh~zX*FldNnMx}Idd%2ta6UlhVGDyqBD&7VcMg*A z>|{V68k_0I*-Ym;5tqRs8KC&+aC%OG75ZP0^9=B&Q~J$P&? z4zuZc*C4$RT?c)7RLA>~0eyOGhTUh=HpU?TL3ADT@==|=$p-ZDu{oU2#++-AH}lw_ z-;e4nEHj|rkBvo3Z!+O^isdlXVHnxx0jGb64 zlM!79J&IK4*O|rWQDk$YicRqM#qt2rboS>&q++R) z%m)3LWK22u`s?UA3$BnUDk&Bdq78aD$)uZ$(Zk8++A%g!Zy6;X(RI-0Npv{K+i)*eGieT?hT5WE=(>(J#uT+n5_!3H4>NHzt zL~kk^+c$5MdA7+Yv52mN{#7!2cH#GoXyY{O4w+&5jN*uBgC18hWrvOEab;7qJ%G$< zZ=?7kx(@na$&9^VL?0}h)gf$*H}G$P=sNqq528Arca7+kWmBh7FquA&j4}|>b8?6zLuzi=sM`{CDXW53Hp24xX%BV%(m_&@++e2 zylnJ3PI_R|~6JAh)UTZdyL2L}B5-CS?9rR;UohEfl(T`n9=CfuoWIlSkR6a#? z9rSFI8DU$Bo^3W)7r!7gvrVbYLv$VVb(2}qxfFffYz79i`T3(#*^cNs=>4WTyZV)) z_nXb5mT_dzh@10G* z!)at(?v%=2MAt!YJee6GrRa@k)4PgI&xlg7Lv$VV&r_X>m{Ro5v*|x0lgz!OQhA8z zI_R+{Xk_ZqU)enpUh^fGW6=R zIkY2}Oy6c@G8oZy(9cgMt8E$j`PoF}u-X4XnH)oOotUHfROgFcW$5{5({_9TnY?~w zVnlQutP3FHE@fC3z-ILgHhmn*WFVsJVC?|ac{;ufYX{go?_eOa?3*%Ki|9I7UqI%6 zw0EZAHQj3)-x4#S9IA#=GZk}41d0DnMI?_3V5$C5mC z1(G@FG7!^aO&+=o%=~(WnX8-g)NM%SpzlCAG28RdcVK2#YX>nGcIT<1r(O~9apyeaEhsvjrT@{05 z4tgBK^!2l&$HC0*=gjOaZ&#_1%t6e$r)NammqLODr|?C66q z6EKXK7cK3|0m&S6MkpsZ)Q-*wGwC&aiJ95KuI5292fY$vGCs1SSHjHso6Ho5v8$qx z%t7~ra@r2GqkF>4s13|a9Bx-LAen=H3g!GT){cG(GYex15p!pfT|I(i4mvEvl$mWu zhlQCYZx<#ebb(!kLox?F7h*;(x1;C6Oy3L4tXOAP>mZqfE)3-y*kVT)hM7_;nYs48 zUEP6X4*D{b<4CciFT+fSu0@G?JJqh52W4lU(WDfc}l(Xc89sM0<;y*4y z%qpi{ZGdDBIzGg#^>Lu%;~*yd?UKwC2Ls8Rp%a-|UDkmf5Hm?vm|0%Qq1Hk&2VEih zvli5Fpew{o;s$1Byzfw7Kr#n?BFY)p%z-`;GtT~{h=~n$sNs;zLFb5=PF4pxN6b8_ zQJR>bNQVlAWDa^s#JtzlfnE|b!yYnIsJBCvgk%o7OO*2{)`9L4GsBaa$r|BMXCaw` zeiP+v8|Og3iJ3pgF*9?rL(PL^4mwbj(_^*+9Vlkpfn|wlu)v|3K{5wDDPp|K9Oy|g zv&_rPnY9je0g^fBQc=$OuN~-8F|#9+nW5VqYBVHs(6^$ThPxf;TQL)r$jpla4&{Jk z4mw$sv+t+_oh)WP?OvXk@mUTv6_PpVZ4uM#X9s#)%v7)XHZe~wIaDqrbI|P~=G&VN zbi0`8{*am84;(5Mk~!#qQI6kJ2l`*kyp_UC+AD|3gk%mnVw5x5<3LA@nJ!bAsZhwN zszNdcJu=EkFX=>&jG2nz6^V%}=Tz~K%t6nAB~vE z22S+Rm}&DXGY^_M)e}hOptD9fvx1%ItTD6ZduA$F@%}(E2fa4RN$%)GuZ@|>pD`2C z#i`muG6&r^$~hb3ME8xEJ7Mn<(`TSl4T5A2`f2JMlFYd>Rf+jzj8jd3B!dne zF}a^P(V=6e{cUC@&Ty(3kjz2Pj&kf@z<(|A_i<_$GZPb$14#y5Jj!{w%84!>Gsk8y z6Ti`^#zQg(eLc##ztxGp9y336s!mL=olZ3nk~!$~5p#Nv6P-S0`c$hyOzTvqvO+Qk zy+2~U&v2sm$IQ5A%#=IjRFxr_gKi+@Oh4yDH;@@W8#DJW<7GN=3U= zc}V7qnEh5jisKY5s`eb%M?A(?}YD&@4f=t4)8nP0Ck z)8&Rs#XvF#JyyyYau46jkYvX1V`ltgmzoMm23=Rmne*I*t}8PumNB!`?oz8EnS(wo z<*d_O=)*G8GQI^dUl(?(?;x3j&MYxWer|MTnTd^TNz9INZj}Pb9Q105*;(0*UM(|a z>je_CqXu#ynS<^vG283A(Y<9RvTzVFTbsDm4oK#ppG(ZfKsWli%oNRGW@U(5t%qa| zI=qxKzr7nBUS^_?Gc)Bwx0(&f9Q1rCXH+*gdcMq5+{R3=-flGzk~!!CQ%-oS8(m;# zMt;srli_X^2+17ug(>HqF>dsQnF$-(h8S&vTNVC{8FY$?xi`&?PBAlE!rKy)IoGXz zg5>K#@0gfx7rN0qW@di95Mt&ocdLbv%t1Gqm;r0u=q5AsqIf7Vtv0(=J4oiBzf4S- zBscoY%-ny%%)?~2dJ4%Lbet(Cb*~#8XJ-2SgPFytZnYAUIp{%CPTveSdeF@D{cmR8 zKj~IYA(?}&H0AvBtQ%cvX6~+ICjFvYWkE6reQL^?e*@nakYt|DU?%#WTYU^k2Ayll zDf1ZbGbEYWLp~tpmuGHu4U!Cc*~F~O!}l^Ine~zFiRt2Xs~AW!=x!6^SIC3zwuhKj zO~Z-FD&bLQA(?}IH!(BIdeHA?X5c#=h-p#LquM|+2OV%?eyip|2b`IbmIz`t)bXfq zAen=nI58hK^q?osOz0zKoXtI|Kmar7l2cAnum@doW*q03>7qO;29mD_eRIljbnu{W z&P=ORX1?y^QQtu_2c2}vY2V$0PC7H%R%Rad@u;Ve%t3FRa=skoL2sRz50@}gcZ5eZ zf@BW5?UZwTj0fFzX5O33%)rk)Y8WJQ(0`{K$27b@)0vqvq!TgA=6ci`Namm;PfVSK z9(3fH>D~DwVh%0ysB}o?phr(k)EW^cMEkRrd*~+Rfc2^ zdi}(#IqgBOpP5ZBnR(~DM^%Gl4!ZxGa|Jn&WWK%2O!-?LRRxj^_5)DPvK-tSkYt*l zXQucc9#saCjDKVg%9-=RgB=3Qbg(gFx5Ixe@!1ac3{XzI=E0r;X727`=2juEdH~5B z>>{9?&LzFrMZiqKZOj}k>s2QpnS*@=l;dB~i+u&m?EH$Ewbi_8GbD4c(|~dc)bV1c z0W;U;Gc&^9tHwey2YU}F=jUc#>^)#+=@e!HT6tA#NakQS0_Cg@^nU?;8h_Nq+|61bv3wt4mv99%EF9b7HYYrx6(I&52 z0m&Tfjv(gzHZOKZFteo65MnCq#QO}%9PF1Mrgw@L`z4r}TXrZh8xMHZR!HVx2L&-V zj(D+yf*GxN95I!SdsTHv=3q|+F+H=r*i*rbPr+fttT^XY>mZqfT^7WgzU0L&3uYF1 znDP15tBOG~2m3B4C+MCR`!1N-kjKpE-@NKmNakQC2IXx2(~F%L%rt$$%(+)ybs3U5 z*qcE)n#+s58O%gKVWy#vrUD?DgWVdG)2pb4-5Sh1f5gn(Qkq%_$(-D{(Ug;1PQ(5U zW-8?{^GhX7U4vu}c63mV{XO`vCBApE?=VxPuBK{2lEEGi$_Z(xVUGth1#U6ZzqzJ{ zLNW)tJ}75;D-F9om`S_A%=%DGZGmJC_JL5&{`MO7fiP3xIy2{@G<6x0IoKIOIgh$% z*crmi>8s3WJvCK0h8gS?p`3F4HS85(rpi@j>J8CUV@SRp>>i<<;E@`3k1+G{3Nw*o zHPr=@IoMA^IlVr^eF#aW^HpZzrfDi3k_>j3P|mnH8g`g46L5{0sb6Yp4kUB1=Y(=T zU!q~p2{W6nGqY%wrdB{Q2fI)xXW4oUyHJ=}`YSW5zSh(RNakQ)3gxU$(y%XunIgBD zS(B`(O_0pNP8H7CgB(aQh3+x4@}Q>HLz2PX70Owfrr{jU%z_8ZEI6*IWsuC7K71=VzJ5` zFc$f5CVee#n@4lmB(rf&1z*WbnETxJ2_%_Tg?1H^%%gW6+U`J-ximk#sASImc*B+j zNhYEA&Ek@&IpVyn3M84*i4*)J^HbH6woFJe$))|?l1#|KBepD0ZkYpNtH?Xc`T zxsYT|*SFV~%!`Kpw%;Mi3{PI_FPVPbE7*EKk}24@Zez(znc!pl6q3xAl(eRjX%u%o zqb?+wkboWml1VPLC*xa4GS~M%X(<`!wJ$SXLXw%->WfyA`TO5OGgd>ADR;O^8_7&c zx|BW+l1xg-z7Wam%}zg>3`r(BBT7kT;~yj2ZG|NBIP6}SWIk!nSWwRxMXV0 z8=x9MlBw0PY)8q=TewaoLXt^8{e6^VZds412asg?byD>2u?yM$P$ePBIL}?_EOV9> zFJWB+NoIAovE3x|-8a>&{{=~=`K2N~By*x?fb|R{nR79lV9QMpFxr-*8glj$*j#tux^GVlXQFNK*>zoJ=Z!Hl1$iO&mhT+uqRr_LXx?avudbh z_KaC;Jp@T++Hn8jl5t=E#_D_H8)7Q{er%*n*L~-WG)_jWxWAOM$=}_l#E-`toS(?=7--M;w()qEiD5qpIF8~ z11y98=f9s?#=~1!&|>*dj<2QQe=>YDi|=Vqw(h0Zk)AcPb*Ap6y)V76<86-XUa5xC z>v^p6G2J`TNP2T@Q*FA}vWfI=W?atDJwN>!iPzaPqqFdG$jeE;sXwcH4>yyUbJM2@ zZ&h>Y`KQ+wUQ7LXi$Cw+(G>mJ=DUSF|D&~q=hs4J?o8X3rhg5S$qPtpD7+lQKiBbEVvqC|-eK~5j<^o%*VPM@uVwq;Ey7zx-p7Zdg=Yzp*A+ed>_dE zU2JN*RQBXhw?AE<(@}7Nv z^E=&Zq5pitYpLg7zoG8UBQL(`)26z2nY{3T`2o6DudRG7hg*1B=-y=Vss#26)V*x- z0)n~+>0TxMXDnXl&q2?GH;TL=__?lMcbL4Ft;z-Ko?obZol}B02(LeR?%;P@>(}if zZ&K@Z!n3rKna^4mZKGfJS6;wqd0pX1zexSMfbrx-`9LlrHi26o&7X7*DW6=uW zd1vu8XXblg-UsIQg84isU_KKq=6hf<-vj(OFz*BNJ$U^y(Yz1L_rSala1WT@3+8+9 z`W`Uv1M@vF?*sF5B=d7K^Rq)d2h7h7&G+E-nZUdc%=f^&56sVy&Cg5B&r8hT5zXI| z^}mBRpNZx((R?PF&qVW?Xg(9oe`{s_o^1Y}Z2q2Xo(at}p?M}W&xGcg&^!~GXF~H# zXr2kpGog7VG|z5SCN$54=9$nu6Pjm2^Gs--3C%O1c_uW^ zgyxyhJQJE{Li0>$o(at}p?M}W&xD%G_#P~F7-tppjI*R%an9rNjjMoO`Gs~K79g?HLddPh$kJf-gi4S7p?lTRfGFQu&XYMpvlc(uw)@8Zd`C-uxV z6{MGVa-Q&t>$~r}qb*Kza?1*Am{AhSDo?%p&$Um!n7|8chU#9`aOt&FZT0=|zRM$|*WWtSs$W+yN_rc^wub56 z#AxY_{b1q;y7%}a={Y{IwAa0UU8T3Z{Vw61`&fD^JR)4bF07~Yu7=+h-u_EvQD)3=3d_4AMx4Ycw-XC-Qefg_rvbod!-@jLz zJKe?oLVMeJ-@Ccf{muPi?sWh6=P~#@igxn3#QWa=Uv|3x#s8ziJY&AOKg~1doBPu| bW4^g3%roYjd%`?pzPTse>LlFY5&t7{Fi>PS$9kO4}a6|{zuKa zTiSp7|NKY)uvvFY`=@`yulxtix?9?R{{Q$3f4^CGOZ(e?;HUh(X5B6A|N3|Ti@)2f zyQTg4zxMzA-G-O~Pszx6Z!RuzcPiJ$tD{zS9xmi7n!_<#1tn{~Ief8{6t-+!!GcT4-P{n20jN1JuGw7>8B|MDMc z*4@(n;2-{J|4p;*miAZt#6R$dnsv9d|HB{r;s15B?w0l^{`i0I4>ap;X@AG>|LecM zS$9kOcYo~9`7fJwx3s_T_x+LI*Q~px{o_CSNB!r`x?9>G{d<1%?`hWE(*C9&`M><` zX5B6A-}qg>;6G{B-O~Q-@B0(Kvsrgb`v-r=kNc0Cb+@$N`ObI0+w9l<^Ji&4pFOJm zx_>^Sr2QBE(r>Kx>ptwy`n|ul+OPYtzwDR&vTDEX!~Vvf@NZW8bszTk{+*vy?bm(S z|Ng)GSF8QH5BryX<4>se>ptxN{YQOHoem)ac`*k1o^JTSP_s^f@_w950PJcao z{mJ)yk9{t^S$~#)@8>_m)%vrvpMN)3>(A1D{+(Z~KTG@hUS6#~OZ$0^T&+J#`+4nM ztv^fqc}-ufKTG@hS-Dz&miF^Ac(wj4t(QapzJ2bWKTG?0Ui^q=-7W3sIrM$ax?9@M z^X;E%*4@&6o|`|iS$9kOc^?0$X5B6A=Q;n+HtTL_KkpwurdfAO`*~mb=bCl5w4e98 zAJ?qArTx5*{`h9yE$!$1`Cn|--O_&E_kUuu?w0oRdE#Gg*4@&6KBs(tv+kDm^ZDl| zHS2C^KcB09ae`>StmiF`c@~1WHZfQTCTYpBg?w0oRdH82G z>uza3pR<2c zyQTg79{wwub+@#i-|v5Av+kDm(+z%Av+kDm(<6R$v+kDm(>Z=kv+kDm(@%a~v+kDm z(`A03S$9kO={^5$v+kDm(~*8dv+kDm)2IIZX5B6Ar+fXTX5B6Ar>FhqX5B6Ar_=qG zX5B6Ar~m!dX5B6Arz`%pX5B6A=d;IeZ`S>5pHCdKd+L_iJ$-HY_xjrZ;EUBZn{~JR zd$rAG-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5V zw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4O zn{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~ z?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd| z(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMCK zPv`h)~@LpC>=pum4JWx@Y-&zyAN~)1L0x?5%q?d+VOf-nwVAx9-{O zt$Q|m>z>Wtx@WVu?%C|;=kt4hHov~@^?Ur?&-b`@&-wRio|fNZZL__0+%2uP*{r*z z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$I zX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r z*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgb zt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMCK&u4+J?m0gbxLaCn zv;Dna%~SjQeB$_g6#4ppKDQt8g%+9J)7O^P|L#}ofA-aCo6Wjg{xfKs&AMA!ZL?W- zORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_ zwasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q z*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@ zb+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+Gexv zmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=TCbdK*f`*pu`&-uCJ^LgdF zKDy-Jd%EYeTlbuH>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO__VX?Cefw^H-#%Y| zeFiP|>yOf&?%AwAOMAL!v$yWq?5%q?d+VOf-nwVAx9-{Ot$Q|m>z>Wtx@WVWpU?04 zUVMGq%kLNe|I6WfthU*n5AK%VV{NlpcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~ z?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd| z(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA! zZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~n zHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH} z-7T%Q*{r*z)i#@Tx3r(n4PV`JetvMbwAyC-d$;a6|K6>8>WkSueQo2P;j4STSpU2I z^S)T-)oPo~x?BG9YMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw z+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C z&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5Ypg zcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B6A zr*(XF&-t0)>wf8;({9~!+O2y|yLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$YPWwrd z-?i_3J$x?ZGvep^^-uKZ{4%mTlZ}C);*iObuzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5Ypg zcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5V zw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4O zn{~Ie+GexvmiF_W{nb6^d$+r#)i>>uzaJ_nd$4);*`)x~FEC-P6}L{u#cy=Zihv z^Tqn-^zY%tGOt$KY}VcKKbyAMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6 zX5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$ zyQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~ zwAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kDm zt8bR~`LFw>d(O`UTlbuH>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$genqZJ z_bm3>J)6D#-+MND>z>Wtx@WVu?%C|Edp3LPp3UC6XS28N+3c-*Hhb%y-`ackoL2L+ ze3odN?YZM_X|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&x zZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3 zv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rTx4Qe|69Ke(Y{(waxbT zx?9@QJ?G!MbfMth=SvHk);~wAyB~ z?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd| z(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA! zZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~n zHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vbz>nY-E-QldrrG`&uO>rIqlXxr`@{ev|INq_S!w0y>-uKZ{4%mTlZ}C);*iObfMth=SvHk);~wAyB~?v_^D zY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{ zx?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W- zORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_ zwasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q z*{r*z{k*q+buza3t?jFOPU~)IPxqX5>z>nY-E-QldrrG`Pi-%|r>`ylvz_kw zVo&#cv8Q{!*wZ~fMth=SvHk);~wAyB~?v_^D zY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{ zx?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W- zORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_ zwasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7W3u zp7Z^9>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pb$U@EYUXGbI0A% zYMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Up zvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@* z>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasST zEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(th4Azq;pq-*mUMpCuzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3 zv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW z-O_5C&AMA!ZL?W-OMANKe2?9_=d@e*oObJ;({9~!+O2y|yLHcLx9&OZ);*`)y63c8 z_nda?p3`pKv)F6*Z1&bYo4s|-uKZ{4%mTlZ}C);*iObuzba&1T&#t+v^$ zyQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~ zwAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw z+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C z&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQTfS2Yz+W`CjO5X+Q1it9wrCZfQ^VoObJ; z({9~!+O2y|yLHcLx9&OZ);%@2?4G{1{C9S`=Zihv^TnR-`C?D^e6go{zSz?}U#x$x zUcWDvd9~VRv+kDP3vIJmcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vb< zYMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Up zvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@* z>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasST zEv>fMth=SvHk);~wAyB~?v_^DY}Vbz>nY-E-Ql zdrrG`&uO>rIqlXxr`@{ev|INq_S!w0y>-uKZ{4%mTlZ}C);*iObfMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgb zt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba z&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fM zth=SvHk);~wAyB~?v_^DY}Vbuzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_ zwasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q z*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@ zb+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzaJ_nhyATlbuH>z>nY-E-QldrrG` z&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$P-G?Viovx@WVu?%C|Edp3LPp3UC6XS28N z+3c-*Hhb%y&EC3av$yW~t-W{8X*EyFXNk7io;&WAR@-dW-O_5C&AMA!ZL?W-ORH@* z>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasST zEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$I zX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#?dQGft9#D(EO$%$X+dAzb6R&x zd%EYeTlbuH>z>nY-E-QldrrG`&uO>rIqlXxr`@`zR+in<*OuRl(>-78>7Fn4bk7%i zy61~M-Sfqs?)hR*_k6LZd%jrTFF$WDmU*?>X0z^=-(zjFS$9jTZ8qy}X|>H}-7T%Q z*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@ zb+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+Gexv zmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vb< zYMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3s5w&iA*idrrG`&uO>rIqlXx zr`@{ev|IO_cI%$gZryX*t$R+pb-uKZ{4%mTlf6d-n-|tny2NnMB8l79d}EsZ8qy}X|>H}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$I zX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r z*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3r)4pRevY--p~S?Wfs%b1)gH+v%P!_H@q|d%EX~ zJ>B!gp6>Z#PxpMWr+dEG(>-78>7Fmv_twwxi)CJ|w%M$^H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&x zZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?v_^DY}Vb-oObJ;({9~!+O2y| zyLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$Y7JKcU&EC3av$yWq?5%q?d+VOf-nwVA zx9-{Ot$Q|m>z>Wtx@WVu?)j~~ch6}xPs?YCw%MLL?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6 zX5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$ zyQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~ zwAyB~?v_^DY}VbH}-7T%Q z*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@ zb+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+Gexv zmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vb< zYMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*zJ>7G@4{hCZ+O2y|yLHcLx9&OZ);*`) zy63c8_nda?p3`pKbK0$YPP=u_X}9iK?6rF~d+VOf-nwVAx9-{Ot$Q|m>z>Wtx@WVu z?%C|Edp3LPp3UC6=ePFWJ*U+?EuSUYW_#|qTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$I zX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r z*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vbz>nY-E-Ql zdrrG`&uO>rIqlXxr`@{ev|IO_cI%!xRd!EbTfQDn_k6LZd%oDyJzwnUo-g)v&lh{T z=Zihv^TnR-`C?D^e6go{zSz?}U#!=R=gx~|Uahv-th?pwOxtYM-O_5C&AMA!ZL?W- zORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_ zwasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q z*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@ zb+@$IX0z^=R@-dW-O_5C&AMCK(>>>V%ho-o-MZ(rTlbuH>z>nY-E-QldrrG`&uO>r zIqlXxr`@{ev|IO_cI%$SUb|z>Wtx@WVu?%C|Edp3LPp3UC6XS28N z+3c-*erxaDb6U;Q@>!y7w&#w!rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@* z>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasST zEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@#i zXa86CobLhdmiE&szPjhM?w0m+&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbB!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%i zy61~M-Sfqs?)hR*_k6KlU!G?#mU*?>X0z^=uSspQS$9jTZ8qy}X|>H}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$I zX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r z*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vbz>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$g zZr!ukYxivS);*iObH}-7T%Q*{r*z)i#@T zx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^= zR@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%- zo6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~w4dksSNELHb$3hqX$oK6b6R&x zd%EYeTlbuH>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbx%Dh zyQi-$UuUO#zSz?}U+n3gFZOiL7kj$ri#^@*#h&i@Vo&#cv8Q{!*wZ~fMth=SvHk);~ zwAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw z+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C z&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@&c?m6EBw(dFY z);*`)y63c8_nda?p3`pKbK0$YPP=u_X}9hfMth=SvHk);~wAyB~ z?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd| z(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA! zZL?W-ORH@*>uza3&*-o2IiJ<;miF_z|5x{%*4@&c?m6w&J*VBe=d@e*oObJ;({9~! z+O2y|yLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$YYDC#ReQo)gJl*rfp6>Z#PxpMW zr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDyJzwnUo-fwx*7NtpGOt$K zY}VcKwXSV8>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~n zHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH} z-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^ zrPVf@b+@$IX0z^=R@-dW-O_5C&AMCK(>>>Nee0gnZryX*t$R+pbuzba&1T&#t+v^$yQS4On{~Ie z+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^D zY}VbH}-7T%Q*{r*z)i#@Tx3r(-`}rOH zt9wrCZfQ^VoObJ;({9~!+O2y|yLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$YPP=u_ zX}9ho1mhwc2L0?v_6n+GexvmR8$r*4@%- zo6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&x zZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&# z?dhKLS-o}7X}9hz>nY-E-QldrrG`&uO>rIqlXxr`@_|vDfa| z?5%q?d+VOf-nwVAx9-{Ot$Q|m>z>Wtx@WVu?%C|Edp3LPp5NMg_ncPqw0xFmo9(&d zZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3 zv+kBw+icd|(te($U)^&)Q{64?=XdF^?m4Zyr9Itq+O2y|yLHcLx9&OZ);*`)y63c8 z_nda?p3`pKbK0$YPP=u_X}9hz>nY-BZiS?&)jG*ZS$6FZOiL z7kj$ri#^@*#h&i@Vo&#cv8Q{!*wZ~B!gp6>Z#PxpMWr+dEG z(>-6Tp9k+3FP3?=+GexvmOn$uzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3 zv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfQ^VoX_8_drrG`&uO>rIqlXxr`@{ev|IO_ zcI%$gZryX*t$R+pb-uKZ{4%mTlf6d-n-|tny2NnMB8l79d}EsZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3t=3 zv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW z-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6Wjg zT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~w4dkWSNELHNq0;8`JMNxdrs?aX;1f@ zcI%$gZryX*t$R+pbB!gp6>Z# zPxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hTfMth=SvHk);~wAyB~?v_^D zY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{ zx?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMCK(>>=i zb?ctfZryX*t$R+pbuzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_ zwasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vbz>nY-E-QldrrG`&uO>rIqlXxr`@{e zv|IO_cI%$gZryX*t$R+pbB!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDy zJzuP!Gw*LNmU*?>X0z^=KbzWSv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5V zw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4O zn{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~ z?v_^DY}Vbz>nY z-E-QldrrG`&tk9Lv)NnsZ1&bYo4s|-uKZ{4%mTlZ}C);+(q z_wG5Z=4tsX(Kg$2$KBFuo6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~ z?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd| z(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA! zZL?W-OZ$0_eRa?IJaf0SpWh+By63d+miBbdX}9hz>nY-E-Ql zdrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbM{{*wZ~B!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M z-Sfqs?)hR*_k6LZd%oDyJzwnUo-fwVr1#Ai%e-1`vsrh`pJQ#aS$9jTZ8qy}X|>H} z-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^ zrPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie z+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_PxqY9zO8#syLHcLx9&OZ);*`)y63c8 z_nda?p3`pKbK0$YPP=u_X}9h`!LZ{4%mTlZ}C);*iObuzba&1T&#t+v^$yQS4On{~Ie z+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^D zY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{ zx?5Upvsrgbt8F&xZfQTyrmyZfpHc3X_Vc^mSNELO-O`@!IqlXxr`@{ev|IO_cI%$g zZryX*t$R+pbB!gp6>Z#PxpMW zr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDyJzuP!U+>2+mU*?>X0z^= zKl9pVv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^= zR@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%- zo6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?w0m+&-pyty63c8_nda? zp3`pKbK0$YPP=u_X}9hz>nY-Lu$h_iXmoJ)6CC&t`Akv)Nns zZ1&bYo4s|-uT?Y(JOSH}Q+;O+G+GexvmR8$r*4@%- zo6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&x zZfUj6X5B5Vw%M$^rPVf@b+@#i=gn95oX;J1OZ)kq?5lfD>uzaJ_nda?p3`pKbK0$Y zPP=u_X}9hz>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$g zZryX*t$R+pbp&++M=FZOiL7kj$ri#^@*#h&i@Vo&#cv8Q{!*wZ~< z?CG8__H@q|d%EX~J>B!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hT< ztb3n-vCOO0Hk);~d_HKK&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+Gexv zmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vb< zYMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(w^=)pHW-) zoObJ;({9~!+O2y|yLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$Y7JKcU&EC3av$yWq z?5%q?d+VOf-nwVAx9-{Ot$Q|m>z>Wtx@WVu?)j~~ch6}xPs?YCw%MLL?v_^DY}Vb< zYMafvTUu?iS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Up zvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@* z>uzba&1T&#t+v^$yQS4On{~IepJ&Kd_nglXcT4;E-RY})PU~)IPxqX5>z>nY-E-Ql zdrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbB!gp6>Z#PxpMWr+dEG z(>-78>7FmvbHV3_7t6d_ZL?W-%V&wU*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Up zvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@* z>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_PxqY9 zovnLLyLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$YPP=u_X}9h`!LZ{4%m zTlZ}C);*iObuzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasST zEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z z)i#@Tx3t=3v+kBw+icd|(te%`U)^&)AKWeN=Xad1?m4Zyr9Itq+O2y|yLHcLx9&OZ z);*`)y63c8_nda?p3`pKbK0$YPP=u_X}9hz>nY-E-QldrrG` z&uO>rIqlXxr`@{ev|IO_cI%$HM0QVKTRtC7_k6LZd%oDyJzwnUo-g)v&lh{T=Zihv z^TnR-`C?D^e6go{zSz?}U+n3gFZOiL7kj$ri#^@*#h&i@Vo&#cv8Q{!*wZ~B!gdWQI1@?x1+t8F&xZu#8NHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&x zZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzaJ_ngm? zt$R+pbuzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?w0oRv;NgR=g+*mrTzRa^3^@3b+@#qdrrG`&uO>rIqlXxr`@{ev|IO_ zcI%$gZryX*t$R+pbZ#PxpMWr+dEG(>-78>7Fn4bk7%i zy61~M-Sfqs?)hR*_k6LZd%oDyJzwnUo-g)v&lh{T=Zihv^TnR-`C?D^e6go{zSz?} zU+n3gFZOiL7kj$ri}k$mdFRD4uU6Y^*4^?MrENCrZfUj6X5B5Vw%M$^rPVf@b+@$I zX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r z*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?w0m+&-r}Vy63c8 z_nda?p3`pKbK0$YPP=u_X}9hz>nY-Lu$h_iXmoJ)6CC&t`Ak zv)NnsZ1&bYo4s|-uT?Y(JOSH}Q+;O+G+GexvmR8$r z*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgb z`}z6(>YnrG*xk~8erNdVp3}Np+S5I!-MZ(rTlbuH>z>nY-E-QldrrG`&uO>rIqlXx zr`@{ev|IO_cI%$gZryX*t$R+pbB!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR* z_k6LZd%oDyJzuP6lh08vmU*?>X0z^=&ogbaS$9jTZ8qy}X|>H}-7T%Q*{r*z)i#@T zx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^= zR@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQMwdbNr zIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbuzba&1T&# zt+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=Sv zHk);~wAyB~?v_^DY}VbH}-7W3sXY#9i&Yw+pOZ)k3 z|J6OGb+@#qdrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbH}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd| z(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA! zZL?W-ORH@*>uzba&1T&#t+v^$yQMwdbN(D}-E-QldrrG`&uO>rIqlXxr`@{ev|IO_ zcI%$gZryX*t$R+pbuzba&1T&#t+v^$yQS4On{~Ie z+GexvmR8$r*4@%-o6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^D zY}Vbz>nY-E-Ql zdrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbB!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%jrDJfHhs zEc0r$&1T&#pOe~Vv+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@ zb+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+Gexv zmR8$r*4@&c?m2%px9&OZ);*`)y63c8_nda?p3`pKbK0$YPP=u_X}9hfMth=SvHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z z{rv2Fbz>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX* zt$R+pbB!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDyJzwnU zo-g)v&lh{T=Zihv^TnR-`C?D^e6go{zSz?}U+n3gFV^$X=gAk#yjpFuS$E54sfMth=SvHk);~ zwAyB~?v_^DY}VbH}-7T%Q*{r*zJ>7Huylvfc+O2y| zyLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$YPP=u_X}9iK?6rF~d+VOf-nwVAx9-{O zt$Q|m>z>Wtx@WVu?%C|Edp3LPp3UC6=ePFWJ*U+?EuSUYW_#|qTUu?iS$9jTZ8qy} zX|>H}-7T%Q*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6X5B5V zw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMCK&(FhG_nbc$?w0oRnf9xDPU~)IPxqX5 z>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbZ#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDy zJzwnUo-g)v&lh{T=Zihv^TnR-`C?D^e6go{zSz?}U+n3gFZOiL7kj$ri#^@*#h&i@ zVo&#cv8Q{!*wZ~-)ECRVT5YpgcgyFmw%M$^rPVf@b+@$IX0z^=R@-dW z-O_5C&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6Wjg zT5YpgcT1~nHtTL_wasSTE$!)^^Ji%5p3`pKbK0$YPP=u_X}9hz>nY-E-QldrrG`&tk9Lv)NnsZ1&bYo4s|-uKZ{4%mTlZ}C z);+(q_wG5Z=4tsX(Kg$2$KBFuo6WjgT5YpgcT1~nHtTL_wasSTEv>fMth=SvHk);~ zwAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3v+kDm z^BVu^p7XWtZfQTCJ-@o=wCz>nY-E-Ql zdrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZr#)G*x5aOZTU<+-Sfqs?)hR*_k6LZd%oDy zJzwnUo-g)v&lh{T=Zihv^TnR-`C?D^e6go{zSz?}U+n3gFZOiL7kj$ri#^@*#h&i@ zVo&#cv8Q{!*wZ~B!gp6>Z#PxpMWr+dEG(>-78>7FmvbJyqJ z7t6d_ZL?W-%V)K=*{r*z)i#@Tx3t=3v+kBw+icd|(rTN{x?5Upvsrgbt8F&xZfUj6 zX5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W-ORH@*>uzaJ_nbc$TlbuH z>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$P-G?Viovx@WVu?%C|E zdp3LPp3UC6XS28N+3c-*Hhb%y&EC3av$yW~t-W{8X*EyFXNk7io;&WAR@-dW-O_5C z&AMA!ZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5Ypg zcT1~nHtTL_wasSTEv>fMth=TCyl%g`=Y0LTTiVZO#INo-t-GZ?-E-QldrrG`&uO>r zIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbz;mZ z&hF`J%jfUuo-g)v&lh{T=Zihv^TnR-`C?D^e6go{zSz?}U+n3gFZOiL7kj$ri#^@* z#h&i@Vo&#cv8Q{!*wZ~B!gp6>Z#PxpMWr+dEG(>-78>7Fn4 zbk7%iy61~M-Sfqs?)hR*_k6LZd%jrDXrHTJEc0r$&1T&#pX=IYv+kBw+icd|(rTN{ zx?5Upvsrgbt8F&xZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W- zORH@*>uzba&1T&#?dhKLwZ3)FX}9hz>nY-E-QldrrG`&uO>r zIqlXxr`@_|vDfa|?5%q?d+VOf-nwVAx9-{Ot$Q|m>z>Wtx@WVu?%C|Edp3LPp5NMg z_ncPqw0xFmo9(&dZfUj6X5B5Vw%M$^rPVf@b+@$IX0z^=R@-dW-O_5C&AMA!ZL?W- zORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@&6UW;GdbG|0sE$!#C+*kLU z*4@&c?m6w&J*VBe=d@e*oObJ;({9~!+O2y|yLHcLx9&OZ);*`)y63c8_nda?p3`pK zbK0$YPP=u_X}9hz>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_ zcI%$gZryX*t$R+pbB!gp6>Z#PxpMWr+dEG(>-78 z>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDyJzwnUo-g)v&lh{T=Zihv^Tm3e`@H^Q znOCcAHtTNr9-wVD>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5Ypg zcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?w0m+&-wb@y63c8_nda?p3`pKbK0$Y zPP=u_X}9hz>nY-Lu$h_iXmoJ)6CC&t`Akv)NnsZ1&bYo4s|< zW^diI*<1H)_SQX{y>-uT?Y(JOSH}Q+;O+G+GexvmR8$r*4@%-o6WjgT5Ypg zcT1~nHtTL_wasSTEv>fMth=SvHk);~wAyB~?v_^DY}Vbz>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZryX*t$R+pbB!gp6>Z# zPxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs?)hR*_k6LZd%oDyJzwnUo-g)v&lh{T z=Zihv^TnR-`C?D^e6gPWeh+xD%&XNln{~H*ztA?Db+@$IX0z^=R@-dW-O_5C&AMA! zZL?W-ORH@*>uzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6Wjg+S5JfYjW$J z({9~!+O2y|yLHcLx9&OZ);*`)y63c8_nda?p3`pKbK0$YPP=u_Vz1q^*<1H)_SQX{ zy>-uKZ{4%mTlZ}C);*iObuzba&1T&#t+v^$yQS4On{~Ie+GexvmR8$r*4@%-o6WjgT5YpgcT1~n zHtTL_Kd+gu?m1sO?w0oR+32f#PU~)IPxqX5>z>nY-E-QldrrG`&uO>rIqlXxr`@{e zv|IO_cI%$gZryX*t$R+pbz>nY-P7-^**$%2 z`5th(=Zihv^TnR-`C?D^e6go{zSz?}U+n3gFZOiL7kj$ri#^@*#h&i@Vo&#cv8Q{! z*wZ~B!gp6>Z#PxpMWr+dEG(>-78>7Fn4bk7%iy61~M-Sfqs z?)hR*_k6LZd%oDyJzwnUo-g)v&lh{T=Zihv^Tm3f@cYG!WnQhe*{r+edyBT&th=Sv zHk);~wAyB~?v_^DY}VbH}-7T%Q*{r*z)i#@Tx3t=3 zv+kDmbkF%Z+q&npTlbuH>z>nY-E-QldrrG`&uO>rIqlXxr`@{ev|IO_cI%$gZr!uk zYxivS);*iOblfBt zvpR!yjXl@5#{a=QNByqPUVB|tb+0woxX-!SGe7HTPuslNGe7HTPuslNGe7HTPuslN zGe7HTPuslNGe7HTPuslNGe7HTPuslNGe7HTPuslNGe7HTKi`9I_w@JS%+Gq-&mQL6 zJ#EkYtf!@W+OFYlc%d)ltYlc%d)ltYnF0^w~Yn>$9Hs3%X~qbkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2ePf%6V=n_Lyo<+q~H`KkIoP zI&Jf2&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5 z&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XrF;6jv%074>Ylc%d)lt|6J|*|+X_ zvv1w=X5YH!&AxTdf7|!&X?vRIS7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#h&}mc^)eEm}*bkyxB89>v_*QZS!W&{H&)vZS!W&{H&)vZS!W&{H&)vZS!W& z{H&)vZS!W&{H&)vZS!W&{H&)vZS!W&{H&)vZS!W&{H&)vZS!W&{H&*?d;0sZx~J{x zp0=xd+OFYlc%d)lt7V-ScMOy64Tlbz+6J z);(|bt$W_=Tlc)#x9)kfZ{71|-@50`zID%k+xPBidz$B2&uhtPo44!EnV;tJ^i_z`B_i<*%N%br|p@a^|W+P+tod7SNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!&-3E5 zd!E;4J?}$w&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bm3@tIl&)vBy+<+UCuk`B~5V+i9COd*)|7?P;4gd*)|7 z?P;4gd*)|7?P;4gd*)|7?P;4gd*)|7?P;4gd*)|7?P;4gd*)|7?P;4gd*)|7E#1?f z@#>zot9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFee0e#`_?^g z_N{x~>|6J|*|+X_vv1w=X5YH!&AxTdn|7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2eQ~+IfB}_Lyo<+q~H`KkIofJZXJ#F)5 z&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XJ#F)5&-|>XrF;5wTiw%k zbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNFWw*Y0_|6J|*|+X_vv1w=X5YH!zwLYXv^~x9tmn1lw9VUf=giM~+S4{~ z_RPX{oG@}-P88W&w5(Ar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OF<-p6j07^SnOmd4HpO z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6o_pYVE-dz#YERp|*)u=udEY#3^JdTdtfxI~^JdTdtfxI~ z^JdTdtfxI~^JdTdtfxI~^JdTdtfxI~^JdTdtf!@W`mCs-ScMOy63;`d-t?G&GW41wdAzT+jZy6&wAR^HgERK&wAR^HgERK&wAR^ zHgERK&wAR^HgERK&wAR^HgERK&wAR=d-d&}e$USQtf&3l3%}jd_RPYlc% zd)ltYlc% zd)ltYlc% zd)lt7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm z_S`Se^JcNfRD0Uy&7S#L&wK1?n>TyrXFcs{n>TyrXFcs{n>TyrXFcs{n>TyrXFcs{ zn>TyrXFV<5)9>%Ylc%d)ltCs-ScMOy64Tlbz+6J);<4i-@B*nX`W|2 zuO+8#-mW`me%8~Twt2H>e%8~Twt2H>e%8~Twt2H>e%8~Twt2H>e%8}|e*bUx^!sq; zXFcubp7rgXwr76U)6zX{SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_JkMXx?s;CH z^}KJ=J&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mjhk_tx_qTkJ8_p0;_jXMWc6etg>I&7S#L zPkY+t&7S#LPkY+t&7S#LPkY+t&7S#LPfPdod$zi#?dqPkt9#n6?rFQar|s&VwyS&E zuI_2Ox~J{xp0=xd+OF<-v9I0pX5YH!&AxTdn|&}^<^|YsL-t3v5^|YsL-t3v5^|YsL-t3v5 z^|YVg>DxX1yPf%2Py4yIe7mRZnV7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%Od+x*M`MB6) zsy%J*v!3>}&6_>*v!3>}&6_>*v!0gj>GxrEPutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz^I~7S=gq!#&zpVgo;Ul}J#Y4{d*19@_q^G+ z?s>Cs-ScMOy64Tlbz@C%@7>e(G|#i1*OJpVZ`YkOKkI2v+q~H`KkI2v+q~H` zKkI2f=lSiPKHoDx>uEptfN%G-J@d1kmhNf0x~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9zd3q-Xa$ug`kkkLjMp(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#~8 z?%C(LyVzr@J#F)5&-|?Ceg3q~n?3Whp7ylOn?3Who|f+E-)(hI+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZivVqd%G&AxTdn|uFEhyxB89>uEp#?r-<> zIh^@fPy4x6f4iscnV7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#h&~7 zd7dx!m}*bkyxB89>$xX5ZS!W&{H&*?d-{A=_q1Kz({^=F+tod7SNF7C-P3k;PutZ! zZCCfSUER}mbx+&XJumjPd*19@_q^G+?s>Cs-ScMOy64Tlbz+6J);(|bt$W_= zTlc)#x9<6G``$fmPxCzMc`Z3@^LE`i^Ru4zbG&c&^l{Jptf&24Q@`EQ_RPYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%Od-ejS6BK()wWn>~?3thS z+&|DgeGaR8+OFYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WOx-*8%HvBy+P_w;dB_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJumjPd*19@_q^G+?s>Cs-ScMOy64Tlbz+6J);(|bt$W_=Tlc)# zx9<6G``$fmKd)cAr|sw3_1ZmcSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^>w^X&2Lp0{Tax@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pf^FW1Q|;>@n4T`{w1it9$w!R`;}B-P3k;PutZ!ZCCfSUER}m zbx+&XJ#AO_v^`&tvz~vC{(1eM`}g7dlm9&JX`65Mt$SY1;XiNP^Jd?==gq!#&zpVg zo;Ul}J#Y4{d*19@_q^G+?s>Cs-Sgk}pU(&S&!5lub1nJb+&<$oKkNB@IDPYGSNHTe ztnO*Mx~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&8L za#}^P$5i|6oAJ2cz8USeZ$|s=o6&yzX0+eF8SS@kM*HoX(SG}8wBMN3?YCu??*rZQ zX5YH!&AxTdn|{?1>z zr;oe3r|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN*t2)J?MuFM?Mu$_ZuUEurF)ihpnDce z_bis~SuEYNSh{DibkAbxp2dFN?)+JN>~{}Zj!XBv*|+X_vv1w=X5YH!&AxTdn|Ylc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 ze*5O*?Pukz+6J);(|bt$W_=Tlc)#x9)kfZ{71|-@50`erA96_Mbm1ub;*F z+4DKzw9U6aL+58tOZW6StnO*Mx~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lt&$GvWcF*sg|FbQ9?qTSj#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K=Y`{t)*+J5KSm(V?JSNF6% zd!^4||Lk{;Ieo|WJC~(<7EAXmmhM?B-LqJ_XR&n8Vn1(7e$USPUEg22=j|Ncy64Tl zbz+6J);(|bt$W_=Tlc)#&+O0l_w${8eSgo-o_l+`=k2&}-ScMOx~J{xp0=xd z+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~X}h|o?dqPkt9#m>ebq^J&%Mzxr{URt=dyIqV(Fg6(mji%dlpOg zEcWxO=J(;ehxI+9d*06Bt$W_=Tlc)#x9)kfZ{71|-@50`erA8ZXP@uh>w9*7_WVxL zJ#WW->z+6J);(|bt$W(8?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc% zd)ltYlc% zd)ltYlc% zd)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp0=xd+OFYlb|4|ek2 zb02lg>3z1}xh&nYSh{DibkAbxp2dDnKmTs$eW~vQ-Sc)1Z{71|-@50`zID%=ee0e# z`&bx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_q1Kz({^=F+tod7SNF7C-P88$*G>w2?zxURZP4~Rm!*3aOZP06?pf^Tl=AtW-?jd3 zbkEy4ymil;ee0e#`_?^g_A~qQxqUv%*Wc~@?D-kfJ#WW->z+6J);(|bt$W_=Tlc)# zx9(}Xx~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%d)ltoox8rpB-~L zqV0DsOZP06?pf^TUz5+_oPRxEy65d2-n!?_zID%={mlNnzn}N~^?c9Io}UHX^LE^~ z?s>Cs-ScMOy64Tlbz+6J);(=k_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz^X!A4-SfLI{%lL1dpWviv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;PutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiP_Ur>sVtnr9jycWI_B)rQdlvioNAq#dIsF%$!>fJkp11S;%>KL& zpZDhVxaVij_l)j&JMLTeyxF(zd9!cb^Jd?==gq!#&zpVgo;Ul}J#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|Ziv>}{Xj z^SjsmY)hZ}KDuYIbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&lo+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+%~XFNIbx$isX^hw+AT=w(w zzr=o#}}yxQ}#=lOnqhgW-k_Ox`*+c~^-&zpVgo;Ul}J#Y4{d*19@_q^G+?s>Cs z-ScMOx~J{=nw<6gEKc9Nea}|+^l?}Bv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mjj)Y$v`=tXR6I?dqPkt9#n6?rFQar|s&V zwyS&EuI_2Ox~J{xp0;Oy`I-G`SI3-ob^iO;e)6lL{rtPWE%SEV^RwqZmF{`7Z{71| z-@50`zID%=ee0e#`_?^g_N{x~>|6J|*|+X_vv1w=-}av~`t!NbJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#Bw<&;Mwj`uWHI z?k6AJ^QV1u&!6_uJ%8Fq_xx!e-Sek?bkCpm(LI0KNB8_`AKmk(eRR*C_R&3m+DG^N zX&>G5r+swKpZ3u`f7(a){AnNE^QV1u&!6_uJ%8Fq_xx!e-Sek?bkCpm(LI0KNB8_` zAKmk(eRR*C_R&3m+DG^NX&>G5r+swKpZ3u`f7(a){AnNE^QV1u&!6_uJ%8Fq_xx!e z-Sek?bkCpm(LI0KNB8_`AKmk(eRR*C_R&3m+DG^NX&>G5r+swKpZ3u`f7(a){AoX( zgC_RVKDy^0`=fjQu|K-!AN!+w{;@y0=O6o{d;YOMy5}GJqkI0bKf321`=fjQu|K-! zAA9zqXFdDm=QSh?mmS^nUv_lQf7#JJ|7Az_{Ffcw^Ivv! z&wts`J^y7#_mutT^BKQ(&p-A@_xxjjbk9HbNB8_=e{|13_DA>pV}EqdKlVrW{9}J~ z&p-A@_xxjjbk9HbNB8_=e{|13_DA>pV}EqdKlVrW{9}J~&p-A@_xxjjbk9HbNB8_= ze{|13_DA>pV}EqdKlVrW{9}J~&p-A@_xxjjbk9HbNB8_=e{|13_DA>pV}EqdKlVrW z{9}J~&p-A@_xxjjbk9HbNB8_=e{|13_DA>pV}EqdKlVrW{9}J~&p-A@_xxjjbk9Hb zNB8_=e{|13_DA>pV}EqdKlVrW{9}J~&p&o`&$D-Q_w;^}?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZx)g%+KuE#J+v=fBpYq|JlQw zx$U=aUhJ9Me*5Odp1JL}Z(i(~+kX4z#h$tCw{KqTncIH*=Ea`5?YD1U?3vqsUVnS_ znLqc4XKwqAS(oFU`Ne*_r;q!w|FJ!<|Ns9V=s)Lhv!`vo*|+X_JBPRKd9!cb^Jd?= z=gq!#&zpVgo;Ul}J#Y4{d*19@_x!j0=kw9syQl5yp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xo@YP!+|!=@r1yw)&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv7gTI?PtZ(J#EkY%x>M& z_H<8Mx~J`#+tNL4&)k;oX?y0jbWhtex21d9p1CdE)Ar15Kd-N!#hKfF_K{b6=CCs-ScMOy64Tlbz+6J);(|bt$Y64{`38+JU`>pH*cTC>YhIC>Ylc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)k zv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mid@{LG%c7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mid@{LF6M)An>vTe_$1ncLDmZO`16?rD4G zwscS1Gq?S`{^ztd+cUTQ?Dwwr%x&qOKJJ;@(mid@-1Zx@F6VpZ7yIpqKJIPrN%t(4 z?pf^FBj4WN+c})$ReRdzn|7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVZO{D7Zr#)NbWdBlr|p^B(mid@+?MWXd*-&E*Z-WpV|(VdpFP~w zp1CdE)5kq?Te_$1ncLDmZO`2H8?!FI+nHbNw+;HZANwC$x@WO;&tmDG#h(52?Q^@G z?>Szzr)|F3x9)j6-?#30vv1w=X5YH!&AxTdf7^dPZ`-|l+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OF<-_E+wn-gD7Ci=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%d)l7)nccdl z?dhJjbWhtex21d9p1JMk^*^Uw*`B%WXJ2-;XKqXP^l{JJmhNeL=C*WC+cUSNd)l74 z?Kfs!-iI^4*l+LiaX7K>XJ&UD#7JK&Ix9`L4cRRYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VXV2vB>3tO4vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx~J`#pV_T@+Me!dOZT)rbKB4Be@Ylc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%d)l7)nccdl?dhJjpV$AK7G!(owx9je)t7K>XJ&UD#7EAXmmhM^X+0);? zzqj}79Ix8bHs9=9_q?6&Tlf68{pWMa_wH%Cx~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Oy64&3xO;lPL-#C}?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzRd*)|$>z=ls*Z;DgJ<&g> z@7SKXk4yKoJ#$;Sr|p^B(mid@+?MWXd*-%uPunxMrF+_*xh>t(_RMX+G3)aFp83Uo zTbqyjvH!89dlpOgESBzBEZwtMx@WO;&tmDG#h(5D?Yn+^f6wu%J#F*No}WGcY@W7x zx1ae-_w?_!x~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgEcVkm{;7M7&+)GI%+J5;xi9(bbFTKx zZRwt8{@m}Jxh>t(_RMYRp0;OhOZT)rb6dKn?U~!sJ#Ek2mhNeL=C*WC+cUTQ#;p5( z@@CnC{`oA<*3`$Pd-@!1mhM?B-LqJ_XR&n8V(Fg6(mji%dlq}175)qUY-UUM{P#Kh z^ZDrR|9el{)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_ zv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_ zv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_ zv|ZiPc6CqN&+FIjdG;XB=Ya2iMf(!EXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYN*pK=4$znfym2Byr<+yauV(Fg6(mji%dlpOgESBzBEZwtM zx@WQ9nDzZj_22u+(=7kjzkvU3>7L~r=$^&WJ&UD#7EAXmmhM?B-LqJ_XR&n8V$X9$ z{oKy+sy%)4W>@$0`L6D1ySk_C>Ylc%d)ltYlc%d)ltYlc%d)lt7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-Lu$_`QM&aQS4_w@@<*L(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF$0pDVg~*KH0N=cj%tw9O$0K(mji%dlpOgESBzBEZwtMx@WO;&tmDG#h$N2{fy7? zsy%)4W>@$0`L6D1ySk_C>Ylc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O z`!WB!(-eyR>@mLGvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6eoE%I zdq(?hV#U%ui=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm_B^lD>&`h|wWn|1 z?CPFA-_<>BSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz z({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz z({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_dI)m zXZO7A3Fw~1(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~S?tIB*XP;4*w4P< z+dYe=dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Dl-|kr~-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#hz!IdObVGtM>HGn_b=0=exS6 z?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DiAM?LI&*;T|_5$DTSuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#M*Hoa#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|v)J<-RIiigc-5Z1d9$l~`g~XSv|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!&%OHDJ#Y7Jx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2dF5|KU7K7yG%tf4gU~bkAbxp2gBVi=}%OOZP06?pZ9|vsk)k zv2@R3>7K>XJ&UD#7EAXmmhM?B-80&6_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&QfhO!fMEj#usJn>V|7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C z{h0sbdFCzlbI<;E&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R9zumJ~x@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%OOZP06?pf@4zN**tbG&L#-@Mt?J$=5bd)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&XOA|I>LkE%tLC{&vq| z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z(SEyUv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WQHS*+eK&he@}ee-5l_w@O$?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6e$0P!o*|3<+*`lhvsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&uG8hvsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WQHxvk!Z z&he@}ee-5l_w@O$?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xdo_pW3d*1GabkAbxp2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|v)GUMKc8p4Vn6rGZ}%*g?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WZC?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WQH8L!^o&he@}ee-5l z_w@O$?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF$0pG5_s( zCM))H5Bzq|V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZSZS+dYe=dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pf@49<2AxbG&L#-@Mt?J$=5bd)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?s@J}&+d72rF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN*pK<|&a+dopZnUkdlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R9zumJ~x@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&Qfhj`eV|7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tgC3|8kyjiv8THzTLA}x@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAYx_S-#+ zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR+rwv)<>=@v1$2^JZ7~^!cvtX}h|o?dqPkt9#n6?rFQar|s&V zwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mjj)nE&f}7Af{~|M_;$V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kwBPPoEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7JHsa>;B;!uiDc$Z+3N0pYQ6PwyS&EuI_2Ox~J{xp0=xd+OFYlc% zd)ltYlc% zd)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O`!WBw^UP4}=brNI zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG(SEyUv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN*z^2a z_a*0e)t7K>XJ&UD#7W*;(_p`Sz_H&>3cF$tzp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG(SEyUv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di=UKPzch2#uJ$>_L zSNHV!uI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2dF5|Ksezi~U^tzumJ~x@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zXusXFSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WQHxw!75&he@}ee-5l_w@O$?rFQa zr|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-Lu$_`G20h za7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEW%+HdzPmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|v)J7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mjj)nE%(=(-!-=Mt{3!v2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%;`|X~^(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXm_B?Obecw4=wWn|1?CPFA-_<>BSNF7C-P3k;PutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiPc6CqN)je%j_dM6oXZO5aQ|X??(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM^X$Nay~-m}=xb@$sni=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{Dl-|kr~-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K=&XY;zBJjbi{^v#=H-P7m0x~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zAM^h?d&FWt*V1qIESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mkX7cF$tzp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~S?qa^ulv+< zylPM1yxG+~eZH%E+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dq(^1p2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di=b69mf6wu%J$>_LSNHV! zuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DiAM^h`d#++X*Sv4{ESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgjP~0-i=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2eO%Q1{j6c-5Z1d9$l~`g~XSv|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-Sb?Np560yjiP%NOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF$0pG5^1_H!AjX9s73AV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(FgIe!FL}bkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DirzO<=`Z->;r*Gcu>YhH|)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!&voY6J#W_?x@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-Lu$_`5(?6rr6K5>DxVv zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_l)-2J&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7JIrweGWLstM>HGn_b=0=exS6?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{x zp0=xd+OFYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tgC3e>{7QVn5fLZ}%*g?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kwBPPoEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WPcQPk&) zbG&L#-@Mt?J$=5bd)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#eU5HboK7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7LPkyJxX<&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&XNc7<&UydlU06b83S~ z#2^xps073y1~Is%tZ|Wm1SB9qFp3q7Ai+%$f)ENpB+%@N5lq1dQfNvc6hd(*w56n! zl#o&wyM%5-x7lv9-I8t_CXN+=Xqu_ zlkVAU(>7LCt-Lu)I zdp6s2&t^M4qxF_KU%Q>Y`LgZRJ@@rq-E(iR?zy*D_uSj7d+zPkJ@@wNo_l+B&%M36 z=iXl3b8oNixwlvM+}o>r?(Nk*_x9?ZdwX@yy}i2U-d^2vZ?EpTw^#Sv+pBx-?bSW^ z_UfK7LCt-Lu&~ZC;!A?q>V+d*Ma*Y_{p1 z%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9 zJ)3R1XR}TBY_{p1%{JY$*`|9o+jP%no97LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGG zw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>)jjw2>YjUhbr?(Nk*_x9?ZdwX@yy}i2U-d^2v z?%U_x^JVvOx@WUZ_iVQ5p3OGhv)QJ5HrsU1W}EKWY|}lPZMtW(P4{fJ>7LCt-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?K5hP&d5>+jPxtzZ?%8b9J)3R1XR}TB zY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|Az+ZWxl*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c z(>Yn?0ukN|GSNGi8t9$P4)jjw2>YjUhbr?(Nk*=U#l? zJzsWjrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYFbw=cS9vrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1 zXR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7Kq zbkAm+?%8aoskHt!=WDmqH($2By63*$t9$P4)jjw2>YjUhbr?(Nk*_x9?ZbALVWo-e!K z(mk7Px@WUZ_iVQ5p3OGhv)QJ5HrsU1W}EKWY|}lPZMtW(P4{fJ>7LCt-Lu)Idp6s2 z&t{wM*=*B2n{B#hvwhn9uk)VOY@hDQ7u~bjrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1 z%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9 zJ)3R1XR}TBY_{p1%{JY$+`j0Z%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGG zw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>)jjw2>YjUhbr?(Nk*_x9?ZbI&~Qo-ezH(mk7P zx@WUZ_iVQ5p3OGhv)QJ5HrsU1W}EKWY|}lPZMtW(P4{fJ>7LCt-Lu)Idp6s2&t{wM z*=*B2o9)x)%k$pSY@hD47u~bjrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o z+jP%no9@|c(>7LCt z-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TB zY_{p1%{JY$*`|Az+ZWxl*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z? zrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>r?(Nk*_x9?ZdwX@yy}i2U-d^2vZ?EpTw^#R^``~%^eA#`G?%8b9J)3R1 zXR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z? zrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|Yb_C@z>w&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o z+jP%no9@|c(>7LCt z-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TB zY_{p1&33v@>#=jbb~}CZW!tNJ?(4m}=iXl3b8oNixwlvM+}o>r?(Nk*_x9?ZdwX@y zy}i2U-d^2vZ?EpTw^#Sv+pBx-?bSW^_UfK{dv(uwZ9ngxFMF-0dp6s2&t{wM*=*B2 zn{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1&Gu>Yzt8XLX8UwM zyy%|IHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM z*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o z+jP%z`=Wa`+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9 zJ)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>Yf6VXHX8ZISf6+agZMtW( zP4{fJ>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9 zJ)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z_ zzUZFKHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM z*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o z+jP%nJH4p&?m1t(oxb_9?bSW^^Yno&eBM1@_L@xhY_{p1%{JY$*`|9o+jP%no9@|c z(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YD zHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>=@Wi|*NM z(>7LCt-Lu)Idp6s2 z&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$ z*`|9o+jP%no9@|c(>7LDY+EVNDbG~*vee-48t9$P2y}IY#UfpwVukN|GSNGi8t9$P4)jjw2>YjUhbnz=~*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c z(>7LCt-Lu)Idp6s2 z&t^Lvs_g`GzIHo(^JUwsd+zJKy64_r-E(iR?zy*D_uSj7d+zPkJ@@wNo_l+B&%M36 z=iXl3b8oNixwlvMoY%_p?)kFUPP%8aP4{fJ>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|YD_G$CA`CZa%pI%=tx@WUZ_iVQ5p3OGhv)QJ5HrsU1W}EKWY|}lPZMtW( zP4{fJ>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9 zJ)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2%k7Kq*=*B2n{B#hvrYGG zw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM z*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o z+i6y9f0*;N+v%Gx+g{ysU+>jD_x9?ZdwX@yy}i2U-d^2vZ?EpTw^#Sv+pBx-?bSW^ z_UfK{dv(uw{-1Zxm%Sd+J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no97LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c z(>7LCt-Lu)Idp6tY zTW!~v^R?UQn=jj5-E&{>)jjw2>YjUhb7LCt-Lu)Idp6s2&t{wM*=*B2o9)x)>vL~5+o#vT zi|*NM(>7LCt-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1 z%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2%k7Kq*=*B2n{B#hvrYGGw&|YDHr=z?rh7Kq zbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGG zw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|cr-ik> zWX{)ar*FP&dv(u!y;t|#+pBx-?bSW^_UfK{dv(vfy}IY#UfpwVukN|GSNELf>3R2j z+4Gj}*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAn{wE3O6hnnrvbNixuHrsU1W}EKW zY|}lPZMtW(P4{fJ>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7Kq zbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGG zw&|YDHr=z?rh7KqbkAm+?pbbMbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%n zo9@|c(>7LCt-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1 z%{JY$*`|9o+jP%no9@|c(>r?(Nk*_x9?ZdwX@yy}i2U-d^2vZ?En-Kl|t1^JULPx@WUZ z_iVQ5p3OGhv)QJ5HrsU1W}EKWY@ar-&uhKeK0RMAx@WUZ_iVQ5p3OGhv)QJ5HrsU1 zW}EKWY|}lPZMtW(P4{fJ>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z? zrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|YDHr=z_zUZFKHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o z+jP%no9@|c(>7LCt z-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TB zY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt z-Lu)Idp6s2&u06y`Q3R7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#h zvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c z(>7LCt-Lu)Idp6s2 z&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)7YjUhb6^X~bwpIN$RvrYGGw&|YDHr=z?rh7Kq zr_JxpYp2;h{ajyk&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1 zXR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7Kq zbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2 zn{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%n zo9@|c(>7LCt-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAlx?XK-nbG~*vee-48t9$P2 zy}IY#UfpwVukN|GSNGi8t9#D({k(g=?B|f~*=*B2n{B#hvrYGGwojYipXa#QKK-m- zbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGG zw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu@j=$_3s-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1 z%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9 zJ)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>Y|IBmIY@fdW7u~bjrh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YD zHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7M2GMfYsB>7LCt-Lu)Idp6s2 z&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$ z*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1 zXR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>Y2lF#)wol*Fi|*NM(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YD zHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2 zn{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?pbbMbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$ z*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1 zXR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6tYhi#Xe^R?UQn=jj5-E&{>)jjw2>Ynp8pLfsy zpKJJk=X#s%)87LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YD zHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2 zn{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%n zo9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1 zXR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7Kq zbkAm+?%8b9J)3R1XR}TBY_{p1&2~0z8=SuRvhCG9_cdJIbI$X;d%o7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YD zHr=z?rhAs#7u~bjrh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c z(>7LCt-Lu)Idp6s2 z&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$ z*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t^ND>7LDY`sT~FSN9zDynDWE`}DP6bkAm+?%8b9J)3R1XR}TB zY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+ z?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%no9@|c(>7LCt-Lu)Idp6s2&t{wM*=*B2n{B#hxqZ<+ zn{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XS03U)X!VGXLH_k&t{wM*=*B2 zn{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1%{JY$*`|9o+jP%n zo9@|c(>7LCt-Lu)I zdp6s2&t{wM*=*B2n{B#hvrYGGw&|YDHr=z?rh7KqbkAm+?%8b9J)3R1XR}TBY_{p1 z%{JY$*`|9o+u2;s@SRT|PXEVO{<~NH`=`IY?SFW3i>JRnDaI?WeCN0S>-_oO`sW|{ z_AB51uTOvcH~z^#-29V&_{l$f@VETI=5P6fxBS6_fA*W3fA*W7{pN$e^Y=G@=kLGs z_aFR=zqk1pfA5RG_u%jQ-Ob==GQm> z=GVXZ^#}j>Z*BhZ-}?A(J@}h`bMrU-=9_-=!9V>Qn}7N@KK&aH{`Ozr{O!N~_FsSS z&;8owpZm4X{n~@S=T|p>&#%7cS0DV#zq0w4f91=+^57r%<;_3v%OCjV2Y>ySHh=w> zUjL;B|L8An{?T9j=r2C_8@{yp8@}|0FFp9Deqr-Z{lcey;lbbf+U9S4?X9mp_^Us^ z`Kv$w>d!y;yMAu-cm3SEe(u3v`@-h0ec`n)Jox*6cJufD?E8QA!N2x1n}6+RzV;G=^um8KR|GNkO$iLnEBmedz|MtOO`8S(CJ@RiJ{M-NY=1-42dw=5*sr zBjQhwJmcRX{`AN*{)+h1Bj5M<`M&bX{`yakJUjlW4z2g^S6=y!XZ#~C;U9U%fBPl; zx1aHU_#Hm~Km3lz_5GKZ@c;6Rzw3|q_;)>h%E;%B|NIjEpP%tR_nkie&wc0P`0sxS z|NdwE+b`kYe#T#UgU{7Zl0OMl|Q-~A^yfA^n!_n&<5pZHUo|HPmAi9hw=Z~N1mzwJ-I?N2}W z5B!YewZFOf*Z$_${^oFUAN*Z^d-Hew?RWj{ z2Y>ZFo4@*=SKssCZ~Z%)zxD6D_3u3Rr{25yr{4Ri_dfU={_f^)_`7fTyAS@+_ig^s z_kHwz5B~b!+x+#v_xj&^@DKd`%|Gz>Kk)Y-{LBAf^DqB{FaLuFf6qVK{5}8ZJ^$#z zKlhI}|J*_@n1gpJ3q4dJ3sQyk39HizjyP`e(z_$_rc%t(aqoT(YJi`!9V%0Hvi9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIv zCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TB zw?C8HpULgdFO#dB!zWDg_#pmxoliQ!k z?a$=)XL9>9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU zOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b*!&wlf{Khtl=pD#ZCeDU$;i_bs5 zO>TcCw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd z9 zx&4{k{!DIvUR?gX`S$0{w?A*b{dx24&zo<5-hBJ>=G&h)-~PP$_UFyFKQAtSCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{h8eUOm2TBw?C8HpULgdqp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd=G&h)-~PP$_UFyFKX1PMdGqbhn{R(!T>eaM ze9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8H zpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2Vv;_p58XZq>*^To%XFFyW! z@$u)2k3V00{{3O(_GfbYGr9el-2O~%e9x&4{k{!DIvCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{h8eUOm2TBw?C8HpBI-uZ@&F`^X<=@Z-3r=`}5}8pEuwBy!rO$&9^^qzWsUg?azzL zpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8H zpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpTGM0bAP5^jz3>~ z{Q2VJ&lewmzWDg_#mAp7KK^|1`R`Ye+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU{Gs1@?$7kc z@#l+=KVN+O`Qqcx7axDV`1te1$Dc1g{(SNI??029x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd=G&h)-~PP$ z_UFyFKX1PMd2#tOx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdGyw^LYC+x&4{k{!DIv zCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{`~RZdhXBkzwzgbk3V00{Q2VJ&lewmzWDg_#mAp7KK^|1@#l+=KVSS!zqz^nnaA6o z$?ebN_GfbYGr9el-2O~%e9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n*PgKX1PMdGqbhn{R*KeEaj} z+n+bz{=E72=gqf2Z@&F`^X<=z%b&^Z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdEGDg{>9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&!7H{=l)E88-Kp|`18fbpD#ZCeDU$;i;q8FeEj+19x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&3)@`Sa%6 zpEuwBy!rO$&9^^qzWsUg?a!NUf8Koi^XA*1H{brexcr&i{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TB zw?C8HpULgd9x&4{k{!DIvCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{dsZu^XA*1H{bre`S$0{w?A*b{dx24&zo<5-hBJ>=G&h)-~PO~{F&VTOm2TBw?C8H zpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdqp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU zOm2TBw?C8HpBI-uZ@&F`^X<=@Z-3r=`}5}8pEuwBy!rO$&9^^qzWsUg?azzLpULgd z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdqp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpBI-uZ@&F`^X<=@Z-3r=`}5}8pEuwBy!rO$&9^^qzWsUg z?azzLpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{dsZu^XA*1H{bre`S$0{w?A*b{dx24&zo<5 z-hBJ>=G&h)-~PO~{F&VTOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd z=G&h) z-~PP$_UFyFKX1PMdGqbhn{R(!T>eaMe9x&4{k{!DIvCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{h8eUOm2UE{g9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b*!#pTbNZ-3r= z`}5}8pEuwBy!rO$&9^^qzWsUg?a!NUf8Koi^WySna{Dv6{h8eUOm2TBw?C8HpULgd z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&8SKUwZD(^q2AHi;q8FeEj+19x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&!75*=l)DT8GpX``18fb zpD#ZCeDU$;i;q8FeEj+19x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd;__#5`!l)yncV(NZht1XKa<;^$?ebN_GfbYGr9el-2O~%e9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdqp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!ISc-}lNZkNf}0 zme=ne`!kQXKa<;^7k~P-^Z5GT@$@@r^X<=@Z-3r=`}5}8pEuwBy!rO$&9^^qzWsUg z?a!NUe_mYvOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TB zw?C8HpULgdqp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvUR?gX`S$0{w?A*b{dx24&zo<5 z-hBJ>=G&h)-~PP$_UFyFKQAtSCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU zOm2TBw?C8HpULgd9x&4{k{`}e(p8GTXVEp;w9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TB zw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b*!ul>w(f9B`= z@#l+=KVN+O`Qqcx7axDV`1te1$Dc1g{(SNA=ZlX&Uwr)e;^WU3AAi31`18fbpD#ZC zeDU$;i;q8FeEj+19x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{dsZu^XA*1H{bre`S$0{w?A*b z{dx24&zo<5-hBJ>=G&h)-~PO~{F&VTOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{rOuz_1vHN`F#BO;^WU3AAi31`18fbpD#ZCeDU$; zi;q8FeEj+19x&4{k{!DIvUR?gX`S$0{w?A*b{dx24&zo<5-hBJ>=G&h)-~PP$_UFyFKQAtS zCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)J za{Dv6{h8eUOm2TBw?C8HpULgdm%;W9P z9 zx&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUytw>%^X<=@Z-3r=`}5}8pEuwBy!rO$ z&9^^qzWsUg?a!NUe_mYvOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6 z{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpBI-uZ@&F` z^X<=@Z-3r=`}5}8pEuwBy!rO$&9^^qzWsUg?azzLpULgd9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdqp&*b)Ja{Dv6 z{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIv zCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2T(T>iZI_UFyFKX1PMdGqbhn{R*KeEaj} z+n+bz{=E72=gqf2FD`#3w?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU zOm2TBw?C8HpULgd~{Q2VJ&lewmzWDg_#mAp7KK^|1@#l+=KVN+O`Qqcx7axDV`1te1 z$Dc1g{(SNA=ZlX&Uwr)e;^WU3AAi31`18fbpD#ZCeDU$;i;q8FeEj+1qp&*b)Ja{Dv6{h8eUOm2TB zw?C8HpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?Du4v(NpRpKr&XFFyW!@$u)2k3V00{Q2VJ&lewmzWDg_ z#mAp7KK^|1@#l+=KVN+O`Qqcx7axDV`1te1$Dc1g{(SNA=ZlX&Uwr)e;^WU3AAi31 z`18fbpD#ZCeDU$;i;q8FeEj+19x&4{k{!DIv zCbvJ6+n>qp&*b*!#pTbNZ-3r=`}5}8pEuwBy!rO$&9^^qzWsUg?a!NUf8Koi^WySn za{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TB zw?C8HpULgd-h7<$Dc1g z{(SNA=ZlX&Uwr)e;^WU3AAi31`18fbpD#ZCeDU$;i;q8FeEj+19x&4{k{!DIvCbvJ6 z+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd;__#5`!l)yncV(NZht1XKa<;^$?ebN_GfbYGr9el-2O~% ze9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8H zpULgd9x&4{k z{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU zOm2TBw?C8HpULgd9x&4{k{!DIvCbvI-=G&h)-~PP$_UFyFKX1PMdGqbh zn{R(!T>eaMe9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eU zOm2TBw?C8HpULgd9x&4{k{!DIvCbvJ6+n>qp&*b)Ja{Dv6{h8eUOm2Vv*bhDTXMVmM zf4=zm^To%XFFyW!@$u)2k3V00{Q2VJ&lewmzWDg_#mAp7KK^|1@#l+=KVN+O`Qqcx z7axDV`1te1$Dc1g{(SNA=ZlX&Uwr)e;^WU3AAi31`18fbpD#ZCeDU$;i;q8FeEj+1 z=G&h)-~PP$_UFyFKX1PMdGqbhi_4$M?a$=)XL9>9x&4{k{!DIvCbvJ6+n>qp z&*b)Ja{Dv6{h8eUOm2TBw?C8HpULgdhTAGuzMh?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@ZG z>VJLhXFosE&*k)UIsIHtKbOx zzx{mu_Ve-SXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv z_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZE zef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_VX`(@!HRR zKBS+^>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUZ#qzg*vb_I~@>zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y% zx1a6X&-U$S`}VVa``Nzze0=)(`t9fIx1X=ye!hPD`TFhW>$jh;-+sP+`}z9q=j*qh zk550_x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT z?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S z`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvTfAhb*_OqY==;w0! zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9Ua5C8M^?Pu?|pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7 zzWr?9eztEv+qa*OPd{J3{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081U%&l){r21X@) zvwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``Nzz zY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv z+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}Xr6{^!?z_VXS6Tuwii)6eDf zb2$jh;-+sP+`}z9q=j*qhuit*Ye*5|Q?dR*apN~&J+qa+X+t2px zXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa z*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWU zwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pMU-zU;Ek5Z}f9H{aj8zm($PX^m94= zTuwii)6eDfb2F09#xtxA3r=QE|=W_bF zoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgz za{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelGum z|8RZ#+57Eh`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKOdidzJB}p z`t9fIx1X=ye!hPD`TFhW>$jh;-+sP+`}z9q=i}4Q_U&i;_OpHa*}na3-+s1lKijvT z?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S z`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7 zzWr?9eztEv+qa+X+t2px=Rf!lul?-jFZ#KhelDk<%jxHG`njBbE~lT%>F09#xtxA3 zr=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bF zoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI9<<9~mB z``P>LXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~Ox9KK*?C_Ve}I&)081 zU%&l){r2b2F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9Uaqn3|vKYPFZY~OyiZ$I0& zpY7Yv_U&i;_OpHa*}na3-+n$m{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081U%&l){r2F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3 zr=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bF zoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F4r~T2B9{<@AqQPXDOo^p9Fj|ET5k zk6KRusO9vJT2B9{<@QJWXK(!W^Zoa8`}z9q=j*qhuit*Ye*5|Q?dR*apReD3zJB}J z{+NEYZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv z+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv z_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEvf2V%-&j;w|a{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{Afs-+!f_?LJ@V=W_bFoPI8+pUdgza{9TP zelDk<%jxIzM?3v|_qU&~-+sP+`}z9q=j*qhuit*Ye*5|Q?dR*apReD3wr@Y%x1a6X z&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS; zvwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``Nzz zY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvTKUY8d{v7>WPCu8^&*k)UIsIHt zKbO5q2$ z`R;E&U%&l){r2-}y2`7-*soPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3 zr=QE|=W_bFoPM@%KijvT?c2|GpHK92IsIHtKbOxzx{mu_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7 zzWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~Oyi zZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X z+t2pxXZ!ZEef!zI{rrXc`QwS?@zdk+_@$4(9=}XKm($PX^m94=Tuwii)6eDfb2xzx{0AeztEv+qa+X+t2pxXZ!ZEef!zI{cPWU zwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT z?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S z`}VVa``NzzY~OyiZ$JO=_3O`{Kb|;FKbOF09#xtxA3r=Qaw?ez2A-+sP+`}z9q=j*qh zuit*Ye*5|Q?dR*apReD3zJB}JzWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y% zx1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x z?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa z``NzzY~OzVQvLk#L~;7LoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3 zr=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bF zoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPM@%KijvT z?c2}x?PvS;vwi#7?(>g+E~lT%>F09#IsMU2Ki~cB=j*qhuit*Ye*5|Q?dR*apReD3 zzJB}p`t9fIx1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1l zKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X z&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?dKoA zdj0wH#}mWp=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_blzWr?9eztEv+qa+X z+t2pxXZ!ZE-RC3yTuwiiKmLFI(Z{u?pReD3zJB}p`t9fIx1X=ye!hPD`TFhW>$jh; z-+sP+``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7 zzWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~Oyi zZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9e*UC>{&*rd z{aj8zm($PX^m94=Tuwii)6eDfb2F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>1X@)vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!z&^Y`)5 z$K~|%_1n+aZ$DqZ{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081AOG3oXMgtm^XXUaukZG= z_uJ3*?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S z`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7 zzWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%-}Lk2&wU)zA1CqSvtQ!mxIce> zgg^T^{Mpap&wdVn_H+2NpTnR19RBR*@Mk}VKl?fS+0Wt6ehz>3bNI8L!=L>e{_N-Q zXFrEO`#JpC&*9I04uAG@__LqGpZy&E?C0=jKZig2IsDnr;m>{!fA(|uv!BDC{T%-6 z=kRAghd=u{{Mpap&wdVn_H+2NpTnR19RBR*@Mk}VKl?fS+0Wt6ehz>3bNI8L!=L>e z{_N-QXFrEO`&s^`pXG1*S^lP<F49q&-U$S`I~;0zv*ZB zn|_wR>1X+yewM%KXZf3cmcQv|`I~;0zv*ZBn|_wR>1X+yewM%KXZf3cmcQv|`I~;0 zzv*ZBn|_wR>1X+yewM%KXZf3cmcQv|`I~;0zv*ZBn|_wR>1X+yewM%KXZf3cmcQv| z`I~;0zv*ZBn|_wR>1X+yewM%KXZf3cmcQv|`I~;0zv*ZBn|_wR>1X+yewM%KXZf3c zmcQv|`S$Z?a!UHoe*cyK|8x2C{&wu2_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J z_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J z_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J z_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J_qW5J z_qW68XP*y0efxTTeAM#s@8ln~eEf6yM=c-!{+rj=|ET5TU&w#>`uY!FzwSS3`Ru=x zf7J5vAHRCt)6f3r|0MsY<>Q~ppZB-@>uZ19z0c?8{cZ0b`ulsczy0jL|HtF@^Yz=$ z*Ka>xzx{mu_Ve}I&)081U%&l)eEQkG{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~Oyi zZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X z+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i; z_OpHa*}nb!>72i>=PUhOPCu8^&*k)UIsIHtKbOrufBeTce*5{p{_W@Mx1X=ye!hPD`TFhW>$jh;-+n$m{cPWU zwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT z?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S z`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+un_^z-ZaNk5m<&*k)UIsIHt zKbOkZ2mNgSPEJ4DKbOz;nLe<`P*?LU6?x~HG*pXBtj{WCfJY=77v4hezt!nr=RVg%jswP_uss} zKK*R}LQX&1fB5=!Pe0qgl+(}lAHRCt)6e!#a{Af+nVf#MKkSe3$Lssk&u1^EpUdgz za{9TPelGvwm)37T-~H|9>$jh;-+sP+`}z3vvwi#7zWr?9eztEv+qa+X+t2pxXZ!ZE zef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3 z-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y% zx1a6X&-U$S`}VVa`}vDs^3R`N&o}zHoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3 zr=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bF zoPM_d^zG~UK|kBSlhe=k&*k*9{rhiTU!Q)qe<7!z?LU0|x~HG*U&`rc`;T9}?&)Xy zCprCW|4dFl+aLDF_~Z5c>F2YT)6eDfb2 z{cQi?>(@Q~Z2wYDKihx&>UB>)+ds+aXZvSz`q}=lKgJ)g?@vFUy_|k7r=QE|=W_bF zoPI8+pUXf0<@MXocYpi&`t9fA)6e$pXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa z``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9 zeztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0& zpY7Yv_U-4-f7w5Oem$S)=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bl{?oUw z=Lh|4|4vRn+dr4n&-U-Xd3}BQ+5Ux`ezyPc_3NH~wtp$7pY1<>^}45@?VsfIv;8wU z{cL~OALEbL_otuFUQR!k)6eDfb21X@H{uqC}zCZnZ_Hz2UoPI8+pUdgza{9TPelDk< z%jxIxpWgWG=d+)Fwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa z*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWU zwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKmT<4 z`SpCEpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgz za{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk< z%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdfI`%mA#o*(qH{X04RZ2w$N zKij|m=JoaIXZsg&`q}=&*ROl}+5V-RezyPk)$5*qwtte-&-Tyc^t1h8e~dp~-=BUy zdpZ4FPCu8^&*k)UIsIHtKbOF09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgz^hZ1WTzmStoPI8+pUdgza{9TP zelDk<%jxHG`njBbF8}l^*SDX&-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X z+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i; z_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI z{ru@yUi;bS1N~f1KbOF09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3 zr=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#IsMU2Ki8gqE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelGu`zj%H7+57Eh`}VVa``NzzY~Oyi zZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X z+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i; z_OpHa*}na3-+un1zxdkE{`{t&%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPJJ!wA0VEr=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F4sF|E25O&)#o8+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y% zx1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x z?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U%-pZ}%T ze)i`x{aj8zm($PX^m94=Tuwii)6eDfb2F3(h&*k)UIsIHtKbOF09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{4*_(M~_to_;Q;pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI9<#b3L={p|hrvwi#7zWr?9 zeztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0& zpY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2px zXZ!Z^FaFwVKl}5OelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgz za{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk< z%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBb zE~lT%>F09#xtxA3r=QE|=W_Zv{n1W8*PebZr=QE|=W_bFoPI8+pUdgza{9TPelDk< z%jxHG`njBbE~lT%>F09#xtxA3r=QDz_1CU%KYPFZY~OyiZ$I0&pY7Yv_U&i;_OpHa z*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWU zwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa`B#7KwV(a@NI#d; z&*k)UIsIHtKbO7oqn!8{aj8z zm($PX^m94=Tuwii)6eDfb2F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{4*_(M~_to_;Q;pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelGtPf8+Z0v-jK2_U&i; z_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI z{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}nb!FaE}B zKl}5GelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk< z%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBb zE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_Zv{n1W8*PebZr=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBb zE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUeN(Z(QGg_I~@>zWr?9eztEv+qa+X+t2px zXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa z*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv|F7S8?Pq^J(a+`db2jgC^ZNF)_uJ3*?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZE zef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3 z-+s1lKijvT?c2}x?PvS;^Kbvn*M9cr5B*$DKbOF09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBb zE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPeolY1)6cc1pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%|L)(uzWwa|_OpHa z*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWU zwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_VeHU+pqoX&ky>!oPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F4xEJN;aH`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI9kI={`Ku=@3)`r+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~Oyi zZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWw~~{{Cw}`}>=I zE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{4*_(M~_to_;Q;pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3|I>ePef!z_?PvS; zvwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``Nzz zY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+unnfAHGR{{E$(%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPJJ!wA0VEr=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F4r)`46veKYPFZY~OyiZ$I0&pY7Yv_U&i; z_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZEef!zI z{cPWUwr@Y%x1ayzKYZig*>-zSy_uJ3*?PvS;vwi#7zWr?9eztEv+qa+X+t2pxXZ!ZE zef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U&i;_VfS#t=E3` z_aFUSPCu8^&*k)UIsIHtKbO7oqn!8{aj8zm($PX^m94=Tuwii)6eDfb2F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBb zF8}?1bbb5T`|W4@_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9eztEv+qa+X z+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}Xti|D)G__V*Y4Tuwii)6eDfb2kjz=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%m3%kuWvtlzx{0A zeztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0& zpY7Yv_U&i;_OpHa*}nb!KY#w(&;I_QpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxAZf3(xjwWpuU>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F4q<{_*wgXYaS4?c2}x?PvS;vwi#7zWr?9 zeztEv+qa+X+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$E$W zk6-)Q-yigIIsIHtKbOF3(h&*k)UIsIHtKbOF09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<(;w~hbM5Kpa{9TPelDk<%jxHG z`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT% z>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxIx|Mc6}x1YV=eztEv+qa+X z+t2pxXZ!ZEef!zI{cPWUwr@Y%x1a6X&-U$S`}VVa``NzzY~OyiZ$I0&pY7Yv_U-5Y z^xLof?5|(?xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09# zxtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxIzM?3vod-}PYelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbF8|p-yT1MG{r0nc``NzzY~OyiZ$I0&pY7Yv_U&i; z_OpHa*}na3-+s1lKijvT?c2}x?PvS;vwi#7zWr?9e*W1%d+ld`ebUe6^m94=Tuwii z)6eDfb2F3(h&*k)UIsIHtKbOF09#xtxA3r=QE|=W_bF zoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgz za{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk< z%jxHG`njBbE~lT%>F4xEJN;aH`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgz za{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk< z%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bF{Gb2c_3dZxx1a6X&-U$S`}VVa``Nzz zY~OyiZ$I0&pY7Yv_U&i;_OpHa*}na3-+s1lKijvT|M~B|_Ori!=;w0!xtxA3r=QE| z=W_bFoPI8+pUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+ zpUdgza{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TPelDk<(;w~h zbM5Kpa{9TPelDk<%jxHG`njBbE~lT%>F09#xtxA3r=QE|=W_bFoPI8+pUdgza{9TP zelDk<%jxHG`njBbE~lT%>F4tQOWON@?Ef$1T~8Zpn>CNbM(md$4WWc^#9Z`UVaSPU z#3az1?vLmWw$sLG>*#Q{#P1emgf2Qnqh<`Fl$sDi*rFjy%W6WL5xAHXf)hfCN$6<8 zu;+T7`*lCR`}OH_UH9+){WzXWpX>U(&inrRy|3rK&e!zk=BGb5KmED+>Ceqie{O#I zbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylV({%h?Y`}6Jf$Nqfl zAN%vIf9%h<{;@yb`p5o!>mU2`t$*y#xBjs|-}=Y?eCr?k^R0jE&$s@uKi~St{(S2n z`}3`T?9aFUu|I$QYd_qdZ=WCO&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqi ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO z%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mtN+yf^yhYc`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=m zo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs z)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#I zbMw=mo1gyN{7?Q~`^Wx#d;PIL-}=Y?eCr?k^R0jE&$s@uKi~St{(S2n`}3`T?9aFU zu|MDX$NqflAN%vIf9%h<{;@yb`p5o!>mU2`Cx7pU`}6JNpZ?tZ^ylWMKQ}-9x%uhO z%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki&2-A{jR*QY->KmED+>Ceqie{O#I zbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqi ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZvKyagZ*QFzP=TmRUfZ~bF`{*iC^aDTpi zeAAzspZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH z`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MN zZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKi zPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$1N!sr%{A z?fUfR=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3 zpZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8Ns zpPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZvL13 z0sF`Pe0%+|Ki~St{(S2n`}3`T?9aFUu|MDX$NqflAN%vIf9%h<{;@yb`p5o!>mU2` zt$*y#xBjs|f7u`SaDTpi{L-JBpZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ z=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN z{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4 z{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=m zo1gyN{PgGMr$1N!sr%{A?fUfR=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8 z{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwB zH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGM zr$0A8{ki$+&&^MNZhrc6^Z)!e+CTQ^+v|`0`PM)7=Ue~SpKtwRf4=pP{rT2E_UBvw z*q?9xV}HK&kNx@9KlbNa|Ja{z{bPUr^WXU4{(SrRq(3)5{ki$+&&^MNZhrc6^V6T3 zpZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8Ns zpPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6 z^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH z`g8NspPQfl-2C+C=BGb5KmED+>Ceqif3E&h_tT%-_36*ePk(NH`g8NspPQfl-2C+C z=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl z-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0CU3%}X^u|MBlf9%h<{;@yb z`p5o!>mU2`t$*y#xBjs|-}=Y?eCr?k^R0jE&$s@uKi~St{``gC{Net5d;h0DH$VNk z`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8 z{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwB zH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGM zr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};->{!{nUpWF56&&^MN zZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKi zPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+ z&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk z`G5LT_K*Gf_WEOgzV(m&`PM)7=Ue~SpKtwRf4=pP{rT2E_UBvw*q?9xV}HK&kNx>i zf9k{i`S$)ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWM zKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C z=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl zT>Yo+r$4vr)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=moBvDSV*l8mZ?8Z0=Ue~SpKtwRf4=pP{rT2E_UBvw*q?9x zV}HK&kNx@9KlbNe`j!v(=iB=){ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO z%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbM>FPpZ?sgPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#I zbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqi ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^Z)Rt?H~K|?e)k0eCr?k^R0jE z&$s@uKi~St{(S2n`}3`T?9aFUu|NOePk*>S-`+pz&&^MNZhrc6^V6T3pZ?tZ^ylWM zKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C z=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl z-2C+C=BGb5KmED+>Ceqie{O#IbMw=mtN+yf^yhYc`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZzwt-x zAN%v|^~e5v>mU2`t$*y#xBjs|-}=Y?eCr?k^R0jE&wt~Oe7HZ~-v0FG=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWM zKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKqf9ihvbGttMx%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqi ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO z%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMt@CXY3#Q^X>J={(S2n`}3`T?9aFUu|MDX$NqflAN%v~`OJs=^X=_R ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO z%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQflT>Yo+r$4vr z)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#I zbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqi ze{O#IbMw=mo1gyN{PgGMr$0A8{ki!+_Q&iW`}6Jf$NqflAN%vIf9%h<{;@yb`p5qK zV}ICeqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl z-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3 zpZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8Ns zpR51W{q*N{efo3r)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWM zKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C z=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$SpKs5X{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWM zKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C z=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%yAtPk(OLr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO z%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+ z>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9 zx%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-25N-Hv7l^ ze0%+|Ki~St{(S2n`|}Tc+lTw}?SFpybMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6 z^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH z`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MN zZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKi zPk(NH`g8NspPQfl-2C+C>OXZq{kdJA{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl z-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3 zpZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8Ns zpPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6 z^V6T3|69M^{;@ybUVrS*xBjs||JHB+aDNv6?>zn5=BGb5KmED+>Ceqie{O#IbMw=m zo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs z)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#I zbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKqf9ihvbGttMx%uhO%};-Be)@Cs)1RB4{@ncZ z=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN z{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4 z{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=m zo1gyN{PgGMr$0A8{ki$y^Bwk&{rUF#V}Jgh@AzCeqie{O#I zbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-B ze)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqi ze{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNuKrW^)1TY*>Ceqie{O#IbMw=mo1gyN z{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4 z{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=m zo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs z)1RB4{@ncZ=jNwBH$VNk`RUKiPk(Oyul_0f$Nv1Qf9k{i`PNT=Zhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl z-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3 zpZ?tZ^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8Ns zpPQfl-2C+C=BGb5KmED+>Ceqie{O#IbMw=mo1gw%{ip7yKey}CpPQfl-2C+C=BGb5 zKmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ^ylWM zKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=jNwBH$VNk`RUKiPk(NH`g8NspPQfl-2C+C z=BGb5KmED+>Ceqie{O#IbMw=mo1gyN{PgGMr$0A8{ki$+&&^MNZhrc6^V6T3pZ?tZ z^ylWMKQ}-9x%uhO%};-Be)@Cs)1RB4{@ncZ=cE4{o}Qk*`RNZmee2V=J$?51fBV$4 ze(CRedivGppZ}WY|H(hU`tr};%8y?D;s3sN?U(dh4*$c9T=;iB|Mg$;!7qHx-+iUL z<;@|7n)6HF|HEJT6+iXg{>tKzL(TbHpZ$Vw{OTY7hyLHiA%~jt^Pl|GcYgYZzU!A4 zha76o&;91V{C$7s&;9KGvpD2XbAIN<_~(Cdamb71XV2IC;;;EX7l#~b&dbC8)Bnm(FAh1>oV-fE`zQYD|Gqfn zP;-9h6W{yG-~Yp3{!@!X4mIZoUY_Wm``;Fa9BR(X+s}9Z?awa`Inv*^mC@;*dkl`P`TO?&p8~w*O^u$f4%s(fZ1-_;-F{amba&cF3?gTMO67l#~b&cFHTJhOiIM;C`2YRNr z{I3^>9BR%tJb!BW)r4C!Nnnmnv+-i=f3nm z{?8YO9BR%#`|<$%-S1xA%~jt@;3juul?NOkVDORd0BktU;6hK zha757UR~e$=`a4?#UY29^IP)q`D@<)dy7L3HRp?7{y_Sh-@Q2GP;>simp7Du;on{y za;Q0f@5>Y7hyKjskVDORz5a{dFV1c5i{6{_+V4IwIfvXcm`<7hj6eIc|K#((zHo95 zIdQ)DfBM&-|MmAz&LJnxU;MA~&lgP2At%nemjnNX$vNc2`JZ#MzWCQq&LJnx*Zs@+ z=hscnAt%ny<>C6XzjksCIdQ)A<$?HnCg+e7=lL6h{PX_h-=F`D-#hsC35VQs_QTJ^ z%k}RsddgAm@Vel7^z1zNs9#@~^J1^_Jdro&v#+fz3d2=rB2X}MGn{#=8x|>7ZoXh*=-5m1fT;9L$=8!k%74SuO za>#wr&F>&{@#W98>r40S^+gW#c`kp>=56BTpEC|Q)SSzo``0Jp8HXHd&gFB+7p(J; zL(Tc%^>fs3S{!nyIhW6ApI97ns5zI0P zcfR(54;F_UYR>PMIt99BR(L_WFCIe`0aSq2_#RzLxpP?|8R30P zfR7Ka>a&db*+U-I*xTpV(!Ip6d8d)j|)amb@ z+`sL2FAh1>od4+Mh4-WX;^L4)&G}DX?zrFg)r&(8HRnHj`9k7v|4WNQ4mIcHkDc%P z+}A7)In!%lo9BR(xd(}U>IOI@sF5mNh zW^u@&=3Ksa{^N^74mIcUJ^1rL@b#aw&*9`yb1vV@|B1yRhnjQQ3H-^$A%~iC*)9AV zi$e}I=dz>t&cz{znsd2dziV;GUG@2bYiWD_-+6rCu=DWmZTLCr^YHVJ%V8g~IOI^D zhkeN6kVDO3AF?>)P;)NN^Xs03`^)z;In+ToVdB~yWT;2z+dy=#BkVDP6yf6L2 zIuAM29QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mIcU=l*q1a`w2BL(RE- z4!Q10&N$>yb1t8Yu6vR*4ms2u_95&3A%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a&gJ)1*FDME`xrUYoXhXcesGsZ=3Ktlxb8{LIOI@s*oUmgiyUeW`;f&UhnmAaWO2x$ z=CBW09CD~Ruh+lrNzU%)+uYuhoN-=z<0sy8ZlCA!J?7Ov<2Yx|<$Kl1an2m?M9$9R zoH_4a4*a$!Ipa8Ij&~ww9OumOPUMW^oH^c!oN=5p$2*ZTj&tT*b`)P;)-ep5*LykweY7d``RWNzORrP;)My z8?SqkGY&b_oXh9f>z?F{Lk>0P%U?f-U-u+u9CD~R>_gV$MGiHGeaPaFL(O3yvN+^W zbJ&M04ms2u_92Ty4mIb}Td#YPv&V}ZYR;ucU-u+u9CD~R>_gV=B8Qs8K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1 zamb0PvIF_9bsln8eZHXWN!Vw&5At)==izp69&#U*!*w5*!#-qj$f3Sn>_ZlZ z9BR(xd4AoKa65hfkVDP6yzZ`hk~0oD)ExF9>voYt&0!z1IOI@s*oQ0*In*5XA&Wx} zHHUr3;*dklVIQ(M)P;=OaEDkx;9QGlL zLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5X zA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx; z9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0* zIn*5XA&Wx}HHUr3;*dklxqPp2-IJVsUL}W`!#-r4ha74S`;f&UhnmAaWO2x$=CBW0 z9CD~Ruh+lrNzU%)+uYuhoN+GSFTUs8K96@IXB_9u@lNE7&{ z9R3~#_8|lohrDkW`;dD%0{Y>5*_91{4 zhrBuLL+<5}H-~-5y&Ur9T;9LI%=?GDIj;bAB2R-uZtqFX?q_x+sL#Vbgd29oA%~j7 zK4fvoq2{m;SsZexIUi_Ga(27Oq2{m;S?3{#n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S z`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9g zha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~iC`TTzU`$^6|&yz#V zVIQ*2Lk=~EeaPaFyXx}=ZBN3k!aE0kj`}>_laTwU9PU?c*P|S+`?wtTA&Wx}_5H&> zWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S z`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1ambF^Yo0P+}x844lj$jCs~|(_auvR@1A6F z?%k6t&b@n*#kqG+vN)I5>*4WYAHoB=IOP32WFK-bhrBuLL+<5}H|O&H4d!XxF7oEQ z0@#T>4Gy`zCpkM0I}+6AVIRT`JL8Z;&0!z1IOI@s*oQ0*In)P;=Oa zEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s z*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M) zP;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1 zIOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;)MQ;`;yZ=B!_kL(O3yvd%*eHHUr3;*dklVIQ(MDByhwDBrhkeN6kVAbxvkzGua;Q1%Ll%b|Y7YC5#UY29!#-qj z$f4%24_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAa zWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a&gFZJ>z;(q)9wZ2P;=Oatn-jV&0!z1IOI@s z*oQ0*In*5XA&Wx}HRtvEw>`<({d}9-dy+HG<@?3=oZIK|PUMW^oH^c!oN=5p$2*ZT zj&tU`dpYpip5%<;CrFN?!Ifqe*p#Ubz8#XjU-4taCfhuq5{Zw~vAdpYFIVIOiYhrBtL*B_Xt zbw86ghkXd3#UXDF`;dD%)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty z4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u z_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk>0P@_G4BEDkx;9QGlLLk=~E zeaPaFL(O3yvN+^WbJ&M04!Ns7U(og>>=^v}UVe`HJl>O#`=}i6Ngm~RPx2^--p2j> zD2MAlE{A={;*dlAc(D&z9CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9g zha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZex zIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1ambY zZEo*L&N!Fv7vFPkpT|3qGmdlScqekkan2m?M9w(Qne*=Dz;An!GmdlScqekkan2m? zM9w(Qnd6_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BR(xd*?sCIOI@s zE}wHhyEx=fbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*xvM^3(Do#k$MqNe z`(A#I`aIr~ko%|{?@1ozcu(>u$9s}TIrKjsuSYpt_i;JwLl%b|>c^dZ$l{Pg&0!z1 zIOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg z&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2; z$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HRtlZ#&u7^=U4Xva;Q1%L)Ll7q2{m;SsZex zIqX9gha74S`;f&Uhnn+x{o9`8?0&w@?LEmE=kopHd(Q3icqekkan2m?M9w(Qnd6an2m?M9w(Qnd6_hJ5kT-{Y$h{o$=CBXBmqXs1%j*x! z)4HF@o5MZ?(BhCchkeMs9P;L{54o2^-ki((H<)?TQz)s|8aLDaF$=UtPjs*32 z*oSb#&N$>ybJ&M04ms2u_92Ty4mIZk{rx0ow~HKV4*QUG9&)HT>_ZlZ9BK~xki{W~ zn!`S1amb?s5$II7Ka>a4*QVB zA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~x zki{W~n!`S1amb?s5$II7Ka>a z4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ z9BK~xki{W~n!`S1ambYdAuhf_fa|ClRV1tp5#%E z_au*UyeD~-!|RgA{ZS6reOwOvki{W~`uW2?WO2x$=CBW09CD~R>_ZlZ9BK~xki{W~ zn!`S1amb?s5$II7Ka>a4*QVB zA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~x zki{W~n!`S1amb?s5$II7Ka>a z4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ z9BR(xdyVU!gwLJs1>{h3*oUn1kVDO3AF?>)P;=OaEDkx;9QGlLLk>0P_4>Cx$=UsU zo7;PmGtTAv#rK@s=kZSDjN_a+-ie%XoHNHeku#2S=Dd43@Y|l`jN_a+-ie%XoHNHe zku#2S=6EM^#&OOZ??lcx&Y9z#$Qj2ub1u)%>+|%Cqukt+3=S`gxhGkid-o)ZbMKyH zaqiudEY7`qlEt}qPqH|d*X!Z&Vjsc-x;W(hJY*koFNeH2>_hJ5kT>V@{tf17-7fOx zyaL#XJPi)Hy(c+44?7an=V2eh4LjqIL(O3yvN+^WbJ&M04ms4E%jcr&-%oOOyU3yD zun$@1A%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ z9BK~xki{W~n!`S1amb?s5$II z7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R z>_ZlZ9BK~xki{W~n!`S1amb? zs5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha76o<#Xj{7Ka>a4*QVBA%~j7 zK4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CBBEzM$<%_`cu2@8##H z&*MD_xsS^6p5#%E_au*UyeD~-<2}iv9PddU<)P(KgZhb#^` z)ExF9i$e}IhkeN6kVDO3AF?>)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M0 z4ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^W zbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M z_ZlZ9BK~x zki{W~n)7=7+n(g?e!k7^J;@p8^8Mm_&h7JfCvwJd&K&PV&N$AQkrJ+x}V9L!#)Ji z;*d9oeaO8W^5(D)xtBxUoXh(+n0fz@H|G_=PULBD$n8DJ+5OCp1oe5?hj7ErIOI@s z*oQ0*In*5XA&Wx}HRl8U{Um3%iyUeW`;c`Wa;Q1%Ll%b|Y7YC5#UY29!#-qj$f4%2 z4_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$ z=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAa zWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9ghul@4FKBxbzNh!^d-*x)^LS4}?xS+NCwY|PJ;|dS?@1ozcu(>u$9s}T zIo^{z%AwctJbaYHbsv|*K4fvop?*HI4_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1 zamb?s5zJKHLiOSKIgd?kVDO3 zAF|Fv4mF2;$l{Pg&0!z1IOI@s*oQ0*In)-YyXZQ1MZtqFXIG67i-*axC$2*ZT zj&tUCCvwJd&K&PV&N$AQ^X}!qZ+nt6j&tUCCvwJd&K&PV&N$AQLmI zuZPEreFzWe;*j_AkbTI#9P;L{54o2^-ki((H<+h&yU3gK3ScMlG&tn;p5*L2>_||b zhkXb)?2JPWHHUr3;*dklVIQ(M?s5$II7Ka>a4*QVBA%~j7 zK4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~ zn!`S1amb?s5$II7Ka>a4*QVB zA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~x zki{W~n!`S1amb?s5$II7Ka>a z4*QVBA%~j7K4fvoq2{m;SsZd#eZHXWN%(%)P;=OaEDkx;9QGlLLk=~EeaPaF zL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3 z;*dklVIQ(M)P;=OaEDkx;oXhtb*F6cJ z&)f^hq2{m;S?3{#n!`S1ambERZ+nun`}sDv_atYW%lC`# zIk(T_oyZx-Idi-dIpa8Ij&~ww9Ouk=_j2I3J;@ozIdi-dIpa8Ij&~ww9OumOPUMW^ zoH^c!oN=5p$2*ZTj&tT*o}bs}=^014xhEMMUKWRa0{ajGi$mVGi+#ww9P;L{54o2^ z-W>KJ_j1Ua!#?C*4taAfuRkzP>wYG04*L*5i$mTV_96Fj$eY7H_gUh$f4%24_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S z`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9g zha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W))#nS^o`mnk{rg^ij`}>_ zlaTwU9PddU<#D93w}M>*b;Jj(H&$;gaXIWm z7Ka?_*BASc#UY29!#-qj$f4%24_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZex zIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1ambYZEo*L&N!Fv7vFPkpT|3qGmdlScqekkan2m?M9w(Qne*=Dz;An!GmdlScqekk zan2m?M9w(Qnd6_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1 zamb?s5$II7Ka>a4*QVBA%~j7 zK4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~ zn!`S1amb?SAD*q?Me7P+rRJS z=cv!)Jqfvw%JH7$QI7W{k8->xd6eTl$)gv-jh7a@t)*S4t<^1 z*P|S+`?wtTA&Wx}_3M;<$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M z)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3y zvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dkl zVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaF zL(O3yvN+^Wb1vU&T=yh=9&#@rhnmAaWSxf`Y7YC5#UY29!#-qj$f4%24_O>?s5!6K zzwJrR?&sUw-jkehF5fS{=iEMzcOqvT=gjd=jAa9PdQVIL?`Kd467>r)M1H=ALA5cv&3w3G71% zEDm|!F7_e!a>$#*KIC2wd2`r@+{+_nahhuq$ioZZjtNKl`LeF!(~j6)7JhkeN6kVDO3 zAF?>)P;)-e-%oOOyU3yDun$@1A%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAa zWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S z`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amba6_i;JwLl%b|>eoB_ki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZex zIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnjQwUgNqa;d6|80Xfth_95#$jAaoXhj``aC`3C^z>c zgTu>W?nxHs-aX0U+`A`PoO|~qi*xUuWO44@lPu2V^?G=`*oW|dE)ID=57~#@%OP(L z`;dD%?dDw?=!_GM5P;=OaEDkx;9QGlL zLk>0P^10~x_miC6E^??j>_gUh$f4%24_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1 zamb)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M0 z4!Ns7U(og>e1GiU_wsYp=kcC|+(+ejPx2_ody+>v-jh7a@t)*Sj`t*wa=a&bl;b_g zqa5!^9_4sX@+il9l1Dk-lRV1d_XoV*ALVe}$K|jOSsZex-#6HYEDkx;9QGlLLk=~E zeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx} zHHUr3;*dklVIQ(M)P;=OaEDkx;9QGlL zLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5X zA&Wx}HHUr3;*dklVIQ(M&{9QFz9LkKJmdEYMfA@_2~o5McjUJiM4*oWN9A#V=*kb61g&AGh(z&x${nY=md zLjWxfd2`r@+{+?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9g zha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZex zIqX9gha74S`;f&UhnjQweDV7iha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~x zki{W~n!`S1amb?s5$II7Ka>a z4*QVBA%~j7K4fvoUG@2bwkP3xU;n*b;Jj(H&u$9s}TIo^{z%JH7$QI7W{k8=1u1n(P_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb{Bv_92Ty z4mF2;$l{Pg&0!z1IOI@sUax=Klbqepx4FG1IpbWuUwqHGeID;b&N$AQ8v^n0u1Nxpz;pIQQ;J7U$kQ$>Q9*Cs~|(_auvRdA%MUFZLlkpo>G^ z&qMYh_j1Ua!#?C*4taAf@84ja*6kv1&MSbO$kX7E+k29;^ROd9eIE89+^{naIn*5X zA&Wx}HHUr3;*dklxqL3V{{19pw~HKV4*QUG9&)HT>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1 zamb?s5$II7Ka>a4*QVBA%~j7 zK4fvoq2^pZ7kvHVkVDO3AF?>)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M0 z4ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZex zIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb_ZlZ9BK~x zki{W~n!`S1ambluQzxbYW`#j!>oN=5p$2*ZTj&tUCCvwJd z&YX8I2Y%a=oN=5p$2*ZTj&tUCCvwJd&K&PV&N$AQ{TlEL9+ao8uY4?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$ z=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAa zWO2x$=3M?f|GLE?hnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&Uch%<$+Ma~(S^fK7evbM)-jk5~s2uM}9_4sX@+il9l1Dk- zlRV1tp5#%E_au*UyeD~-<2}iv9PddU<#D93w}M>*b;Jj(H&a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S z`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BR(xdyVU!gg>X<3&^47un$@1A%~j7K4fvo zq2{m;SsZexIqX9gha76o>-BGYlC%5yHn;aAXPnFTi|;wN&*PoQ8OJ$uyc0R&IA@M` zB4-@u%z5{6;I}==8OJ$uyc0R&IA@M`B4-@u%<)d-jN_a+-ie%XoHNHeku#2S=3Jhi z*XQXON4dEt85~{~b5F83_wGp+=iWWZ;@rC@S)6)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M0 z4ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^W zbJ&M04ms2u_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M zfiVBbJXYYo`l>-<#D93w}M>*b;Jj(H&u$9s}TIo^{z%JH7$QI7W{k8->xd6eTl$)g;8zry?Bqa3dL zxE%H&i$f0e`zrg8#UY29!#-qj$f4%24_O>?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m; zSsZexIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvo zq2{m;SsZexIqX9gha76o<$I0mo`gSN-3!Q}=CBW0=OKrh!#-qj$f4%24_O>?s5$II z7Ka>a&g=DWdy=#J`8K!rBxjt<_lxg2x6k99$Qj2ubG#Ed<2YxIcOqvT=gfKca^SZ; z$r;BvbG#Ed<2YxIcOqvT=gjd=$#*KIC2wd2=qWKQK@0ekN}Y`w&2j zL*5+rA@_2~o5McjUJiM4F7Mx9=KVw7oL2xlk*C2SxA!Dx_cJ>Z)aPLz!VNp)kVDO3 zAF?>)P;=OaEDkx;oDcN(lbqcya;Q1%L)Ll7q2{m;SsZexIqX9gha74S`;f&UhnmAa zWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&U zhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S z`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1ambu$9s}TIo^{z%JH7$QI7W{ zk8->xd6eTl$)gv-jh7a@t)*Sj`t*wa=a&bl;b_gqa1!u!~5!^ z9IpGg9QGlLLk{)(Gy9OmA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAaWO2x$ z=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZexIqX9gha74S`;f&UhnmAa zWO2x$=CBW09CD~Rm+v*MdlLR!bT1%>n!`S1orfH14*QVBA%~j7K4fvoq2{m;SsZex zIj`5h?Mcq==iA)glbmrb-!H!B+&+(YB4-@u%<)d-jN_a+-ie%XoHOU$%YonaBxfAw z%<)d-jN_a+-ie%XoHNHeku#2S=6EM^#&OOZ??lcx&Y5$0eqNuaXB_3`o@8)%S)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u_92Ty z4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(M)P;=OaEDkx;9QGlLLk=~EeaPaFL(O3yvN+^WbJ&M04ms2u z_92Ty4mF2;$l{Pg&0!z1IOI@s*oQ0*In*5XA&Wx}HHUr3;*dklVIQ(Mv-jh7a@t)*Sj`t*wa=a&bl;b_g zqa5!^9_4sX@+il9l1Dk-lRV1tp5#%E_au*UyeD~-<2}iv9Dd)!`}3n5uKTzg_92Ty z4)yyy`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1amb?s5$II7Ka>a4*QVBA%~j7K4fvoq2{m;SsZex zIqX9gha74S`;f&UhnmAaWO2x$=CBW09CD~R>_ZlZ9BK~xki{W~n!`S1ambK7WpUUiun!@yIOKi1*oWN9A#V=* zkb61g&0!yMFNeH2>_hJ5kT>V@`UCT{?q~Amunz&WIONS?A962;ygBSc?&Xj-=kopy zX5K&K&3Of|6L}gOa(hp5c0aQtL46+fA>6Pt4ms2u_92Ty4mF2;$l{Pg&G|roKgrqc zB8Qsu|B?0wxpggEv|cBqV!#y#MoJf{7%*U@3AgNqMICTUU2qd(MLdIqK4EJft?Po< zvpmoEHz`tABtPisL)P=yxpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~L zc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX z`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1 z*tvD|A*zz4W9Qba-`h zI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66iE8qKj*KG*Zo&VAF>=fxBtD+hb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd` z+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~ zkmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnXub*pt z_9Xs0)UONd+&cP@^*nZN9ev1h?A$u~kmcC9b@U<2v2*Kuy#A{vd3rzpy4yX;lk@ud z;&;#8=V>SMi_(_Ni*B2P|tb=rwMIo;K1C-UTU zSErrGlha+Db|OzscXeJLpPwJ6Pfm8TCmD`Ui`kPb=iQ!UIq&u)%XzmaS)6-PhrH|9*LnT=fw~jt! zId*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEd za_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5 zI{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@ z<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h>^|?07yPLw z@$a-`hI_*iW zPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?tUPyTyxb-eDsI{J|1*tz}h zjy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt! zId*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*LZey;J^llbpPzb>$I>*zz)^Vqp{^dZZ!bL;3smSgAE z(T6O@&aLzD`mdhk>HYlcZucZl&gn%8 ze(MwTAqLB_@7tvhdDpS8qYru4v9F^KdDpS8qYru4v9I&`{KI@(?`Qiu`Vi1^?Ca=5 z-gWHj=tJIh?CZS#{Km}pkA0mFKqvBTICi@yd3rzVNZdY;KExaL*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX z`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1 z*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA( z^dZZ!bL;3smSgAE(T6O@&aI;lS&rT3{qcf7^(207*YEfGb+^ycp2Y5No%SSGr#;El zX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$ zo%SSGr#;ElX-{%>+LK%z-^cRbovY(@|JBilEXU66f4}r0%dvCo=tGuc=ho4OEXU5R zqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aLzMxyENt z;?MnlU0~jw`}x=1?n$1U*UuNf zd+t6@JCP@+yE^Seo}BLLv=e!9x~uc=&ja-Jia=NS2PUOkyu1-6VC#SnQ z?L?lO?&`D?d2+g|^ZNMw{5XAbvYS20aC}(6h@xAk_}*ZBZ+BHxB%w|kPO=h2b4 zeI9*?H|)u=bL;3smSgAE(T6O@&aLzMd(r2=PxAD3*|~M}A?tbU+&cP@<=DA(^dZZ! zbL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_ zLzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc z=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb< zhb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@ z&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLrd4Ig%Pd$mB zxAptIe%+LK(J_9R!QJ;~K+PjYqI zlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;El@%=FW{kl3{_g@`- z$a3u5{&!FxvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4s zM<22rJGYKLWI1+jo!8GbK6?^>Uia$)JGYKLWId0aTSp(V96Ps;K4dv|ZXJEda_rnX zAFu!FNuJ)%zwUNV^5ndJzWCj9_j%fhJUQLfX(#gJbXTXH$dl7uoqvBm@K;ar64S)>`8{>)8e;2K_6nU z9Q(dq`jB@W`#SoNcOCmW`jB@W`#SoNcOCmWug^csxAlIuucHqEEyuo&KIC1;zK%ZR zUB|x8>(6h@eE-Pf z?~^>eU3P9AeaLzqJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh* zom)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22r zJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps; zK4dv|ZXJEda_rnX`jF+=ecm50_)|~f=VbkUuU~ijJnc#B{?=(va&_91T%GnLSEoJ6 z)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91 zT%GnLSEoJ6)oD+1b=s3$9p6{;-@&Wnb^q1Thb+g=?SD`8A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;l zS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*LZey;J^llXJCUl-W9b@U8?&Y zkte6SI_*TBobKxU`}2XndXgunyE^Seo}BLLv=e!9x~tPpbyQaKR-^Noa|;#G8~^4vnN^3yFJNr-t9@2^KMVFoOgSY<-FUIEa&z4`rGf9KE!Y6 za_swYs1JG9v9F^KdDpS8^ZN4}^KHFd_H{l0oyfQ0*zKO=>3MV{Zl6aV;thLp?A$u~ zkmcC9b@U<2v2*LZ{$BL??~^>eU3P9AeaLzqJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2 zv2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo z=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4 zW9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE z(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7 z$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=ecm50_)|~f=Ue@LuU~ijJnc#B z{?=(va&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqI zlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSG$M@&__w?#`-G6oTA*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+jo!8Gb zK6?^>KKAPZJGYKLWId0aTSp(V96Ps;K4dv|ZXJEda_rnXAFu!FNuJ)%zwUNV^5ndJ zzWCj9_j%fhJUQLfX(#gJbXTXH$dl7uoqvBm@K;ar64S)>`8{>)8e;2K_6nU9Q(dq`jB@W`#SoNcOCmW z`jB@W`#SoNcOCmWug^csxAlIuucHqEEyuo&KIC1;zK%ZRUB|x8>(6h@eE-Pf?~^>eU3P9AeaLzqJGYKL zWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv| zZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg z$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd` z+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~ zkmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+= zecm50_)|~f=TiNCuU~ijJnc#B{?=(va&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;El zX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$ zo%SSGr#;El@qIr3UA{VA_g@`-$a3u5{`XxUvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD| zA*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ! zbL;3smSgAE(T6O@&aLzMxyENt;?K2yU0~jw`}x=1?n$1U*UuNfd+t6@JCP@+yE^Seo}BLLv=e!9x~uc=&ja-Jia=NS2PUOkyu1-6VC#SnQ?L?lO?&`D?d2+g|^ZNMw{5XAbvYS20aC}(6h@ zxAk_}*ZBZ+BHxB%w|kPO=h2b4eI9*?H|)u=bL;3smSgAE(T6O@&aLzMd(r2=PxAD3 z*|~M}A?tbU+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEd za_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5 zI{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@ z<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9 zb@U<2v2*L_LzZLrd4Ig%Pd$mBC-wWie%+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$ zo%SSGr#;ElX-{%>+LK(J_9R!QJ;~Ma{X+kJzdBy`UmbnOa_rpxJwYF`96Ps;K4dv| zZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg z$a3u5I{J|1*tvD|A*zz4W9Qa+{aoX-C-LV|zb>$I>*zz)^Vqp{^dZZ!bL;3s zmSgAE(T6O@&aLzD`mdhk>HYlcZucZl&gn%8e(MwTAqLB_@7tvhdDpS8qYru4v9F^KdDpS8qYru4v9I&`{KI@(?`Qiu`Vi1^ z?Ca=5-gWHj=tJIh?CZS#{Km}pkA0mFKqvBTICi@yd3rzVNZdY;KExaL*zz4W9Qb=fw~jt! zId*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEd za_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5 zI{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@ z<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&rT3{qcf7^(1}{)bIEDb+^ycp2Y5No%SSG zr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1 zb=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<^_FM}JSaI$rl* z9ev1h?A-o+Lm#pnJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCoyne3n*^~Hlq+b`v`*zz4W9QcSc>PyT^7MZGb+>zxC+GF^#qXZG&(lui$?2|6 zJCP@+yE^Seo}BLL{QL8Pzj~4a-Jia=NS2PUOkyu1-6VC#SnQ?L?lO z?&`cgK0iNBpPcMwPcj^z7PBW=&bvLya^CGpmh)~;vYdB&lI6VHlPu@;`TE=Mmp;UA z=yL4)ai|Y@*Rijo4|&(Iuk-rz8}n_wUG{Z80G-IU;n?k-*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3s zmSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb z*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4O zEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*nQp~FZfeW;^#O0ey?A5`#kMQ z?EcniPjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%> z+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSG z$M-M&edFqQ-G6oTA*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAEdHr1DvnTQS->(bo z+&cP@^*nZN9ev1h?A$u~kmcC9b@U<2v2*Kuy#A{vd3rzpy4yX;lk@ud;&;#8=V>SM zi_(_Ni*B2P|tb=rwMIo;K1C-UTUSErrGlha+D zb|OzscXeJLpPwJ6Pfm8TCmD`Ui{JVLeTczw?E7}*zz?b?octL*8}l>*zz? zb?ocBKL0S^*8ADMjy?pm9Q!)@kar#XI{J`z9s4@3Kff{a{bOI}1JH?l8;;%XNuJ)% zIuf_fqYv?hJvnx69ev1h?A$u~kmcC9b^gh}PxAD3*|~M}A?tbU+&cP@<=DA(^dZZ! zbL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_ zLzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc z=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb< zhb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@ z&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLrd4Ig%Pd$mB zyY&0Le%+LK(J_9R!QJ;~K+PjYqI zlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!Q zJ;~K+PjYqIlU$wlBv;4xLH)hu>UiCMb@U<2v2*+PAAQJj?A$u~kmcC9b@U<2v2*L_ zLzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCoyne3n z*^~IZ?bii%ZXJEddLBEsjy_~Lc5WSg$a3u5I{J|1*tvB+UjNmTJiVWP-R+*_$$9;J z@w?~l^RyFra=NS2PUOkyu1-6VC#SnQ|Nea7ub$+|>8?&Ykte6SI_*TBobKwh6M1sF ztJ6;8$?2|6JCP@+yE?Cr&(Dw3CnvkvlMKhF#q3Fz^KMVFoOgSY<-FUIEa%;xWI6Bl zB+GeyzW(<6r4R8Nx*Yp{9O^^fb?octL*8}l>%9K_#(Z0EmwlZNKqvBTICi@yd3qil ziQDJVhj_!D96Ps;K4dv|ZXJEda_rnXufG?4{`(|PZ*zz4W9Qb=fw~jt! zId*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEd za_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~LcAxjh3;xuT z_<2dc-|N@iK2LiRyT5hXlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSG zr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1 zb=s3$o%SSGr#;ElX-{%>+LK%z-%s`TpR40_|JBilEXU66-=p*)%dvCo=tGuc=ho4O zEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qa+{aoX- zC-M2#uM6zlI{J|HJa%p!eaLd`+&cP@<=DA(^dZZ!bL)J({;MZ>dO!cV+davX^ZNPX zchBADX(#gJbXTXH$dl7uopvHmPIqi^j^7MAuxpnj*>v`*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA( z^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2 zv2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo z=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4 zW9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgvM zf4tyNJ&B)l^!vSj-R<+VC$almr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B z$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqI zlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b$nme-=nUM*Zo&VAF>=fw|^hghb+g= zt)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aLzM zxyENt;`5|m7udOV^dakc?A$u~kmcC9b@U<2v2*L_LzZLb*7}F3g9G@1mCt1$BJ;`$3?MasNZcnnDcYBiM zyxWs3=k@ve+wYe?#Bb*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_m0u zj~D!@C-L)%e!thRyM3PaBzAx6v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+N zlB?66a-`hI_*iWPJ5E8*pGu zJ&BL+eqCVa*3pNo=dp9^=tGuc=ho4OEXU5RqYqh*om=PQ^7)BE|?-R?=AoY&76 zzkBXJPdkw(r@K1sM4p`P>a-Jia=NSY@6QMR>PeoQ?&`D?d2+g|(@x~c>8?&Ykte6S zI_*TBobKwh6M1sFtMmH!{QNk5a`G@(o-p}@R^dX?-*w@jAyzAK4(TBY2*w=ae`Hh+HANx8VfKKGw zaO`$Z^7MYzk+^*xeTX;g$+2_m=tGuc=ho4OEXU5R^H2VLlBc)J&aI;lS*zz4 zW9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE z(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7 z$L{m~c)_1~5a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66 za-`hI_*iWPJ5E8)1Kt&v?sYb?MbeV?-Tob-PQ5B|LW*N zmSgAk?}z%3<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+jo!8Gb zK6?@$m;JiH&aI;lSFu&}>*zz)^Vqp{^dZZ!bL;3s zmSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u9kGubMId*OxeaLd`+&cP@ z<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9 zb@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj* z%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!`@BD1 z@TZ={&jb4XUcc`4dD@fM{jJlUa-`hI_*iWPJ5E8)1Kt& zv?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iW zPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A%4xh@!6C3c$ zc5WSg$a)?-w~jt!Id*OxeaLd`+&cP@<=DA(K3@OTlRUkjf8Fh#8?&Ykte6SI{*HB;IE$K$?2|6JCP@+yE^Seo}BLLv=e!9x~tPp;%r^Ro5fhE%^dav$_I30j z?>hE%UY~!MZ|nVRUq>GTT8@1keaO3xeI0$syN-RG*Pq{*`Tnu5^8x5Yz75B2_asm6 zXB~;#=h26F!=4;Fw~jt!Id*OxeaLd`+&cf{-zRx`yX@RL`jGWJc5WSg$a3u5I{J|1 z*tvD|A*zz4W9Qb*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX z`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3sH?~fP! zsVDJ${C>aJue*Jo_9S+H>$E4iI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9 zNv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cu zp5*GZC%HQ9Nv=+NlB?66a-`hI_*iWj_+Ihd*;>gy8r6v zLzZLb_V26ukmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#Tj%w2jnAIM$3ed?uygC^ zL)P=yxpnj*%dvCo=tGuc=ho4OEXU5R^YQwxp5*EM{OfM_Bu~!k=ZoJxcb})7$dl7u zopvHmPIq+|)u-!FZL z-_YgQ_v26>@~&fFM<4R8V_)a>=Qrltdb{lFd;mI;Z^NP zb@U<2v2*L_LzZLb)_MKC==0wvd3w9-+&cP@^*nZN9ev1h?A$u~kmcC9b@U<2v2*L_ zLzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc z=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb< zhb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@ z&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dz{sKVI;sp2YXx`~6a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?MbeV?|=LI>ecbO|LW*NmSgAk@4fnv z<=DA(^dZZ!bL;3smSgAE(T6O@&aLzMxyENt;`gs#7udOV^dakc?A$u~kmcC9b@U<2 zv2*L_LzZLb*7}F3g z9G@1y^$GeAgXP%w?b3(5>)6-PhrH|9*U^W(>)6-PhrH|9*Li*ZVZN>Rvwa zb@UFu&}>*zz)^Vqp{^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22r zJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps; zK4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~L zc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$L{m~c)_1~65luP_j~=i+vjOdV)wUBdy=cu zp5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb z?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8 z)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv@9Xqx*aB)$zLj>gYq3W9Rno&-#$%*tvD| zA*zz4W9Qa+{aoX-C-Hvo*9CTN9ev1p9y_;=K4dv|ZXJEda_rnX`jF+=xph8X z|J9Q`y`O*G?VjYxdHsCxyXWrnv=e!9x~tPp8?&Ykte6SI`9jMZcnnD zcYBiMyxWs3=iQ!UIq&u)%Xxji{`UK&5Ahqi9Q%G8>O*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4s zM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V z96Ps;K4dv|pZCWL{?wEBes{m$>(|{rPkR!(zjfM^T%GnLSEoJ6)oD+1b=s3$o%SSG zr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1 zb=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnL zSEoJ6)oD+1b=s3$9p8`l_vfqQb^q1Thb+g=?cc-oA*zz4W9Qa+{aoX-C-MI3 z*9CTN9ev1p9y_;=K4dv|ZXJEda_rnX`jF+=xph8X|J9Q`y`O*G?VjYxdHsCxyXWrn zv=e!9x~tPp8?&Ykte6SIhE%^dav$_I30j?>hE% z^dav$_H|yLf0%FU{cK-H9|BsAeI0$syN-PweaO3xeVx~z-*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ! zbL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_ zLzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dz{sKVI;s zp2YX5`~6a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+N zlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZ zC%HPlukY{SSI6uAtD_HDj-A`T&+9{$W9Qa+{aoX-C-HXn>jFEsjy_~PkDXgbAF>=f zw~jt!Id*OxeaLd`+&Ukx|LRGe-p{}8c2Dx;ynep;-E;SO+KD_l-PLI)^5k?^r=7@? z(_Ni^e?IV6Px9n+SErrGlha+Db|OzscXir{JUQLfX(#gJbXTXH$dl7uo!7_b=f~-j zliln|hU3#>_9V-BwhE%UVnaLzOA>*zRm}r6ZtkAyWNvKJ&%sW?epkEykSp{om)pAvK%|Njy_~L zc5a>5--|x~eUhiQ%g(K%4_VJ+=ho4OEXU5R^Ljh}U(2y`>*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4s zM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V z96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|N zjy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt! zId*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgvMf4tyNJ&Erx_xrtm-R<+VC$almr#;El zX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$ zo%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6 z)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlUyA?AMp42tK)V5)zOD6 z$Ik871+SlLeD)-suU{9~xpnj*>v`*zz4W9QcSc>PyT^7MZG zb+>zxC+GF^#qXZG&(lui$?2|6JCP@+yE^Seo}BLL{QL8Pzj~4a-Ji za=NS2PUOkyu1-6VC#SnQ?L?lO?&`cgK0iNBpPcMwPcj^z7Qgig`VfQV*!S(yhrH|9 z*U^W(>)6-PhrH|9*U^W(>)6+Meg0v-t@pEi9eoIBIreq*A@4f&b@U->{{pXBN7vUBU` zL)P=yxpiLu`~UND?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps; zK4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~L zc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX z`jF+=xpnj*%dz{sKVI;sp2YWs`~6a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdq zdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt& zv?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?tA48AV7I$rl*o!8GbK6?^wzb>$I`}KuB zWId0aTSp(V96Ps;K4dv|ZXJEda_rnXAFu!FNuJ)%zwUNV^5ndJzWCj9_j%fhJUQLf zX(#gJbXTXH$dl7uoqvBm@K;ar64S)>`8{>(_;1{%XzmaShE%^dav$_H|x=eq+9^x68iH2cQ%AHXOU%lRQ0-j>PTr=tI0=PmY~i zM<22rJGYKLWI1+jo!8%sKL34^r?<<_t@C=_|FoXR&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEd za_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5 zI{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@ z<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9 zb@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|pZCWL{?wDaz7F|6{`UL5 z?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8 z)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`h zI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66JE zu47+EAM&naUq>JEu47;4-;d8z%(wM^wy&cP0WHVAjy~jF$G*<%&r8gFyX@<{{``L1 zv9I$1=tRDa=ds&8$?>`9*9E<3l5 zK4d+Qom)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4s zM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V z96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|N zjy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt! zId*OxeaLd`KJSkg{HZ7Leb{~<(yzOHp7tbmf9td-xjOAhu1a-`hI_*iW zPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?MbeVpL_T^=fx6bQ-|9@PLom=Oh{NH!;^mf^~b@U*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;l zS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_# zTSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pA zvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4WA}M~yx>ngiSM8G`;dO!?enxJ zvHM%6J;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;El zX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$ zo%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6 z)oD+1bzVQ$`24@`=IZ$QiLZCAj@SKHM<22rJGWmq=|h%d=hpdn{Z~)o?d;cIzwUNV z^5ndJzWCj9_j%fhJUQLfX(#gJbXTXH$dl7uoqvBm@K;ar64S)>`8{>(_;SnB+GfXCt1$BJ;`$3?MasN zZcnnDcYBiMygpxl`~A{~_zhi-eLoKMA@4f&b@U*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22r zJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps; zK4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~L zcAxjh3;xuT_`YYq59!z4K2LiRyT5hXlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1 zb=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnL zSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93 za&_91T%GnLSEoJ6)oD+1b=s3$o%SSG=k;@q&z|J!v?sYbeh%a7rmN$1|JBilEXU66 z*Iys6|LRFRU%&qPb+>zxC+GF^#qXZG&(lui$?2|6JCP@+yE^Seo}BLL{QL8Pzj~4< zr@K1sM4p`P>a-Jia=NS2PUOkyu1-6VC#SnQ?L?lO?&`cgK0iNBpPcMwPcj^z7Qgig z`VfQV*!S(yhrH|9*U^W(>)6-PhrH|9*U^W(>)6+Meg0v-t@pEi9eoIBIreq*A@4f& zb@Ub(|9|#={y$HSom)pAvK%|N zjy_~Lc5a=2^6!&8y*zz4W9Qb< zhb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@ z&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh* zom)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*nQp~FZfeW;`^2TKBQlF`#kMQ?EcniPjYqI zlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!Q zJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%> z+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o!8Gb zK6{d@)1Kt&v?sYbexBp&udCyA|JC_;{Z~)I?blzw?siY|%n#+PfmAr z+KD_l-PLI)^5k?^=ii?X{MC~@Io;K1C-UTUSErrGlha+Db|OzscXir{JUQLfX(#gJ zbXVu~@%j02`s8Fcdy?V!w3t1~a^CGpmh)~;vYdB&lI6VHlPu@mo@6<%&)466zw{w~ zLziRUk3)UPyN-PweaO3xeVx~z-Z+vm}Tc*C9? zJGYKLWI1+j9ev1h?A$u9zej!k`y@|qmz`TjAF`gu&aI;lS&p4sM<22rJGYKLWI1+j z9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEd za_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5 zI{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@ z<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9 zb@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|pZCWL{?wCvc>mAufBSvN z_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;El zX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$ zo%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6 z)oD+1bzVQ$`0PopPJ5E8)1Kt&v?sYbelGO!djIdg|N6`SKEeO@-+mqU`nlov<#gAt zPuqz+Jx_Oa+KD_l-PLI)^5k?^=ii?X{MC~@Io;K1C-UTUSErrGlha+Db|OzscXir{ zJUQLfX(#gJbXVu&b>F_f?&~~#etqs{Px1jhI-mb@eI9+t=iul6;n}gTqYru4v9F^K zdDpS8qYru4v9F^KdDpS8^ZNYzmHGDkezvcp5BU{(cI@luL*8}l>*zz?b?ocB{`~%x z`NR9izRm}r6Tv;bf9!To@^XLsKBSJs?epkEJjs(|=ho4OEXU5RqYqh*om=Oh{QD$N zZ*zz4W9Qb< zhb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@ z&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh* zom)pAvK%|N&d1kx|JVO_Id-4-#|!?{lf1re{O#*FzwUpp&(og7zTeOE>rYO568pb( z+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSG zr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1 zb=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%Fg? zH9mWitJ9w3>a-`hI_*iWPJ5E8^YQi6*S}A4b-eEL>$9J~@IU?a*Mq-xB1h-9PUPtP z)`=XQf76rvWd47D|Ni-{6FEN5Z=J}|`K=Q*zz?b?octL*8}l>%2ZsG2hnjmwg?52xvL>b@UwEw@k#CRAue;roJiVWFByOKaAL0#ra_rnX`jF+=xpnj* z%dvCoy#5~b`R|iFy*zz4W9Qb< zhb+g=t)mZFj-6XaAF>=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@ z&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh* zom)pAvK%|Njy_~Lc5WSg$a3u5Iv-z8eDx$xUtidL-XH(Nf9gqmAF%y~U;ljWIPFR7 z|JG?wa&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqI zlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!Q zJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%> z+LK(J*UvRRdy=cup5*GZC%HQ9Nv=+NlB@Iab=g->a&>$i>Fc~Fr@MZA>UGQMu1a-`hI_*iWPJ5E8)1Kt&ygvTE|JRR0uXnG{qYru4 zvG3=FKIC1;zK%ZRUB|wTKIC1;zK%ZRUB|x8>+=-zZT)`P*U^W7mSbN>AM&naU+49| zkC|_meVx~z-)}qibv}Tvp5*EM^XqQ+Bu|cx#O?FwL%d;6j-6XaAF>=fw~jt!Id*QH z*WaT)dy=QO%g(K%4_VJ+=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1 z*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA( z^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2 zv2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo z=tGuc=ho4OEXU5RqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4 zW9Qbx-E;SO+LPG-t<#?5 z>a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66a-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HQ9Nv=+NlB?66 za-`hI_*iWPJ5E8)1Kt&v?sYb?Mbdqdy=cup5*GZC%HPW zpKE;fBv+?B$<=93a&_91T%GnLSLfsFvag=x>b!n#_}$lePfmCJdeGOS%jvF;|NZ53 zSEoIR{oj6l`tQ#N{_07tPJ5E8)1Kt&v?sYb?Mbdqdy=d3`ndW2Uq61l-n~ALKIC1; zz8}x}kar#XI{J`z9s4@^kar#XI{J`z9s4@3&r{5|_4{RCM;`)Oj(wfi>oD_q?CZS# zynNfSuk-rz`)$X*&Ij<-lRUkDe%*zz4W9Qb=fw~jt!Id*Ox zeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4sM<22rJGYKLWI1+j9ev1h z?A$u~kmcC9b@U<2v2*Kue0}%TlRSNWVfT4|{15-BC-Hr^exJ>+d+t6@dlLJ+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91T%GnLSEoJ6 z)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91 zT%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBvU?}%_SKVIo!8F|zxz7x$?2|N54IC|a=NSI>)Q1^ z-PQ5Gznt#s{QL8Pzj_k;zx_J5J;~K+PjYqIlU$wlBv+?B$<=xNet-Y3zwch}UY|!F z@~&gwk3)UPyN-PweaO3xeI0$syN-PweaO3xeVy0mDdyYy{j#s~dfnTOeVx~zPj5T+ zb@U;i^>*3UdHwl~neQL_Iv>DSPxACUzwUNV^5p19+&+&!#2fbH*tvD|A*zz4 zW9Qa+{XOclCwY3i?A$u~ko7!vZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5R zqYqh*om)pAvK%|Njy_~Lc5WSg$a3u5I{J|1*tvD|A*zz4W9Qb=fw~jt!Id*OxeaLd`+&cP@<=DA(^dZZ!bL;3smSgAE(T6O@&aI;lS&p4s zM<22rJGYKLWI1+j9ev1h?A$u~kmcC9b@U<2v2*L_LzZLb*3pM7$Ih*z4_S_#TSp(V z96Ps;K4dv|ZXJEda_rnX`jF+=xpnj*%dvCo=tGuc=ho4OEXU5RqYqh*om)pAvK%|N zjy_~Lc5WSg$a3u5I{J|1*tvB+zP|hFNuIvGu=~6}{)hk6lf1sJ{_X$1Y`^Zg`#kMQ z?E8H-zy9R3C$axqr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B$<=93a&_91 zT%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqIlU$wlBv+?B z$<=93a&_91T%GnLSEoJ6)oD+1b=s3$o%SSGr#;ElX-{%>+LK(J_9R!QJ;~K+PjYqI zlU$wlBv+?B$<_Ji|NP&7e9Hg7KYNm^)1Kt&v?sYb?Mbdqdy=d3@%7YKPjYo$KR5jD z>$4}PyM8^`PUOkyu1-6VC#SnQ|2J!Qms;t9ZQC^}VDNL+WY;b*7=vF7#uYFajBDv2 zwVFis^cPcW$S-%E9U5w}^m}4SoqIe#zTU3x>iGLFr@K1sN$lT!p4*;eb=s4xPJ5Eo zX-~2`uaDF3pMJc&zPmmieaLqm`+olDL%!?S*U^W3*Rijo5BaWRUq>JEUB|x8>*Is@ zb$z_->%6`neA}_FqYnXHkH@}_KIFTOeVy0$Z_N4rv9I$1eDx$xZ`XhB?w;hy(UG`) zJo*rC*pp-D*3pMtj-6XaA96W%Zk>O9{5$HiCwY3i?A$u~kn8c-xpnj*mt*JF(T7}) zom)pAayfQx9ev2<*tvD|A(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVv zM;~%Ic5WSg$mQ6%b@U;ZW9Qbg;CR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF z)1G8?+LNqKdy>^@PqI4gNmi#l$?Cj*ukqQFtWJB9)oD+%I_*hTr#;E)d^|7v>Pc4T z^?SqLp65L|-SzokJCP@+yE^Seo}BLLv=e!9x~t=P_Vxbhu8zO|a=NS2p2Ys$=iTi| zR;NA5>a-_Wo!9&K_fOx?Uf*3Gk3QtPj(tDw`jGEB_I30j-*xQk=tI8i*w@jAeAltB z^ZNS3{JK6~_I30jpv$qZqYwG6V_!!f@?FQi&g=U(=6wIy*ZBaxdXlI2&wuXjp5)2V zk+^+4`Veo}lVj)B(T7})om)pAayfQxoqwe#d3w9-+&cP@>+#sRb@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy* zo@8~}ldMjAlGSNXvO4WaR;NA5>b!oh@!6BCPJ5EoX-~2`?MYUrJ;~~PJTLp|Nml3e zd&A$J=RG;y_4!~skte6SI_*TBobKwh6M1sFtMkvlAMn@zy_+YeyE>k)U+?Gc>iGLF zr@K1sN$lT!{@$Ksb=s4x&g=d1`={?8ukWspM<4QC$G#sgeaLqm`#SoN?>hE%Uhfag zuj~C|Uq>GTx*YpDudhGM`FQN>=tDr)JEUB|x8>-#t6eE-__a-_W zo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUr zJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)yne6o*^{hJdy>^@PqI4gNmi#l z$?AMOFZ=3AR_FD5!{46gJvrU=`CvPdC#SnQ?L?lO?&`D?d2+g|^UuE@@K;arb%~b-#>l3yuQ0W9(~An9s9nY^&#JN z?Ca=5zU$c6d3}CieqHY$`#Sm%(B;_Id42t1&c|b4M;`*Z9*=z;eaLqm`#SoN?>hE% zUf;hl=ljRL&Ij<-lRUkD{&RQtBu|cx#O>qJhj_!D96Ps;KIC%j+&cP@%dvCo{3|`l z)7xd|*3pMtkH^lfqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9 zbL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKLa-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9uj zb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT=k^@PqI4gNml3MdD&M_vO2Hd8~*k@@5$+|&j;IyJUQLfX(#gJbXTXH$dl7u zoqzuQfWLZ@C#SnQ?L?lO?&`D?d2+g|VcE>*zzi>)6-PhkVzuucHt7u47;4_4SAOb$z_->*zy3mt$W? zAM#ztzK%ZRyN-RG*Y|JC`Tnu5^8tMIBv0?3|J>a@$&;faar=1mA>Obj$Ih*z54jvW zw~jvKa_rnX|4L8t^mf^~b@U*zx+ z$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvW zw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGaiq^SiH}^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUr zJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNX zvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EodHr7FvnN@d_9Uy*o@8~}ldMjAlGXWmUiQ_Ktj_EAhQB?}dvdz#^TBo^PfmAr z+KD_l-PLI)^5k?^=bwK+;IE$K$?2|6JCP@+yE^Seo}BLLv=e!9x~t>o5ZC8VcXj;z zm(yLH*X#fO|H;Ap^7p>`^NrW*ecQ3`+ocZyU604Ujy~kOj(r_{$afw4I{J|BI`(y5 zUw@eM<7Hn*9|F4G&-QinA>VcE>*zzi>)6+MegDRs?;ra*AHY{n^7Q`s&)waVJUKcN zw~t33;thLp?A$u~kjt@i>*zx+$Ih+uuk<8OZ*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL)IOzx(P*o}ORW zecnHR@!xuq*W>!#pOg4=w~wbiiQT(Sdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy* zo@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKx zS)KMItJ9ujb=s4xPJ5EoX-~2`uitBY_9Uy*o@8~}ldMjAlGSNXvN|8H_tlfE&g=Jv zzhAHK{MYlr?)rSNoygPU>8?&Ykte6SI_*TBobKxU^X~`z)ss9q-PLI)^5k?^r=7@? z(_Ni*B2P|tb=rwMIo;Lq^NiQ)JOA~0*j*ieKfr&#`*VrBzW@BM$HRB~cwUd!>${JR zeI0!Wz~A@ucG=g_hkVzuucHt7u47+EAM#ztzRv6GFU+sU_p^N+eMq23$G(m}=t=t=t{oe5R=M%lx|Ip`y-SzokI}u); z?&`D?d2+g|(@x~c>8{Q{|9-&#)sy_!`?%09t%JEUB|x8>+7$~e|?=A*w@jA*tt(1FZ(+B5U=k(Ireq*Azt5oa_sB8zJGi5 z&->)q*ZFuwoyaHi@P4-Yc2DwOj*i6b<{M;~%Ic5WSg$mQ6%b@U;ZW9QbSFYG?=pTGETJ&B)R^!b;^>*aks?Mdw3 zb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e z_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)p`A1 z`pcz*WPldR6`_lCdwe6P>r?EF1_KG;sgu8y6T*J&qW zSI5rF>$DTGt7GTob^iJH1ODns?CRKgd7XA5c6IE$yiPk2yE=AWUZkM-#_}0?w%a`I{J|B zI`(z+A>VcE>*zzi>)6+Mef?q1kC%NNeF(_M@9F()Uq>JEUB|wTKIFTOeVy0$Z_N4r zv9I$1=tQos3%k1~d3rzVNZdXieTX;g$+2_m=tC~Y&aI;lxg0yU&cD)=JiT3ZZXJEd z^?2;uI{J{yv2*L_LoUb8t)maQ96Ps;KIC%j+&cP@%dvCo=tC~Y&aI;lxg0yUjy~ja z?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih+u@%-+qCwY2)VfT6e{KbFkN&MX5>G`sk_wlqRv3u8PPqI4gNmi#l$?CKx zS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT zr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYVW^?Qxao@8~}ldMjAlGSNX zvO4WaR_EjSWB26fL@vkf$$9-eVcE>*zzi>)6+Mef?q1kC%NNeF(_={psUn zUq>JEUB|wTKIFTOeVy0$Z_N4rv9I$1=tO=Uj@{jpJiVWFByJy%KExaLa-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9uj zb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e z_9UzG`n|?yPqI4gNmi#l$?CKxS)KMItMl=E@~bCVo!9RTe|vuVc_o)4%Us$KU@`M<4QC$G-0$eaLqm z`#P_$Kg{{@vah2L0eOEty`Syt=tI8i*w@jAeAltB^ZNdcIp06_bv^){$gjh(yL*zS z_p^?~?c>phc*C9?JGYKL*zx+$Ih*z54jvWw~jvKa_rnX z`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9 zbL;3sF2~NTqYt?pJGYKLa-_Wo%STF)1G8?+LNqKdy>^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI4gNmi#l$?CKxS)JGKH9mWi)oD+%I_*hTr#;E)v?p1ekLQzLJ<004 zesB2O^V28C&dd9JP$zOZc2AB@g;C zR>#kc`ncbHJpTTlI{J|BI`(}(zrOx3=f}&wjy?qB?R z{Tp+>f9&gg06LLhhhum5Bv0>W9f{k=qYv?hJvnx69ev2<*tvD|A(vz4*7;X@lBc)J z&aI;lxgL+5TSp&qId*OxeaPk5xpnj*mt*JF(T7})om)pAayfQx9ev2<*tvD|A(vz4 z*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qb< zhg^=GTSp&qId*OxeaPk5xpnj*mt*JF(T7})om)pAayfQx9ev2<*tvD|A(vz4*3pMt zj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qb^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`uitBY_9Uy*o@8~} zldMjAlGSNXvN|8nC%<}<)p`Bi@VDouPmZ0J_xYesPb@U;Z zW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKx zS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT zr#;E){OjZQAfG+S>a-_Wo%STF)1G8?+LNr#$Mearo@8}izc>8t`RS8m=jDAqs1vyy zyC+8{ayfQSj!xuq?4F$0pZ~rbyC+8{ayfQSj!xuq?4BH*$mQ5QIXaQcv3qiKB9~+L zVcE z>*zzi>)6+MegDRspU?JnJ^-D_ufwssdlDbNetqdk+&&(Ch&SxXv2*L_LoUb8t)maQ z96PtpztWRDy*zx+ z$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKLa-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9UzG z`n|?yPqI4gNmi#l$?CKxS)KMItMl>v?5ihPo!9RTfA{%bpU2txd-{A(CvrJd}yMA35czM4r+LPG5>$E3Xo%STF)1G8?+LNq~pNIA1@$UQC-~UrbAM#zt zzMnt(kncM7bza}UG3V#AeVq?LC-UoX?Cze#`@J789f{k=qYv?hJvnx69ev2<*tvD| zA(vz4)_MIq>VLQ#JGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL*zx+$Ih+u@%-+qCwY3_WcPXh{KbFkNj#73^Ei*!%lmlR zli0oMv?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF z^ZLEUXHT*^?MYUrJ;~~{Ct02LB&+lB{OqeIS)JGK4S)CfUZ2O=`Fr|&P$zOZc2Cah z&(FtW_vE~uAD@ohlk?BNAMn@zy&Jo}f9$-x?;oAW_5QJYa&#h>WB26fL@vkf$(7T{ z{&@Mh8fbkyUhk)lKIFTOeLoLh-@h^E`^Ub{2cQ%AbvSl+PvZU6uL~WC+sC61@rFG) zc5WSg$mQ6%b@U;ZW9Qa+{X6QjCwY3i?A$u~kn8c-xpnj*mt*JF(T7})om)pAayfQx z9ev2<*tvD|A(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg z$mQ6%b@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eo zX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~} zldMjAlGSNXvO4WaR_FD5jnAHBb=s4xPJ5EoX-~2`?MYVW*zx+$Ih*z54jvWw~jvKa_rnX`jE@9 zbL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL)IOzx(P* zo}ORWecnHR@!xt9&l~$Z&g1p+KA!d@cJDgvNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eo zX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~} zldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ<004ey{P_ldMjAlGSNXvO4WaR;NA5>U=yu`|3$n z=kWB26fL@vkf$$7p0@5`|}9Lz7fe%uYbydU@WBzEsQ z?MYUrJ;~~{Ct02LB&+lK`t#wKKVI!g*2mMHWOe+U&l|QnUhk*Q$Ls4vejV>;ySpdx z`1*CBBXRrnr4PB@E<3l5KIC%j+&cP@%dvCoy#5{a*^@lIf9%{k`jG4K*tvD|A(vz4 z*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qb< zhg^=GTSp&qId*OxeaPk5xpnj*mt*JF(T7})om)pAayfQx9ev2<*tvD|A(vz4*3pMt zj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2` z?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I^@PqI3% z*Zci({lD)&k9$3j{IR1G@kl=I`;SK_@>54A@>A!Z^d#%sr4#w-|M}dW*XhTrfBwJkzn|Na ztdFNX$?CKxSsgzw{CwB^`+s=<{p0WdsiP0M96Pr^ht!8$j-6XaA96W%ZXJEd<=DA( z^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_8z25)idEDxJy#Ck!|0JvP`aR?CpFW=UBlGSNX zvO4WaR_FD7{>Sg155WJwBfsYNv$w+o^55_N{7@fqId*P;o~aMH96Ps;KIC%j+&cP@ z%dvCo=tC~Y&aI;lxg0yUjy~ja?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9 zbL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL9KA!d@cJDgvNmi#l$?CKxS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E) zv?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ<004ey{P_ldMjAlGSNXvO2HV z`=34kTAkPL%|3gQ)%kcFUp>j{ynfI4`=@VLdy@6>v?p1e_9UzGPkNHoX-~2`?MYUr zJ;~~{Ct02LB&+lKJpS?Lv#$qteLU?+R;NA5>a-_Wo%STF)1G8?USFp^T)$SQJ;~~{ zCt02LB&+lKKL6wQ&j;|;ldO+NKjHzcj@SFCqYt?pJGVa<)rVY;om)pAayfQx9ev2< z*tvD|A(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6% zb@U;ZW9Qba-_Wo%STF)1G8?+LNqK zdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y& zWOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9UzG`n|?yPqI4gNml3edjE^(O{??zz13$= zvO4WaR_EjG`RYkl=kl-v?o~~PkWNpX-~2`|D-2bo%STF)1G8?+LNqKdy>^@ zPqI3%&*L9|KKpub*T>VIWOdq;tWJB9)oD+%I_*hT=k;~!!}V)*+LNqKdy>^@PqI3% z@AE%?|9k*nJ<0lb+LNqKdy>`hdfq|)``w>s>O(Ha&h5`v^&yvI=ho4OT#lVvM;~%I zc5WSg$mQ6%b@U;ZW9Qba-_W zo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUr zJ;~~{Ct02LB&*Y&WOdq;tWJB9)p`A1; zAAdgkdT`gr)1G8?+LNqKdy>^@PqI4gNml3eb?U?QYjxU_tWJB9)oD+%ICT3xg0yUKd04)T#lVvM;~%Ic5WSg$mQ6%b@U;Z zW9Qba-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I`7MV^?RAmo@8~}ldMjAlGSNXvN|8n1HXEb)p`A%@wexdtJ9uj zb=s4xPJ5Eo`6oTe>a-_Wo%STF)1G8?+LNqKdy>_8eIEb#^V!#fyFQ-wB&*Y&WOdq; ztWJB9)oD+%I{$opo%(S7TAlVJtJ9ujb=s4x&g=X9kKaEZz*kSQKA!d@tJ9ujb=s4x zPJ5Eo@p?XB{`=jZuj)fC$Ik7~d-WlgW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2` z?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjA zlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?Cjb?|<|BVs&1> z_xS8dR;NA5>a-_Wo%STF)1G8?K0Z!gJ<004e$V*(ryuwBBlGSNXvO4WaR_FD7{>Sg158$gOSszb(lGSNXvO4WaR;NA5>gY#&z*fiW{nXKi zT#lXFpBw8#F2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9 zbL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKLme>)I=?)LGtC$W3iX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF z)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{ zCt02LB&*Y&WOdq;tWJB9)p@<%|L%Fg>b!pM@Y$2BPJ5EoX-~2`?MYUrJ;~~{Ct013 zkM~zkvO2HdGyeYR=TCc*_3^YPS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ<004K97I= z`Rwb#T^~<-lGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>_8eV_N~{A+bSfUllp zb=s4xPJ5EoX-~2`?MYUrJ;~~{Cs`e@=M%_(zx(rEeaPk5x&8UGKIC%j+&cP@%dvCo z=tC~Y&aI;lxg0yUjy~ja?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_m0upI7)>PvYO}eO}a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)p@<%|KZ>BtMmG~ z{%23JI_*hTr#;E)v?p1e_9Uy*o@8~}ldR6i=gn77vO2HdGyeYR=V5!2_3^YPS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ<004K97I=`Rwb#T^~<-lGSNXvO4WaR;NA5>a-_W zo%STF)1G8?+LNqKdy>_8eV_N~{A+bSfUllpb=s4xPJ5EoX-~2`?MYUrJ;~~{Cs`f+ zh)*zx+$Ih*z z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvW zw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKLa-_Wo%STF)1G8?+LNqKdy>^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI3%pR0fNB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1ekLQ73J<004 ze$V*Z^UBp}PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`ug~Kje?I$qaM#Dv zo@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?Uf<_^I{#Xo58$gOS)KMItJ9uj zb=s4xPJ5EoX-~2`?MYUrJ;~~{Cs`e@=M&n0zx(rNeaPk5x&3*#KIC%j+&cP@%dvCo z=tC~Y&aI;lxg0yUjy~ja?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL*zx+$L{m~d4<3AB>sKee~0^Xw~wbiiQT(Sdy>^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02L zB&*Y&WOY8C2Y&S=tMmFj<8RL^SEoJ6>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l z$?Cj5kAM96?CZf@A5VLd)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGS;ApZDqf zYjr+=ubyOe+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb@U@Xp;yQ2{nXKiT#lXF zpR4ObF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKLa-_Wo%STF z)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{ zCt02LB&*Y&WOdq;tj@>tz^|TUbzZ+`{Ox(=>a-_Wo%STF)1G8?+LNqKdy>^@PqI4g zNmi#l$?CKxS)JGC@sB^BeLcAA<7rQ_I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNX zvO2Ht^FEz_t^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2` zUe6bp|9a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_9Uy*o@8~}ldR6i^T4m3WOZJ@XZ-DX=kbp}pM5>J>*HxpvO4WaR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI3%@AE#Lf3403@YR#7PJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I{Fb`V5{Txe(LB$F2~O8&-wKsmt*JF(T7})om)pAayfQx9ev2<*tvD| zA(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;Z zW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO2HV`#=3Vb9LI2tWJB9)oD+%I_*hT zr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR_EjE^Q$LWo!9RffB*FBy*a-_Wo%STF)1G8? z+LNqKdy>^@PqI4gNmi#l$?Ckm&---#wK^ZbS5LA!?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1e_9Uz0^?bqm?{|MbuMfE#JGZ|t(1%=(om)pAayfQx z9ev2<*tvD|A(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg z$mQ6%b@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI3%*ZaTx`*3w$KX?4>Nmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOY8i&cAw+)p`A% z@%K-^Z?q>_A5VLd)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldR6`^Z3V~&%Peq_3^YP zS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct01>_j#YrzgFi1`07bkr#;E)v?p1e z_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?^dr9DSI6u9)X|4rj-A`z zJLp3$$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+ z$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z z54jw>&->>U{??QDcUwCUfA042v?sB9*J)3(I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjA zlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9uj zb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)p@<%|Lxy(tMmG~-)B#< zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?KE7Xk z^(3qF`aR?CpML*oPqIFq_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo!95_k3XM% zJ-F-RX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%Ia-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItK;>2 z1M=VR{=PsTayfQxe}AD5xg0yUjy~ja?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX z`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9 zbL;3sF2~NTqYt?pJGYKLa-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)p@<%|Ks0dtMmG~ z+GkI)I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8? z+LNr#$M>DDo@8}izi0gY)9+*LN!G{Ho@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF z^ZGpg@#nLz2X}ou?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT=ka-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb@U^?0j-YL`>CT3xg0yUzX#EWT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qbg;CR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02L zB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSPc4T^?SzOo>#6;dy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eod3_%L z`19Ga-_Wo%STF^ZGvT)A`rxd;niP z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)cs<_`{r9`SztD$Vj-A`zr|3g2$Ih*z54jvWw~jvKa_rnX`jE@9bL;3s zF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL^|?GSNK~`;@>y@ca%SO`*_-u*uCqtCt02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqK zdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y& zWOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR_Eh+;8#zw zI85 z@w6vdo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)JGSd7sX|R_6ow>Pc3oJ;~~{ zCt02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4Wa zR!2YL8{+DCy`MVzkjt@i`+FIE$mQ6%b@U;ZW9Qbg;CR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqK zdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eo`FI}q)sw8w>-UVmJ+EAy_9Uy* zo@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF^ZGpg@#nLz2X}ou?MYUrJ;~~{Ct02L zB&*Y&WOdq;tWJB9)oD+%I_*hT=ka-_Wo%STF z)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYV0>-h%l zzu*0Riaz9W?A-o-M;~%Ic5WSg$mQ6%b@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2` z?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjA zlGSNXvO4WaR;NA5>a-_Wo%STF^YJ|Jt0!5V*Y6pBdtSLZ?MYUrJ;~~{Ct02LB&*Y& zWOdq;tWJB9)oD+%I_*hT=k^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4x&g=WUPv>8&^8tMIB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy* zo@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNq~e#AHE)$w{ib@U;ZW9Rnw zMEa1+v2*L_LoUb8t)maQ96Ps;KIC%j+&cP@%dvCo=tC~Y&aI;lxg0yUjy~ja?A$u~ zkjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_m0upI7)>PvYMJ?Lhpw+sD(M#O__EJ;~~{Ct02LB&*Y& zWOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_W zo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUr zJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNX zvN|8n1HXEb)p`A%@wexdtJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOZJj z$3Omj_VwVdkEcD!>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?Ckm&---#wK^Zb zS5LA!?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~} zldMjAlGSNXvO4WaR;NA5>a-_Wo%STF*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NT zqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?p zyU+XQ75>(f_}}0CcY;56`*_-u*uCqtCt02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E) zv?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9Xvrsdk$pOQVEUv}fRmg&w5{f)fxy1VIGBhRUZ47I=c* z^(*Kia^1Y|$@)lgSI3^DI`$;hu_vjHJxO)!NviX@4}A9|)p?#Xe(%1rI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WGLuH%od=e-{`>-pG|RL7pAI`$;hu_vjHJxO)! zNvdN{QXPAe>e!Q1=lPu9<@{Bh7x3;$s$)-59ea}M*ppPpo}@bVB-ODesg6BKb?iy1 zV^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI_pRFg;AXy_o=f! z2s^~A(ykgO`Y{2m$SW1o%JD?v%O87^&ywDy-l6`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA- zNp`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@ zC#lZsKJeX>ROfll_`Une>e!Q1$DX7*_9WG@C#jA-Npe!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*J8oZK`}?oYo7RV1&h|Ea{`AI)Pf{IwlIqx#RL7pA zI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AKgT*n_@&wD>?*7LC^sg6BKb?iy1V^2~Ydy?wdlT^o^ zq&oH_)v+h3&ht6H%lWH1FW}viRL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7* z_9WG@C#jA-NpLIosRxIokS=%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241%h}$h&iatc+1{qk z`jE@n-lop_kjvTLrq241%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241%h}$h&iatc z+1{qk`jE@n-lop_kjvTLrq241%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241%h}$h z&iatc+1{qk`jE@n-lop_kjvTL@BBI7Up>jb=j=fC`ljb&PqMwgI`$;hu_vjHJxO)! zNvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA- zNp`AuwSI3^DI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)! zNvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pg0%dI{x^2-uq#*o{v3Ab?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r zp3nJR&R^Ae0q>rqI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-NpZ}jBob7GutPi=I?QQC;54oJ}ZR)HKxt#57>Z}jB zob7GutPi=I?QQC;54oJ}ZR)HKxt#57>Z}jBob7GutPi=I?QQC;54oJ}ZR)HKxt#57 z>Z}jBob7GutPi=I?QQC;54oJ}ZR)HKxt#57>Z}jBob7GutPi=I?QQC;54oJ}ZR)HK zxt#6&&YuJR)syV|!0(;CzUleclWgy=jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;h zu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WGL-3PvVlIlFq8NYX5Ssie!Q1$DX7* z_9WG@C#jA-Npe!Q1$DX7*_9WG@ zC#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@ zC#jA-Np;qb>q9PQdz(7zLoR1~n>y=5E@yk2I_pC&XM3AE z>q9PQdz(7zLoR1~n>y=5E@yk2I_pC&XM3AE>q9PQdz(7zLoR1~n>y=5E@yk2I_pC& zXM3AE>q9PQdz(7zLoR1~n>y=5E@yk2I_pC&XM3AE>q9PQdz(7zLoR1~n>y=5E@yk2 zI_pC&XM4Z%=YW6pB>Nn<1KI1Fo{v4r_WtVFlT^o^q&oH_)v+h3jy*|r>`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{Qk~a*;JYWO&hwn{d-s*qu_vjHJxO)! zNvdN{QXPAe>e!Q1$DX7*_9WG@C#lYJ9e;d1@BOe@&&QsmI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*&*%Iu=dbF#fOk()9ea}M*ppPpo}@bVB-ODesg6BKb?iy1V^2~Y zdy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WHWar?oszyJDtaDB+-Y;V)&mFq(;XM3AE>q9PQdz(7zLoR1~ zn>y=5E@yk2I_pC&XM3AE>q9PQdz(7zLoR1~n>y=5E@yk2I_pC&XM3AE>q9PQdz(7z zLoR1~n>y=5E@yk2I_pC&XM3AE>q9PQdz(7zLoR1~n>y=5E@yk2I_pC&XM3AE>q9PQ zdz(7zLoR1~zw_sSfAu8${PlBwuWx!j_9WZ;t7A`69ea}M*ppPpo}@bVB-ODesg6BK zb?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI?r|d@%6m-!)84ndy?wdlT^o^q&oH_)v+h3 zjy*|r>`AI)Pf{IwlIlF4^ShkCs`CQgJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA- zNp`AI)Pf{IwlIqx#RA>FjesEN0$9?Lo54oJ}ZTj4EeaPi(Z&PP|$mMKrQ)hk1 z`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WG@C#jA-Np`AKgx(|H!B-MGIGk)*BvO4x8)v+h3jy*|r z>`AI)Pf{IwlIqx#RL7pAI`$;hd9LG+ujjoVHtYG=lT^o^q&oH_)v+h3jy*|r>`AI) zPf{IwlIqx#ROk7e-{t&Oofq)#NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vj{j@u8Q{r%VHmFq(;XM3AIKV2VkIosRRSs!va+uPJx zA96X{+tgVfayi@E)L9>LIosRRSs!va+uPJxA96X{+tgVfayi@E)L9>LIosRRSs!va z+uPJxA96X{+tgVfayi@E)L9>LIosRRSs!va+uPJxA96X{+tgVfayi@E)L9>LIotc4 zKL`A)C)wwnpR0R))AO+>+1_6rdy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx# zRL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NviX@4}A9|)p?#Xe(%1rI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WGLuH%od=e-{`>-pG|RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe z>e!Q1=lPu9<@{Bh7x3;$s$)-59ea}M*ppPpo}@bVB-ODesg6BKb?iy1V^2~Ydy?wd zlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe z>e!Q1$DX7*_9WG@C#lZ*k^KOw&W`)kSs!va+uQUx?D~+)+1{qk`jE@n-lop_kjvTL zrq241%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241%h}$h&iatc+1{qk`jE@n-lop_ zkjvTLrq241%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241%h}%V{5jxXJ;^?&>_GPV zrsrc%vc11L_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)! zNvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Npe!Q1$DX7*&vpFq^}P4PW<4K!lIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>O7zG zyPUtO^8(&INp`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1 z$DX7*_9WG@C#jA-Np*JIevs|&zdk=*A96X{+w^(v`jE@n-lop_kjvTLrq241%h}$h z&iatc+1{qk`jE@n-lop_kjvTLrq241%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241 z%h}$h&iatc+1{qk`jE@n-lop_kjvTLrq241%h}%V{5jxXJ;^>_{2bfso1Tw7$@c#0 z*ppPpo}@bVB-ODesg6BKb?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|rp5y-WK7Xq7 z{BHW~NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;h zu_vjHJxO)!NviYu9ro@?s`ET&{QmTJojplCAA6GO*ppPpo}@bVB-ODesg6BKb?iy1 zV^30@=Q{rQdfxkCv!0JVNp(X9q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe z>e!Q1$DX7*_9WG@C#jA-Npq9PQdz(7zLoR1~n>y=5E@yk2I_pC& zXM3AE>q9PQdz(7zLoR1~n>y=5E@yk2I_pC&XM3AE>q9PQdz(7zLoR1~n>y=5E@yk2 zI_pC&XM3AE>q9PQdz(7zLoR1~zw_sSfAu8$T(AS#>zkgBJ<0a|>e!Q1$DX7*_9WG@ zC#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AKg z`aSpVNviWaXZ-&3_n|#WJs*3L>e!Q1$DX7*_9WG@C#jA-Npe!Q1$DX7*_9WG@C#jA-Np+sj`CZOm)p-H$o}@bVB-ODe zsg6BKb?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;h zu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-NpLIosRRSs!va+uPJx zA96X{+tgVfayi@E)L9>LIosRRSs!va+uPJxA96X{+tgVfayi@E)L9>LIosRRSs!va z+uPJxA96X{`<*`r{HrI~``OQpy}s%B*pqDUuZ}%Qb?iy1V^2~Ydy?wdlT^o^q&oH_ z)v+h3jy*|r>`AI)Pg0%dxc|EMdv%`Q1;0H>b?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3 zjy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@ zC#jA-NpiO7{RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>O9x+$Jg`T51aLT>`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NviXF&hK*ms?G~|_axP^C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np;qb><40X zcHF1V`jE@n-lor~*N0rr_BM6ahg{C~Hg(pAT+a43b=HSm&h|ES)`wiq_BM6ahg{C~ zHg(pAT+a43b=HSm&h|ES)`wiq_BM6ahg{C~Hg(pAT+a43b=HSm&h~!i&jJ7HN%lUp z1KI1Fo{v4r_WtVFlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hdA^r_ zdy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIlFy@yFNm-VdAgeC$c8V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AKg ze9rH3{;JLkc=sgLu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{Qk@;QAFTWPug{m)hg{C~Hhtc`KIC$? zx2dx}G{}`Z11m*JxO)!NvdN{QXPAe z>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WG@C#jA-NpO9XG zzjt3*9ea}M*ppPpo}@bVB-ODesg6BKb?iy1V^2~Ydy?ur*YU^K^WG1e^?d9}s$)-5 z9ea}M*ppPpo}@bVB-ODesg6BKb?iy1^L)`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI) zPg0%rBm2QxogMe7vp(ce!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Npe!Q1$DX7*_9WG@C#jA- zNp`AI)Pf{IwlIqx#RL7pAI`$;hu_vj{j@u9D{r%VH-RnaxXM3AIe_tPRIosRR zSs!va+uPJxA96X{+tgVfayi@E)L9>LIosRRSs!va+uPJxA96X{+tgVfayi@E)L9>L zIotc4KL`A)C)xGt`(m$edOr3f+xx3yPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{ zQXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)! zNvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np)WLf$yHAI?r>)@7-5c$DX7*_9WG@C#jA- zNpe!Q1$DX7*_9WG@C#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np1A96X{+tgVfayi@E)L9>LIosRRSs!va+uPJxA96X{+tgVfayi@E z)L9>LIosRRSs!va+xwkA2mGri*>z?Ive!2~AA6GR{nfE2sg6BKb?iy1V^2~Ydy?wd zlT_z9?!WCitd2cNb?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx# zRL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Npe!Q1$DX7*_9WG@C#jA-Np+s<_~Yw&?}yELKK3Nlu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WGLKIeBie^uuNynB-B*ppPpo}@bVB-ODesg6BK zb?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjH zJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pA zI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Npe!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;h zu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-NpLIosRRSs!va+uPJxA96X{+tgVfayi@E)L9>LIotc4KL`A)C)vNN9mrna z^nC0|w)a=Zo}@bVB-ODesg6BKb)Mt?$Nt@`^L%dn_9WG@C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pg0%dI{x^2-uq#*o{v3Ab?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r zp3nJR&R^Ae0q>rqI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#lYk z+YQG4{%a4gKIC$?w`rfSKIC$?x2dx}e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pA zI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*ultI3Pg0%dIpg=I_bK)y^?d9}s$)-5 z9ea}M*ppPpo}@bVB-ODesg6BKb)M_^`AI)Pf{IwlIqx# zRL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI_pPvgHfFw_o=f!e!Q1=Q-|w?Z0z%p7+IXPf{IwlIqx#RL7pA zI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx# zRL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*ultjCPg0%dIpg=I_dE6^^?d9} zs$)-59ea}M*ppPpo}@bVB-ODesg6BKb)M_^`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vj{j@u2-{{Cy9us-B+wzp|7u|DK-wzsLXKIC$?x2dx} zzkgBJ<0a|>e!Q1=Q-|w@4ruVp6l+nC#jA-Np`AI) zPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hd9LG+ujjoVHtYG=lT^o^q&oH_)v+h3 zjy*|r>`AI)Pf{IwlIqx#ROk7e-{t&Oofq)#NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA- zNp`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@ zC#jA-NpL zIotc4KL`A)C)s)1f$a57&&Qr*dw+GF`AI)Pf{IwlIqx#RL7pA zI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vj{^EtoE`KvlF;N6o{$DX7*_9WG@C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np{r%ToVtvTvY;V(kV|~cwZ0~pe z9PqE6WdD2q|Jv)Dp3n38|K0g)@2}4D-}SdAsg6BKb?iy1V^2~Ydy?wdlT^o^q&oH_ z)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7* z_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAIe!Q1$DX7*_9WG@C#jA-Np+s<_~Yw&?}yELKK3Nlu_vjHJxO)!NvdN{QXPAe z>e!Q1$DX7*_9WGLKIeBie^uuNynB-B*ppPpo}@bVB-ODesg6BKb?iy1V^2~Ydy?wd zlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe z>e!Q1$DX7*_9WG@C#jA-Np`AJ#eq=Xb)!A{MI_pC&XM4Z%=YW6pB-^tC+3UX( z=lTEj+mmeXuZ}%Qb?iy1V^2~Ydy?wdlT^o^q&oH_)v+h3jy*|r>`AI)Pf{IwlIqx# zRL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7*_9WG@C#jA-Np`AI)Pf{Iw zlIqx#RL7pAI`$;hdEE!Tdy?wBj{6VaFYoKCI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1 z$DX7*_9WGLuH%od=e-{`>-pG|RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1=XKnF z*yWr*=U>3PC#mOSPf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1$DX7* z_9WG@C#jA-Np`AI)Pf{IwlIqx#RL7pAI`$;hu_vjHJxO)!NvdN{QXPAe>e!Q1 f$DX7*_9WG@C#jA-NppO^Jpry&ze5k)d(NCwOp5>vzp8IS>EkVFz?Knzig!5B(G3^8Uf#E`U* zN)ST~Ni0DG5hRgBQbZ6z5J4)*1Tn-Aq>y4-=c)tt_juNR?_>V>To>osuWMiXyVw44 zuH(7y=l-^DzWL_cuK9Pq`T5`cYuE4J`LBQT&5vBa|JZBJFF*1lKlCH~{_WSHA9Lo% z{K$R$-1cgJ{eSrP|L;L%2 z|EStO^Mk+UA6EM>{O^D9A5{B0e&D+rRK{SNqq${}2DIYJdLU{Ad4Wwg2U>{P+Jxwg2?5|E<4X?XUgizvQn~ z`#=2EKmJ#%{m$?E$$zEV-~E?<`(LW|AAIlM{fpK9n}6Y#{e^1()c5@9KVR)n`Ex(x z&sF=|zWaCm*=qmxpZSM>rrPiM1;6@FSNli))Sv%T)&4U-_hg(a`ORK$pwrsEGEZgf` zWP6?CY_Hc&w%2Pi+v~NS?e!kY_Iht-dtMIpyj`Cq-&XDQ8TIYeUY~tGuG;G}^~YCx zeOCX3YOn8rpH%Jj-SU&Gy}q-4YPHvQ;ZLjf`i}kS)n4D-KeO6vPw*YpUVDw7RqeHh z`Oa#uz0uFE_S$p(oNBMV+;>%b?Gb-&wb$PB=T&>{X@5br*IxM-R(tKizq{INZ~u#{ zy{;L)r`qdUuWP+uR_%2S`OB-lu1$YMwbwQ8udMdE zmj2b%Uf1Z~U+s16|7)tfn!>NG_G%TsuG*`C{Q7FIw(=XRy_(GrRC~3c-&F0@n0~O@ zt6lwj)m}~Pw^Vzzw%=Oq)$o2>wO1Sb?bTk*@pn{v?Mr^>M`7>od75VJp0;Ow=CzU1 zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZSZSZeqpKJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%Odzrg?7EAYx_U@jiQ`YWjd;Xp?Pu7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8Xz%V>EZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-Lu%s-2c31u~%2TyJxX<&uH)NdD>&` zp0=xd+MdUB=Bazyp7ohmOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_l)-Lp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#a`zA_uPxU`rq9>i=}%OOZSZS?w+S7*6wM$x~J{xp0?-lpLyz@wr73j z)zUqSrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(FgI-rciUx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM^XW$yof&tk7mcX!WX z>7K>XJ&UD#MtgV9(+F$#v|ZiPc6CqN)je&`&wA#md)l7$nO95qESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ)^z5XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pf?*?*Fb)u~$#KyJxX<&tmDG#nL^CrF%wuchA%PYWK8V z-P3k;PutZ!ZCCfSJ7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%;dw0)b>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~S?p!* z|DJoXSNFQRXR&n8V(Fg6(mji%dlpOgjP~xHr{&e|X}h|o?dqPkt9#n6?rFQar|o$T z&pdTc+p|9NYU!TE(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?iuafJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN*vtIjH$V29Z;HM8)ZIOcrF#}j_bis~ zSuEYNSh{DibkAt-?s@uL?Vh%)d)lt-yjr?v zv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^ay}M_zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mjj4%x^j^v)HR6-QBZTx@WO;&tmDG#nL^CrF#}j_bis~8SULYPjjo? z({^=F+tod7SNF7C-P3k;PutZ!ZCCfSJ?G}kQ}?tz>oc#G?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WX^_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-Lu%s{J?3M#a_MV z?w-ZcJ&UD#7EAXmmhM?B-LqJ_XR&n8V(FgI-re(bwAwvwSNF7C-P3k;PutZ!ZCCfS zUER}mbx+&XJ#Ei7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgjP~xH#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&V1}Z#*rt*sIIj-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WX^_dIQ^c2C>YJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7&pAKy z)IDv_`pm1PdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%;dw0)b>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)k zv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tfn0>rcxp_Ub2h_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|Gupd*p59fv zr|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)l7Y$C;<@X?xaZUM=0TSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhKtt-93w?dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2c3~*PWJG?A1B$?pZ9|vsk)k zv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8Xz%WM8dmL|wyS&EuI_2Ox~J{xp0=xd z+OFYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAt-?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlq|{Uwc|+u~(0{yJxX<&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%;dw0*%rE2%IUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F z+tod7SNF6%ue&o(-P880&%9c?XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_l)-Lp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-Lu%s{F>7; zi@mzR-93w?dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DlclSK4 zsdi7>)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#Eix^vqND zv_0!Hua@pvEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp3&ajvsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mjj4%=e#`S?qOve|OJf>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZsBOyL+B~RJ*6`>Ylc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp3&ajvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6UglSymRam|9e#JuV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DlclSI^sCG}=)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ! zZCCfSUER}mbx+&XJ#AO_v|ZiP_PqAbJatdovp(}`>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dq#VA&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi@nURJT0@>>w5X_ zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(FgI z-re(bp4vTaSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz z({^=F+tod7&->)eQ}?tz>oc#G?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-80&|dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bm1@zv8saVz2AkyL%Q(_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAYx_U@ji-PG=BySk_C>Ylc% zd)ltYlb|edg8DJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mkWSyJxX<&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{Dim-*$VWfpr~f8O1*Sh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8Xz%WMdQ9z}wyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DlclRuo?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7JHdrc3Nh!*LC9EJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~8SULYPh+Xw({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^=F+tod7SNF6%@6|I;-P880&%9c?XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESByW z?cF_#rF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAZh^L?jf7JFUK-QBZTx@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ)^z5=jkT3d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#m>_w|{l?rD40XI?Gcvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#MtgV9V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB z>}7uGX_>`d*Ijq_ESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7LQv-Sf1N+C6Po_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF6% zp8;o{x~J_~pLw-(&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_l)-Lp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pf?*zW21uVz29?yL%Q(_bis~ zSuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(FgI-re)`joLkJSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUES06d|sS+>Ylb|edg8D zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhKtt-93w?dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzB>}7t*X_>`d*D-hZESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#MtgV9 z(=2NDv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&X zJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7&u7b-r|xNc)@NQV-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8Xz%V>EZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)k zv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WPM z`JU47K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dq#VA&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#a`wYpO#tdbzN|G&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(FgI-re)Gh1xxBSNF7C-P3k;PutZ!ZCCfSUER}mbx+&X zJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&X zJ#AO_v^}3$XP&yJ?OC6BwRF#7>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R9@9tSF-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM^XWxo5g%wn(o``tZ@rF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgjP~xHrx(=jX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zjP~xH#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tfn0 z3s1`|_S$FP-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7LQv-Saen+C6Po z_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j z_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&#S$O8Dd)l7$nO95qESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mkWSyJxX<&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB>}7tzX_>`d`{BEL7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kw0HMB*Y&k~+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)lt< zX}h|o?dqPkt9#n6?rFQar|s&VwyS&Ep3luQPu7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgjP~xH#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwu%%ly34GK;7LQv-Sb?l*Y0V%x~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DlclRuo?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAZh z^K(zjEcV)8-rciUx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zjP~xH=lZ*LPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7 zSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7 zSNF6%pT}pOx~J_~pLw-(&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dq#VA z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlq|{?>a5B*lQnnch6$!p2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji% zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DlclSKk)U|usuI_2O zx~J{xp0=xd+OFYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_l)-Lp65Ebc2C>YJ#AO_v|ZiPc6CqN)je%j z_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j z_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&#Ie+G7K>XJ&UD#7EAXmmhKtt-93w?dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7JHeWeOhL**S_lRp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVqrJQ5x%REy({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&X zJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&X zJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+w+}p=Bazyp7ohmOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_l)-Lp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#a`w+Ps=R!+W*|$vsk)k zv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R9 z@9uf7XKVMgUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&#{c+~0d)l7$nO95qESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#MtgV9 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv6uN-r)3s7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAt-?s=|JYxlHW-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZO?bjnWye)d)8-OE#0$Nx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAYx_U@j=(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv6uOd(=v;__7ivaESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&uH)Nd9FKa_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF6%-%Dqn zx~J_~pLw-(&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhKtt-93w?dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv6uOor)3s7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)k zv2@R3>7K>XJ&UD#MtgV9b1hlBr|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc% zd)ltYlc% zd)lt7LQv-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^C zrF#}j_bis~SuEYNSh{DibkAbxp2gBVi@nTGKP|J^>-+icp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)k zw0HMB*N3%x+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-80&| zdlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|v)If0w9_(+y}n29?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAYx_U@kNny+?G+tod7 zSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7 zSNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7 zSNF7C-P3k;PutZ!ZCCfSUES06d^etX>Ylb|edg8DJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_l)-Lp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlq|{pL$wm zvDf$A-93w?dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^ay}ReRj;r0%c6CqN)je%j_q1Kz({^=F z+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F z+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F z+tod7SNF7C-P87bkDhtzp0;Ow=GD?Yi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dq#VA&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K=2<|m()S?u+_ba&5U>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(FgI-re(Do7L`VySk_C>Ylc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dq#VA&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%O zOZP06?pZ9|vsk)kv2@R3FY}X5%PjW#{7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(FgI-re(DZ`JN;ySk_C>Ylc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zVlVR(PRlIz`kcSJXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^ay}ReRhN|7u zc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiP zc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSJ>TVLp1P;)S)X~ebkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-80&|dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2c3~$Dfv2?Dctkch6$! zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBV zi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAYx_U@kNx~O(f+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k; zPutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN^SyuOse9U<^_f>o_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7LQv-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#~8nICsrX0g}j=G{GurF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kw0HMB*E+R(+OFYlc%d)ltYlc%d)ltYlc%d)lt}9_Fw9I0!&$qjK7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG(cazjT)))rX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd z+OFYlc%d)ltYlc%d)ltYlb|KXK-%d)l7$nO95qESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~ zSuEYNSh{DlclRuo?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR(+0w$n0; zy*`KT?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06 z?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgjP~xH z=bEH;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P88$J7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mjj4Og_ig=f&MU%l*7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzB zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(FgI-re(DXVmU#ySk_C>Ylc% zd)ltYlc% zd)ltYlc% zd)ltu2cNwe(9dY(mji%dlpOgESBzBEZwtMx@WO; z&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3 z>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{Dim-(T(*SPH6JYlc%d)ltYlc%d)ltYlc%d)l7;j~mD_XTM{6A6GA- zdlpOgESBzBEZwtMx@WO;&tmDG#nL^Cy`JuTF3x$Z=Z)_9^cdcC&nNq?dp_BB-Sf%5 z>z+^cUH5#l@4Dxceb+so?7QyyWUpgin&b5ze0$!`ZBO0v>3+}Yf37K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOg zESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di*WTmqp3&aj^IQ+q?rFQa zr|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lt7K>XJ&UD#7EAXmmhM^X^%Umk_ne!0F6f?5 zkKtYSe6sJl=aYTcJ)i8m?)hZjbJUdO&P$LqcF_FSCXUi&27^XY!y zb7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVqrJQ5+2hylX}h|o?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)lty^=f3F{jJf-pAE!=$^&WJ&UD#7EAXmmhM?B z-Lu&1Y01yodA{rOOZR+w4DY(oxuM z`8~J2Hb=VW)BV2do=^5&_k6PF^uIm^x@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kw0HMB`}W#BZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN z)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#Ejv%FX7O)9`HX z7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG z#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>X zJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESByW?cF`kUc7cs+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C z-P3k;PutZ!ZO=cPUmbkC>9@UDA4 z*>~OZ$-e8JPxf8+e6rWEFTL-2jl6vx&TX%4knZ_(zwf%|lYQ4cpX|Ht`DEX9&nJ6M z|Lf02_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAYx z_U@i%e_gw$?dqPkt9#n6?rFQar|s&VwyS&EuI_2Ox~J{xp0=xd+OFYlc% zd)ltYlc% zd)ltYlc% zd)lt7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(FgI-re);nQQm7UER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz z({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz z({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz z({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_v|ZiPc6CqN)je&`-p<|V zn9~t$@8fDrbkAbxp2c2&O@0jL@z=*o_k4N`@4Dxceb+so>~-u*m%EJzU!V(_FeaUvhTX*lYQ4cpX@pPug@9Xvsk)kv2@R3>7K>XJ&UD# z7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j z_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXm zmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZsBOyL+B}aP6M9t9#n6?rFQar|s&V zwyS&EuI_2Ox~J{xp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)ltMU5@VgbiePq=aYTcJ)i8m?)hZjbJzU!V(_MHCL=a=qT zEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?pZ9| zvsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtM zx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbxp2gBVi=}%OOZP06?iuafJYJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}m zbx+&XJ#AO_v|ZiPc6CqN)je%j_q1Kz({^=F+tod7&z{je>X_3fZSUi1SJ(1KWAElz z?)Nfp?YZr>pItx0TYGMMwRF#?$MCLuKG}EO^U1#Jo=^5&_k6PNy62O9*FB%?yYBg9 z-*wL?drs-=xuAO%OZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{DibkAbx zp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8V(Fg6 z(mji%dq#VA&ua^kyQl5yp0=xd+OFYlc%d)ltYlc%d)ltYlc%d)ltYlc%d)lt{pEG+ zOS?MeG}80?>;H~^AHR;hcCK4Rd;MK^%RKkv`#rb4-Y?zr$-e8JPxf8+e6sJl=aYTc zJ)i8m?)hZjbJzU!V(_8faXZ*7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYNSh{Di zbkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_XR&n8 zV(Fg6(mji%dlpOgESBzBEZwtMx@WO;&uHnM-@NW8ulx9sd#*dVx2D%Gr*HoMd)hDd zL-+h*KXlJ8_CxplVn1}xFZM(C{9-?J&oA~v_xxf%bk8sLL-+h*KXlJ8_CxplVn1}x zFZM(C{9-?J&oA~v_xxf%bk8sLL-+h*KXlJ8_CxplVn1}xFZM(C{9-?J&oA~v_xxf% zbk8sLL-+h*KXlJ8_CxplVn1}xFZM(C{9-?J&oA~v_xxf%bk8sLL-+h*KXlJ8_Cxpl zVn1}xFZM(C{9-?J&oA~v_xxf%bk8sLL-+h*KXlJ8_CxplVn1}xFZM(C{9-?J&oA~v z_xxf%bk8sL${#;`=Cy%bdk^~A7keMS_9U_yMKp0{gF%e1|3dbKaz^IPobp5J0e_xu(+ zy63mp(LKM#j_&y_c685gv7>u_iyhtbTkPnb-(s)#=a={9ecB)1oA(L6etA8|FWvK7 z?)Ugt`_er>+L!M6(Y|!gkM^Z|ezY&$^P_#~o*(T?_xxyIy5~px(mg-gm+tw|zI4xz z_N9A%v@hNBqkZX~AMH!`{Agdg=STa}JwMu)?)lNabkC3WrF(v~FWvK_ed(Sb?MwIk zXkWVLNBhz}KiZe>`O&^~&yV({dw#Sp-SeY;>7F0$OZWU}U%KZ<`_er>+L!M6(Y|!g zkM^Z|ezY&$^P_#~o*(T?_xxyIy5~px(mg-gm+tw|zI4xz_N9A%v@hNBqkZX~AMH!` z{AjPe#}7UA$)~->W%>8qzufORe$VxX+&#}e^RYlc%d)ltYlc%d)ltYlc%d)lt=6U9|Yg~JeyL;N6&J6(j@w?R=Fy(x5BA<%p5w3k$!qzI?OC6VXtAelzO(PT=hOYZ>z+^cUH5#l@4Dxc zeb+so?7QyyWZ!kqC;P5@KH2O2`Q^QNUJmch#rgBE?_;{>)BW1gJ&UD#7EAXmmhM?B z-LqJ_XR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tmDG#nL^CrF#}j_bis~SuEYN zSh{DibkAbxp2gBVi=}%OOZP06?pZ9|vsk)kv2@R3>7K>XJ&UD#7EAXmmhM?B-LqJ_ zXR&n8V(Fg6(mji%dlpOgESBzBEZwtMx@WO;&tk8=$K5@ny}Rex55Dd_ulso0J#AO_ zv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_ zv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#AO_ zv|ZiPc6CqN)je%j_q1Kz({^=F+tod7SNF7C-P3k;PutZ!ZCCfSUER}mbx+&XJ#DWx za>bG7?rD3v=Q;M;OX!}q=eRB1)Ak&KH78K_DWfg_8fn(cN06uU-zDuy&u=>IX-*Yr^owb&;3>V|1xfe zowojOci!)pzNrwQRH#s*RH#xaL_)hvFe_S zRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<( zo{LrYT&%k1V%0qttM0j2b_)h zw7>4jd%XMJvvp6mt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aX zZd>9aqRrhqu z?pEE?ExTKFPq*xDzmMa;8N1u>yYnNIx>fgFth(o7)jb!h?zvcX&&8^HE>_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQ zR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12 z#j1NQR^4;4-+PbW|K4-7zwXKVw)>v;`y9{zy{FsOJ>9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aX zZd>9nM>9%!Gx2=1+ZQavt z>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+pmp$aU^$7w{%ao+e_3v z-Lkt?_jJqdR^8JryIXZnx9o1!J>9aq{XYIfH*(AF_ItkYmBI zx@WSl?wKsx{XSOrT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~M zSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRreh2uY2-dZ0(+ITlaL^x~JRLJ>9nM>9%!Gx2=1+ZQavt z>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i z({1aXZd>9nM>9%!Gx2=1+ zZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^ENL+-)HAO}dd=cD8HPJ>9aq zRrhqu?pEE?ExTKFPq*xDzmMa88@t=@JzTWxZq+^6?|V6Rx9Xm5+1;vpx@C9!^}_h~ zWe@fr(rZj}bgS;^e}`n%Jr}F)xmey$uYX@Y-)d=_FZ=4A>F@jMp2@ztXR@#Ene3~3 zCd+oekJUXFtM0j2b_)hvFe_S zRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<( zo{LrYT&%k1V%0qttM0j2b_)h zvFe_SRrg%1y60lmJxBZNp1i-h@0GvL@%-O=x^3OlZR?(HTlaL^x~JRLJ>9nM>9%!G zx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+ zbx*ggd%A7i({1aXZd>9nM z>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vtqd2+Xb&^Kv8ZrRzcRrhqu z?pEE?ExTKFPq*xDzmMbJm)-66zARdHx9Xnk_x%~WTXj#j>~7UP-Lkt?_jJqd_Un-G zzl}ZEe@L$}Ez_;Kr~e(2Rrg%1y60lmJr~P+@Abcp&$n9I=F7giXZriTx@WSl?wRcO z{rQi+H~DgS{eAhrf4`5_J=5oPtM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~M zSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lQ_a49hf9|9Gbx+z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i z({1aXZd>9nM>9%!Gx2=1+ zZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*fn z8~Nf$?w)Sxo@}?5sC&9)cdPE{mfh|5@gJIvTXwhKd#z~M-Ku-~=Vf=R?&+4@t-7aM zcDL%DZrR%uRrg%1y60lmJr}F)xmb12#qvHqeVwI$ z2R`3wX`3(m>YnNE`|6&_zPe|!Z1?+E-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQ zR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hw7>4j`=GUZx^3OlZR?(HTlaL^ zx~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(B zblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vtqd2+Xb z&^Ku|ZrRzcRrhqu?)LjQeqMIB-}|R%+1;vpvfuYn>~7UP-Lkt?_jJqdR^8JryIXZn zx9o1!J>9aq{aRi8H)9X>AJS_~?{ll}>3@f0)jb!h?zvcX&&8^HE>_)hvAm~W|IPS( ztEFwe?5lgGzwfJiCd+oekJUXFtM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~M zSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJxBZNp1ilY@7KT2@%-O=x^3OlZR?(HTlaL^ zx~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(B zblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vtqd2+Xb z&^PHYZrRzc{XUMC-R<|DC|Y*6>YnWPy%D=xbx*hKZq+^Avb$CHbj$8m-P0|*TXj#j z>~7UP-Lkv=I%NF!We@fr(rZl1bgS;^e}`n%Jr}F)xmb12#j1NQR^4;4>Yj_`{r~#! z%ja9|_dWQu{Mr59_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H z=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_S{oZ^0{{Oj;_SZdmzjEK(e;+@)r`y&&-L~%O zwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&& z-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>`@=lr3qxMg>%?&+4@t-7aMcDL%DZrR(tM0j2b52e?F&$n8>99FCDx%_?AJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}8 z7pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H z=VH}87pv~MSar|Es(UV0-E*<(o{LrYT9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(B zblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>;z;hE zZol_5pZ&VncVFuK{U7R{ZhyO3bx*gy-K@H&+uv?h-P7%FH>>XH_P3i=_jLQ)&8mC4 z{q1JeJ>C9xv+AC1f4kZ5!$1Gu3-gcPPyY7r&+hB?ZU6s^_?P|t(Y5NH{&xWKXVYj^L_gt*H z=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L z_gt*H=VH}87pv~MSar|Es(UV0-E*<(o}>MBPu_E^-P3LBo^D(BblbY8+txkZw(jY+ zbx*ggd%A7i({1aXZd>9nM z>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZ zw(jY+bx*ggd%A7i({1aXZd>&$!z)zV{=)Cg%3H zKf0&e);-;}?&-F5Pq(dmx^3OlZR?(HTlaL^x~JRLJ>9nM>Gl`7z8Cr*e?5Hb7q5f; z{@@?COm)v>U)?j=SNBZz)jgAabJYM5( ze{@g(ynM{v&#UgaSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4 z>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2bz=%iSi7g&);-;}?&-F5Pq(dmx^3OlZR?(HTlaL^x~JRL zJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8 z+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z;1EkN*jG`@{Dh<3FQaxn<|BRrhq;x~JRLJ>9nM z>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%O_7}Mx-80ya=kA&8t9vH<>YmBIx@WSl z?wRbXdnWtpp2@ztXR@#Ene3~3Cj081f7?IbE1duLo^JU)hP%%aOnUCHbJwbS`sYnn z-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|E zs(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aX zZd>9nM>9%!Gx2=1+ZQavt z>z;1EkN+umJHhw9;h)eH+_H1m(l(Q2=dM-v^v~P6r`y&&-L~%OwslXpt$Vs{-P3LB zo^D(BblbY8+txkZw(jZn7r7qYGuV&k?wRbXdnWtpp2@ztXR@#Ene3~3Cj081$-cU0 zvajx$?5lew`|6&5+dtncoV%x6nkRRkCH!uao;&Q^wS2y0*|}@gJ^k;Hth(o7)jb!h z?zvcX&&8^HE>_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}8 z7pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1Ob_SZf6dB1i~x2=1+ zZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*gg zd%A7i({1aXZd>9nM>9%!G zx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(Bbo+h$&$#>h{P$kq zpYprETXybR+Geus+_kjLWZAiE)jj?1(7LDF);-;}?&-F5Pq(dmx^3OlZR?(HTlaL^ zx~JRLJ>9nM>Gl`79^Et8kLT{0?5lew`|6&_zPe|!ukM-bt9vH<>YmBIx@WSl?wRbX zdnWtpo`2gv-z%KEr(2pQcb_G+&Gg)1=dR`Vpk&#(Yx#dWS$6JPbx;5MCadnbSar|E zs(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~M zSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!Gx2=1+ZQavt z>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i z({1aXZd>9nM>9%!Gx2=1+ZQavt z>z-~~_jKF3r`uoTdUVfVKc2g1vajx$?5lew`|6&_zPe|!ukM-bt9vH<>YmBIx@WSl z?wRbXd;V?ze6Miso^ENL+_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|E zs(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aX zZd>QRr`y&&-L~%OwslXpt$Vs{-P3LB zo^D(BblbY8+txkZw(jZn7r7qYGuV&k?wRbXdnWtpp2@ztXR@#Ene3~3Cj081$-cU0 zvajx$?5lew`|6&5+dtncoV%x6nkRRkCA7`-++pXgrEMn5&Rt8}OqQLymfx?EW#_Kt zzbRRE?pk$E|941M-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H z=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!G zx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+ zbx*ggd%A7i({1aXZd>5YwwWwDcP(u* zS$6JP+Geus+_n5JmMlAWE&u(=vUAs}d-}gwvg)3TRrg%1y60lmJr}F)xmb12#j1NQ zR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12 z#j1NQR^4;4>Yk(hbx(eNuHDmZ>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(B zblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P7&& z@qfwP-#5RXt^b_gP2I9{*U~nVW#_J?Z6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus z+_mbS{%_X0r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jZn7r7qYGuV&k z?wRbXdnWtpp2@ztXR@#Ene3~3Cj081$-cU0vajx$?5lew`|6&5+dtncoV%x6nkRRk zCA7`-++pXgrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-T7GX!mYutnf2(BKxog!u{oglP zb_)hvFe_SRrg%1y60lmJr}F) zxmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qt ztM0j2b9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{ z-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>uBB}z%g$X(+f0_7yOy?@EIW5C zZ8KSR?poSrvh3Wow9RDMxoc^g$+C0Ts(bpsZ|k0JTlaL^x~JRLJ>9nM>9%!Gx2=1+ zZQavt>z-~~_jKF3r`uoTdUVfVKc2g1vajx$?5lew`|6&_zPe|!ukM-bt9vH<>YmBI zx@WSl?wRbXd;V?ze6Miso^ENL+90ky>Yj^L_gt*H=VH}87pv~MSar|Es(UV0 z-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|E zs(X(1*FE_;w{}mrt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZejoo=-2MIS`x*Ez_+8H} zJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW6t zx~IPut$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZhw*M(LICxcYmBIx@WSl?wRbXdnWtpp2@ztXR@#E`M3S^y~4SBx}|w?_gO;Q zOwS#5?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~Cd_)h zvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0 z-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!Gx2=1+ZQavt>z-~~_jKF3 zr`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>Gl`79^Et8kLT{0?5lew`|6&_zPe|!ukM-bt9vH< z>YmBIx@WSl?wRbXdnWtpo`2gv-z%KEr(2pQcb_G+&Gg)1=dPt~CdYj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1 zV%0qttM0j2b_)hvFe_SRrg%1 zy60lmJr}F)xmb12#j1Ob_SZf6d9-#z-~~_jKF3r`y&&-L~%OwslXp zt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jLPx{9kkT_o44+ z)xYF-C%5d}wY1G-*|}?Jo5`|s*U~nVW#_J?Z6?dkT}#_cmYutnwwWwDcP(u*S$6JP z+Geus+_kjLWZAiEX`9KibJwbS`fJ>}r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8 z+txkZw(jZn7r7qYGuV&k?wRbXdnWtpp2@ztXR@#Ene3~3Cj081$-cU0vajx$?5lew z`|6&5+dtncoV%x6nkRRkCA7`-++pXgrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^ z?A*1q&1BiRYiXOwvUAtcHj`!NuI2a4WZAiEd2N$r=dM-v^sk3x)jb!h?zvcX&&8^H zE>_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|E zs(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aX zZd>9nM>9%!Gx2=1+ZQaxD zFLFJ)XRsg7-80!&_e}QHJ(GQP&tzZSGuc=7O!n11lYMp1WMADg*;n^W_SHTAwtv1? zICoFCG*9k6OK6+vxx>y~OWRDAox7H{nJhbZEp0PdcJ5l*X0q(uwY1G-*|}?Jo5`|s z*U~nVW#_J?Z6?dkT}#_cmYutn-$|2Y=dR`JAX#?qT6ItV+DTU3bFu24i&ghrth(o7 z)jb!h?zvcX&&8^HE>_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H z=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!G zx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+ zbx*ggd%A7i({1aXZd>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(Bbo+~3 zkM0@l$8+~g_SHR;eRa=dU)?j=SNBZz)jgAabYj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12 z(f+z8KMU6G>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(B zblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx8KMAEq8wp_AAzsT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9Ki zbJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-T7K6}mYutnudig;xog!u{cAE= zb_)hvFe_SRrg%1y60lmJr}F) zxmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qt ztM0j2b9nM>9%!Gx2=1+ZQavt>z-~~ z_jKF3r`y&&-L~%OwslXpt$VutKK}2x`+og<_W!rMw|C3VT}#_cmYutnwwWwDcP(u* zS$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@- zTH0o^?A*1q&1BiRYiXOwvUAs}d-~U8>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LB zo^D(BblbY8+h62*bkATvp1WtVukM-bt9vH<>YmBIx@WSl?wRbXdnWtpp2@ztXR@#E zne3~3{%!w!uW;_3ZfTy}eU{KR({qQNyOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g z$+C0T(l(Q2=dPt~Cd_)hvFe_SRrg%1y60lmJr}F)xmb12 z#j1NQR^4;4>Yj^L_gt*H=V*W3lV|qYJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&& z-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jLPYj^L_gt*H z=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJxBZNo;-)w?&-F5Pq(dmx^3Ol zZR?(HTlaL^x~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{ z-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>Yo0!-nysT);-;}?&-F5Pq(dmx^3OlZR?(HTlaL^x~JRLJ>9nM>Gl`79^Et8kLT{0 z?5lew`|6&_zPe|!ukM-bt9vH<>YmBIx@WSl?wRbXdnWtpo`2gv-z%KEr(2pQcb_G+ z&Gg)1=dPt~CdYj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<( zo{LrYT&%k1V%0qttM0j2b_)h zvFe_q{dG^Ct!wvm+q$RQ);-;}?&-F5Pq(dmx^3OlZR?(HTlaL^x~JRLJ>9nM>9%!G zx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+ zbx*ggd%FET{@2`npZYy_{|DaFx@G6CrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^ z?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wo zw9RDMxoc^g$+C0T(l(Q2=dPt~Cdz-~~_jKF3r`y&&-L~%O zwslXpt$Vs{-P3LBo^F4U>(M=f{dn%4$-cU0vajx$?5lew`|6&_zPe|!ukM-bt9vH< z>YmBIx@WSl?)kU<^S#2kd%C50a`#z6+f2_LcJ5l*X0q(uwY1G-*|}?Jo5`|s*U~nV zW#_J?Z6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_w zrEMn5&Rt8}OqQLymbRHJJ9jO=nYn~Rl&revV%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12 z#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(X(1*FAY&uHDmZ>z-~~_jKF3r`y&& z-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>7mE{~PYUpZuPs|C;xnZrQnOX`9Ki zbJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtc zHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2 z=dM-v^zWh8J>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpzsU9Ip22=R zch6*B-80!&_e}QHJ(GQP&tzZSGuc=7O!n11lYMp1WMADg*;n`c+y41p;oLpl(mc8Q zETL_t=MFn}Ep0PdcJ5l*X0q(uwY1G-*|}?Jo5`|s*U~nVW#_J?Z6?dkT}#_cmYutn zwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJ zJ9jO=$0y6qUCZ}Qvh3Wo>Yo1nmaMwxV%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H z=VH}87pv~MSar|Q{<z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LB zo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>itBf4ehuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSr zvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~Cd9%!Gx2=1+ zZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$VutMXpEp4EE!>dnWtpp2@ztXR@#Ene3~3 zCj081$-cU0vajx$?5lew`|6&_zPjh%_RseU=kDp2=E>b>32ieyci6dWX`9KibJx-~ zlV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtcHj`!N zuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T@;iUB?A*0{ zpC!xAU90Zt-_)hvFe_SRrg%1 zy60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o}>MB zPo8UQ_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i z({1aXZd>7mE|2yu!Kl`3} z|CaZ1ZrQnOX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q z&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDM zxoc^g$+C0T(l(Q2=dPt~Cd(0GOY`LJvxK&po;&Q^wY1G-*|}?Jo5`|s*U~nVW#_J? zZ6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5 z&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtc2a;vyuH}0&S$6JP zbx;33PFCG>vFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~M zSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2bgo2blbY8 z+txkZw(jY+bx*ggd%A7i({1aXZd>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`zx2|B<`zqrT_ZzvDfZTXybR+Geus z+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q z&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDM zxoc^g$+C0T(l(Q2=dPt~Cdz-~~_jKF3r`y&&-L~%OwslXp zt$Vs{-P3LBo^F4U>(M=f{dn%4$-cU0vajx$?5lew`|6&_zPe|!ukM-bt9vH<>YmBI zx@WSl?)kU<^S#2kd%C50a`#z6+f2_LcJ5l*X0q(uwY1G-*|}?Jo5`|s*U~nVW#_J? zZ6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5 z&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtc5|U--uI2kTS$6JP zbx;4EPgdP?vFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~M zSar|Es(UV0-E*<(o{LrYT&%k1V%0qttM0j2b9nM>9%!Gx2=1+ZQavt>z;1EkN-V)-|u|SrvH)mMsC@;YiXOwvUAtcHj`!N zuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~ zCdv>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{ z-P3LBo^D(Bbo+~3kM0@l$8+~g_SHR;eRa=dU)?j=SNBZz)jgAabmUo{LrYT&%k1V%0qttM0j2b_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;7zwXI1W$m7BTlaL^ zx~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(B zblbY8+txkZw(jY+bx*ggd%A7i)9v^1f8g%>lJ9x*?|Bd7mYutnwwWwDcP(u*S$6JP z+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^ z?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wo zw9RDMxoc^g$+C0T(l(Q2=dPt~CdAkgx%(`kZKmfAJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOw zvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T z(l(Q2=dPt~Cd_)hvFe_SRrg%1y60$r-IM3U z+CAO2?&-F5Pq(dmx^3OlZR?(HTlaL^x~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3 zr`y&&-L~%OwslXpt$Vs{-P3LBo^D(Bbo+h$KXLc{!}kpN54_iK%g$X(+f0_7yOy?@ zEIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~CdCckZJ>9nM>9%!Gx2=1+ zZQavt>z-~~_jKF3r`y&&-L~%OwslXpzsU9Ip22=Rch6*B-80!&_e}QHJ(GQP&tzZS zGuc=7O!n11lYMp1WMADg*;n`c+y41p;oLpl(mc8QETL_t=MFn}Ep0PdcJ5l*X0q(u zwY1G-*|}?Jo5`|s*U~nVW#_J?Z6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjL zWZAiEX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiR zYiXOwvUAtcHj`!NuBB}z%g$X(&q$V?yOw82vh3Wo>Yo1GNmku+vFe_SRrg%1y60lm zJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1 zV%0qttL{14U-#sDf9;-bTlaL^x~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&& z-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*h7$Nw{Tf6jl;h5w271a8^6 zYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g z$+C0T(l(Q2=dPt~Cd9nM>9%!Gx2=1+ZQaxDFLFJ)XRsg7-80!& z_e}QHJ(GQP&tzZSGuc=7O!n11lYMp1WMADg*;n^W_SHTAwtv1?ICoFCG*9k6OK6+v zxx>y~OWRDAox7H{nJhbZEp0PdcJ5l*X0q(uwY1G-*|}?Jo5`|s*U~nVW#_J?Z6?dk zT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8} zOqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtcHj`!NuBCk>%g$ZP^Cnq# z?pk$Ee?}#%?zvcX&&8^HE>_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L z_gt*H=VH}87pv~MSar|Es(UV0-E*<(o}>MBPrjem?&-F5Pq(dmx^3OlZR?(HTlaL^ zx~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^HR7 z{}=B5JpR7d|7U)7yJhFDrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiR zYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g z$+C0T(l(Q2=dPt~CdYmBIx@WSl?wRbXdnWtpp2@zt zXR@#E`M3S^y~4SBx}|w?_gO;QOwS#5?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~ zCd_)hvFe_SRrg%1y60lmJxBZN zo_vq4-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZd>Cdy) zJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&&-L~%OwslXpzsU9Ip22=Rch6*B-80!& z_e}QHJ(GQP&tzZSGuc=7O!n11lYMp1WMADg*;n`c+y41p;oLpl(mc8QETL_t=MFn} zEp0PdcJ5l*X0q(uwY1G-*|}?Jo5`|s*U~nVW#_J?Z6?dkT}#_cmYutnwwWwDcP(u* zS$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@- zTH0o^?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?pm5k zvh3WoJjaq{=dM-v^k-kP>Yj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1 zV%0qttM0j2bz-~~_jKF3r`y&& z-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aXZoiNJBX@tk zeczM+D?ba}vUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDM zxoc^g$+C0T(l(Q2=dPt~Cd(0GOY`LJvxK&po;&Q^wY1G-*|}?Jo5`|s*U~nVW#_J? zZ6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5 z&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z%g$X( z+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(qEEg=dR_Mmn=JXt-7Z_ zCzDn8T&%k1V%0qttM0j2b_)h zvFe_SRrg%1y60$r-IMR7wR^g4-P3LBo^D(BblbY8+txkZw(jY+bx*ggd%A7i({1aX zZd>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3 zr`uoTdUVfVKc2g1vajx$?5lew`|6&_zPe|!ukM-bt9vH<>YmBIx@WSl?wRbXd;V?z ze6Miso^ENL+z;gntliUX>z-~~_jKF3r`y&&-L~%OwslXpt$Vs{-P3LBo^D(BblbY8+txkZw(jY+ zbx*ggd%A7i)9v^1|Hj>)7vJ~Jf8uA0TXybR+Geus+_kjLWZAiEX`9KibJx-~lV#_w zrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~CdYmBIx@WSl?wRbXdnWtpp2@ztXR@#E`M3S^y~4SBx}|w? z_gO;QOwS#5?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~Cd_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}8NBirZe9f=j z({1aXZd>9nM>9%!Gx2=1+ z{XYKRx%*uIz90TKeg?Q@=dPt~Cd_)h zvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}87pv|$+F$qN>v-*+ zZd>9nM>9%!Gx2=1+{XYIb zxcmJ5zQ+G|p4D#Ixoc^g$+C0T(l(Q2=dPt~Cd&dEnE>_)hvFe_SRrg%1y60lmJr}F)xmb12#j1NQR^4;4>Yj^L_gt*H=VH}8NBirZ zd~L4X({1aXZd>9nM>Gu2h z|K#p-^832|KX|6PW#_J?Z6?dkT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiE zX`9KibJx-~lV#_wrEMn5&Rt8}OqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOw zvUAtcHj`!NuBB}z%g$X(+f0_7yOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T z(l(Q2=dPt~Cd3w;4m)=(Z8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~CdYj^L_gt*H=VH}87pv~MSar|Es(UV0-E*<(o{LrYT&%k1 zV%0qttL{14U-#teZS9_JTlaL^x~JRLJ>9nM>9%!Gx2=1+ZQavt>z-~~_jKF3r`y&& z-L~%O_WSt%;_mb8`&#@zdG@(w=dPt~Cd9nM>9%!Gx2=1+{Y9=v_YC&qxqBx2>YmBIx@WSl?wRbXdnWtpp2@ztXR@#Ene3~3 zCj081$-cVh-}cY<3g_`#`RyH?%Pe_kZ3?zvcX&&8^HE>_)hvFe_S zRrg%1y60lmJr}F)xmb12#j1NQR^4;7zwXJ`(AquSw(jY+bx*ggd%A7i({1aXZd>zq$L|`M$pXFP>3u*|}?Jo5`|s*U~nVW#_J?Z6?dk zT}#_cmYutnwwWwDcP(u*S$6JP+Geus+_kjLWZAiEX`9KibJx-~lV#_wrEMn5&Rt8} zOqQLymbRHJJ9jN@Gg)@-TH0o^?A*1q&1BiRYiXOwvUAtcHj`!NuBB}z%g$X(+f0_7 zyOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~Cd`{#RwbN6&h^W^TcgtnQUJM7%Gw9RDM zxoc^g$+C0T(l(Q2=dPt~Cd_)hvFe_SRrg%1y60lmJr}F)Ioel$R zyOy?@EIW5CZ8KSR?poSrvh3Wow9RDMxoc^g$+C0T(l(Q2=dPt~Cd#P|Px=Xc)IL{(~It<*}pLUpW0HMX1D zrd7iV6)H;8+LorQ*iDrvQKDA#q^+hjLsKeD#&8VB=rK&k$QT(TV>lgROpJ*!F-E2{ zAr6sLAe_j9QE0WkYH`lwHu5EL3y}Rk! zHaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnkU`|kPt*;2db)2-d}>DKP~bZhr~ zy0v>g-P%2$Ztb2=w|38`Tf67et=;qK*6#UqzZkh*?4FDJrtiDw=DylJH}}=D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?-`ZU7Zn}P^Y_4}V-S^$|`EzJ<-*?ZCxbM5?N8I<_^CRy2 z?)ee-efRu``@VaA#C_jAKjOaco*!}Fch8Tw@4M#*-7j`eU+a(Vo=>-S&!=0v=hLm- z^Xb;^`E+ade7d!JKHb_qpKk4*Pq%i@r~CHn-*EGvD_3ox? z+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q&y0*>D_3ox? z+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q&y0*>D_3ox? z+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q&y0*>D_3ox? z+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q&y0*>D_3ox? z+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hru)8oK7S6??)h|U_k6mwdp_OTJ)dsvo=>-S z&!=0v=hLm-^Xb;^`E+ade7d!JKHV=yt{1!K;=bwo?zy?IcF)aywR>*vtKD;RU+tco z`)c>x+*iBj=DylJH}}=7?)h|Wo^F0Gv2AYOcf7ml+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpEo^hWyXpG*v$@{gbl-Q+=g+LoecwGl;=b>mA93Gz&yTq8 zyXQyT_uca&?)&cf5%+!f{D}L$dw#@y-#tI*ezAM{`h9fwe7d!JKHb_qpKk4*Pq%i@ zr(3({)2-d}>DKP~bZhr~x^KV!O*j8}d;8k{hJQAnu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ@Vl-Shb~t9H+)Tf67et=;qK*6#UqYxjJ*wR=9@ z+C86c?VeA!cF(6wF><}wJs0;)-*?Z=eYJaT?yKE%b6@SAoBL|_+}u~Y z=jOiJJvaB&?zy?IcF)aywR>*vtKIWpx`@ZAdP1m-$x!&D$ zZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)ZnnAJ-E{q|+Fb8$y6?N^^XJ>v`|kM>_kH*Li2J^Ke#Cv>JwNDvv3vTOe02AGy0v>g-P%2$Ztb2=w|38` zTf67et=;qK*6#Uq-+ujdH~+bK`+EJRe}DKP~bZhr~y0v>g-P%2$?iVB1i`{c^-}HU=+}u~Y=jOiJJvaB&?zy?IcF)ay zwR>*vtKD;RU+tco`)c>x+*iBj=DylJZ}&@YU*UcCe7ZJIH@}zIHn;CP-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)#v`|kM>_kH*Li2J^Ke$f45_w?ud(cSau*6#UqYxjJ*wR=9@ z+C86c?VeA!cF(8#_Uqqr^Y7ocuff;-z5aB)yXo3CH`lwHu5EL3y}Rk!HaFM1o33qh zbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qh zbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qh zbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qh zbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qh zbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXn5~p3k3!wR=9@+C86c?VeA!cF(6< zyXVub-Sg?z?)h|U_k6mwdp_OTJ)dsvo=^9Sk?Y0oxwvoozI$%&tKD;RU+tco`)c>x z+*iBj=DylJH}}=D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q& zy0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q& zy0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q& zy0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07;?xt(o++6Q& zy0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nW_PEXU?xyQ!;O2UF z(|zAPpFcM@_kH*Li2J^Ke#Cv>JwM{U@17rV-*?ZCxbM5?2i-4rPk(kF-94Xf?VeA! zcF(6)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8_kH(#{@kqH^Xb;^ z`E+ade7d!JKHb_qpKk4*Pq%i@r(3({)2-d}>DKP~bZhr~x?hZ3FLuwxebe{db8}zq zo}2q>_uSl9yXWS<+C4Y-)$X~uuXfMPeYJaT?yKE%b6@SAoBL|_yxlLoeTDbk^Xb|= z-TYo++uXkIcz4saZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAH}dUwJwM{U@17rV-*?ZCxbM5?2i-4r zPk$aC-94Xf?VeA!cF(6Do3o*SnjpZF6(IyXo3CH`lwHu5EL3 zy}Rk!HaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3 zy}Rk!HaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3 zy}Rk!HaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3 zy}Rk!HaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3 zy}RkY@1D<}v9)_X-P%2$Ztb2=w|38`Tf67et=;qK*6#UqYxjJ*wR=9@+C86c?VeBf zi;?Ta?zy;c`o4Q^?yKE%b6@SAoBL|_+}u~Y=jOiJJvaB&?zy?IcF)aywR>*vtKD;R zU+tc^`=z(9@VnW zw$07;?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nW zw$07;?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nW zw$07;?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nW zw$07;?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nW zw$07;?xt(o++6Q&y0*>D_3ox?+uU65Zn}29&Gqi4>u2lcdUw-(-#wo{k2m*y_xymA9TOiJ^g3==-S&!=0v=hLm-^XYyua=q9+7xzuychAjzwR>*vtKD;RU+tco`)c>x+*iBj z=DylJH}}=)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zf}88zP1n!i&Gqi4`@VZVe|B%~`|kM>_kH*Li2J^Ke$f45_w?8O(cSau*6#UqYxjJ* zZ@>OMH~)O!{xkirz7|i{yPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk! zHaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk! zHaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk! zHaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk! zHaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk! zHaFM1o33qhbG^Ii+BP@WyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwH?)&cf{MlW* z=hLm-^Xb;^`E+ade7d!JKHb_qpKk4*Pq%i@r(3({)2-d}>DKP~biWw6UhJNW`=;-^ z=jOiJJvaB&?zy?IcF)aywR>*vtKD;RU+tco`)c>x+*iBj=DylJH}}=nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yunsh?{2!b&CT`hrfb{WT<>nWw$07; z?xt(o++6Q&y0*>D_3ox?+uU65Zo0P3&Gqi4Yd_pv?{2z&W^b-{H{JK$^Z9drbKiH* zkGSu<=Lg*{c29pTAKg8lZtb2=_wCoe@8+Mw+h6DJ`7?XE-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lP)wz;|9-E?i6o9o?8*S5L2-raO)lQFefNC+oUh&U>DKP~bZhr~y0v>g-P%2$Ztb2=w|38` zTf67et=;qK*6#UqYxjJ*UyNKYcF)Cq)A!wTb6@SAoBL|_+}u~Y=jOiJJvaB&?zy?I zcF)aywR>*vtKD;RU+tco`)c>R-7md;h4DoNq{9a<)+`jL4chj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|PZmxGXUEAj7 zdUw;cZEmi2H(guf=6ZM2_49pmy}RkY@1DAw9n zz1%&YuFccUKL^{UKeMOn-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8*S5L2-raO< zo15$1P1m-$x!&D$ZJV3x-A&iFxw+ombZwiP>)lP)wz;|9-E?i6o9o?8_kH(#{_L*Z z^Xb;^`E+ade7d!JKHb_qpKk4*Pq%i@r(3({)2-d}>DKP~bZhr~x?hZ3FLuwxebe{d zb8}zqo}2q>_uSl9yXWS<+C4Y-)$X~uuXfMPeYJaT?yKE%b6@SAoBL|_yxlLoeTDbk z^Xb|=-TYo++uXkIcz4saZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+veta zchj|PZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+veta zchj|PZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+veta zchj|PZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+veta zchj|PZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+veta zchj|PZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3r-(?zUz6cY)3I z?&k0NzI#6Z{o#fC#qQ}dAKg8l?%VJCzq$F>VBhrD`*dsfe7ZJIH-BH-=Jxw~chj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2wQX*$cQ;+z=H_~L)3t4Gu6H+G+vetachj|P zZmxGXUEAj7dUw;cZEmi2H(lH2=6ZM2ecwHwKj&-re7bMHHkf>xzwa0O=JM|vwR=8) z-`YK&Ztb2=w|38`Tf67et=;qK*6#UqYxjJ*wR=9@FGj8xyXWHi5+7e<+vfK7ndeu# z=l1))+C4Y-)$X~uuXfMPeYJaT?yKE%b6@SAoBL|_+}u~Y=jOh>9bY%w=Kghidw;Qe zK7U`ErDo3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o33qhbG^Ii+BP@W zyPK|Ub924B>Do3o*SnjpZF6(IyXo3CH`lwHu5EL3y}Rk!HaFM1o9_GW`TRLwyXVt= zv1R_}+h2pvx^H>=H;(`Br+?|w|Kshy|KWda{QKp%{J}r^^mhOI{`rsn!KXj?M{oc2 z=DlUbr%&JVGykypcm7`UuY9BV_x^74U;6FlKloeCf9>ndfAlw-f8#fr|J2`a{_TIS z`Op8|=HLByn*YMzZvOp$tNE||&E`M+H=2L_uQ&gRzt;R)f4TY3{?+E+^|j_-{VUDC z?=Lt1+Fxq^Lw~XPum6SSKlbOF|NftA{?mW9`FH%8=3oBP&A;cX&42MvHUELHH2>8< z+5AVo-28X`MDw5g4H_k9!oKmSyJ{@?v3{2zR&KmX(3g#V#$!rz8~ z{Q2u=aQ%FKTY!@P_&4GI;G6J&_Yd{&|37~d{(b*gfBt{`Cj6iImj3)7{U-bmz6t;I zt^ND|_&?tKH~xv{|K2~@{Fna^&Hu>%vHAb>e`@}R|EcCb_kV8wZU1!hpZvcx|DEq@ z{v-cv^I!evn*YH6wfQgp^Uc5KUugd2f3f*@{NI}Y^#8s2@Bhoqf9zjr{_Fp0^B?-x zn}6+(H2=Q;XY;RqfAjD9H=6(K4>bSQf3x{d{9yC1|69#}_}^~+EB{XO@Be=_|Al|Q z`FH;Z&42zsZ2s;4@8&=CBhA0@|7rfC|55W_`;VLd;Ey%`rT?V)_x^bEul%RYzw;-W z|IB~Z{15(r--N&Q^UwUl?&p*L%s>2@fB3nt^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKPUgxTtC<6^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKPP|d=kNTz z?&p)={e1H8{Jrn|{J%HzE&92*elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>Ug zxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%F0P-8>*wP7xww8#{;9csuFvb|;`+I`elD(`i|gm&`nkA%F0P-8>*wP7 zxww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8#{?^Z5`9}Bi$?twX`Q6Va|H?PM z@{P~`^K1QFTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ha($bNyVO*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ha)*pTGBayPr>f_w&i`em?o#&nN%h-~Hat|MwZcML!qU z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ha($bNyVO z*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ha)*pMUAMyPr>f_w&i`em?o#&nLh8`Q*R!+rRYr|EIyX=;z}4xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPDIlskwfx&+F&n`nkA%F0P-8 z>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8V zuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>Ug zxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPDIl*3Uoq zTiwqmzx(;*cR!!}?&p)={e1GfpHKdSzx9Kk|Nj7fi+(PypNs3~;`+I`elD(`i|gm& z`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8 z>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8V zuAhtR=i>UgxPC6KpNs3~;`+I`elD(`lYeTipX>Abxww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`lfU)zuYJAy`Q&#$pZxCU zli&S(^1Gi;e)sdq?|we{uYLX3zW(`t|5`s6*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt6rO)LcK;=k;@O{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt6p&>*pW+&F<%u-~D{@yPr>f_w&i`em?o# z&nLh8`Q&#$pZrIE^GAR4b6@M{;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`lYeTipX>Abxww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8 z>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8V zuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>Ug zxPC6KpNs3~;`+I`elD(`lfU)zH-4l0`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One# z`}ySG_>FJ;#^=7)&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as8b9Q*-@X zpV!aD^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as8b9t)GAD?{`0+{O;$I-~D{@yPr>f_w&i`em?o#&nLh8`Q&#$pZxCUlmFD; z|Ea(Kxv%weas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as8b9Q*-@XpV!aD^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as8b9 zt)IXB?{z<){O;$I-~D{@yPr>f_w&i`em?o#&nLh8`Q&#$pZxCUli&S(@^Alp-~RVL z_qBd5uAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8#{;9csuFvb|;`+I`elD(`i|gm& z`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8 z>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8V zuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8#{?^Yw|988e zPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC;$1s`}2SIb6@M{ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wP7xww8VuAhtR=i>UgxPC6KpOb%TuAl4k`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpOe4!^LPK9?&p)={e1Gf zpHF`G^U3diKKb3xC%^mof_w&i`em?nk|DEstJD>YnKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~@=wk6bA4Vv7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~^0$8eg}>eXeDb@WPk#6F$?twX z`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mo{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgV|I}PR*XQ+fas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgVf9vP(|6AS9C%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdqzyEK2|KIxD*ZR4*elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7 zxww8VuAhtR=i>S~`KRXkxjwI-i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm& z`nkA%F0P-8>*wP7xww8VuAhtR=i>S~`CC8#%HQmMKKb3xC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdqf8}rf%HRCl*ZR4*elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7 zxww8VuAhtR=j5N7>*xBselD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm& z`nkA%F0P-8>*wP7xww8VuAhtR=j3nw{KJ2v`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX z`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mo{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0pKQ-6S^?ChVTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0p-}?FMf4%$pf_w&i`em?o# z&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>TfBox!{c~UI=i>Ug zxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`Z@Wh=K8rlub+$S=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7 zxww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`Z@VqKmWvE>wZ4@-One#`}yQ|KcD>W=ab+4eDb@WPk#6F z$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mo{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ha($bNyVO*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ha)*pTG5&yPr>f_w&i`em?o#&nLh8`Q&#$pZxCUli&S( z^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Va|JGmr)?fbI z*ZR4*elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wU3n(OEKynZgOpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wTe{rt0kwfp(xcR!!}?&p)={e1GfpHF`G^U3diKKb3x zC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;{cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l z^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-Eg{8MxNT%Xs^#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-Eg{H>qA>ucT5C%^mof_w&i` zem?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@W zPyStB`>wBj?rZ&ATt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKPUgxTtC<6^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l z^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-D#Tt64r&&Bm~as6CeKPP|d=db>i?&p)={e1GfpHF`G^U3diKKb3xC%^mo zf_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{ z-One#`}yQw{VQMnE1&yXKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>C;!x3KiB8=b8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l z^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>Cx7eb@B7Q$&nLh8`Q&#$pZxCUli&S(^1Gi; ze)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)= z{e1GfpHF`G^U3diKKb|kcCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkocvRB{al~d&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkocyhyzxJ29pHF`G^U3diKKb3xC%^mo zf_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{ z-One#`}yQ|KcD>W=ab+4eDb@WPyV&P^tHeAxv%weas6CeKNr`}#r1P>{ajo>7uV0l z^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-D#Tt64r&&Bm~as6CeKPUgxTtC<6^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKPP|d=O6lu-One#`}yQ|KcD>W z=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mo zf_w&i`em?o#&nLh8`Q$(J7k}t4e(r1iTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgV|I}PR*XQ+fas6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgVf9vO8{|nvEC%^mo zf_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{ z-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}*Z;z=|Ao(et)GkQ z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAh^CYObH_^ZL2CelD(`i|gm& z`nkA%F0P-8>*wP7x%j8IelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`lfU)z zkNx@X=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3x zC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq zf9%iy*q{I0*ZR4*elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~*wP7xww8VuAhtR=i>UgxPC7F>8+oO>*wP7xww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wTe{rvlXuKW4qcR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ| zKcD>W=ab+4eDb@WPyYLV?)U%P=f2j@#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas8b9Q*-@XpV!aD^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as8b9t)GAT&vrkb{O;$I-~D{@yPr>f_w&i`em?o#&nLh8`Q&#$ zpZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Va zzx(;*cR!!}?&p)={e1GfpHF`G^U3diKKW1o*`NNipZi)r7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}$v-vM&-HozTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l z^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF z*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}$=~|f_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ| zKcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1H8_%q+}XFm6}elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA% zF0P-8>*wP7xww8VuAhtR=i>UgxPDIlskwfx&+F&n`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPDIl*3V!5)7{S}zx(;*cR!!} z?&p)={e1GfpHF`G^U3diKKb3xC%^mof_w&i`em?o#&nLh8 z`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX z`IrCnm;dzVzShsh^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKPUgxTtC<6^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKPP|d=kNJy z_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4 zeDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mof_w&iW=d0iI)z5vcpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7 zxww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7Ir*pN`nf)@ zpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I` zelD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm& z`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8 z>*wP7Ir&>Z|KgwOem?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ| zKcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3x zC%^mof_w&i`em?o#&nN%IKlO`$>T_S~=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`Z@Wh=K8rlub+$S=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7 zxww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR z=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6K zpNs3~;`+I`elD(`i|gm&`Z@VqKmWj2x}Q&e_w&i`em?o#&nLh8`Q&#$pZxCUli&S( z^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!} z?&p)={e1GfpHF`G^U3diKKb3xC%^mof_w&i`em?mReB}qe z^0}||b8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D# zTt64r&&Bm~as6CeKNr`}#r1RYPtEmneO^Bo*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1RYw|@TBKiU0!^1Gi;e)sdq?|we{ z-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G z^U3diKKb3xC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S( z^1Gi;e)sdq?|we{ul~tj{ga>jT0a-p&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ha($bNyVO*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6Ce zKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P> z{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ha)*pMT`b z-One#`}yQ|KcD>W=ab+4eDb@WPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G z^U3diKKb3xC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S( z^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDWXp@{fG^b6@M{;`+I`elD(`i|gm& z`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%PX4L6 zey-2!=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>Ug zxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%PX5-f_w&i` zem?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@W zPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mo*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8 z>*wP7xww8VuAhtR=j5N7>*xBselD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>Ug zxPC6KpNs3~;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~ z;`+I`elD(`i|gm&`nkA%F0P-8>*wP7xww8VuAhtR=i>UgxPC6KpNs3~;`+I`elD(` zi|gm&`nkA%F0P-8>*wP7xww8VuAhtR=j3nw{F8sY`}yQ|KcD>W=ab+4eDb@WPk#6F z$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mof_w&i`em?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W z=ab+4eDb@WPk#6F$?twX`A`1wpZw#W`&vI2*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt6rO)LcK;=k;@O{ajo>7uV0l^>cCk zTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cE zb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r z&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt6p&>*sI#W8Kdu zzx(;*cR!!}?&p)={e1GfpHF`G^U3diKKb3xC%^mof_w&i` zem?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}yQ|KcD>W=ab+4eDb@W zPk#6F$?twX`Q6Vazx(;*cR!!}?&p)={e1GfpHF`G^U3diKKZx(v2XihpZi)r7uV0l z^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkocvRB z{al~d&&Bm~as6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~ zas6CeKNr`}#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`} z#r1P>{ajo>7uV0l^>cCkTwFgF*U!cEb8-D#Tt64r&&Bm~as6CeKNr`}#r1P>{ajo> z7uV0l^>cCkocyhyf9~hHpHF`G^U3diKKb3xC%^mof_w&i` zem?o#&nLh8`Q&#$pZxCUli&S(^1Gi;e)sdq?|we{-One#`}ySmf5Pq{)V74Z%lxVM zDIsDL#1OC~AO;DDA`(aiiyq6IQw~@(@)*Yh0FT!?!{eu!{WK?J?FTe>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rvJ&~*Lz>DpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=k&Ms^>fXy zpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^hZDc>K}JM)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&-7pY<6r&b_r6{~m#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpVQyk*UvS-elA}>m#?48 z*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth z{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xW zKbNnc(;xl(r+?J_Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM^gsQhKmDWkzFt3g|9xqSUxzJ4xWKc~O7ub*pv{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wr$74n zr+?7>Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16 zcR$nJ&vf@Q-Th2=KhxdMboVp;r+@I%KX~u!^>g|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=k&Ms^>fXypUcg|9xqSUxzJ4xWKbNnc z%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^hZDc`8VCqboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&-6e4=Fh)*@9Xt*`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUc2K}p=bB$Xm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%88kAD8$-|v2=yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%zx(^Y`}^;Gy?!oVKbNnc%h%84>*wm#?48*U#na z=koP)`dj<@x#ri;g|9xqSUxzJ4xWKbNnc%h%84>*w zm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V82qo4ocKXyOU-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cQ%3{^MW#$M?QoKbNnc%h%84>*wm#?48*U#na=koP)`dj<@ zx#ri;g|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^7V82qo2R{_ubEQ_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)4%xl zU;O*`zFt3g|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc z%h%84>*w@GKfnE6_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1 z)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7 zOm{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cQ%b)W7%M*X!r< z^>g|9xqSUxzJ4xWKbNnc%h%84>*wg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`T9Bi(a%48 z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1 z)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhqyY{r2A1>*wm#?48*U#na=koP)`dj<@`Obgxa{brO*S~o2_4D=bUwr+1{qs-W-{1A~_3vJM z{e1nipL?HQKVSd$#n;c*KmAMZ^Xup9-@N$x`T7qpzJ9*``uSZym#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUx zzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;F zub<1;&*kgq^7V81`ni1lT)uuTUq7cm`uUq5>1Vq8neKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3KZ^RL&(_c7>*wm#?48*U#y1?d#_|fBX6R z?dR*apReD3zJB}p`t9fIx1X=ye!hPD`TFhW>#v{B^>g|9xqSUxzJ4xWKbNnc%h%84 z>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`lFve{gHmAyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3 zyPxUqXS(~D{wV5~zFt3xzx{mu z_Ve}I&)081U%&l){r2qM*U#na=koP)`TDth{an6&E?+;Fub<1; z&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpVJ@x{O!+rf1B=prn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f% z?q|CDnf@s1m%d&RzJ9**x1X=ye!hPD`TFhW>$jh; z-+sP+`}z9q=j*qhuit*Y{`&b^KbNnc%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;VKl=HzAL(bh`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD znf@s1m%d&zx{mu_Ve}I&)081U%&l){r2*wm#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUx zzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&PJi_C zcVG4MXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex^T) z`lYYe&*kgq^7V81`ni1loc`9ne!la!pReD3zJB}p`t9fIx1X=ye!hPD`TFhW>$jh; z-+sRS`uSKtm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48 z*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq7cm`uX!8>1Vq8 zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXraHe(CG= zbNTwYeEnR$eolXDUq9dZ+t1f;KVQH7eEs(G_1n+aZ$DqZ{e1oQ^Yz=$*Ka>xe|`Vg z&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%88kAD9C%YOb$cR$nJ&vf@Q z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1 z)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-xp^-Eu`pUc$jh;-+sP+`}sQF-$y@}ub<1; z&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUcg|9xqSUxzJ4xWKc_$X`HLUvXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``X*J=KbOD#m_Pcs z=GV{HZ$DqZ{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081U%&l){q_CZ^XKyQbNTwYeEnR$ zelA}>m#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?x zpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^hZB`@+19BcR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{VXM^V4@_4+ye(Z}WM=j*qh zuit*Ye*5|Q?dR*apReD3zJB}p`t9fIx1X=ye!l+t{;Z$N*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc z%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpVJ@x{PrXLOm{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1 z)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7 zOm{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVp;QPf}l@b>ohbB{ldd-ML_{!Cv# zU%&l){r2*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w zm#?48*U#na=koP)`TDth{an6&PG3L2{pH7P`f(?I`{d_-c>Cf1dHjC-{r|gv{~!PN z^$+?P^B?px{DXdmf6&kH5BeGYK|jMk=x6u`{S5!0pWz?$GyH>ohJVn{@DKVK{y{&( zKj>%p2mK8Hpr7F%^fUZ}eujV0&+rfW8U8^(!$0U}_y_$A|Dd1YAM`W)gMNm8(9iG> z`WgN~Kf^!hXZQ#G4F8~?;UDxf{DXdmf6&kH5BeGYK|jMk=x6u`{S5!0pWz?$GyH>o zhJVn{@DKVK{y{&(Kj>%p2mK8Hpr7F%^fUZ}eujV0&+rfW8U8^(!$0U}_y_$A|Ncun zpZxOPA3x}4%zx0&aQ5-zMtttik0US7ub=(Q`Ny67{r>&M2lMLZGp~L=u6{nQem<^# zKCXT~u6{nQem<^#KK^=rpZy&E?C0=jKZig2IsDnr;m>{!fA(|uv!BDC{T%-6=kRAg zhd=u{{Mpap&wdVn_H+2NpTnR19RBR*@Mk}VKl?fS+0Wt6ehz>3bNI8L!=L>e{_N-Q zXFrEO`#JpC&*9I04uAG@__LqGpZy&E?C0=jKZig2IsDnr;m>{!fA(|uv!BDC{T%-6 z=kRAghd=u{{Mpap&wdVn_H+2NpTnR1T>j|iPvGuny8D^#ex|#h>F#H``3rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3 zyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^_!`H9<_Ne7^fB6RfsO96I!XLGK{M(*u=u&;9L~f9`LGKliu8pZnY4&;9N2=l*v1 zbALPhxxXF$+}{p=?r(=b_qW5J``h8q{q6AebG?7h{q2~4?r(=b_qW5J``h8q{q6AQ z{&x6te>?oSza9SE-wuE7Z-+nkx5J_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cQ&6uV4FY{Y?J`zJ8{E3SU3dzx~#v{bpTWO-^fCRruU_ZZ&-BmX>u37+U%t+- zpXpz~*U$7%;Ol4l8~siG_Im#H^O=XQpUc1hz;8d_`Px zzx{mu_4=-#%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;F zub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84 z>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub_cPu7Om{!i-OqIQ zGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7O#k8Q*Zx{R)4zeQpXr~%*U$8CfA;$N z>u36B@bxqOyRTm7*U$9N;p=Dm_g}uwub=5(z}L_8PvGlk`WyXC{`PwQ_4ApBub<1; z&*h(gV!!=-=Wjn>zx{mu_Ve}I&)081U%&l){q_2;pUcg|9xqSUxzJ4xW zKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1; z&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?4GAN~CKCx7|zHC2y0@&C`)KhxdMboVpe{Y-a1)7{T>_cPu7 zOm{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQ zGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxiS@9p>A_lF-}?R@VaU%&R%`kC|Jz}L_8PvPrl`nNxOef{+_{WJLb znf~2Zuk-6?`seWVGyVH7U+34)^e^D+XZk1b^)vmA{w9BWJ^%Xo%){5ug`m zANcL(JAeE6`t9fIx1X=ye!hPD`TFbiT|bwvpUcg|9xqSUxzJ4xWKbNnc z%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wr$74nyC3Oiy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^_!`H9< zw0@?417APWKZUQK>EHhB_4U`!^v~eyXZm+vz0R+n>7T>b&-CxVe4SrE)4zbPpXr~# z*U$7f`kVai_5ADSGY?-sm#?48*U#na=km{f&VKv(&fk8%e*5|Q?dR*apRd1O-}Q6( z`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?x zpUcg|9xqSUxzJ4xWKbNnc%h%84>*w_cPu7 zOm{!i-OqIQGu{16cR$m=`tM);_xI;B|J(m{udn-=^X_N5`3rn{f%?q|CDneKk3 zyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDnf}AquYI(BrhfxpKhr;jub=7P z{_OSj*U$9N;Ol4lcVE5Eub=6k!`ILB@4tMVUq92ofUlqFpTO78^f&sO{O$Gp>*q5M zUq6?xpUcg{RANcL(JAeE6`t9fIx1X=SUf=a|`TDth{an6&E?+;Fub<1; z&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUcg~8pTGT)ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h=|6n^+CS@O`Zw_PGyPNe`kDUi&t6}D{Y?K1zJ8{E_toqC`kDSYeEm%S{>#_- z^)vko`1+at34Hxbf1|(2-(JtZem?W?^>g|9xqSUxzJ4xWKbNnc%Rl`~_S?^Q{`T|r z+t1fuukZS~eEnR$elA}>m#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`Z@j4&!7IKe*R2% zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhuBs8h!Kiy}x_|Uq5sHQ~3Is{_W3R zUw{2f{|vr-_qe{yBX8O#lAN*ZK7`{R{Z|nf?iU{Y-zOzscWT&%b^?^YHa^ z`TDth{an6&E?+;Fub<1;&*k5I;J2Ue{O#xKuh)0|T)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc z%h%84>*wKq@U^TXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXZjCczxK8 zU%=PT^iSaHXZjocP5$jhp(T@*U#na=koP)`TDth{an6&E?+;F|L}p|ey;iT zbNTwYeEnR$elA}>m#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w zm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V82qo05Hk$$GTpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXon*{n{t%XZknr^)vlb`1+at?ay9cfBj7V48DG* zfA`hv{Q8;xIeh(0|NhI@`SmmX3;6n({t0~jOn;-l$=_bjzkWXR@bz=~`ni1lT)uuT zUq6?xpUcg{#PukbdHNSo?Uq6?xpUcg|9xqSUxzJ4xWKbNnc z%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1 z)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y?Mi>$kV}@1MAS zraz9n`1+atIP&7_XZqvFi?5&Qk0UR>ex^T;y!iT={y6gD>u37o$cwL^>5n5XzJ8`Z zj=cE#nf^HP<@@z}dy_v7z5Dw4%s+k-<-4z+uYd94>*wpQKmU0BeEs$3JFTCuzkdJf z_4D=D@6WYO=j*S}=hx5IU;qDM{e1ig|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUx zzJ4xWKbNnc%h%84>*w3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D{yqA4{Y-a1)7{T>_w#Y}^Yz=$ z*Ka>xzx{mu_Ve}I&)081U%&l){r2g|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcg|9xqSUxzJ5-B^z&c*eD^cm{Y-a1)7{T>_cPu7Om{!i-OqIQ zGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf_marN`{+t1f;KVQH7 zeEs(G_1n+aZ$DqZ{e1oQ^Yz=$*Ka=`S3lF;&-B0e`M>!2_r6{~m#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUx zzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;F zub<1;&*kgq^7V81`ni1loc`$N-~FrI&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7 zOm{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQ zGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OtC>&)081U%&l){r2gOm{!i-Ou#j{j0zGSKs@3{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcF#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3KCXVge*5|Q?dR*apReD3zJB}p`t9fI zx1X=ye!hPD`TFhW3rn{f%fBx70{I9+D_4>Jd{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpVJ@x{L^3Tex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tVV5e!hPD`TFhW>$jh;-+sP+`}z9q=j*qhuit*Y ze*5|Q?dRj_XS(~D?tZ4bpXu&r`cHrHr@#2#*X!r<^>g|9xqSUxzJ4xWKbNnc%h%84 z>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w)p?E_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16 zcR$nJ&vf@Q-Th2=KhxdM$JNi*Z$DqZ{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081U%&l) zT>VUUKhxdMboVpe{Y-a1)Bp6Z|LI?U@9Xt*`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1loc`$NU;U-- zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?&ss`=j*qhuit*Ye*5|Q?dR*apReD3zJB}p`t9fIx1X=yem<^#rn{f% z?q|CDneKk3yPxUqXZo-H(y#u~dta}g%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#yXe*TkR?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKi*u719L`}z9q=j*qhuit*Ye*5|Q?dR*apReD3zJB}p`t9fA>Swz9neKk3yPxUq zXS(~D?tZ4bpXq<{%YX9A?|r>~E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP) z`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuzfAsS&{LSuXy8D^#ex|#h>F#H` z`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3 zyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq=i}<< z>$jh;-+sP+`}z9q=j*qhuit*Ye*5|Q?dR*apReD3KCXVIyPxUqXS(~D?tZ4bpXu&r zy8D^#ey0Dz-~5HY`QF#-=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48 z*U#na=koP)`TDth{an6&E?+;Fub<1;&*_hT{&#3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8HRK`uY0p=j*qh zuit*Ye*5|Q?dR*apReD3zJB}p`t9fIx1W!zpXu&ry8D^#ex|#h>F#H``3rn{f% z?q~YH`&<9+Z@u^R`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84 z>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq6?xpUcF#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3KCXVge*5|Q?dR*apReD3 zzJB}p`t9fIx1X=ye!hPD`TFhW3rn{f%?q|CDneKk3yPxUqXS(~D?tZ5K z&tLhUzw+MK>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1; z&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wr$74nU;pjyXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3 zyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?&ss`=j*qhuit*Ye*5|Q?dR*apReD3 zzJB}p`t9fIx1X=yem<^#rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^_umASH z{@d?;y?!oVKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc z%h%84>*w@GKmXUi)BQ|$KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{1sT>X6g_Ve}I&)081U%&l){r2)(0r z>-BT_`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuz zfAsV3{N3(ny8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUq=i}<<>$jh;-+sP+`}z9q=j*qhuit*Ye*5|Q?dR*apReD3 zKCXVIyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%zw>v0=kLDv_4>Jd z{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xW zKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6&PJi_CfBCiU zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?&ss`=j*qhuit*Ye*5|Q?dR*apReD3zJB}p`t9fIx1X=yem<^#rn{f% z?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#IxfBCil@@wyXy?!oVKbNnc z%h%84>*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKc_$X`5*kf?q|CDneKk3 zyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F(#_>gVgXpReD3zJB}p`t9fIx1X=ye!hPD`TFhW>$jh;-+n%>ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^_5B}ai_*wm#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq6?xpUcg|9xqSUxzJ5-B^z(oE``yoU_cPu7Om{!i-OqIQ zGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM$JNi* zZ$DqZ{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081U%&l)T>VUUKhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th4ePk;YE{r&g8UO$(wpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*kgq^7V81`ni1lT)uuzfAsU;_=nxkboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16 zcR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&&Soz*Ka>xzx{mu z_Ve}I&)081U%&l){r2_cPu7Om{!i-OqIQGu{16cR$nr#y|WU|M0!9*U#na=koP)`TDth{an6&E?+;F zub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84 z>*wr$74nKm4QaXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?&ss`=j*qhuit*Ye*5|Q?dR*a zpReD3zJB}p`t9fIx1X=yem<^#rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q~Xc_(%WYAHDbW`ni1lT)uuTUq6?xpUcg|9 zxqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP)`TDth{an6& zE?+;Fub<1;&*_hT{$Ib|{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Ti!A{e1oQ^Yz=$*Ka>xzx{mu_Ve}I&)081 zU%&l){r2_cPu7Om{!i-OqIQGu{16 zcR$nJ&vf@Q-Th2=Khyu$um7)KfA8z{bNTwYeEnR$elA}>m#?48*U#na=koP)`TDth z{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xW zKc_$X`QQ9T_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16 zcR$nJ&vf@Q-Th2=KhxdMbocXd_4D=H&)081U%&l){r2_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)BnwH{F~o+@9Xt*`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuT zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wF#H``3rn{f%?q|CDneKk3 zyPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F(#_>gVgXpReD3zJB}p`t9fIx1X=ye!hPD`TFhW>$jh;-+n%>ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%|Lr&b+i$-2_4>Jd{an6&E?+;Fub<1;&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1 z)7{U<)z8;&KVQH7eEs(G_1n+aZ$DqZ{e1oQ^Yz=$*Ka>xzx{k%{Y-a1)7{T>_cPu7 zOm{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-Ou!Y z`H%nQKYs7)^>g|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na z=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`Z@j4&wuvQ?q|CDneKk3yPxUqXS(~D z?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F(#_>gVgX zpReD3zJB}p`t9fIx1X=ye!hPD`TFhW>$jh;-+n%>ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDnf_-#{j;CG z_x1X@eEnR$elA}>m#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81`ni1l zT)uuTUq6?xpUcg|9IsMVkpZ!+%Gu{16cR$nJ&vf@Q-Th2=KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_w#Y}^Yz=$*Ka>xzx{mu z_Ve}I&)081U%&l){r2_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$lV`>oG@>%Fhn&*kgq z^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?4GAN~BFf4lpc?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4b zpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD`MCP|`t9fIx1X=ye!hPD`TFhW>$jh; z-+sP+`}z9q=j*qhkE@^Q?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r`hWiI|NPtUeZ77zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#na=koP) z`T9Bi(a*o~Pr9G!?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#hkE@@r-+sP+`}z9q=j*qhuit*Ye*5|Q?dR*apReD3 zzJB}pxcZsyex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxU5@=t!{pS<_=`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*wm#?48*U#yXe*VMX z>3*iWpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKi*u719L`}z9q=j*qhuit*Ye*5|Q?dR*apReD3zJB}p`t9fA>Swz9 zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>3{e;fA~A^eZ77zUq6?xpUcg|9xqSUx zzJ4xWKbNnc%h%84>*wm#?48*U#na=k!NE|Ky)`KhxdMboVpe z{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T> z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16 zcRwFjKVQH7eEs(G_1n+aZ$DqZ{e1oQ^Yz=$*Ka>xzx{mu_VaP|Gu{16cR$nJ&vf@Q z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdM zboVpe{Y-a1)7{T>_cQ$`|MVyS^u4dw&*kgq^7V81`ni1lT)uuTUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w)7{T>_cPu7Om{!i-OqIQ zGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ z&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2= zKhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KOa{=U%&l) z{r2 z_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i z-OqIQGu{16|F{3_-~O}rzFt3g|9xqSUxzJ4xWKbNnc%h%88kAD6i|GfK|?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD zneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CD`MCP|`t9fIx1X=ye!hPD z`TFhW>$jh;-+sP+`}z9q=j*qhkE@^Q?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^# zex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H` z`m#?48*U#na=koP)`TDth{an6&E?+;Fub<1;&*kgq^7V81 z`ni1lT)uuTUq7cm`uSh|i|%K-`3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&r zy8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h z>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3 zrn{f%?q|CDneKk3yPxUqXS(~D?tZ4bpXu)B$jh;-+sP+ z`}z9q=j*qhuit(?u70MwpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUq zXS(~D?tZ4bpXu&ry8D^#ex|#h>F#H``3rn{f%?q|CDneKk3yPxUqXS(~D{;&SU zzxo&NeZ77zUq6?xpUcg|9xqSUxzJ4xWKbNnc%h%84>*w_cPu7Om{!i-OqIQGu{16 zcR$nJ&vf@Q-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q z-Th2=KhxdMboVpe{Y-a1)7{T>_cPu7Om{!i-OqIQGu{16cR$nJ&vf@Q-Th4ee_4A2 zkn8{cuIqMT+Oj#hVx;$l%+nK%w^-gHEI#lXhc#P zvZ#qUh(W9(kx6FdASQu@qY!iuN=#x(4dm%Q*ZIBg%lGTeeZK$ub-H-q^X$Ao=XL$= z>-wGFIq&QD+P3|<^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWo{b^k?Sm&&=7MnX^AL zXMbkS{>+^HnK}D2bM|NE?9a^EpOH_0?tJ@m=i8q<-~QbB_UF#GKX<=c%5VMoQGV;skMdi8ew5$(^P~LMpC9G7{`@Gv_2)}C&z*07?tJ@m=i8q<-~QbB_UF#GKX<+^HnK}D2bM|NE?9a%jKX<=c%5VMoQGV;skMdi8 zew5$(^P~LMpC9G7{`@Gv_2)I1sx%2JMoo|2ceEW0f+n+n%{@nTY z=gzl3cfS3(^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4? z`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<+^HnK}D2bM|NE?9a^EpP92i zGiQHh&i>4t{Tcc6=gzl3cfS3(^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TW zf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<_p?l;8UEqx{yNALY0H{3yTm=ZE?G{`@t+`Eh^l zeEW0f+n+n%{@nTY=gzl3cfS3(^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TW zf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<4t{h2xYGjsN5=IqbR*`JxSKQm{4Mn3(y^X<=_Z-4H5`*Y{ppF7|F-1+wB z&bL2zzWurL?a!TWf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB z_UF#GKX<{T{MMfz<+uL)D8KdRNBONkKgw_Y`B8rB&yVt3e}0tT`tzgw)}J5c zxBmPnzxC&b`TPF-N51KCf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q< z-~QbB_UF#GKX<(7t!TYr9(-}>{T{MMfz<+uL)D8KdRhxz;d{1xB)xIcHk{kik)&z*07?tJ@m=i8q< z-~QbB_UF#GKX<(7t!TYr9(-}>{T{MMfz<+uL)Fn`~lfBzRA_vg;H zKX<+^HnK}D2bM|NC)1N!v{@nTY=gzl3cfS3(^X<=_Z-4H5 z`*Y{ppF7|F-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07 z?tJ@m=i8q<-~QbB_UF#GKX<{T{MMfz<+uL)D8KdRNBONkKgw_Y`B8rB&yVt3e}0tT`tzgw z)}J5d@B8yleaqwi-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4?`S$0|w?B8j{kik) z&z*07?tJ@m=i8q<-~QbB_UF#GKX<br#~}ie`e19%$)t1Ir}qn_Gjko&&=7MnX^ALXMbkS{)~M3bLZQiJKz4? z`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<_p?l;8UE!~A`J{%zm-xIcHk{kik)&z*07?tJ@m=i8q<-~QbB_UF#G zKX<=c%5VMoQGV;skMdi8ew5$(^TYgofBs9q{c(TpeEW0f+n+n%{@nTY z=gzl3cfS3(^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4? z`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<4t{h2xY zGjsN5=IqbR*`JxSKQm{4Mn3(y^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TW zf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<=c%5VMoQGV;skMdi8ew5$(^P~LMpC9J$`}42;w#WUs z^X<=_Z-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4?`S$0|w?B8j z{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<+^H8Ts_*&bL2zzWurL?a!TWf9`zybLZQi zJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<_p?l;8UEqx{yN zALj4-^N;+_$NjnU?a!TWf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q< z-~QbB_UF#GKX<br#~}ie`e19%$)t1Ir}qn_Gjko&&=7MnX^ALXMbkS{)~M3 zbLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#GKX<(7t!TYr9(-}>{z{C$7^f$w4t{h2xYGjsN5 z=IqbR*`JY5f9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07?tJ@m=i8q<-~QbB_UF#G zKX<(7t!TYr9-zwgh#;5#4p=gzl3cfS3(^X<=_Z-4H5 z`*Y{ppF7|F-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4?`S$0|w?B8j{kik)&z*07 z?tJ@m=i8q<-~QbB_UF#GKX<g=P&rq*M5EL&yVt3e}0(1@6X@+U61>7=i8q<-~QbB z_UF#GKX<+^HnK}D2bM|NE z?9a^EpP92iGiQHh&i>4t{h2xYGxF)roo|2ceEW0f+n+n%{@nTY=gzl3cfS3(^X<=_ zZ-4H5`*Y{ppF7|F-1+wB&bL2zzWurL?a!TWf9`zybLZQiJKz4?`S$0|w?B8j{kik) z&z*07?tJ@m=i8q<-~QbB_UF#GKX<WtDk8IkNxFmIsfhZ zv*+vo#+Usc&vIUV?LYo6|M;_<+pF|@{@kDc-=5|C;OG9}-~9d``XztyS%V!HbGyp__z(Z@Km07`<;U~=zxuy?mUDYI{oEh?&wl7x&igm__gB`x=f8NC z^NsI6wS4{y-}Zyga$a7hU-uXO#Iu~2f7aLjia-7==k{v~DYn zvz(W=i=X~2f9zS#%ggI0{_G!pmUDae`spA0hySBzIqzTW?>~`!?;n1a^YXFfkN=H- z|5?t8C4<)#d3hrhpk>hXN>{&Rks^H=Y` z_oq46dH6Kv<>mgBKkI4E^*Vi;b6q!{=Dhs6e)rFLnsZ%OpXOZG`KLK|z|Vb}bG;9K zSwQynb-gd&UQRDxmUDeh_;4ax&h@$F%bz`->vPoK_bli7T=%(WIoIdRzyDdz^||-w zJR^_{w(KT zz5gBQAA6Sb?YG-9Kl)u?`z+`7SN`{ZXZt6g<-Giu|K<<-=F3omax-~O%7a<2QZzvEfXbzk_~p5(Bn)>66&wp-*Bt^hqp- zK8fYfC$Sv*B$h*;#B#3BQ6GE~%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}a zVmb6lEQdac<^hdznr&?m8+>psW_pTu(LlUNRY63d}aVmb6lEa(3D`_(70oO`eQ z+`DH#&tLaFpXOZmVV~yEC$T@D>pu0<$3vgQ9uIvI%b`zVIrK>^hdznrT<7uAzpsn) zVc6rLPhvUrNi2sxiRI8Iu^jp&mUF#MpZ^hdznr&?m7R`XrV^ zpTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^ zhdznr&?m7R`XrV^pTu(LlUUC6ybnH!<q68(*Q{}j}Z zak7_5PM&w-WG|B(`Xt%ozblVtl0%;)d!NdoPhvUrNi2sxiRI8Iu^jp&mP4P!a_Ey- z4t)~Kp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrV^ zpTu(LlUNRY63d}aVmb6lEQdac<PhvUr zNi2sxiRI8Iu^jp&mP4P!a_Ey-4t)~Kxn2)XpU-(+W!mGRPhvUrNi2sxiRI8Iu^jp& zmP4P!a_Ey-4t)~Kp-*Bt*L6Op^N0UEu222D)*bNbli1^-PhvUrNi2sxiRI8Iu^jp& zmP4P!a_Ey-4t)~Kp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr z&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<`=cZA-e8t0Hue`qBeS8L=%b`zVIrK>^hdznr&?m7R z`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zV zIrK>^hdznr&?m7R`XrV^pTu(RJ?HiRK8fXA_Zi%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}a zVmb6lEQdac<%b`zVIrK>^hdznr&?m7R z`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zV zIrK>^hdznr-22I^PhvUOea3gs_8s~p_IT)%SPp#>%b`zVIrK>^hdznr&?m7R`XrV^ zpTu&m^Z4oWIj@IIdpz_>EQdac<x%gt50G%^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrV^ zpTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^ zhdznr&?m7R`XrWfJ@5CV@L0~}34HKLEQdac<;@q@_m#=sa^b@l8 zVZPt~vgLr$FRWs(y=%b`zVIrK>^ zhdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%enW8SD(ak?)~m_@1E@`^hxaT&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac zHNlW z?toXH#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY z63d}aVma6IzL=t7IoEyp4?cSbUfM1Bqx5ziIcrda^i=aIN8f2C%@+tCwrOX&!al0%;)d!NdoPhvUrNi2sxiRI8Iu^jp&mP4P!a_Ey-4t)~Kp-*Bt^hqp-K8fYf zC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<^hdznr&?m7R`XrV^pTu(LlUNRY63e-+^EsX0Sk4{r>XTRw zeG%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIhWV*_SxT8{E%?s8PEsF-iP`A36Fe|k8$FW zWYSNFA96aL>}8S@Kjg&8UM4y5Lr$FRWs(y=%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac< z%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63e-s_iZT#mUG>A z{@{~X4t)~Kp-*Bt^hqp-K8fYfC$XH%>v;R@?>&A3Fi2NlyHb6DNC_%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zV zIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<@tNmq||ikP|0+ndIdB zJ#n&^Nlwm}6DNC_%b`zVIrK>^hdznr&?m7R`XrV^ zpTu(LlUUCEbMvcDVmbGI_v({a4t)~Kp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#> z%engGyJvf4o}X!thdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznrTwcf96v8Jtx7+D2U%4O8`{o}!l9&JT zlV9Tf_xK?vPWCd%i63&}WG|DP_#r1w_A<$dA9CVkFO!`3Atz4uGRcV_a^hq!lbrY= zCrmrY5l0%;)d!NdoPhvUrNi2sx ziRI8Iu^jp&mP4P!a_Ey-4t)~Kp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zV zIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<%b`zVIrK>^=khz=rVu{Kx!neT`O1BC z-tWG?-+g@P?2~+q6OSa5_uu1(oQ@}ZndHO|IdQU=NlyHb6DNC_@tNmq|`u2PaPUGRevLd*Wm-lN|aa+2iXgk7trY zpCo&q%ArqUIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr+&`zj`XrWf-DiCF?B`zkB=&gdlUNRY z63d}aVmb6lEQdac<^hdznr&?m7R`XrV^pTu(LlUNRY z63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R z`XrV^pTu(LlUNRY63d}aVmb6lEQdac<_4WPk<1_dqALGO$$>e?W_#vm`$zCQo@k36W>}8S@Kjg&8UM4y5 zLr$FRWs(y=%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmbHEm#;pFmkz~4}B8L zp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%ek)eIi25F&K>aTlUNRY63d}aVmb6l zEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac<3Fi2NlyHb z6DNC_@tNmq||ikP|0+ndHO| zIdQU=NlyHb6DNC_%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<vByK7#B%79SPp#>%b`zVIrK>^hdznr&?m7R z`XrWfoySj~&v`v$+T)>5Vmb6lEQdac<%b`zVIrK>^hdznr&?m7R z`XrV^pTu(LlUNRY63d}aVmb6lEQdac< z%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63e;#j}8S@Kjg&8UM4y5Lr$FRWs(y=%b`zVIrK>^ zhdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<^hdznr&?m7R z`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zV zIrK>^hdznrT+jPW`G9CS*L|oDK8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr z&?m7R`XrV^pTu(LlUUB>b-aD{^&USYoZKho{oL$*nD3wP$S3(2Cmu;A?=Qy>IUP^- zGRcV_a^hq!lbrY=Cr%b`zVIrK>^hdznr&?m7R`XrV^ zpTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrWfJ?|Ux!On87`#v9h63d}a zVmb6lEQdac<Z=bzx z#19E4_jh?8HhUlD`zJi|Nj}DjN0Q0=!tp~+$CJHGa^i=aIN8f2Cw|C@lf6uG;)k3# z*~=s+e#nWFy-afAhnzUs%Ood$$cdA^OmgCfoH*IbBqx5ziIcrda^i=aIN8f2Cw|C@ zlf6uG;)k3#*~=s+e#nWFy-ad)-8ylymq|{p6DLmgGRdJ&l09C>@^~gW^hvV!sT}$w zmP4P!a_Ey-4t)~Kp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr z&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^hdznrTwcf9XRkl;L&C{@S>8X*-iP`A36Fe| zk8$FWWb%G){E*Y}WG|DP_#r1w_A<$dA9CVkFO!`3Atz4uGRcV_a^hq!lbrY=Cr z%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<=j8_y!s@TbMJSr zK8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr&?m8+s}H<;wio32nf7?-lUNRY z63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY z63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R z`XrV^pTu(LlUUB>b-Ya>e3Em!9s2T>`>DL|`N1Q3`7b~DCEh=cA9CVkFO!`3Atz4u zGRcV_a^hq!lbrY=Crr*i0%SPp#>%b`zVIrK>^hdznr z&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrWfoySj~&v`v$+T)>5Vmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63e;# zj<+djah_#vm`$zCQo@k36W>}8S@Kjg&8 zUM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=%b`zVIrK>^ zhdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<-^hqp-K8fYfC$Sv* zB$h*;#B%79SPp#>%b`zVIoEmo^!c3EL#90*`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^hdznr&?m8+%kOxbLii--cKh+= zEB7yXpYi&B_wgBgl8%b`zVIrK>^ zhdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^=khz=rVu{Kx!pE=`O1Aq-XFZa z-+g=rpX6hlcqEy;Ul~8-bUfM1Bqx5ziIcrda^i=aIN8f2Cw|C@lf6uG;)k3#*~=s+ ze#nWFy-afAhnzUs%Ood$$cdA^OmgCfoH*IbBqx5ziIcrda^i=aIN8f2Cw|C@lf6uG z;)k3#*~=s+e#nWFy-afAhnzUs%Ood$$cdA^OmgCfoH*IbBqx5ziIcrda&lciak7_5 zPOir%PWCd%p-+-MzF*|=OmgUxWbacs^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zV zIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<^hdznr&?m7R`XrV^pTu(L zlUNRY63e;H%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr z&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac@tNmq||ikP|0+ndHO|IdQU=NlyHb6DNC_@tNmq||ikP|0+ndHO|IdQU=NlyHb6DNC_^hdznr&?m7R`XrV^pTu(LlUNRY63e-+ z^EsX0Sk4{r>XTRweG%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}a zVmb6lEQdac<@tNmq||ikP|0+ndHO|IdQU=NlyHb6DNC_@tNmq||ikP|0+ndHO|IdQU=NlyHb z6DNC_%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<@tNmq||ikP|0+ndHO|IdQU=NlyHb6DNC_ z@tNmq||ikP|0+ndHO|IdQU= zNlyHb6DNC_@tNmq||ikP|0+ zndHO|IdQU=NlyHb6DNC_%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY z63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac<1eKp?yy1w6id%KNi2sxiRI8Iu^jp&mP4P!a_Ey-4t)~Kp-*Bt*LnQ(`JC57rad0|B$h*;#B%79 zSPp#>%b`zVIrK>^hdznr&?m7R`XrWfUFUN;zp%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<iT~7@fm!Qk8$FWWb!^*{E*Y}WG|DP_#r1w_A<$d zA9CVkFO!`3Atz4uGRcV_a^hq!lbrY=Cr%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<ja7 z_#vm`$zCQo@k36W>}8S@Kjg&8UM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY z63d}aVmb6lEQdac<^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac<e>j_#vm`$zCQo@k36W>}8S@Kjg&8UM4y5Lr$FRWs(y= z}8S@Kjg&8UM4y5 zLr$FRWs(y=}8S@ zKjg&8UM4y5Lr$FRWs(y=}8TepCo(yoRG&e$)Qh@y-(%PC$Sv*B$h*;#B%79SPp#>%b`zV zIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%KNi2sxiRI8Iu^jp&mP4P!a_Ey-4t)~Kp-*Bt*LnQ(`JC57rad0| zB$h*;#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrWfUFUN;zp%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY z63d}aVmb6lEQdac<RFKjd^g*~=s+e#nWFy-afAhnzUs%Ood$$cdA^OmgCf zoH*IbBqx5ziIcrda^i=aIN8f2Cw|C@lf6uG;)k3#*~=s+e#nWFy-afAhnzUs%Ood$ z$cdA^OmgCfoH*IbBqx5ziIcrda^i=aIN8f2Cw|C@lf6uG;)k3#*~=s+e#nWFy-afA zhnzUs%Ood$$cdA^OmgCfoH*IbBqx5ziIcrda^i=aIN8f2Cw|C@lf6uG;)k3#*~=s+ ze#nWFy-afAhnzUs%OoeCFHW57Ws;N61t(7SGRdJ&l0ANI$>W*i&?m{>r*i0%SPp#> z%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrWfoySj~ z&v`v$+T)>5Vmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr z&?m7R`XrV^pTu(LlUNRY63e;#j<+d=uA_A<$dA9CVkFO!`3Atz4uGRcV_a^hq!lbrY=Cr^hdznr&?m7R`XrV^ zpTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu&m^Z4oWIj@IIdpz_>EQdac<x%gt50G%^hqp-K8fYfC$Sv*B$h*; z#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}a zVmX)J@iv9}8S@Kjg&8UM4y5 zLr$FRWs(y=}8S@ zKjg&8UM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=ak7_54t%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<}8S@Kjg&8UM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FR zWs(y=6 zvX@B?eUj|)^H?6wB!@mp_CA$EpTu(LlUNRY63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac%b`zVIrK>^=khz=KKnW9;@oaWynN+; z2Jbs$@56k*{bkp4ZX}8S@Kjg&8UM4y5Lr$FR zWs(y=}8S@Kjg&8 zUM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=}8S@Kjg&8UM4y5Lr$FRWs(y=%b`zVIrK>^ zhdznr&?m8+>pGv)`Hkh=0k1xZ<^iiRI8Iu^jp&mP4P!a_Ey-4t)~K zp-*Bt^hqp-K8fYfC$Sv*B$h*;#B%79SPp#>%b`zVIrK>^hdznr&?m7R`XrV^pTu(L zlUNRY63d}aVmb6lEQdac<rWs;N6UnfrXGRdJ&l0AMt%;TBl&?m{>r*i0%SPp#>%b`zVIrK>^ zhdznr&?m7R`XrV^pTu(LlUNRY63d}aVmbHM`KwQ2Iro0|>XTRweG%b`zVIoEYQr}G=jxdUE(63d}aVmb6lEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac<#7eVFf`@W?0m7$+V{Cht4M4>=uA_A<$dA9CVkFO!`3Atz4u zGRcV_a^hq!lbrY=Cr%b`zVIrK>^hdznr&?m7R`XrV^pTu(Rug_PX#B%Qa?$sx;9Qq`d zL!ZQQ=#y9ueGlg$3vgQa_Ey-4t)~K zp-*Bt^hqp-K8fYfC$Sv*B$h*;#B#3dd`{;#mU9QZ`XrV^pTu(LlUNRY63d}aVmb6l zEQdac<%b`zVIrK>^hdznr&?m7R`XrV^pTu(LlUNRY63d}aVmb6lEQdac z<DO87={>a-_Wo!8gZ zM^Cakuh(}UJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_y4~6`Q87$ z^@PqI4gNmi#l$?CKxS)KQv^L{)3Se+N}(UYuB zdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ<004Uzh#vNmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqK zdy>^@PqI4gNmi#l$?CKxS)KMItMl$U{^bSXH=Vz}-Tv!`@7MSH>c2aZU;p91|Brru zULSHfc5WSg$mQ6%b@U;ZW9Qba-_Wo%STF)1G8?+LNqKdy>^@PqI3%uZNGGWOd&E&iM1YUtjG>*2mMHWOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9UzG{(b!I-_O1t-1YIaCt02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_n-5AJO5an7x2-OtWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~} zldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E) zv?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNr#yYKjy7lhw* z{`xlguOGh8-tULMKi=#7kGm&%a&#nazdx@JxgL+5TSp&qId*OxeaPk5xpnj*mt*JF z(T7})om)pAayfQx9ev2<*tvD|A(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH=ho4O zT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9QbVIWOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@902f6n{u{9|=qz(-HAI_*hT zr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF z)1G8?+LNqKdy>^@PqI4izT;nB5PsA7>)YGEe)#@)zmNU?c(3z`p5)2Vk+}W7x<2H3 zJa%p!eaPk5xpnj*mt*JF(T7})om)pAayfQx9ev2<*tvD|A(vz4*3pMtj-6XaA96W% zZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qba-_W zo%STF)1G8?+LNqKdy>^@PqI3%-+v!H$?ClSo$=>)e?PY;Sszb(lGSNXvO4WaR;NA5 z>a-_Wo%STF)1G8?+LNr#`}gs;e?R+raM#Dvo@8~}ldMjAlGSNXvO4WaR;NA5>a-_W zo%STF)1G8?-ha;f?fhePUcg6BvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4g zNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9 z)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8? z+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`@4n+-UJ!oM`Rm)# zzkc|>cEA7p{&=tRiJs)i(UG|Qez-p5dOUV+9ev2<*tvD|A(vz4*3pMtj-6XaA96W% zZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qb^@PqI4gNml3e`{tu3 zS)KR4GyeSU@5A;a>*HxpvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>_8|33cq?`K~R z?)rGzldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNr#`_Fm5oqw#(3;5_sR;NA5 z>a-_Wo%STF)1G8?+LNqKdy>^@PqI4i_xs=cMqHitB&*Y&WOdq;tWJB9)oD+%I_*hT zr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1eci-`^@BTgf?fmua*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL_8eZD_>lGS;=zWc8~zx(^A zJ<0lb+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb>6>^zy15!*Mqx0p7tcG)1G8? z+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItMmSI-f!n0tMdXrdXm*?PqI4gNmi#l$?CKx zS)KMItJ9ujb>8pyzxoZdI`6;7{_aUur#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4Wa zR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eo zX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~} zldMjAlGSNXvO4WaR_EPy{Oh}apVx^^r@3s4V|NRdCSx@rh=t$gt|5+b$Jsvx^ zjy~ja?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL z*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTa-_Wo%STF z)1G8?+LNqKdy>_8|2gls^N-be0Utfd>a-_Wo%STF)1G8?+LNqKdy>_8zu$lLiC>-f z-y47TB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4Wa zR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eo zX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@902 zUB|z^`?^3M!twpzexKIv_x<-f{AWGMlcOVX`+Z}5$n|*a+&cP@%dvCo=tC~Y&aI;l zxg0yUjy~ja?A$u~kjt@i>*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?p zJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL z*zx+$Ih*z54jvWw~jvKa_rnXUYA^som$E4a>+2Lh@78Hg zV)s?2J;~~{Ct01>^ZU`0tj_E8-A7NdI_*hTr#;E)v?p1eKY#tg{>#tr{(f#xvOb>n zB&*Y&WOdq;tWJB9)p>uOzWw>~`F7XG)1G8?+LNqKdy>^@PqI4gNml32*Vm~}*N@d{ zPqI4gNmi#l$?ClSod5Ro^8!A4lJ)VlCt02LB&*Y&WOdq;tj_!W{uiIH)p`Ft?RQVI zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqK zdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y& zWOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>b$#- ze|`7$g+7Gi`?mf5s@?DV?|1mmdXgtcN8r{oVEPv?p1e_9Uy*o@8~}ldMjAlGS;Co%(eBSe^DHtJ9uj zb=s4x&il{#Z$CdT;G-v5A5VLd)oD+%I_*hT=ly>FKTq`Py#HSGyC+$l_9Uy*o@8~} zldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E) zv?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNr#yX*MZcVDOI zLpZ+Q+V6|n{l5QxhySc6d2)0lZof~f54j$Xom)pAayfQx9ev2<*tvD|A(vz4*3pMt zj-6XaA96W%ZXJEd<=DA(^dXmH=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9Qb-F77PqI4gNmi#l$?CKxS)D)AldMjAlGSNXvO4WaR;NA5 z>a-_Wo%h%I&+mS{dw+L*JnczVr#;E)v?p1e_9Uy*o@902U#C7@KUSwb$?CKxS)KMI ztMmSI{@c&b3;5_s*2mMHWOdq;tj_!W{=c4})p`Fta-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l z$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+% zI_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF^X@wS_1)Jy z`VfxqllJ?WcE9hx-{C*&NuC@XiQDh5>O-!_W9Qb${JhWOdq;tWJB9)oD+%I)A1oS)KMItJ9ujb=s4x zPJ5EoX-~2`@2}6F-~BrE{_gsC+LNqKdy>^@PqI4gNmi#l$?CknPJOz5tWJB9)oD+% zI_*hT=l$pWx1XOE@X?d3kEcD!>b&3Yum838>&NQ6|M&jyo@8~}ldR7B??u0RlGSNX zvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy* zo@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?Ckj zj(>gkb(21X+#sRb@U;ZW9Qbin6WWOdq; ztWJB9)oD+%I_*hTr#;E)yuYq~{=f6}Mfve#eLU?+R;NA5>a-_Wo%STF)1G8?-e0G` zKVhrWo@8~}ldMjAlGSa-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)p>Uv|MG(Ho6cX~R{Re?{@c%f|L}K5^6NkR_y5uFL+V5R1M=_x_)o{qt)maQ z96Ps;KIC%j+&cP@%dvCo=tC~Y&aI;lxg0yUjy~ja?A$u~kjt@i>*zx+$Ih*z54jvW zw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvK za_rnX`jE@9bL;3sF2~NTqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX z`jE@9bL;3sF2~NTqYt?pJGYKL^@PqI4gNml3mb^3bu-~aRL&vSc{_3^YPS)KMI ztMmSI{`WJpI`8-Uw)6hqYrlJv_3^YPS)KMItJ9ujb>4q3`rVVPPJ5EoX-~2`?MYUr zJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNX zvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4x zPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT=iPVw>-GNr=ht5^ zzn#Cn9r){q?|3^>q^!n@XyZ`pHj`zDB&p&qmeuw|~dayl-{r~)R<;VX$ zls=yJB&*Y&WOe>bPqI4gNmi#l$?CKxS)KMItJ9ujb>6>^e}4D(v-fw`$J3tVa_swc z(VpaT?CZ2Axg7gC?MW`jzD|3R%dxNX{yO#Pdi;JA-@Za-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9uj zb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e z_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>_8z2ATT*YDS7 zzkcGsKK$PmdH#Og+xhF|-LD_M5BNWSz5MV0yClDU-2eAUo*W&C+t-!)kn8c-xpnj* zmt*JF(T7})om)pAayfQx9ev2<*tvD|A(vz4*3pMtj-6XaA96W%ZXJEd<=DA(^dXmH z=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9QbJ&FBSoj-rQa-_Wo%iSI z+n+C=Z+Cq>`jF2$_Wk{=5BaQPUq>JES;xMPKIF5GeI0$sXC3=G@2^wLkL&YgUq>GT zx*YpD`jF2$_I2JLA9Mb??CZS${Qk6KU*`pU^d#5w;{(=dPqI4gNmi#l$?CKxS)KRa zi+=YctJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT zr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)p@HPKb?$;0Bzw7te-XHIE{>R;uJUKcNx34SpA=l%vbL;3sF2~NT zqYt?pJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?p zJGYKL*zx+$Ih*z54jvWw~jvKa_rnX`jE@9bL;3sF2~NTqYt?pJGYKL z%U+4OHAFs}zzaH>MPh$U7r#;E)v?p1e_9Uy*o@8~}ldR7B z^Z3)}^P3Ll$Li=qK$m0R--r5;&pP&X^dX;h?Ca=5KI_=m(T9B2v9I&~I>nryFZ(+B z5YYAcvaj=gKg{`f?CZS$y!^CdU+4Yj_op5EIxpa(C%K*b(D6^t&fno%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5Eo zX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~} zldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMI ztJ9ujb=s4x&g=EvM^Exi=dYJ{zkc|>TfaZ{{&=tRiJs)i(UG`)U8xVb9*><{M;~%I zc5WSg$mQ6%b@U;ZW9Qb*zy1>)6-PhkVwtucHt7tYcs2{dI~t zKVSBB-k+aOJN9+ne?EQMv9F^K0bRd;?CZS${KlNmkA0mN@X?c8kH-hB)1G8?+LNqK zdy>^@PqI4izZd=PNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02L zB&*Y&WOdq;tWJB9)oD+%I_*hTr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5 z>a-_Wo%STF)1G8?+LNqKdy>^@PqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2` z?MYUrJ;~~{Ct02LB&+j!efQCmeAD^s<=w9zzF*ewYrQ|->wKaod2)0lZeLgGL$1eT z=ho4OT#lVvM;~%Ic5WSg$mQ6%b@U;ZW9QblBd@Nc5WSg$n|*a+&cP@%dvCo=tC~Y&aI;lxg0yU&g=a@dXlH-`R}{CCwX$- z|GxOsJ&FBSo%STF z)1G8?+LNr#`+586`TM4W`LR0s5YXk=_w%j~`K)7KM<4Q8$G(m}iqHl{2%{*DfGYp?nzdsJ;~~{Ct02LB&*Y&WOdq;tWJB9)oD+%I_*hT zr#;E)v?p1e_9Uy*o@8~}ldMjAlGSNXvO4WaR;NA5>a-_Wo%STF)1G8?+LNqKdy>^@ zPqI4gNmi#l$?CKxS)KMItJ9ujb=s4xPJ5EoX-~2`?MYUrJ;~~{Ct02LB&*Y&WOdq; ztWJB9)oD+%I_*hTr#;E)v?p1e_9UzGdVTlNlYG

    *d|AAHL7k??=5q-s^m#CwX#o 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 z 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�dhuf-SRxKuyKvqU9dCj0Fhi!aql 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≤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

    pK(7+XeN*`)lCyrg8nN$?3!G7=wd+ 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≀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

    p0$&-@Jt! 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

    F7`>?zZ;ZxE6=|0`h`qqhWiCj9^9)X2; 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

    qC_J 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μNBA@b^3+~{fs&|zvEvlf5-2i*V7J+e-wQ8$G16~ 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 z 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


    SJ@Hif4X5@y+^=7g-yVPT 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/smoothstep.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/smoothstep.bin new file mode 100644 index 0000000000000000000000000000000000000000..43aac2b1c46d1acd72edaae1e7196ed0a759f50e GIT binary patch literal 502320 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 Ciu30H literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/step.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/step.bin new file mode 100644 index 0000000000000000000000000000000000000000..03f251cb65cfa6c5fddd7e567bba39bc9ae4ba7f GIT binary patch literal 905320 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/tan.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/tan.bin new file mode 100644 index 0000000000000000000000000000000000000000..aafb900347d0e40d3536cb35adcd40672a197dcb GIT binary patch literal 13272 zcma)?d0bT26~`Y8?hCj@MG-YqK`@GfIN&fdEGlR)ByLzWb=PW0gi2K!s;IFMW_aL>>8>gykT^2zyr?_1{GckVg& z=`2Z-hW_SC{?ZWoZ$14v=+BA%Bxgyw;u>Xd_RIe}IXR?TT_lTlYblsJ&7=|F*k4Nt zS)f}L!ks~nOyKnMa5ngvGzRWWzNQDK$R1%h{B#63tIq4dF{G|GT<}c=C*K|bj{R(& zp*m$RIF}Clfpc-o7lt1ue+iCr&H!*4q8}S{o=?CTkl_tZL|}VkHB@x8(E(dmtT)p~ID&*%wG!pe!p-aRLQbMftN;PkHkgYnM$i^2JKXlHPy z&RT2Sabhhv-b38LSv?`kc)TVHoN;~Ig7ZW25#tu;B5;yBwgji*#h1p>+s}fN=j;Mb zcIpqt8>1eAv+K6Q#^>Rt@7kD_&S-1mzw=Kgo`Tahz{?a?>jlo}+=t-Ym=SGqA2Ajj z^GDx@lYBa0{=keUD;M}-gWD4t249=)gm%wp3-agdg>lVtddArv+a3*@?hSne3 z2hO7wC&BUQv9fyl2aBuuaU$+m!MV6?bk%|fqpG;GTckK_^bzK zajcWQ@SX(DhSnc}^KP4Z+lN!XwekD<;_E+w6MN8ZEAC+jCvnq4aO&dr+R`8Af#Wf0 z3OLX1e`-6l>QiuPx{d*-SMW+(@A?#Q-oG3S&e`A2vALDb2B+&*A8_ioMcHPziUP+r z*&Uo)%l&NoUkn0gzI$tMMz82@b8gigoZiKct^EBu?&o6LaZCeF{IIXUNndi!y64bU zEB~FVOAEn?D6v=<{agl4r{E3XtUtKP`oxh5&gnnS0_Sgc=2=_j%>`%SvcBLfU8J=Z zhQAJu`?KmweqS;Bj#t(uR#)7?;$w!E`vkwv60?qa408$L;1i+c>x^CE#OdIF;ad3hjJ7+l%I^0r@*0H z2M*;q6XiP-|D7pkfE$&J99rMPXq^k=_fBgiIJ8by(RvAM9Id(F(0W@%>n=F7 zc7sFfww=~*J3klI0N~L2Z>Kr{9I7S2p*q4&^#nLnlYm3@h@I*ZaHzHchw2(T)i>Z! zjb!5Q7u82Ls*`N|nyJp(UrrrS@>Km-oKY&9$2sqS#Sg8*Ihk6-ssE@HyKLZZ+MBq?AWTn0c z9O|vWp}xvW{S`RWqk%*HSta#puntnM2M+al7V7t)*K;_QJH$Mc9KZI7Gn4PUP>P>u zjA>MgdoL|}suWNEvCof6@rMa(8@iff}fo>q#lsY$9)ir)>tc}yuDT{WgkDPCYGvWmDv+8OSUt<3poYW0`AOplPtNe=(r5>`kXs0$#Hf=Xa2!Y4sxeCIrInb-I@N+_Nh4o z^QPyiIUBU6_oz8P<_zAY=EQn#Gpjk}JDjuB98dR!+ti$uo4?wu=G^YA&s1}wHtgA; z<{Wfw_g6K?bzR~*H7B8U{aQ7rcFo9-)tsPapQoxhJ63jGrRGS|iWO=O<#tu4$H{nA zN4I{Ksxx821XU-#=O|TY{Y{;!b6~%Zs&g{Fr>b*H*Iw13^-$HJ?bQFrk<^~of7f0$ zhpt)Gp?g<#=r>e#=vk;b^h{M9nj5MP%`sJn=Blbgb6(Y<$EE7fJE&267W6JRQ*$UM zv{Z8_x3pGsC`YwZb12ujsX3H0JE}R9d%LJPl*7BKIkXnIt2wl$c&ItFHhHQ!w8r&S zb7-y9syVdgdZ{_IcK26vs0J9I=1?s$h&xnASg4+WI)Q4E!Q7#G#6oomI8@sNaEIy| z3)MH^P>mGG9jcGYs7?ZhYONsdP@Ppq^%gi(v+21*^_rgQHa)M$sP=>XC93-jRR0;c zLv>@QIF9H$sLl*mic?)WQYlV#Y?M-*>fSL*ajKKYD#fX;j!}wJ9X?JePIdc4r8w33 zu}X333#KT=sgIbZ6sNvpx>B6_l$lC#>TBjG#in#k%V&)Fe$F{kxz znui*1U~azV0fMyvmN#gjpJ3mMo`;TEH#m8SU^T#g_Kyt^EEiaZp$S6;O9d7bm=h@2 z9AI;X)eaLZ0@y^|CY@kfU`|1iq9@X5fK>&#iuYV|)6Rdh^xzweRRc>LesQ=s-!5P} zeZ0sEniOE?^sZtbT{8n%QV82)*O-8fG3*w3MAI8sgfZVJuEk;F_h2%mngnCt*68_l z2wfodE;Y$8&Oa40Tj z^8LGDPb>NTH9wPkTCieZ@10y-BUmCZmlNs71q%R{daR*Zu*afTr~7+ewNdQBY6^kf zx0}UYrzRelm%Uc(&uRRCdDtq&{(z>woZp|XwNC79X{G|3UFpeKorRApuUIbj6Ev~F zd@3H4i~Fk;`wVn{`13YJyE#~Df`#@uJ3}^YsZ%V7avxSYz;bmRnf;|W3Tr>TIV0t4z zU(E44#{^3TmS62(Eg1XOM)PGsRR@-L*>@&lsdf{~yX+eav3y$u%e(CR02bq=uFk~t;fw@w9?Qyj$dZZ5Edqa9e@tpOHW^z#vM%SprAhynJl6fGJeK=J9`hI9X`FvOo?U#S zX^KUQ?=wxYI`M6$DK_tp{2WijH<>0c<)++ge_bBiUN4XJ|A#zQ{Ea*oen}oXe^DNr zc0nGydrlr(@})fHBEG*g-CM>fxz|g4cWLqt9Fu#xDiL!?nYznt-Knv1wrY<|H#1ML$Xq^d(B9#D1p9h7XN{j_ngyGc!DP55YEX=1j`*?IoBtle2>C(~K2t;B0BO zp5+6B`2In;J|;Vzu`}!VxZvy(#$wYr>!1A%W4Ax%%rpBwV+kK|)-Ah{F=;htowD2X z7Wd~^^}pG=SFj$yI>IscujI$<089tW4cN&PKF$@`1Yqrf-CDuNwF8y_tSvC7S1|T% zfu3I*7$-^me8`+$Vr|)Po$v~F>m}BXjho)LX=f>FnmskhJdT4N5 zN5`4)tr^1En?oAdeqJN=l}`dDusyrDVSL=FVV-O)z6QNqo8fa= zFE>ul$3+`UjN;yF44ln8weF-~x=_w8mu9lM_CUB`zt(BJM#^Iuk@A?!7p{m-IilugdK?%kQf4fIrXlsq(z+>33B5joux-sysg9-?~A{6MwKU>UU(XFP0SYgr}k;1Xb+$~YIr%QUsN>%p)J&Z^ z`1;j`pl0gi#uPSC$Lqtwh9_D<19h(3@7k&3BL?h$X*cZDu|zGcr;fJ>`QAsQM^UGu z_GGQA(_il;wz)XQS)s?N<0V?a$#-$Gk8M51IUV6oj&jb-!|8`Pr_^-*kgJmq*W>zo zJ+7E@(A7zooYaZC_j68Dx#wQanK=G~-JG+r>|z<`^!mr`!eXCv#tQTl%z!QHQ+bC`4Bnpp>ach-TwA?v`sU>&%p ztOM^2)`9mJ>%e=Jb>KbEI&iyK2R?%a?q0xWc^K!wGr^m4;MwBCIq-}c!8!1(8^t;B z%=F_Nc=nFr9C(J0w~3+->^0zoyi9i+*pZ^C1N%`l>`Bqo zfn6(xIa9QN(SsvP$7WK|CP{8Cj8`+uq`hrX~}l|#Qs zQ{~V{(p5S1mzAm<`c9@Qhklf;%Arraugal+<*0J#Yagj{=yx_%4t;R7Du@1{6obBnBv+&>K%zjPI;(wL1&P#HZ_KTeL z{VZp>KgpR9d#dwy+kOr`O@ubrH94ONhG6Weo|+il+(lUR89FzrxrZ<__EnhEnl2I6 zhCLP7)}~CtlChrx%W6z)#B1rnUJA^&;o*LqgPjuoW(j*8JCT)@(K)X@VmLAr zc1V~j+--aTS#2quGk#9byMeU|#XKI<5v&n(z+hCZ7+ zi~)F$YW-a2C^KQF8Ja6D9FKElW9gju!YdG&4|W)sbBsxtfNWh5opX${1|#barmQh2 zAp}{*B+8bBSSKU9{32!7CTE(EEto>txtCg}AZrSvY)#l;7_ynuD7!b+HVs+D49fCm zoSlKpe>PVK@2_EKVa^m*%!Nq zAvuoDCC<&7i$AZ;LRn_))>vfb`IKFX)d;JOr>rM-6!sWHu$8i|*wKV-UqD%1Y$##I zg~*=mn7K)E*7v%cr7e-O&Nt*N{!KZvza?kkZ_C-96>>K69XZ>OA!m=US2*{ztZdoq m!am{jl5%9P1$%_ki?qpJO#oy?4k_#!egD=RXq&guVM zO8EfiKbLQozbpSx{-yk5`FG_0AD4bq{+vyCr@<=A8gM{xx7XChVmnP;hUZdCiA|LJjq_(DjitU zb27o~N4Dae1;5lWKJ(QzKFO9@=)#lnYlRB%&{_U-jL&?EFZ_ZT^W{GYBjZmKYzH=< z8}>7w`ds+6Ei9|~3Y?npZz}o?I&Q#svw?pD*&DT=dD$l-D`SA_>CE^uX!DHzn2>JZ zGaus%uVKzJ%M&Q%>CE_dpxw=KmTByN=2QEHUwjhtGHx?I)RuxV#^;MMKJyj96#h>B z1-M>h{EHW8FOCc7xY)qIfGl{~56r7$UdFo8nJ434f_8a}eu9q64SeQPe7>HwE%Evi zo{WDD{Oemer!w{r^C`aYi_I}V!N#eXAIjh3+5$eG8}<`l`Fp_>{!SjY))(3Sm!Q!c z^b$H=Zr~H&OSPYQ)&C@G^OEpn{8x~B1#I%&s||eSQ+)BW*iW*rRG08%{MW#J4W8H3 z$6t*7&wPq6{DQyaNuEx+2lVe3`+WkgsdS3(;(e&hpwB`Vp4?9rauqyu?)QoPK7mo7 z_Z1y8xQ2^f=LOgFexI=WiumUm{<&8FOmNSBpOAaXrOxSJ{e7apuJ|U_69?B7XSmPM z^hg~^$HbpVm-`p3FiQCbPU?T+r&F&L;-5NskS%WHEXyJ{(HZ9BGZddwTqLQiJ&=Dh z(yx3+tv|%B7#GNWBJ1aS#7sJ28&WBc^>cmIHWUBc$ydTr{lJ}cjl}qK)?dL(_aaJZ z-67?%ey%tDyiO54jG?wfo|Gp&js6LGC(u2es65useAYISQ=N=qdBT{q{gtpa&-}Ul zH>ke>eMvFChT~896p!UpXUY?%@pzta3y!G&0gOWz&NypKN9`AW8`~_W`cs~;R6pZd zp7b>SzXLDXK zE9j+uqEyP`_H(`BF~90hdBRd2!p*Tk*8dvyuc7z#3yi%lD5dgPKi4xh@zW`OW(>7u z;ZZ!bMR@w_N{SbT>&iV&z=eTpWyV;2BdL_f{lxV;?~>deC&)OR$cMA$C*&v1SLD@S z!jrF)8`R%Gc1bbzr?LN;Pw`kzb*4OF8jt4*x8R8SAHX=ecjK%v9qAW-yEn0%>Q8yX zQvHl;dD7F|r|-bK#|eC2ha)JZ`~ArOTCejS`T-I$&Mt0APVLZ*q4oHqp851Jc$rFxV&z!aVgwizP598@v#u8nN95=o}O6PM+ zNA@Ytd+k4neXRP$M&&YRUfciCr>!a6YUT^BmTD#dVmv; zqhVhKMx7<)eGAPCZEPRQscz<-MPJGjw(-O~=}>-oMys;SlkJ;8o51hs6!LX!AM>m3 ziDV|x!C0z0@sJ+lCw;~f^URa&y8-P6Jf6-HcL;54AM>j|=2d-5UU2OCILxm$)NJ1j z`)1hZDd*Au6Vb-@F~8c!@@iko6SnbqUa-yXHGj764sv(1?uSqs@^Sw%&o9cax>-i; zOL@XJo|tDnG9Ds7`6TUY;`-nN^GkVwlhT-fG4>zJ711GbojhUceUtGm&w57u*?)+8 zSe3+46ccI8#Oc_+b)2O7VvO}-E3Oj$bsU!Mzw(-O~=~I5vIq5hN%xqtUTm`?S zywBsbv3<<1x`%r`grhu>pY^GIDbM`bzL%iAytVxv$#ZA z|Dc`!SWfL@8MQCv3EOyLp7n^`3qR?jv%jxI@#1h_X^#^T_lZB_n2j-6%0I_7zsHFl z1J;UpNbl1rKZ8DtU-vjs<4pC(4SaLM`8`hD<3t1znA80k9_IS=z6;{mJxxGAf9%_FBCta)1IoeMo zIlZ2F0XNxo-qM%2`|KgbUv%vweIt2}+rs-wS-z^vx4mzKdpC~_W zKl5ArSx$XHa+BsGy@H9G@kCB^9;Op+!4dU8fN|)mSDFN?x35`p?>2Loh&nJo@FH;uRpljFRZozY#^B(T+U$aefQzv@vr0u;Fp9rmGC z^b3F1&wB*W&oKzSGXn1TzEZ0{?kU8$Ww`J40(fed@MrzksK17OJ}HkgzOU5kXMV*K zIceK5^a*X7()b4N*V?6U-lJc;g^}dqD3!{CdJx;)NQgO~0t8X;V<#9hTzupgG zoD%7Tx5o)GHYfOVj}ycfGsZ=HUy0)6JNRdh6ZSaa8guwH?h$nEal&~1eF^{UaYDTB zYaV{_XHmBlYY@E`C-nCfj`<$c+3@{l%wcp)^s)5a8SgRtHE3$fd+#wwTS<$>{;YF~ z^bm&)zc&R_pX0U_97oJz8^;k9O-0%0 z@i!q_dznXLlkFHp{YBUv{%GSGC)-Zl<=@Mavd~B4L3vDn{Eil3DxEQAv6pq7 zOwaaCz@BEDmQGE%j_qX`)z27e*N{%wla3A2d5E8E3hx)4Vf@~Jb_3ZZmHm#TJhqp4 z)LzC={qIf}-FEE>PWJB%duQ02(+6mn(Z}|(jM~c>Y_G_g&V{ZzR{V$P+1@+Ydk1@a zDcO9tF&$keTU-$ z_Flm5e!5|AA$hreSXS+2EN#d8)3bjsZLbLS^4z{k$M#+lui6#w3z44olaAnD<79g& zUcA2L%WK(dLfPoo;T@dze!)CyFJag_Q>W4=^wOmLw8qKyR@hsii&EaB3T2^>{mZgy zZ`!XS45c&1t==!*iJt9!35=Jw6mv>S_wrbdzroV_mu1v0mQlM#^cW``!!J15-dC{m z73_`aCDEKd_Am3Oy^Nvuz7L&r+chCL+1}Tve|<}_YfLF_wer|rmQi~dgYE6byfPm8 z{Hl9}WAy&M+Sc~~_c&Q&9$YK--qt1h*xm(*<2=Ti+w?qcO2zy!1OJVrR$kKaxM3c> zKNH4yuTI)A;*Ykkak9O&Vvd3?O7}P!{RUrnJUk&k>6nT13cB`F;%9pH?+s`-kX_O} zPM&A+=?ve@>c<&AI*y+Gdk2g=$oA4bPA*42Bh~o??0cLnzKHjQ7%S{?GVT?)XI8{T zdz`E>x5lF}PT1q*KbJVUzps4E_h8Qse!qbyOaud#F0tJ??=k-kDri2zJ^w4&W7c_` z?3v=69_iu!c@DPcvY)_X_YKN)g63(=hxg=i`&8yj-;~P$-bmFw{JrIgf@9Pg*?@z`f>j;pX!+iW74t27@D6!*LElVd!^_0-9Y~h z@I9S%ePFayKW-n(Yx@{a+tH_s4%@>#%&+zxg`e9u!~Pj<@s#tpJ}0H6`f>YMUiCAc zw(s5PVuShMc%0n6JJ^4RHhCKI)JCT>-?)9ur|n}rZQqwoCmZcvA$oKB3dMQ1I4zBN zqS4{Bar;PS`#E_onCeT>$R_dOeMKs!QLq9=DI>)n3Nab{s>O z`<3|M82)Yi+`db+;Sz1~H0G&}>oFg|-SIut_WsU%+CIk9_T3jft*gk!A%1S(HSE6z zzo#)zb)i1KztXmk`LunEr~1E2`h-51;`_4aAlUn|Xh%ic__REwF(2OJY}=QfOE8X% zHfsRZr^L*y#|i|{vqd$M)Z*1Xdm-w zI~Y&xx_>(6y7-PV*_ZV8pQ~(r4}M=K$~Ek3#(kYg7m2JjHI6G4WsUF3Om%YIjp+M2 z5kA^{_bSgrQ^gpBUp<{dp6XKlIF4gJ?Wc(_Ch4a{pF!9D`|{|yeK)ZG26{c+*NKJx ze^wjk%<$9c&y=K(XZUyh4C())()MN2;|J_0EZVv0gkSF|HKOUdVr{k0HbR2%! zboRj{J`laReFgW?a*NZ_m?s(?P8+w6<@J8d{2B)cfap(j!tU|EH$AuS0(cj&-_w|< zx_zBU4wLny_QxfBG+xI^U&eU!82){oDAUotPHfhOxCVK>#_4!|c}ev;KAB(Vmq_2& ziTOHyh3j}f8<9r-&L=fmH@zyvzcEV_)}hlp^F`h8sz(-hUkL)vEncL$UCSFsK9_RcKkI>&z`*7mtYhhohIA^hk^I9fa z{4PrNAJx&hwlC5dL*uHH53*}|wy%P>&T^*r>WEgy{$n|{PvphcA)R#yPg*Ypy2xhx zrV8JIhfm5+u{^eq<;;I9uf8PtN%N5&^A$WjS*B8zvWX`YXX{u0OE4B8A?J}J*-jL(VkWBZs-?Gt&?z0d{2uH`5j75e|NCwZVqdX zP|m-%b6%GDMb{x}pU8_2#_Q2p$2O15LD@bimGuDT7>W5~dF($DGv5@F)%*8w-Ea)g z3*fxS_IW%Hd5-zP!|^|t$My-Y_(S+LPx2afM7oTrZ63kQ_Ho>7zpo2yDa)K4e_ywq z|CmqhNU=0yh#hfGPWcfJ)3bfopk3d}Il;ZL9KZX~+Q)oqpU8_%Lptja9?~-vrAr)4Pf|;HkMAo?geUDo4u|F^ zWP5aCIm9!8WeVfzsNc>koWiA;y-+$Dh*fcwI!CH9fblRJ3`PHc)Ei zemZU+^H=Qy!kIN+39~~#h9}6zHnE*U{M^0@j0#GY>|H2#?S35xVIMEQ->+4milq~SYGeZ%&+(EA)Ry{;vw4%Gv=c#*;l09qBpmX z*9YJqrwc{QldbQ<(@YME5haGOqh-XNDK{iS|hCHk{x9<{im!NN_xTaxQ{Juht zUsPW8GoH4OaeH*qd4T7r{c^HD;pg^Uqy8GYj!EP9725W(yy{^*wS7n@orieHHp7hh zf$W4ni0`4C)4y(LzpntC3i;Yi$K!LjpH4VxBjakDQhvk}=`nvxHp*CKI}?8Hzn74s z7>?4HklRkj?PEFB!#JvcM2~Ufh$qp>zN7GS`(8or71~AD38hxO^SJmyj^G8__=+rA@>@({QC-CHhN6Q?PDCa#nx>yeipjoXq#B4WuV@N-S zhuU%5f3C3gJ5c*NQLf>Aorw9m(y8&rjJ(EZL;5j16*!8yuM^=4_-tP%?(0PQzCs(v z&A3+9>$nFLSmBWCa-PHbF6L`bmS}+<^P95yK6wW@UUzlUeVu6gq($Fd()knjqJ_w;SAsVZts6w zuk*_*`1jx%@E9J_shIIP+s4oR_Zk?yHlyF&{({zPR_>+a`IF_?mOu46vHx80nBPG= zKlyjiaBG?P_M++HpYw8#3R<($^$4Gw`nza^JJ~#oyw0<%uSX}ALp&2$Og8309?ORD zf+o?mPV+nO)4V}SCup9={HlKBAI12ycupxkkLx*Z-_W+V6nh0Y4wDCOs(nm1akXIiQs`-kP! z4&&AoR-Es(ddY@m=EuP=J*FPB&)G1%iqeFAvo*nL?>M18OcU^%pW6r z3=d;w|6G8U_8WkcXzBM68r}{6FoybPwEvLkq*whDWhE97-$r`M4`h$QPdwy{7ui3& z4gtQWF%N#BW6nhPUQ%7EA75WAr~VN+Y2%R2*avvno^77=EIeYye8gGNvwyC^dkr2> zW1i|l{RAH+-i`6Ya_S$J(Xlb4liou-Y>)V7h!c4tX3Pg3YSUCAX7*17Z-uOy)++aRLw7czKEqESvrF8noB9VV@`Fscu+L`#NL)u$?HuxuEruEMN67B`M0)MOZrG~SeKDT)Bjam74(X)#5D(d6n4T9~ z(I)D6X@~L50W;=nz**7r__+h`9e6wq`F)?LEc-(*kiXT_@|4m+bfd-m#yXbyHI5Wq zy+<&h<_Syh>4}GQ^<*PG<|EFCehd%G=J9g@+681ijd`lu_lfe}5B$UH8%yD%OZ(j) zq8Xjj@%$6lNGzk{WJqUh8COG|7i8Nu&%RG2{<(&){JRzK?ZG{!0nda>dEX~OTnYc| z`$W30rPtuTPbAmcD~yfa9#fphMm%eJzJKw43-CRS`4@psd8+gJztnvqd9UbymH%D- zq5Mnv$MWyx?~eN&)U$^V-~JaSGfZjAed}R)h#Br2Cw?ULzux}W!?(oYpP+kxK)!st z{I>k8e7i4?+HXVhXXR)3{B8LyK0!(Hwalmw&o86?QcHFDxy;CelH|WrevZGN4)lMg zd3l%GHn9RB&;^4%o=y|@2Sep$XZkpEu!9wdKRehFXx z2YIxBlH|W%e)V7~-yg_-zkL7UThx=}ugb6R2}+XxLHRZQrh)tq$`2p|4*x`7Cizl+ zgTGG)@;nNN1M>3uY56qDPoF+0({HAM{PgMc>BG0EC;9RKtsqL2FQ1j)zCA0S4fKCj zJ|oGuXZV!y14@*iKAV0!{kEL<H)?DHsJuFLQ6_jz9)wb#%L4*&eTd>-Ye z&&#)`-%SJg>GSDxX#U+q@_a22CCZl{mfyn%KOE@)Vfi5>#S6bLzegUFC_nvh`u+6# zw?FR7qZabSVV`e*{PxGPuiTq22ET*1&l3;JK2PlP#DBASq90cr@jFOo56?KRC=^-5 zd(#=m7T@5zN0OTw#;=APv+M)*06b(=m}5ajv4X9JiwFK zL!u6kJ%A_C3@8bY;*jr@pW^)a08e5O#2>(rh(svz2};8IE=46cG4BlU5QzZk7a=y0 zXvOIX?|T%b(E0X126!P>0Ush3idF2BqL+yGU_v~C*oDqM9ype$#bX!XaZE$eOvEcc zK#x-_gR_r^nkAOO=m3&XoSyJLMZ7|>4blM~A{k&vR3o24k?{vg#6#SICJcf#R8aMr((t&*vJ4w{! zu@fxwXe#1y9QDJuKc=*gC$SX8PZmpQbmcKtKd##N9e{nF#F{|9lS^w(xi4S_r8V0= zPww+1t`C|c>BJgwpC|dww9JRNN_T`}QAF+=P z$CmJP;Q_knYdGda?X`&tqIaI6V@i4)O73BU4w7otasJmbDs!ao>$0v{Oo1ZTpx zIP~WfiI(s5{iAcNM4|F2v#xv!MP^`768;jGa&CYxF=*U96N<;Cuv{WnP!hhyslROZ z)slZ!vFftB24sm|J%&yA8naU5`XKGQC48TIfwqcWA-6=f;7s@$!%8F@*FFi~V^-kH z?pzbgIvt}l;cHAQk!{?!OZa>hbYk0X%p377#-(UC@9RbUC8mX)zORQlDD3yit{+h% zzRl$_tH*u6h_5l4M7{DUQCr*zbb7>>IJlfsBur<2d~V0WvR_CMFwcNbwZ?>Fja-fukTxEV1s{(cBA zhkeJ0k2>0ST*uBr_Xrw1pd|ZgKax)VjQf%iUn6I5!CLv0DB5FbqmTD1H{OHY?-Ra9 zfgalL6XAZa-zVaAh}#6+$<})y`+b5vv)?DaPWOrRy5gHhJ_pC+MSTvAZcoor=?7K6 z!DAtS03Uj-hm7Vw;$(k13d zc(P`YnLn-{JfHArb%5vQv`QG@#kD}p`_4?lqt(DKuw(s`xL=*@i?RQDWdP}fN9zFW zR_FcdgcsKUt9;(CK706p_Nx)|=l$x42aXigqYq-_k9@L^_N#wQJJ4~zI^w1MYKiVK zMt~}LMEwcxQ_R8zyVXbs{SkMk^VL~=18BUgB@hM?8tK+x_a~zZgr0{IY|+-mkX# za`Ya+K2OSib@X%EOWEhieV*Ls$r7)RWj@3V{+PF z!N11Yyl2UjHnzl_p`pKJoQG#;>D>s5H)+?}o~tc74#%6&A#te0ki2tEIIKhB&za*; z%Ga(Ak2Qfc$_x6u>|VPLib?ey3W`f<_qx*#nPYu-8k!Kv;xo>@O+NUF;#4{jr*eun zKRY^NtQzy(xD~p=6Le7Q$|s^wPP;l*F)Ky9z*^ClJ&T~@`y9h=O#J%n% z_QpsHF?pNExA4%8e=hMIU5d@O-X+=ZHOo#ndQI*x`@M#)ht54^zt_-yOYeH!?=>`k z?)RGTosGZndrg0RbIkiVXRG&dFx^aaE_+<(yys2-ui@R+Iheg9hGYcFhkdZs`#Q4z ziF@u*f4jZ`w!~S@x(9S$1FiE(zpaaGWyEWvxJRG#kJdzy-rTdG-`7f#Px@`mgw+zS zp5*iAegAK*k%0a4!8)p0YbE{5dP;Iy9_W{~l&qrSy6U8S(r;@meP2k{TjiGn{j0T= z+y`}qHCTVO_sXQ-)?rwQJ;3`!v>u~#pda<{Gq1;pcbo?n-M70uNx!YpeoapzaCK;T zpnttS`!#gVSi^rn)&uVn8p_1iys z<{|X-Cey~+FY5R8o~`__{>#ruQv28IKVRpex7YbY&r#0lKFz0m;@Jq5<97g}e$+P4 zQDi-MJiX-SF6aI|0jv~xwT;}PT+mhpV6IMcTo2@;TN?3+8?L1pNea9j}x$O+m8W^ z{$P(2=(hztHi-E&Pg0Dq#|hZ+l?Y*v6ZSZPVu$|xdp~i)dSBsNN4}4T7w^OSc(kLi z*!d74XepiV`N(=gRw?osDabGL!FhT=Po9`k^iSVKjQE}X0$H7RcMTFg-QV?nJ-X-j z?bm0df*JP!niW50HPj}2TIcKgd$jH!;5W}ffdeW3^f&oH0cXOebv)gne=*fOsXVaQn(y-r^@JH)v$U;l3#fVM#`nx>*Y!qwjf&XQMuh-CP3hs~*-+s5p z?umW;(R#VRQjYkvE~el0;q@`r#(jLMhac9@K-Vi_a7KK-f6>!WTJPeX*2hO}f4vJC z=#_8yaGp3LKCfnJP22f>pfEn;8aA$NyDQm<&+AlLv+8?>1N&F&RejbOcBGdTY{ci) zD6L6pJ(|Aflg6j7Dd7#tOOJF{pAnzeo%HmR)|<`m4=w%~-bYp|&Hnd%?0zwNA924= z*jqH{Kfh{XT)a$bO&byg#$wC-@G!-zUCK_lf?x;+Xd_&pYp97DRmUdFAr| zkvE=KcGnja$#C@8)Q0)E^R6bXKH~GrsQU)C?p^GE2BRm^&Iv!;ME>8EuKowTm8Jko*wW(5Py zzgYd=mQaMV%b)bqx`$8Pk31irS0?`-vHnS`Bj#W3bg&mIrKF$MMS4CM{Dv3BZ}PmJ z)=$9T)eyLsl~H$n1kS*}-Zw#y{4y7SGwSE{mhDAy+I~kXwtv0;(v{b5=oeMjwH*pLqkdkGVQm)E{Jb*i z*Y(+YHMXX#*Ko3u0B6+C>or=lr87RSjQY3l%bnWQdatDCmFMYq&3KKsdR`gz51&_d z*LUduxE}O;YQH_N)aR7E4n)2`{`$`!p=b2evb$c4`t?3fE5mg5_3N5&y&7CoHdc>O zKd%?{ch)4&Pc6efWc0tRAKT}T8&56$8D)IGcKy7P)|FfD((Z8r#|QMha*q@CIAM)nVoML4_r6I}%GC;M#Qf_5+Hl+T~b z?nQk58vB>{fDSHv#{8NhwUH<0*E=AnP4?Md#!qxt!^#@H4E!hi73=q`;+{s#3xA|Y zeoX;qvd{K9n)kGAH)LSn=KhE7b6|%9-WASGe&uogWS{MeV0Yv}c#qq5O9u9J_d8(C z=KcuqX(uJhcKMTiwrBEd-aYYs6WdK0*ynp7&=>P@|0L!kPs|IC%refO>_cp1&#F1M z@jI1aeu=S?%w7^P9TPW2*)D&y&-Y!L_r&eJ@xK51`zcskhW(fHEIj;^XNN|fw#(;g zx8@jr+&=NxmpG$+zL)bm&FQ`lc5pb?x33e2#i#h|C~ZxVouKZ1P_)nXdE~7#+Sk$C z@7BNbxm+Kk{U3b`Anf)GcZB3k0r?F4gdFYj{UF;Fvi%_{r}qca{Y`d#*1JJ#ig2#^ zWkh!QqkSF&(mMxq$|v3DI2eTA*};P*IDBg!Tc#NBC+ z6Zbgr?EKuHiS2Qs{olVmP8>W}!>rMb`#_JeVa#{=(|zXC{`Um-IFWykW{(qX?{1G1 zB|?->#BY0?*o!nNPW+!(+5ThsKjq)>pLzc;a{q+%@PF!s5RU(W^N{TFcC73x`g~R% zVvCWEKM;wIi9eS#eXrsnDk*lRFG`r4r9=zIr1|Mcx{F5JoLK(&T=I`+N&omp)91^& zZTY{zi%ye6n(TA=H<@nuNHf3c|KoEa^KVGOcVYv7R?W|n8h-v>2ML(}l)rkK^}P`~ za1tFmnQ}Dtm8$gGx9^eGKbnQl()rD{|6HzSJ4_yFvTsD6wLSBjzI_*y*ma@yd78c# zv-Y3MP1z2YZ|ob=tLh*4?}IAi{BI}W`(W1efPEiSe6O;1{kojnm*s(%>GFJ!eyQ;>Q?Q{9Y zKAGECCbeh5>D%{M^*o++9E;lW_<(&bSF?R^Cm(-{j6!kpc$N~efyqh{gYYv zEWIe(^PkH#_L)4=WXFh3PxI)wVD|O>V}366Pv<5*;6IZ?n(PQT$I+|m9r*8Kt+)H> z$FuN%e84`FLz?Vx`Nn^S-`=km9D-T<@0r^7OzpC9_3VIsF4x#+@<@~2hL1GUP5;1u zpJ@FjYTqY%o&4d8?eXVwjU5Y4wqs3~>*x<(Sb8Yd?7t;n_&5}6<~Qb6u_pc0uwK`z zcvBSkeanjR{;>S7T57YlM-qx(Q-7365vC*QuCU=B(H)=E>UiY#iGYn`o3E^Fap6*4 z`aicX1*dl*VoJwL;4%lALF&qzEY*W%*L0?OZ|5HoUa+*hKn@!tLj_P ztLkrXMt)lG`~Bx}uj;e1#j#d?G;g=h`5L85YW{y2=^Z=c7@v$SJfmWktUr|tH+T+_aF{H}UTU(@a(PIdcq z9GG1~FYJyuzfc~>#Gl3E@j5Dx+Lv)4oyMW#HtiVFO@D20M)VmPaeO%U`_JNjYp0bx zzOO7^K00vyxm;tH<23CveMpl(hB#)&5WnBPOO?Bvr5*NZ<)wbqe6OhWz)Sr)!tbuPLi}RuCSNBh{<^$9J`Lyo)?c}OPtC5T-EQY#eA;@+;yWw*x=V3C zJ}^FAuF>x}P5+rbq^X~VIA+HXzdt^osob-<@L|`Hm6!VM{&T)YzvDFR8`9052FL6| zn*6cg^xNm_K5gG8RpymHd?D>!>bKkHe6HVcEX{U(V)~kPuW=eX9AD{4HS<~gBgJI(u(Ap574Ewu_SFaBNrFDm)Wa4pS#EG9o4NjJR!Ua~2d>Fl%yWsTw zQ>x&V*>NSKWuv!z@%c~BKh9rsdmXRw!;oIZ9N=ZY4g4^~S=y6u7CZa?d8GOusl1hK zo!iov^62`K_81P*WRJ@?{u$EEz7}Uhw{|r6)}Gb6-EsQ<@pY`?uF6y4V@0pq{&D`M zT_-;mtFAx!d5AwNf8(Ev5xpvZ?fb{q$11-n&oa+$J%8(6UyjrG=L6Hz*uSP{y=X=9 z&->$xUlyFce?F|j_u;H*TXuS0*T?67J^wgv;~&@4_-9Brds>_oJ=<3re;&r~`{yIo zFY!j-Kcc-X&o|Yc%UNnXZRrQ* zACczI)Go(s{4=DR-o`(dBl^rbsXfQ(b)3F`u7>*)qUTEWT`A5|-kzVGziF4tH}((r zHB4`dGosIh59mq$8R@;M%3u5bd93xT=ex7WJ+{>Olzw3RIBwG}$7}2#(oJuJQ#4LL z`Z=<-qt)y9eg8bs`X?%HW!r~n=}UQg{1^_>)Q>LT*g2%v!p90{M4y$v!MFAx&GtA> z-#<^a{;A@&W!pz-=}!-gALnoUV|YjJ%b0x)&IsSz(fDUbcl^G8e1Am!vnngy)+rx5 z-}d-%oTgna-`GE*n_i@;-|q{5!Rh=r*s!=l{L?yW=$eaXpQHhIF&9 z#Tn4eKBUQ?hw=OV@%YWZ>%K*J|Dfj|$7$^R#PAyb4C(3z;HCDyKfblY(yjd_ z`|tHXD*sx3gg0#Cd$9$_)_#-8Mj4t7m;N|=NEm8|wQ?dFj)_0lAJcOEF8>poKn=&z z>^H}o8v3HaED*}16({qz?GqfE5A1&I`zp_K{U6i&rL+P64PtQH45yt}9IxHKS@0c$ z0L>1hiGCQL*kwOV`j60XRQ@bwmelNVy4R2TPvwoTHg>&n++=US&-7XGn)V&$@3-%f z+Vx0rEw%lPrGC48&eych@Q|in?tc4x-$MB=EUkqP-yfN`+vhk<`y8)n zpW{xs-9vt}XNcc#pYIpU(jMQpP`u@RXi+@>%_uFUd->0**$5U*&Rf)ZcDL<3G1|?zhj@ix%H~toTOv^g#QZuhH*#P5+Jf&5kyX9q}*t z{q{Z6{&}YDvg^p{UcWuR1pefA!$X?rBYv|3>52UP_W8O`+qb+AU-($+x7+7@O*=ku z+-&dh{JQS?!qNuE@ei#x-}QZZT5oQ@Pk+YmGpT*nD-*kK`8c|~`1y?gANOAq22c&( z((H#~_)|kCX*tX?DNRcKlktb~7~Ti7>(}l}Ra{&{zM z`u;0b`*qg#zRBgbeqG-7pYzw;j-vXI=5bb4|Chu+>bJx8^!@ip?R})}v9hgyt=!fx zrff4)vv|E<>9D-* zzsJ>aQo9|$@yCe2jP{rA3IDJ?eg8dC{ZHn?hwblJxvgK9xBch*&G>Nq#(!TnzqJo( z>d(XW^!@j=7CxTNnpR0||7ujf@NfIi|hvPN=IF;Y*Lz?`3U-*kXeg8ev{(h$Z8I^5bTGwxnKj&}! z=lUA|{i*n^eMnP3EcW#M=lgQ%zj0ajp}r`5eB%7u{&T#>E|+)z8NQ{t9czBIqk5X! zegFK2_8Z^z`&6{wxcz;qvvX>r`o&r~NxS{i%9dJ1TOQG;r613EAM$UA6WUC#rMX{< z;ZF_S^f1O!_{-s^j-VJ8Pp7zlq>VNoT0COquy4hTEBf;+@BBs&@AKsTY2=!D*m1r# z`V6KXjPsD z^m>3Eo)`D}$MrP*GkouB(Uk_srY|-{(k>l zRcZOvtZ7>w(T#8TebDXxxpMjJZ?~iApZnq;K416~*|W5_-#?GluE%rXV^to}Ys;_q zWg(~cQG4^7>uIhZx1;HwKR13{#(W(8eb&Wa>H1&V+wY$zD)(eAe5}eNdL8g9J-$!d z>mS$C^v{!7ahv}6OXXjlkM#S;o;y5MzdWttA1{yS#%Jk@Z+m_-y{qRPhST(q+tu`E zurrOzuOENEe?C_K+WwlAKUP0^s(h>Rh<;%G<9Zr@JATtYBYv|RY3iR5|Ec(29e=-n zo~eJIX@A%}Z)Hy#K9?KO5A;uvPkwcMP5*q^{MK%ye`()$iXqz3{Q{ zX}J#Q2l~hLHvVw@rhoqY`6XUhe*Zo9^I`k9o;Q69&y4;K-=lt)?^B!X`1{o752+8; zejA;W^lPzHi=G(W(z4vo9+q>kJt9`18Lp+-FOEMobdr|CERxcs)RuolS9T=F;W$6B z%kv)bk5t%vZE>CNt3S{6PJd(ck$zQ(Uhx}$oi&G09(4YJ^#Bu(if{r3M3p$ecpeLzu(uJe_XEVN5^m4wdT+IU`lG& z@i^QJ{GPw38K)|}_Wkpb)_*h$pQlE*w5gB3-`Dex<2L?r{Kh{g^Dp+K_MVEf#2bD8 z6g@6gpQlwSE-hWvZ(m;`&7aAB$8Y@OdK!NY`4@XKeihBY%k+c%eg9mw`?ZR5RSO@U z&RVwg!2IlTjh$B}-}vWL{`=pz?fd6(Eqttgzt8BF&dj#_p3VXPIBw&gGTNs!Jq`ck zMQ<7pL;9&W&foXX6Rm$T7d|YteYjEmlLP*7xu(5_k2JOSWd6DE(c+lh@AH0jjGv!Y z(erd}Ql;Cz;JSW${&C#KKLIEC$MhV%|G3zja8A{`@b|~h$LfcVRiCFu*VNW2OZ~Qg z9Jle0%QxfaWd6n8dSW75=;X}R9dct7fIs0M>V+b_xS|Ig5H8DlAwN%K?gmmz%- zP2>M${`d)g@pSw9{qsomKhpMC z+4jw>+}0m1Z}*SmHvTrftNl8&v*C9;ntmA4PsJJWkLYvZ1NzhW8nt(^v)@11m*eAN z*0gGB<*6yxW6Rt9<9Zu^yB$sYPUfH8&g7?)_cg7(t(_zKNbf=Ze*gGBqvEd1awGTs zPSt~bMn2a3N}sp;$K{%KJ8siIC-a+q?~7BlJ*}N9diE2f(zrNmf4_fxpK}&F#^t>K z`QbtS?f!8+O}ib}{hIZ*?OyY1JIp@EQF`?>`EQ6b;vdmx#XnhZzkfbbJ-!cnWZB}; zvHW)bxLngeZb#F;llj$8z)Srw!m;)sJ&J#X^X~Td`{z>o<5JsmYPsmKmf!9l*VFWm z<1~Ifncv#;zBpAH2>q$wPPIqfL`lY(rRH+(_s><8`m0&flgm2)hCYkmtoZMVQ|{~ez`^$Rub(F>_hc@7+*dii-`wjT*VFjh?P&aZGQYLweQ_$g z<>>#ne5(D+^ND`{*gpSLZO>D+=l#pu^PA~C`uT#{)%2&^+4RGZek#t0e?*@PAJCuX z1^4UF{(k@1^8wpuvhv5O=iSTO{o}Zey{@-u->Ll89;C@nr{WCxtMmivGrsxlWc&O5 z^Gx+TQ(T+pt=!fhU*7H?$7$N*oXv-tI@mad!TgJ;dKab)&GpsSYEY1B~3~y@ah7W)x zi`MS=hvx;%xS~JL^3HGcH(GCL zOMgBZ9}RAEzjQtS?Vg9_aerTa@P2*%7LH$!k5Z*S$}FkrwX&xTpUaKtiZ_$^7?)Q`MfD?J++h{hHX{A0LmjeUH>%R<`GEEqzrU$U9$y>-6w`T)w{) zKFkiJ$-ge&jE|G~&93*wscvt!b40%twyw-mlDlSd8OjKU5ZjTz`CgsP!Mt z!nZ0rU7tHl4PVvr+|aFTY1Mi!Z;ubRqw%lX>HVs>hJP%-+3~(OBfTqn_FpM^{GHt1 zd$+$oKK!|*>RXiubXzyB_-oXpjO@F(5)2}DIIW!{`mFp%>K(TCzHr>m{`h#T^^aBGsyw2boTV1W7C9Vm z)^cs=2gZln(fB>!rhYw{-|TAo>0}&hS8L~pKG0iq-}va?CmZ0ryZ!y~@kHD4MD?x8 zBf801+VI(P>?aLXZYF5mR)$^2&5`{LBX2lS`$da^wuoLTW(J4f^Zj`au9 zft~&F@l^4is=ifuL^nB02YmKk!3y`l{NenK-`&o}Un73g|E0axVC`@19MR2BN7_GZ z?|tF8o&E8F=k&g80g=6h%?HtkXOYeK*SU*_${{hA`iu(Wn literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/trunc.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/trunc.bin new file mode 100644 index 0000000000000000000000000000000000000000..ba81e2ada42743b52200c58f8c0adc970431fe60 GIT binary patch literal 14696 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/af_arithmetic.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/af_arithmetic.bin new file mode 100644 index 0000000000000000000000000000000000000000..21d3d702ae9fe8896bf63b37dcbc766688dff9b1 GIT binary patch literal 30376 zcmZ{t4cM0R-N*0BTM3mROtD9p%1{k8R7_>)_7=9vOXa1)3R5y=v)V>IHepLP)ngsl>{O78=L3NkaU0io<-4%6LSN>b8hIMtHRq_Uv|5X3^to*b2vmGn{Ud+#Y5+o^hwuUP%bqvM7qPx)w*-u2U_e>h~1xBtU=%5O61b-3=P_YS&yQ1X=DWYXJw z%Gn!UX!Y85&Qtzfliq_Z4_iO}{{G2R{#}#a_Hml;2>|D=)LYPk+LB%14^?%Ae(p?#WX=(xlgGMD+!_=wFRdiw-WbWxNGv14>RdCE&qq(-se2!-!|!0HfCKLU%f-}lz-c#_x)og zRbKLAHglfxt4(?*Hom&@3f;bmp7N_qdeu*dwmaRBJmpuJ^yWQO{Xp9K9_J~)(xi87 z*$`ZlJmpuK^o}e~(B^+|p7Nn4y?<0UOKpZGPx(-jUUjeFv4=Lk%X!L&nDoli-f>X! zln*iKl^=8d`gb@_`CyaY%jE;SfAW+MHtGGmY*^R6&3VeNFzKCJUhwB7Px%!ly%w)j zf6!GMIZyfJCcVne#2XJ^QlC8Kmz(q|9}bm?%QtYI^2btMyVY6T7JmmvSdeyz;XJ@ugp7H@Ey~>NMvSTpgHO^ChiAk@z zH_>^~A<0u-_BJYyUqY{MpXwWF+Ir4Yez8ff90okwI(f=3Ht9WIIXddwXYxAEQ+|<2 z?2W;XLL2 zO?qR>hNnsLl=nC3Rkup_-7@ZF&Qspcq*tDXraL50c|Vh0_1SAWam?R2PkCRH-mnX* z2T0prqNn^@CcXA;t2?eElc)S!CcSdF*>>w%&QtzPlV0_x@r{RvCr|k|O?vSL+q{PJ zlwV-dtL|ObKQ$zI$}ceKmEEONH@?Vu%Fj3H-BsBOnZIIS@|2%%(yO)w!!KC>0_Q0| z&!ks2pX>W2Px*N!z4CUyeC^*jPkA4cUU_-G-zRy>`bwSM7Z2 z>gtoH{9Kb>sWrweU(I>S&oSwh!|*+NB~SS|CcSdlc=wW3oTvP3lU_N@Y1KV>%Fj0G zmEH3D7p~+yd_xy$Pl%H?AW?)G3O~i*`!x?lW*#mJmn{w^tP8Bo3(%BJmn{u^r}a3>&N#= zp7N7Sdgb)WUaOwsJmuX@dgXM$y}gsCyt_%S)Yom6KgoH@yP5Q6lmp+M$y46Vq<3kx z9_+Z}3C>gA)ui{OYMnK|Tk@25HR(kUv~UsUDL>Jq7d=qtO<4t;ef6b&9Jdt&^v`i%BnfpnLwndCEJR^r8o9nLOp4O?uG-O?-^=lpkl(iyo+X@{}KE z(u*Ew{5;N6eym9^dY~rBQ+}*TFZ!Udb2(4>F($p}ff^-G`7tKF=z&Jh;XLJEHR(kU zwCz!P$~&3#q6Zq0JmsBCdeyUyO9yTFJ?AO!XwoaEJKh_XJmnotdS$bF-KIx4Pk9HE zUa6C}4Nji&4ko=5$_rw{!CGtz+UsU>p7NtidZiB8zhCl{ zA7#=jhwszY%;G%dN1F8BEhm=xBv1K~CcWr^R?g%+RlU57aGr%G;atq6b>=5a%gxXVQxvsB`j^w=?NQ z4>adN&Qspjq!&FC-t+`Ik+4(F3(f zp7Jl7^r8ov`T*xCKg^^TJy5IUDL>4l7d_BDzu`RPhnn=F2ihlj$`3W^MGrLbe$G>V zh)FMcpk~QaeuzmgdZ6*Y<~-$XOnRl>UEMf&%G;RqR#um-^&R^w&QpG{NpC{g&^1h+ z@`Fu!Wm(XW(bG6j`G1-8$}*M@Kb=ZX`Ik(3W!c535y?~jC6nIha=^7^3g;<5$fOrL z!o!lM{2-Iw$7Mayru#Tg`GF?AN6H7s;N&Sk(4-eV(1u@fp7Pcvz371kBu{y3lV0>d z>wdv`%3GQAq6g}mJmsxSdeH-|xtH^lA7Ijp9_ZZUDL=rZ7d_C*$(*PBizdD3fzC*t z@-Le7q6b=b59cZ0-=r5kP>dU6ZGLKa*bcKns4(dCK=S z=|vCJIeE(WHR(kUH0NiWr@W;}FM6O3$y46aq!&HV%)2>H`93DS=z-cLPx(G3z371+ zxQp|Y?`_hH9;i+7l<#fQiymmoot&q9FOyzbrgKuOrr;R8z)bB z3zJ@1p8UxVe!_Xmo165WC?_-;CQo^DlirPG12Xz{&QspZq!&HVr~ge)`5q>{=z&Hg zPx&4uz372Hn!tI=cQ@%p4>T-!%6B*EMGy4ec+OM4n@KNvpux#gzMDxedZ4#%<2>a} zO?uG-4M?8yrY61UfnL3p^OWyu(u*FbZ}ODyYSN1y=*1s%p7JIpz373?O`h^5CcWr^ zR{V(bls7i%MGtgF@{~6==|vCp%nvzF`7S2C=z)49Px&q;z371!kK;V$JDc>P2kM$U z1NJT-oT{y!?MBJJ9)|*nDkCAFQhxhaGvrylV0>d&61})P}l7L zT&q?M<9f6`YIt>H^my{dez4y&Lk_F$>G9<4_GYJvFVyc|bDkbgUPbDE(#YLvdU`y0 z`&WL-nNyn9^z?Z0rp~Ya2D{eu^my{VJabCLY*N$Hb`Fn_0-o*qx$S=DF#%^hocdOUeAmX}LyPmd?> z!s@tAJJg(~$CLL~^<~|^QB6;eC-2JYpJi;rnw}m{-bdB9-^>OzJw2YhQRNL*SJTtu z$*z_q_CX z`7oY`M?gLDECzRr;$1e1g|Ino8-h!U{ z4wK%~kx9?J3_bTbCO!8+^xPkr^xQkqb6;iBE2nS!^xc)7@>@-M`r01TJp7QY~J@=yYl#e&*4J{kUVY|~)KEb3n zt6XsRQSy{eFzLBx<~;Y)CO!As^xTJ=^xUJwac`SN9|7Fti zc{6&-?=O;7n$odZ3uk1*+ZT?IX_$1v%=SQcEa{31Q&lTCVFH$u~bC^t=w0p4YFM^t|qsp4ZEo^t{fNp4aD^^t`T@p4S7L^t_Ikp4T6n^t^7Fp4U5@ z^t?`*p4V5K^r8=%bvQlcGfaA32To7gSG7d=qVBj_prok=fxpk>KZ{yUSNufyOxdYm%pYmPs#qpngYjp7Plyy|};2y5uRJZPJS#XyDPDr~F}) zUi3g4lBfJ(lV0>dgFA4Z@<&X1zV3>i@<&X1aX+A89qB3my-6>6pe@N${(F;N^gtsz zah~!=O?uG-ZA+f=M@@RZPLK1H&oSvm57g)wddlaT^r8nEn>^)nO?uG-H93~^l+QEi z9a=8n7@s`l^Gtfau9NeWKW5U49%$lm^prnl(u*FbWoLTI|6tOK9_XIrDgT2>&)4O0 zp7O^{deH+-?Ltra<0if6f!chHp7Qx7JzwWcPx*Y4p0BH>r+k4)&)0F&Q@+5Y=j+Dl zDPL&Piymn13G|dNH0ebT)cHhu$`_gRd>uYLU%zkCiyo+3S9;2yFzH1Pv?O`TpD^h~ z57e_8=P7^Eq!;VsmnTp8lP10BfqHl6JmpWB^r8n^l|1E7ne?Iu>T?q3DgUEMFYcGR zHhIebXwr-8Df*qvdCKGVb(Q;e(2E{uUGkJKHt9tVH1O-3r+kS?FM6O2$y2_>q}RI~ zFb_F}^OQer(u*EwQ}UEQZPJS#Xm}6KQ~oEDUi3g)lBfJnCcU_xX=G2%Q@+%sH?_P` zwk1#bQj=cvKx2Awp7KAN^r8o9bSgdN&zSV02O5_=<PeVp7P};J>Tbwp6`!k((`?_=zV@au2T5i^A~#21GPSbp7Li+ zdcJQMJ>}1u^n9N(ddiBaS~(|glX{+vlKdZ708^pyYAq!&HVtmG;Gt4S|oK zdZ4w*Q~o!TUi3iy&f`4gFPQYA2U?#z>NIQ~sh!FYaft@qBv9Uo`1O4>aTg zddkSd%NtoZB3r?wI;pjfku9d^OV12(u*Ewd-9aO zWYUWsXiQ(uQ~r08p6@$MPx;FxJ>Tb;p7NJXdeH+l=}%AjD<-|@fhHtR`70(p-#41` zl)q}y^L?u6`To`>z372jUPMp%I+I@XK$DZFe4R-zdZ5-9bDr|`CcU^Wa9Z+|uQ%!a zvK&|(atY@tf6b&9J0i37&b(3E7K(mvl{B@IFTu0h*Am=H6!=x8I z(7fa+f5W5~Jy4fHoTvOvlV0>di;}1OO_Scja-DGZOF2*ZTP8h!j{!a9Z<+L>2kLbh zJ>?rrdeH+dPoDA(CcWr^>M!R!d`(DF&%0D#eMGrJNdCEUD>Ah8cfdjAQJmnvm^r8ovmOSMjne?Iu zI`lfuQ@+Kd7d_C7{#2kLY^=PCc#q!&HV zyyPkW*rXSIP?r&$r~F?gy|~}|qU0(6mq{;rpzb3%Px&V%z373SPM-2lOnT7+^}2!c zl>ghL=kIl-=kJ3w>G^vk>G}I7O?uG-tsX^B`KKm5e@`Yo<=aep(F477BR%EYOnUwv zPGZjo*#EzE%)Im1@2h*@`#$>go#*ed zwV!1?tG?`$AUvsDDX4d4{*N?h0xM5F0 z+2t?v`=~nvJkp~+>h`)U`aArY`l#EAntNN*0=v{lEtl`kxvDw zBo*rUP<_;L`-^V2s*hTVpS|SI>Z7KMqbKB4i~6WNQAzX{`JVcyx%7$gFE*=>dXrT6 zwKM9Y-XK4i+@wD0b(vfvwWriay_)WRWk*PZ`l#jcZ+X66eboGPw%1*%Qy;bbe8udy z)JM&&C$QvTt@@~`@zE1D@TmHze@3m_ot{;rK5Dr=$rr2CM=hsMm|UqoYQB4(sPY5q zqn;}T{-#2G)bjZDF5jm%};-C>koISkD6{C^&nfy)JHANyRzqH^-;^? z=~?7aAGK6(?%UhcN6odLn>ngPebgb`{iWm=tB*QJ9{4Lo>Z2YcH~c4s>Z86(F1V&Z zebg2Y%2yw?HQoe*fBWdImmj9Tp^pBjbI;M=U`PKj4~W$Pj(&ptzyL@8JfD74e@A~Y z5BRD6j(#T>e`{YyKSwUW&(XK?fXmT$S=)E{<}lw6bADgLkZh}bj{X(v`W$^zKaRfK zzES-heRF>teRF>ueJTEPgB^YId^!5&`E>Lx<92>SZQ4U0JppRdp8VBEZQ7$zG+41V5e#XiNQ`ASD!|}T1`2_V*b2_DbGDCgTQoI|riRz=~^qC!yJX?L#5}(7b zxz$I##mZ;%)JI(^4`gJL`lxrx4LS9w`l$CxftDnzkNPzUyf+_HAGJK*dps%Xqc(YX zvHGY@o=#IAwaMd4)kkge{4(`XH(K+9t zhkmU-YBQh8QXjRMk3FkCYBQh9Rv)#Q53W=nwV6+@Q6IILkG`NjYBQhBRUfsPPvd+! zuP=Qe!xiV6M4$G_t&?h{Jbu&H;=xaCv$6l%+qt%G&2wFI&=LV+WBz8PdE3v z-en%&*8gf8?aXN&a3p5U<}=Kbn;!jS0qx8wPJglG#;`v!&#c+j`b*lGpU7&T(v!Wb zk$FMchiBK*&YbSY+LWHi)6Dl2jI7^HJ9F9^XiU zRkYI1ocq<>%!YTEceyX`xJEm3>W@k~I_K6i_m7P(?ngWG?NLd8ai{<3gms?V`HRXq zqOv2kjyYwQd^(hOF6YvKWuLx?HO+(r~16on$}&5oXQy!-?sYq$hqGvOK}}V zPM3A8w{_DI@&_%d>;&y6=K zBDN!^a=w=qUR{cues)O1o=Lw$PUTz}9(r;saw_M}f--jra;nev&fp6#A*XVVPVy`& zMo#5?vL^7-CgfDks=$(`ijY%%ewH2Zc_DIYN0Zu$R&7L1wc)ZTXkn21Qxz4|kQ{Tdy&+l5;;_RE< zV3&)}^X<)?$L6YaUZuw?*ZCB3oktdAgA`l z{lHMejW*BnQFAYad<>Y=W7&(=b`@Ip!O+Psjx#?GbfSmd_?uSE>Q#rZc z4nt1m4nBaKPQ&A7 zG;%5@kFznzsXlpJ9*dmH$>aD#$mzcGxIYd#m6LNqEOII*=ZXo)sXjS}OhiuQXIc=N+f5e=MHja0Obl*8Q&SXxRF@dt9%rU8)oHJ)Jr;It5vgTYq zo_>~d=^W;iNgtzZDswKXPtLJ!=9FO{r!4z8A5Znkx%bD+Df4Dh_LVsZ-FME(^O#dc z&Y`TF!^hLcx%v_2l&L9L=a~#X(Z!SFJ2Lp!-Hm>I=(t#n$p6JJ8mfMN4Ed8h!LJ`&i(KY)=j)Fm=VE$3 z&Ugd4EK6S`co@0NyZb*=ja=5dMut@(m-jT$=PQxl;@4?YR~|yn?Y4bh zW>CB9~>OgA?{5=jx0) zerY#yYniNg7jjvz`RmkjD1i361W%s^>T;6-FuPjE+x4o`((Preb zELY*T3Awyqt$pJ~+ttOvCY*oa)#VLOf&AeYxMJuB8DxB3;z-_Xz4`5U;M zzk%EN8@Qdnf!p~TxShX&+xZ)~oxg$G`5U;&!#>w*`d8u9+uHrD_Pbm^-`+G=TU?dP zW#?}>{x-MsH*hV+cxC^;yM+1+yeC<>e<*TU-<@+k5V`4> zh9Nio*xkrYzc(DY=_f;wn|^f!a?=lwL~i=+dyvcfqqD`K$SIHVxDbYXG~eKZ6YfQR zgge$98}36c?^g=j!ja2AgIE<4fn1i?GuA~Smv!33AB;iH!vc-7_am2O=&36oKyJqI zXyj(xk3nv7!dT=cS3HQ^P;F+~k~CIY9m&M|><)FkBco}~O(9CDM> zCL=ewZVGaf1E(T4x$$A-CTC7VZgS~# zVk>QtiY8{LKpADU3NscTCr@RkPuv8)AeW$?JQQ+E7))GHcmyY4 z?C+}m_AcU&3Z5QL{Kj{#0OG@K9f8E1D}EkDocgAI(#GHMnco~j+)}kIjJS1I?pWe` zLdwSx<1{A`-~Er>xID(+x%|ko7~(HRKL0!7-W_j0N}Rm!-WkO0kDW*)-kV>NMEuJ9 z$_2!SJl)R_cQ>qgj(GJF{X!e>d;e>}tBIY9;?@%f)|KWH&-*ZPEAi>LA9oVJuxkF%g`XmheLwRYar93&FA+a;skEK=cw*r#;`oJn zaTw>{hlkF3%`G=;ZYfwPO@G;B?5C--?+o+ul#*yKM_yRxWzV83UjEnQcjGRpQK+$Ib6RQ~x{@`x^Nn!;@Yo#%Y!i4_~=R*z>uME3dPW)tj(-GoRl^3gsFSPd@C0_6SzBP4Xa!C#O;spN_#E$p&e?siH zcvd}e<$_UWO=zlPfA44HYodD35dSJ*k0}W^HNez{CqZE3XYRU(%v=3^`%cwCgqsF|98uK!0 z42SD=tSQu(mr-L5@~APh$7u>RhSqEBj~eqOMvV<3MvbBHjeSsKLx@phIAO!1#)cB3 z#&FVxM~#_%P*bR}d&r~4?j=TzjUYyinLSZcsIk%HQDecxsId^@+{QU$h*4wV#4EzC zjwPN|-xNWN8k<0TzP-ono0>vTi6W00!-Y1^e`kXKZ-{-~+i&(zO`*o($fL#{C%&=2 z*X*a7LXAB^J~UwD9Aea1GI3q?-UY8R9f!M|4MhNXLgTt53W7_qjcN5$8<|~ z+r9M%>7MHP;kI-&Sqs0HZuBirr*s=KCft_TeNejYvMC3oO9|cmmUOkHj=j=_-j}&sy8M#!CDL^SPJ3OtgyMt6 z(p3!~_7~}f7iAYohh=4}bS;I`UzTpF@6iJ3&?+}ehw)^Sbhyv^9TosQ^uD04GY%Eh zxYE|g>`1ru$;rvKer50=$kXVuAa zU6368eNT7ty5Rl#_mv*!XY28KY&|}|t;hAU^|-#a9^Z$p$M^MG{dO%c+ehfR60p=!sLLL+^Z8I`r6R>ClVye?-|jjh;PC zI`sBf>97XGNr$x}UOKEP)1|}OlOP?|sF~7XEt@4B*1Xx$VQoy34r}N<>9E$ONQX6f zp>$ZgQ>DWi|EzSF1=6I$%&=5C%oZ8aVFr0#I?O6r(qX1~Q98^%Zs{;1WlM)yDn~lZ zTr<-0K^y&Y1J2DE&VLW6pD`zFuET?Ksu;|L{B-lbqQr(G#4i{0`4inBc72 zPhxtr=0r?x)_et1n>8=P#AeNRFs)g0-gTb++j-ve4bKr@^IY>4&+(UdZoa^C>X$rs ze$I2wS)N^(%B<(R^D~}9FpXKaS9*Ak!4ziQ-hc_rnv*bnS#ujEFKf>FnCBi$T-NP{ zAMhObKF?+E@*G*obM0ZCXO#1N@ok>d%XseE$8&Be&wiM!tmj)&!gDw#D(m*@VxD6$ zNm;iy74e+1jpvS+d3JB%S-r$_-)3Ji12|QYjSI4I75M{?jj?f!c?0)LwsAK$4cyOd z<9uwKKJ}Q_33tEV33&EF<}-~`xozAH8<*@e@YqHh7vmVXUxkeeat_?D$j0^AIOXzw zuKs@I9>jCUV4hQk^4v6x=U7Z9*7~Xr;5i&qiFJF)D4zW=jaawm2J_q%!gKl>zo}1_L96z7ungu*ZEaG|3VxIk%@SK;<^BqhM*6Xt@gXb%l j7_8e9vv@vSmTq*fq=K@ikxwSrbF2!bF8YPDKn5QIS>1VPSbGYCTE$iWLi5Y%k7 z!XONiBnXmP&1MjUiW1avfvr|E6v9LZYPIAXe*Dh8r}yj4`JSBvJkIlVK7VZIe9z98 zRRV!PwEWTv@&y|OIf5d=Cc&2F-^4GJijRWPe4 ztpF1-6P1d<>i)say6tt_Y15mT_jYeEg9|&uHp4dR0+vsf%D1@q7fB`A_W3#pYt_;+Vx1$AJz0f!$!y zU=ejHW~w3;*vJBQBhQUIM_n?rP^p2KcYyQrnEoLRZH9L$ZGo7N4i zW(GHFo~e0;Ha(enKH~|dKZ~7yvwkyme$4zf`++t7hFznkQA3@CnM5N2+j|DPy-)9b znmQRX+0!zxu4(MLHg#>HE{s{&rZ6zmuh^N?CN*_2%wp6rVEt3r^>6IoNS%_Ia-$OL z*d%txo;vmvb&1RppGpL?p2p6aZ_TGJjagcL8kqeQcJ@4b9(6g)a`JM(CMU3)d~)(h z>NLzWPinwsf5C1xcQ%*0B4$OoMPROz*tv3CIn?c7wj*Z;n2?z;M+jEsz|E>Bs-B=t zcV_NSxP$3_#!i>5%cjnUnNPM4Si?`)HDonpQ72|5&Ju&Q*s*Kb(6WKLAZ9@ug1|a{ z#I7T=Ba^xiW+9m&V8$P?GiDewsEcA2l@SHjYs0Sh@!rR&Q!rCJt^hmoJ$6UZkEBzV zz$_s>0nBm&J4>1+jk;83scETTwsGuikJ%ohE{j>#V_9GmW7tispIA?wnwfgN8tm+M z*qu#1n@U{)vx3wDFsBte=cCR?soTzM`=i^zmX2e$l(Kx$JrT2tlnO8rGf|2Nto~cv ztWT~_rcG~V-pSrz1`BqEM+}cp7sxE|kwCEKZ?J1lYEGg~%1oLh1#ABryY|HPMC#A<29`1RVx(H?w4@ZERN3b)mGq0mAo>~05c(B2*up3MmOrTE1OqHMl8y&`O z^r6v*s7q#+{7^F3_%ZCp9~^&>x(sF+4`zTlj$-FfIaJi;Gs{=ygG~=%H~ql$1Jr4m zX&=ynEgZpa;r@mDsViYta(@Zf;$iF-m5WO1%9)ib%fZ~3xhdViY7gON?R~ZP(WWOe z&-*;V^n=*x@73Q+oj)`Gd;P&0zr?Ol(WszK!c3x&fVB-^*LF|aJ=DpV$?lPXb@yY} zeRucW)P*q%yE_cb^aXaNcvC!evCLxQW5N3SuOc|#H8}7w!_^#o*s7qv) zcvm8r^>gg3vDR4X(wL>irh(ZHVrP%B$55BcEH@?>Y|@O~oSi>jSHAFN-P$y<4ju3;j8nJ7=z4dnLf|v!}9t76;F?OBdo#E7lFbfF} z0W*GtoiWT9MqMSeUKmf2d_ zS};R9c7_`bH&PeKEbzuaus!>*+Y`Jem^vvlX|NQm{XOj3gW7|rlQWYC$-#Qsuegqb8z0@k)0yS9L~0P1ASWC1d;?gs3-ujsylx^QOU zSA>I^-o(!2Z}O)umRYQSEZD#s*bVp%_)({1ru0*S4I8iXMixU7iGHeH}Zi zuho~jbY|(k>0tKPu(SKveW=T2mg|!XHl@dI>awZJsM9dhT&4k=dlkF6wR3B!D`r-_ zwiwK{3pZy{K<4mYbWt-h2tJ(zi1>H(&E1v{OW&Wk!JEObN zow{gd(eBY;eYM#2UD9_6bqZ#ROB7&3HP{VZJajR2>zJ*(cpaGKMeHmhi-@}Q%+`z6 zgW0OFvt4Anh`MZM*%xJlovOm_)P<)mq)yFDeW4m`<^}9#+-BUUD`ZyaRtV;-#Ll_e zxth9CW~Hl3!34|%s|8?76}TxVU%G%ckFKzzVEPrN2ivg1Hh=}KupqGc|M0WS3+XHe zSJ*+YsuflRmbAi>zyelS0NClB{4A$e(OJ4zSU1?V6}AmbvBDH!YgX7AuoLC{EGGnX zmX;OP0=9XDZ3c^2VG&@fR@f>q0k`FQYdVWSz|Xn-Zu(ECK()vm`M~VphehirGPC z2bs+?n`ahu0iGqO0?)F6*#>5MW_o5vnH^=e#B7O~U^SjaP${US_fjdd(#ldWCo^ZI z6Rgk;Hw#}Ve1SG+n9aN}1E#(ZJ9U-1in>$GPF0-(%f1M^?CR`l>TJwx)i$v8BJ9?` zxc)`zEX*t~TENy_jNQ7Lbv4utF&nBG0#jUqouXDzOI;tczS=&pXm{+QUy6Q-IwLdV zOGdCz59~tgLhGpOWY$^N2^PEtyWslZdg@x4wbr+Si9N9szbt;4y4}onzq}jF*9$w} zSA1WgPRC65iVn=nEF`IjJ4oq_yb{f4#Pu&!=Dg6{!t`By(ujRf*ot>HeH9J_kFLvp#r@u~}m6`Q* zD_GLy*d-Z~4Ac!X8#WAsDgCfhzM*`Bx&dYbZw!FN`ePUSX6&2PnV6a0G=YU*fn9h* zcms9a%(@%8!DIp0$#%)Ruh>2mDu?=`ZrRiXQpq| zgLz$romZ1r6Lq!BYMW}omcMln{P!8J|9`G)`5TG1soTkH=i58M7MU%+y$H7TYTR6Y z%&M6-7nm(HFMw&U!A`qJyN9|n%+BmN1C}qrF8`hUcc^nPbG+jK%e)r5%$Cd+>c*Lk zw~T|OT!&psYf3A1qs&HIN5NE5>{Rcn-lgskvqSG50*k*MyZF8Fd#N)sGw(HnMc#m2 zWLsn#bv?{_+Iqm`LD zCz+F(v(pJyAjhuYgMtsJn_)Kd!3>!C7VOkr>MrUgm`!v|fMwr`U3PbNH+42=ZqU9_o6T_4f3FMTcP*{ZaHs z)ESu>KQe-agku--amdHibu#PxxDzbscI<+TK}PCYnY9{Q!Nd{Ri9Zp4LR|y1hEE#6 zd?T^*{nYnU>U7L>pX$Ke@4(L8NqR(h^j@jI2b6}b~vD26}X6h!HO`0dca$~T|J(zotIy*D_K|5GlEOu$1r+rSH zm6`Q(D_G)P*d_KR_EI;@Y`AwAOc{rrvQODZT|cw_zJ9RSc!+@pS$BUonCu?xWCOAR>e`sK4YYwt6xd0=lzd5DBeTXY8^QeV#m;}we~>yo zGyR|*%=13%JP&yuqOO)%?V(z*<)>5dp6IaKVd~16l^-q#TV%F)coD4Re%vfMQgVbg z7nm&^Spd^MfSquS#>def{BWAFOhp~$ojToh_ zhgr{P512d=JNei0uc>Qi*8X)nm^2AH={M4EsB31{{7o}h;3L=tS^_Q98JHO?1~Bhr z?7YAA{+7CWX7%6JgNahG6CD>Fr>=ro#qkQTC1y*SC5`&kF({seaJ4tEE2Rm`d!Rbav#?1U$UC#l=PY{$tRU@m5^lP<8LT-+@BrRW#h zoMkrq%Pg4YN$fNenhEMAnN3big5~64mvbuT6m@oH_EUDSw0!K+PN$uw&dSVs+6tEV z6n2S|iIdbFV|Hxv7?^S+cFHN`6m|W~`ltHAV$|5h{2KEsbtYz}Urk_Po3IO;4x6T~ zi&@un7ntm6>||$TXQlHVl1QP;?<@wY}Wzs=bBo%K6Qot~NgtRBqs z8SFe~JZGq@VOBF!1GfBMOn6Up&g~p^<;=>@m4huZTRgW2R*OJ+-EX>*?0{OmlK z_F3$-bJ{uTrkPF8O@rkXV3+rM-tW{om^prTfMpb7moc9)Pu&=^vH3Bu6c5#2k{YjmfnfXsMSj6+#MK~jz)a_@s-?<-5 zUV@$cFZo~8?PIp@uYF+Bt=LKbmi|p$GqdKuo52FMVHe;Ea8YMqW^ft6ytiZL{g3xQ l)YUPo`=<^}REnMGyy!f270fEmSAZ=sTROjVe)*##_&;l;cxeCt literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f16_conversion.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f16_conversion.bin new file mode 100644 index 0000000000000000000000000000000000000000..5b386b070434a14f96c724bbf5d0bc939e85cfde GIT binary patch literal 74312 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 A?*IS* literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f32_conversion.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/f32_conversion.bin new file mode 100644 index 0000000000000000000000000000000000000000..bdcc0c72988e6a5d01923ddcc39da26aa8172951 GIT binary patch literal 105744 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_arithmetic.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_arithmetic.bin new file mode 100644 index 0000000000000000000000000000000000000000..4753b020c9651ed7e5339214487cf446a4574242 GIT binary patch literal 1648 zcmY+_4NTN^7{KxW5u`v#5^7DuyfmkXLMP?qWlN>PG2#;1&WfAdNQgoLafJd3VH07f zVb=>Zuw+Z%#m8d=5$on&cD;@j5$dSd^*I$PG>C}AJzd|cMVDf;@2`wQyPdijw%6?#_qX_TG&nm;=%6GTmhXvNRFr&h? z8Qt!ba*T~>D#X&4^0#C0zREZ8{EE-s#(AC3y@B2NK07d~^42Cy8O*D|=AfzqEcj|- zC+>XOv=Nth_E+I4%i28L7M59!CB4pE%sv~x8}}~g$ieHLxOXtv()B9(2d&wQe+@Rj zf^s}3u5uJ*;^a*y-p89e9(x(DeqgD^kPMFlvjV^T2%W>L*J1HdYXg=pbERQekN+pw z7cu$*zHaVs#Oi*t4WI4m{uEo|mOhV1n);eCI%VM+?DdYd;G$5!WZdkCZo~50!-?1t z;cUmJdNLDmPr{TA%xNErM;}*xCr()HD=;7}sS8INTH~x#jzN(Qq_;tyi zix|K4wTE!_xv1aKJOB6tICIPJ0A4B!48hN{PYz;oO=J-EH@Zjg5nD_E?hEf7!?e?3 zet276Xfk+dAOG{t{?6}7FZy%oMc*gA=q$bHEWPL~z342x=q$bHEWOB|)Lte~deK>W z(OG)&VK2ShLh0o$lwSTp>BSeNmvNL{^c>QQo=bYUo4xe%H%c#ZDDCAYN-zE>y^Nyt zqR&No(dQ(+1hSW2hEaNv18XlgPmm4 zsjGVd`!C{_o<-?p5lSy-@QinC35JLIeUF8XXuY@FYY*!^mR{r^ti2q=-3e2ch4QM@M2Kl5 zTF}7qw!{t@3mZuroz9dKd^w$ES5j8K2L@CS(C_=J*0bGx_WR%6v;Cj@e|-$Y2$WZv z@v4z!OuVM^^5)4pPdQXq#`@J|X@z)a-rCLhTjkD8_ zWBzAj+pyv(pY^!Vy|)TaMy$@oQcFfP7I|uOF!NmOcC4Axo{cx%(eL1dh|YBw5VG=J z9O~Qu3d;6sQMQ+XcWgMZ8-L%r=q0@VUPK*EN_VH>+MrKAz?}n6zko$YZH-vE#F>ni zo`8?g6E^f5zGn71@NKWzjw?F5KE?ylkj9i`e(^7OarW_haQdc!Yj|mM&}2N2+1-aLYQjU%>u?RC*>06IOvax1 zo?%>b+TxGW!8rbN{qKM4KKg;l82k5o(u=H^4CzIGC%xz_z342x=q$bHEWPL~z342x z$St*(F_d0(mR@w0UVK@XUPe)RxecY4zfgMdL+ND%r5D|Y^rHKcUT$YydifKj7ul5d z@&`&U0Vur;q4c89MS9WaB)tT&F1-w(^dcM9UT&fEqR&-&(dR6^OkiDlxrx%tB$QsR zqx3QbrI)KHy-Y*tGk zj@hf{sM>4RbCuB9HHY<<=*V*@z05=D^@^=k({&W6XC$80HIqV)0vN-tla^b(8GOFLd_7+H?fQ~VC1^b(KKODoQp zIMs$1Z(MPr^s)-2mwkAsrQVLq5>g%bYi?jN-d#1=h|)_cN-y;odVcZC*gO09E|gv} qQF^Jt=FILKOsom7#%~?2e0<1mt-!|l9B7k~eA-ful0h-bRq{97#+;@A literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_conversion.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/i32_conversion.bin new file mode 100644 index 0000000000000000000000000000000000000000..74c5d000e3f631e5b708c46662a4e8fef511a010 GIT binary patch literal 6448 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 Pgs#chp8fwX=#rCvdo9sF literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/u32_conversion.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unary/u32_conversion.bin new file mode 100644 index 0000000000000000000000000000000000000000..609caf94fe68795c4a18802aa7e15e7bbd23c89e GIT binary patch literal 6448 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack2x16float.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/unpack2x16float.bin new file mode 100644 index 0000000000000000000000000000000000000000..7f06cb0df6b31c5638117b2f83a3e6a3f245a5c9 GIT binary patch literal 4832 zcmeI#|7%rs9LMq3=H0Y3`Zg=D+`+wNQ-{t#+X89QdUWw}Y)M2g^W z!?c1Rf^u?;lVL6^2uyRkcY2zel9YY@nzf1vJ#=jC$u z;KS#B?&qBQSvi1<*dXG#9bH(9KJ=m=1AOl`2E@#B1)s}Uc~seqdD}c)_*%TUfA@a; z?|x|M0^K|Ptzboes#eB-pk{;a-4C0=iauW_e)aIQ?)|xAU`0Q8hxn&P-Yrw-AKrQh ztmyN`f3;>$x$51f6xg5MudbKzdtW^{ck}g-=VvsiFyp<48X?h_t@>o4>YYLxnDNNd zN->;x>)Gp7AMO|fv*X{@1dq{wKJ>(ms`nbRV0Qi=Hz8p3moI$1TJ_F&Bbf2wie^ak z+@6b7kHsxucKkv!0!Dw?_dDXcPfr5rXutI*;WGMDwcYi)&+_ltq#3_3uLTnQr&q0S zR=tyN05jfwy9E;cug|^Krh4zo5isMu6)q(Dm9JcRr|N@a{C8?ODlkG7$}=$~Ho<~^!+&T;>ov-`)ZZHGj^`|xy^ z>I(xQm>EC#tsN5m^pQ>LR3Cg1f*BtkPeGy|SW~k>^?pqX%=%p&2pRniFI+pIdhfwe zFys9vmq4PQwYv3j-TVBEe!KBbPbVb$s$3?mdOywkPdd7v+qD&c_uiUkR3ENC2xjNs zF@liMf6)5#^Qw0e{C*Sm`z<6#A<;k5{nL=@{j*%3v(fq_vj`czyXfYfs>e27uiKjJ z`gG*rGy2r#?R!-3&*=m+9?QpIis7-fjeAw^_VM?t&(6o|J_w29^Y)ojJ#xH%=Is45 zT3hkScOE{j`fxVabGBVi@1yr2(bxU*?MdBN9z|Gr)Xx9>I3UH)bux2W^@XW%FuOkS z3HXeDWZBj!)jPcYnDK>;laT1!?;D<0z1PG2)?@b@_8kGcgxBXEXQ^Iumip_NDlQi= z$CQUUruj>BjYqG=m(Entnv~8|r85<;3;939T&JZoRq0H1;eIHcsXFBMqI9N;?hpUb cGu5V`|oahe)rvXkA3#t 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 { buffer.data[id.x] = id.x + ${kOffset}u; } - `, + ` }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const kNumElements = 64; const kBufferSize = kNumElements * 4; const buffer = device.createBuffer({ size: kBufferSize, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); const resultBuffer = device.createBuffer({ size: kBufferSize, - usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST }); const bindGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer } }], + entries: [{ binding: 0, resource: { buffer } }] }); const encoder = device.createCommandEncoder(); @@ -79,7 +81,7 @@ async function testAdapter(adapter) { device.queue.submit([encoder.finish()]); - const expected = new Uint32Array([...iterRange(kNumElements, x => x + kOffset)]); + const expected = new Uint32Array([...iterRange(kNumElements, (x) => x + kOffset)]); await resultBuffer.mapAsync(GPUMapMode.READ); const actual = new Uint32Array(resultBuffer.getMappedRange()); @@ -91,32 +93,32 @@ async function testAdapter(adapter) { device.destroy(); } -g.test('requestAdapter') - .desc(`request adapter with all possible options and check for basic functionality`) - .params(u => - u - .combine('powerPreference', powerPreferenceModes) - .combine('forceFallbackAdapter', forceFallbackOptions) - ) - .fn(async t => { - const { powerPreference, forceFallbackAdapter } = t.params; - const adapter = await getGPU(t.rec).requestAdapter({ - ...(powerPreference !== undefined && { powerPreference }), - ...(forceFallbackAdapter !== undefined && { forceFallbackAdapter }), - }); - - // failing to create an adapter when forceFallbackAdapter is true is ok. - if (forceFallbackAdapter && !adapter) { - t.skip('No adapter available'); - return; - } - - await testAdapter(adapter); +g.test('requestAdapter'). +desc(`request adapter with all possible options and check for basic functionality`). +params((u) => +u. +combine('powerPreference', powerPreferenceModes). +combine('forceFallbackAdapter', forceFallbackOptions) +). +fn(async (t) => { + const { powerPreference, forceFallbackAdapter } = t.params; + const adapter = await getGPU(t.rec).requestAdapter({ + ...(powerPreference !== undefined && { powerPreference }), + ...(forceFallbackAdapter !== undefined && { forceFallbackAdapter }) }); -g.test('requestAdapter_no_parameters') - .desc(`request adapter with no parameters`) - .fn(async t => { - const adapter = await getGPU(t.rec).requestAdapter(); - await testAdapter(adapter); - }); + // failing to create an adapter when forceFallbackAdapter is true is ok. + if (forceFallbackAdapter && !adapter) { + t.skip('No adapter available'); + return; + } + + await testAdapter(adapter); +}); + +g.test('requestAdapter_no_parameters'). +desc(`request adapter with no parameters`). +fn(async (t) => { + const adapter = await getGPU(t.rec).requestAdapter(); + await testAdapter(adapter); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestAdapterInfo.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestAdapterInfo.spec.js index c00a6817626..170f5c53855 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestAdapterInfo.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestAdapterInfo.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests various ways of calling GPUAdapter.requestAdapterInfo. TODO: - Find a way to perform tests with and without user activation -`; -import { Fixture } from '../../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { getGPU } from '../../../../common/util/navigator_gpu.js'; import { assert } from '../../../../common/util/util.js'; @@ -15,41 +14,41 @@ export const g = makeTestGroup(Fixture); const normalizedIdentifierRegex = /^$|^[a-z0-9]+(-[a-z0-9]+)*$/; -g.test('adapter_info') - .desc( - ` +g.test('adapter_info'). +desc( + ` Test that calling requestAdapterInfo with no arguments: - Returns a GPUAdapterInfo structure - Every member in the structure except description is properly formatted` - ) - .fn(async t => { - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); +). +fn(async (t) => { + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - const adapterInfo = await adapter.requestAdapterInfo(); + const adapterInfo = await adapter.requestAdapterInfo(); - t.expect( - normalizedIdentifierRegex.test(adapterInfo.vendor), - `adapterInfo.vendor should be a normalized identifier. But it's '${adapterInfo.vendor}'` - ); + t.expect( + normalizedIdentifierRegex.test(adapterInfo.vendor), + `adapterInfo.vendor should be a normalized identifier. But it's '${adapterInfo.vendor}'` + ); - t.expect( - normalizedIdentifierRegex.test(adapterInfo.architecture), - `adapterInfo.architecture should be a normalized identifier. But it's '${adapterInfo.architecture}'` - ); + t.expect( + normalizedIdentifierRegex.test(adapterInfo.architecture), + `adapterInfo.architecture should be a normalized identifier. But it's '${adapterInfo.architecture}'` + ); - t.expect( - normalizedIdentifierRegex.test(adapterInfo.device), - `adapterInfo.device should be a normalized identifier. But it's '${adapterInfo.device}'` - ); - }); + t.expect( + normalizedIdentifierRegex.test(adapterInfo.device), + `adapterInfo.device should be a normalized identifier. But it's '${adapterInfo.device}'` + ); +}); -g.test('adapter_info_with_hints') - .desc( - ` +g.test('adapter_info_with_hints'). +desc( + ` Test that calling requestAdapterInfo with hints: - Rejects without user activation - Succeed with user activation` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestDevice.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestDevice.spec.js index 73c5218507e..3d69c132c55 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestDevice.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/adapter/requestDevice.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test GPUAdapter.requestDevice. Note tests explicitly destroy created devices so that tests don't have to wait for GC to clean up potentially limited native resources. -`; -import { Fixture } from '../../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { getGPU } from '../../../../common/util/navigator_gpu.js'; import { assert, assertReject, raceWithRejectOnTimeout } from '../../../../common/util/util.js'; @@ -14,357 +13,423 @@ import { getDefaultLimitsForAdapter, kFeatureNames, kLimits, - kLimitClasses, -} from '../../../capability_info.js'; + kLimitClasses } from +'../../../capability_info.js'; import { clamp, isPowerOfTwo } from '../../../util/math.js'; export const g = makeTestGroup(Fixture); -g.test('default') - .desc( - ` +g.test('default'). +desc( + ` Test requesting the device with a variation of default parameters. - No features listed in default device - Default limits` - ) - .paramsSubcasesOnly(u => - u.combine('args', [[], [undefined], [{}], [{ requiredFeatures: [], requiredLimits: {} }]]) - ) - .fn(async t => { - const { args } = t.params; - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); - const device = await adapter.requestDevice(...args); - assert(device !== null); +). +paramsSubcasesOnly((u) => +u.combine('args', [ +[], +[undefined], +[{}], +[{ requiredFeatures: [], requiredLimits: {} }]] +) +). +fn(async (t) => { + const { args } = t.params; + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); + const device = await adapter.requestDevice(...args); + assert(device !== null); - // Default device should have no features. - t.expect(device.features.size === 0, 'Default device should not have any features'); - // All limits should be defaults. - const limitInfo = getDefaultLimitsForAdapter(adapter); - for (const limit of kLimits) { - t.expect( - device.limits[limit] === limitInfo[limit].default, - `Expected ${limit} == default: ${device.limits[limit]} != ${limitInfo[limit].default}` - ); - } + // Default device should have no features. + t.expect(device.features.size === 0, 'Default device should not have any features'); + // All limits should be defaults. + const limitInfo = getDefaultLimitsForAdapter(adapter); + for (const limit of kLimits) { + t.expect( + device.limits[limit] === limitInfo[limit].default, + `Expected ${limit} == default: ${device.limits[limit]} != ${limitInfo[limit].default}` + ); + } - device.destroy(); - }); + device.destroy(); +}); -g.test('invalid') - .desc( - ` +g.test('invalid'). +desc( + ` Test that requesting device on an invalid adapter resolves with lost device. - Induce invalid adapter via a device lost from a device.destroy() - Check the device is lost with reason 'destroyed' - Try creating another device on the now-stale adapter - Check that returns a device lost with 'unknown' ` - ) - .fn(async t => { - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); +). +fn(async (t) => { + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - { - // Request a device and destroy it immediately afterwards. - const device = await adapter.requestDevice(); - assert(device !== null); - device.destroy(); - const lostInfo = await device.lost; - t.expect(lostInfo.reason === 'destroyed'); - } - - // The adapter should now be invalid since a device was lost. Requesting another device should - // return an already lost device. - const kTimeoutMS = 1000; + { + // Request a device and destroy it immediately afterwards. const device = await adapter.requestDevice(); - const lost = await raceWithRejectOnTimeout(device.lost, kTimeoutMS, 'device was not lost'); - t.expect(lost.reason === 'unknown'); - }); + assert(device !== null); + device.destroy(); + const lostInfo = await device.lost; + t.expect(lostInfo.reason === 'destroyed'); + } -g.test('stale') - .desc( - ` + // The adapter should now be invalid since a device was lost. Requesting another device should + // return an already lost device. + const kTimeoutMS = 1000; + const device = await adapter.requestDevice(); + const lost = await raceWithRejectOnTimeout(device.lost, kTimeoutMS, 'device was not lost'); + t.expect(lost.reason === 'unknown'); +}); + +g.test('stale'). +desc( + ` Test that adapter.requestDevice() can successfully return a device once, and once only. - Tests that we can successfully resolve after serial and concurrent rejections. - Tests that consecutive valid attempts only succeeds the first time, returning lost device otherwise.` - ) - .paramsSubcasesOnly(u => - u - .combine('initialError', [undefined, 'TypeError', 'OperationError']) - .combine('awaitInitialError', [true, false]) - .combine('awaitSuccess', [true, false]) - .unless( - ({ initialError, awaitInitialError }) => initialError === undefined && awaitInitialError - ) - ) - .fn(async t => { - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); +). +paramsSubcasesOnly((u) => +u. +combine('initialError', [undefined, 'TypeError', 'OperationError']). +combine('awaitInitialError', [true, false]). +combine('awaitSuccess', [true, false]). +unless( + ({ initialError, awaitInitialError }) => initialError === undefined && awaitInitialError +) +). +fn(async (t) => { + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - const { initialError, awaitInitialError, awaitSuccess } = t.params; + const { initialError, awaitInitialError, awaitSuccess } = t.params; - switch (initialError) { - case undefined: - break; - case 'TypeError': - // Cause a type error by requesting with an unknown feature. - if (awaitInitialError) { - await assertReject(adapter.requestDevice({ requiredFeatures: ['unknown-feature'] })); - } else { - t.shouldReject( - 'TypeError', - adapter.requestDevice({ requiredFeatures: ['unknown-feature'] }) - ); - } - break; - case 'OperationError': - // Cause an operation error by requesting with an alignment limit that is not a power of 2. - if (awaitInitialError) { - await assertReject( - adapter.requestDevice({ requiredLimits: { minUniformBufferOffsetAlignment: 255 } }) - ); - } else { - t.shouldReject( - 'OperationError', - adapter.requestDevice({ requiredLimits: { minUniformBufferOffsetAlignment: 255 } }) - ); - } - break; - } + switch (initialError) { + case undefined: + break; + case 'TypeError': + // Cause a type error by requesting with an unknown feature. + if (awaitInitialError) { + await assertReject( + 'TypeError', + adapter.requestDevice({ requiredFeatures: ['unknown-feature'] }) + ); + } else { + t.shouldReject( + 'TypeError', + adapter.requestDevice({ requiredFeatures: ['unknown-feature'] }) + ); + } + break; + case 'OperationError': + // Cause an operation error by requesting with an alignment limit that is not a power of 2. + if (awaitInitialError) { + await assertReject( + 'OperationError', + adapter.requestDevice({ requiredLimits: { minUniformBufferOffsetAlignment: 255 } }) + ); + } else { + t.shouldReject( + 'OperationError', + adapter.requestDevice({ requiredLimits: { minUniformBufferOffsetAlignment: 255 } }) + ); + } + break; + } - let device = undefined; - const promise = adapter.requestDevice(); - if (awaitSuccess) { - device = await promise; - assert(device !== null); - } else { - t.shouldResolve( - (async () => { - const device = await promise; - device.destroy(); - })() - ); - } - - const kTimeoutMS = 1000; - const lostDevice = await adapter.requestDevice(); - const lost = await raceWithRejectOnTimeout( - lostDevice.lost, - kTimeoutMS, - 'adapter was not stale' + let device = undefined; + const promise = adapter.requestDevice(); + if (awaitSuccess) { + device = await promise; + assert(device !== null); + } else { + t.shouldResolve( + (async () => { + const device = await promise; + device.destroy(); + })() ); + } - t.expect(lost.reason === 'unknown'); + const kTimeoutMS = 1000; + const lostDevice = await adapter.requestDevice(); + const lost = await raceWithRejectOnTimeout( + lostDevice.lost, + kTimeoutMS, + 'adapter was not stale' + ); + t.expect(lost.reason === 'unknown'); - // Make sure to destroy the valid device after trying to get a second one. Otherwise, the second - // device may fail because the adapter is put into an invalid state from the destroy. - if (device) { - device.destroy(); - } - }); + // Make sure to destroy the valid device after trying to get a second one. Otherwise, the second + // device may fail because the adapter is put into an invalid state from the destroy. + if (device) { + device.destroy(); + } +}); -g.test('features,unknown') - .desc( - ` +g.test('features,unknown'). +desc( + ` Test requesting device with an unknown feature.` - ) - .fn(async t => { - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); +). +fn(async (t) => { + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - t.shouldReject('TypeError', adapter.requestDevice({ requiredFeatures: ['unknown-feature'] })); - }); + t.shouldReject( + 'TypeError', + adapter.requestDevice({ requiredFeatures: ['unknown-feature'] }) + ); +}); -g.test('features,known') - .desc( - ` +g.test('features,known'). +desc( + ` Test requesting device with all features. - Succeeds with device supporting feature if adapter supports the feature. - Rejects if the adapter does not support the feature.` - ) - .params(u => u.combine('feature', kFeatureNames)) - .fn(async t => { - const { feature } = t.params; +). +params((u) => u.combine('feature', kFeatureNames)). +fn(async (t) => { + const { feature } = t.params; - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - const promise = adapter.requestDevice({ requiredFeatures: [feature] }); - if (adapter.features.has(feature)) { - const device = await promise; - t.expect(device.features.has(feature), 'Device should include the required feature'); - } else { - t.shouldReject('TypeError', promise); - } - }); + const promise = adapter.requestDevice({ requiredFeatures: [feature] }); + if (adapter.features.has(feature)) { + const device = await promise; + t.expect(device.features.has(feature), 'Device should include the required feature'); + } else { + t.shouldReject('TypeError', promise); + } +}); -g.test('limits,unknown') - .desc( - ` +g.test('limits,unknown'). +desc( + ` Test that specifying limits that aren't part of the supported limit set causes requestDevice to reject.` - ) - .fn(async t => { - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); +). +fn(async (t) => { + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - const requiredLimits = { unknownLimitName: 9000 }; + const requiredLimits = { unknownLimitName: 9000 }; - t.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); - }); + t.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); +}); -g.test('limits,supported') - .desc( - ` +g.test('limits,supported'). +desc( + ` Test that each supported limit can be specified with valid values. - Tests each limit with the default values given by the spec - Tests each limit with the supported values given by the adapter` - ) - .params(u => - u.combine('limit', kLimits).beginSubcases().combine('limitValue', ['default', 'adapter']) - ) - .fn(async t => { - const { limit, limitValue } = t.params; +). +params((u) => +u.combine('limit', kLimits).beginSubcases().combine('limitValue', ['default', 'adapter']) +). +fn(async (t) => { + const { limit, limitValue } = t.params; - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - const limitInfo = getDefaultLimitsForAdapter(adapter); - let value = -1; - switch (limitValue) { - case 'default': - value = limitInfo[limit].default; - break; - case 'adapter': - value = adapter.limits[limit]; - break; - } + const limitInfo = getDefaultLimitsForAdapter(adapter); + let value = -1; + switch (limitValue) { + case 'default': + value = limitInfo[limit].default; + break; + case 'adapter': + value = adapter.limits[limit]; + break; + } - const device = await adapter.requestDevice({ requiredLimits: { [limit]: value } }); - assert(device !== null); - t.expect( - device.limits[limit] === value, - 'Devices reported limit should match the required limit' - ); + const device = await adapter.requestDevice({ requiredLimits: { [limit]: value } }); + assert(device !== null); + t.expect( + device.limits[limit] === value, + 'Devices reported limit should match the required limit' + ); + device.destroy(); +}); - device.destroy(); - }); - -g.test('limit,better_than_supported') - .desc( - ` +g.test('limit,better_than_supported'). +desc( + ` Test that specifying a better limit than what the adapter supports causes requestDevice to reject. - Tests each limit - Tests requesting better limits by various amounts` - ) - .params(u => - u - .combine('limit', kLimits) - .beginSubcases() - .expandWithParams(p => { - switch (kLimitClasses[p.limit]) { - case 'maximum': - return [ - { mul: 1, add: 1 }, - { mul: 1, add: 100 }, - ]; +). +params((u) => +u. +combine('limit', kLimits). +beginSubcases(). +expandWithParams((p) => { + switch (kLimitClasses[p.limit]) { + case 'maximum': + return [ + { mul: 1, add: 1 }, + { mul: 1, add: 100 }]; - case 'alignment': - return [ - { mul: 1, add: -1 }, - { mul: 1 / 2, add: 0 }, - { mul: 1 / 1024, add: 0 }, - ]; - } - }) - ) - .fn(async t => { - const { limit, mul, add } = t.params; + case 'alignment': + return [ + { mul: 1, add: -1 }, + { mul: 1 / 2, add: 0 }, + { mul: 1 / 1024, add: 0 }]; - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); + } +}) +). +fn(async (t) => { + const { limit, mul, add } = t.params; - const limitInfo = getDefaultLimitsForAdapter(adapter); - const value = adapter.limits[limit] * mul + add; - const requiredLimits = { - [limit]: clamp(value, { min: 0, max: limitInfo[limit].maximumValue }), - }; + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - t.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); - }); + const limitInfo = getDefaultLimitsForAdapter(adapter); + const value = adapter.limits[limit] * mul + add; + const requiredLimits = { + [limit]: clamp(value, { min: 0, max: limitInfo[limit].maximumValue }) + }; -g.test('limit,worse_than_default') - .desc( + t.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); +}); + +g.test('limit,out_of_range'). +desc( + ` + Test that specifying limits that are out of range (<0, >MAX_SAFE_INTEGER, >2**31-2 for 32-bit + limits, =0 for alignment limits) produce the appropriate error (TypeError or OperationError). ` +). +params((u) => +u. +combine('limit', kLimits). +beginSubcases(). +expand('value', function* () { + yield -(2 ** 64); + yield Number.MIN_SAFE_INTEGER - 3; + yield Number.MIN_SAFE_INTEGER - 1; + yield Number.MIN_SAFE_INTEGER; + yield -(2 ** 32); + yield -1; + yield 0; + yield 2 ** 32 - 2; + yield 2 ** 32 - 1; + yield 2 ** 32; + yield 2 ** 32 + 1; + yield 2 ** 32 + 2; + yield Number.MAX_SAFE_INTEGER; + yield Number.MAX_SAFE_INTEGER + 1; + yield Number.MAX_SAFE_INTEGER + 3; + yield 2 ** 64; + yield Number.MAX_VALUE; +}) +). +fn(async (t) => { + const { limit, value } = t.params; + + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); + const limitInfo = getDefaultLimitsForAdapter(adapter)[limit]; + + const requiredLimits = { + [limit]: value + }; + + const errorName = + value < 0 || value > Number.MAX_SAFE_INTEGER ? + 'TypeError' : + limitInfo.class === 'maximum' && value > adapter.limits[limit] ? + 'OperationError' : + limitInfo.class === 'alignment' && (value > 2 ** 31 || !isPowerOfTwo(value)) ? + 'OperationError' : + false; + + if (errorName) { + t.shouldReject(errorName, adapter.requestDevice({ requiredLimits })); + } else { + await adapter.requestDevice({ requiredLimits }); + } +}); + +g.test('limit,worse_than_default'). +desc( + ` Test that specifying a worse limit than the default values required by the spec cause the value to clamp. - Tests each limit - Tests requesting worse limits by various amounts` - ) - .params(u => - u - .combine('limit', kLimits) - .beginSubcases() - .expandWithParams(p => { - switch (kLimitClasses[p.limit]) { - case 'maximum': - return [ - { mul: 1, add: -1 }, - { mul: 1, add: -100 }, - ]; +). +params((u) => +u. +combine('limit', kLimits). +beginSubcases(). +expandWithParams((p) => { + switch (kLimitClasses[p.limit]) { + case 'maximum': + return [ + { mul: 1, add: -1 }, + { mul: 1, add: -100 }]; - case 'alignment': - return [ - { mul: 1, add: 1 }, - { mul: 2, add: 0 }, - { mul: 1024, add: 0 }, - ]; - } - }) - ) - .fn(async t => { - const { limit, mul, add } = t.params; + case 'alignment': + return [ + { mul: 1, add: 1 }, + { mul: 2, add: 0 }, + { mul: 1024, add: 0 }]; - const gpu = getGPU(t.rec); - const adapter = await gpu.requestAdapter(); - assert(adapter !== null); + } +}) +). +fn(async (t) => { + const { limit, mul, add } = t.params; - const limitInfo = getDefaultLimitsForAdapter(adapter); - const value = limitInfo[limit].default * mul + add; - const requiredLimits = { - [limit]: clamp(value, { min: 0, max: limitInfo[limit].maximumValue }), - }; + const gpu = getGPU(t.rec); + const adapter = await gpu.requestAdapter(); + assert(adapter !== null); - let success; - switch (limitInfo[limit].class) { - case 'alignment': - success = isPowerOfTwo(value); - break; - case 'maximum': - success = true; - break; - } + const limitInfo = getDefaultLimitsForAdapter(adapter); + const value = limitInfo[limit].default * mul + add; + const requiredLimits = { + [limit]: clamp(value, { min: 0, max: limitInfo[limit].maximumValue }) + }; - if (success) { - const device = await adapter.requestDevice({ requiredLimits }); - assert(device !== null); - t.expect( - device.limits[limit] === limitInfo[limit].default, - 'Devices reported limit should match the default limit' - ); + let success; + switch (limitInfo[limit].class) { + case 'alignment': + success = isPowerOfTwo(value); + break; + case 'maximum': + success = true; + break; + } - device.destroy(); - } else { - t.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); - } - }); + if (success) { + const device = await adapter.requestDevice({ requiredLimits }); + assert(device !== null); + t.expect( + device.limits[limit] === limitInfo[limit].default, + 'Devices reported limit should match the default limit' + ); + device.destroy(); + } else { + t.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map.spec.js index 48ad500e784..2d4408e6c07 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test the operation of buffer mapping, specifically the data contents written via map-write/mappedAtCreation, and the contents of buffers returned by getMappedRange on buffers which are mapped-read/mapped-write/mappedAtCreation. @@ -12,8 +12,7 @@ mapRegionBoundModes is used to get mapRegion from range: - default-expand: expand mapRegion to buffer bound by setting offset/size to undefined - explicit-expand: expand mapRegion to buffer bound by explicitly calculating offset/size - minimal: make mapRegion to be the same as range which is the minimal range to make getMappedRange input valid -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert, memcpy } from '../../../../common/util/util.js'; import { checkElementsEqual } from '../../../util/check_contents.js'; @@ -22,26 +21,26 @@ import { MappingTest } from './mapping_test.js'; export const g = makeTestGroup(MappingTest); const kSubcases = [ - { size: 0, range: [] }, - { size: 0, range: [undefined] }, - { size: 0, range: [undefined, undefined] }, - { size: 0, range: [0] }, - { size: 0, range: [0, undefined] }, - { size: 0, range: [0, 0] }, - { size: 12, range: [] }, - { size: 12, range: [undefined] }, - { size: 12, range: [undefined, undefined] }, - { size: 12, range: [0] }, - { size: 12, range: [0, undefined] }, - { size: 12, range: [0, 12] }, - { size: 12, range: [0, 0] }, - { size: 12, range: [8] }, - { size: 12, range: [8, undefined] }, - { size: 12, range: [8, 4] }, - { size: 28, range: [8, 8] }, - { size: 28, range: [8, 12] }, - { size: 512 * 1024, range: [] }, -]; +{ size: 0, range: [] }, +{ size: 0, range: [undefined] }, +{ size: 0, range: [undefined, undefined] }, +{ size: 0, range: [0] }, +{ size: 0, range: [0, undefined] }, +{ size: 0, range: [0, 0] }, +{ size: 12, range: [] }, +{ size: 12, range: [undefined] }, +{ size: 12, range: [undefined, undefined] }, +{ size: 12, range: [0] }, +{ size: 12, range: [0, undefined] }, +{ size: 12, range: [0, 12] }, +{ size: 12, range: [0, 0] }, +{ size: 12, range: [8] }, +{ size: 12, range: [8, undefined] }, +{ size: 12, range: [8, 4] }, +{ size: 28, range: [8, 8] }, +{ size: 28, range: [8, 12] }, +{ size: 512 * 1024, range: [] }]; + function reifyMapRange(bufferSize, range) { const offset = range[0] ?? 0; @@ -50,459 +49,462 @@ function reifyMapRange(bufferSize, range) { const mapRegionBoundModes = ['default-expand', 'explicit-expand', 'minimal']; -function getRegionForMap(bufferSize, range, { mapAsyncRegionLeft, mapAsyncRegionRight }) { + +function getRegionForMap( +bufferSize, +range, +{ + mapAsyncRegionLeft, + mapAsyncRegionRight + + + +}) +{ const regionLeft = mapAsyncRegionLeft === 'minimal' ? range[0] : 0; const regionRight = mapAsyncRegionRight === 'minimal' ? range[0] + range[1] : bufferSize; return [ - mapAsyncRegionLeft === 'default-expand' ? undefined : regionLeft, - mapAsyncRegionRight === 'default-expand' ? undefined : regionRight - regionLeft, - ]; + mapAsyncRegionLeft === 'default-expand' ? undefined : regionLeft, + mapAsyncRegionRight === 'default-expand' ? undefined : regionRight - regionLeft]; + } -g.test('mapAsync,write') - .desc( - `Use map-write to write to various ranges of variously-sized buffers, then expectContents +g.test('mapAsync,write'). +desc( + `Use map-write to write to various ranges of variously-sized buffers, then expectContents (which does copyBufferToBuffer + map-read) to ensure the contents were written.` - ) - .params(u => - u - .combine('mapAsyncRegionLeft', mapRegionBoundModes) - .combine('mapAsyncRegionRight', mapRegionBoundModes) - .beginSubcases() - .combineWithParams(kSubcases) - ) - .fn(async t => { - const { size, range } = t.params; - const [rangeOffset, rangeSize] = reifyMapRange(size, range); +). +params((u) => +u. +combine('mapAsyncRegionLeft', mapRegionBoundModes). +combine('mapAsyncRegionRight', mapRegionBoundModes). +beginSubcases(). +combineWithParams(kSubcases) +). +fn(async (t) => { + const { size, range } = t.params; + const [rangeOffset, rangeSize] = reifyMapRange(size, range); - const buffer = t.device.createBuffer({ - size, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, - }); - - const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); - await buffer.mapAsync(GPUMapMode.WRITE, ...mapRegion); - const arrayBuffer = buffer.getMappedRange(...range); - t.checkMapWrite(buffer, rangeOffset, arrayBuffer, rangeSize); + const buffer = t.device.createBuffer({ + size, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE }); -g.test('mapAsync,write,unchanged_ranges_preserved') - .desc( - `Use mappedAtCreation or mapAsync to write to various ranges of variously-sized buffers, then + const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); + await buffer.mapAsync(GPUMapMode.WRITE, ...mapRegion); + const arrayBuffer = buffer.getMappedRange(...range); + t.checkMapWrite(buffer, rangeOffset, arrayBuffer, rangeSize); +}); + +g.test('mapAsync,write,unchanged_ranges_preserved'). +desc( + `Use mappedAtCreation or mapAsync to write to various ranges of variously-sized buffers, then use mapAsync to map a different range and zero it out. Finally use expectGPUBufferValuesEqual (which does copyBufferToBuffer + map-read) to verify that contents originally written outside the second mapped range were not altered.` - ) - .params(u => - u - .beginSubcases() - .combine('mappedAtCreation', [false, true]) - .combineWithParams([ - { size: 12, range1: [], range2: [8] }, - { size: 12, range1: [], range2: [0, 8] }, - { size: 12, range1: [0, 8], range2: [8] }, - { size: 12, range1: [8], range2: [0, 8] }, - { size: 28, range1: [], range2: [8, 8] }, - { size: 28, range1: [8, 16], range2: [16, 8] }, - { size: 32, range1: [16, 12], range2: [8, 16] }, - { size: 32, range1: [8, 8], range2: [24, 4] }, - ]) - ) - .fn(async t => { - const { size, range1, range2, mappedAtCreation } = t.params; - const [rangeOffset1, rangeSize1] = reifyMapRange(size, range1); - const [rangeOffset2, rangeSize2] = reifyMapRange(size, range2); +). +params((u) => +u. +beginSubcases(). +combine('mappedAtCreation', [false, true]). +combineWithParams([ +{ size: 12, range1: [], range2: [8] }, +{ size: 12, range1: [], range2: [0, 8] }, +{ size: 12, range1: [0, 8], range2: [8] }, +{ size: 12, range1: [8], range2: [0, 8] }, +{ size: 28, range1: [], range2: [8, 8] }, +{ size: 28, range1: [8, 16], range2: [16, 8] }, +{ size: 32, range1: [16, 12], range2: [8, 16] }, +{ size: 32, range1: [8, 8], range2: [24, 4] }] +) +). +fn(async (t) => { + const { size, range1, range2, mappedAtCreation } = t.params; + const [rangeOffset1, rangeSize1] = reifyMapRange(size, range1); + const [rangeOffset2, rangeSize2] = reifyMapRange(size, range2); - const buffer = t.device.createBuffer({ - mappedAtCreation, - size, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, - }); - - // If the buffer is not mappedAtCreation map it now. - if (!mappedAtCreation) { - await buffer.mapAsync(GPUMapMode.WRITE); - } - - // Set the initial contents of the buffer. - const init = buffer.getMappedRange(...range1); - - assert(init.byteLength === rangeSize1); - const expectedBuffer = new ArrayBuffer(size); - const expected = new Uint32Array( - expectedBuffer, - rangeOffset1, - rangeSize1 / Uint32Array.BYTES_PER_ELEMENT - ); - - const data = new Uint32Array(init); - for (let i = 0; i < data.length; ++i) { - data[i] = expected[i] = i + 1; - } - buffer.unmap(); - - // Write to a second range of the buffer - await buffer.mapAsync(GPUMapMode.WRITE, ...range2); - const init2 = buffer.getMappedRange(...range2); - - assert(init2.byteLength === rangeSize2); - const expected2 = new Uint32Array( - expectedBuffer, - rangeOffset2, - rangeSize2 / Uint32Array.BYTES_PER_ELEMENT - ); - - const data2 = new Uint32Array(init2); - for (let i = 0; i < data2.length; ++i) { - data2[i] = expected2[i] = 0; - } - buffer.unmap(); - - // Verify that the range of the buffer which was not overwritten was preserved. - t.expectGPUBufferValuesEqual(buffer, expected, rangeOffset1); + const buffer = t.device.createBuffer({ + mappedAtCreation, + size, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE }); -g.test('mapAsync,read') - .desc( - `Use mappedAtCreation to initialize various ranges of variously-sized buffers, then + // If the buffer is not mappedAtCreation map it now. + if (!mappedAtCreation) { + await buffer.mapAsync(GPUMapMode.WRITE); + } + + // Set the initial contents of the buffer. + const init = buffer.getMappedRange(...range1); + + assert(init.byteLength === rangeSize1); + const expectedBuffer = new ArrayBuffer(size); + const expected = new Uint32Array( + expectedBuffer, + rangeOffset1, + rangeSize1 / Uint32Array.BYTES_PER_ELEMENT + ); + const data = new Uint32Array(init); + for (let i = 0; i < data.length; ++i) { + data[i] = expected[i] = i + 1; + } + buffer.unmap(); + + // Write to a second range of the buffer + await buffer.mapAsync(GPUMapMode.WRITE, ...range2); + const init2 = buffer.getMappedRange(...range2); + + assert(init2.byteLength === rangeSize2); + const expected2 = new Uint32Array( + expectedBuffer, + rangeOffset2, + rangeSize2 / Uint32Array.BYTES_PER_ELEMENT + ); + const data2 = new Uint32Array(init2); + for (let i = 0; i < data2.length; ++i) { + data2[i] = expected2[i] = 0; + } + buffer.unmap(); + + // Verify that the range of the buffer which was not overwritten was preserved. + t.expectGPUBufferValuesEqual(buffer, expected, rangeOffset1); +}); + +g.test('mapAsync,read'). +desc( + `Use mappedAtCreation to initialize various ranges of variously-sized buffers, then map-read and check the read-back result.` - ) - .params(u => - u - .combine('mapAsyncRegionLeft', mapRegionBoundModes) - .combine('mapAsyncRegionRight', mapRegionBoundModes) - .beginSubcases() - .combineWithParams(kSubcases) - ) - .fn(async t => { - const { size, range } = t.params; - const [rangeOffset, rangeSize] = reifyMapRange(size, range); +). +params((u) => +u. +combine('mapAsyncRegionLeft', mapRegionBoundModes). +combine('mapAsyncRegionRight', mapRegionBoundModes). +beginSubcases(). +combineWithParams(kSubcases) +). +fn(async (t) => { + const { size, range } = t.params; + const [rangeOffset, rangeSize] = reifyMapRange(size, range); - const buffer = t.device.createBuffer({ - mappedAtCreation: true, - size, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - const init = buffer.getMappedRange(...range); - - assert(init.byteLength === rangeSize); - const expected = new Uint32Array(new ArrayBuffer(rangeSize)); - const data = new Uint32Array(init); - for (let i = 0; i < data.length; ++i) { - data[i] = expected[i] = i + 1; - } - buffer.unmap(); - - const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); - await buffer.mapAsync(GPUMapMode.READ, ...mapRegion); - const actual = new Uint8Array(buffer.getMappedRange(...range)); - t.expectOK(checkElementsEqual(actual, new Uint8Array(expected.buffer))); + const buffer = t.device.createBuffer({ + mappedAtCreation: true, + size, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ }); + const init = buffer.getMappedRange(...range); -g.test('mapAsync,read,typedArrayAccess') - .desc(`Use various TypedArray types to read back from a mapped buffer`) - .params(u => - u - .combine('mapAsyncRegionLeft', mapRegionBoundModes) - .combine('mapAsyncRegionRight', mapRegionBoundModes) - .beginSubcases() - .combineWithParams([ - { size: 80, range: [] }, - { size: 160, range: [] }, - { size: 160, range: [0, 80] }, - { size: 160, range: [80] }, - { size: 160, range: [40, 120] }, - { size: 160, range: [40] }, - ]) - ) - .fn(async t => { - const { size, range } = t.params; - const [rangeOffset, rangeSize] = reifyMapRange(size, range); + assert(init.byteLength === rangeSize); + const expected = new Uint32Array(new ArrayBuffer(rangeSize)); + const data = new Uint32Array(init); + for (let i = 0; i < data.length; ++i) { + data[i] = expected[i] = i + 1; + } + buffer.unmap(); - // Fill an array buffer with a variety of values of different types. - const expectedArrayBuffer = new ArrayBuffer(80); - const uint8Expected = new Uint8Array(expectedArrayBuffer, 0, 2); - uint8Expected[0] = 1; - uint8Expected[1] = 255; + const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); + await buffer.mapAsync(GPUMapMode.READ, ...mapRegion); + const actual = new Uint8Array(buffer.getMappedRange(...range)); + t.expectOK(checkElementsEqual(actual, new Uint8Array(expected.buffer))); +}); - const int8Expected = new Int8Array(expectedArrayBuffer, 2, 2); - int8Expected[0] = -1; - int8Expected[1] = 127; +g.test('mapAsync,read,typedArrayAccess'). +desc(`Use various TypedArray types to read back from a mapped buffer`). +params((u) => +u. +combine('mapAsyncRegionLeft', mapRegionBoundModes). +combine('mapAsyncRegionRight', mapRegionBoundModes). +beginSubcases(). +combineWithParams([ +{ size: 80, range: [] }, +{ size: 160, range: [] }, +{ size: 160, range: [0, 80] }, +{ size: 160, range: [80] }, +{ size: 160, range: [40, 120] }, +{ size: 160, range: [40] }] +) +). +fn(async (t) => { + const { size, range } = t.params; + const [rangeOffset, rangeSize] = reifyMapRange(size, range); - const uint16Expected = new Uint16Array(expectedArrayBuffer, 4, 2); - uint16Expected[0] = 1; - uint16Expected[1] = 65535; + // Fill an array buffer with a variety of values of different types. + const expectedArrayBuffer = new ArrayBuffer(80); + const uint8Expected = new Uint8Array(expectedArrayBuffer, 0, 2); + uint8Expected[0] = 1; + uint8Expected[1] = 255; - const int16Expected = new Int16Array(expectedArrayBuffer, 8, 2); - int16Expected[0] = -1; - int16Expected[1] = 32767; + const int8Expected = new Int8Array(expectedArrayBuffer, 2, 2); + int8Expected[0] = -1; + int8Expected[1] = 127; - const uint32Expected = new Uint32Array(expectedArrayBuffer, 12, 2); - uint32Expected[0] = 1; - uint32Expected[1] = 4294967295; + const uint16Expected = new Uint16Array(expectedArrayBuffer, 4, 2); + uint16Expected[0] = 1; + uint16Expected[1] = 65535; - const int32Expected = new Int32Array(expectedArrayBuffer, 20, 2); - int32Expected[2] = -1; - int32Expected[3] = 2147483647; + const int16Expected = new Int16Array(expectedArrayBuffer, 8, 2); + int16Expected[0] = -1; + int16Expected[1] = 32767; - const float32Expected = new Float32Array(expectedArrayBuffer, 28, 3); - float32Expected[0] = 1; - float32Expected[1] = -1; - float32Expected[2] = 12345.6789; + const uint32Expected = new Uint32Array(expectedArrayBuffer, 12, 2); + uint32Expected[0] = 1; + uint32Expected[1] = 4294967295; - const float64Expected = new Float64Array(expectedArrayBuffer, 40, 5); - float64Expected[0] = 1; - float64Expected[1] = -1; - float64Expected[2] = 12345.6789; - float64Expected[3] = Number.MAX_VALUE; - float64Expected[4] = Number.MIN_VALUE; + const int32Expected = new Int32Array(expectedArrayBuffer, 20, 2); + int32Expected[2] = -1; + int32Expected[3] = 2147483647; - const buffer = t.device.createBuffer({ - mappedAtCreation: true, - size, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - const init = buffer.getMappedRange(...range); + const float32Expected = new Float32Array(expectedArrayBuffer, 28, 3); + float32Expected[0] = 1; + float32Expected[1] = -1; + float32Expected[2] = 12345.6789; - // Copy the expected values into the mapped range. - assert(init.byteLength === rangeSize); - memcpy({ src: expectedArrayBuffer }, { dst: init }); - buffer.unmap(); + const float64Expected = new Float64Array(expectedArrayBuffer, 40, 5); + float64Expected[0] = 1; + float64Expected[1] = -1; + float64Expected[2] = 12345.6789; + float64Expected[3] = Number.MAX_VALUE; + float64Expected[4] = Number.MIN_VALUE; - const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); - await buffer.mapAsync(GPUMapMode.READ, ...mapRegion); - const mappedArrayBuffer = buffer.getMappedRange(...range); - t.expectOK(checkElementsEqual(new Uint8Array(mappedArrayBuffer, 0, 2), uint8Expected)); - t.expectOK(checkElementsEqual(new Int8Array(mappedArrayBuffer, 2, 2), int8Expected)); - t.expectOK(checkElementsEqual(new Uint16Array(mappedArrayBuffer, 4, 2), uint16Expected)); - t.expectOK(checkElementsEqual(new Int16Array(mappedArrayBuffer, 8, 2), int16Expected)); - t.expectOK(checkElementsEqual(new Uint32Array(mappedArrayBuffer, 12, 2), uint32Expected)); - t.expectOK(checkElementsEqual(new Int32Array(mappedArrayBuffer, 20, 2), int32Expected)); - t.expectOK(checkElementsEqual(new Float32Array(mappedArrayBuffer, 28, 3), float32Expected)); - t.expectOK(checkElementsEqual(new Float64Array(mappedArrayBuffer, 40, 5), float64Expected)); + const buffer = t.device.createBuffer({ + mappedAtCreation: true, + size, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ }); + const init = buffer.getMappedRange(...range); -g.test('mappedAtCreation') - .desc( - `Use mappedAtCreation to write to various ranges of variously-sized buffers created either + // Copy the expected values into the mapped range. + assert(init.byteLength === rangeSize); + memcpy({ src: expectedArrayBuffer }, { dst: init }); + buffer.unmap(); + + const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); + await buffer.mapAsync(GPUMapMode.READ, ...mapRegion); + const mappedArrayBuffer = buffer.getMappedRange(...range); + t.expectOK(checkElementsEqual(new Uint8Array(mappedArrayBuffer, 0, 2), uint8Expected)); + t.expectOK(checkElementsEqual(new Int8Array(mappedArrayBuffer, 2, 2), int8Expected)); + t.expectOK(checkElementsEqual(new Uint16Array(mappedArrayBuffer, 4, 2), uint16Expected)); + t.expectOK(checkElementsEqual(new Int16Array(mappedArrayBuffer, 8, 2), int16Expected)); + t.expectOK(checkElementsEqual(new Uint32Array(mappedArrayBuffer, 12, 2), uint32Expected)); + t.expectOK(checkElementsEqual(new Int32Array(mappedArrayBuffer, 20, 2), int32Expected)); + t.expectOK(checkElementsEqual(new Float32Array(mappedArrayBuffer, 28, 3), float32Expected)); + t.expectOK(checkElementsEqual(new Float64Array(mappedArrayBuffer, 40, 5), float64Expected)); +}); + +g.test('mappedAtCreation'). +desc( + `Use mappedAtCreation to write to various ranges of variously-sized buffers created either with or without the MAP_WRITE usage (since this could affect the mappedAtCreation upload path), then expectContents (which does copyBufferToBuffer + map-read) to ensure the contents were written.` - ) - .params(u => - u // - .combine('mappable', [false, true]) - .beginSubcases() - .combineWithParams(kSubcases) - ) - .fn(t => { - const { size, range, mappable } = t.params; - const [, rangeSize] = reifyMapRange(size, range); +). +params((u) => +u // +.combine('mappable', [false, true]). +beginSubcases(). +combineWithParams(kSubcases) +). +fn((t) => { + const { size, range, mappable } = t.params; + const [, rangeSize] = reifyMapRange(size, range); - const buffer = t.device.createBuffer({ - mappedAtCreation: true, - size, - usage: GPUBufferUsage.COPY_SRC | (mappable ? GPUBufferUsage.MAP_WRITE : 0), - }); - const arrayBuffer = buffer.getMappedRange(...range); - t.checkMapWrite(buffer, range[0] ?? 0, arrayBuffer, rangeSize); + const buffer = t.device.createBuffer({ + mappedAtCreation: true, + size, + usage: GPUBufferUsage.COPY_SRC | (mappable ? GPUBufferUsage.MAP_WRITE : 0) }); + const arrayBuffer = buffer.getMappedRange(...range); + t.checkMapWrite(buffer, range[0] ?? 0, arrayBuffer, rangeSize); +}); -g.test('remapped_for_write') - .desc( - `Use mappedAtCreation or mapAsync to write to various ranges of variously-sized buffers created +g.test('remapped_for_write'). +desc( + `Use mappedAtCreation or mapAsync to write to various ranges of variously-sized buffers created with the MAP_WRITE usage, then mapAsync again and ensure that the previously written values are still present in the mapped buffer.` - ) - .params(u => - u // - .combine('mapAsyncRegionLeft', mapRegionBoundModes) - .combine('mapAsyncRegionRight', mapRegionBoundModes) - .beginSubcases() - .combine('mappedAtCreation', [false, true]) - .combineWithParams(kSubcases) - ) - .fn(async t => { - const { size, range, mappedAtCreation } = t.params; - const [rangeOffset, rangeSize] = reifyMapRange(size, range); +). +params((u) => +u // +.combine('mapAsyncRegionLeft', mapRegionBoundModes). +combine('mapAsyncRegionRight', mapRegionBoundModes). +beginSubcases(). +combine('mappedAtCreation', [false, true]). +combineWithParams(kSubcases) +). +fn(async (t) => { + const { size, range, mappedAtCreation } = t.params; + const [rangeOffset, rangeSize] = reifyMapRange(size, range); - const buffer = t.device.createBuffer({ - mappedAtCreation, + const buffer = t.device.createBuffer({ + mappedAtCreation, + size, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE + }); + + // If the buffer is not mappedAtCreation map it now. + if (!mappedAtCreation) { + await buffer.mapAsync(GPUMapMode.WRITE); + } + + // Set the initial contents of the buffer. + const init = buffer.getMappedRange(...range); + + assert(init.byteLength === rangeSize); + const expected = new Uint32Array(new ArrayBuffer(rangeSize)); + const data = new Uint32Array(init); + for (let i = 0; i < data.length; ++i) { + data[i] = expected[i] = i + 1; + } + buffer.unmap(); + + // Check that upon remapping the for WRITE the values in the buffer are + // still the same. + const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); + await buffer.mapAsync(GPUMapMode.WRITE, ...mapRegion); + const actual = new Uint8Array(buffer.getMappedRange(...range)); + t.expectOK(checkElementsEqual(actual, new Uint8Array(expected.buffer))); +}); + +g.test('mappedAtCreation,mapState'). +desc('Test that exposed map state of buffer created with mappedAtCreation has expected values.'). +params((u) => +u. +combine('usageType', ['invalid', 'read', 'write']). +combine('afterUnmap', [false, true]). +combine('afterDestroy', [false, true]) +). +fn((t) => { + const { usageType, afterUnmap, afterDestroy } = t.params; + const usage = + usageType === 'read' ? + GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ : + usageType === 'write' ? + GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE : + 0; + const validationError = usage === 0; + const size = 8; + const range = [0, 8]; + + let buffer; + t.expectValidationError(() => { + buffer = t.device.createBuffer({ + mappedAtCreation: true, size, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, + usage }); + }, validationError); - // If the buffer is not mappedAtCreation map it now. - if (!mappedAtCreation) { - await buffer.mapAsync(GPUMapMode.WRITE); - } + // mapState must be "mapped" regardless of validation error + t.expect(buffer.mapState === 'mapped'); - // Set the initial contents of the buffer. - const init = buffer.getMappedRange(...range); + // getMappedRange must not change the map state + buffer.getMappedRange(...range); + t.expect(buffer.mapState === 'mapped'); - assert(init.byteLength === rangeSize); - const expected = new Uint32Array(new ArrayBuffer(rangeSize)); - const data = new Uint32Array(init); - for (let i = 0; i < data.length; ++i) { - data[i] = expected[i] = i + 1; - } + if (afterUnmap) { buffer.unmap(); - - // Check that upon remapping the for WRITE the values in the buffer are - // still the same. - const mapRegion = getRegionForMap(size, [rangeOffset, rangeSize], t.params); - await buffer.mapAsync(GPUMapMode.WRITE, ...mapRegion); - const actual = new Uint8Array(buffer.getMappedRange(...range)); - t.expectOK(checkElementsEqual(actual, new Uint8Array(expected.buffer))); - }); - -g.test('mappedAtCreation,mapState') - .desc('Test that exposed map state of buffer created with mappedAtCreation has expected values.') - .params(u => - u - .combine('usageType', ['invalid', 'read', 'write']) - .combine('afterUnmap', [false, true]) - .combine('afterDestroy', [false, true]) - ) - .fn(t => { - const { usageType, afterUnmap, afterDestroy } = t.params; - const usage = - usageType === 'read' - ? GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ - : usageType === 'write' - ? GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE - : 0; - const validationError = usage === 0; - const size = 8; - const range = [0, 8]; - - let buffer; - t.expectValidationError(() => { - buffer = t.device.createBuffer({ - mappedAtCreation: true, - size, - usage, - }); - }, validationError); - - // mapState must be "mapped" regardless of validation error - t.expect(buffer.mapState === 'mapped'); - - // getMappedRange must not change the map state - buffer.getMappedRange(...range); - t.expect(buffer.mapState === 'mapped'); - - if (afterUnmap) { - buffer.unmap(); - t.expect(buffer.mapState === 'unmapped'); - } - - if (afterDestroy) { - buffer.destroy(); - t.expect(buffer.mapState === 'unmapped'); - } - }); - -g.test('mapAsync,mapState') - .desc('Test that exposed map state of buffer mapped with mapAsync has expected values.') - .params(u => - u - .combine('usageType', ['invalid', 'read', 'write']) - .combine('mapModeType', ['READ', 'WRITE']) - .combine('beforeUnmap', [false, true]) - .combine('beforeDestroy', [false, true]) - .combine('afterUnmap', [false, true]) - .combine('afterDestroy', [false, true]) - ) - .fn(async t => { - const { - usageType, - mapModeType, - beforeUnmap, - beforeDestroy, - afterUnmap, - afterDestroy, - } = t.params; - const size = 8; - const range = [0, 8]; - const usage = - usageType === 'read' - ? GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ - : usageType === 'write' - ? GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE - : 0; - const bufferCreationValidationError = usage === 0; - const mapMode = GPUMapMode[mapModeType]; - - let buffer; - t.expectValidationError(() => { - buffer = t.device.createBuffer({ - mappedAtCreation: false, - size, - usage, - }); - }, bufferCreationValidationError); - t.expect(buffer.mapState === 'unmapped'); + } - { - const mapAsyncValidationError = - bufferCreationValidationError || - (mapMode === GPUMapMode.READ && !(usage & GPUBufferUsage.MAP_READ)) || - (mapMode === GPUMapMode.WRITE && !(usage & GPUBufferUsage.MAP_WRITE)); - let promise; - t.expectValidationError(() => { - promise = buffer.mapAsync(mapMode); - }, mapAsyncValidationError); - t.expect(buffer.mapState === 'pending'); + if (afterDestroy) { + buffer.destroy(); + t.expect(buffer.mapState === 'unmapped'); + } +}); - try { - if (beforeUnmap) { - buffer.unmap(); - t.expect(buffer.mapState === 'unmapped'); - } - if (beforeDestroy) { - buffer.destroy(); - t.expect(buffer.mapState === 'unmapped'); - } +g.test('mapAsync,mapState'). +desc('Test that exposed map state of buffer mapped with mapAsync has expected values.'). +params((u) => +u. +combine('usageType', ['invalid', 'read', 'write']). +combine('mapModeType', ['READ', 'WRITE']). +combine('beforeUnmap', [false, true]). +combine('beforeDestroy', [false, true]). +combine('afterUnmap', [false, true]). +combine('afterDestroy', [false, true]) +). +fn(async (t) => { + const { usageType, mapModeType, beforeUnmap, beforeDestroy, afterUnmap, afterDestroy } = + t.params; + const size = 8; + const range = [0, 8]; + const usage = + usageType === 'read' ? + GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ : + usageType === 'write' ? + GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE : + 0; + const bufferCreationValidationError = usage === 0; + const mapMode = GPUMapMode[mapModeType]; - await promise; - t.expect(buffer.mapState === 'mapped'); + let buffer; + t.expectValidationError(() => { + buffer = t.device.createBuffer({ + mappedAtCreation: false, + size, + usage + }); + }, bufferCreationValidationError); - // getMappedRange must not change the map state - buffer.getMappedRange(...range); - t.expect(buffer.mapState === 'mapped'); - } catch { - // unmapped before resolve, destroyed before resolve, or mapAsync validation error - // will end up with rejection and 'unmapped' + t.expect(buffer.mapState === 'unmapped'); + + { + const mapAsyncValidationError = + bufferCreationValidationError || + mapMode === GPUMapMode.READ && !(usage & GPUBufferUsage.MAP_READ) || + mapMode === GPUMapMode.WRITE && !(usage & GPUBufferUsage.MAP_WRITE); + let promise; + t.expectValidationError(() => { + promise = buffer.mapAsync(mapMode); + }, mapAsyncValidationError); + t.expect(buffer.mapState === 'pending'); + + try { + if (beforeUnmap) { + buffer.unmap(); + t.expect(buffer.mapState === 'unmapped'); + } + if (beforeDestroy) { + buffer.destroy(); t.expect(buffer.mapState === 'unmapped'); } - } - // If buffer is already mapped test mapAsync on already mapped buffer - if (buffer.mapState === 'mapped') { - // mapAsync on already mapped buffer must be rejected with a validation error - // and the map state must keep 'mapped' - let promise; - t.expectValidationError(() => { - promise = buffer.mapAsync(GPUMapMode.WRITE); - }, true); + await promise; t.expect(buffer.mapState === 'mapped'); - try { - await promise; - t.fail('mapAsync on already mapped buffer must not succeed.'); - } catch { - t.expect(buffer.mapState === 'mapped'); - } - } - - if (afterUnmap) { - buffer.unmap(); + // getMappedRange must not change the map state + buffer.getMappedRange(...range); + t.expect(buffer.mapState === 'mapped'); + } catch { + // unmapped before resolve, destroyed before resolve, or mapAsync validation error + // will end up with rejection and 'unmapped' t.expect(buffer.mapState === 'unmapped'); } + } - if (afterDestroy) { - buffer.destroy(); - t.expect(buffer.mapState === 'unmapped'); + // If buffer is already mapped test mapAsync on already mapped buffer + if (buffer.mapState === 'mapped') { + // mapAsync on already mapped buffer must be rejected with a validation error + // and the map state must keep 'mapped' + let promise; + t.expectValidationError(() => { + promise = buffer.mapAsync(GPUMapMode.WRITE); + }, true); + t.expect(buffer.mapState === 'mapped'); + + try { + await promise; + t.fail('mapAsync on already mapped buffer must not succeed.'); + } catch { + t.expect(buffer.mapState === 'mapped'); } - }); + } + + if (afterUnmap) { + buffer.unmap(); + t.expect(buffer.mapState === 'unmapped'); + } + + if (afterDestroy) { + buffer.destroy(); + t.expect(buffer.mapState === 'unmapped'); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_ArrayBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_ArrayBuffer.spec.js index d006e404862..1a4dab2de93 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_ArrayBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_ArrayBuffer.spec.js @@ -1,90 +1,89 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for the behavior of ArrayBuffers returned by getMappedRange. TODO: Add tests that transfer to another thread instead of just using MessageChannel. TODO: Add tests for any other Web APIs that can detach ArrayBuffers. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { timeout } from '../../../../common/util/timeout.js'; import { GPUTest } from '../../../gpu_test.js'; import { checkElementsEqual } from '../../../util/check_contents.js'; export const g = makeTestGroup(GPUTest); -g.test('postMessage') - .desc( - `Using postMessage to send a getMappedRange-returned ArrayBuffer throws a TypeError +g.test('postMessage'). +desc( + `Using postMessage to send a getMappedRange-returned ArrayBuffer throws a TypeError if it was included in the transfer list. Otherwise, it makes a copy. Test combinations of transfer={false, true}, mapMode={read,write}.` - ) - .params(u => - u // - .combine('transfer', [false, true]) - .combine('mapMode', ['READ', 'WRITE']) - ) - .fn(async t => { - const { transfer, mapMode } = t.params; - const kSize = 1024; +). +params((u) => +u // +.combine('transfer', [false, true]). +combine('mapMode', ['READ', 'WRITE']) +). +fn(async (t) => { + const { transfer, mapMode } = t.params; + const kSize = 1024; - // Populate initial data. - const initialData = new Uint32Array(new ArrayBuffer(kSize)); - for (let i = 0; i < initialData.length; ++i) { - initialData[i] = i; - } + // Populate initial data. + const initialData = new Uint32Array(new ArrayBuffer(kSize)); + for (let i = 0; i < initialData.length; ++i) { + initialData[i] = i; + } - const buf = t.makeBufferWithContents( - initialData, - mapMode === 'WRITE' ? GPUBufferUsage.MAP_WRITE : GPUBufferUsage.MAP_READ - ); + const buf = t.makeBufferWithContents( + initialData, + mapMode === 'WRITE' ? GPUBufferUsage.MAP_WRITE : GPUBufferUsage.MAP_READ + ); - await buf.mapAsync(GPUMapMode[mapMode]); - const ab1 = buf.getMappedRange(); - t.expect(ab1.byteLength === kSize, 'ab1 should have the size of the buffer'); + await buf.mapAsync(GPUMapMode[mapMode]); + const ab1 = buf.getMappedRange(); + t.expect(ab1.byteLength === kSize, 'ab1 should have the size of the buffer'); - const mc = new MessageChannel(); - const ab2Promise = new Promise(resolve => { - mc.port2.onmessage = ev => { - if (transfer) { - t.fail( - `postMessage with ab1 in transfer list should not be received. Unexpected message: ${ev.data}` - ); - } else { - resolve(ev.data); - } - }; - }); - - if (transfer) { - t.shouldThrow('TypeError', () => mc.port1.postMessage(ab1, [ab1])); - // Wait to make sure the postMessage isn't received. - await new Promise(resolve => timeout(resolve, 100)); - } else { - mc.port1.postMessage(ab1); - } - t.expect(ab1.byteLength === kSize, 'after postMessage, ab1 should not be detached'); - - if (!transfer) { - const ab2 = await ab2Promise; - t.expect(ab2.byteLength === kSize, 'ab2 should be the same size'); - const ab2Data = new Uint32Array(ab2, 0, initialData.length); - // ab2 should have the same initial contents. - t.expectOK(checkElementsEqual(ab2Data, initialData)); - - // Mutations to ab2 should not be visible in ab1. - const ab1Data = new Uint32Array(ab1, 0, initialData.length); - const abs2NewData = initialData.slice().reverse(); - for (let i = 0; i < ab2Data.length; ++i) { - ab2Data[i] = abs2NewData[i]; + const mc = new MessageChannel(); + const ab2Promise = new Promise((resolve) => { + mc.port2.onmessage = (ev) => { + if (transfer) { + t.fail( + `postMessage with ab1 in transfer list should not be received. Unexpected message: ${ev.data}` + ); + } else { + resolve(ev.data); } - t.expectOK(checkElementsEqual(ab1Data, initialData)); - t.expectOK(checkElementsEqual(ab2Data, abs2NewData)); - } - - buf.unmap(); - t.expect(ab1.byteLength === 0, 'after unmap, ab1 should be detached'); - - // Transferring an already-detached ArrayBuffer is a DataCloneError. - t.shouldThrow('DataCloneError', () => mc.port1.postMessage(ab1, [ab1])); + }; }); + + if (transfer) { + t.shouldThrow('TypeError', () => mc.port1.postMessage(ab1, [ab1])); + // Wait to make sure the postMessage isn't received. + await new Promise((resolve) => timeout(resolve, 100)); + } else { + mc.port1.postMessage(ab1); + } + t.expect(ab1.byteLength === kSize, 'after postMessage, ab1 should not be detached'); + + if (!transfer) { + const ab2 = await ab2Promise; + t.expect(ab2.byteLength === kSize, 'ab2 should be the same size'); + const ab2Data = new Uint32Array(ab2, 0, initialData.length); + // ab2 should have the same initial contents. + t.expectOK(checkElementsEqual(ab2Data, initialData)); + + // Mutations to ab2 should not be visible in ab1. + const ab1Data = new Uint32Array(ab1, 0, initialData.length); + const abs2NewData = initialData.slice().reverse(); + for (let i = 0; i < ab2Data.length; ++i) { + ab2Data[i] = abs2NewData[i]; + } + t.expectOK(checkElementsEqual(ab1Data, initialData)); + t.expectOK(checkElementsEqual(ab2Data, abs2NewData)); + } + + buf.unmap(); + t.expect(ab1.byteLength === 0, 'after unmap, ab1 should be detached'); + + // Transferring an already-detached ArrayBuffer is a DataCloneError. + t.shouldThrow('DataCloneError', () => mc.port1.postMessage(ab1, [ab1])); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_detach.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_detach.spec.js index 57d395f7b36..4d8df263497 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_detach.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_detach.spec.js @@ -1,10 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that TypedArrays created when mapping a GPUBuffer are detached when the buffer is unmapped or destroyed. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { getGPU } from '../../../../common/util/navigator_gpu.js'; import { assert } from '../../../../common/util/util.js'; import { GPUConst } from '../../../constants.js'; @@ -12,69 +11,69 @@ import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('while_mapped') - .desc( - ` +g.test('while_mapped'). +desc( + ` Test that a mapped buffers are able to properly detach. - Tests {mappable, unmappable mapAtCreation, mappable mapAtCreation} - Tests while {mapped, mapped at creation, mapped at creation then unmapped and mapped again} - When {unmap, destroy, unmap && destroy, device.destroy} is called` - ) - .paramsSubcasesOnly(u => - u - .combine('mappedAtCreation', [false, true]) - .combineWithParams([ - { usage: GPUConst.BufferUsage.COPY_SRC }, - { usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, - { usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, - { - usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC, - mapMode: GPUConst.MapMode.WRITE, - }, - { - usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, - mapMode: GPUConst.MapMode.READ, - }, - ]) - .combineWithParams([ - { unmap: true, destroy: false }, - { unmap: false, destroy: true }, - { unmap: true, destroy: true }, - { unmap: false, destroy: false, deviceDestroy: true }, - ]) - .unless(p => p.mappedAtCreation === false && p.mapMode === undefined) - ) - .fn(async t => { - const { usage, mapMode, mappedAtCreation, unmap, destroy, deviceDestroy } = t.params; +). +paramsSubcasesOnly((u) => +u. +combine('mappedAtCreation', [false, true]). +combineWithParams([ +{ usage: GPUConst.BufferUsage.COPY_SRC }, +{ usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, +{ usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, +{ + usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC, + mapMode: GPUConst.MapMode.WRITE +}, +{ + usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, + mapMode: GPUConst.MapMode.READ +}] +). +combineWithParams([ +{ unmap: true, destroy: false }, +{ unmap: false, destroy: true }, +{ unmap: true, destroy: true }, +{ unmap: false, destroy: false, deviceDestroy: true }] +). +unless((p) => p.mappedAtCreation === false && p.mapMode === undefined) +). +fn(async (t) => { + const { usage, mapMode, mappedAtCreation, unmap, destroy, deviceDestroy } = t.params; - let device = t.device; - if (deviceDestroy) { - const adapter = await getGPU(t.rec).requestAdapter(); - assert(adapter !== null); - device = await adapter.requestDevice(); - } - const buffer = device.createBuffer({ - size: 4, - usage, - mappedAtCreation, - }); - - if (mapMode !== undefined) { - if (mappedAtCreation) { - buffer.unmap(); - } - await buffer.mapAsync(mapMode); - } - - const arrayBuffer = buffer.getMappedRange(); - const view = new Uint8Array(arrayBuffer); - t.expect(arrayBuffer.byteLength === 4); - t.expect(view.length === 4); - - if (unmap) buffer.unmap(); - if (destroy) buffer.destroy(); - if (deviceDestroy) device.destroy(); - - t.expect(arrayBuffer.byteLength === 0, 'ArrayBuffer should be detached'); - t.expect(view.byteLength === 0, 'ArrayBufferView should be detached'); + let device = t.device; + if (deviceDestroy) { + const adapter = await getGPU(t.rec).requestAdapter(); + assert(adapter !== null); + device = await adapter.requestDevice(); + } + const buffer = device.createBuffer({ + size: 4, + usage, + mappedAtCreation }); + + if (mapMode !== undefined) { + if (mappedAtCreation) { + buffer.unmap(); + } + await buffer.mapAsync(mapMode); + } + + const arrayBuffer = buffer.getMappedRange(); + const view = new Uint8Array(arrayBuffer); + t.expect(arrayBuffer.byteLength === 4); + t.expect(view.length === 4); + + if (unmap) buffer.unmap(); + if (destroy) buffer.destroy(); + if (deviceDestroy) device.destroy(); + + t.expect(arrayBuffer.byteLength === 0, 'ArrayBuffer should be detached'); + t.expect(view.byteLength === 0, 'ArrayBufferView should be detached'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_oom.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_oom.spec.js index 86fd574199f..73aa5b73f16 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_oom.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/map_oom.spec.js @@ -1,51 +1,50 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = - 'Test out-of-memory conditions creating large mappable/mappedAtCreation buffers.'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = 'Test out-of-memory conditions creating large mappable/mappedAtCreation buffers.'; import { kUnitCaseParamsBuilder } from '../../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kBufferUsages } from '../../../capability_info.js'; import { GPUTest } from '../../../gpu_test.js'; import { kMaxSafeMultipleOf8 } from '../../../util/math.js'; -const oomAndSizeParams = kUnitCaseParamsBuilder - .combine('oom', [false, true]) - .expand('size', ({ oom }) => { - return oom - ? [ - kMaxSafeMultipleOf8, - 0x20_0000_0000, // 128 GB - ] - : [16]; - }); +const oomAndSizeParams = kUnitCaseParamsBuilder. +combine('oom', [false, true]). +expand('size', ({ oom }) => { + return oom ? + [ + kMaxSafeMultipleOf8, + 0x20_0000_0000 // 128 GB + ] : + [16]; +}); export const g = makeTestGroup(GPUTest); -g.test('mappedAtCreation') - .desc( - `Test creating a very large buffer mappedAtCreation buffer should throw a RangeError only +g.test('mappedAtCreation'). +desc( + `Test creating a very large buffer mappedAtCreation buffer should throw a RangeError only because such a large allocation cannot be created when we initialize an active buffer mapping. ` - ) - .params( - oomAndSizeParams // - .beginSubcases() - .combine('usage', kBufferUsages) - ) - .fn(t => { - const { oom, usage, size } = t.params; +). +params( + oomAndSizeParams // + .beginSubcases(). + combine('usage', kBufferUsages) +). +fn((t) => { + const { oom, usage, size } = t.params; - const f = () => t.device.createBuffer({ mappedAtCreation: true, size, usage }); + const f = () => t.device.createBuffer({ mappedAtCreation: true, size, usage }); - if (oom) { - // getMappedRange is normally valid on OOM buffers, but this one fails because the - // (default) range is too large to create the returned ArrayBuffer. - t.shouldThrow('RangeError', f); - } else { - const buffer = f(); - const mapping = buffer.getMappedRange(); - t.expect(mapping.byteLength === size, 'Mapping should be successful'); - buffer.unmap(); - t.expect(mapping.byteLength === 0, 'Mapping should be detached'); - } - }); + if (oom) { + // getMappedRange is normally valid on OOM buffers, but this one fails because the + // (default) range is too large to create the returned ArrayBuffer. + t.shouldThrow('RangeError', f); + } else { + const buffer = f(); + const mapping = buffer.getMappedRange(); + t.expect(mapping.byteLength === size, 'Mapping should be successful'); + buffer.unmap(); + t.expect(mapping.byteLength === 0, 'Mapping should be detached'); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/mapping_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/mapping_test.js index 7a69968a9f9..5f8f20991ba 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/mapping_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/mapping_test.js @@ -1,9 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../../../common/util/util.js'; -import { GPUTest } from '../../../gpu_test.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../../../common/util/util.js';import { GPUTest } from '../../../gpu_test.js'; export class MappingTest extends GPUTest { - checkMapWrite(buffer, offset, mappedContents, size) { + checkMapWrite( + buffer, + offset, + mappedContents, + size) + { this.checkMapWriteZeroed(mappedContents, size); const mappedView = new Uint32Array(mappedContents); @@ -32,4 +36,4 @@ export class MappingTest extends GPUTest { } } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/threading.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/threading.spec.js index d30e5813b36..a665ad7c282 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/threading.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/buffers/threading.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for valid operations with various client-side thread-shared state of GPUBuffers. States to test: @@ -12,19 +12,18 @@ States to test: - destroyed TODO: Look for more things to test. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('serialize') - .desc( - `Copy a GPUBuffer to another thread while it is in various states on +g.test('serialize'). +desc( + `Copy a GPUBuffer to another thread while it is in various states on {the sending thread, yet another thread}.` - ) - .unimplemented(); +). +unimplemented(); -g.test('destroyed') - .desc(`Destroy on one thread while in various states in another thread.`) - .unimplemented(); +g.test('destroyed'). +desc(`Destroy on one thread while in various states in another thread.`). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/basic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/basic.spec.js index 55d6ac55355..56b6785a65f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/basic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/basic.spec.js @@ -1,40 +1,39 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Basic tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { memcpy } from '../../../../common/util/util.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('empty').fn(t => { +g.test('empty').fn((t) => { const encoder = t.device.createCommandEncoder(); const cmd = encoder.finish(); t.device.queue.submit([cmd]); }); -g.test('b2t2b').fn(t => { +g.test('b2t2b').fn((t) => { const data = new Uint32Array([0x01020304]); const src = t.device.createBuffer({ mappedAtCreation: true, size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); memcpy({ src: data }, { dst: src.getMappedRange() }); src.unmap(); const dst = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); const mid = t.device.createTexture({ size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format: 'rgba8uint', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); const encoder = t.device.createCommandEncoder(); @@ -43,38 +42,36 @@ g.test('b2t2b').fn(t => { { texture: mid, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - encoder.copyTextureToBuffer( { texture: mid, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { buffer: dst, bytesPerRow: 256 }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - t.device.queue.submit([encoder.finish()]); t.expectGPUBufferValuesEqual(dst, data); }); -g.test('b2t2t2b').fn(t => { +g.test('b2t2t2b').fn((t) => { const data = new Uint32Array([0x01020304]); const src = t.device.createBuffer({ mappedAtCreation: true, size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); memcpy({ src: data }, { dst: src.getMappedRange() }); src.unmap(); const dst = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); const midDesc = { size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format: 'rgba8uint', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }; const mid1 = t.device.createTexture(midDesc); const mid2 = t.device.createTexture(midDesc); @@ -85,20 +82,17 @@ g.test('b2t2t2b').fn(t => { { texture: mid1, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - encoder.copyTextureToTexture( { texture: mid1, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { texture: mid2, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - encoder.copyTextureToBuffer( { texture: mid2, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { buffer: dst, bytesPerRow: 256 }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - t.device.queue.submit([encoder.finish()]); t.expectGPUBufferValuesEqual(dst, data); -}); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/clearBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/clearBuffer.spec.js index b721cdcc2bc..42a2f63dddc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/clearBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/clearBuffer.spec.js @@ -1,55 +1,54 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` API operations tests for clearBuffer. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('clear') - .desc( - `Validate the correctness of the clear by filling the srcBuffer with testable data, doing +g.test('clear'). +desc( + `Validate the correctness of the clear by filling the srcBuffer with testable data, doing clearBuffer(), and verifying the content of the whole srcBuffer with MapRead: Clear {4 bytes, part of, the whole} buffer {with, without} a non-zero valid offset that - covers the whole buffer - covers the beginning of the buffer - covers the end of the buffer - covers neither the beginning nor the end of the buffer` - ) - .paramsSubcasesOnly(u => - u // - .combine('offset', [0, 4, 8, 16, undefined]) - .combine('size', [0, 4, 8, 16, undefined]) - .expand('bufferSize', p => [ - (p.offset ?? 0) + (p.size ?? 16), - (p.offset ?? 0) + (p.size ?? 16) + 8, - ]) - ) - .fn(t => { - const { offset, size, bufferSize } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('offset', [0, 4, 8, 16, undefined]). +combine('size', [0, 4, 8, 16, undefined]). +expand('bufferSize', (p) => [ +(p.offset ?? 0) + (p.size ?? 16), +(p.offset ?? 0) + (p.size ?? 16) + 8] +) +). +fn((t) => { + const { offset, size, bufferSize } = t.params; - const bufferData = new Uint8Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - bufferData[i] = i + 1; - } + const bufferData = new Uint8Array(bufferSize); + for (let i = 0; i < bufferSize; ++i) { + bufferData[i] = i + 1; + } - const buffer = t.makeBufferWithContents( - bufferData, - GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC - ); + const buffer = t.makeBufferWithContents( + bufferData, + GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC + ); - const encoder = t.device.createCommandEncoder(); - encoder.clearBuffer(buffer, offset, size); - t.device.queue.submit([encoder.finish()]); + const encoder = t.device.createCommandEncoder(); + encoder.clearBuffer(buffer, offset, size); + t.device.queue.submit([encoder.finish()]); - const expectOffset = offset ?? 0; - const expectSize = size ?? bufferSize - expectOffset; + const expectOffset = offset ?? 0; + const expectSize = size ?? bufferSize - expectOffset; - for (let i = 0; i < expectSize; ++i) { - bufferData[expectOffset + i] = 0; - } + for (let i = 0; i < expectSize; ++i) { + bufferData[expectOffset + i] = 0; + } - t.expectGPUBufferValuesEqual(buffer, bufferData); - }); + t.expectGPUBufferValuesEqual(buffer, bufferData); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyBufferToBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyBufferToBuffer.spec.js index a08050784bc..376596a7b72 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyBufferToBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyBufferToBuffer.spec.js @@ -1,14 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = 'copyBufferToBuffer operation tests'; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = 'copyBufferToBuffer operation tests';import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('single') - .desc( - `Validate the correctness of the copy by filling the srcBuffer with testable data, doing +g.test('single'). +desc( + `Validate the correctness of the copy by filling the srcBuffer with testable data, doing CopyBufferToBuffer() copy, and verifying the content of the whole dstBuffer with MapRead: Copy {4 bytes, part of, the whole} srcBuffer to the dstBuffer {with, without} a non-zero valid srcOffset that @@ -16,95 +15,94 @@ g.test('single') - covers the beginning of the dstBuffer - covers the end of the dstBuffer - covers neither the beginning nor the end of the dstBuffer` - ) - .paramsSubcasesOnly(u => - u // - .combine('srcOffset', [0, 4, 8, 16]) - .combine('dstOffset', [0, 4, 8, 16]) - .combine('copySize', [0, 4, 8, 16]) - .expand('srcBufferSize', p => [p.srcOffset + p.copySize, p.srcOffset + p.copySize + 8]) - .expand('dstBufferSize', p => [p.dstOffset + p.copySize, p.dstOffset + p.copySize + 8]) - ) - .fn(t => { - const { srcOffset, dstOffset, copySize, srcBufferSize, dstBufferSize } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('srcOffset', [0, 4, 8, 16]). +combine('dstOffset', [0, 4, 8, 16]). +combine('copySize', [0, 4, 8, 16]). +expand('srcBufferSize', (p) => [p.srcOffset + p.copySize, p.srcOffset + p.copySize + 8]). +expand('dstBufferSize', (p) => [p.dstOffset + p.copySize, p.dstOffset + p.copySize + 8]) +). +fn((t) => { + const { srcOffset, dstOffset, copySize, srcBufferSize, dstBufferSize } = t.params; - const srcData = new Uint8Array(srcBufferSize); - for (let i = 0; i < srcBufferSize; ++i) { - srcData[i] = i + 1; - } + const srcData = new Uint8Array(srcBufferSize); + for (let i = 0; i < srcBufferSize; ++i) { + srcData[i] = i + 1; + } - const src = t.makeBufferWithContents(srcData, GPUBufferUsage.COPY_SRC); + const src = t.makeBufferWithContents(srcData, GPUBufferUsage.COPY_SRC); - const dst = t.device.createBuffer({ - size: dstBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(dst); - - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToBuffer(src, srcOffset, dst, dstOffset, copySize); - t.device.queue.submit([encoder.finish()]); - - const expectedDstData = new Uint8Array(dstBufferSize); - for (let i = 0; i < copySize; ++i) { - expectedDstData[dstOffset + i] = srcData[srcOffset + i]; - } - - t.expectGPUBufferValuesEqual(dst, expectedDstData); + const dst = t.device.createBuffer({ + size: dstBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); + t.trackForCleanup(dst); -g.test('state_transitions') - .desc( - `Test proper state transitions/barriers happen between copy commands. + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToBuffer(src, srcOffset, dst, dstOffset, copySize); + t.device.queue.submit([encoder.finish()]); + + const expectedDstData = new Uint8Array(dstBufferSize); + for (let i = 0; i < copySize; ++i) { + expectedDstData[dstOffset + i] = srcData[srcOffset + i]; + } + + t.expectGPUBufferValuesEqual(dst, expectedDstData); +}); + +g.test('state_transitions'). +desc( + `Test proper state transitions/barriers happen between copy commands. Copy part of src to dst, then a different part of dst to src, and check contents of both.` - ) - .fn(t => { - const srcData = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); - const dstData = new Uint8Array([10, 20, 30, 40, 50, 60, 70, 80]); +). +fn((t) => { + const srcData = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + const dstData = new Uint8Array([10, 20, 30, 40, 50, 60, 70, 80]); - const src = t.makeBufferWithContents( - srcData, - GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST - ); + const src = t.makeBufferWithContents( + srcData, + GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + ); + const dst = t.makeBufferWithContents( + dstData, + GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + ); - const dst = t.makeBufferWithContents( - dstData, - GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToBuffer(src, 0, dst, 4, 4); + encoder.copyBufferToBuffer(dst, 0, src, 4, 4); + t.device.queue.submit([encoder.finish()]); - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToBuffer(src, 0, dst, 4, 4); - encoder.copyBufferToBuffer(dst, 0, src, 4, 4); - t.device.queue.submit([encoder.finish()]); + const expectedSrcData = new Uint8Array([1, 2, 3, 4, 10, 20, 30, 40]); + const expectedDstData = new Uint8Array([10, 20, 30, 40, 1, 2, 3, 4]); + t.expectGPUBufferValuesEqual(src, expectedSrcData); + t.expectGPUBufferValuesEqual(dst, expectedDstData); +}); - const expectedSrcData = new Uint8Array([1, 2, 3, 4, 10, 20, 30, 40]); - const expectedDstData = new Uint8Array([10, 20, 30, 40, 1, 2, 3, 4]); - t.expectGPUBufferValuesEqual(src, expectedSrcData); - t.expectGPUBufferValuesEqual(dst, expectedDstData); - }); - -g.test('copy_order') - .desc( - `Test copy commands in one command buffer occur in the correct order. +g.test('copy_order'). +desc( + `Test copy commands in one command buffer occur in the correct order. First copies one region from src to dst, then another region from src to an overlapping region of dst, then checks the dst buffer's contents.` - ) - .fn(t => { - const srcData = new Uint32Array([1, 2, 3, 4, 5, 6, 7, 8]); +). +fn((t) => { + const srcData = new Uint32Array([1, 2, 3, 4, 5, 6, 7, 8]); - const src = t.makeBufferWithContents(srcData, GPUBufferUsage.COPY_SRC); + const src = t.makeBufferWithContents(srcData, GPUBufferUsage.COPY_SRC); - const dst = t.device.createBuffer({ - size: srcData.length * 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(dst); - - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToBuffer(src, 0, dst, 0, 16); - encoder.copyBufferToBuffer(src, 16, dst, 8, 16); - t.device.queue.submit([encoder.finish()]); - - const expectedDstData = new Uint32Array([1, 2, 5, 6, 7, 8, 0, 0]); - t.expectGPUBufferValuesEqual(dst, expectedDstData); + const dst = t.device.createBuffer({ + size: srcData.length * 4, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); + t.trackForCleanup(dst); + + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToBuffer(src, 0, dst, 0, 16); + encoder.copyBufferToBuffer(src, 16, dst, 8, 16); + t.device.queue.submit([encoder.finish()]); + + const expectedDstData = new Uint32Array([1, 2, 5, 6, 7, 8, 0, 0]); + t.expectGPUBufferValuesEqual(dst, expectedDstData); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.js index a85ee333b10..2440cccdd9d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/copyTextureToTexture.spec.js @@ -1,13 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `copyTextureToTexture operation tests`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { assert, memcpy, unreachable } from '../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `copyTextureToTexture operation tests`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { assert, ErrorWithExtra, memcpy } from '../../../../common/util/util.js'; import { kBufferSizeAlignment, kMinDynamicBufferOffsetAlignment, - kTextureDimensions, -} from '../../../capability_info.js'; + kTextureDimensions } from +'../../../capability_info.js'; import { kTextureFormatInfo, kRegularTextureFormats, @@ -15,63 +14,81 @@ import { kDepthStencilFormats, textureDimensionAndFormatCompatible, depthStencilFormatAspectSize, + + isCompressedTextureFormat, - viewCompatible, -} from '../../../format_info.js'; + isEncodableTextureformat, + viewCompatible } from + +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { makeBufferWithContents } from '../../../util/buffer.js'; -import { checkElementsEqual, checkElementsEqualEither } from '../../../util/check_contents.js'; +import { checkElementsEqual } from '../../../util/check_contents.js'; import { align } from '../../../util/math.js'; import { physicalMipSize } from '../../../util/texture/base.js'; import { DataArrayGenerator } from '../../../util/texture/data_generation.js'; import { kBytesPerRowAlignment, dataBytesForCopyOrFail } from '../../../util/texture/layout.js'; +import { TexelView } from '../../../util/texture/texel_view.js'; +import { findFailedPixels } from '../../../util/texture/texture_ok.js'; const dataGenerator = new DataArrayGenerator(); class F extends TextureTestMixin(GPUTest) { - GetInitialDataPerMipLevel(dimension, textureSize, format, mipLevel) { + GetInitialDataPerMipLevel( + dimension, + textureSize, + format, + mipLevel) + { const textureSizeAtLevel = physicalMipSize(textureSize, format, dimension, mipLevel); const bytesPerBlock = kTextureFormatInfo[format].color.bytes; const blockWidthInTexel = kTextureFormatInfo[format].blockWidth; const blockHeightInTexel = kTextureFormatInfo[format].blockHeight; const blocksPerSubresource = - (textureSizeAtLevel.width / blockWidthInTexel) * - (textureSizeAtLevel.height / blockHeightInTexel); + textureSizeAtLevel.width / blockWidthInTexel * ( + textureSizeAtLevel.height / blockHeightInTexel); const byteSize = bytesPerBlock * blocksPerSubresource * textureSizeAtLevel.depthOrArrayLayers; return dataGenerator.generateView(byteSize); } - GetInitialStencilDataPerMipLevel(textureSize, format, mipLevel) { + GetInitialStencilDataPerMipLevel( + textureSize, + format, + mipLevel) + { const textureSizeAtLevel = physicalMipSize(textureSize, format, '2d', mipLevel); const aspectBytesPerBlock = depthStencilFormatAspectSize(format, 'stencil-only'); const byteSize = - aspectBytesPerBlock * - textureSizeAtLevel.width * - textureSizeAtLevel.height * - textureSizeAtLevel.depthOrArrayLayers; + aspectBytesPerBlock * + textureSizeAtLevel.width * + textureSizeAtLevel.height * + textureSizeAtLevel.depthOrArrayLayers; return dataGenerator.generateView(byteSize); } DoCopyTextureToTextureTest( - dimension, - srcTextureSize, - dstTextureSize, - srcFormat, - dstFormat, - copyBoxOffsets, + dimension, + srcTextureSize, + dstTextureSize, + srcFormat, + dstFormat, + copyBoxOffsets, - srcCopyLevel, - dstCopyLevel - ) { + + + + srcCopyLevel, + dstCopyLevel) + { this.skipIfTextureFormatNotSupported(srcFormat, dstFormat); // If we're in compatibility mode and it's a compressed texture // then we need to render the texture to test the results of the copy. const extraTextureUsageFlags = - isCompressedTextureFormat(dstFormat) && this.isCompatibility - ? GPUTextureUsage.TEXTURE_BINDING - : 0; + isCompressedTextureFormat(dstFormat) && this.isCompatibility ? + GPUTextureUsage.TEXTURE_BINDING : + 0; const mipLevelCount = dimension === '1d' ? 1 : 4; // Create srcTexture and dstTexture @@ -80,7 +97,7 @@ class F extends TextureTestMixin(GPUTest) { size: srcTextureSize, format: srcFormat, usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - mipLevelCount, + mipLevelCount }; const srcTexture = this.device.createTexture(srcTextureDesc); this.trackForCleanup(srcTexture); @@ -89,7 +106,7 @@ class F extends TextureTestMixin(GPUTest) { size: dstTextureSize, format: dstFormat, usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | extraTextureUsageFlags, - mipLevelCount, + mipLevelCount }; const dstTexture = this.device.createTexture(dstTextureDesc); this.trackForCleanup(dstTexture); @@ -101,14 +118,12 @@ class F extends TextureTestMixin(GPUTest) { srcFormat, srcCopyLevel ); - const srcTextureSizeAtLevel = physicalMipSize( srcTextureSize, srcFormat, dimension, srcCopyLevel ); - const bytesPerBlock = kTextureFormatInfo[srcFormat].color.bytes; const blockWidth = kTextureFormatInfo[srcFormat].blockWidth; const blockHeight = kTextureFormatInfo[srcFormat].blockHeight; @@ -119,7 +134,7 @@ class F extends TextureTestMixin(GPUTest) { initialSrcData, { bytesPerRow: srcBlocksPerRow * bytesPerBlock, - rowsPerImage: srcBlockRowsPerImage, + rowsPerImage: srcBlockRowsPerImage }, srcTextureSizeAtLevel ); @@ -131,7 +146,6 @@ class F extends TextureTestMixin(GPUTest) { dimension, dstCopyLevel ); - const minWidth = Math.min(srcTextureSizeAtLevel.width, dstTextureSizeAtLevel.width); const minHeight = Math.min(srcTextureSizeAtLevel.height, dstTextureSizeAtLevel.height); const minDepth = Math.min( @@ -142,43 +156,40 @@ class F extends TextureTestMixin(GPUTest) { const appliedSrcOffset = { x: Math.min(copyBoxOffsets.srcOffset.x * blockWidth, minWidth), y: Math.min(copyBoxOffsets.srcOffset.y * blockHeight, minHeight), - z: Math.min(copyBoxOffsets.srcOffset.z, minDepth), + z: Math.min(copyBoxOffsets.srcOffset.z, minDepth) }; const appliedDstOffset = { x: Math.min(copyBoxOffsets.dstOffset.x * blockWidth, minWidth), y: Math.min(copyBoxOffsets.dstOffset.y * blockHeight, minHeight), - z: Math.min(copyBoxOffsets.dstOffset.z, minDepth), + z: Math.min(copyBoxOffsets.dstOffset.z, minDepth) }; const appliedCopyWidth = Math.max( minWidth + - copyBoxOffsets.copyExtent.width * blockWidth - - Math.max(appliedSrcOffset.x, appliedDstOffset.x), + copyBoxOffsets.copyExtent.width * blockWidth - + Math.max(appliedSrcOffset.x, appliedDstOffset.x), 0 ); - const appliedCopyHeight = Math.max( minHeight + - copyBoxOffsets.copyExtent.height * blockHeight - - Math.max(appliedSrcOffset.y, appliedDstOffset.y), + copyBoxOffsets.copyExtent.height * blockHeight - + Math.max(appliedSrcOffset.y, appliedDstOffset.y), 0 ); - assert(appliedCopyWidth % blockWidth === 0 && appliedCopyHeight % blockHeight === 0); const appliedCopyDepth = Math.max( 0, minDepth + - copyBoxOffsets.copyExtent.depthOrArrayLayers - - Math.max(appliedSrcOffset.z, appliedDstOffset.z) + copyBoxOffsets.copyExtent.depthOrArrayLayers - + Math.max(appliedSrcOffset.z, appliedDstOffset.z) ); - assert(appliedCopyDepth >= 0); const appliedSize = { width: appliedCopyWidth, height: appliedCopyHeight, - depthOrArrayLayers: appliedCopyDepth, + depthOrArrayLayers: appliedCopyDepth }; { @@ -188,7 +199,6 @@ class F extends TextureTestMixin(GPUTest) { { texture: dstTexture, mipLevel: dstCopyLevel, origin: appliedDstOffset }, appliedSize ); - this.device.queue.submit([encoder.finish()]); } @@ -196,9 +206,9 @@ class F extends TextureTestMixin(GPUTest) { const dstBlockRowsPerImage = dstTextureSizeAtLevel.height / blockHeight; const bytesPerDstAlignedBlockRow = align(dstBlocksPerRow * bytesPerBlock, 256); const dstBufferSize = - (dstBlockRowsPerImage * dstTextureSizeAtLevel.depthOrArrayLayers - 1) * - bytesPerDstAlignedBlockRow + - align(dstBlocksPerRow * bytesPerBlock, 4); + (dstBlockRowsPerImage * dstTextureSizeAtLevel.depthOrArrayLayers - 1) * + bytesPerDstAlignedBlockRow + + align(dstBlocksPerRow * bytesPerBlock, 4); if (isCompressedTextureFormat(dstTexture.format) && this.isCompatibility) { assert(viewCompatible(srcFormat, dstFormat)); @@ -209,7 +219,7 @@ class F extends TextureTestMixin(GPUTest) { size: [dstTexture.width, dstTexture.height, dstTexture.depthOrArrayLayers], mipLevelCount: dstTexture.mipLevelCount, format: dstTexture.format, - usage: dstTexture.usage, + usage: dstTexture.usage }); const expectedData = new Uint8Array(dstBufferSize); @@ -220,20 +230,20 @@ class F extends TextureTestMixin(GPUTest) { dataLayout: { bytesPerRow: srcBlocksPerRow * bytesPerBlock, rowsPerImage: srcBlockRowsPerImage, - offset: 0, + offset: 0 }, origin: appliedSrcOffset, - data: initialSrcData, + data: initialSrcData }, dest: { dataLayout: { bytesPerRow: dstBlocksPerRow * bytesPerBlock, rowsPerImage: dstBlockRowsPerImage, - offset: 0, + offset: 0 }, origin: appliedDstOffset, - data: expectedData, - }, + data: expectedData + } }); // Upload `expectedData` to `expectedTexture`. If `copyTextureToTexture` @@ -243,7 +253,7 @@ class F extends TextureTestMixin(GPUTest) { expectedData, { bytesPerRow: dstBlocksPerRow * bytesPerBlock, - rowsPerImage: dstBlockRowsPerImage, + rowsPerImage: dstBlockRowsPerImage }, dstTextureSizeAtLevel ); @@ -255,14 +265,13 @@ class F extends TextureTestMixin(GPUTest) { appliedDstOffset, appliedSize ); - return; } // Copy the whole content of dstTexture at dstCopyLevel to dstBuffer. const dstBufferDesc = { size: dstBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }; const dstBuffer = this.device.createBuffer(dstBufferDesc); this.trackForCleanup(dstBuffer); @@ -274,11 +283,10 @@ class F extends TextureTestMixin(GPUTest) { { buffer: dstBuffer, bytesPerRow: bytesPerDstAlignedBlockRow, - rowsPerImage: dstBlockRowsPerImage, + rowsPerImage: dstBlockRowsPerImage }, dstTextureSizeAtLevel ); - this.device.queue.submit([encoder.finish()]); } @@ -293,13 +301,14 @@ class F extends TextureTestMixin(GPUTest) { const srcCopyOffsetInBlocks = { x: appliedSrcOffset.x / blockWidth, y: appliedSrcOffset.y / blockHeight, - z: appliedSrcOffset.z, + z: appliedSrcOffset.z }; const dstCopyOffsetInBlocks = { x: appliedDstOffset.x / blockWidth, y: appliedDstOffset.y / blockHeight, - z: appliedDstOffset.z, + z: appliedDstOffset.z }; + const bytesInRow = appliedCopyBlocksPerRow * bytesPerBlock; for (let z = 0; z < appliedCopyDepth; ++z) { const srcOffsetZ = srcCopyOffsetInBlocks.z + z; @@ -307,17 +316,16 @@ class F extends TextureTestMixin(GPUTest) { for (let y = 0; y < appliedCopyBlockRowsPerImage; ++y) { const dstOffsetYInBlocks = dstCopyOffsetInBlocks.y + y; const expectedDataWithPaddingOffset = - bytesPerDstAlignedBlockRow * (dstBlockRowsPerImage * dstOffsetZ + dstOffsetYInBlocks) + - dstCopyOffsetInBlocks.x * bytesPerBlock; + bytesPerDstAlignedBlockRow * (dstBlockRowsPerImage * dstOffsetZ + dstOffsetYInBlocks) + + dstCopyOffsetInBlocks.x * bytesPerBlock; const srcOffsetYInBlocks = srcCopyOffsetInBlocks.y + y; const expectedDataOffset = - bytesPerBlock * - srcBlocksPerRow * - (srcBlockRowsPerImage * srcOffsetZ + srcOffsetYInBlocks) + - srcCopyOffsetInBlocks.x * bytesPerBlock; + bytesPerBlock * + srcBlocksPerRow * ( + srcBlockRowsPerImage * srcOffsetZ + srcOffsetYInBlocks) + + srcCopyOffsetInBlocks.x * bytesPerBlock; - const bytesInRow = appliedCopyBlocksPerRow * bytesPerBlock; memcpy( { src: expectedUint8Data, start: expectedDataOffset, length: bytesInRow }, { dst: expectedUint8DataWithPadding, start: expectedDataWithPaddingOffset } @@ -325,61 +333,84 @@ class F extends TextureTestMixin(GPUTest) { } } - let alternateExpectedData = expectedUint8DataWithPadding; - // For 8-byte snorm formats, allow an alternative encoding of -1. - // MAINTENANCE_TODO: Use textureContentIsOKByT2B with TexelView. - if (srcFormat.includes('snorm')) { - switch (srcFormat) { - case 'r8snorm': - case 'rg8snorm': - case 'rgba8snorm': - alternateExpectedData = alternateExpectedData.slice(); - for (let i = 0; i < alternateExpectedData.length; ++i) { - if (alternateExpectedData[i] === 128) { - alternateExpectedData[i] = 129; - } else if (alternateExpectedData[i] === 129) { - alternateExpectedData[i] = 128; - } - } - break; - case 'bc4-r-snorm': - case 'bc5-rg-snorm': - case 'eac-r11snorm': - case 'eac-rg11snorm': - break; - default: - unreachable(); - } + if (isCompressedTextureFormat(dstFormat)) { + this.expectGPUBufferValuesPassCheck( + dstBuffer, + (vals) => checkElementsEqual(vals, expectedUint8DataWithPadding), + { + srcByteOffset: 0, + type: Uint8Array, + typedLength: expectedUint8DataWithPadding.length + } + ); + return; } + assert(isEncodableTextureformat(dstFormat)); + const encodableDstFormat = dstFormat; + // Verify the content of the whole subresource of dstTexture at dstCopyLevel (in dstBuffer) is expected. - this.expectGPUBufferValuesPassCheck( - dstBuffer, - alternateExpectedData === expectedUint8DataWithPadding - ? vals => checkElementsEqual(vals, expectedUint8DataWithPadding) - : vals => - checkElementsEqualEither(vals, [expectedUint8DataWithPadding, alternateExpectedData]), - { - srcByteOffset: 0, - type: Uint8Array, - typedLength: expectedUint8DataWithPadding.length, + const checkByTextureFormat = (actual) => { + const zero = { x: 0, y: 0, z: 0 }; + + const actTexelView = TexelView.fromTextureDataByReference(encodableDstFormat, actual, { + bytesPerRow: bytesInRow, + rowsPerImage: dstBlockRowsPerImage, + subrectOrigin: zero, + subrectSize: dstTextureSizeAtLevel + }); + const expTexelView = TexelView.fromTextureDataByReference( + encodableDstFormat, + expectedUint8DataWithPadding, + { + bytesPerRow: bytesInRow, + rowsPerImage: dstBlockRowsPerImage, + subrectOrigin: zero, + subrectSize: dstTextureSizeAtLevel + } + ); + + const failedPixelsMessage = findFailedPixels( + encodableDstFormat, + zero, + dstTextureSizeAtLevel, + { actTexelView, expTexelView }, + { + maxFractionalDiff: 0 + } + ); + + if (failedPixelsMessage !== undefined) { + const msg = 'Texture level had unexpected contents:\n' + failedPixelsMessage; + return new ErrorWithExtra(msg, () => ({ + expTexelView, + actTexelView + })); } - ); + + return undefined; + }; + + this.expectGPUBufferValuesPassCheck(dstBuffer, checkByTextureFormat, { + srcByteOffset: 0, + type: Uint8Array, + typedLength: expectedUint8DataWithPadding.length + }); } InitializeStencilAspect( - sourceTexture, - initialStencilData, - srcCopyLevel, - srcCopyBaseArrayLayer, - copySize - ) { + sourceTexture, + initialStencilData, + srcCopyLevel, + srcCopyBaseArrayLayer, + copySize) + { this.queue.writeTexture( { texture: sourceTexture, mipLevel: srcCopyLevel, aspect: 'stencil-only', - origin: { x: 0, y: 0, z: srcCopyBaseArrayLayer }, + origin: { x: 0, y: 0, z: srcCopyBaseArrayLayer } }, initialStencilData, { bytesPerRow: copySize[0], rowsPerImage: copySize[1] }, @@ -388,12 +419,12 @@ class F extends TextureTestMixin(GPUTest) { } VerifyStencilAspect( - destinationTexture, - initialStencilData, - dstCopyLevel, - dstCopyBaseArrayLayer, - copySize - ) { + destinationTexture, + initialStencilData, + dstCopyLevel, + dstCopyBaseArrayLayer, + copySize) + { const bytesPerRow = align(copySize[0], kBytesPerRowAlignment); const rowsPerImage = copySize[1]; const outputBufferSize = align( @@ -401,14 +432,13 @@ class F extends TextureTestMixin(GPUTest) { layout: { bytesPerRow, rowsPerImage }, format: 'stencil8', copySize, - method: 'CopyT2B', + method: 'CopyT2B' }), kBufferSizeAlignment ); - const outputBuffer = this.device.createBuffer({ size: outputBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); this.trackForCleanup(outputBuffer); const encoder = this.device.createCommandEncoder(); @@ -417,12 +447,11 @@ class F extends TextureTestMixin(GPUTest) { texture: destinationTexture, aspect: 'stencil-only', mipLevel: dstCopyLevel, - origin: { x: 0, y: 0, z: dstCopyBaseArrayLayer }, + origin: { x: 0, y: 0, z: dstCopyBaseArrayLayer } }, { buffer: outputBuffer, bytesPerRow, rowsPerImage }, copySize ); - this.queue.submit([encoder.finish()]); const expectedStencilData = new Uint8Array(outputBufferSize); @@ -441,7 +470,11 @@ class F extends TextureTestMixin(GPUTest) { this.expectGPUBufferValuesEqual(outputBuffer, expectedStencilData); } - GetRenderPipelineForT2TCopyWithDepthTests(bindGroupLayout, hasColorAttachment, depthStencil) { + GetRenderPipelineForT2TCopyWithDepthTests( + bindGroupLayout, + hasColorAttachment, + depthStencil) + { const renderPipelineDescriptor = { layout: this.device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }), vertex: { @@ -462,11 +495,11 @@ class F extends TextureTestMixin(GPUTest) { vec3( 1.0, 1.0, 1.0), vec3( 1.0, -1.0, depthValue)); return vec4(pos[VertexIndex], 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, - depthStencil, + depthStencil }; if (hasColorAttachment) { renderPipelineDescriptor.fragment = { @@ -475,10 +508,10 @@ class F extends TextureTestMixin(GPUTest) { @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }; } return this.device.createRenderPipeline(renderPipelineDescriptor); @@ -487,57 +520,65 @@ class F extends TextureTestMixin(GPUTest) { GetBindGroupLayoutForT2TCopyWithDepthTests() { return this.device.createBindGroupLayout({ entries: [ - { - binding: 0, - visibility: GPUShaderStage.VERTEX, - buffer: { - type: 'uniform', - minBindingSize: 4, - hasDynamicOffset: true, - }, - }, - ], + { + binding: 0, + visibility: GPUShaderStage.VERTEX, + buffer: { + type: 'uniform', + minBindingSize: 4, + hasDynamicOffset: true + } + }] + }); } - GetBindGroupForT2TCopyWithDepthTests(bindGroupLayout, totalCopyArrayLayers) { + GetBindGroupForT2TCopyWithDepthTests( + bindGroupLayout, + totalCopyArrayLayers) + { // Prepare the uniform buffer that contains all the copy layers to generate different depth // values for different copy layers. assert(totalCopyArrayLayers > 0); const uniformBufferSize = kMinDynamicBufferOffsetAlignment * (totalCopyArrayLayers - 1) + 4; const uniformBufferData = new Float32Array(uniformBufferSize / 4); for (let i = 1; i < totalCopyArrayLayers; ++i) { - uniformBufferData[(kMinDynamicBufferOffsetAlignment / 4) * i] = i; + uniformBufferData[kMinDynamicBufferOffsetAlignment / 4 * i] = i; } const uniformBuffer = makeBufferWithContents( this.device, uniformBufferData, GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM ); - return this.device.createBindGroup({ layout: bindGroupLayout, entries: [ - { - binding: 0, - resource: { - buffer: uniformBuffer, - size: 4, - }, - }, - ], + { + binding: 0, + resource: { + buffer: uniformBuffer, + size: 4 + } + }] + }); } /** Initialize the depth aspect of sourceTexture with draw calls */ - InitializeDepthAspect(sourceTexture, depthFormat, srcCopyLevel, srcCopyBaseArrayLayer, copySize) { + InitializeDepthAspect( + sourceTexture, + depthFormat, + srcCopyLevel, + srcCopyBaseArrayLayer, + copySize) + { // Prepare a renderPipeline with depthCompareFunction == 'always' and depthWriteEnabled == true // for the initializations of the depth attachment. const bindGroupLayout = this.GetBindGroupLayoutForT2TCopyWithDepthTests(); const renderPipeline = this.GetRenderPipelineForT2TCopyWithDepthTests(bindGroupLayout, false, { format: depthFormat, depthWriteEnabled: true, - depthCompare: 'always', + depthCompare: 'always' }); const bindGroup = this.GetBindGroupForT2TCopyWithDepthTests(bindGroupLayout, copySize[2]); @@ -551,14 +592,14 @@ class F extends TextureTestMixin(GPUTest) { baseArrayLayer: srcCopyLayer + srcCopyBaseArrayLayer, arrayLayerCount: 1, baseMipLevel: srcCopyLevel, - mipLevelCount: 1, + mipLevelCount: 1 }), depthClearValue: 0.0, depthLoadOp: 'clear', depthStoreOp: 'store', stencilLoadOp: hasStencil ? 'load' : undefined, - stencilStoreOp: hasStencil ? 'store' : undefined, - }, + stencilStoreOp: hasStencil ? 'store' : undefined + } }); renderPass.setBindGroup(0, bindGroup, [srcCopyLayer * kMinDynamicBufferOffsetAlignment]); renderPass.setPipeline(renderPipeline); @@ -569,19 +610,19 @@ class F extends TextureTestMixin(GPUTest) { } VerifyDepthAspect( - destinationTexture, - depthFormat, - dstCopyLevel, - dstCopyBaseArrayLayer, - copySize - ) { + destinationTexture, + depthFormat, + dstCopyLevel, + dstCopyBaseArrayLayer, + copySize) + { // Prepare a renderPipeline with depthCompareFunction == 'equal' and depthWriteEnabled == false // for the comparison of the depth attachment. const bindGroupLayout = this.GetBindGroupLayoutForT2TCopyWithDepthTests(); const renderPipeline = this.GetRenderPipelineForT2TCopyWithDepthTests(bindGroupLayout, true, { format: depthFormat, depthWriteEnabled: false, - depthCompare: 'equal', + depthCompare: 'equal' }); const bindGroup = this.GetBindGroupForT2TCopyWithDepthTests(bindGroupLayout, copySize[2]); @@ -589,10 +630,9 @@ class F extends TextureTestMixin(GPUTest) { this.device.createTexture({ format: 'rgba8unorm', size: copySize, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }) ); - const hasStencil = kTextureFormatInfo[destinationTexture.format].stencil; const encoder = this.device.createCommandEncoder(); for (let dstCopyLayer = 0; dstCopyLayer < copySize[2]; ++dstCopyLayer) { @@ -600,29 +640,28 @@ class F extends TextureTestMixin(GPUTest) { // the render pass. const renderPass = encoder.beginRenderPass({ colorAttachments: [ - { - view: outputColorTexture.createView({ - baseArrayLayer: dstCopyLayer, - arrayLayerCount: 1, - }), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: outputColorTexture.createView({ + baseArrayLayer: dstCopyLayer, + arrayLayerCount: 1 + }), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }], depthStencilAttachment: { view: destinationTexture.createView({ baseArrayLayer: dstCopyLayer + dstCopyBaseArrayLayer, arrayLayerCount: 1, baseMipLevel: dstCopyLevel, - mipLevelCount: 1, + mipLevelCount: 1 }), depthLoadOp: 'load', depthStoreOp: 'store', stencilLoadOp: hasStencil ? 'load' : undefined, - stencilStoreOp: hasStencil ? 'store' : undefined, - }, + stencilStoreOp: hasStencil ? 'store' : undefined + } }); renderPass.setBindGroup(0, bindGroup, [dstCopyLayer * kMinDynamicBufferOffsetAlignment]); renderPass.setPipeline(renderPipeline); @@ -633,113 +672,113 @@ class F extends TextureTestMixin(GPUTest) { this.expectSingleColor(outputColorTexture, 'rgba8unorm', { size: copySize, - exp: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, + exp: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 } }); } } const kCopyBoxOffsetsForWholeDepth = [ - // From (0, 0) of src to (0, 0) of dst. - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - // From (0, 0) of src to (blockWidth, 0) of dst. - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 1, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - // From (0, 0) of src to (0, blockHeight) of dst. - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 1, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - // From (blockWidth, 0) of src to (0, 0) of dst. - { - srcOffset: { x: 1, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - // From (0, blockHeight) of src to (0, 0) of dst. - { - srcOffset: { x: 0, y: 1, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - // From (blockWidth, 0) of src to (0, 0) of dst, and the copy extent will not cover the last - // texel block column of both source and destination texture. - { - srcOffset: { x: 1, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: -1, height: 0, depthOrArrayLayers: 0 }, - }, - // From (0, blockHeight) of src to (0, 0) of dst, and the copy extent will not cover the last - // texel block row of both source and destination texture. - { - srcOffset: { x: 0, y: 1, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: -1, depthOrArrayLayers: 0 }, - }, -]; +// From (0, 0) of src to (0, 0) of dst. +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}, +// From (0, 0) of src to (blockWidth, 0) of dst. +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 1, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}, +// From (0, 0) of src to (0, blockHeight) of dst. +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 1, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}, +// From (blockWidth, 0) of src to (0, 0) of dst. +{ + srcOffset: { x: 1, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}, +// From (0, blockHeight) of src to (0, 0) of dst. +{ + srcOffset: { x: 0, y: 1, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}, +// From (blockWidth, 0) of src to (0, 0) of dst, and the copy extent will not cover the last +// texel block column of both source and destination texture. +{ + srcOffset: { x: 1, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: -1, height: 0, depthOrArrayLayers: 0 } +}, +// From (0, blockHeight) of src to (0, 0) of dst, and the copy extent will not cover the last +// texel block row of both source and destination texture. +{ + srcOffset: { x: 0, y: 1, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: -1, depthOrArrayLayers: 0 } +}]; + const kCopyBoxOffsetsFor2DArrayTextures = [ - // Copy the whole array slices from the source texture to the destination texture. - // The copy extent will cover the whole subresource of either source or the - // destination texture - ...kCopyBoxOffsetsForWholeDepth, +// Copy the whole array slices from the source texture to the destination texture. +// The copy extent will cover the whole subresource of either source or the +// destination texture +...kCopyBoxOffsetsForWholeDepth, + +// Copy 1 texture slice from the 1st slice of the source texture to the 1st slice of the +// destination texture. +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -2 } +}, +// Copy 1 texture slice from the 2nd slice of the source texture to the 2nd slice of the +// destination texture. +{ + srcOffset: { x: 0, y: 0, z: 1 }, + dstOffset: { x: 0, y: 0, z: 1 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -3 } +}, +// Copy 1 texture slice from the 1st slice of the source texture to the 2nd slice of the +// destination texture. +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 1 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -1 } +}, +// Copy 1 texture slice from the 2nd slice of the source texture to the 1st slice of the +// destination texture. +{ + srcOffset: { x: 0, y: 0, z: 1 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -1 } +}, +// Copy 2 texture slices from the 1st slice of the source texture to the 1st slice of the +// destination texture. +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -3 } +}, +// Copy 3 texture slices from the 2nd slice of the source texture to the 2nd slice of the +// destination texture. +{ + srcOffset: { x: 0, y: 0, z: 1 }, + dstOffset: { x: 0, y: 0, z: 1 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -1 } +}]; - // Copy 1 texture slice from the 1st slice of the source texture to the 1st slice of the - // destination texture. - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -2 }, - }, - // Copy 1 texture slice from the 2nd slice of the source texture to the 2nd slice of the - // destination texture. - { - srcOffset: { x: 0, y: 0, z: 1 }, - dstOffset: { x: 0, y: 0, z: 1 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -3 }, - }, - // Copy 1 texture slice from the 1st slice of the source texture to the 2nd slice of the - // destination texture. - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 1 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -1 }, - }, - // Copy 1 texture slice from the 2nd slice of the source texture to the 1st slice of the - // destination texture. - { - srcOffset: { x: 0, y: 0, z: 1 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -1 }, - }, - // Copy 2 texture slices from the 1st slice of the source texture to the 1st slice of the - // destination texture. - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -3 }, - }, - // Copy 3 texture slices from the 2nd slice of the source texture to the 2nd slice of the - // destination texture. - { - srcOffset: { x: 0, y: 0, z: 1 }, - dstOffset: { x: 0, y: 0, z: 1 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -1 }, - }, -]; export const g = makeTestGroup(F); -g.test('color_textures,non_compressed,non_array') - .desc( - ` +g.test('color_textures,non_compressed,non_array'). +desc( + ` Validate the correctness of the copy by filling the srcTexture with testable data and any non-compressed color format supported by WebGPU, doing CopyTextureToTexture() copy, and verifying the content of the whole dstTexture. @@ -753,446 +792,446 @@ g.test('color_textures,non_compressed,non_array') Tests for all pairs of valid source/destination formats, and all texture dimensions. ` - ) - .params(u => - u - .combine('srcFormat', kRegularTextureFormats) - .combine('dstFormat', kRegularTextureFormats) - .filter(({ srcFormat, dstFormat }) => { - const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; - const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; - return ( - srcFormat === dstFormat || - (srcBaseFormat !== undefined && - dstBaseFormat !== undefined && - srcBaseFormat === dstBaseFormat) - ); - }) - .combine('dimension', kTextureDimensions) - .filter( - ({ dimension, srcFormat, dstFormat }) => - textureDimensionAndFormatCompatible(dimension, srcFormat) && - textureDimensionAndFormatCompatible(dimension, dstFormat) - ) - .beginSubcases() - .expandWithParams(p => { - const params = [ - { - srcTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, - dstTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, - }, - { - srcTextureSize: { width: 31, height: 33, depthOrArrayLayers: 1 }, - dstTextureSize: { width: 31, height: 33, depthOrArrayLayers: 1 }, - }, - { - srcTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, - dstTextureSize: { width: 64, height: 64, depthOrArrayLayers: 1 }, - }, - { - srcTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, - dstTextureSize: { width: 63, height: 61, depthOrArrayLayers: 1 }, - }, - ]; +). +params((u) => +u. +combine('srcFormat', kRegularTextureFormats). +combine('dstFormat', kRegularTextureFormats). +filter(({ srcFormat, dstFormat }) => { + const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; + const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; + return ( + srcFormat === dstFormat || + srcBaseFormat !== undefined && + dstBaseFormat !== undefined && + srcBaseFormat === dstBaseFormat); - if (p.dimension === '1d') { - for (const param of params) { - param.srcTextureSize.height = 1; - param.dstTextureSize.height = 1; - } - } +}). +combine('dimension', kTextureDimensions). +filter( + ({ dimension, srcFormat, dstFormat }) => + textureDimensionAndFormatCompatible(dimension, srcFormat) && + textureDimensionAndFormatCompatible(dimension, dstFormat) +). +beginSubcases(). +expandWithParams((p) => { + const params = [ + { + srcTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, + dstTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 } + }, + { + srcTextureSize: { width: 31, height: 33, depthOrArrayLayers: 1 }, + dstTextureSize: { width: 31, height: 33, depthOrArrayLayers: 1 } + }, + { + srcTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, + dstTextureSize: { width: 64, height: 64, depthOrArrayLayers: 1 } + }, + { + srcTextureSize: { width: 32, height: 32, depthOrArrayLayers: 1 }, + dstTextureSize: { width: 63, height: 61, depthOrArrayLayers: 1 } + }]; - return params; - }) - .combine('copyBoxOffsets', kCopyBoxOffsetsForWholeDepth) - .unless( - p => - p.dimension === '1d' && - (p.copyBoxOffsets.copyExtent.height !== 0 || - p.copyBoxOffsets.srcOffset.y !== 0 || - p.copyBoxOffsets.dstOffset.y !== 0) - ) - .combine('srcCopyLevel', [0, 3]) - .combine('dstCopyLevel', [0, 3]) - .unless(p => p.dimension === '1d' && (p.srcCopyLevel !== 0 || p.dstCopyLevel !== 0)) - ) - .fn(t => { - const { - dimension, - srcTextureSize, - dstTextureSize, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel, - } = t.params; + if (p.dimension === '1d') { + for (const param of params) { + param.srcTextureSize.height = 1; + param.dstTextureSize.height = 1; + } + } - t.DoCopyTextureToTextureTest( - dimension, - srcTextureSize, - dstTextureSize, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel - ); - }); + return params; +}). +combine('copyBoxOffsets', kCopyBoxOffsetsForWholeDepth). +unless( + (p) => + p.dimension === '1d' && ( + p.copyBoxOffsets.copyExtent.height !== 0 || + p.copyBoxOffsets.srcOffset.y !== 0 || + p.copyBoxOffsets.dstOffset.y !== 0) +). +combine('srcCopyLevel', [0, 3]). +combine('dstCopyLevel', [0, 3]). +unless((p) => p.dimension === '1d' && (p.srcCopyLevel !== 0 || p.dstCopyLevel !== 0)) +). +fn((t) => { + const { + dimension, + srcTextureSize, + dstTextureSize, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + } = t.params; -g.test('color_textures,compressed,non_array') - .desc( - ` + t.DoCopyTextureToTextureTest( + dimension, + srcTextureSize, + dstTextureSize, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + ); +}); + +g.test('color_textures,compressed,non_array'). +desc( + ` Validate the correctness of the copy by filling the srcTexture with testable data and any compressed color format supported by WebGPU, doing CopyTextureToTexture() copy, and verifying the content of the whole dstTexture. Tests for all pairs of valid source/destination formats, and all texture dimensions. ` - ) - .params(u => - u - .combine('srcFormat', kCompressedTextureFormats) - .combine('dstFormat', kCompressedTextureFormats) - .filter(({ srcFormat, dstFormat }) => { - const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; - const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; - return ( - srcFormat === dstFormat || - (srcBaseFormat !== undefined && - dstBaseFormat !== undefined && - srcBaseFormat === dstBaseFormat) - ); - }) - .combine('dimension', kTextureDimensions) - .filter( - ({ dimension, srcFormat, dstFormat }) => - textureDimensionAndFormatCompatible(dimension, srcFormat) && - textureDimensionAndFormatCompatible(dimension, dstFormat) - ) - .beginSubcases() - .combine('textureSizeInBlocks', [ - // The heights and widths in blocks are all power of 2 - { src: { width: 16, height: 8 }, dst: { width: 16, height: 8 } }, - // The virtual width of the source texture at mipmap level 2 (15) is not a multiple of 4 blocks - { src: { width: 15, height: 8 }, dst: { width: 16, height: 8 } }, - // The virtual width of the destination texture at mipmap level 2 (15) is not a multiple - // of 4 blocks - { src: { width: 16, height: 8 }, dst: { width: 15, height: 8 } }, - // The virtual height of the source texture at mipmap level 2 (13) is not a multiple of 4 blocks - { src: { width: 16, height: 13 }, dst: { width: 16, height: 8 } }, - // The virtual height of the destination texture at mipmap level 2 (13) is not a - // multiple of 4 blocks - { src: { width: 16, height: 8 }, dst: { width: 16, height: 13 } }, - // None of the widths or heights in blocks are power of 2 - { src: { width: 15, height: 13 }, dst: { width: 15, height: 13 } }, - ]) - .combine('copyBoxOffsets', kCopyBoxOffsetsForWholeDepth) - .combine('srcCopyLevel', [0, 2]) - .combine('dstCopyLevel', [0, 2]) - ) - .beforeAllSubcases(t => { - const { srcFormat, dstFormat } = t.params; - t.skipIfCopyTextureToTextureNotSupportedForFormat(srcFormat, dstFormat); - t.selectDeviceOrSkipTestCase([ - kTextureFormatInfo[srcFormat].feature, - kTextureFormatInfo[dstFormat].feature, - ]); - }) - .fn(t => { - const { - dimension, - textureSizeInBlocks, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel, - } = t.params; - const srcBlockWidth = kTextureFormatInfo[srcFormat].blockWidth; - const srcBlockHeight = kTextureFormatInfo[srcFormat].blockHeight; - const dstBlockWidth = kTextureFormatInfo[dstFormat].blockWidth; - const dstBlockHeight = kTextureFormatInfo[dstFormat].blockHeight; +). +params((u) => +u. +combine('srcFormat', kCompressedTextureFormats). +combine('dstFormat', kCompressedTextureFormats). +filter(({ srcFormat, dstFormat }) => { + const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; + const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; + return ( + srcFormat === dstFormat || + srcBaseFormat !== undefined && + dstBaseFormat !== undefined && + srcBaseFormat === dstBaseFormat); - t.DoCopyTextureToTextureTest( - dimension, - { - width: textureSizeInBlocks.src.width * srcBlockWidth, - height: textureSizeInBlocks.src.height * srcBlockHeight, - depthOrArrayLayers: 1, - }, - { - width: textureSizeInBlocks.dst.width * dstBlockWidth, - height: textureSizeInBlocks.dst.height * dstBlockHeight, - depthOrArrayLayers: 1, - }, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel - ); - }); +}). +combine('dimension', kTextureDimensions). +filter( + ({ dimension, srcFormat, dstFormat }) => + textureDimensionAndFormatCompatible(dimension, srcFormat) && + textureDimensionAndFormatCompatible(dimension, dstFormat) +). +beginSubcases(). +combine('textureSizeInBlocks', [ +// The heights and widths in blocks are all power of 2 +{ src: { width: 16, height: 8 }, dst: { width: 16, height: 8 } }, +// The virtual width of the source texture at mipmap level 2 (15) is not a multiple of 4 blocks +{ src: { width: 15, height: 8 }, dst: { width: 16, height: 8 } }, +// The virtual width of the destination texture at mipmap level 2 (15) is not a multiple +// of 4 blocks +{ src: { width: 16, height: 8 }, dst: { width: 15, height: 8 } }, +// The virtual height of the source texture at mipmap level 2 (13) is not a multiple of 4 blocks +{ src: { width: 16, height: 13 }, dst: { width: 16, height: 8 } }, +// The virtual height of the destination texture at mipmap level 2 (13) is not a +// multiple of 4 blocks +{ src: { width: 16, height: 8 }, dst: { width: 16, height: 13 } }, +// None of the widths or heights in blocks are power of 2 +{ src: { width: 15, height: 13 }, dst: { width: 15, height: 13 } }] +). +combine('copyBoxOffsets', kCopyBoxOffsetsForWholeDepth). +combine('srcCopyLevel', [0, 2]). +combine('dstCopyLevel', [0, 2]) +). +beforeAllSubcases((t) => { + const { srcFormat, dstFormat } = t.params; + t.skipIfCopyTextureToTextureNotSupportedForFormat(srcFormat, dstFormat); + t.selectDeviceOrSkipTestCase([ + kTextureFormatInfo[srcFormat].feature, + kTextureFormatInfo[dstFormat].feature] + ); +}). +fn((t) => { + const { + dimension, + textureSizeInBlocks, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + } = t.params; + const srcBlockWidth = kTextureFormatInfo[srcFormat].blockWidth; + const srcBlockHeight = kTextureFormatInfo[srcFormat].blockHeight; + const dstBlockWidth = kTextureFormatInfo[dstFormat].blockWidth; + const dstBlockHeight = kTextureFormatInfo[dstFormat].blockHeight; -g.test('color_textures,non_compressed,array') - .desc( - ` + t.DoCopyTextureToTextureTest( + dimension, + { + width: textureSizeInBlocks.src.width * srcBlockWidth, + height: textureSizeInBlocks.src.height * srcBlockHeight, + depthOrArrayLayers: 1 + }, + { + width: textureSizeInBlocks.dst.width * dstBlockWidth, + height: textureSizeInBlocks.dst.height * dstBlockHeight, + depthOrArrayLayers: 1 + }, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + ); +}); + +g.test('color_textures,non_compressed,array'). +desc( + ` Validate the correctness of the texture-to-texture copy on 2D array textures by filling the srcTexture with testable data and any non-compressed color format supported by WebGPU, doing CopyTextureToTexture() copy, and verifying the content of the whole dstTexture. ` - ) - .params(u => - u - .combine('srcFormat', kRegularTextureFormats) - .combine('dstFormat', kRegularTextureFormats) - .filter(({ srcFormat, dstFormat }) => { - const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; - const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; - return ( - srcFormat === dstFormat || - (srcBaseFormat !== undefined && - dstBaseFormat !== undefined && - srcBaseFormat === dstBaseFormat) - ); - }) - .combine('dimension', ['2d', '3d']) - .filter( - ({ dimension, srcFormat, dstFormat }) => - textureDimensionAndFormatCompatible(dimension, srcFormat) && - textureDimensionAndFormatCompatible(dimension, dstFormat) - ) - .beginSubcases() - .combine('textureSize', [ - { - srcTextureSize: { width: 64, height: 32, depthOrArrayLayers: 5 }, - dstTextureSize: { width: 64, height: 32, depthOrArrayLayers: 5 }, - }, - { - srcTextureSize: { width: 31, height: 33, depthOrArrayLayers: 5 }, - dstTextureSize: { width: 31, height: 33, depthOrArrayLayers: 5 }, - }, - { - srcTextureSize: { width: 31, height: 32, depthOrArrayLayers: 33 }, - dstTextureSize: { width: 31, height: 32, depthOrArrayLayers: 33 }, - }, - ]) - .combine('copyBoxOffsets', kCopyBoxOffsetsFor2DArrayTextures) - .combine('srcCopyLevel', [0, 3]) - .combine('dstCopyLevel', [0, 3]) - ) - .fn(t => { - const { - dimension, - textureSize, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel, - } = t.params; +). +params((u) => +u. +combine('srcFormat', kRegularTextureFormats). +combine('dstFormat', kRegularTextureFormats). +filter(({ srcFormat, dstFormat }) => { + const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; + const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; + return ( + srcFormat === dstFormat || + srcBaseFormat !== undefined && + dstBaseFormat !== undefined && + srcBaseFormat === dstBaseFormat); - t.DoCopyTextureToTextureTest( - dimension, - textureSize.srcTextureSize, - textureSize.dstTextureSize, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel - ); - }); +}). +combine('dimension', ['2d', '3d']). +filter( + ({ dimension, srcFormat, dstFormat }) => + textureDimensionAndFormatCompatible(dimension, srcFormat) && + textureDimensionAndFormatCompatible(dimension, dstFormat) +). +beginSubcases(). +combine('textureSize', [ +{ + srcTextureSize: { width: 64, height: 32, depthOrArrayLayers: 5 }, + dstTextureSize: { width: 64, height: 32, depthOrArrayLayers: 5 } +}, +{ + srcTextureSize: { width: 31, height: 33, depthOrArrayLayers: 5 }, + dstTextureSize: { width: 31, height: 33, depthOrArrayLayers: 5 } +}, +{ + srcTextureSize: { width: 31, height: 32, depthOrArrayLayers: 33 }, + dstTextureSize: { width: 31, height: 32, depthOrArrayLayers: 33 } +}] +). -g.test('color_textures,compressed,array') - .desc( - ` +combine('copyBoxOffsets', kCopyBoxOffsetsFor2DArrayTextures). +combine('srcCopyLevel', [0, 3]). +combine('dstCopyLevel', [0, 3]) +). +fn((t) => { + const { + dimension, + textureSize, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + } = t.params; + + t.DoCopyTextureToTextureTest( + dimension, + textureSize.srcTextureSize, + textureSize.dstTextureSize, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + ); +}); + +g.test('color_textures,compressed,array'). +desc( + ` Validate the correctness of the texture-to-texture copy on 2D array textures by filling the srcTexture with testable data and any compressed color format supported by WebGPU, doing CopyTextureToTexture() copy, and verifying the content of the whole dstTexture. Tests for all pairs of valid source/destination formats, and all texture dimensions. ` - ) - .params(u => - u - .combine('srcFormat', kCompressedTextureFormats) - .combine('dstFormat', kCompressedTextureFormats) - .filter(({ srcFormat, dstFormat }) => { - const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; - const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; - return ( - srcFormat === dstFormat || - (srcBaseFormat !== undefined && - dstBaseFormat !== undefined && - srcBaseFormat === dstBaseFormat) - ); - }) - .combine('dimension', ['2d', '3d']) - .filter( - ({ dimension, srcFormat, dstFormat }) => - textureDimensionAndFormatCompatible(dimension, srcFormat) && - textureDimensionAndFormatCompatible(dimension, dstFormat) - ) - .beginSubcases() - .combine('textureSizeInBlocks', [ - // The heights and widths in blocks are all power of 2 - { src: { width: 2, height: 2 }, dst: { width: 2, height: 2 } }, - // None of the widths or heights in blocks are power of 2 - { src: { width: 15, height: 13 }, dst: { width: 15, height: 13 } }, - ]) - .combine('copyBoxOffsets', kCopyBoxOffsetsFor2DArrayTextures) - .combine('srcCopyLevel', [0, 2]) - .combine('dstCopyLevel', [0, 2]) - ) - .beforeAllSubcases(t => { - const { srcFormat, dstFormat } = t.params; - t.skipIfCopyTextureToTextureNotSupportedForFormat(srcFormat, dstFormat); - t.selectDeviceOrSkipTestCase([ - kTextureFormatInfo[srcFormat].feature, - kTextureFormatInfo[dstFormat].feature, - ]); - }) - .fn(t => { - const { - dimension, - textureSizeInBlocks, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel, - } = t.params; - const srcBlockWidth = kTextureFormatInfo[srcFormat].blockWidth; - const srcBlockHeight = kTextureFormatInfo[srcFormat].blockHeight; - const dstBlockWidth = kTextureFormatInfo[dstFormat].blockWidth; - const dstBlockHeight = kTextureFormatInfo[dstFormat].blockHeight; +). +params((u) => +u. +combine('srcFormat', kCompressedTextureFormats). +combine('dstFormat', kCompressedTextureFormats). +filter(({ srcFormat, dstFormat }) => { + const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat; + const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat; + return ( + srcFormat === dstFormat || + srcBaseFormat !== undefined && + dstBaseFormat !== undefined && + srcBaseFormat === dstBaseFormat); - t.DoCopyTextureToTextureTest( - dimension, - { - width: textureSizeInBlocks.src.width * srcBlockWidth, - height: textureSizeInBlocks.src.height * srcBlockHeight, - depthOrArrayLayers: 5, - }, - { - width: textureSizeInBlocks.dst.width * dstBlockWidth, - height: textureSizeInBlocks.dst.height * dstBlockHeight, - depthOrArrayLayers: 5, - }, - srcFormat, - dstFormat, - copyBoxOffsets, - srcCopyLevel, - dstCopyLevel - ); - }); +}). +combine('dimension', ['2d', '3d']). +filter( + ({ dimension, srcFormat, dstFormat }) => + textureDimensionAndFormatCompatible(dimension, srcFormat) && + textureDimensionAndFormatCompatible(dimension, dstFormat) +). +beginSubcases(). +combine('textureSizeInBlocks', [ +// The heights and widths in blocks are all power of 2 +{ src: { width: 2, height: 2 }, dst: { width: 2, height: 2 } }, +// None of the widths or heights in blocks are power of 2 +{ src: { width: 15, height: 13 }, dst: { width: 15, height: 13 } }] +). +combine('copyBoxOffsets', kCopyBoxOffsetsFor2DArrayTextures). +combine('srcCopyLevel', [0, 2]). +combine('dstCopyLevel', [0, 2]) +). +beforeAllSubcases((t) => { + const { srcFormat, dstFormat } = t.params; + t.skipIfCopyTextureToTextureNotSupportedForFormat(srcFormat, dstFormat); + t.selectDeviceOrSkipTestCase([ + kTextureFormatInfo[srcFormat].feature, + kTextureFormatInfo[dstFormat].feature] + ); +}). +fn((t) => { + const { + dimension, + textureSizeInBlocks, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + } = t.params; + const srcBlockWidth = kTextureFormatInfo[srcFormat].blockWidth; + const srcBlockHeight = kTextureFormatInfo[srcFormat].blockHeight; + const dstBlockWidth = kTextureFormatInfo[dstFormat].blockWidth; + const dstBlockHeight = kTextureFormatInfo[dstFormat].blockHeight; -g.test('zero_sized') - .desc( - ` + t.DoCopyTextureToTextureTest( + dimension, + { + width: textureSizeInBlocks.src.width * srcBlockWidth, + height: textureSizeInBlocks.src.height * srcBlockHeight, + depthOrArrayLayers: 5 + }, + { + width: textureSizeInBlocks.dst.width * dstBlockWidth, + height: textureSizeInBlocks.dst.height * dstBlockHeight, + depthOrArrayLayers: 5 + }, + srcFormat, + dstFormat, + copyBoxOffsets, + srcCopyLevel, + dstCopyLevel + ); +}); + +g.test('zero_sized'). +desc( + ` Validate the correctness of zero-sized copies (should be no-ops). - For each texture dimension. - Copies that are zero-sized in only one dimension {x, y, z}, each touching the {lower, upper} end of that dimension. ` - ) - .paramsSubcasesOnly(u => - u // - .combineWithParams([ - { dimension: '1d', textureSize: { width: 32, height: 1, depthOrArrayLayers: 1 } }, - { dimension: '2d', textureSize: { width: 32, height: 32, depthOrArrayLayers: 5 } }, - { dimension: '3d', textureSize: { width: 32, height: 32, depthOrArrayLayers: 5 } }, - ]) - .combine('copyBoxOffset', [ - // copyExtent.width === 0 - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: -64, height: 0, depthOrArrayLayers: 0 }, - }, - // copyExtent.width === 0 && srcOffset.x === textureWidth - { - srcOffset: { x: 64, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: -64, height: 0, depthOrArrayLayers: 0 }, - }, - // copyExtent.width === 0 && dstOffset.x === textureWidth - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 64, y: 0, z: 0 }, - copyExtent: { width: -64, height: 0, depthOrArrayLayers: 0 }, - }, - // copyExtent.height === 0 - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: -32, depthOrArrayLayers: 0 }, - }, - // copyExtent.height === 0 && srcOffset.y === textureHeight - { - srcOffset: { x: 0, y: 32, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: -32, depthOrArrayLayers: 0 }, - }, - // copyExtent.height === 0 && dstOffset.y === textureHeight - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 32, z: 0 }, - copyExtent: { width: 0, height: -32, depthOrArrayLayers: 0 }, - }, - // copyExtent.depthOrArrayLayers === 0 - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: -5 }, - }, - // copyExtent.depthOrArrayLayers === 0 && srcOffset.z === textureDepth - { - srcOffset: { x: 0, y: 0, z: 5 }, - dstOffset: { x: 0, y: 0, z: 0 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - // copyExtent.depthOrArrayLayers === 0 && dstOffset.z === textureDepth - { - srcOffset: { x: 0, y: 0, z: 0 }, - dstOffset: { x: 0, y: 0, z: 5 }, - copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 }, - }, - ]) - .unless( - p => - p.dimension === '1d' && - (p.copyBoxOffset.copyExtent.height !== 0 || - p.copyBoxOffset.srcOffset.y !== 0 || - p.copyBoxOffset.dstOffset.y !== 0) - ) - .combine('srcCopyLevel', [0, 3]) - .combine('dstCopyLevel', [0, 3]) - .unless(p => p.dimension === '1d' && (p.srcCopyLevel !== 0 || p.dstCopyLevel !== 0)) - ) - .fn(t => { - const { dimension, textureSize, copyBoxOffset, srcCopyLevel, dstCopyLevel } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combineWithParams([ +{ dimension: '1d', textureSize: { width: 32, height: 1, depthOrArrayLayers: 1 } }, +{ dimension: '2d', textureSize: { width: 32, height: 32, depthOrArrayLayers: 5 } }, +{ dimension: '3d', textureSize: { width: 32, height: 32, depthOrArrayLayers: 5 } }] +). +combine('copyBoxOffset', [ +// copyExtent.width === 0 +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: -64, height: 0, depthOrArrayLayers: 0 } +}, +// copyExtent.width === 0 && srcOffset.x === textureWidth +{ + srcOffset: { x: 64, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: -64, height: 0, depthOrArrayLayers: 0 } +}, +// copyExtent.width === 0 && dstOffset.x === textureWidth +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 64, y: 0, z: 0 }, + copyExtent: { width: -64, height: 0, depthOrArrayLayers: 0 } +}, +// copyExtent.height === 0 +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: -32, depthOrArrayLayers: 0 } +}, +// copyExtent.height === 0 && srcOffset.y === textureHeight +{ + srcOffset: { x: 0, y: 32, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: -32, depthOrArrayLayers: 0 } +}, +// copyExtent.height === 0 && dstOffset.y === textureHeight +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 32, z: 0 }, + copyExtent: { width: 0, height: -32, depthOrArrayLayers: 0 } +}, +// copyExtent.depthOrArrayLayers === 0 +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: -5 } +}, +// copyExtent.depthOrArrayLayers === 0 && srcOffset.z === textureDepth +{ + srcOffset: { x: 0, y: 0, z: 5 }, + dstOffset: { x: 0, y: 0, z: 0 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}, +// copyExtent.depthOrArrayLayers === 0 && dstOffset.z === textureDepth +{ + srcOffset: { x: 0, y: 0, z: 0 }, + dstOffset: { x: 0, y: 0, z: 5 }, + copyExtent: { width: 0, height: 0, depthOrArrayLayers: 0 } +}] +). +unless( + (p) => + p.dimension === '1d' && ( + p.copyBoxOffset.copyExtent.height !== 0 || + p.copyBoxOffset.srcOffset.y !== 0 || + p.copyBoxOffset.dstOffset.y !== 0) +). +combine('srcCopyLevel', [0, 3]). +combine('dstCopyLevel', [0, 3]). +unless((p) => p.dimension === '1d' && (p.srcCopyLevel !== 0 || p.dstCopyLevel !== 0)) +). +fn((t) => { + const { dimension, textureSize, copyBoxOffset, srcCopyLevel, dstCopyLevel } = t.params; - const srcFormat = 'rgba8unorm'; - const dstFormat = 'rgba8unorm'; + const srcFormat = 'rgba8unorm'; + const dstFormat = 'rgba8unorm'; - t.DoCopyTextureToTextureTest( - dimension, - textureSize, - textureSize, - srcFormat, - dstFormat, - copyBoxOffset, - srcCopyLevel, - dstCopyLevel - ); - }); + t.DoCopyTextureToTextureTest( + dimension, + textureSize, + textureSize, + srcFormat, + dstFormat, + copyBoxOffset, + srcCopyLevel, + dstCopyLevel + ); +}); -g.test('copy_depth_stencil') - .desc( - ` +g.test('copy_depth_stencil'). +desc( + ` Validate the correctness of copyTextureToTexture() with depth and stencil aspect. For all the texture formats with stencil aspect: @@ -1208,128 +1247,124 @@ g.test('copy_depth_stencil') - Copy the depth aspect from the source texture into the destination texture - Validate the content in the destination texture with the depth comparison function 'equal' ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .beginSubcases() - .combine('srcTextureSize', [ - { width: 32, height: 16, depthOrArrayLayers: 1 }, - { width: 32, height: 16, depthOrArrayLayers: 4 }, - { width: 24, height: 48, depthOrArrayLayers: 5 }, - ]) - .combine('srcCopyLevel', [0, 2]) - .combine('dstCopyLevel', [0, 2]) - .combine('srcCopyBaseArrayLayer', [0, 1]) - .combine('dstCopyBaseArrayLayer', [0, 1]) - .filter(t => { - return ( - t.srcTextureSize.depthOrArrayLayers > t.srcCopyBaseArrayLayer && - t.srcTextureSize.depthOrArrayLayers > t.dstCopyBaseArrayLayer - ); - }) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(format); - }) - .fn(t => { - const { +). +params((u) => +u. +combine('format', kDepthStencilFormats). +beginSubcases(). +combine('srcTextureSize', [ +{ width: 32, height: 16, depthOrArrayLayers: 1 }, +{ width: 32, height: 16, depthOrArrayLayers: 4 }, +{ width: 24, height: 48, depthOrArrayLayers: 5 }] +). +combine('srcCopyLevel', [0, 2]). +combine('dstCopyLevel', [0, 2]). +combine('srcCopyBaseArrayLayer', [0, 1]). +combine('dstCopyBaseArrayLayer', [0, 1]). +filter((t) => { + return ( + t.srcTextureSize.depthOrArrayLayers > t.srcCopyBaseArrayLayer && + t.srcTextureSize.depthOrArrayLayers > t.dstCopyBaseArrayLayer); + +}) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(format); +}). +fn((t) => { + const { + format, + srcTextureSize, + srcCopyLevel, + dstCopyLevel, + srcCopyBaseArrayLayer, + dstCopyBaseArrayLayer + } = t.params; + + const copySize = [ + srcTextureSize.width >> srcCopyLevel, + srcTextureSize.height >> srcCopyLevel, + srcTextureSize.depthOrArrayLayers - Math.max(srcCopyBaseArrayLayer, dstCopyBaseArrayLayer)]; + + const sourceTexture = t.trackForCleanup( + t.device.createTexture({ format, - srcTextureSize, + size: srcTextureSize, + usage: + GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + mipLevelCount: srcCopyLevel + 1 + }) + ); + const destinationTexture = t.trackForCleanup( + t.device.createTexture({ + format, + size: [ + copySize[0] << dstCopyLevel, + copySize[1] << dstCopyLevel, + srcTextureSize.depthOrArrayLayers], + + usage: + GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + mipLevelCount: dstCopyLevel + 1 + }) + ); + + let initialStencilData = undefined; + if (kTextureFormatInfo[format].stencil) { + initialStencilData = t.GetInitialStencilDataPerMipLevel(srcTextureSize, format, srcCopyLevel); + t.InitializeStencilAspect( + sourceTexture, + initialStencilData, srcCopyLevel, - dstCopyLevel, srcCopyBaseArrayLayer, - dstCopyBaseArrayLayer, - } = t.params; - - const copySize = [ - srcTextureSize.width >> srcCopyLevel, - srcTextureSize.height >> srcCopyLevel, - srcTextureSize.depthOrArrayLayers - Math.max(srcCopyBaseArrayLayer, dstCopyBaseArrayLayer), - ]; - - const sourceTexture = t.trackForCleanup( - t.device.createTexture({ - format, - size: srcTextureSize, - usage: - GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - mipLevelCount: srcCopyLevel + 1, - }) - ); - - const destinationTexture = t.trackForCleanup( - t.device.createTexture({ - format, - size: [ - copySize[0] << dstCopyLevel, - copySize[1] << dstCopyLevel, - srcTextureSize.depthOrArrayLayers, - ], - - usage: - GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - mipLevelCount: dstCopyLevel + 1, - }) - ); - - let initialStencilData = undefined; - if (kTextureFormatInfo[format].stencil) { - initialStencilData = t.GetInitialStencilDataPerMipLevel(srcTextureSize, format, srcCopyLevel); - t.InitializeStencilAspect( - sourceTexture, - initialStencilData, - srcCopyLevel, - srcCopyBaseArrayLayer, - copySize - ); - } - if (kTextureFormatInfo[format].depth) { - t.InitializeDepthAspect(sourceTexture, format, srcCopyLevel, srcCopyBaseArrayLayer, copySize); - } - - const encoder = t.device.createCommandEncoder(); - encoder.copyTextureToTexture( - { - texture: sourceTexture, - mipLevel: srcCopyLevel, - origin: { x: 0, y: 0, z: srcCopyBaseArrayLayer }, - }, - { - texture: destinationTexture, - mipLevel: dstCopyLevel, - origin: { x: 0, y: 0, z: dstCopyBaseArrayLayer }, - }, copySize ); + } + if (kTextureFormatInfo[format].depth) { + t.InitializeDepthAspect(sourceTexture, format, srcCopyLevel, srcCopyBaseArrayLayer, copySize); + } - t.queue.submit([encoder.finish()]); + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToTexture( + { + texture: sourceTexture, + mipLevel: srcCopyLevel, + origin: { x: 0, y: 0, z: srcCopyBaseArrayLayer } + }, + { + texture: destinationTexture, + mipLevel: dstCopyLevel, + origin: { x: 0, y: 0, z: dstCopyBaseArrayLayer } + }, + copySize + ); + t.queue.submit([encoder.finish()]); - if (kTextureFormatInfo[format].stencil) { - assert(initialStencilData !== undefined); - t.VerifyStencilAspect( - destinationTexture, - initialStencilData, - dstCopyLevel, - dstCopyBaseArrayLayer, - copySize - ); - } - if (kTextureFormatInfo[format].depth) { - t.VerifyDepthAspect( - destinationTexture, - format, - dstCopyLevel, - dstCopyBaseArrayLayer, - copySize - ); - } - }); + if (kTextureFormatInfo[format].stencil) { + assert(initialStencilData !== undefined); + t.VerifyStencilAspect( + destinationTexture, + initialStencilData, + dstCopyLevel, + dstCopyBaseArrayLayer, + copySize + ); + } + if (kTextureFormatInfo[format].depth) { + t.VerifyDepthAspect( + destinationTexture, + format, + dstCopyLevel, + dstCopyBaseArrayLayer, + copySize + ); + } +}); -g.test('copy_multisampled_color') - .desc( - ` +g.test('copy_multisampled_color'). +desc( + ` Validate the correctness of copyTextureToTexture() with multisampled color formats. - Initialize the source texture with a triangle in a render pass. @@ -1340,39 +1375,39 @@ g.test('copy_multisampled_color') - Note that in current WebGPU SPEC the mipmap level count and array layer count of a multisampled texture can only be 1. ` - ) - .fn(t => { - const textureSize = [32, 16, 1]; - const kColorFormat = 'rgba8unorm'; - const kSampleCount = 4; +). +fn((t) => { + const textureSize = [32, 16, 1]; + const kColorFormat = 'rgba8unorm'; + const kSampleCount = 4; - const sourceTexture = t.device.createTexture({ - format: kColorFormat, - size: textureSize, - usage: - GPUTextureUsage.COPY_SRC | - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: kSampleCount, - }); - t.trackForCleanup(sourceTexture); - const destinationTexture = t.device.createTexture({ - format: kColorFormat, - size: textureSize, - usage: - GPUTextureUsage.COPY_DST | - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: kSampleCount, - }); - t.trackForCleanup(destinationTexture); + const sourceTexture = t.device.createTexture({ + format: kColorFormat, + size: textureSize, + usage: + GPUTextureUsage.COPY_SRC | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: kSampleCount + }); + t.trackForCleanup(sourceTexture); + const destinationTexture = t.device.createTexture({ + format: kColorFormat, + size: textureSize, + usage: + GPUTextureUsage.COPY_DST | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: kSampleCount + }); + t.trackForCleanup(destinationTexture); - // Initialize sourceTexture with a draw call. - const renderPipelineForInit = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + // Initialize sourceTexture with a draw call. + const renderPipelineForInit = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main(@builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4 { var pos = array, 3>( @@ -1381,62 +1416,61 @@ g.test('copy_multisampled_color') vec2( 1.0, -1.0) ); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.3, 0.5, 0.8, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: kColorFormat }], - }, - multisample: { - count: kSampleCount, - }, - }); - const initEncoder = t.device.createCommandEncoder(); - const renderPassForInit = initEncoder.beginRenderPass({ - colorAttachments: [ - { - view: sourceTexture.createView(), - clearValue: [1.0, 0.0, 0.0, 1.0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPassForInit.setPipeline(renderPipelineForInit); - renderPassForInit.draw(3); - renderPassForInit.end(); - t.queue.submit([initEncoder.finish()]); + }` + }), + entryPoint: 'main', + targets: [{ format: kColorFormat }] + }, + multisample: { + count: kSampleCount + } + }); + const initEncoder = t.device.createCommandEncoder(); + const renderPassForInit = initEncoder.beginRenderPass({ + colorAttachments: [ + { + view: sourceTexture.createView(), + clearValue: [1.0, 0.0, 0.0, 1.0], + loadOp: 'clear', + storeOp: 'store' + }] - // Do the texture-to-texture copy - const copyEncoder = t.device.createCommandEncoder(); - copyEncoder.copyTextureToTexture( - { - texture: sourceTexture, - }, - { - texture: destinationTexture, - }, - textureSize - ); + }); + renderPassForInit.setPipeline(renderPipelineForInit); + renderPassForInit.draw(3); + renderPassForInit.end(); + t.queue.submit([initEncoder.finish()]); - t.queue.submit([copyEncoder.finish()]); + // Do the texture-to-texture copy + const copyEncoder = t.device.createCommandEncoder(); + copyEncoder.copyTextureToTexture( + { + texture: sourceTexture + }, + { + texture: destinationTexture + }, + textureSize + ); + t.queue.submit([copyEncoder.finish()]); - // Verify if all the sub-pixel values at the same location of sourceTexture and - // destinationTexture are equal. - const renderPipelineForValidation = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + // Verify if all the sub-pixel values at the same location of sourceTexture and + // destinationTexture are equal. + const renderPipelineForValidation = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main(@builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4 { var pos = array, 6>( @@ -1447,13 +1481,13 @@ g.test('copy_multisampled_color') vec2( 1.0, 1.0), vec2( 1.0, -1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @group(0) @binding(0) var sourceTexture : texture_multisampled_2d; @group(0) @binding(1) var destinationTexture : texture_multisampled_2d; @fragment @@ -1470,57 +1504,57 @@ g.test('copy_multisampled_color') } } return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: kColorFormat }], - }, - }); - const bindGroup = t.device.createBindGroup({ - layout: renderPipelineForValidation.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: sourceTexture.createView(), - }, - { - binding: 1, - resource: destinationTexture.createView(), - }, - ], - }); - const expectedOutputTexture = t.device.createTexture({ - format: kColorFormat, - size: textureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - t.trackForCleanup(expectedOutputTexture); - const validationEncoder = t.device.createCommandEncoder(); - const renderPassForValidation = validationEncoder.beginRenderPass({ - colorAttachments: [ - { - view: expectedOutputTexture.createView(), - clearValue: [1.0, 0.0, 0.0, 1.0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPassForValidation.setPipeline(renderPipelineForValidation); - renderPassForValidation.setBindGroup(0, bindGroup); - renderPassForValidation.draw(6); - renderPassForValidation.end(); - t.queue.submit([validationEncoder.finish()]); - - t.expectSingleColor(expectedOutputTexture, 'rgba8unorm', { - size: [textureSize[0], textureSize[1], textureSize[2]], - exp: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, - }); + }` + }), + entryPoint: 'main', + targets: [{ format: kColorFormat }] + } }); + const bindGroup = t.device.createBindGroup({ + layout: renderPipelineForValidation.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: sourceTexture.createView() + }, + { + binding: 1, + resource: destinationTexture.createView() + }] -g.test('copy_multisampled_depth') - .desc( - ` + }); + const expectedOutputTexture = t.device.createTexture({ + format: kColorFormat, + size: textureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + t.trackForCleanup(expectedOutputTexture); + const validationEncoder = t.device.createCommandEncoder(); + const renderPassForValidation = validationEncoder.beginRenderPass({ + colorAttachments: [ + { + view: expectedOutputTexture.createView(), + clearValue: [1.0, 0.0, 0.0, 1.0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPassForValidation.setPipeline(renderPipelineForValidation); + renderPassForValidation.setBindGroup(0, bindGroup); + renderPassForValidation.draw(6); + renderPassForValidation.end(); + t.queue.submit([validationEncoder.finish()]); + + t.expectSingleColor(expectedOutputTexture, 'rgba8unorm', { + size: [textureSize[0], textureSize[1], textureSize[2]], + exp: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 } + }); +}); + +g.test('copy_multisampled_depth'). +desc( + ` Validate the correctness of copyTextureToTexture() with multisampled depth formats. - Initialize the source texture with a triangle in a render pass. @@ -1529,30 +1563,30 @@ g.test('copy_multisampled_depth') - Note that in current WebGPU SPEC the mipmap level count and array layer count of a multisampled texture can only be 1. ` - ) - .fn(t => { - const textureSize = [32, 16, 1]; - const kDepthFormat = 'depth24plus'; - const kSampleCount = 4; +). +fn((t) => { + const textureSize = [32, 16, 1]; + const kDepthFormat = 'depth24plus'; + const kSampleCount = 4; - const sourceTexture = t.device.createTexture({ - format: kDepthFormat, - size: textureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: kSampleCount, - }); - t.trackForCleanup(sourceTexture); - const destinationTexture = t.device.createTexture({ - format: kDepthFormat, - size: textureSize, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: kSampleCount, - }); - t.trackForCleanup(destinationTexture); + const sourceTexture = t.device.createTexture({ + format: kDepthFormat, + size: textureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: kSampleCount + }); + t.trackForCleanup(sourceTexture); + const destinationTexture = t.device.createTexture({ + format: kDepthFormat, + size: textureSize, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: kSampleCount + }); + t.trackForCleanup(destinationTexture); - const vertexState = { - module: t.device.createShaderModule({ - code: ` + const vertexState = { + module: t.device.createShaderModule({ + code: ` @vertex fn main(@builtin(vertex_index) VertexIndex : u32)-> @builtin(position) vec4 { var pos : array, 6> = array, 6>( @@ -1563,119 +1597,117 @@ g.test('copy_multisampled_depth') vec3( 1.0, 1.0, 1.0), vec3( 1.0, -1.0, 0.5)); return vec4(pos[VertexIndex], 1.0); - }`, - }), - entryPoint: 'main', - }; + }` + }), + entryPoint: 'main' + }; - // Initialize the depth aspect of source texture with a draw call - const renderPipelineForInit = t.device.createRenderPipeline({ - layout: 'auto', - vertex: vertexState, - depthStencil: { - format: kDepthFormat, - depthCompare: 'always', - depthWriteEnabled: true, - }, - multisample: { - count: kSampleCount, - }, - }); + // Initialize the depth aspect of source texture with a draw call + const renderPipelineForInit = t.device.createRenderPipeline({ + layout: 'auto', + vertex: vertexState, + depthStencil: { + format: kDepthFormat, + depthCompare: 'always', + depthWriteEnabled: true + }, + multisample: { + count: kSampleCount + } + }); - const encoderForInit = t.device.createCommandEncoder(); - const renderPassForInit = encoderForInit.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment: { - view: sourceTexture.createView(), - depthClearValue: 0.0, - depthLoadOp: 'clear', - depthStoreOp: 'store', - }, - }); - renderPassForInit.setPipeline(renderPipelineForInit); - renderPassForInit.draw(6); - renderPassForInit.end(); - t.queue.submit([encoderForInit.finish()]); + const encoderForInit = t.device.createCommandEncoder(); + const renderPassForInit = encoderForInit.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment: { + view: sourceTexture.createView(), + depthClearValue: 0.0, + depthLoadOp: 'clear', + depthStoreOp: 'store' + } + }); + renderPassForInit.setPipeline(renderPipelineForInit); + renderPassForInit.draw(6); + renderPassForInit.end(); + t.queue.submit([encoderForInit.finish()]); - // Do the texture-to-texture copy - const copyEncoder = t.device.createCommandEncoder(); - copyEncoder.copyTextureToTexture( - { - texture: sourceTexture, - }, - { - texture: destinationTexture, - }, - textureSize - ); + // Do the texture-to-texture copy + const copyEncoder = t.device.createCommandEncoder(); + copyEncoder.copyTextureToTexture( + { + texture: sourceTexture + }, + { + texture: destinationTexture + }, + textureSize + ); + t.queue.submit([copyEncoder.finish()]); - t.queue.submit([copyEncoder.finish()]); - - // Verify the depth values in destinationTexture are what we expected with - // depthCompareFunction == 'equal' and depthWriteEnabled == false in the render pipeline - const kColorFormat = 'rgba8unorm'; - const renderPipelineForVerify = t.device.createRenderPipeline({ - layout: 'auto', - vertex: vertexState, - fragment: { - module: t.device.createShaderModule({ - code: ` + // Verify the depth values in destinationTexture are what we expected with + // depthCompareFunction == 'equal' and depthWriteEnabled == false in the render pipeline + const kColorFormat = 'rgba8unorm'; + const renderPipelineForVerify = t.device.createRenderPipeline({ + layout: 'auto', + vertex: vertexState, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: kColorFormat }], - }, - depthStencil: { - format: kDepthFormat, - depthCompare: 'equal', - depthWriteEnabled: false, - }, - multisample: { - count: kSampleCount, - }, - }); - const multisampledColorTexture = t.device.createTexture({ - format: kColorFormat, - size: textureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: kSampleCount, - }); - t.trackForCleanup(multisampledColorTexture); - const colorTextureAsResolveTarget = t.device.createTexture({ - format: kColorFormat, - size: textureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - t.trackForCleanup(colorTextureAsResolveTarget); - - const encoderForVerify = t.device.createCommandEncoder(); - const renderPassForVerify = encoderForVerify.beginRenderPass({ - colorAttachments: [ - { - view: multisampledColorTexture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'discard', - resolveTarget: colorTextureAsResolveTarget.createView(), - }, - ], - - depthStencilAttachment: { - view: destinationTexture.createView(), - depthLoadOp: 'load', - depthStoreOp: 'store', - }, - }); - renderPassForVerify.setPipeline(renderPipelineForVerify); - renderPassForVerify.draw(6); - renderPassForVerify.end(); - t.queue.submit([encoderForVerify.finish()]); - - t.expectSingleColor(colorTextureAsResolveTarget, kColorFormat, { - size: [textureSize[0], textureSize[1], textureSize[2]], - exp: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, - }); + }` + }), + entryPoint: 'main', + targets: [{ format: kColorFormat }] + }, + depthStencil: { + format: kDepthFormat, + depthCompare: 'equal', + depthWriteEnabled: false + }, + multisample: { + count: kSampleCount + } }); + const multisampledColorTexture = t.device.createTexture({ + format: kColorFormat, + size: textureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: kSampleCount + }); + t.trackForCleanup(multisampledColorTexture); + const colorTextureAsResolveTarget = t.device.createTexture({ + format: kColorFormat, + size: textureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + t.trackForCleanup(colorTextureAsResolveTarget); + + const encoderForVerify = t.device.createCommandEncoder(); + const renderPassForVerify = encoderForVerify.beginRenderPass({ + colorAttachments: [ + { + view: multisampledColorTexture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'discard', + resolveTarget: colorTextureAsResolveTarget.createView() + }], + + depthStencilAttachment: { + view: destinationTexture.createView(), + depthLoadOp: 'load', + depthStoreOp: 'store' + } + }); + renderPassForVerify.setPipeline(renderPipelineForVerify); + renderPassForVerify.draw(6); + renderPassForVerify.end(); + t.queue.submit([encoderForVerify.finish()]); + + t.expectSingleColor(colorTextureAsResolveTarget, kColorFormat, { + size: [textureSize[0], textureSize[1], textureSize[2]], + exp: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 } + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/image_copy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/image_copy.spec.js index fa391eac04b..52c3b6d01bf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/image_copy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/image_copy.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `writeTexture + copyBufferToTexture + copyTextureToBuffer operation tests. +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `writeTexture + copyBufferToTexture + copyTextureToBuffer operation tests. * copy_with_various_rows_per_image_and_bytes_per_row: test that copying data with various bytesPerRow (including { ==, > } bytesInACompleteRow) and\ rowsPerImage (including { ==, > } copyExtent.height) values and minimum required bytes in copy works for every format. Also covers special code paths: @@ -33,14 +33,19 @@ DoCopyTextureToBufferWithDepthAspectTest(). TODO: Expand tests of GPUExtent3D [1] -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { assert, ErrorWithExtra, memcpy, unreachable } from '../../../../common/util/util.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { + assert, + ErrorWithExtra, + memcpy, + + unreachable } from +'../../../../common/util/util.js'; import { kMinDynamicBufferOffsetAlignment, kBufferSizeAlignment, - kTextureDimensions, -} from '../../../capability_info.js'; + kTextureDimensions } from +'../../../capability_info.js'; import { kTextureFormatInfo, kDepthStencilFormats, @@ -48,8 +53,11 @@ import { depthStencilBufferTextureCopySupported, textureDimensionAndFormatCompatible, depthStencilFormatAspectSize, - isCompressedTextureFormat, -} from '../../../format_info.js'; + + + + isCompressedTextureFormat } from +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { makeBufferWithContents } from '../../../util/buffer.js'; import { checkElementsEqual } from '../../../util/check_contents.js'; @@ -60,20 +68,58 @@ import { bytesInACompleteRow, dataBytesForCopyOrFail, getTextureCopyLayout, - kBytesPerRowAlignment, -} from '../../../util/texture/layout.js'; + kBytesPerRowAlignment } from + +'../../../util/texture/layout.js'; import { TexelView } from '../../../util/texture/texel_view.js'; import { findFailedPixels } from '../../../util/texture/texture_ok.js'; + + + + + + +/** Describes the function used to copy the initial data into the texture. */ + +/** + * - PartialCopyT2B: do CopyT2B to check that the part of the texture we copied to with InitMethod + * matches the data we were copying and that we don't overwrite any data in the target buffer that + * we're not supposed to - that's primarily for testing CopyT2B functionality. + * - FullCopyT2B: do CopyT2B on the whole texture and check wether the part we copied to matches + * the data we were copying and that the nothing else was modified - that's primarily for testing + * WriteTexture and CopyB2T. + * + * Note: in compatibility mode, copyTextureToBuffer is not supported for compressed textures. + * In this case, we render the texture as well as a texture with the contents we except in the + * copy and then expect the rendered results to match. + */ + + +/** + * This describes in what form the arguments will be passed to WriteTexture/CopyB2T/CopyT2B. If + * undefined, then default values are passed as undefined instead of default values. If arrays, then + * `GPUOrigin3D` and `GPUExtent3D` are passed as `[number, number, number]`. * + * + * [1]: Try to expand this with something like: + * ```ts + * function encodeExtent3D( + * mode: 'partial-array' | 'full-array' | 'extra-array' | 'partial-dict' | 'full-dict', + * value: GPUExtent3D + * ): GPUExtent3D { ... } + * ``` + */ + + /** Each combination of methods assume that the ones before it were tested and work correctly. */ const kMethodsToTest = [ - // Then we make sure that WriteTexture works for all formats: - { initMethod: 'WriteTexture', checkMethod: 'FullCopyT2B' }, - // Then we make sure that CopyB2T works for all formats: - { initMethod: 'CopyB2T', checkMethod: 'FullCopyT2B' }, - // Then we make sure that CopyT2B works for all formats: - { initMethod: 'WriteTexture', checkMethod: 'PartialCopyT2B' }, -]; +// Then we make sure that WriteTexture works for all formats: +{ initMethod: 'WriteTexture', checkMethod: 'FullCopyT2B' }, +// Then we make sure that CopyB2T works for all formats: +{ initMethod: 'CopyB2T', checkMethod: 'FullCopyT2B' }, +// Then we make sure that CopyT2B works for all formats: +{ initMethod: 'WriteTexture', checkMethod: 'PartialCopyT2B' }]; + const dataGenerator = new DataArrayGenerator(); const altDataGenerator = new DataArrayGenerator(); @@ -84,7 +130,12 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { * values where possible. Passing arguments as values and not as objects so that they are passed * by copy and not by reference. */ - undefDataLayoutIfNeeded(offset, rowsPerImage, bytesPerRow, changeBeforePass) { + undefDataLayoutIfNeeded( + offset, + rowsPerImage, + bytesPerRow, + changeBeforePass) + { if (changeBeforePass === 'undefined') { if (offset === 0) { offset = undefined; @@ -105,7 +156,14 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { * Passing arguments as values and not as objects so that they are passed by copy and not by * reference. */ - undefOrArrayCopyViewIfNeeded(texture, origin_x, origin_y, origin_z, mipLevel, changeBeforePass) { + undefOrArrayCopyViewIfNeeded( + texture, + origin_x, + origin_y, + origin_z, + mipLevel, + changeBeforePass) + { let origin = { x: origin_x, y: origin_y, z: origin_z }; if (changeBeforePass === 'undefined') { @@ -141,7 +199,12 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { * `GPUExtent3DDict`. Passing arguments as values and not as objects so that they are passed by * copy and not by reference. */ - arrayCopySizeIfNeeded(width, height, depthOrArrayLayers, changeBeforePass) { + arrayCopySizeIfNeeded( + width, + height, + depthOrArrayLayers, + changeBeforePass) + { if (changeBeforePass === 'arrays') { return [width, height, depthOrArrayLayers]; } else { @@ -158,12 +221,12 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { * by binary comparison. */ expectGPUBufferValuesEqualWhenInterpretedAsTextureFormat( - expected, - buffer, - format, - size, - dataLayout - ) { + expected, + buffer, + format, + size, + dataLayout) + { if (isCompressedTextureFormat(format)) { this.expectGPUBufferValuesEqual(buffer, expected); return; @@ -187,7 +250,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // is less than `dataLayout.rowsPerImage`. `...` represents any data past // ((height - 1) * depth * bytePerRow + bytesPerRow) and the end of the // buffer - const checkByTextureFormat = actual => { + const checkByTextureFormat = (actual) => { const zero = { x: 0, y: 0, z: 0 }; // compare texel areas @@ -196,13 +259,13 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { bytesPerRow: dataLayout.bytesPerRow, rowsPerImage: dataLayout.rowsPerImage, subrectOrigin: [0, 0, 0], - subrectSize: size, + subrectSize: size }); const expTexelView = TexelView.fromTextureDataByReference(regularFormat, expected, { bytesPerRow: dataLayout.bytesPerRow, rowsPerImage: dataLayout.rowsPerImage, subrectOrigin: [0, 0, 0], - subrectSize: size, + subrectSize: size }); const failedPixelsMessage = findFailedPixels( @@ -211,7 +274,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { size, { actTexelView, expTexelView }, { - maxFractionalDiff: 0, + maxFractionalDiff: 0 } ); @@ -219,7 +282,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { const msg = 'Texture level had unexpected contents:\n' + failedPixelsMessage; return new ErrorWithExtra(msg, () => ({ expTexelView, - actTexelView, + actTexelView })); } } @@ -253,18 +316,18 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { type: Uint8Array, typedLength: expected.length, method: 'copy', - mode: 'fail', + mode: 'fail' }); } /** Run a CopyT2B command with appropriate arguments corresponding to `ChangeBeforePass` */ copyTextureToBufferWithAppliedArguments( - buffer, - { offset, rowsPerImage, bytesPerRow }, - { width, height, depthOrArrayLayers }, - { texture, mipLevel, origin }, - changeBeforePass - ) { + buffer, + { offset, rowsPerImage, bytesPerRow }, + { width, height, depthOrArrayLayers }, + { texture, mipLevel, origin }, + changeBeforePass) + { const { x, y, z } = origin; const appliedCopyView = this.undefOrArrayCopyViewIfNeeded( @@ -275,14 +338,12 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { mipLevel, changeBeforePass ); - const appliedDataLayout = this.undefDataLayoutIfNeeded( offset, rowsPerImage, bytesPerRow, changeBeforePass ); - const appliedCheckSize = this.arrayCopySizeIfNeeded( width, height, @@ -296,19 +357,18 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { { buffer, ...appliedDataLayout }, appliedCheckSize ); - this.device.queue.submit([encoder.finish()]); } /** Put data into a part of the texture with an appropriate method. */ uploadLinearTextureDataToTextureSubBox( - textureCopyView, - textureDataLayout, - copySize, - partialData, - method, - changeBeforePass - ) { + textureCopyView, + textureDataLayout, + copySize, + partialData, + method, + changeBeforePass) + { const { texture, mipLevel, origin } = textureCopyView; const { offset, rowsPerImage, bytesPerRow } = textureDataLayout; const { x, y, z } = origin; @@ -322,14 +382,12 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { mipLevel, changeBeforePass ); - const appliedDataLayout = this.undefDataLayoutIfNeeded( offset, rowsPerImage, bytesPerRow, changeBeforePass ); - const appliedCopySize = this.arrayCopySizeIfNeeded( width, height, @@ -338,42 +396,48 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { ); switch (method) { - case 'WriteTexture': { - this.device.queue.writeTexture( - appliedCopyView, - partialData, - appliedDataLayout, - appliedCopySize - ); + case 'WriteTexture':{ + this.device.queue.writeTexture( + appliedCopyView, + partialData, + appliedDataLayout, + appliedCopySize + ); - break; - } - case 'CopyB2T': { - const buffer = this.makeBufferWithContents(partialData, GPUBufferUsage.COPY_SRC); - const encoder = this.device.createCommandEncoder(); - encoder.copyBufferToTexture( - { buffer, ...appliedDataLayout }, - appliedCopyView, - appliedCopySize - ); + break; + } + case 'CopyB2T':{ + const buffer = this.makeBufferWithContents(partialData, GPUBufferUsage.COPY_SRC); + const encoder = this.device.createCommandEncoder(); + encoder.copyBufferToTexture( + { buffer, ...appliedDataLayout }, + appliedCopyView, + appliedCopySize + ); + this.device.queue.submit([encoder.finish()]); - this.device.queue.submit([encoder.finish()]); - - break; - } + break; + } default: unreachable(); } } generateMatchingTextureInJSRenderAndCompareContents( - { texture: actualTexture, mipLevel: mipLevelOrUndefined, origin }, - copySize, - format, - expected, - expectedDataLayout - ) { - const size = [actualTexture.width, actualTexture.height, actualTexture.depthOrArrayLayers]; + { + texture: actualTexture, + mipLevel: mipLevelOrUndefined, + origin + }, + copySize, + format, + expected, + expectedDataLayout) + { + const size = [ + actualTexture.width, + actualTexture.height, + actualTexture.depthOrArrayLayers]; const expectedTexture = this.device.createTexture({ label: 'expectedTexture', @@ -381,7 +445,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { dimension: actualTexture.dimension, format, mipLevelCount: actualTexture.mipLevelCount, - usage: actualTexture.usage, + usage: actualTexture.usage }); this.trackForCleanup(expectedTexture); @@ -391,7 +455,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { actualTexture.dimension, size, { - mipLevel, + mipLevel } ); @@ -399,7 +463,6 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { const expectedTextureMipLevelData = new Uint8Array( align(fullMipLevelTextureCopyLayout.byteLength, 4) ); - const mipSize = physicalMipSizeFromTexture(expectedTexture, mipLevel); // update the data for the entire mip level with the data @@ -408,13 +471,13 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { src: { dataLayout: expectedDataLayout, origin: { x: 0, y: 0, z: 0 }, - data: expected, + data: expected }, dest: { dataLayout: { offset: 0, ...fullMipLevelTextureCopyLayout }, origin, - data: expectedTextureMipLevelData, - }, + data: expectedTextureMipLevelData + } }); // MAINTENANCE_TODO: If we're testing writeTexture should this use copyBufferToTexture instead? @@ -441,13 +504,13 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { * (for the whole texture). */ copyPartialTextureToBufferAndCheckContents( - { texture, mipLevel, origin }, - checkSize, - format, - expected, - expectedDataLayout, - changeBeforePass = 'none' - ) { + { texture, mipLevel, origin }, + checkSize, + format, + expected, + expectedDataLayout, + changeBeforePass = 'none') + { // The alignment is necessary because we need to copy and map data from this buffer. const bufferSize = align(expected.byteLength, 4); // The start value ensures generated data here doesn't match the expected data. @@ -457,7 +520,6 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { bufferData, GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST ); - // At this point both buffer and bufferData have the same random data in // them. We'll use copyTextureToBuffer to update buffer with data from the // texture and updateLinearTextureDataSubBox to update bufferData with the @@ -484,13 +546,13 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { src: { dataLayout: expectedDataLayout, origin: { x: 0, y: 0, z: 0 }, - data: expected, + data: expected }, dest: { dataLayout: expectedDataLayout, origin: { x: 0, y: 0, z: 0 }, - data: bufferData, - }, + data: bufferData + } }); this.expectGPUBufferValuesEqualWhenInterpretedAsTextureFormat( @@ -510,18 +572,18 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { * updated data after the copy operation. */ copyWholeTextureToBufferAndCheckContentsWithUpdatedData( - { texture, mipLevel, origin }, - fullTextureCopyLayout, - texturePartialDataLayout, - copySize, - format, - fullData, - partialData - ) { + { texture, mipLevel, origin }, + fullTextureCopyLayout, + texturePartialDataLayout, + copySize, + format, + fullData, + partialData) + { const { mipSize, bytesPerRow, rowsPerImage, byteLength } = fullTextureCopyLayout; const readbackPromise = this.readGPUBufferRangeTyped(fullData, { type: Uint8Array, - typedLength: byteLength, + typedLength: byteLength }); const destinationOrigin = { x: 0, y: 0, z: 0 }; @@ -534,13 +596,13 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { dest: { dataLayout: { offset: 0, ...fullTextureCopyLayout }, origin, - data: readback.data, + data: readback.data }, src: { dataLayout: texturePartialDataLayout, origin: { x: 0, y: 0, z: 0 }, - data: partialData, - }, + data: partialData + } }); this.copyPartialTextureToBufferAndCheckContents( { texture, mipLevel, origin: destinationOrigin }, @@ -549,7 +611,6 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { readback.data, { bytesPerRow, rowsPerImage, offset: 0 } ); - readback.cleanup(); }); } @@ -570,113 +631,125 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { dimension, initMethod, checkMethod, - changeBeforePass = 'none', + changeBeforePass = 'none' + + + + + + + + + + + + }) { const texture = this.device.createTexture({ size: textureSize, format, dimension, mipLevelCount: mipLevel + 1, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING }); this.trackForCleanup(texture); const data = dataGenerator.generateView(dataSize); switch (checkMethod) { - case 'PartialCopyT2B': { - this.uploadLinearTextureDataToTextureSubBox( - { texture, mipLevel, origin }, - textureDataLayout, - copySize, - data, - initMethod, - changeBeforePass - ); - - if (this.canCallCopyTextureToBufferWithTextureFormat(texture.format)) { - this.copyPartialTextureToBufferAndCheckContents( + case 'PartialCopyT2B':{ + this.uploadLinearTextureDataToTextureSubBox( { texture, mipLevel, origin }, - copySize, - format, - data, textureDataLayout, + copySize, + data, + initMethod, changeBeforePass ); - } else { - this.generateMatchingTextureInJSRenderAndCompareContents( - { texture, mipLevel, origin }, - copySize, - format, - data, - textureDataLayout - ); + + if (this.canCallCopyTextureToBufferWithTextureFormat(texture.format)) { + this.copyPartialTextureToBufferAndCheckContents( + { texture, mipLevel, origin }, + copySize, + format, + data, + textureDataLayout, + changeBeforePass + ); + } else { + this.generateMatchingTextureInJSRenderAndCompareContents( + { texture, mipLevel, origin }, + copySize, + format, + data, + textureDataLayout + ); + } + break; } - break; - } - case 'FullCopyT2B': { - this.uploadLinearTextureDataToTextureSubBox( - { texture, mipLevel, origin }, - textureDataLayout, - copySize, - data, - initMethod, - changeBeforePass - ); - - if (this.canCallCopyTextureToBufferWithTextureFormat(texture.format)) { - const fullTextureCopyLayout = getTextureCopyLayout(format, dimension, textureSize, { - mipLevel, - }); - - const fullData = this.copyWholeTextureToNewBuffer( - { texture, mipLevel }, - fullTextureCopyLayout - ); - - this.copyWholeTextureToBufferAndCheckContentsWithUpdatedData( + case 'FullCopyT2B':{ + this.uploadLinearTextureDataToTextureSubBox( { texture, mipLevel, origin }, - fullTextureCopyLayout, textureDataLayout, copySize, - format, - fullData, - data - ); - } else { - this.generateMatchingTextureInJSRenderAndCompareContents( - { texture, mipLevel, origin }, - copySize, - format, data, - textureDataLayout - //fullTextureCopyLayout, - //fullData, + initMethod, + changeBeforePass ); + + if (this.canCallCopyTextureToBufferWithTextureFormat(texture.format)) { + const fullTextureCopyLayout = getTextureCopyLayout(format, dimension, textureSize, { + mipLevel + }); + + const fullData = this.copyWholeTextureToNewBuffer( + { texture, mipLevel }, + fullTextureCopyLayout + ); + + this.copyWholeTextureToBufferAndCheckContentsWithUpdatedData( + { texture, mipLevel, origin }, + fullTextureCopyLayout, + textureDataLayout, + copySize, + format, + fullData, + data + ); + } else { + this.generateMatchingTextureInJSRenderAndCompareContents( + { texture, mipLevel, origin }, + copySize, + format, + data, + textureDataLayout + //fullTextureCopyLayout, + //fullData, + ); + } + break; } - break; - } default: unreachable(); } } DoUploadToStencilTest( - format, - textureSize, - uploadMethod, - bytesPerRow, - rowsPerImage, - initialDataSize, - initialDataOffset, - mipLevel - ) { + format, + textureSize, + uploadMethod, + bytesPerRow, + rowsPerImage, + initialDataSize, + initialDataOffset, + mipLevel) + { const srcTexture = this.device.createTexture({ size: textureSize, usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, format, - mipLevelCount: mipLevel + 1, + mipLevelCount: mipLevel + 1 }); this.trackForCleanup(srcTexture); @@ -686,7 +759,6 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { 0, initialDataOffset ); - switch (uploadMethod) { case 'WriteTexture': this.queue.writeTexture( @@ -695,11 +767,10 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { { offset: initialDataOffset, bytesPerRow, - rowsPerImage, + rowsPerImage }, copySize ); - break; case 'CopyB2T': { @@ -708,14 +779,12 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { initialData, GPUBufferUsage.COPY_SRC ); - const encoder = this.device.createCommandEncoder(); encoder.copyBufferToTexture( { buffer: stagingBuffer, offset: initialDataOffset, bytesPerRow, rowsPerImage }, { texture: srcTexture, aspect: 'stencil-only', mipLevel }, copySize ); - this.queue.submit([encoder.finish()]); } break; @@ -735,13 +804,20 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { ); } - DoCopyFromStencilTest(format, textureSize, bytesPerRow, rowsPerImage, offset, mipLevel) { + DoCopyFromStencilTest( + format, + textureSize, + bytesPerRow, + rowsPerImage, + offset, + mipLevel) + { const srcTexture = this.device.createTexture({ size: textureSize, usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, format, - mipLevelCount: mipLevel + 1, + mipLevelCount: mipLevel + 1 }); this.trackForCleanup(srcTexture); @@ -750,7 +826,6 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { const initialData = dataGenerator.generateView( align(copySize[0] * copySize[1] * copySize[2], kBufferSizeAlignment) ); - this.queue.writeTexture( { texture: srcTexture, aspect: 'stencil-only', mipLevel }, initialData, @@ -761,18 +836,17 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // Copy the stencil aspect from srcTexture into outputBuffer. const outputBufferSize = align( offset + - dataBytesForCopyOrFail({ - layout: { bytesPerRow, rowsPerImage }, - format: 'stencil8', - copySize, - method: 'CopyT2B', - }), + dataBytesForCopyOrFail({ + layout: { bytesPerRow, rowsPerImage }, + format: 'stencil8', + copySize, + method: 'CopyT2B' + }), kBufferSizeAlignment ); - const outputBuffer = this.device.createBuffer({ size: outputBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); this.trackForCleanup(outputBuffer); const encoder = this.device.createCommandEncoder(); @@ -781,7 +855,6 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { { buffer: outputBuffer, offset, bytesPerRow, rowsPerImage }, copySize ); - this.queue.submit([encoder.finish()]); // Validate the data in outputBuffer is what we expect. @@ -794,7 +867,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { { src: initialData, start: baseInitialDataOffset + y * copySize[0], - length: copySize[0], + length: copySize[0] }, { dst: expectedData, start: baseExpectedOffset + y * bytesPerRow } ); @@ -805,15 +878,15 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // MAINTENANCE_TODO(#881): Migrate this into the texture_ok helpers. checkStencilTextureContent( - stencilTexture, - stencilTextureSize, - stencilTextureFormat, - expectedStencilTextureData, - expectedStencilTextureDataOffset, - expectedStencilTextureDataBytesPerRow, - expectedStencilTextureDataRowsPerImage, - stencilTextureMipLevel - ) { + stencilTexture, + stencilTextureSize, + stencilTextureFormat, + expectedStencilTextureData, + expectedStencilTextureDataOffset, + expectedStencilTextureDataBytesPerRow, + expectedStencilTextureDataRowsPerImage, + stencilTextureMipLevel) + { const stencilBitCount = 8; // Prepare the uniform buffer that stores the bit indices (from 0 to 7) at stride 256 (required @@ -821,7 +894,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { const uniformBufferSize = kMinDynamicBufferOffsetAlignment * (stencilBitCount - 1) + 4; const uniformBufferData = new Uint32Array(uniformBufferSize / 4); for (let i = 1; i < stencilBitCount; ++i) { - uniformBufferData[(kMinDynamicBufferOffsetAlignment / 4) * i] = i; + uniformBufferData[kMinDynamicBufferOffsetAlignment / 4 * i] = i; } const uniformBuffer = makeBufferWithContents( this.device, @@ -832,16 +905,16 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // Prepare the base render pipeline descriptor (all the settings expect stencilReadMask). const bindGroupLayout = this.device.createBindGroupLayout({ entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - buffer: { - type: 'uniform', - minBindingSize: 4, - hasDynamicOffset: true, - }, - }, - ], + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + buffer: { + type: 'uniform', + minBindingSize: 4, + hasDynamicOffset: true + } + }] + }); const renderPipelineDescriptorBase = { layout: this.device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }), @@ -858,9 +931,9 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { vec2( 1.0, 1.0), vec2( 1.0, -1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { @@ -873,24 +946,24 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { @fragment fn main() -> @location(0) vec4 { return vec4(f32(1u << param.stencilBitIndex) / 255.0, 0.0, 0.0, 0.0); - }`, + }` }), entryPoint: 'main', targets: [ - { - // As we implement "rendering one bit in each draw() call" with blending operation - // 'add', the format of outputTexture must support blending. - format: 'r8unorm', - blend: { - color: { srcFactor: 'one', dstFactor: 'one', operation: 'add' }, - alpha: {}, - }, - }, - ], + { + // As we implement "rendering one bit in each draw() call" with blending operation + // 'add', the format of outputTexture must support blending. + format: 'r8unorm', + blend: { + color: { srcFactor: 'one', dstFactor: 'one', operation: 'add' }, + alpha: {} + } + }] + }, primitive: { - topology: 'triangle-list', + topology: 'triangle-list' }, depthStencil: { @@ -898,26 +971,26 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { depthCompare: 'always', format: stencilTextureFormat, stencilFront: { - compare: 'equal', + compare: 'equal' }, stencilBack: { - compare: 'equal', - }, - }, + compare: 'equal' + } + } }; // Prepare the bindGroup that contains uniformBuffer and referenceTexture. const bindGroup = this.device.createBindGroup({ layout: bindGroupLayout, entries: [ - { - binding: 0, - resource: { - buffer: uniformBuffer, - size: 4, - }, - }, - ], + { + binding: 0, + resource: { + buffer: uniformBuffer, + size: 4 + } + }] + }); // "Copy" the stencil value into the color attachment with 8 draws in one render pass. Each draw @@ -929,36 +1002,34 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { [stencilTextureSize[0], stencilTextureSize[1], 1], { mipLevel: stencilTextureMipLevel, - aspect: 'stencil-only', + aspect: 'stencil-only' } ); - const outputTextureSize = [ - copyFromOutputTextureLayout.mipSize[0], - copyFromOutputTextureLayout.mipSize[1], - 1, - ]; + copyFromOutputTextureLayout.mipSize[0], + copyFromOutputTextureLayout.mipSize[1], + 1]; const outputTexture = this.device.createTexture({ format: 'r8unorm', size: outputTextureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); this.trackForCleanup(outputTexture); for ( - let stencilTextureLayer = 0; - stencilTextureLayer < stencilTextureSize[2]; - ++stencilTextureLayer - ) { + let stencilTextureLayer = 0; + stencilTextureLayer < stencilTextureSize[2]; + ++stencilTextureLayer) + { const encoder = this.device.createCommandEncoder(); const depthStencilAttachment = { view: stencilTexture.createView({ baseMipLevel: stencilTextureMipLevel, mipLevelCount: 1, baseArrayLayer: stencilTextureLayer, - arrayLayerCount: 1, - }), + arrayLayerCount: 1 + }) }; if (kTextureFormatInfo[stencilTextureFormat].depth) { depthStencilAttachment.depthClearValue = 0; @@ -971,15 +1042,14 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { } const renderPass = encoder.beginRenderPass({ colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: outputTexture.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear', + storeOp: 'store' + }], - depthStencilAttachment, + depthStencilAttachment }); for (let stencilBitIndex = 0; stencilBitIndex < stencilBitCount; ++stencilBitIndex) { @@ -999,17 +1069,17 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // checking all the data in outputStagingBuffer. const outputStagingBuffer = this.device.createBuffer({ size: copyFromOutputTextureLayout.byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); this.trackForCleanup(outputStagingBuffer); encoder.copyTextureToBuffer( { - texture: outputTexture, + texture: outputTexture }, { buffer: outputStagingBuffer, bytesPerRow: copyFromOutputTextureLayout.bytesPerRow, - rowsPerImage: copyFromOutputTextureLayout.rowsPerImage, + rowsPerImage: copyFromOutputTextureLayout.rowsPerImage }, outputTextureSize ); @@ -1018,16 +1088,19 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // Check the valid data in outputStagingBuffer once per row. for (let y = 0; y < copyFromOutputTextureLayout.mipSize[1]; ++y) { + const dataStart = + expectedStencilTextureDataOffset + + expectedStencilTextureDataBytesPerRow * + expectedStencilTextureDataRowsPerImage * + stencilTextureLayer + + expectedStencilTextureDataBytesPerRow * y; this.expectGPUBufferValuesEqual( outputStagingBuffer, expectedStencilTextureData.slice( - expectedStencilTextureDataOffset + - expectedStencilTextureDataBytesPerRow * - expectedStencilTextureDataRowsPerImage * - stencilTextureLayer + - expectedStencilTextureDataBytesPerRow * y, - copyFromOutputTextureLayout.mipSize[0] - ) + dataStart, + dataStart + copyFromOutputTextureLayout.mipSize[0] + ), + copyFromOutputTextureLayout.bytesPerRow * y ); } } @@ -1035,18 +1108,18 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // MAINTENANCE_TODO(#881): Consider if this can be simplified/encapsulated using TexelView. initializeDepthAspectWithRendering( - depthTexture, - depthFormat, - copySize, - copyMipLevel, - initialData - ) { + depthTexture, + depthFormat, + copySize, + copyMipLevel, + initialData) + { assert(!!kTextureFormatInfo[depthFormat].depth); const inputTexture = this.device.createTexture({ size: copySize, usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING, - format: 'r32float', + format: 'r32float' }); this.trackForCleanup(inputTexture); this.queue.writeTexture( @@ -1054,11 +1127,15 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { initialData, { bytesPerRow: copySize[0] * 4, - rowsPerImage: copySize[1], + rowsPerImage: copySize[1] }, copySize ); + const use2DArray = this.isCompatibility && inputTexture.depthOrArrayLayers > 1; + const [textureType, layerCode] = use2DArray ? + ['texture_2d_array', ', baseArrayLayer'] : + ['texture_2d', '']; const renderPipeline = this.device.createRenderPipeline({ layout: 'auto', vertex: { @@ -1074,31 +1151,32 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { vec2( 1.0, 1.0), vec2( 1.0, -1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ code: ` - @group(0) @binding(0) var inputTexture: texture_2d; + @group(0) @binding(0) var inputTexture: ${textureType}; + @group(0) @binding(1) var baseArrayLayer: u32; @fragment fn main(@builtin(position) fragcoord : vec4) -> @builtin(frag_depth) f32 { - var depthValue : vec4 = textureLoad(inputTexture, vec2(fragcoord.xy), 0); + var depthValue : vec4 = textureLoad(inputTexture, vec2(fragcoord.xy)${layerCode}, 0); return depthValue.x; - }`, + }` }), entryPoint: 'main', - targets: [], + targets: [] }, primitive: { - topology: 'triangle-list', + topology: 'triangle-list' }, depthStencil: { format: depthFormat, depthWriteEnabled: true, - depthCompare: 'always', - }, + depthCompare: 'always' + } }); const encoder = this.device.createCommandEncoder(); @@ -1109,8 +1187,8 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { baseArrayLayer: z, arrayLayerCount: 1, baseMipLevel: copyMipLevel, - mipLevelCount: 1, - }), + mipLevelCount: 1 + }) }; if (kTextureFormatInfo[depthFormat].depth) { depthStencilAttachment.depthClearValue = 0.0; @@ -1123,24 +1201,31 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { } const renderPass = encoder.beginRenderPass({ colorAttachments: [], - depthStencilAttachment, + depthStencilAttachment }); renderPass.setPipeline(renderPipeline); + const uniformBufferEntry = use2DArray ? + [this.createUniformBufferAndBindGroupEntryForBaseArrayLayer(z)] : + []; + const bindGroup = this.device.createBindGroup({ layout: renderPipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: inputTexture.createView({ - dimension: '2d', + { + binding: 0, + resource: inputTexture.createView({ + dimension: use2DArray ? '2d-array' : '2d', + ...(!use2DArray && { baseArrayLayer: z, - arrayLayerCount: 1, - baseMipLevel: 0, - mipLevelCount: 1, + arrayLayerCount: 1 }), - }, - ], + baseMipLevel: 0, + mipLevelCount: 1 + }) + }, + ...uniformBufferEntry] + }); renderPass.setBindGroup(0, bindGroup); renderPass.draw(6); @@ -1150,15 +1235,32 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { this.queue.submit([encoder.finish()]); } + createUniformBufferAndBindGroupEntryForBaseArrayLayer(z) { + const buffer = this.device.createBuffer({ + usage: GPUBufferUsage.UNIFORM, + size: 4, + mappedAtCreation: true + }); + this.trackForCleanup(buffer); + new Uint32Array(buffer.getMappedRange()).set([z]); + buffer.unmap(); + return { + binding: 1, + resource: { + buffer + } + }; + } + DoCopyTextureToBufferWithDepthAspectTest( - format, - copySize, - bytesPerRowPadding, - rowsPerImagePadding, - offset, - dataPaddingInBytes, - mipLevel - ) { + format, + copySize, + bytesPerRowPadding, + rowsPerImagePadding, + offset, + dataPaddingInBytes, + mipLevel) + { // [2]: need to convert the float32 values in initialData into the ones compatible // to the depth aspect of depthFormats when depth16unorm is supported by the browsers. @@ -1191,7 +1293,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { format, size: [copySize[0] << mipLevel, copySize[1] << mipLevel, copySize[2]], usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - mipLevelCount: mipLevel + 1, + mipLevelCount: mipLevel + 1 }); this.trackForCleanup(depthTexture); this.initializeDepthAspectWithRendering(depthTexture, format, copySize, mipLevel, initialData); @@ -1199,22 +1301,21 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { // Copy the depth aspect of the texture into the destination buffer. const aspectBytesPerBlock = depthStencilFormatAspectSize(format, 'depth-only'); const bytesPerRow = - align(aspectBytesPerBlock * copySize[0], kBytesPerRowAlignment) + - bytesPerRowPadding * kBytesPerRowAlignment; + align(aspectBytesPerBlock * copySize[0], kBytesPerRowAlignment) + + bytesPerRowPadding * kBytesPerRowAlignment; const rowsPerImage = copySize[1] + rowsPerImagePadding; const destinationBufferSize = align( bytesPerRow * rowsPerImage * copySize[2] + - bytesPerRow * (copySize[1] - 1) + - aspectBytesPerBlock * copySize[0] + - offset + - dataPaddingInBytes, + bytesPerRow * (copySize[1] - 1) + + aspectBytesPerBlock * copySize[0] + + offset + + dataPaddingInBytes, kBufferSizeAlignment ); - const destinationBuffer = this.device.createBuffer({ usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - size: destinationBufferSize, + size: destinationBufferSize }); this.trackForCleanup(destinationBuffer); const copyEncoder = this.device.createCommandEncoder(); @@ -1222,17 +1323,16 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { { texture: depthTexture, mipLevel, - aspect: 'depth-only', + aspect: 'depth-only' }, { buffer: destinationBuffer, offset, bytesPerRow, - rowsPerImage, + rowsPerImage }, copySize ); - this.queue.submit([copyEncoder.finish()]); // Validate the data in destinationBuffer is what we expect. @@ -1245,7 +1345,7 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) { { src: formatInitialData, start: baseInitialDataOffset + y * copySize[0], - length: copySize[0], + length: copySize[0] }, { dst: expectedData, start: baseExpectedOffset + y * bytesPerRow } ); @@ -1268,50 +1368,50 @@ export const g = makeTestGroup(ImageCopyTest); const kRowsPerImageAndBytesPerRowParams = { paddings: [ - { bytesPerRowPadding: 0, rowsPerImagePadding: 0 }, // no padding - { bytesPerRowPadding: 0, rowsPerImagePadding: 6 }, // rowsPerImage padding - { bytesPerRowPadding: 6, rowsPerImagePadding: 0 }, // bytesPerRow padding - { bytesPerRowPadding: 15, rowsPerImagePadding: 17 }, // both paddings + { bytesPerRowPadding: 0, rowsPerImagePadding: 0 }, // no padding + { bytesPerRowPadding: 0, rowsPerImagePadding: 6 }, // rowsPerImage padding + { bytesPerRowPadding: 6, rowsPerImagePadding: 0 }, // bytesPerRow padding + { bytesPerRowPadding: 15, rowsPerImagePadding: 17 } // both paddings ], copySizes: [ - // In the two cases below, for (WriteTexture, PartialCopyB2T) and (CopyB2T, FullCopyT2B) - // sets of methods we will have bytesPerRow = 256 and copyDepth % 2 == { 0, 1 } - // respectively. This covers a special code path for D3D12. - { copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 5 }, // standard copy - { copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 2 }, // standard copy + // In the two cases below, for (WriteTexture, PartialCopyB2T) and (CopyB2T, FullCopyT2B) + // sets of methods we will have bytesPerRow = 256 and copyDepth % 2 == { 0, 1 } + // respectively. This covers a special code path for D3D12. + { copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 5 }, // standard copy + { copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 2 }, // standard copy - { copyWidthInBlocks: 0, copyHeightInBlocks: 4, copyDepth: 5 }, // empty copy because of width - { copyWidthInBlocks: 3, copyHeightInBlocks: 0, copyDepth: 5 }, // empty copy because of height - { copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 0 }, // empty copy because of depthOrArrayLayers - { copyWidthInBlocks: 256, copyHeightInBlocks: 3, copyDepth: 2 }, // copyWidth is 256-aligned - { copyWidthInBlocks: 1, copyHeightInBlocks: 3, copyDepth: 5 }, // copyWidth = 1 + { copyWidthInBlocks: 0, copyHeightInBlocks: 4, copyDepth: 5 }, // empty copy because of width + { copyWidthInBlocks: 3, copyHeightInBlocks: 0, copyDepth: 5 }, // empty copy because of height + { copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 0 }, // empty copy because of depthOrArrayLayers + { copyWidthInBlocks: 256, copyHeightInBlocks: 3, copyDepth: 2 }, // copyWidth is 256-aligned + { copyWidthInBlocks: 1, copyHeightInBlocks: 3, copyDepth: 5 }, // copyWidth = 1 - // The two cases below cover another special code path for D3D12. - // - For (WriteTexture, FullCopyT2B) with r8unorm: - // bytesPerRow = 15 = 3 * 5 = bytesInACompleteCopyImage. - { copyWidthInBlocks: 32, copyHeightInBlocks: 1, copyDepth: 8 }, // copyHeight = 1 - // - For (CopyB2T, FullCopyT2B) and (WriteTexture, PartialCopyT2B) with r8unorm: - // bytesPerRow = 256 = 8 * 32 = bytesInACompleteCopyImage. - { copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 1 }, // copyDepth = 1 + // The two cases below cover another special code path for D3D12. + // - For (WriteTexture, FullCopyT2B) with r8unorm: + // bytesPerRow = 15 = 3 * 5 = bytesInACompleteCopyImage. + { copyWidthInBlocks: 32, copyHeightInBlocks: 1, copyDepth: 8 }, // copyHeight = 1 + // - For (CopyB2T, FullCopyT2B) and (WriteTexture, PartialCopyT2B) with r8unorm: + // bytesPerRow = 256 = 8 * 32 = bytesInACompleteCopyImage. + { copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 1 }, // copyDepth = 1 - { copyWidthInBlocks: 7, copyHeightInBlocks: 1, copyDepth: 1 }, // copyHeight = 1 and copyDepth = 1 + { copyWidthInBlocks: 7, copyHeightInBlocks: 1, copyDepth: 1 } // copyHeight = 1 and copyDepth = 1 ], // Copy sizes that are suitable for 1D texture and check both some copy sizes and empty copies. copySizes1D: [ - { copyWidthInBlocks: 3, copyHeightInBlocks: 1, copyDepth: 1 }, - { copyWidthInBlocks: 5, copyHeightInBlocks: 1, copyDepth: 1 }, + { copyWidthInBlocks: 3, copyHeightInBlocks: 1, copyDepth: 1 }, + { copyWidthInBlocks: 5, copyHeightInBlocks: 1, copyDepth: 1 }, + + { copyWidthInBlocks: 3, copyHeightInBlocks: 0, copyDepth: 1 }, + { copyWidthInBlocks: 0, copyHeightInBlocks: 1, copyDepth: 1 }, + { copyWidthInBlocks: 5, copyHeightInBlocks: 1, copyDepth: 0 }] - { copyWidthInBlocks: 3, copyHeightInBlocks: 0, copyDepth: 1 }, - { copyWidthInBlocks: 0, copyHeightInBlocks: 1, copyDepth: 1 }, - { copyWidthInBlocks: 5, copyHeightInBlocks: 1, copyDepth: 0 }, - ], }; -g.test('rowsPerImage_and_bytesPerRow') - .desc( - `Test that copying data with various bytesPerRow and rowsPerImage values and minimum required +g.test('rowsPerImage_and_bytesPerRow'). +desc( + `Test that copying data with various bytesPerRow and rowsPerImage values and minimum required bytes in copy works for every format. Covers a special code path for Metal: @@ -1322,98 +1422,98 @@ bytes in copy works for every format. TODO: Cover the special code paths for 3D textures in D3D12. ` - ) - .params(u => - u - .combineWithParams(kMethodsToTest) - .combine('format', kColorTextureFormats) - .filter(formatCanBeTested) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combineWithParams(kRowsPerImageAndBytesPerRowParams.paddings) - .expandWithParams(p => { - if (p.dimension === '1d') { - return kRowsPerImageAndBytesPerRowParams.copySizes1D; - } - return kRowsPerImageAndBytesPerRowParams.copySizes; - }) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - bytesPerRowPadding, - rowsPerImagePadding, - copyWidthInBlocks, - copyHeightInBlocks, - copyDepth, - format, - dimension, - initMethod, - checkMethod, - } = t.params; - const info = kTextureFormatInfo[format]; - // For CopyB2T and CopyT2B we need to have bytesPerRow 256-aligned, - // to make this happen we align the bytesInACompleteRow value and multiply - // bytesPerRowPadding by 256. - const bytesPerRowAlignment = - initMethod === 'WriteTexture' && checkMethod === 'FullCopyT2B' ? 1 : 256; +). +params((u) => +u. +combineWithParams(kMethodsToTest). +combine('format', kColorTextureFormats). +filter(formatCanBeTested). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combineWithParams(kRowsPerImageAndBytesPerRowParams.paddings). +expandWithParams((p) => { + if (p.dimension === '1d') { + return kRowsPerImageAndBytesPerRowParams.copySizes1D; + } + return kRowsPerImageAndBytesPerRowParams.copySizes; +}) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + bytesPerRowPadding, + rowsPerImagePadding, + copyWidthInBlocks, + copyHeightInBlocks, + copyDepth, + format, + dimension, + initMethod, + checkMethod + } = t.params; + const info = kTextureFormatInfo[format]; + // For CopyB2T and CopyT2B we need to have bytesPerRow 256-aligned, + // to make this happen we align the bytesInACompleteRow value and multiply + // bytesPerRowPadding by 256. + const bytesPerRowAlignment = + initMethod === 'WriteTexture' && checkMethod === 'FullCopyT2B' ? 1 : 256; - const copyWidth = copyWidthInBlocks * info.blockWidth; - const copyHeight = copyHeightInBlocks * info.blockHeight; - const rowsPerImage = copyHeightInBlocks + rowsPerImagePadding; - const bytesPerRow = - align(bytesInACompleteRow(copyWidth, format), bytesPerRowAlignment) + - bytesPerRowPadding * bytesPerRowAlignment; - const copySize = { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }; + const copyWidth = copyWidthInBlocks * info.blockWidth; + const copyHeight = copyHeightInBlocks * info.blockHeight; + const rowsPerImage = copyHeightInBlocks + rowsPerImagePadding; + const bytesPerRow = + align(bytesInACompleteRow(copyWidth, format), bytesPerRowAlignment) + + bytesPerRowPadding * bytesPerRowAlignment; + const copySize = { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }; - const dataSize = dataBytesForCopyOrFail({ - layout: { offset: 0, bytesPerRow, rowsPerImage }, - format, - copySize, - method: initMethod, - }); - - t.uploadTextureAndVerifyCopy({ - textureDataLayout: { offset: 0, bytesPerRow, rowsPerImage }, - copySize, - dataSize, - textureSize: [ - Math.max(copyWidth, info.blockWidth), - Math.max(copyHeight, info.blockHeight), - Math.max(copyDepth, 1), - ], - /* making sure the texture is non-empty */ format, - dimension, - initMethod, - checkMethod, - }); + const dataSize = dataBytesForCopyOrFail({ + layout: { offset: 0, bytesPerRow, rowsPerImage }, + format, + copySize, + method: initMethod }); + t.uploadTextureAndVerifyCopy({ + textureDataLayout: { offset: 0, bytesPerRow, rowsPerImage }, + copySize, + dataSize, + textureSize: [ + Math.max(copyWidth, info.blockWidth), + Math.max(copyHeight, info.blockHeight), + Math.max(copyDepth, 1)] + /* making sure the texture is non-empty */, + format, + dimension, + initMethod, + checkMethod + }); +}); + const kOffsetsAndSizesParams = { offsetsAndPaddings: [ - { offsetInBlocks: 0, dataPaddingInBytes: 0 }, // no offset and no padding - { offsetInBlocks: 1, dataPaddingInBytes: 0 }, // offset = 1 - { offsetInBlocks: 2, dataPaddingInBytes: 0 }, // offset = 2 - { offsetInBlocks: 15, dataPaddingInBytes: 0 }, // offset = 15 - { offsetInBlocks: 16, dataPaddingInBytes: 0 }, // offset = 16 - { offsetInBlocks: 242, dataPaddingInBytes: 0 }, // for rgba8unorm format: offset + bytesInCopyExtentPerRow = 242 + 12 = 256 = bytesPerRow - { offsetInBlocks: 243, dataPaddingInBytes: 0 }, // for rgba8unorm format: offset + bytesInCopyExtentPerRow = 243 + 12 > 256 = bytesPerRow - { offsetInBlocks: 768, dataPaddingInBytes: 0 }, // for copyDepth = 1, blockWidth = 1 and bytesPerBlock = 1: offset = 768 = 3 * 256 = bytesInACompleteCopyImage - { offsetInBlocks: 769, dataPaddingInBytes: 0 }, // for copyDepth = 1, blockWidth = 1 and bytesPerBlock = 1: offset = 769 > 768 = bytesInACompleteCopyImage - { offsetInBlocks: 0, dataPaddingInBytes: 1 }, // dataPaddingInBytes > 0 - { offsetInBlocks: 1, dataPaddingInBytes: 8 }, // offset > 0 and dataPaddingInBytes > 0 + { offsetInBlocks: 0, dataPaddingInBytes: 0 }, // no offset and no padding + { offsetInBlocks: 1, dataPaddingInBytes: 0 }, // offset = 1 + { offsetInBlocks: 2, dataPaddingInBytes: 0 }, // offset = 2 + { offsetInBlocks: 15, dataPaddingInBytes: 0 }, // offset = 15 + { offsetInBlocks: 16, dataPaddingInBytes: 0 }, // offset = 16 + { offsetInBlocks: 242, dataPaddingInBytes: 0 }, // for rgba8unorm format: offset + bytesInCopyExtentPerRow = 242 + 12 = 256 = bytesPerRow + { offsetInBlocks: 243, dataPaddingInBytes: 0 }, // for rgba8unorm format: offset + bytesInCopyExtentPerRow = 243 + 12 > 256 = bytesPerRow + { offsetInBlocks: 768, dataPaddingInBytes: 0 }, // for copyDepth = 1, blockWidth = 1 and bytesPerBlock = 1: offset = 768 = 3 * 256 = bytesInACompleteCopyImage + { offsetInBlocks: 769, dataPaddingInBytes: 0 }, // for copyDepth = 1, blockWidth = 1 and bytesPerBlock = 1: offset = 769 > 768 = bytesInACompleteCopyImage + { offsetInBlocks: 0, dataPaddingInBytes: 1 }, // dataPaddingInBytes > 0 + { offsetInBlocks: 1, dataPaddingInBytes: 8 } // offset > 0 and dataPaddingInBytes > 0 ], - copyDepth: [1, 2], + copyDepth: [1, 2] }; -g.test('offsets_and_sizes') - .desc( - `Test that copying data with various offset values and additional data paddings +g.test('offsets_and_sizes'). +desc( + `Test that copying data with various offset values and additional data paddings works for every format with 2d and 2d-array textures. Covers two special code paths for D3D12: @@ -1423,191 +1523,200 @@ works for every format with 2d and 2d-array textures. TODO: Cover the special code paths for 3D textures in D3D12. TODO: Make a variant for depth-stencil formats. ` - ) - .params(u => - u - .combineWithParams(kMethodsToTest) - .combine('format', kColorTextureFormats) - .filter(formatCanBeTested) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combineWithParams(kOffsetsAndSizesParams.offsetsAndPaddings) - .combine('copyDepth', kOffsetsAndSizesParams.copyDepth) // 2d and 2d-array textures - .unless(p => p.dimension === '1d' && p.copyDepth !== 1) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - offsetInBlocks, - dataPaddingInBytes, - copyDepth, - format, - dimension, - initMethod, - checkMethod, - } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combineWithParams(kMethodsToTest). +combine('format', kColorTextureFormats). +filter(formatCanBeTested). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combineWithParams(kOffsetsAndSizesParams.offsetsAndPaddings). +combine('copyDepth', kOffsetsAndSizesParams.copyDepth) // 2d and 2d-array textures +.unless((p) => p.dimension === '1d' && p.copyDepth !== 1) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + offsetInBlocks, + dataPaddingInBytes, + copyDepth, + format, + dimension, + initMethod, + checkMethod + } = t.params; + const info = kTextureFormatInfo[format]; - const offset = offsetInBlocks * info.color.bytes; - const copySize = { - width: 3 * info.blockWidth, - height: 3 * info.blockHeight, - depthOrArrayLayers: copyDepth, - }; - let textureHeight = 4 * info.blockHeight; - let rowsPerImage = 3; - const bytesPerRow = 256; + const offset = offsetInBlocks * info.color.bytes; + const copySize = { + width: 3 * info.blockWidth, + height: 3 * info.blockHeight, + depthOrArrayLayers: copyDepth + }; + let textureHeight = 4 * info.blockHeight; + let rowsPerImage = 3; + const bytesPerRow = 256; - if (dimension === '1d') { - copySize.height = 1; - textureHeight = info.blockHeight; - rowsPerImage = 1; - } - const textureSize = [4 * info.blockWidth, textureHeight, copyDepth]; + if (dimension === '1d') { + copySize.height = 1; + textureHeight = info.blockHeight; + rowsPerImage = 1; + } + const textureSize = [4 * info.blockWidth, textureHeight, copyDepth]; - const minDataSize = dataBytesForCopyOrFail({ - layout: { offset, bytesPerRow, rowsPerImage }, - format, - copySize, - method: initMethod, - }); - const dataSize = minDataSize + dataPaddingInBytes; - - // We're copying a (3 x 3 x copyDepth) (in texel blocks) part of a (4 x 4 x copyDepth) - // (in texel blocks) texture with no origin. - t.uploadTextureAndVerifyCopy({ - textureDataLayout: { offset, bytesPerRow, rowsPerImage }, - copySize, - dataSize, - textureSize, - format, - dimension, - initMethod, - checkMethod, - }); + const minDataSize = dataBytesForCopyOrFail({ + layout: { offset, bytesPerRow, rowsPerImage }, + format, + copySize, + method: initMethod }); + const dataSize = minDataSize + dataPaddingInBytes; -g.test('origins_and_extents') - .desc( - `Test that copying slices of a texture works with various origin and copyExtent values + // We're copying a (3 x 3 x copyDepth) (in texel blocks) part of a (4 x 4 x copyDepth) + // (in texel blocks) texture with no origin. + t.uploadTextureAndVerifyCopy({ + textureDataLayout: { offset, bytesPerRow, rowsPerImage }, + copySize, + dataSize, + textureSize, + format, + dimension, + initMethod, + checkMethod + }); +}); + +g.test('origins_and_extents'). +desc( + `Test that copying slices of a texture works with various origin and copyExtent values for all formats. We pass origin and copyExtent as [number, number, number].` - ) - .params(u => - u - .combineWithParams(kMethodsToTest) - .combine('format', kColorTextureFormats) - .filter(formatCanBeTested) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('originValueInBlocks', [0, 7, 8]) - .combine('copySizeValueInBlocks', [0, 7, 8]) - .combine('textureSizePaddingValueInBlocks', [0, 7, 8]) - .unless( - p => - // we can't create an empty texture - p.copySizeValueInBlocks + p.originValueInBlocks + p.textureSizePaddingValueInBlocks === 0 - ) - .combine('coordinateToTest', [0, 1, 2]) - .unless(p => p.dimension === '1d' && p.coordinateToTest !== 0) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - originValueInBlocks, - copySizeValueInBlocks, - textureSizePaddingValueInBlocks, - format, - dimension, - initMethod, - checkMethod, - } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combineWithParams(kMethodsToTest). +combine('format', kColorTextureFormats). +filter(formatCanBeTested). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('originValueInBlocks', [0, 7, 8]). +combine('copySizeValueInBlocks', [0, 7, 8]). +combine('textureSizePaddingValueInBlocks', [0, 7, 8]). +unless( + (p) => + // we can't create an empty texture + p.copySizeValueInBlocks + p.originValueInBlocks + p.textureSizePaddingValueInBlocks === 0 +). +combine('coordinateToTest', [0, 1, 2]). +unless((p) => p.dimension === '1d' && p.coordinateToTest !== 0) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + originValueInBlocks, + copySizeValueInBlocks, + textureSizePaddingValueInBlocks, + format, + dimension, + initMethod, + checkMethod + } = t.params; + const info = kTextureFormatInfo[format]; - let originBlocks = [1, 1, 1]; - let copySizeBlocks = [2, 2, 2]; - let texSizeBlocks = [3, 3, 3]; - if (dimension === '1d') { - originBlocks = [1, 0, 0]; - copySizeBlocks = [2, 1, 1]; - texSizeBlocks = [3, 1, 1]; - } + let originBlocks = [1, 1, 1]; + let copySizeBlocks = [2, 2, 2]; + let texSizeBlocks = [3, 3, 3]; + if (dimension === '1d') { + originBlocks = [1, 0, 0]; + copySizeBlocks = [2, 1, 1]; + texSizeBlocks = [3, 1, 1]; + } - { - const ctt = t.params.coordinateToTest; - originBlocks[ctt] = originValueInBlocks; - copySizeBlocks[ctt] = copySizeValueInBlocks; - texSizeBlocks[ctt] = - originBlocks[ctt] + copySizeBlocks[ctt] + textureSizePaddingValueInBlocks; - } + { + const ctt = t.params.coordinateToTest; + originBlocks[ctt] = originValueInBlocks; + copySizeBlocks[ctt] = copySizeValueInBlocks; + texSizeBlocks[ctt] = + originBlocks[ctt] + copySizeBlocks[ctt] + textureSizePaddingValueInBlocks; + } - const origin = { - x: originBlocks[0] * info.blockWidth, - y: originBlocks[1] * info.blockHeight, - z: originBlocks[2], - }; - const copySize = { - width: copySizeBlocks[0] * info.blockWidth, - height: copySizeBlocks[1] * info.blockHeight, - depthOrArrayLayers: copySizeBlocks[2], - }; - const textureSize = [ - texSizeBlocks[0] * info.blockWidth, - texSizeBlocks[1] * info.blockHeight, - texSizeBlocks[2], - ]; + const origin = { + x: originBlocks[0] * info.blockWidth, + y: originBlocks[1] * info.blockHeight, + z: originBlocks[2] + }; + const copySize = { + width: copySizeBlocks[0] * info.blockWidth, + height: copySizeBlocks[1] * info.blockHeight, + depthOrArrayLayers: copySizeBlocks[2] + }; + const textureSize = [ + texSizeBlocks[0] * info.blockWidth, + texSizeBlocks[1] * info.blockHeight, + texSizeBlocks[2]]; - const rowsPerImage = copySizeBlocks[1]; - const bytesPerRow = align(copySizeBlocks[0] * info.color.bytes, 256); - const dataSize = dataBytesForCopyOrFail({ - layout: { offset: 0, bytesPerRow, rowsPerImage }, - format, - copySize, - method: initMethod, - }); + const rowsPerImage = copySizeBlocks[1]; + const bytesPerRow = align(copySizeBlocks[0] * info.color.bytes, 256); - // For testing width: we copy a (_ x 2 x 2) (in texel blocks) part of a (_ x 3 x 3) - // (in texel blocks) texture with origin (_, 1, 1) (in texel blocks). - // Similarly for other coordinates. - t.uploadTextureAndVerifyCopy({ - textureDataLayout: { offset: 0, bytesPerRow, rowsPerImage }, - copySize, - dataSize, - origin, - textureSize, - format, - dimension, - initMethod, - checkMethod, - changeBeforePass: 'arrays', - }); + const dataSize = dataBytesForCopyOrFail({ + layout: { offset: 0, bytesPerRow, rowsPerImage }, + format, + copySize, + method: initMethod }); + // For testing width: we copy a (_ x 2 x 2) (in texel blocks) part of a (_ x 3 x 3) + // (in texel blocks) texture with origin (_, 1, 1) (in texel blocks). + // Similarly for other coordinates. + t.uploadTextureAndVerifyCopy({ + textureDataLayout: { offset: 0, bytesPerRow, rowsPerImage }, + copySize, + dataSize, + origin, + textureSize, + format, + dimension, + initMethod, + checkMethod, + changeBeforePass: 'arrays' + }); +}); + /** * Generates textureSizes which correspond to the same physicalSizeAtMipLevel including virtual * sizes at mip level different from the physical ones. */ -function* generateTestTextureSizes({ format, dimension, mipLevel, _mipSizeInBlocks }) { +function* generateTestTextureSizes({ + format, + dimension, + mipLevel, + _mipSizeInBlocks + + + + + +}) { assert(dimension !== '1d'); // textureSize[1] would be wrong for 1D mipped textures. const info = kTextureFormatInfo[format]; const widthAtThisLevel = _mipSizeInBlocks.width * info.blockWidth; const heightAtThisLevel = _mipSizeInBlocks.height * info.blockHeight; const textureSize = [ - widthAtThisLevel << mipLevel, - heightAtThisLevel << mipLevel, - _mipSizeInBlocks.depthOrArrayLayers << (dimension === '3d' ? mipLevel : 0), - ]; + widthAtThisLevel << mipLevel, + heightAtThisLevel << mipLevel, + _mipSizeInBlocks.depthOrArrayLayers << (dimension === '3d' ? mipLevel : 0)]; yield textureSize; @@ -1620,8 +1729,8 @@ function* generateTestTextureSizes({ format, dimension, mipLevel, _mipSizeInBloc const heightAtPrevLevel = heightAtThisLevel << 1; assert(mipLevel > 0); assert(widthAtPrevLevel >= info.blockWidth && heightAtPrevLevel >= info.blockHeight); - const modifiedWidth = (widthAtPrevLevel - info.blockWidth) << (mipLevel - 1); - const modifiedHeight = (heightAtPrevLevel - info.blockHeight) << (mipLevel - 1); + const modifiedWidth = widthAtPrevLevel - info.blockWidth << mipLevel - 1; + const modifiedHeight = heightAtPrevLevel - info.blockHeight << mipLevel - 1; const modifyWidth = info.blockWidth > 1 && modifiedWidth !== textureSize[0]; const modifyHeight = info.blockHeight > 1 && modifiedHeight !== textureSize[1]; @@ -1641,9 +1750,9 @@ function* generateTestTextureSizes({ format, dimension, mipLevel, _mipSizeInBloc } } -g.test('mip_levels') - .desc( - `Test that copying various mip levels works. Covers two special code paths: +g.test('mip_levels'). +desc( + `Test that copying various mip levels works. Covers two special code paths: - The physical size of the subresource is not equal to the logical size. - bufferSize - offset < bytesPerImage * copyExtent.depthOrArrayLayers, and copyExtent needs to be clamped for all block formats. - For 3D textures test copying to a sub-range of the depth. @@ -1652,200 +1761,204 @@ Tests both 2D and 3D textures. 1D textures are skipped because they can only hav TODO: Make a variant for depth-stencil formats. ` - ) - .params(u => - u - .combineWithParams(kMethodsToTest) - .combine('format', kColorTextureFormats) - .filter(formatCanBeTested) - .combine('dimension', ['2d', '3d']) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combineWithParams([ - // origin + copySize = texturePhysicalSizeAtMipLevel for all coordinates, 2d texture */ - { - copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 1 }, - originInBlocks: { x: 3, y: 2, z: 0 }, - _mipSizeInBlocks: { width: 8, height: 6, depthOrArrayLayers: 1 }, - mipLevel: 1, - }, - // origin + copySize = texturePhysicalSizeAtMipLevel for all coordinates, 2d-array texture - { - copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, - originInBlocks: { x: 3, y: 2, z: 1 }, - _mipSizeInBlocks: { width: 8, height: 6, depthOrArrayLayers: 3 }, - mipLevel: 2, - }, - // origin.x + copySize.width = texturePhysicalSizeAtMipLevel.width - { - copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, - originInBlocks: { x: 3, y: 2, z: 1 }, - _mipSizeInBlocks: { width: 8, height: 7, depthOrArrayLayers: 4 }, - mipLevel: 3, - }, - // origin.y + copySize.height = texturePhysicalSizeAtMipLevel.height - { - copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, - originInBlocks: { x: 3, y: 2, z: 1 }, - _mipSizeInBlocks: { width: 9, height: 6, depthOrArrayLayers: 4 }, - mipLevel: 4, - }, - // origin.z + copySize.depthOrArrayLayers = texturePhysicalSizeAtMipLevel.depthOrArrayLayers - { - copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, - originInBlocks: { x: 3, y: 2, z: 1 }, - _mipSizeInBlocks: { width: 9, height: 7, depthOrArrayLayers: 3 }, - mipLevel: 4, - }, - // origin + copySize < texturePhysicalSizeAtMipLevel for all coordinates - { - copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, - originInBlocks: { x: 3, y: 2, z: 1 }, - _mipSizeInBlocks: { width: 9, height: 7, depthOrArrayLayers: 4 }, - mipLevel: 4, - }, - ]) - .expand('textureSize', generateTestTextureSizes) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - copySizeInBlocks, - originInBlocks, - textureSize, - mipLevel, - format, - dimension, - initMethod, - checkMethod, - } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combineWithParams(kMethodsToTest). +combine('format', kColorTextureFormats). +filter(formatCanBeTested). +combine('dimension', ['2d', '3d']). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combineWithParams([ +// origin + copySize = texturePhysicalSizeAtMipLevel for all coordinates, 2d texture */ +{ + copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 1 }, + originInBlocks: { x: 3, y: 2, z: 0 }, + _mipSizeInBlocks: { width: 8, height: 6, depthOrArrayLayers: 1 }, + mipLevel: 1 +}, +// origin + copySize = texturePhysicalSizeAtMipLevel for all coordinates, 2d-array texture +{ + copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, + originInBlocks: { x: 3, y: 2, z: 1 }, + _mipSizeInBlocks: { width: 8, height: 6, depthOrArrayLayers: 3 }, + mipLevel: 2 +}, +// origin.x + copySize.width = texturePhysicalSizeAtMipLevel.width +{ + copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, + originInBlocks: { x: 3, y: 2, z: 1 }, + _mipSizeInBlocks: { width: 8, height: 7, depthOrArrayLayers: 4 }, + mipLevel: 3 +}, +// origin.y + copySize.height = texturePhysicalSizeAtMipLevel.height +{ + copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, + originInBlocks: { x: 3, y: 2, z: 1 }, + _mipSizeInBlocks: { width: 9, height: 6, depthOrArrayLayers: 4 }, + mipLevel: 4 +}, +// origin.z + copySize.depthOrArrayLayers = texturePhysicalSizeAtMipLevel.depthOrArrayLayers +{ + copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, + originInBlocks: { x: 3, y: 2, z: 1 }, + _mipSizeInBlocks: { width: 9, height: 7, depthOrArrayLayers: 3 }, + mipLevel: 4 +}, +// origin + copySize < texturePhysicalSizeAtMipLevel for all coordinates +{ + copySizeInBlocks: { width: 5, height: 4, depthOrArrayLayers: 2 }, + originInBlocks: { x: 3, y: 2, z: 1 }, + _mipSizeInBlocks: { width: 9, height: 7, depthOrArrayLayers: 4 }, + mipLevel: 4 +}] +). +expand('textureSize', generateTestTextureSizes) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + copySizeInBlocks, + originInBlocks, + textureSize, + mipLevel, + format, + dimension, + initMethod, + checkMethod + } = t.params; + const info = kTextureFormatInfo[format]; - const origin = { - x: originInBlocks.x * info.blockWidth, - y: originInBlocks.y * info.blockHeight, - z: originInBlocks.z, - }; - const copySize = { - width: copySizeInBlocks.width * info.blockWidth, - height: copySizeInBlocks.height * info.blockHeight, - depthOrArrayLayers: copySizeInBlocks.depthOrArrayLayers, - }; + const origin = { + x: originInBlocks.x * info.blockWidth, + y: originInBlocks.y * info.blockHeight, + z: originInBlocks.z + }; + const copySize = { + width: copySizeInBlocks.width * info.blockWidth, + height: copySizeInBlocks.height * info.blockHeight, + depthOrArrayLayers: copySizeInBlocks.depthOrArrayLayers + }; - const rowsPerImage = copySizeInBlocks.height + 1; - const bytesPerRow = align(copySize.width, 256); + const rowsPerImage = copySizeInBlocks.height + 1; + const bytesPerRow = align(copySize.width, 256); - const dataSize = dataBytesForCopyOrFail({ - layout: { offset: 0, bytesPerRow, rowsPerImage }, - format, - copySize, - method: initMethod, - }); - - t.uploadTextureAndVerifyCopy({ - textureDataLayout: { offset: 0, bytesPerRow, rowsPerImage }, - copySize, - dataSize, - origin, - mipLevel, - textureSize, - format, - dimension, - initMethod, - checkMethod, - }); + const dataSize = dataBytesForCopyOrFail({ + layout: { offset: 0, bytesPerRow, rowsPerImage }, + format, + copySize, + method: initMethod }); + t.uploadTextureAndVerifyCopy({ + textureDataLayout: { offset: 0, bytesPerRow, rowsPerImage }, + copySize, + dataSize, + origin, + mipLevel, + textureSize, + format, + dimension, + initMethod, + checkMethod + }); +}); + const UND = undefined; -g.test('undefined_params') - .desc( - `Tests undefined values of bytesPerRow, rowsPerImage, and origin.x/y/z. +g.test('undefined_params'). +desc( + `Tests undefined values of bytesPerRow, rowsPerImage, and origin.x/y/z. Ensures bytesPerRow/rowsPerImage=undefined are valid and behave as expected. Ensures origin.x/y/z undefined default to 0.` - ) - .params(u => - u - .combineWithParams(kMethodsToTest) - .combine('dimension', kTextureDimensions) - .beginSubcases() - .combineWithParams([ - // copying one row: bytesPerRow and rowsPerImage can be undefined - { copySize: [3, 1, 1], origin: [UND, UND, UND], bytesPerRow: UND, rowsPerImage: UND }, - // copying one slice: rowsPerImage can be undefined - { copySize: [3, 1, 1], origin: [UND, UND, UND], bytesPerRow: 256, rowsPerImage: UND }, - { copySize: [3, 3, 1], origin: [UND, UND, UND], bytesPerRow: 256, rowsPerImage: UND }, - // copying two slices - { copySize: [3, 3, 2], origin: [UND, UND, UND], bytesPerRow: 256, rowsPerImage: 3 }, - // origin.x = undefined - { copySize: [1, 1, 1], origin: [UND, 1, 1], bytesPerRow: UND, rowsPerImage: UND }, - // origin.y = undefined - { copySize: [1, 1, 1], origin: [1, UND, 1], bytesPerRow: UND, rowsPerImage: UND }, - // origin.z = undefined - { copySize: [1, 1, 1], origin: [1, 1, UND], bytesPerRow: UND, rowsPerImage: UND }, - ]) - .expandWithParams(p => [ - { - _textureSize: [ - 100, - p.copySize[1] + (p.origin[1] ?? 0), - p.copySize[2] + (p.origin[2] ?? 0), - ], - }, - ]) - .unless(p => p.dimension === '1d' && (p._textureSize[1] > 1 || p._textureSize[2] > 1)) - ) - .fn(t => { - const { - dimension, - _textureSize, - bytesPerRow, - rowsPerImage, - copySize, - origin, - initMethod, - checkMethod, - } = t.params; +). +params((u) => +u. +combineWithParams(kMethodsToTest). +combine('dimension', kTextureDimensions). +beginSubcases(). +combineWithParams([ +// copying one row: bytesPerRow and rowsPerImage can be undefined +{ copySize: [3, 1, 1], origin: [UND, UND, UND], bytesPerRow: UND, rowsPerImage: UND }, +// copying one slice: rowsPerImage can be undefined +{ copySize: [3, 1, 1], origin: [UND, UND, UND], bytesPerRow: 256, rowsPerImage: UND }, +{ copySize: [3, 3, 1], origin: [UND, UND, UND], bytesPerRow: 256, rowsPerImage: UND }, +// copying two slices +{ copySize: [3, 3, 2], origin: [UND, UND, UND], bytesPerRow: 256, rowsPerImage: 3 }, +// origin.x = undefined +{ copySize: [1, 1, 1], origin: [UND, 1, 1], bytesPerRow: UND, rowsPerImage: UND }, +// origin.y = undefined +{ copySize: [1, 1, 1], origin: [1, UND, 1], bytesPerRow: UND, rowsPerImage: UND }, +// origin.z = undefined +{ copySize: [1, 1, 1], origin: [1, 1, UND], bytesPerRow: UND, rowsPerImage: UND }] +). +expandWithParams((p) => [ +{ + _textureSize: [ + 100, + p.copySize[1] + (p.origin[1] ?? 0), + p.copySize[2] + (p.origin[2] ?? 0)] - t.uploadTextureAndVerifyCopy({ - textureDataLayout: { - offset: 0, - // Zero will get turned back into undefined later. - bytesPerRow: bytesPerRow ?? 0, - // Zero will get turned back into undefined later. - rowsPerImage: rowsPerImage ?? 0, - }, - copySize: { width: copySize[0], height: copySize[1], depthOrArrayLayers: copySize[2] }, - dataSize: 2000, - textureSize: _textureSize, - // Zeros will get turned back into undefined later. - origin: { x: origin[0] ?? 0, y: origin[1] ?? 0, z: origin[2] ?? 0 }, - format: 'rgba8unorm', - dimension, - initMethod, - checkMethod, - changeBeforePass: 'undefined', - }); +}] +). +unless((p) => p.dimension === '1d' && (p._textureSize[1] > 1 || p._textureSize[2] > 1)) +). +fn((t) => { + const { + dimension, + _textureSize, + bytesPerRow, + rowsPerImage, + copySize, + origin, + initMethod, + checkMethod + } = t.params; + + t.uploadTextureAndVerifyCopy({ + textureDataLayout: { + offset: 0, + // Zero will get turned back into undefined later. + bytesPerRow: bytesPerRow ?? 0, + // Zero will get turned back into undefined later. + rowsPerImage: rowsPerImage ?? 0 + }, + copySize: { width: copySize[0], height: copySize[1], depthOrArrayLayers: copySize[2] }, + dataSize: 2000, + textureSize: _textureSize, + // Zeros will get turned back into undefined later. + origin: { x: origin[0] ?? 0, y: origin[1] ?? 0, z: origin[2] ?? 0 }, + format: 'rgba8unorm', + dimension, + initMethod, + checkMethod, + changeBeforePass: 'undefined' }); +}); -function CopyMethodSupportedWithDepthStencilFormat(aspect, format, copyMethod) { +function CopyMethodSupportedWithDepthStencilFormat( +aspect, +format, +copyMethod) +{ { return ( - (aspect === 'stencil-only' && !!kTextureFormatInfo[format].stencil) || - (aspect === 'depth-only' && - !!kTextureFormatInfo[format].depth && - copyMethod === 'CopyT2B' && - depthStencilBufferTextureCopySupported('CopyT2B', format, aspect)) - ); + aspect === 'stencil-only' && !!kTextureFormatInfo[format].stencil || + aspect === 'depth-only' && + !!kTextureFormatInfo[format].depth && + copyMethod === 'CopyT2B' && + depthStencilBufferTextureCopySupported('CopyT2B', format, aspect)); + } } -g.test('rowsPerImage_and_bytesPerRow_depth_stencil') - .desc( - `Test that copying data with various bytesPerRow and rowsPerImage values and minimum required +g.test('rowsPerImage_and_bytesPerRow_depth_stencil'). +desc( + `Test that copying data with various bytesPerRow and rowsPerImage values and minimum required bytes in copy works for copyBufferToTexture(), copyTextureToBuffer() and writeTexture() with stencil aspect and copyTextureToBuffer() with depth aspect. @@ -1856,90 +1969,92 @@ aspect and copyTextureToBuffer() with depth aspect. copyExtent.depthOrArrayLayers % 2 == { 0, 1 } bytesPerRow == bytesInACompleteCopyImage ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .combine('copyMethod', ['WriteTexture', 'CopyB2T', 'CopyT2B']) - .combine('aspect', ['depth-only', 'stencil-only']) - .filter(t => CopyMethodSupportedWithDepthStencilFormat(t.aspect, t.format, t.copyMethod)) - .beginSubcases() - .combineWithParams(kRowsPerImageAndBytesPerRowParams.paddings) - .combineWithParams(kRowsPerImageAndBytesPerRowParams.copySizes) - .filter(t => { - return t.copyWidthInBlocks * t.copyHeightInBlocks * t.copyDepth > 0; - }) - .combine('mipLevel', [0, 2]) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - format, - copyMethod, - aspect, - bytesPerRowPadding, - rowsPerImagePadding, - copyWidthInBlocks, - copyHeightInBlocks, - copyDepth, - mipLevel, - } = t.params; - const bytesPerBlock = depthStencilFormatAspectSize(format, aspect); - const rowsPerImage = copyHeightInBlocks + rowsPerImagePadding; +). +params((u) => +u. +combine('format', kDepthStencilFormats). +combine('copyMethod', ['WriteTexture', 'CopyB2T', 'CopyT2B']). +combine('aspect', ['depth-only', 'stencil-only']). +filter((t) => CopyMethodSupportedWithDepthStencilFormat(t.aspect, t.format, t.copyMethod)). +beginSubcases(). +combineWithParams(kRowsPerImageAndBytesPerRowParams.paddings). +combineWithParams(kRowsPerImageAndBytesPerRowParams.copySizes). +filter((t) => { + return t.copyWidthInBlocks * t.copyHeightInBlocks * t.copyDepth > 0; +}). +combine('mipLevel', [0, 2]) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + format, + copyMethod, + aspect, + bytesPerRowPadding, + rowsPerImagePadding, + copyWidthInBlocks, + copyHeightInBlocks, + copyDepth, + mipLevel + } = t.params; + const bytesPerBlock = depthStencilFormatAspectSize(format, aspect); + const rowsPerImage = copyHeightInBlocks + rowsPerImagePadding; - const bytesPerRowAlignment = copyMethod === 'WriteTexture' ? 1 : kBytesPerRowAlignment; - const bytesPerRow = - align(bytesPerBlock * copyWidthInBlocks, bytesPerRowAlignment) + - bytesPerRowPadding * bytesPerRowAlignment; + const bytesPerRowAlignment = copyMethod === 'WriteTexture' ? 1 : kBytesPerRowAlignment; + const bytesPerRow = + align(bytesPerBlock * copyWidthInBlocks, bytesPerRowAlignment) + + bytesPerRowPadding * bytesPerRowAlignment; - const copySize = [copyWidthInBlocks, copyHeightInBlocks, copyDepth]; - const textureSize = [copyWidthInBlocks << mipLevel, copyHeightInBlocks << mipLevel, copyDepth]; + const copySize = [copyWidthInBlocks, copyHeightInBlocks, copyDepth]; + const textureSize = [ + copyWidthInBlocks << mipLevel, + copyHeightInBlocks << mipLevel, + copyDepth]; - if (copyMethod === 'CopyT2B') { - if (aspect === 'depth-only') { - t.DoCopyTextureToBufferWithDepthAspectTest( - format, - copySize, - bytesPerRowPadding, - rowsPerImagePadding, - 0, - 0, - mipLevel - ); - } else { - t.DoCopyFromStencilTest(format, textureSize, bytesPerRow, rowsPerImage, 0, mipLevel); - } - } else { - assert( - aspect === 'stencil-only' && (copyMethod === 'CopyB2T' || copyMethod === 'WriteTexture') - ); - - const initialDataSize = dataBytesForCopyOrFail({ - layout: { bytesPerRow, rowsPerImage }, - format: 'stencil8', - copySize, - method: copyMethod, - }); - - t.DoUploadToStencilTest( + if (copyMethod === 'CopyT2B') { + if (aspect === 'depth-only') { + t.DoCopyTextureToBufferWithDepthAspectTest( format, - textureSize, - copyMethod, - bytesPerRow, - rowsPerImage, - initialDataSize, + copySize, + bytesPerRowPadding, + rowsPerImagePadding, + 0, 0, mipLevel ); + } else { + t.DoCopyFromStencilTest(format, textureSize, bytesPerRow, rowsPerImage, 0, mipLevel); } - }); + } else { + assert( + aspect === 'stencil-only' && (copyMethod === 'CopyB2T' || copyMethod === 'WriteTexture') + ); + const initialDataSize = dataBytesForCopyOrFail({ + layout: { bytesPerRow, rowsPerImage }, + format: 'stencil8', + copySize, + method: copyMethod + }); -g.test('offsets_and_sizes_copy_depth_stencil') - .desc( - `Test that copying data with various offset values and additional data paddings + t.DoUploadToStencilTest( + format, + textureSize, + copyMethod, + bytesPerRow, + rowsPerImage, + initialDataSize, + 0, + mipLevel + ); + } +}); + +g.test('offsets_and_sizes_copy_depth_stencil'). +desc( + `Test that copying data with various offset values and additional data paddings works for copyBufferToTexture(), copyTextureToBuffer() and writeTexture() with stencil aspect and copyTextureToBuffer() with depth aspect. @@ -1947,74 +2062,66 @@ copyTextureToBuffer() with depth aspect. offset + bytesInCopyExtentPerRow { ==, > } bytesPerRow offset > bytesInACompleteCopyImage ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .combine('copyMethod', ['WriteTexture', 'CopyB2T', 'CopyT2B']) - .combine('aspect', ['depth-only', 'stencil-only']) - .filter(t => CopyMethodSupportedWithDepthStencilFormat(t.aspect, t.format, t.copyMethod)) - .beginSubcases() - .combineWithParams(kOffsetsAndSizesParams.offsetsAndPaddings) - .filter(t => t.offsetInBlocks % 4 === 0) - .combine('copyDepth', kOffsetsAndSizesParams.copyDepth) - .combine('mipLevel', [0, 2]) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - format, - copyMethod, - aspect, - offsetInBlocks, - dataPaddingInBytes, - copyDepth, - mipLevel, - } = t.params; - const bytesPerBlock = depthStencilFormatAspectSize(format, aspect); - const initialDataOffset = offsetInBlocks * bytesPerBlock; - const copySize = [3, 3, copyDepth]; - const rowsPerImage = 3; - const bytesPerRow = 256; +). +params((u) => +u. +combine('format', kDepthStencilFormats). +combine('copyMethod', ['WriteTexture', 'CopyB2T', 'CopyT2B']). +combine('aspect', ['depth-only', 'stencil-only']). +filter((t) => CopyMethodSupportedWithDepthStencilFormat(t.aspect, t.format, t.copyMethod)). +beginSubcases(). +combineWithParams(kOffsetsAndSizesParams.offsetsAndPaddings). +filter((t) => t.offsetInBlocks % 4 === 0). +combine('copyDepth', kOffsetsAndSizesParams.copyDepth). +combine('mipLevel', [0, 2]) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, copyMethod, aspect, offsetInBlocks, dataPaddingInBytes, copyDepth, mipLevel } = + t.params; + const bytesPerBlock = depthStencilFormatAspectSize(format, aspect); + const initialDataOffset = offsetInBlocks * bytesPerBlock; + const copySize = [3, 3, copyDepth]; + const rowsPerImage = 3; + const bytesPerRow = 256; - const textureSize = [copySize[0] << mipLevel, copySize[1] << mipLevel, copyDepth]; - if (copyMethod === 'CopyT2B') { - if (aspect === 'depth-only') { - t.DoCopyTextureToBufferWithDepthAspectTest(format, copySize, 0, 0, 0, 0, mipLevel); - } else { - t.DoCopyFromStencilTest( - format, - textureSize, - bytesPerRow, - rowsPerImage, - initialDataOffset, - mipLevel - ); - } + const textureSize = [copySize[0] << mipLevel, copySize[1] << mipLevel, copyDepth]; + if (copyMethod === 'CopyT2B') { + if (aspect === 'depth-only') { + t.DoCopyTextureToBufferWithDepthAspectTest(format, copySize, 0, 0, 0, 0, mipLevel); } else { - assert( - aspect === 'stencil-only' && (copyMethod === 'CopyB2T' || copyMethod === 'WriteTexture') - ); - - const minDataSize = dataBytesForCopyOrFail({ - layout: { offset: initialDataOffset, bytesPerRow, rowsPerImage }, - format: 'stencil8', - copySize, - method: copyMethod, - }); - const initialDataSize = minDataSize + dataPaddingInBytes; - t.DoUploadToStencilTest( + t.DoCopyFromStencilTest( format, textureSize, - copyMethod, bytesPerRow, rowsPerImage, - initialDataSize, initialDataOffset, mipLevel ); } - }); + } else { + assert( + aspect === 'stencil-only' && (copyMethod === 'CopyB2T' || copyMethod === 'WriteTexture') + ); + const minDataSize = dataBytesForCopyOrFail({ + layout: { offset: initialDataOffset, bytesPerRow, rowsPerImage }, + format: 'stencil8', + copySize, + method: copyMethod + }); + const initialDataSize = minDataSize + dataPaddingInBytes; + t.DoUploadToStencilTest( + format, + textureSize, + copyMethod, + bytesPerRow, + rowsPerImage, + initialDataSize, + initialDataOffset, + mipLevel + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/programmable_state_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/programmable_state_test.js index e263adf8ea6..09d5b988d46 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/programmable_state_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/programmable_state_test.js @@ -1,7 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { unreachable } from '../../../../../common/util/util.js'; -import { GPUTest } from '../../../../gpu_test.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { unreachable } from '../../../../../common/util/util.js';import { GPUTest } from '../../../../gpu_test.js'; + + + + + + export class ProgrammableStateTest extends GPUTest { commonBindGroupLayouts = new Map(); @@ -12,12 +17,12 @@ export class ProgrammableStateTest extends GPUTest { type, this.device.createBindGroupLayout({ entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, - buffer: { type }, - }, - ], + { + binding: 0, + visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, + buffer: { type } + }] + }) ); } @@ -35,20 +40,28 @@ export class ProgrammableStateTest extends GPUTest { createBindGroup(buffer, type) { return this.device.createBindGroup({ layout: this.getBindGroupLayout(type), - entries: [{ binding: 0, resource: { buffer } }], + entries: [{ binding: 0, resource: { buffer } }] }); } - setBindGroup(encoder, index, factory) { + setBindGroup( + encoder, + index, + factory) + { encoder.setBindGroup(index, factory(index)); } // Create a compute pipeline that performs an operation on data from two bind groups, // then writes the result to a third bind group. - createBindingStatePipeline(encoderType, groups, algorithm = 'a.value - b.value') { + createBindingStatePipeline( + encoderType, + groups, + algorithm = 'a.value - b.value') + { switch (encoderType) { - case 'compute pass': { - const wgsl = `struct Data { + case 'compute pass':{ + const wgsl = `struct Data { value : i32 }; @@ -62,28 +75,28 @@ export class ProgrammableStateTest extends GPUTest { } `; - return this.device.createComputePipeline({ - layout: this.device.createPipelineLayout({ - bindGroupLayouts: this.getBindGroupLayouts(groups), - }), - compute: { - module: this.device.createShaderModule({ - code: wgsl, + return this.device.createComputePipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: this.getBindGroupLayouts(groups) }), - entryPoint: 'main', - }, - }); - } + compute: { + module: this.device.createShaderModule({ + code: wgsl + }), + entryPoint: 'main' + } + }); + } case 'render pass': - case 'render bundle': { - const wgslShaders = { - vertex: ` + case 'render bundle':{ + const wgslShaders = { + vertex: ` @vertex fn vert_main() -> @builtin(position) vec4 { return vec4(0.5, 0.5, 0.0, 1.0); } `, - fragment: ` + fragment: ` struct Data { value : i32 }; @@ -96,29 +109,29 @@ export class ProgrammableStateTest extends GPUTest { out.value = ${algorithm}; return vec4(1.0, 0.0, 0.0, 1.0); } - `, - }; + ` + }; - return this.device.createRenderPipeline({ - layout: this.device.createPipelineLayout({ - bindGroupLayouts: this.getBindGroupLayouts(groups), - }), - vertex: { - module: this.device.createShaderModule({ - code: wgslShaders.vertex, + return this.device.createRenderPipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: this.getBindGroupLayouts(groups) }), - entryPoint: 'vert_main', - }, - fragment: { - module: this.device.createShaderModule({ - code: wgslShaders.fragment, - }), - entryPoint: 'frag_main', - targets: [{ format: 'rgba8unorm' }], - }, - primitive: { topology: 'point-list' }, - }); - } + vertex: { + module: this.device.createShaderModule({ + code: wgslShaders.vertex + }), + entryPoint: 'vert_main' + }, + fragment: { + module: this.device.createShaderModule({ + code: wgslShaders.fragment + }), + entryPoint: 'frag_main', + targets: [{ format: 'rgba8unorm' }] + }, + primitive: { topology: 'point-list' } + }); + } default: unreachable(); } @@ -141,4 +154,4 @@ export class ProgrammableStateTest extends GPUTest { pass.draw(1); } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/state_tracking.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/state_tracking.spec.js index 04280d54083..865704bdd5a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/state_tracking.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/programmable/state_tracking.spec.js @@ -1,10 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Ensure state is set correctly. Tries to stress state caching (setting different states multiple times in different orders) for setBindGroup and setPipeline. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUConst } from '../../../../constants.js'; import { kProgrammableEncoderTypes } from '../../../../util/command_buffer_maker.js'; @@ -14,306 +13,294 @@ export const g = makeTestGroup(ProgrammableStateTest); const kBufferUsage = GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.STORAGE; -g.test('bind_group_indices') - .desc( - ` +g.test('bind_group_indices'). +desc( + ` Test that bind group indices can be declared in any order, regardless of their order in the shader. - Test places the value of buffer a - buffer b into the out buffer, then reads the result. ` - ) - .params(u => - u // - .combine('encoderType', kProgrammableEncoderTypes) - .beginSubcases() - .combine('groupIndices', [ - { a: 0, b: 1, out: 2 }, - { a: 1, b: 2, out: 0 }, - { a: 2, b: 0, out: 1 }, - { a: 0, b: 2, out: 1 }, - { a: 2, b: 1, out: 0 }, - { a: 1, b: 0, out: 2 }, - ]) - ) - .fn(t => { - const { encoderType, groupIndices } = t.params; +). +params((u) => +u // +.combine('encoderType', kProgrammableEncoderTypes). +beginSubcases(). +combine('groupIndices', [ +{ a: 0, b: 1, out: 2 }, +{ a: 1, b: 2, out: 0 }, +{ a: 2, b: 0, out: 1 }, +{ a: 0, b: 2, out: 1 }, +{ a: 2, b: 1, out: 0 }, +{ a: 1, b: 0, out: 2 }] +) +). +fn((t) => { + const { encoderType, groupIndices } = t.params; - const pipeline = t.createBindingStatePipeline(encoderType, groupIndices); + const pipeline = t.createBindingStatePipeline(encoderType, groupIndices); - const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); - const bindGroups = { - a: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), - 'read-only-storage' - ), + const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); + const bindGroups = { + a: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), + 'read-only-storage' + ), + b: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), + 'read-only-storage' + ), + out: t.createBindGroup(out, 'storage') + }; - b: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), - 'read-only-storage' - ), + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - out: t.createBindGroup(out, 'storage'), - }; + t.setPipeline(encoder, pipeline); + encoder.setBindGroup(groupIndices.a, bindGroups.a); + encoder.setBindGroup(groupIndices.b, bindGroups.b); + encoder.setBindGroup(groupIndices.out, bindGroups.out); + t.dispatchOrDraw(encoder); + validateFinishAndSubmit(true, true); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + t.expectGPUBufferValuesEqual(out, new Int32Array([1])); +}); - t.setPipeline(encoder, pipeline); - encoder.setBindGroup(groupIndices.a, bindGroups.a); - encoder.setBindGroup(groupIndices.b, bindGroups.b); - encoder.setBindGroup(groupIndices.out, bindGroups.out); - t.dispatchOrDraw(encoder); - validateFinishAndSubmit(true, true); - - t.expectGPUBufferValuesEqual(out, new Int32Array([1])); - }); - -g.test('bind_group_order') - .desc( - ` +g.test('bind_group_order'). +desc( + ` Test that the order in which you set the bind groups doesn't matter. ` - ) - .params(u => - u // - .combine('encoderType', kProgrammableEncoderTypes) - .beginSubcases() - .combine('setOrder', [ - ['a', 'b', 'out'], - ['b', 'out', 'a'], - ['out', 'a', 'b'], - ['b', 'a', 'out'], - ['a', 'out', 'b'], - ['out', 'b', 'a'], - ]) - ) - .fn(t => { - const { encoderType, setOrder } = t.params; +). +params((u) => +u // +.combine('encoderType', kProgrammableEncoderTypes). +beginSubcases(). +combine('setOrder', [ +['a', 'b', 'out'], +['b', 'out', 'a'], +['out', 'a', 'b'], +['b', 'a', 'out'], +['a', 'out', 'b'], +['out', 'b', 'a']] +) +). +fn((t) => { + const { encoderType, setOrder } = t.params; - const groupIndices = { a: 0, b: 1, out: 2 }; - const pipeline = t.createBindingStatePipeline(encoderType, groupIndices); + const groupIndices = { a: 0, b: 1, out: 2 }; + const pipeline = t.createBindingStatePipeline(encoderType, groupIndices); - const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); - const bindGroups = { - a: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), - 'read-only-storage' - ), + const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); + const bindGroups = { + a: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), + 'read-only-storage' + ), + b: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), + 'read-only-storage' + ), + out: t.createBindGroup(out, 'storage') + }; - b: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), - 'read-only-storage' - ), + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + t.setPipeline(encoder, pipeline); - out: t.createBindGroup(out, 'storage'), - }; + for (const bindingName of setOrder) { + encoder.setBindGroup(groupIndices[bindingName], bindGroups[bindingName]); + } - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - t.setPipeline(encoder, pipeline); + t.dispatchOrDraw(encoder); + validateFinishAndSubmit(true, true); - for (const bindingName of setOrder) { - encoder.setBindGroup(groupIndices[bindingName], bindGroups[bindingName]); - } + t.expectGPUBufferValuesEqual(out, new Int32Array([1])); +}); - t.dispatchOrDraw(encoder); - validateFinishAndSubmit(true, true); - - t.expectGPUBufferValuesEqual(out, new Int32Array([1])); - }); - -g.test('bind_group_before_pipeline') - .desc( - ` +g.test('bind_group_before_pipeline'). +desc( + ` Test that setting bind groups prior to setting the pipeline is still valid. ` - ) - .params(u => - u // - .combine('encoderType', kProgrammableEncoderTypes) - .beginSubcases() - .combineWithParams([ - { setBefore: ['a', 'b'], setAfter: ['out'] }, - { setBefore: ['a'], setAfter: ['b', 'out'] }, - { setBefore: ['out', 'b'], setAfter: ['a'] }, - { setBefore: ['a', 'b', 'out'], setAfter: [] }, - ]) - ) - .fn(t => { - const { encoderType, setBefore, setAfter } = t.params; - const groupIndices = { a: 0, b: 1, out: 2 }; - const pipeline = t.createBindingStatePipeline(encoderType, groupIndices); +). +params((u) => +u // +.combine('encoderType', kProgrammableEncoderTypes). +beginSubcases(). +combineWithParams([ +{ setBefore: ['a', 'b'], setAfter: ['out'] }, +{ setBefore: ['a'], setAfter: ['b', 'out'] }, +{ setBefore: ['out', 'b'], setAfter: ['a'] }, +{ setBefore: ['a', 'b', 'out'], setAfter: [] }] +) +). +fn((t) => { + const { encoderType, setBefore, setAfter } = t.params; + const groupIndices = { a: 0, b: 1, out: 2 }; + const pipeline = t.createBindingStatePipeline(encoderType, groupIndices); - const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); - const bindGroups = { - a: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), - 'read-only-storage' - ), + const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); + const bindGroups = { + a: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), + 'read-only-storage' + ), + b: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), + 'read-only-storage' + ), + out: t.createBindGroup(out, 'storage') + }; - b: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), - 'read-only-storage' - ), + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - out: t.createBindGroup(out, 'storage'), - }; + for (const bindingName of setBefore) { + encoder.setBindGroup(groupIndices[bindingName], bindGroups[bindingName]); + } - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + t.setPipeline(encoder, pipeline); - for (const bindingName of setBefore) { - encoder.setBindGroup(groupIndices[bindingName], bindGroups[bindingName]); - } + for (const bindingName of setAfter) { + encoder.setBindGroup(groupIndices[bindingName], bindGroups[bindingName]); + } - t.setPipeline(encoder, pipeline); + t.dispatchOrDraw(encoder); + validateFinishAndSubmit(true, true); - for (const bindingName of setAfter) { - encoder.setBindGroup(groupIndices[bindingName], bindGroups[bindingName]); - } + t.expectGPUBufferValuesEqual(out, new Int32Array([1])); +}); - t.dispatchOrDraw(encoder); - validateFinishAndSubmit(true, true); - - t.expectGPUBufferValuesEqual(out, new Int32Array([1])); - }); - -g.test('one_bind_group_multiple_slots') - .desc( - ` +g.test('one_bind_group_multiple_slots'). +desc( + ` Test that a single bind group may be bound to more than one slot. ` - ) - .params(u => - u // - .combine('encoderType', kProgrammableEncoderTypes) - ) - .fn(t => { - const { encoderType } = t.params; - const pipeline = t.createBindingStatePipeline(encoderType, { a: 0, b: 1, out: 2 }); +). +params((u) => +u // +.combine('encoderType', kProgrammableEncoderTypes) +). +fn((t) => { + const { encoderType } = t.params; + const pipeline = t.createBindingStatePipeline(encoderType, { a: 0, b: 1, out: 2 }); - const out = t.makeBufferWithContents(new Int32Array([1]), kBufferUsage); - const bindGroups = { - ab: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), - 'read-only-storage' - ), + const out = t.makeBufferWithContents(new Int32Array([1]), kBufferUsage); + const bindGroups = { + ab: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), + 'read-only-storage' + ), + out: t.createBindGroup(out, 'storage') + }; - out: t.createBindGroup(out, 'storage'), - }; + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + t.setPipeline(encoder, pipeline); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - t.setPipeline(encoder, pipeline); + encoder.setBindGroup(0, bindGroups.ab); + encoder.setBindGroup(1, bindGroups.ab); + encoder.setBindGroup(2, bindGroups.out); - encoder.setBindGroup(0, bindGroups.ab); - encoder.setBindGroup(1, bindGroups.ab); - encoder.setBindGroup(2, bindGroups.out); + t.dispatchOrDraw(encoder); + validateFinishAndSubmit(true, true); - t.dispatchOrDraw(encoder); - validateFinishAndSubmit(true, true); + t.expectGPUBufferValuesEqual(out, new Int32Array([0])); +}); - t.expectGPUBufferValuesEqual(out, new Int32Array([0])); - }); - -g.test('bind_group_multiple_sets') - .desc( - ` +g.test('bind_group_multiple_sets'). +desc( + ` Test that the last bind group set to a given slot is used when dispatching. ` - ) - .params(u => - u // - .combine('encoderType', kProgrammableEncoderTypes) - ) - .fn(t => { - const { encoderType } = t.params; - const pipeline = t.createBindingStatePipeline(encoderType, { a: 0, b: 1, out: 2 }); +). +params((u) => +u // +.combine('encoderType', kProgrammableEncoderTypes) +). +fn((t) => { + const { encoderType } = t.params; + const pipeline = t.createBindingStatePipeline(encoderType, { a: 0, b: 1, out: 2 }); - const badOut = t.makeBufferWithContents(new Int32Array([-1]), kBufferUsage); - const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); - const bindGroups = { - a: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), - 'read-only-storage' - ), + const badOut = t.makeBufferWithContents(new Int32Array([-1]), kBufferUsage); + const out = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); + const bindGroups = { + a: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), + 'read-only-storage' + ), + b: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), + 'read-only-storage' + ), + c: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([5]), kBufferUsage), + 'read-only-storage' + ), + badOut: t.createBindGroup(badOut, 'storage'), + out: t.createBindGroup(out, 'storage') + }; - b: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), - 'read-only-storage' - ), + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - c: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([5]), kBufferUsage), - 'read-only-storage' - ), + encoder.setBindGroup(1, bindGroups.c); - badOut: t.createBindGroup(badOut, 'storage'), - out: t.createBindGroup(out, 'storage'), - }; + t.setPipeline(encoder, pipeline); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + encoder.setBindGroup(0, bindGroups.c); + encoder.setBindGroup(0, bindGroups.a); - encoder.setBindGroup(1, bindGroups.c); + encoder.setBindGroup(2, bindGroups.badOut); - t.setPipeline(encoder, pipeline); + encoder.setBindGroup(1, bindGroups.b); + encoder.setBindGroup(2, bindGroups.out); - encoder.setBindGroup(0, bindGroups.c); - encoder.setBindGroup(0, bindGroups.a); + t.dispatchOrDraw(encoder); + validateFinishAndSubmit(true, true); - encoder.setBindGroup(2, bindGroups.badOut); + t.expectGPUBufferValuesEqual(out, new Int32Array([1])); + t.expectGPUBufferValuesEqual(badOut, new Int32Array([-1])); +}); - encoder.setBindGroup(1, bindGroups.b); - encoder.setBindGroup(2, bindGroups.out); +g.test('compatible_pipelines'). +desc('Test that bind groups can be shared between compatible pipelines.'). +params((u) => +u // +.combine('encoderType', kProgrammableEncoderTypes) +). +fn((t) => { + const { encoderType } = t.params; + const pipelineA = t.createBindingStatePipeline(encoderType, { a: 0, b: 1, out: 2 }); + const pipelineB = t.createBindingStatePipeline( + encoderType, + { a: 0, b: 1, out: 2 }, + 'a.value + b.value' + ); - t.dispatchOrDraw(encoder); - validateFinishAndSubmit(true, true); + const outA = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); + const outB = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); + const bindGroups = { + a: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), + 'read-only-storage' + ), + b: t.createBindGroup( + t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), + 'read-only-storage' + ), + outA: t.createBindGroup(outA, 'storage'), + outB: t.createBindGroup(outB, 'storage') + }; - t.expectGPUBufferValuesEqual(out, new Int32Array([1])); - t.expectGPUBufferValuesEqual(badOut, new Int32Array([-1])); - }); + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + encoder.setBindGroup(0, bindGroups.a); + encoder.setBindGroup(1, bindGroups.b); -g.test('compatible_pipelines') - .desc('Test that bind groups can be shared between compatible pipelines.') - .params(u => - u // - .combine('encoderType', kProgrammableEncoderTypes) - ) - .fn(t => { - const { encoderType } = t.params; - const pipelineA = t.createBindingStatePipeline(encoderType, { a: 0, b: 1, out: 2 }); - const pipelineB = t.createBindingStatePipeline( - encoderType, - { a: 0, b: 1, out: 2 }, - 'a.value + b.value' - ); + t.setPipeline(encoder, pipelineA); + encoder.setBindGroup(2, bindGroups.outA); + t.dispatchOrDraw(encoder); - const outA = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); - const outB = t.makeBufferWithContents(new Int32Array([0]), kBufferUsage); - const bindGroups = { - a: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([3]), kBufferUsage), - 'read-only-storage' - ), + t.setPipeline(encoder, pipelineB); + encoder.setBindGroup(2, bindGroups.outB); + t.dispatchOrDraw(encoder); - b: t.createBindGroup( - t.makeBufferWithContents(new Int32Array([2]), kBufferUsage), - 'read-only-storage' - ), + validateFinishAndSubmit(true, true); - outA: t.createBindGroup(outA, 'storage'), - outB: t.createBindGroup(outB, 'storage'), - }; - - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - encoder.setBindGroup(0, bindGroups.a); - encoder.setBindGroup(1, bindGroups.b); - - t.setPipeline(encoder, pipelineA); - encoder.setBindGroup(2, bindGroups.outA); - t.dispatchOrDraw(encoder); - - t.setPipeline(encoder, pipelineB); - encoder.setBindGroup(2, bindGroups.outB); - t.dispatchOrDraw(encoder); - - validateFinishAndSubmit(true, true); - - t.expectGPUBufferValuesEqual(outA, new Int32Array([1])); - t.expectGPUBufferValuesEqual(outB, new Int32Array([5])); - }); + t.expectGPUBufferValuesEqual(outA, new Int32Array([1])); + t.expectGPUBufferValuesEqual(outB, new Int32Array([5])); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/queries/occlusionQuery.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/queries/occlusionQuery.spec.js index c142beabc71..fc25802db43 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/queries/occlusionQuery.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/queries/occlusionQuery.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` API operations tests for occlusion queries. - test query with @@ -18,10 +18,14 @@ API operations tests for occlusion queries. - test resolving twice in same pass keeps values - test resolving twice across pass keeps values - test resolveQuerySet destinationOffset -`; -import { kUnitCaseParamsBuilder } from '../../../../../common/framework/params_builder.js'; +`;import { kUnitCaseParamsBuilder } from '../../../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../../../common/framework/test_group.js'; -import { assert, range, unreachable } from '../../../../../common/util/util.js'; +import { + assert, + + range, + unreachable } from +'../../../../../common/util/util.js'; import { kMaxQueryCount } from '../../../../capability_info.js'; import { GPUTest } from '../../../../gpu_test.js'; @@ -32,14 +36,57 @@ const kTextureSize = [4, 4]; const kRenderModes = ['direct', 'render-bundle']; + const kBufferOffsets = ['zero', 'non-zero']; + + + + + + + + + + + + + +// MAINTENANCE_TODO: Refactor these helper classes to use GPUTestBase.createEncoder +// +// The refactor would require some new features in CommandBufferMaker such as: +// +// * Multi render bundle in single render pass support +// +// * Some way to allow calling render pass commands on render bundle encoder. +// Potentially have a special abstract encoder that wraps the two and defers +// relevant calls appropriately. + +/** + * This class is used by the RenderPassHelper below to + * abstract calling these 4 functions on a RenderPassEncoder or a RenderBundleEncoder. + */ + + + + + + + + + + + /** * This class helps use a render pass encoder or a render bundle encoder * in the correct way given the order that operations must happen, in order to be * compatible across both paths. */ class RenderPassHelper { + + + + constructor(pass, helper) { this._pass = pass; this._helper = helper; @@ -68,6 +115,9 @@ class RenderPassHelper { * Helper class for using a render pass encoder directly */ class QueryHelperDirect { + + + constructor(pass, endFn) { this._pass = pass; this._endFn = endFn; @@ -97,6 +147,9 @@ class QueryHelperDirect { * Helper class for starting a query on a render pass encoder directly */ class QueryStarterDirect { + + + constructor(pass) { this._pass = pass; } @@ -114,6 +167,9 @@ class QueryStarterDirect { * Helper class for using a render bundle encoder. */ class QueryHelperRenderBundle { + + + constructor(pass, endFn) { this._encoder = pass; this._endFn = endFn; @@ -143,18 +199,30 @@ class QueryHelperRenderBundle { * Helper class for starting a query on a render bundle encoder */ class QueryStarterRenderBundle { - constructor(device, pass, renderPassDescriptor) { + + + + + + + constructor( + device, + pass, + renderPassDescriptor) + { this._device = device; this._pass = pass; - const colorAttachment = renderPassDescriptor.colorAttachments[0]; + const colorAttachment = + renderPassDescriptor.colorAttachments[ + 0]; this._renderBundleEncoderDescriptor = { colorFormats: ['rgba8unorm'], - depthStencilFormat: renderPassDescriptor.depthStencilAttachment?.depthLoadOp - ? 'depth24plus' - : renderPassDescriptor.depthStencilAttachment?.stencilLoadOp - ? 'stencil8' - : undefined, - sampleCount: colorAttachment.resolveTarget ? 4 : 1, + depthStencilFormat: renderPassDescriptor.depthStencilAttachment?.depthLoadOp ? + 'depth24plus' : + renderPassDescriptor.depthStencilAttachment?.stencilLoadOp ? + 'stencil8' : + undefined, + sampleCount: colorAttachment.resolveTarget ? 4 : 1 }; } begin(endFn) { @@ -198,7 +266,12 @@ class OcclusionQueryTest extends GPUTest { return this.makeBufferWithContents(data, GPUBufferUsage.VERTEX); } createSingleTriangleVertexBuffer(z) { - return this.createVertexBuffer(new Float32Array([-0.5, -0.5, z, 0.5, -0.5, z, -0.5, 0.5, z])); + + return this.createVertexBuffer(new Float32Array([ + -0.5, -0.5, z, + 0.5, -0.5, z, + -0.5, 0.5, z] + )); } async readBufferAsBigUint64(buffer) { await buffer.mapAsync(GPUMapMode.READ); @@ -215,20 +288,20 @@ class OcclusionQueryTest extends GPUTest { sampleCount, writeMask = 0xf, bufferOffset, - renderMode, + renderMode } = params; const { device } = this; const queryResolveBufferOffset = - bufferOffset === 'non-zero' ? kRequiredQueryBufferOffsetAlignment : 0; + bufferOffset === 'non-zero' ? kRequiredQueryBufferOffsetAlignment : 0; const queryResolveBuffer = this.createBuffer({ size: numQueries * 8 + queryResolveBufferOffset, - usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC }); const readBuffer = this.createBuffer({ size: numQueries * kBytesPerQuery, - usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST }); const vertexBuffer = this.createSingleTriangleVertexBuffer(0); @@ -236,25 +309,25 @@ class OcclusionQueryTest extends GPUTest { const renderTargetTexture = this.createTexture({ format: 'rgba8unorm', size: kTextureSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); - const multisampleRenderTarget = sampleCount - ? this.createTexture({ - size: kTextureSize, - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount, - }) - : null; + const multisampleRenderTarget = sampleCount ? + this.createTexture({ + size: kTextureSize, + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount + }) : + null; - const depthStencilTexture = depthStencilFormat - ? this.createTexture({ - format: depthStencilFormat, - size: kTextureSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - : undefined; + const depthStencilTexture = depthStencilFormat ? + this.createTexture({ + format: depthStencilFormat, + size: kTextureSize, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) : + undefined; const module = device.createShaderModule({ code: ` @@ -265,7 +338,7 @@ class OcclusionQueryTest extends GPUTest { @fragment fn fs() -> @location(0) vec4f { return vec4f(0, 0, 0, ${alpha === undefined ? 1 : alpha}); } - `, + ` }); const haveDepth = !!depthStencilFormat && depthStencilFormat.includes('depth'); @@ -278,29 +351,29 @@ class OcclusionQueryTest extends GPUTest { module, entryPoint: 'vs', buffers: [ + { + arrayStride: 3 * 4, + attributes: [ { - arrayStride: 3 * 4, - attributes: [ - { - shaderLocation: 0, - offset: 0, - format: 'float32x3', - }, - ], - }, - ], + shaderLocation: 0, + offset: 0, + format: 'float32x3' + }] + + }] + }, fragment: { module, entryPoint: 'fs', - targets: [{ format: 'rgba8unorm', writeMask }], + targets: [{ format: 'rgba8unorm', writeMask }] }, ...(sampleCount && { multisample: { count: sampleCount, mask: alpha === undefined ? sampleMask : 0xffffffff, - alphaToCoverageEnabled: alpha !== undefined, - }, + alphaToCoverageEnabled: alpha !== undefined + } }), ...(depthStencilTexture && { depthStencil: { @@ -309,54 +382,53 @@ class OcclusionQueryTest extends GPUTest { depthCompare: haveDepth ? 'less-equal' : 'always', ...(haveStencil && { stencilFront: { - compare: 'equal', - }, - }), - }, - }), + compare: 'equal' + } + }) + } + }) }); const querySetOffset = params?.querySetOffset === 'non-zero' ? 7 : 0; const occlusionQuerySet = this.createQuerySet({ type: 'occlusion', - count: numQueries + querySetOffset, + count: numQueries + querySetOffset }); const renderPassDescriptor = { - colorAttachments: sampleCount - ? [ - { - view: multisampleRenderTarget.createView(), - resolveTarget: renderTargetTexture.createView(), - loadOp: 'clear', - storeOp: 'store', - }, - ] - : [ - { - view: renderTargetTexture.createView(), - loadOp: 'clear', - storeOp: 'store', - }, - ], + colorAttachments: sampleCount ? + [ + { + view: multisampleRenderTarget.createView(), + resolveTarget: renderTargetTexture.createView(), + loadOp: 'clear', + storeOp: 'store' + }] : + + [ + { + view: renderTargetTexture.createView(), + loadOp: 'clear', + storeOp: 'store' + }], ...(haveDepth && { depthStencilAttachment: { view: depthStencilTexture.createView(), depthLoadOp: 'clear', depthStoreOp: 'store', - depthClearValue: 0.5, - }, + depthClearValue: 0.5 + } }), ...(haveStencil && { depthStencilAttachment: { view: depthStencilTexture.createView(), stencilClearValue: 0, stencilLoadOp: 'clear', - stencilStoreOp: 'store', - }, + stencilStoreOp: 'store' + } }), - occlusionQuerySet, + occlusionQuerySet }; return { @@ -370,10 +442,15 @@ class OcclusionQueryTest extends GPUTest { pipeline, depthStencilTexture, querySetOffset, - renderMode, + renderMode }; } - async runQueryTest(resources, renderPassDescriptor, encodePassFn, checkQueryIndexResultFn) { + async runQueryTest( + resources, + renderPassDescriptor, + encodePassFn, + checkQueryIndexResultFn) + { const { device } = this; const { readBuffer, @@ -381,19 +458,19 @@ class OcclusionQueryTest extends GPUTest { queryResolveBufferOffset, occlusionQuerySet, querySetOffset, - renderMode = 'direct', + renderMode = 'direct' } = resources; const numQueries = occlusionQuerySet.count - querySetOffset; - const queryIndices = range(numQueries, i => i + querySetOffset); + const queryIndices = range(numQueries, (i) => i + querySetOffset); const encoder = device.createCommandEncoder(); if (renderPassDescriptor) { const pass = encoder.beginRenderPass(renderPassDescriptor); const helper = new RenderPassHelper( pass, - renderMode === 'direct' - ? new QueryStarterDirect(pass) - : new QueryStarterRenderBundle(device, pass, renderPassDescriptor) + renderMode === 'direct' ? + new QueryStarterDirect(pass) : + new QueryStarterRenderBundle(device, pass, renderPassDescriptor) ); for (const queryIndex of queryIndices) { @@ -409,7 +486,6 @@ class OcclusionQueryTest extends GPUTest { queryResolveBuffer, queryResolveBufferOffset ); - encoder.copyBufferToBuffer( queryResolveBuffer, queryResolveBufferOffset, @@ -417,7 +493,6 @@ class OcclusionQueryTest extends GPUTest { 0, readBuffer.size ); - device.queue.submit([encoder.finish()]); const result = await this.readBufferAsBigUint64(readBuffer); @@ -431,293 +506,292 @@ class OcclusionQueryTest extends GPUTest { } } -const kQueryTestBaseParams = kUnitCaseParamsBuilder - .combine('writeMask', [0xf, 0x0]) - .combine('renderMode', kRenderModes) - .combine('bufferOffset', kBufferOffsets) - .combine('querySetOffset', kBufferOffsets); +const kQueryTestBaseParams = kUnitCaseParamsBuilder. +combine('writeMask', [0xf, 0x0]). +combine('renderMode', kRenderModes). +combine('bufferOffset', kBufferOffsets). +combine('querySetOffset', kBufferOffsets); export const g = makeTestGroup(OcclusionQueryTest); -g.test('occlusion_query,initial') - .desc(`Test getting contents of QuerySet without any queries.`) - .fn(async t => { - const kNumQueries = kMaxQueryCount; - const resources = t.setup({ numQueries: kNumQueries }); - await t.runQueryTest( - resources, - null, - () => {}, - passed => { - t.expect(!passed); - } - ); +g.test('occlusion_query,initial'). +desc(`Test getting contents of QuerySet without any queries.`). +fn(async (t) => { + const kNumQueries = kMaxQueryCount; + const resources = t.setup({ numQueries: kNumQueries }); + await t.runQueryTest( + resources, + null, + () => {}, + (passed) => { + t.expect(!passed); + } + ); +}); + +g.test('occlusion_query,basic'). +desc('Test all queries pass'). +params(kQueryTestBaseParams). +fn(async (t) => { + const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; + const kNumQueries = 30; + const resources = t.setup({ + writeMask, + renderMode, + bufferOffset, + querySetOffset, + numQueries: kNumQueries }); + const { renderPassDescriptor, vertexBuffer, pipeline } = resources; -g.test('occlusion_query,basic') - .desc('Test all queries pass') - .params(kQueryTestBaseParams) - .fn(async t => { - const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; - const kNumQueries = 30; - const resources = t.setup({ - writeMask, - renderMode, - bufferOffset, - querySetOffset, - numQueries: kNumQueries, - }); - const { renderPassDescriptor, vertexBuffer, pipeline } = resources; + await t.runQueryTest( + resources, + renderPassDescriptor, + (helper, queryIndex) => { + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(vertexBuffer); + queryHelper.draw(3); + queryHelper.end(); + }, + (passed, queryIndex) => { + const expectPassed = true; + t.expect( + !!passed === expectPassed, + `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` + ); + } + ); +}); - await t.runQueryTest( - resources, - renderPassDescriptor, - (helper, queryIndex) => { - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(vertexBuffer); - queryHelper.draw(3); - queryHelper.end(); - }, - (passed, queryIndex) => { - const expectPassed = true; - t.expect( - !!passed === expectPassed, - `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` - ); - } - ); - }); - -g.test('occlusion_query,empty') - .desc( - ` +g.test('occlusion_query,empty'). +desc( + ` Test beginOcclusionQuery/endOcclusionQuery with nothing in between clears the queries Calls beginOcclusionQuery/draw/endOcclusionQuery that should show passing fragments and validates they passed. Then executes the same queries (same QuerySet) without drawing. Those queries should have not passed. ` - ) - .fn(async t => { - const kNumQueries = 30; - const resources = t.setup({ numQueries: kNumQueries }); - const { vertexBuffer, renderPassDescriptor, pipeline } = resources; +). +fn(async (t) => { + const kNumQueries = 30; + const resources = t.setup({ numQueries: kNumQueries }); + const { vertexBuffer, renderPassDescriptor, pipeline } = resources; - const makeQueryRunner = draw => { - return (helper, queryIndex) => { - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(vertexBuffer); - if (draw) { - queryHelper.draw(3); - } - queryHelper.end(); - }; + const makeQueryRunner = (draw) => { + return (helper, queryIndex) => { + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(vertexBuffer); + if (draw) { + queryHelper.draw(3); + } + queryHelper.end(); }; + }; - const makeQueryChecker = draw => { - return (passed, queryIndex) => { - const expectPassed = draw; - t.expect( - !!passed === expectPassed, - `draw: ${draw}, queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` - ); - }; + const makeQueryChecker = (draw) => { + return (passed, queryIndex) => { + const expectPassed = draw; + t.expect( + !!passed === expectPassed, + `draw: ${draw}, queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` + ); }; + }; - await t.runQueryTest( - resources, - renderPassDescriptor, - makeQueryRunner(true), - makeQueryChecker(true) - ); + await t.runQueryTest( + resources, + renderPassDescriptor, + makeQueryRunner(true), + makeQueryChecker(true) + ); + await t.runQueryTest( + resources, + renderPassDescriptor, + makeQueryRunner(false), + makeQueryChecker(false) + ); +}); - await t.runQueryTest( - resources, - renderPassDescriptor, - makeQueryRunner(false), - makeQueryChecker(false) - ); - }); - -g.test('occlusion_query,scissor') - .desc( - ` +g.test('occlusion_query,scissor'). +desc( + ` Test beginOcclusionQuery/endOcclusionQuery using scissor to occlude ` - ) - .params(kQueryTestBaseParams) - .fn(async t => { - const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; - const kNumQueries = 30; - const resources = t.setup({ - writeMask, - renderMode, - bufferOffset, - querySetOffset, - numQueries: kNumQueries, - }); - const { renderPassDescriptor, renderTargetTexture, vertexBuffer, pipeline } = resources; - - const getScissorRect = i => { - const { width, height } = renderTargetTexture; - switch (i % 4) { - case 0: // whole target - return { - x: 0, - y: 0, - width, - height, - occluded: false, - name: 'whole target', - }; - case 1: // center - return { - x: width / 4, - y: height / 4, - width: width / 2, - height: height / 2, - occluded: false, - name: 'center', - }; - case 2: // none - return { - x: width / 4, - y: height / 4, - width: 0, - height: 0, - occluded: true, - name: 'none', - }; - case 3: // top 1/4 - return { - x: 0, - y: 0, - width, - height: height / 2, - occluded: true, - name: 'top quarter', - }; - default: - unreachable(); - } - }; - - await t.runQueryTest( - resources, - renderPassDescriptor, - (helper, queryIndex) => { - const { x, y, width, height } = getScissorRect(queryIndex); - helper.setScissorRect(x, y, width, height); - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(vertexBuffer); - queryHelper.draw(3); - queryHelper.end(); - }, - (passed, queryIndex) => { - const { occluded, name: scissorCase } = getScissorRect(queryIndex); - const expectPassed = !occluded; - t.expect( - !!passed === expectPassed, - `queryIndex: ${queryIndex}, scissorCase: ${scissorCase}, was: ${!!passed}, expected: ${expectPassed}, ${name}` - ); - } - ); +). +params(kQueryTestBaseParams). +fn(async (t) => { + const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; + const kNumQueries = 30; + const resources = t.setup({ + writeMask, + renderMode, + bufferOffset, + querySetOffset, + numQueries: kNumQueries }); + const { renderPassDescriptor, renderTargetTexture, vertexBuffer, pipeline } = resources; -g.test('occlusion_query,depth') - .desc( - ` + const getScissorRect = (i) => { + const { width, height } = renderTargetTexture; + switch (i % 4) { + case 0: // whole target + return { + x: 0, + y: 0, + width, + height, + occluded: false, + name: 'whole target' + }; + case 1: // center + return { + x: width / 4, + y: height / 4, + width: width / 2, + height: height / 2, + occluded: false, + name: 'center' + }; + case 2: // none + return { + x: width / 4, + y: height / 4, + width: 0, + height: 0, + occluded: true, + name: 'none' + }; + case 3: // top 1/4 + return { + x: 0, + y: 0, + width, + height: height / 2, + occluded: true, + name: 'top quarter' + }; + default: + unreachable(); + } + }; + + await t.runQueryTest( + resources, + renderPassDescriptor, + (helper, queryIndex) => { + const { x, y, width, height } = getScissorRect(queryIndex); + helper.setScissorRect(x, y, width, height); + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(vertexBuffer); + queryHelper.draw(3); + queryHelper.end(); + }, + (passed, queryIndex) => { + const { occluded, name: scissorCase } = getScissorRect(queryIndex); + const expectPassed = !occluded; + t.expect( + !!passed === expectPassed, + `queryIndex: ${queryIndex}, scissorCase: ${scissorCase}, was: ${!!passed}, expected: ${expectPassed}` + ); + } + ); +}); + +g.test('occlusion_query,depth'). +desc( + ` Test beginOcclusionQuery/endOcclusionQuery using depth test to occlude Compares depth against 0.5, with alternating vertex buffers which have a depth of 0 and 1. When depth check passes, we expect non-zero successful fragments. ` - ) - .params(kQueryTestBaseParams) - .fn(async t => { - const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; - const kNumQueries = 30; - const resources = t.setup({ - writeMask, - renderMode, - bufferOffset, - querySetOffset, - numQueries: kNumQueries, - depthStencilFormat: 'depth24plus', - }); - const { vertexBuffer: vertexBufferAtZ0, renderPassDescriptor, pipeline } = resources; - const vertexBufferAtZ1 = t.createSingleTriangleVertexBuffer(1); - - await t.runQueryTest( - resources, - renderPassDescriptor, - (helper, queryIndex) => { - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(queryIndex % 2 ? vertexBufferAtZ1 : vertexBufferAtZ0); - queryHelper.draw(3); - queryHelper.end(); - }, - (passed, queryIndex) => { - const expectPassed = queryIndex % 2 === 0; - t.expect( - !!passed === expectPassed, - `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}, ${name}` - ); - } - ); +). +params(kQueryTestBaseParams). +fn(async (t) => { + const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; + const kNumQueries = 30; + const resources = t.setup({ + writeMask, + renderMode, + bufferOffset, + querySetOffset, + numQueries: kNumQueries, + depthStencilFormat: 'depth24plus' }); + const { vertexBuffer: vertexBufferAtZ0, renderPassDescriptor, pipeline } = resources; + const vertexBufferAtZ1 = t.createSingleTriangleVertexBuffer(1); -g.test('occlusion_query,stencil') - .desc( - ` + await t.runQueryTest( + resources, + renderPassDescriptor, + (helper, queryIndex) => { + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(queryIndex % 2 ? vertexBufferAtZ1 : vertexBufferAtZ0); + queryHelper.draw(3); + queryHelper.end(); + }, + (passed, queryIndex) => { + const expectPassed = queryIndex % 2 === 0; + t.expect( + !!passed === expectPassed, + `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` + ); + } + ); +}); + +g.test('occlusion_query,stencil'). +desc( + ` Test beginOcclusionQuery/endOcclusionQuery using stencil to occlude Compares stencil against 0, with alternating stencil reference values of of 0 and 1. When stencil test passes, we expect non-zero successful fragments. ` - ) - .params(kQueryTestBaseParams) - .fn(async t => { - const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; - const kNumQueries = 30; - const resources = t.setup({ - writeMask, - renderMode, - bufferOffset, - querySetOffset, - numQueries: kNumQueries, - depthStencilFormat: 'stencil8', - }); - const { vertexBuffer, renderPassDescriptor, pipeline } = resources; - - await t.runQueryTest( - resources, - renderPassDescriptor, - (helper, queryIndex) => { - helper.setStencilReference(queryIndex % 2); - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(vertexBuffer); - queryHelper.draw(3); - queryHelper.end(); - }, - (passed, queryIndex) => { - const expectPassed = queryIndex % 2 === 0; - t.expect( - !!passed === expectPassed, - `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}, ${name}` - ); - } - ); +). +params(kQueryTestBaseParams). +fn(async (t) => { + const { writeMask, renderMode, bufferOffset, querySetOffset } = t.params; + const kNumQueries = 30; + const resources = t.setup({ + writeMask, + renderMode, + bufferOffset, + querySetOffset, + numQueries: kNumQueries, + depthStencilFormat: 'stencil8' }); + const { vertexBuffer, renderPassDescriptor, pipeline } = resources; -g.test('occlusion_query,sample_mask') - .desc( - ` + await t.runQueryTest( + resources, + renderPassDescriptor, + (helper, queryIndex) => { + helper.setStencilReference(queryIndex % 2); + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(vertexBuffer); + queryHelper.draw(3); + queryHelper.end(); + }, + (passed, queryIndex) => { + const expectPassed = queryIndex % 2 === 0; + t.expect( + !!passed === expectPassed, + `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` + ); + } + ); +}); + +g.test('occlusion_query,sample_mask'). +desc( + ` Test beginOcclusionQuery/endOcclusionQuery using sample_mask to occlude Set sampleMask to 0, 2, 4, 6 and draw quads in top right or bottom left corners of the texel. @@ -725,80 +799,67 @@ g.test('occlusion_query,sample_mask') See: https://learn.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels ` - ) - .params(kQueryTestBaseParams.combine('sampleMask', [0, 2, 4, 6])) - .fn(async t => { - const { writeMask, renderMode, bufferOffset, querySetOffset, sampleMask } = t.params; - const kNumQueries = 30; - const sampleCount = 4; - const resources = t.setup({ - writeMask, - renderMode, - bufferOffset, - querySetOffset, - numQueries: kNumQueries, - sampleCount, - sampleMask, - }); - const { renderPassDescriptor, pipeline } = resources; - - const createQuad = offset => { - return t.createVertexBuffer( - new Float32Array([ - offset + 0, - offset + 0, - 0, - offset + 0.25, - offset + 0, - 0, - offset + 0, - offset + 0.25, - 0, - offset + 0, - offset + 0.25, - 0, - offset + 0.25, - offset + 0, - 0, - offset + 0.25, - offset + 0.25, - 0, - ]) - ); - }; - - const vertexBufferBL = createQuad(0); - const vertexBufferTR = createQuad(0.25); - - await t.runQueryTest( - resources, - renderPassDescriptor, - (helper, queryIndex) => { - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(queryIndex % 2 ? vertexBufferTR : vertexBufferBL); - queryHelper.draw(6); - queryHelper.end(); - }, - (passed, queryIndex) => { - // Above we draw to a specific corner (sample) of a multi-sampled texel - // drawMask is the "sampleMask" representation of that corner. - // In other words, if drawMask is 2 (we drew to the top right) and - // sampleMask is 2 (drawing is allowed to the top right) then we expect - // passing fragments. - const drawMask = queryIndex % 2 ? 2 : 4; - const expectPassed = !!(sampleMask & drawMask); - t.expect( - !!passed === expectPassed, - `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}, ${name}` - ); - } - ); +). +params(kQueryTestBaseParams.combine('sampleMask', [0, 2, 4, 6])). +fn(async (t) => { + const { writeMask, renderMode, bufferOffset, querySetOffset, sampleMask } = t.params; + const kNumQueries = 30; + const sampleCount = 4; + const resources = t.setup({ + writeMask, + renderMode, + bufferOffset, + querySetOffset, + numQueries: kNumQueries, + sampleCount, + sampleMask }); + const { renderPassDescriptor, pipeline } = resources; -g.test('occlusion_query,alpha_to_coverage') - .desc( - ` + const createQuad = (offset) => { + + return t.createVertexBuffer(new Float32Array([ + offset + 0, offset + 0, 0, + offset + 0.25, offset + 0, 0, + offset + 0, offset + 0.25, 0, + offset + 0, offset + 0.25, 0, + offset + 0.25, offset + 0, 0, + offset + 0.25, offset + 0.25, 0] + )); + }; + + const vertexBufferBL = createQuad(0); + const vertexBufferTR = createQuad(0.25); + + await t.runQueryTest( + resources, + renderPassDescriptor, + (helper, queryIndex) => { + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(queryIndex % 2 ? vertexBufferTR : vertexBufferBL); + queryHelper.draw(6); + queryHelper.end(); + }, + (passed, queryIndex) => { + // Above we draw to a specific corner (sample) of a multi-sampled texel + // drawMask is the "sampleMask" representation of that corner. + // In other words, if drawMask is 2 (we drew to the top right) and + // sampleMask is 2 (drawing is allowed to the top right) then we expect + // passing fragments. + const drawMask = queryIndex % 2 ? 2 : 4; + const expectPassed = !!(sampleMask & drawMask); + t.expect( + !!passed === expectPassed, + `queryIndex: ${queryIndex}, was: ${!!passed}, expected: ${expectPassed}` + ); + } + ); +}); + +g.test('occlusion_query,alpha_to_coverage'). +desc( + ` Test beginOcclusionQuery/endOcclusionQuery using alphaToCoverage to occlude Set alpha to 0, 0.25, 0.5, 0.75, and 1, draw quads in 4 corners of texel. @@ -811,175 +872,162 @@ g.test('occlusion_query,alpha_to_coverage') See: https://bgolus.medium.com/anti-aliased-alpha-test-the-esoteric-alpha-to-coverage-8b177335ae4f ` - ) - .params(kQueryTestBaseParams.combine('alpha', [0, 0.25, 0.5, 0.75, 1.0])) - .fn(async t => { - const { writeMask, renderMode, bufferOffset, querySetOffset, alpha } = t.params; - const kNumQueries = 32; - const sampleCount = 4; - const resources = t.setup({ - writeMask, - renderMode, - bufferOffset, - querySetOffset, - numQueries: kNumQueries, - sampleCount, - alpha, - }); - const { renderPassDescriptor, pipeline } = resources; - - const createQuad = (xOffset, yOffset) => { - return t.createVertexBuffer( - new Float32Array([ - xOffset + 0, - yOffset + 0, - 0, - xOffset + 0.25, - yOffset + 0, - 0, - xOffset + 0, - yOffset + 0.25, - 0, - xOffset + 0, - yOffset + 0.25, - 0, - xOffset + 0.25, - yOffset + 0, - 0, - xOffset + 0.25, - yOffset + 0.25, - 0, - ]) - ); - }; - - const vertexBuffers = [ - createQuad(0, 0), - createQuad(0.25, 0), - createQuad(0, 0.25), - createQuad(0.25, 0.25), - ]; - - const numPassedPerGroup = new Array(kNumQueries / 4).fill(0); - - // These tests can't use queryIndex to decide what to draw because which mask - // a particular alpha converts to is implementation defined. When querySetOffset is - // non-zero the queryIndex will go 7, 8, 9, 10, ... but we need to guarantee - // 4 queries per pixel and group those results so `queryIndex / 4 | 0` won't work. - // Instead we count the queries to get 4 draws per group, one to each quadrant of a pixel - // Then we total up the passes for those 4 queries by queryCount. - let queryCount = 0; - let resultCount = 0; - await t.runQueryTest( - resources, - renderPassDescriptor, - (helper, queryIndex) => { - const queryHelper = helper.beginOcclusionQuery(queryIndex); - queryHelper.setPipeline(pipeline); - queryHelper.setVertexBuffer(vertexBuffers[queryCount++ % 4]); - queryHelper.draw(6); - queryHelper.end(); - }, - passed => { - const groupIndex = (resultCount++ / 4) | 0; - numPassedPerGroup[groupIndex] += passed ? 1 : 0; - } - ); - - const expected = (alpha / 0.25) | 0; - numPassedPerGroup.forEach((numPassed, queryGroup) => { - t.expect( - numPassed === expected, - `queryGroup: ${queryGroup}, was: ${numPassed}, expected: ${expected}` - ); - }); +). +params(kQueryTestBaseParams.combine('alpha', [0, 0.25, 0.5, 0.75, 1.0])). +fn(async (t) => { + const { writeMask, renderMode, bufferOffset, querySetOffset, alpha } = t.params; + const kNumQueries = 32; + const sampleCount = 4; + const resources = t.setup({ + writeMask, + renderMode, + bufferOffset, + querySetOffset, + numQueries: kNumQueries, + sampleCount, + alpha }); + const { renderPassDescriptor, pipeline } = resources; -g.test('occlusion_query,multi_resolve') - .desc('Test calling resolveQuerySet more than once does not change results') - .fn(async t => { - const { device } = t; - const kNumQueries = 30; - const { - pipeline, - vertexBuffer, - occlusionQuerySet, - renderPassDescriptor, - renderTargetTexture, - queryResolveBuffer, - readBuffer, - } = t.setup({ numQueries: kNumQueries }); + const createQuad = (xOffset, yOffset) => { - const readBuffer2 = t.createBuffer(readBuffer); - const readBuffer3 = t.createBuffer(readBuffer); + return t.createVertexBuffer(new Float32Array([ + xOffset + 0, yOffset + 0, 0, + xOffset + 0.25, yOffset + 0, 0, + xOffset + 0, yOffset + 0.25, 0, + xOffset + 0, yOffset + 0.25, 0, + xOffset + 0.25, yOffset + 0, 0, + xOffset + 0.25, yOffset + 0.25, 0] + )); + }; - const renderSomething = encoder => { + const vertexBuffers = [ + createQuad(0, 0), + createQuad(0.25, 0), + createQuad(0, 0.25), + createQuad(0.25, 0.25)]; + + + const numPassedPerGroup = new Array(kNumQueries / 4).fill(0); + + // These tests can't use queryIndex to decide what to draw because which mask + // a particular alpha converts to is implementation defined. When querySetOffset is + // non-zero the queryIndex will go 7, 8, 9, 10, ... but we need to guarantee + // 4 queries per pixel and group those results so `queryIndex / 4 | 0` won't work. + // Instead we count the queries to get 4 draws per group, one to each quadrant of a pixel + // Then we total up the passes for those 4 queries by queryCount. + let queryCount = 0; + let resultCount = 0; + await t.runQueryTest( + resources, + renderPassDescriptor, + (helper, queryIndex) => { + const queryHelper = helper.beginOcclusionQuery(queryIndex); + queryHelper.setPipeline(pipeline); + queryHelper.setVertexBuffer(vertexBuffers[queryCount++ % 4]); + queryHelper.draw(6); + queryHelper.end(); + }, + (passed) => { + const groupIndex = resultCount++ / 4 | 0; + numPassedPerGroup[groupIndex] += passed ? 1 : 0; + } + ); + + const expected = alpha / 0.25 | 0; + numPassedPerGroup.forEach((numPassed, queryGroup) => { + t.expect( + numPassed === expected, + `queryGroup: ${queryGroup}, was: ${numPassed}, expected: ${expected}` + ); + }); +}); + +g.test('occlusion_query,multi_resolve'). +desc('Test calling resolveQuerySet more than once does not change results'). +fn(async (t) => { + const { device } = t; + const kNumQueries = 30; + const { + pipeline, + vertexBuffer, + occlusionQuerySet, + renderPassDescriptor, + renderTargetTexture, + queryResolveBuffer, + readBuffer + } = t.setup({ numQueries: kNumQueries }); + + const readBuffer2 = t.createBuffer(readBuffer); + const readBuffer3 = t.createBuffer(readBuffer); + + const renderSomething = (encoder) => { + const pass = encoder.beginRenderPass(renderPassDescriptor); + pass.setPipeline(pipeline); + pass.setVertexBuffer(0, vertexBuffer); + pass.setScissorRect(0, 0, renderTargetTexture.width, renderTargetTexture.height); + pass.draw(3); + pass.end(); + }; + + { + const encoder = device.createCommandEncoder(); + { const pass = encoder.beginRenderPass(renderPassDescriptor); pass.setPipeline(pipeline); pass.setVertexBuffer(0, vertexBuffer); - pass.setScissorRect(0, 0, renderTargetTexture.width, renderTargetTexture.height); - pass.draw(3); - pass.end(); - }; - { - const encoder = device.createCommandEncoder(); - { - const pass = encoder.beginRenderPass(renderPassDescriptor); - pass.setPipeline(pipeline); - pass.setVertexBuffer(0, vertexBuffer); - - for (let i = 0; i < kNumQueries; ++i) { - pass.beginOcclusionQuery(i); - if (i % 2) { - pass.setScissorRect(0, 0, renderTargetTexture.width, renderTargetTexture.height); - } else { - pass.setScissorRect(0, 0, 0, 0); - } - pass.draw(3); - pass.endOcclusionQuery(); - } - pass.end(); - } - - // Intentionally call resolveQuerySet twice - encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); - encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); - encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer, 0, readBuffer.size); - - // Rendering stuff unrelated should not affect results. - renderSomething(encoder); - - encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); - encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer2, 0, readBuffer2.size); - device.queue.submit([encoder.finish()]); - } - - // Encode something else and draw again, then read the results - // They should not be affected. - { - const encoder = device.createCommandEncoder(); - renderSomething(encoder); - - encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); - encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer3, 0, readBuffer3.size); - device.queue.submit([encoder.finish()]); - } - - const results = await Promise.all([ - t.readBufferAsBigUint64(readBuffer), - t.readBufferAsBigUint64(readBuffer2), - t.readBufferAsBigUint64(readBuffer3), - ]); - - results.forEach((result, r) => { for (let i = 0; i < kNumQueries; ++i) { - const passed = !!result[i]; - const expectPassed = !!(i % 2); - t.expect( - passed === expectPassed, - `result(${r}): queryIndex: ${i}, passed: ${passed}, expected: ${expectPassed}` - ); + pass.beginOcclusionQuery(i); + if (i % 2) { + pass.setScissorRect(0, 0, renderTargetTexture.width, renderTargetTexture.height); + } else { + pass.setScissorRect(0, 0, 0, 0); + } + pass.draw(3); + pass.endOcclusionQuery(); } - }); + pass.end(); + } + + // Intentionally call resolveQuerySet twice + encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); + encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); + encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer, 0, readBuffer.size); + + // Rendering stuff unrelated should not affect results. + renderSomething(encoder); + + encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); + encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer2, 0, readBuffer2.size); + device.queue.submit([encoder.finish()]); + } + + // Encode something else and draw again, then read the results + // They should not be affected. + { + const encoder = device.createCommandEncoder(); + renderSomething(encoder); + + encoder.resolveQuerySet(occlusionQuerySet, 0, kNumQueries, queryResolveBuffer, 0); + encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer3, 0, readBuffer3.size); + device.queue.submit([encoder.finish()]); + } + + const results = await Promise.all([ + t.readBufferAsBigUint64(readBuffer), + t.readBufferAsBigUint64(readBuffer2), + t.readBufferAsBigUint64(readBuffer3)] + ); + + results.forEach((result, r) => { + for (let i = 0; i < kNumQueries; ++i) { + const passed = !!result[i]; + const expectPassed = !!(i % 2); + t.expect( + passed === expectPassed, + `result(${r}): queryIndex: ${i}, passed: ${passed}, expected: ${expectPassed}` + ); + } }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/dynamic_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/dynamic_state.spec.js index 69c91e371d4..639fbec8249 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/dynamic_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/dynamic_state.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests of the behavior of the viewport/scissor/blend/reference states. TODO: @@ -13,8 +13,7 @@ TODO: - overwriting: [set(1), draw, set(2), draw] (fn should differentiate from [set(1), set(2), draw, draw]) - overwriting: [set(1), set(2), draw] (fn should differentiate from [set(1), draw] but not [set(2), draw]) - } -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -export const g = makeTestGroup(GPUTest); +export const g = makeTestGroup(GPUTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/state_tracking.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/state_tracking.spec.js index d50c4f794b4..9b3363f3aea 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/state_tracking.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/command_buffer/render/state_tracking.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Ensure state is set correctly. Tries to stress state caching (setting different states multiple times in different orders) for setIndexBuffer and setVertexBuffer. Equivalent tests for setBindGroup and setPipeline are in programmable/state_tracking.spec.ts. Equivalent tests for viewport/scissor/blend/reference are in render/dynamic_state.spec.ts -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest, TextureTestMixin } from '../../../../gpu_test.js'; import { TexelView } from '../../../../util/texture/texel_view.js'; @@ -32,26 +31,26 @@ class VertexAndIndexStateTrackingTest extends TextureTestMixin(GPUTest) { vec4(input.vertexPosition, 0.5, 0.0, 1.0); outputs.color = input.vertexColor; return outputs; - }`, + }` }), entryPoint: 'main', buffers: [ + { + arrayStride, + attributes: [ { - arrayStride, - attributes: [ - { - format: 'float32', - offset: 0, - shaderLocation: 0, - }, - { - format: 'unorm8x4', - offset: 4, - shaderLocation: 1, - }, - ], + format: 'float32', + offset: 0, + shaderLocation: 0 }, - ], + { + format: 'unorm8x4', + offset: 4, + shaderLocation: 1 + }] + + }] + }, fragment: { module: this.device.createShaderModule({ @@ -62,14 +61,14 @@ class VertexAndIndexStateTrackingTest extends TextureTestMixin(GPUTest) { @fragment fn main(input : Input) -> @location(0) vec4 { return input.color; - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, primitive: { - topology: 'point-list', - }, + topology: 'point-list' + } }); } @@ -78,345 +77,339 @@ class VertexAndIndexStateTrackingTest extends TextureTestMixin(GPUTest) { export const g = makeTestGroup(VertexAndIndexStateTrackingTest); -g.test('set_index_buffer_without_changing_buffer') - .desc( - ` +g.test('set_index_buffer_without_changing_buffer'). +desc( + ` Test that setting index buffer states (index format, offset, size) multiple times in different orders still keeps the correctness of each draw call. ` - ) - .fn(t => { - // Initialize the index buffer with 5 uint16 indices (0, 1, 2, 3, 4). - const indexBuffer = t.makeBufferWithContents( - new Uint16Array([0, 1, 2, 3, 4]), - GPUBufferUsage.INDEX - ); +). +fn((t) => { + // Initialize the index buffer with 5 uint16 indices (0, 1, 2, 3, 4). + const indexBuffer = t.makeBufferWithContents( + new Uint16Array([0, 1, 2, 3, 4]), + GPUBufferUsage.INDEX + ); - // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) - // Note that the maximum index in the test is 0x10000. - const kVertexAttributesCount = 0x10000 + 1; - const vertexBuffer = t.device.createBuffer({ - usage: GPUBufferUsage.VERTEX, - size: t.kVertexAttributeSize * kVertexAttributesCount, - mappedAtCreation: true, - }); - t.trackForCleanup(vertexBuffer); - const vertexAttributes = vertexBuffer.getMappedRange(); - const kPositions = [-0.8, -0.4, 0.0, 0.4, 0.8, -0.4]; - const kColors = [ - new Uint8Array([255, 0, 0, 255]), - new Uint8Array([255, 255, 255, 255]), - new Uint8Array([0, 0, 255, 255]), - new Uint8Array([255, 0, 255, 255]), - new Uint8Array([0, 255, 255, 255]), - new Uint8Array([0, 255, 0, 255]), - ]; + // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) + // Note that the maximum index in the test is 0x10000. + const kVertexAttributesCount = 0x10000 + 1; + const vertexBuffer = t.device.createBuffer({ + usage: GPUBufferUsage.VERTEX, + size: t.kVertexAttributeSize * kVertexAttributesCount, + mappedAtCreation: true + }); + t.trackForCleanup(vertexBuffer); + const vertexAttributes = vertexBuffer.getMappedRange(); + const kPositions = [-0.8, -0.4, 0.0, 0.4, 0.8, -0.4]; + const kColors = [ + new Uint8Array([255, 0, 0, 255]), + new Uint8Array([255, 255, 255, 255]), + new Uint8Array([0, 0, 255, 255]), + new Uint8Array([255, 0, 255, 255]), + new Uint8Array([0, 255, 255, 255]), + new Uint8Array([0, 255, 0, 255])]; - // Set vertex attributes at index {0..4} in Uint16. - // Note that the vertex attribute at index 1 will not be used. - for (let i = 0; i < kPositions.length - 1; ++i) { - const baseOffset = t.kVertexAttributeSize * i; - const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); - vertexPosition[0] = kPositions[i]; - const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); - vertexColor.set(kColors[i]); - } - // Set vertex attributes at index 0x10000. - const lastOffset = t.kVertexAttributeSize * (kVertexAttributesCount - 1); - const lastVertexPosition = new Float32Array(vertexAttributes, lastOffset, 1); - lastVertexPosition[0] = kPositions[kPositions.length - 1]; - const lastVertexColor = new Uint8Array(vertexAttributes, lastOffset + 4, 4); - lastVertexColor.set(kColors[kColors.length - 1]); + // Set vertex attributes at index {0..4} in Uint16. + // Note that the vertex attribute at index 1 will not be used. + for (let i = 0; i < kPositions.length - 1; ++i) { + const baseOffset = t.kVertexAttributeSize * i; + const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); + vertexPosition[0] = kPositions[i]; + const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); + vertexColor.set(kColors[i]); + } + // Set vertex attributes at index 0x10000. + const lastOffset = t.kVertexAttributeSize * (kVertexAttributesCount - 1); + const lastVertexPosition = new Float32Array(vertexAttributes, lastOffset, 1); + lastVertexPosition[0] = kPositions[kPositions.length - 1]; + const lastVertexColor = new Uint8Array(vertexAttributes, lastOffset + 4, 4); + lastVertexColor.set(kColors[kColors.length - 1]); - vertexBuffer.unmap(); + vertexBuffer.unmap(); - const renderPipeline = t.GetRenderPipelineForTest(t.kVertexAttributeSize); + const renderPipeline = t.GetRenderPipelineForTest(t.kVertexAttributeSize); - const outputTextureSize = [kPositions.length - 1, 1, 1]; - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: outputTextureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: [0, 0, 0, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(renderPipeline); - renderPass.setVertexBuffer(0, vertexBuffer); - - // 1st draw: indexFormat = 'uint32', offset = 0, size = 4 (index value: 0x10000) - renderPass.setIndexBuffer(indexBuffer, 'uint32', 0, 4); - renderPass.drawIndexed(1); - - // 2nd draw: indexFormat = 'uint16', offset = 0, size = 4 (index value: 0) - renderPass.setIndexBuffer(indexBuffer, 'uint16', 0, 4); - renderPass.drawIndexed(1); - - // 3rd draw: indexFormat = 'uint16', offset = 4, size = 2 (index value: 2) - renderPass.setIndexBuffer(indexBuffer, 'uint16', 0, 2); - renderPass.setIndexBuffer(indexBuffer, 'uint16', 4, 2); - renderPass.drawIndexed(1); - - // 4th draw: indexformat = 'uint16', offset = 6, size = 4 (index values: 3, 4) - renderPass.setIndexBuffer(indexBuffer, 'uint16', 6, 2); - renderPass.setIndexBuffer(indexBuffer, 'uint16', 6, 4); - renderPass.drawIndexed(2); - - renderPass.end(); - t.queue.submit([encoder.finish()]); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: outputTexture }, - TexelView.fromTexelsAsBytes('rgba8unorm', coord => - coord.x === 1 ? kColors[kPositions.length - 1] : kColors[coord.x] - ), - - outputTextureSize - ); + const outputTextureSize = [kPositions.length - 1, 1, 1]; + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: outputTextureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('set_vertex_buffer_without_changing_buffer') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(renderPipeline); + renderPass.setVertexBuffer(0, vertexBuffer); + + // 1st draw: indexFormat = 'uint32', offset = 0, size = 4 (index value: 0x10000) + renderPass.setIndexBuffer(indexBuffer, 'uint32', 0, 4); + renderPass.drawIndexed(1); + + // 2nd draw: indexFormat = 'uint16', offset = 0, size = 4 (index value: 0) + renderPass.setIndexBuffer(indexBuffer, 'uint16', 0, 4); + renderPass.drawIndexed(1); + + // 3rd draw: indexFormat = 'uint16', offset = 4, size = 2 (index value: 2) + renderPass.setIndexBuffer(indexBuffer, 'uint16', 0, 2); + renderPass.setIndexBuffer(indexBuffer, 'uint16', 4, 2); + renderPass.drawIndexed(1); + + // 4th draw: indexformat = 'uint16', offset = 6, size = 4 (index values: 3, 4) + renderPass.setIndexBuffer(indexBuffer, 'uint16', 6, 2); + renderPass.setIndexBuffer(indexBuffer, 'uint16', 6, 4); + renderPass.drawIndexed(2); + + renderPass.end(); + t.queue.submit([encoder.finish()]); + + t.expectTexelViewComparisonIsOkInTexture( + { texture: outputTexture }, + TexelView.fromTexelsAsBytes('rgba8unorm', (coord) => + coord.x === 1 ? kColors[kPositions.length - 1] : kColors[coord.x] + ), + outputTextureSize + ); +}); + +g.test('set_vertex_buffer_without_changing_buffer'). +desc( + ` Test that setting vertex buffer states (offset, size) multiple times in different orders still keeps the correctness of each draw call. - Tries several different sequences of setVertexBuffer+draw commands, each of which draws vertices in all 4 output pixels, and check they were drawn correctly. ` - ) - .fn(t => { - const kPositions = [-0.875, -0.625, -0.375, -0.125, 0.125, 0.375, 0.625, 0.875]; - const kColors = [ - new Uint8Array([255, 0, 0, 255]), - new Uint8Array([0, 255, 0, 255]), - new Uint8Array([0, 0, 255, 255]), - new Uint8Array([51, 0, 0, 255]), - new Uint8Array([0, 51, 0, 255]), - new Uint8Array([0, 0, 51, 255]), - new Uint8Array([255, 0, 255, 255]), - new Uint8Array([255, 255, 0, 255]), - ]; +). +fn((t) => { + const kPositions = [-0.875, -0.625, -0.375, -0.125, 0.125, 0.375, 0.625, 0.875]; + const kColors = [ + new Uint8Array([255, 0, 0, 255]), + new Uint8Array([0, 255, 0, 255]), + new Uint8Array([0, 0, 255, 255]), + new Uint8Array([51, 0, 0, 255]), + new Uint8Array([0, 51, 0, 255]), + new Uint8Array([0, 0, 51, 255]), + new Uint8Array([255, 0, 255, 255]), + new Uint8Array([255, 255, 0, 255])]; - // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) - const kVertexAttributesCount = 8; - const vertexBuffer = t.device.createBuffer({ - usage: GPUBufferUsage.VERTEX, - size: t.kVertexAttributeSize * kVertexAttributesCount, - mappedAtCreation: true, - }); - t.trackForCleanup(vertexBuffer); - const vertexAttributes = vertexBuffer.getMappedRange(); - for (let i = 0; i < kPositions.length; ++i) { - const baseOffset = t.kVertexAttributeSize * i; - const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); - vertexPosition[0] = kPositions[i]; - const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); - vertexColor.set(kColors[i]); - } - vertexBuffer.unmap(); + // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) + const kVertexAttributesCount = 8; + const vertexBuffer = t.device.createBuffer({ + usage: GPUBufferUsage.VERTEX, + size: t.kVertexAttributeSize * kVertexAttributesCount, + mappedAtCreation: true + }); + t.trackForCleanup(vertexBuffer); + const vertexAttributes = vertexBuffer.getMappedRange(); + for (let i = 0; i < kPositions.length; ++i) { + const baseOffset = t.kVertexAttributeSize * i; + const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); + vertexPosition[0] = kPositions[i]; + const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); + vertexColor.set(kColors[i]); + } - const renderPipeline = t.GetRenderPipelineForTest(t.kVertexAttributeSize); + vertexBuffer.unmap(); - const outputTextureSize = [kPositions.length, 1, 1]; - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: outputTextureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + const renderPipeline = t.GetRenderPipelineForTest(t.kVertexAttributeSize); - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: [0, 0, 0, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(renderPipeline); - - // Change 'size' in setVertexBuffer() - renderPass.setVertexBuffer(0, vertexBuffer, 0, t.kVertexAttributeSize); - renderPass.setVertexBuffer(0, vertexBuffer, 0, t.kVertexAttributeSize * 2); - renderPass.draw(2); - - // Change 'offset' in setVertexBuffer() - renderPass.setVertexBuffer( - 0, - vertexBuffer, - t.kVertexAttributeSize * 2, - t.kVertexAttributeSize * 2 - ); - - renderPass.draw(2); - - // Change 'size' again in setVertexBuffer() - renderPass.setVertexBuffer( - 0, - vertexBuffer, - t.kVertexAttributeSize * 4, - t.kVertexAttributeSize * 2 - ); - - renderPass.setVertexBuffer( - 0, - vertexBuffer, - t.kVertexAttributeSize * 4, - t.kVertexAttributeSize * 4 - ); - - renderPass.draw(4); - - renderPass.end(); - t.queue.submit([encoder.finish()]); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: outputTexture }, - TexelView.fromTexelsAsBytes('rgba8unorm', coord => kColors[coord.x]), - outputTextureSize - ); + const outputTextureSize = [kPositions.length, 1, 1]; + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: outputTextureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('change_pipeline_before_and_after_vertex_buffer') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(renderPipeline); + + // Change 'size' in setVertexBuffer() + renderPass.setVertexBuffer(0, vertexBuffer, 0, t.kVertexAttributeSize); + renderPass.setVertexBuffer(0, vertexBuffer, 0, t.kVertexAttributeSize * 2); + renderPass.draw(2); + + // Change 'offset' in setVertexBuffer() + renderPass.setVertexBuffer( + 0, + vertexBuffer, + t.kVertexAttributeSize * 2, + t.kVertexAttributeSize * 2 + ); + renderPass.draw(2); + + // Change 'size' again in setVertexBuffer() + renderPass.setVertexBuffer( + 0, + vertexBuffer, + t.kVertexAttributeSize * 4, + t.kVertexAttributeSize * 2 + ); + renderPass.setVertexBuffer( + 0, + vertexBuffer, + t.kVertexAttributeSize * 4, + t.kVertexAttributeSize * 4 + ); + renderPass.draw(4); + + renderPass.end(); + t.queue.submit([encoder.finish()]); + + t.expectTexelViewComparisonIsOkInTexture( + { texture: outputTexture }, + TexelView.fromTexelsAsBytes('rgba8unorm', (coord) => kColors[coord.x]), + outputTextureSize + ); +}); + +g.test('change_pipeline_before_and_after_vertex_buffer'). +desc( + ` Test that changing the pipeline {before,after} the vertex buffers still keeps the correctness of each draw call (In D3D12, the vertex buffer stride is part of SetVertexBuffer instead of the pipeline.) ` - ) - .fn(t => { - const kPositions = [-0.8, -0.4, 0.0, 0.4, 0.8, 0.9]; - const kColors = [ - new Uint8Array([255, 0, 0, 255]), - new Uint8Array([255, 255, 255, 255]), - new Uint8Array([0, 255, 0, 255]), - new Uint8Array([0, 0, 255, 255]), - new Uint8Array([255, 0, 255, 255]), - new Uint8Array([0, 255, 255, 255]), - ]; +). +fn((t) => { + const kPositions = [-0.8, -0.4, 0.0, 0.4, 0.8, 0.9]; + const kColors = [ + new Uint8Array([255, 0, 0, 255]), + new Uint8Array([255, 255, 255, 255]), + new Uint8Array([0, 255, 0, 255]), + new Uint8Array([0, 0, 255, 255]), + new Uint8Array([255, 0, 255, 255]), + new Uint8Array([0, 255, 255, 255])]; - // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) - const vertexBuffer = t.device.createBuffer({ - usage: GPUBufferUsage.VERTEX, - size: t.kVertexAttributeSize * kPositions.length, - mappedAtCreation: true, - }); - t.trackForCleanup(vertexBuffer); - // Note that kPositions[1], kColors[1], kPositions[5] and kColors[5] are not used. - const vertexAttributes = vertexBuffer.getMappedRange(); - for (let i = 0; i < kPositions.length; ++i) { - const baseOffset = t.kVertexAttributeSize * i; - const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); - vertexPosition[0] = kPositions[i]; - const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); - vertexColor.set(kColors[i]); - } - vertexBuffer.unmap(); - // Create two render pipelines with different vertex attribute strides - const renderPipeline1 = t.GetRenderPipelineForTest(t.kVertexAttributeSize); - const renderPipeline2 = t.GetRenderPipelineForTest(t.kVertexAttributeSize * 2); + // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) + const vertexBuffer = t.device.createBuffer({ + usage: GPUBufferUsage.VERTEX, + size: t.kVertexAttributeSize * kPositions.length, + mappedAtCreation: true + }); + t.trackForCleanup(vertexBuffer); + // Note that kPositions[1], kColors[1], kPositions[5] and kColors[5] are not used. + const vertexAttributes = vertexBuffer.getMappedRange(); + for (let i = 0; i < kPositions.length; ++i) { + const baseOffset = t.kVertexAttributeSize * i; + const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); + vertexPosition[0] = kPositions[i]; + const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); + vertexColor.set(kColors[i]); + } + vertexBuffer.unmap(); - const kPointsCount = kPositions.length - 1; - const outputTextureSize = [kPointsCount, 1, 1]; - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: outputTextureSize, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + // Create two render pipelines with different vertex attribute strides + const renderPipeline1 = t.GetRenderPipelineForTest(t.kVertexAttributeSize); + const renderPipeline2 = t.GetRenderPipelineForTest(t.kVertexAttributeSize * 2); - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: [0, 0, 0, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - // Update render pipeline before setVertexBuffer. The applied vertex attribute stride should be - // 2 * kVertexAttributeSize. - renderPass.setPipeline(renderPipeline1); - renderPass.setPipeline(renderPipeline2); - renderPass.setVertexBuffer(0, vertexBuffer); - renderPass.draw(2); - - // Update render pipeline after setVertexBuffer. The applied vertex attribute stride should be - // kVertexAttributeSize. - renderPass.setVertexBuffer(0, vertexBuffer, 3 * t.kVertexAttributeSize); - renderPass.setPipeline(renderPipeline1); - renderPass.draw(2); - - renderPass.end(); - - t.queue.submit([encoder.finish()]); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: outputTexture }, - TexelView.fromTexelsAsBytes('rgba8unorm', coord => - coord.x === 1 ? new Uint8Array([0, 0, 0, 255]) : kColors[coord.x] - ), - - outputTextureSize - ); + const kPointsCount = kPositions.length - 1; + const outputTextureSize = [kPointsCount, 1, 1]; + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: outputTextureSize, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('set_vertex_buffer_but_not_used_in_draw') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + // Update render pipeline before setVertexBuffer. The applied vertex attribute stride should be + // 2 * kVertexAttributeSize. + renderPass.setPipeline(renderPipeline1); + renderPass.setPipeline(renderPipeline2); + renderPass.setVertexBuffer(0, vertexBuffer); + renderPass.draw(2); + + // Update render pipeline after setVertexBuffer. The applied vertex attribute stride should be + // kVertexAttributeSize. + renderPass.setVertexBuffer(0, vertexBuffer, 3 * t.kVertexAttributeSize); + renderPass.setPipeline(renderPipeline1); + renderPass.draw(2); + + renderPass.end(); + + t.queue.submit([encoder.finish()]); + + t.expectTexelViewComparisonIsOkInTexture( + { texture: outputTexture }, + TexelView.fromTexelsAsBytes('rgba8unorm', (coord) => + coord.x === 1 ? new Uint8Array([0, 0, 0, 255]) : kColors[coord.x] + ), + outputTextureSize + ); +}); + +g.test('set_vertex_buffer_but_not_used_in_draw'). +desc( + ` Test that drawing after having set vertex buffer slots not used by the pipeline works correctly. - In the test there are 2 draw calls in the render pass. The first draw call uses 2 vertex buffers (position and color), and the second draw call only uses 1 vertex buffer (for color, the vertex position is defined as constant values in the vertex shader). The test verifies if both of these two draw calls work correctly. ` - ) - .fn(t => { - const kPositions = new Float32Array([-0.75, -0.25]); - const kColors = new Uint8Array([255, 0, 0, 255, 0, 255, 0, 255]); +). +fn((t) => { + const kPositions = new Float32Array([-0.75, -0.25]); + const kColors = new Uint8Array([255, 0, 0, 255, 0, 255, 0, 255]); - // Initialize the vertex buffers with required vertex attributes (position: f32, color: f32x4) - const kAttributeStride = 4; - const positionBuffer = t.makeBufferWithContents(kPositions, GPUBufferUsage.VERTEX); - const colorBuffer = t.makeBufferWithContents(kColors, GPUBufferUsage.VERTEX); + // Initialize the vertex buffers with required vertex attributes (position: f32, color: f32x4) + const kAttributeStride = 4; + const positionBuffer = t.makeBufferWithContents(kPositions, GPUBufferUsage.VERTEX); + const colorBuffer = t.makeBufferWithContents(kColors, GPUBufferUsage.VERTEX); - const fragmentState = { - module: t.device.createShaderModule({ - code: ` + const fragmentState = { + module: t.device.createShaderModule({ + code: ` struct Input { @location(0) color : vec4 }; @fragment fn main(input : Input) -> @location(0) vec4 { return input.color; - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }; + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + }; - // Create renderPipeline1 that uses both positionBuffer and colorBuffer. - const renderPipeline1 = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + // Create renderPipeline1 that uses both positionBuffer and colorBuffer. + const renderPipeline1 = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` struct Inputs { @location(0) vertexColor : vec4, @location(1) vertexPosition : f32, @@ -432,43 +425,43 @@ g.test('set_vertex_buffer_but_not_used_in_draw') vec4(input.vertexPosition, 0.5, 0.0, 1.0); outputs.color = input.vertexColor; return outputs; - }`, - }), - entryPoint: 'main', - buffers: [ - { - arrayStride: kAttributeStride, - attributes: [ - { - format: 'unorm8x4', - offset: 0, - shaderLocation: 0, - }, - ], - }, - { - arrayStride: kAttributeStride, - attributes: [ - { - format: 'float32', - offset: 0, - shaderLocation: 1, - }, - ], - }, - ], - }, - fragment: fragmentState, - primitive: { - topology: 'point-list', - }, - }); + }` + }), + entryPoint: 'main', + buffers: [ + { + arrayStride: kAttributeStride, + attributes: [ + { + format: 'unorm8x4', + offset: 0, + shaderLocation: 0 + }] - const renderPipeline2 = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + }, + { + arrayStride: kAttributeStride, + attributes: [ + { + format: 'float32', + offset: 0, + shaderLocation: 1 + }] + + }] + + }, + fragment: fragmentState, + primitive: { + topology: 'point-list' + } + }); + + const renderPipeline2 = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` struct Inputs { @builtin(vertex_index) vertexIndex : u32, @location(0) vertexColor : vec4, @@ -485,147 +478,147 @@ g.test('set_vertex_buffer_but_not_used_in_draw') vec4(kPositions[input.vertexIndex], 0.5, 0.0, 1.0); outputs.color = input.vertexColor; return outputs; - }`, - }), - entryPoint: 'main', - buffers: [ - { - arrayStride: kAttributeStride, - attributes: [ - { - format: 'unorm8x4', - offset: 0, - shaderLocation: 0, - }, - ], - }, - ], - }, - fragment: fragmentState, - primitive: { - topology: 'point-list', - }, - }); - - const kPointsCount = 4; - const outputTextureSize = [kPointsCount, 1, 1]; - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [kPointsCount, 1, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ + }` + }), + entryPoint: 'main', + buffers: [ + { + arrayStride: kAttributeStride, + attributes: [ { - view: outputTexture.createView(), - clearValue: [0, 0, 0, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); + format: 'unorm8x4', + offset: 0, + shaderLocation: 0 + }] - renderPass.setVertexBuffer(0, colorBuffer); - renderPass.setVertexBuffer(1, positionBuffer); - renderPass.setPipeline(renderPipeline1); - renderPass.draw(2); + }] - renderPass.setPipeline(renderPipeline2); - renderPass.draw(2); - - renderPass.end(); - - t.queue.submit([encoder.finish()]); - - const kExpectedColors = [ - kColors.subarray(0, 4), - kColors.subarray(4), - kColors.subarray(0, 4), - kColors.subarray(4), - ]; - - t.expectTexelViewComparisonIsOkInTexture( - { texture: outputTexture }, - TexelView.fromTexelsAsBytes('rgba8unorm', coord => kExpectedColors[coord.x]), - outputTextureSize - ); + }, + fragment: fragmentState, + primitive: { + topology: 'point-list' + } }); -g.test('set_index_buffer_before_non_indexed_draw') - .desc( - ` + const kPointsCount = 4; + const outputTextureSize = [kPointsCount, 1, 1]; + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [kPointsCount, 1, 1], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + renderPass.setVertexBuffer(0, colorBuffer); + renderPass.setVertexBuffer(1, positionBuffer); + renderPass.setPipeline(renderPipeline1); + renderPass.draw(2); + + renderPass.setPipeline(renderPipeline2); + renderPass.draw(2); + + renderPass.end(); + + t.queue.submit([encoder.finish()]); + + const kExpectedColors = [ + kColors.subarray(0, 4), + kColors.subarray(4), + kColors.subarray(0, 4), + kColors.subarray(4)]; + + + t.expectTexelViewComparisonIsOkInTexture( + { texture: outputTexture }, + TexelView.fromTexelsAsBytes('rgba8unorm', (coord) => kExpectedColors[coord.x]), + outputTextureSize + ); +}); + +g.test('set_index_buffer_before_non_indexed_draw'). +desc( + ` Test that setting / not setting the index buffer does not impact a non-indexed draw. ` - ) - .fn(t => { - const kPositions = [-0.75, -0.25, 0.25, 0.75]; - const kColors = [ - new Uint8Array([255, 0, 0, 255]), - new Uint8Array([0, 255, 0, 255]), - new Uint8Array([0, 0, 255, 255]), - new Uint8Array([255, 0, 255, 255]), - ]; +). +fn((t) => { + const kPositions = [-0.75, -0.25, 0.25, 0.75]; + const kColors = [ + new Uint8Array([255, 0, 0, 255]), + new Uint8Array([0, 255, 0, 255]), + new Uint8Array([0, 0, 255, 255]), + new Uint8Array([255, 0, 255, 255])]; - // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) - const vertexBuffer = t.device.createBuffer({ - usage: GPUBufferUsage.VERTEX, - size: t.kVertexAttributeSize * kPositions.length, - mappedAtCreation: true, - }); - t.trackForCleanup(vertexBuffer); - const vertexAttributes = vertexBuffer.getMappedRange(); - for (let i = 0; i < kPositions.length; ++i) { - const baseOffset = t.kVertexAttributeSize * i; - const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); - vertexPosition[0] = kPositions[i]; - const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); - vertexColor.set(kColors[i]); - } - vertexBuffer.unmap(); - // Initialize the index buffer with 2 uint16 indices (2, 3). - const indexBuffer = t.makeBufferWithContents(new Uint16Array([2, 3]), GPUBufferUsage.INDEX); - - const renderPipeline = t.GetRenderPipelineForTest(t.kVertexAttributeSize); - - const kPointsCount = 4; - const outputTextureSize = [kPointsCount, 1, 1]; - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [kPointsCount, 1, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: [0, 0, 0, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - // The first draw call is an indexed one (the third and fourth color are involved) - renderPass.setVertexBuffer(0, vertexBuffer); - renderPass.setIndexBuffer(indexBuffer, 'uint16'); - renderPass.setPipeline(renderPipeline); - renderPass.drawIndexed(2); - - // The second draw call is a non-indexed one (the first and second color are involved) - renderPass.draw(2); - - renderPass.end(); - - t.queue.submit([encoder.finish()]); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: outputTexture }, - TexelView.fromTexelsAsBytes('rgba8unorm', coord => kColors[coord.x]), - outputTextureSize - ); + // Initialize the vertex buffer with required vertex attributes (position: f32, color: f32x4) + const vertexBuffer = t.device.createBuffer({ + usage: GPUBufferUsage.VERTEX, + size: t.kVertexAttributeSize * kPositions.length, + mappedAtCreation: true }); + t.trackForCleanup(vertexBuffer); + const vertexAttributes = vertexBuffer.getMappedRange(); + for (let i = 0; i < kPositions.length; ++i) { + const baseOffset = t.kVertexAttributeSize * i; + const vertexPosition = new Float32Array(vertexAttributes, baseOffset, 1); + vertexPosition[0] = kPositions[i]; + const vertexColor = new Uint8Array(vertexAttributes, baseOffset + 4, 4); + vertexColor.set(kColors[i]); + } + vertexBuffer.unmap(); + + // Initialize the index buffer with 2 uint16 indices (2, 3). + const indexBuffer = t.makeBufferWithContents(new Uint16Array([2, 3]), GPUBufferUsage.INDEX); + + const renderPipeline = t.GetRenderPipelineForTest(t.kVertexAttributeSize); + + const kPointsCount = 4; + const outputTextureSize = [kPointsCount, 1, 1]; + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [kPointsCount, 1, 1], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + // The first draw call is an indexed one (the third and fourth color are involved) + renderPass.setVertexBuffer(0, vertexBuffer); + renderPass.setIndexBuffer(indexBuffer, 'uint16'); + renderPass.setPipeline(renderPipeline); + renderPass.drawIndexed(2); + + // The second draw call is a non-indexed one (the first and second color are involved) + renderPass.draw(2); + + renderPass.end(); + + t.queue.submit([encoder.finish()]); + + t.expectTexelViewComparisonIsOkInTexture( + { texture: outputTexture }, + TexelView.fromTexelsAsBytes('rgba8unorm', (coord) => kColors[coord.x]), + outputTextureSize + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute/basic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute/basic.spec.js index 2e5b1279001..2875f8a0ac3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute/basic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute/basic.spec.js @@ -1,22 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Basic command buffer compute tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { checkElementsEqualGenerated } from '../../../util/check_contents.js'; export const g = makeTestGroup(GPUTest); -g.test('memcpy').fn(t => { +g.test('memcpy').fn((t) => { const data = new Uint32Array([0x01020304]); const src = t.makeBufferWithContents(data, GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE); const dst = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE }); const pipeline = t.device.createComputePipeline({ @@ -35,19 +34,18 @@ g.test('memcpy').fn(t => { dst.value = src.value; return; } - `, + ` }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const bg = t.device.createBindGroup({ entries: [ - { binding: 0, resource: { buffer: src, offset: 0, size: 4 } }, - { binding: 1, resource: { buffer: dst, offset: 0, size: 4 } }, - ], + { binding: 0, resource: { buffer: src, offset: 0, size: 4 } }, + { binding: 1, resource: { buffer: dst, offset: 0, size: 4 } }], - layout: pipeline.getBindGroupLayout(0), + layout: pipeline.getBindGroupLayout(0) }); const encoder = t.device.createCommandEncoder(); @@ -61,55 +59,55 @@ g.test('memcpy').fn(t => { t.expectGPUBufferValuesEqual(dst, data); }); -g.test('large_dispatch') - .desc(`Test reasonably-sized large dispatches (see also: stress tests).`) - .params(u => - u - // Reasonably-sized powers of two, and some stranger larger sizes. - .combine('dispatchSize', [256, 2048, 315, 628, 2179, 'maximum']) - // Test some reasonable workgroup sizes. - .beginSubcases() - // 0 == x axis; 1 == y axis; 2 == z axis. - .combine('largeDimension', [0, 1, 2]) - .expand('workgroupSize', p => [1, 2, 8, 32, 'maximum']) - ) - .fn(t => { - // The output storage buffer is filled with this value. - const val = 0x01020304; - const badVal = 0xbaadf00d; +g.test('large_dispatch'). +desc(`Test reasonably-sized large dispatches (see also: stress tests).`). +params((u) => +u +// Reasonably-sized powers of two, and some stranger larger sizes. +.combine('dispatchSize', [256, 2048, 315, 628, 2179, 'maximum']) +// Test some reasonable workgroup sizes. +.beginSubcases() +// 0 == x axis; 1 == y axis; 2 == z axis. +.combine('largeDimension', [0, 1, 2]). +expand('workgroupSize', () => [1, 2, 8, 32, 'maximum']) +). +fn((t) => { + // The output storage buffer is filled with this value. + const val = 0x01020304; + const badVal = 0xbaadf00d; - const kMaxComputeWorkgroupSize = [ - t.device.limits.maxComputeWorkgroupSizeX, - t.device.limits.maxComputeWorkgroupSizeY, - t.device.limits.maxComputeWorkgroupSizeZ, - ]; + const kMaxComputeWorkgroupSize = [ + t.device.limits.maxComputeWorkgroupSizeX, + t.device.limits.maxComputeWorkgroupSizeY, + t.device.limits.maxComputeWorkgroupSizeZ]; - const wgSize = - t.params.workgroupSize === 'maximum' - ? kMaxComputeWorkgroupSize[t.params.largeDimension] - : t.params.workgroupSize; - const dispatchSize = - t.params.dispatchSize === 'maximum' - ? t.device.limits.maxComputeWorkgroupsPerDimension - : t.params.dispatchSize; - const bufferLength = dispatchSize * wgSize; - const bufferByteSize = Uint32Array.BYTES_PER_ELEMENT * bufferLength; - const dst = t.device.createBuffer({ - size: bufferByteSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }); - // Only use one large dimension and workgroup size in the dispatch - // call to keep the size of the test reasonable. - const dims = [1, 1, 1]; - dims[t.params.largeDimension] = dispatchSize; - const wgSizes = [1, 1, 1]; - wgSizes[t.params.largeDimension] = wgSize; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const wgSize = + t.params.workgroupSize === 'maximum' ? + kMaxComputeWorkgroupSize[t.params.largeDimension] : + t.params.workgroupSize; + const dispatchSize = + t.params.dispatchSize === 'maximum' ? + t.device.limits.maxComputeWorkgroupsPerDimension : + t.params.dispatchSize; + const bufferLength = dispatchSize * wgSize; + const bufferByteSize = Uint32Array.BYTES_PER_ELEMENT * bufferLength; + const dst = t.device.createBuffer({ + size: bufferByteSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }); + + // Only use one large dimension and workgroup size in the dispatch + // call to keep the size of the test reasonable. + const dims = [1, 1, 1]; + dims[t.params.largeDimension] = dispatchSize; + const wgSizes = [1, 1, 1]; + wgSizes[t.params.largeDimension] = wgSize; + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` struct OutputBuffer { value : array }; @@ -136,29 +134,29 @@ g.test('large_dispatch') } dst.value[index] = val; } - `, - }), - entryPoint: 'main', - }, - }); - - const bg = t.device.createBindGroup({ - entries: [{ binding: 0, resource: { buffer: dst, offset: 0, size: bufferByteSize } }], - layout: pipeline.getBindGroupLayout(0), - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bg); - pass.dispatchWorkgroups(dims[0], dims[1], dims[2]); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectGPUBufferValuesPassCheck(dst, a => checkElementsEqualGenerated(a, i => val), { - type: Uint32Array, - typedLength: bufferLength, - }); - - dst.destroy(); + ` + }), + entryPoint: 'main' + } }); + + const bg = t.device.createBindGroup({ + entries: [{ binding: 0, resource: { buffer: dst, offset: 0, size: bufferByteSize } }], + layout: pipeline.getBindGroupLayout(0) + }); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bg); + pass.dispatchWorkgroups(dims[0], dims[1], dims[2]); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + t.expectGPUBufferValuesPassCheck(dst, (a) => checkElementsEqualGenerated(a, (_i) => val), { + type: Uint32Array, + typedLength: bufferLength + }); + + dst.destroy(); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/entry_point_name.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/entry_point_name.spec.js index ddd6b8850df..2e675a84d38 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/entry_point_name.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/entry_point_name.spec.js @@ -1,13 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: - Test some weird but valid values for entry point name (both module and pipeline creation should succeed). - Test using each of many entry points in the module (should succeed). - Test using an entry point with the wrong stage (should fail). -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; -export const g = makeTestGroup(GPUTest); +export const g = makeTestGroup(GPUTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/overrides.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/overrides.spec.js index a323b97eff5..35d8c437fd2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/overrides.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/compute_pipeline/overrides.spec.js @@ -1,38 +1,42 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Compute pipeline using overridable constants test. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { range } from '../../../../common/util/util.js'; import { GPUTest } from '../../../gpu_test.js'; class F extends GPUTest { - async ExpectShaderOutputWithConstants(isAsync, expected, constants, code) { + async ExpectShaderOutputWithConstants( + isAsync, + expected, + constants, + code) + { const dst = this.device.createBuffer({ size: expected.byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE }); const descriptor = { layout: 'auto', compute: { module: this.device.createShaderModule({ - code, + code }), entryPoint: 'main', - constants, - }, + constants + } }; - const promise = isAsync - ? this.device.createComputePipelineAsync(descriptor) - : Promise.resolve(this.device.createComputePipeline(descriptor)); + const promise = isAsync ? + this.device.createComputePipelineAsync(descriptor) : + Promise.resolve(this.device.createComputePipeline(descriptor)); const pipeline = await promise; const bindGroup = this.device.createBindGroup({ entries: [{ binding: 0, resource: { buffer: dst, offset: 0, size: expected.byteLength } }], - layout: pipeline.getBindGroupLayout(0), + layout: pipeline.getBindGroupLayout(0) }); const encoder = this.device.createCommandEncoder(); @@ -49,30 +53,30 @@ class F extends GPUTest { export const g = makeTestGroup(F); -g.test('basic') - .desc( - `Test that either correct constants override values or default values when no constants override value are provided at pipeline creation time are used as the output to the storage buffer.` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(async t => { - const count = 11; - await t.ExpectShaderOutputWithConstants( - t.params.isAsync, - new Uint32Array(range(count, i => i)), - { - c0: 0, - c1: 1, - c2: 2, - c3: 3, - // c4 is using default value - c5: 5, - c6: 6, - // c7 is using default value - c8: 8, - c9: 9, - // c10 is using default value - }, - ` +g.test('basic'). +desc( + `Test that either correct constants override values or default values when no constants override value are provided at pipeline creation time are used as the output to the storage buffer.` +). +params((u) => u.combine('isAsync', [true, false])). +fn(async (t) => { + const count = 11; + await t.ExpectShaderOutputWithConstants( + t.params.isAsync, + new Uint32Array(range(count, (i) => i)), + { + c0: 0, + c1: 1, + c2: 2, + c3: 3, + // c4 is using default value + c5: 5, + c6: 6, + // c7 is using default value + c8: 8, + c9: 9 + // c10 is using default value + }, + ` override c0: bool; // type: bool override c1: bool = false; // default override override c2: f32; // type: float32 @@ -105,24 +109,24 @@ g.test('basic') buf.data[10] = u32(c10); } ` - ); - }); + ); +}); -g.test('numeric_id') - .desc( - `Test that correct values are used as output to the storage buffer for constants specified with numeric id instead of their names.` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(async t => { - await t.ExpectShaderOutputWithConstants( - t.params.isAsync, - new Uint32Array([1, 2, 3]), - { - 1001: 1, - 1: 2, - // 1003 is using default value - }, - ` +g.test('numeric_id'). +desc( + `Test that correct values are used as output to the storage buffer for constants specified with numeric id instead of their names.` +). +params((u) => u.combine('isAsync', [true, false])). +fn(async (t) => { + await t.ExpectShaderOutputWithConstants( + t.params.isAsync, + new Uint32Array([1, 2, 3]), + { + 1001: 1, + 1: 2 + // 1003 is using default value + }, + ` @id(1001) override c1: u32; // some big numeric id @id(1) override c2: u32 = 0u; // id == 1 might collide with some generated constant id @id(1003) override c3: u32 = 3u; // default @@ -139,26 +143,26 @@ g.test('numeric_id') buf.data[2] = c3; } ` - ); - }); + ); +}); -g.test('precision') - .desc( - `Test that float number precision is preserved for constants as they are used for compute shader output of the storage buffer.` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(async t => { - const c1 = 3.14159; - const c2 = 3.141592653589793238; - await t.ExpectShaderOutputWithConstants( - t.params.isAsync, - // These values will get rounded to f32 and createComputePipeline, so the values coming out from the shader won't be the exact same one as shown here. - new Float32Array([c1, c2]), - { - c1, - c2, - }, - ` +g.test('precision'). +desc( + `Test that float number precision is preserved for constants as they are used for compute shader output of the storage buffer.` +). +params((u) => u.combine('isAsync', [true, false])). +fn(async (t) => { + const c1 = 3.14159; + const c2 = 3.141592653589793; + await t.ExpectShaderOutputWithConstants( + t.params.isAsync, + // These values will get rounded to f32 and createComputePipeline, so the values coming out from the shader won't be the exact same one as shown here. + new Float32Array([c1, c2]), + { + c1, + c2 + }, + ` override c1: f32; override c2: f32; @@ -173,30 +177,30 @@ g.test('precision') buf.data[1] = c2; } ` - ); - }); + ); +}); -g.test('workgroup_size') - .desc( - `Test that constants can be used as workgroup size correctly, the compute shader should write the max local invocation id to the storage buffer which is equal to the workgroup size dimension given by the constant.` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combine('type', ['u32', 'i32']) - .combine('size', [3, 16, 64]) - .combine('v', ['x', 'y', 'z']) - ) - .fn(async t => { - const { isAsync, type, size, v } = t.params; - const workgroup_size_str = v === 'x' ? 'd' : v === 'y' ? '1, d' : '1, 1, d'; - await t.ExpectShaderOutputWithConstants( - isAsync, - new Uint32Array([size]), - { - d: size, - }, - ` +g.test('workgroup_size'). +desc( + `Test that constants can be used as workgroup size correctly, the compute shader should write the max local invocation id to the storage buffer which is equal to the workgroup size dimension given by the constant.` +). +params((u) => +u // +.combine('isAsync', [true, false]). +combine('type', ['u32', 'i32']). +combine('size', [3, 16, 64]). +combine('v', ['x', 'y', 'z']) +). +fn(async (t) => { + const { isAsync, type, size, v } = t.params; + const workgroup_size_str = v === 'x' ? 'd' : v === 'y' ? '1, d' : '1, 1, d'; + await t.ExpectShaderOutputWithConstants( + isAsync, + new Uint32Array([size]), + { + d: size + }, + ` override d: ${type}; struct Buf { @@ -213,17 +217,17 @@ g.test('workgroup_size') } } ` - ); - }); + ); +}); -g.test('shared_shader_module') - .desc( - `Test that when the same shader module is shared by different pipelines, the correct constant values are used as output to the storage buffer. The constant value should not affect other pipeline sharing the same shader module.` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(async t => { - const module = t.device.createShaderModule({ - code: ` +g.test('shared_shader_module'). +desc( + `Test that when the same shader module is shared by different pipelines, the correct constant values are used as output to the storage buffer. The constant value should not affect other pipeline sharing the same shader module.` +). +params((u) => u.combine('isAsync', [true, false])). +fn(async (t) => { + const module = t.device.createShaderModule({ + code: ` override a: u32; struct Buf { @@ -234,101 +238,99 @@ g.test('shared_shader_module') @compute @workgroup_size(1) fn main() { buf.data[0] = a; - }`, - }); - - const expects = [new Uint32Array([1]), new Uint32Array([2])]; - const buffers = [ - t.device.createBuffer({ - size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }), - t.device.createBuffer({ - size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }), - ]; - - const descriptors = [ - { - layout: 'auto', - compute: { - module, - entryPoint: 'main', - constants: { - a: 1, - }, - }, - }, - { - layout: 'auto', - compute: { - module, - entryPoint: 'main', - constants: { - a: 2, - }, - }, - }, - ]; - - const promises = t.params.isAsync - ? Promise.all([ - t.device.createComputePipelineAsync(descriptors[0]), - t.device.createComputePipelineAsync(descriptors[1]), - ]) - : Promise.resolve([ - t.device.createComputePipeline(descriptors[0]), - t.device.createComputePipeline(descriptors[1]), - ]); - - const pipelines = await promises; - const bindGroups = [ - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: { buffer: buffers[0], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT }, - }, - ], - - layout: pipelines[0].getBindGroupLayout(0), - }), - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: { buffer: buffers[1], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT }, - }, - ], - - layout: pipelines[1].getBindGroupLayout(0), - }), - ]; - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipelines[0]); - pass.setBindGroup(0, bindGroups[0]); - pass.dispatchWorkgroups(1); - pass.setPipeline(pipelines[1]); - pass.setBindGroup(0, bindGroups[1]); - pass.dispatchWorkgroups(1); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectGPUBufferValuesEqual(buffers[0], expects[0]); - t.expectGPUBufferValuesEqual(buffers[1], expects[1]); + }` }); -g.test('multi_entry_points') - .desc( - `Test that constants used for different entry points are used correctly as output to the storage buffer. They should have no impact for pipeline using entry points that doesn't reference them.` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(async t => { - const module = t.device.createShaderModule({ - code: ` + const expects = [new Uint32Array([1]), new Uint32Array([2])]; + const buffers = [ + t.device.createBuffer({ + size: Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }), + t.device.createBuffer({ + size: Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + })]; + + + const descriptors = [ + { + layout: 'auto', + compute: { + module, + entryPoint: 'main', + constants: { + a: 1 + } + } + }, + { + layout: 'auto', + compute: { + module, + entryPoint: 'main', + constants: { + a: 2 + } + } + }]; + + + const promises = t.params.isAsync ? + Promise.all([ + t.device.createComputePipelineAsync(descriptors[0]), + t.device.createComputePipelineAsync(descriptors[1])] + ) : + Promise.resolve([ + t.device.createComputePipeline(descriptors[0]), + t.device.createComputePipeline(descriptors[1])] + ); + + const pipelines = await promises; + const bindGroups = [ + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { buffer: buffers[0], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT } + }], + + layout: pipelines[0].getBindGroupLayout(0) + }), + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { buffer: buffers[1], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT } + }], + + layout: pipelines[1].getBindGroupLayout(0) + })]; + + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipelines[0]); + pass.setBindGroup(0, bindGroups[0]); + pass.dispatchWorkgroups(1); + pass.setPipeline(pipelines[1]); + pass.setBindGroup(0, bindGroups[1]); + pass.dispatchWorkgroups(1); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + t.expectGPUBufferValuesEqual(buffers[0], expects[0]); + t.expectGPUBufferValuesEqual(buffers[1], expects[1]); +}); + +g.test('multi_entry_points'). +desc( + `Test that constants used for different entry points are used correctly as output to the storage buffer. They should have no impact for pipeline using entry points that doesn't reference them.` +). +params((u) => u.combine('isAsync', [true, false])). +fn(async (t) => { + const module = t.device.createShaderModule({ + code: ` override c1: u32; override c2: u32; override c3: u32; @@ -349,157 +351,153 @@ g.test('multi_entry_points') @compute @workgroup_size(c3) fn main3() { buf.data[0] = 3u; - }`, - }); - - const expects = [ - new Uint32Array([1]), - new Uint32Array([2]), - new Uint32Array([3]), - new Uint32Array([4]), - ]; - - const buffers = [ - t.device.createBuffer({ - size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }), - t.device.createBuffer({ - size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }), - t.device.createBuffer({ - size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }), - t.device.createBuffer({ - size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }), - ]; - - const descriptors = [ - { - layout: 'auto', - compute: { - module, - entryPoint: 'main1', - constants: { - c1: 1, - }, - }, - }, - { - layout: 'auto', - compute: { - module, - entryPoint: 'main2', - constants: { - c2: 2, - }, - }, - }, - { - layout: 'auto', - compute: { - module, - entryPoint: 'main3', - constants: { - // c3 is used as workgroup size - c3: 1, - }, - }, - }, - { - layout: 'auto', - compute: { - module, - entryPoint: 'main1', - constants: { - // assign a different value to c1 - c1: 4, - }, - }, - }, - ]; - - const promises = t.params.isAsync - ? Promise.all([ - t.device.createComputePipelineAsync(descriptors[0]), - t.device.createComputePipelineAsync(descriptors[1]), - t.device.createComputePipelineAsync(descriptors[2]), - t.device.createComputePipelineAsync(descriptors[3]), - ]) - : Promise.resolve([ - t.device.createComputePipeline(descriptors[0]), - t.device.createComputePipeline(descriptors[1]), - t.device.createComputePipeline(descriptors[2]), - t.device.createComputePipeline(descriptors[3]), - ]); - - const pipelines = await promises; - const bindGroups = [ - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: { buffer: buffers[0], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT }, - }, - ], - - layout: pipelines[0].getBindGroupLayout(0), - }), - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: { buffer: buffers[1], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT }, - }, - ], - - layout: pipelines[1].getBindGroupLayout(0), - }), - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: { buffer: buffers[2], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT }, - }, - ], - - layout: pipelines[2].getBindGroupLayout(0), - }), - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: { buffer: buffers[3], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT }, - }, - ], - - layout: pipelines[3].getBindGroupLayout(0), - }), - ]; - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipelines[0]); - pass.setBindGroup(0, bindGroups[0]); - pass.dispatchWorkgroups(1); - pass.setPipeline(pipelines[1]); - pass.setBindGroup(0, bindGroups[1]); - pass.dispatchWorkgroups(1); - pass.setPipeline(pipelines[2]); - pass.setBindGroup(0, bindGroups[2]); - pass.dispatchWorkgroups(1); - pass.setPipeline(pipelines[3]); - pass.setBindGroup(0, bindGroups[3]); - pass.dispatchWorkgroups(1); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectGPUBufferValuesEqual(buffers[0], expects[0]); - t.expectGPUBufferValuesEqual(buffers[1], expects[1]); - t.expectGPUBufferValuesEqual(buffers[2], expects[2]); - t.expectGPUBufferValuesEqual(buffers[3], expects[3]); + }` }); + + const expects = [ + new Uint32Array([1]), + new Uint32Array([2]), + new Uint32Array([3]), + new Uint32Array([4])]; + + + const buffers = [ + t.device.createBuffer({ + size: Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }), + t.device.createBuffer({ + size: Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }), + t.device.createBuffer({ + size: Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }), + t.device.createBuffer({ + size: Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + })]; + + + const descriptors = [ + { + layout: 'auto', + compute: { + module, + entryPoint: 'main1', + constants: { + c1: 1 + } + } + }, + { + layout: 'auto', + compute: { + module, + entryPoint: 'main2', + constants: { + c2: 2 + } + } + }, + { + layout: 'auto', + compute: { + module, + entryPoint: 'main3', + constants: { + // c3 is used as workgroup size + c3: 1 + } + } + }, + { + layout: 'auto', + compute: { + module, + entryPoint: 'main1', + constants: { + // assign a different value to c1 + c1: 4 + } + } + }]; + + + const promises = t.params.isAsync ? + Promise.all([ + t.device.createComputePipelineAsync(descriptors[0]), + t.device.createComputePipelineAsync(descriptors[1]), + t.device.createComputePipelineAsync(descriptors[2]), + t.device.createComputePipelineAsync(descriptors[3])] + ) : + Promise.resolve([ + t.device.createComputePipeline(descriptors[0]), + t.device.createComputePipeline(descriptors[1]), + t.device.createComputePipeline(descriptors[2]), + t.device.createComputePipeline(descriptors[3])] + ); + + const pipelines = await promises; + const bindGroups = [ + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { buffer: buffers[0], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT } + }], + + layout: pipelines[0].getBindGroupLayout(0) + }), + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { buffer: buffers[1], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT } + }], + + layout: pipelines[1].getBindGroupLayout(0) + }), + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { buffer: buffers[2], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT } + }], + + layout: pipelines[2].getBindGroupLayout(0) + }), + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { buffer: buffers[3], offset: 0, size: Uint32Array.BYTES_PER_ELEMENT } + }], + + layout: pipelines[3].getBindGroupLayout(0) + })]; + + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipelines[0]); + pass.setBindGroup(0, bindGroups[0]); + pass.dispatchWorkgroups(1); + pass.setPipeline(pipelines[1]); + pass.setBindGroup(0, bindGroups[1]); + pass.dispatchWorkgroups(1); + pass.setPipeline(pipelines[2]); + pass.setBindGroup(0, bindGroups[2]); + pass.dispatchWorkgroups(1); + pass.setPipeline(pipelines[3]); + pass.setBindGroup(0, bindGroups[3]); + pass.dispatchWorkgroups(1); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + t.expectGPUBufferValuesEqual(buffers[0], expects[0]); + t.expectGPUBufferValuesEqual(buffers[1], expects[1]); + t.expectGPUBufferValuesEqual(buffers[2], expects[2]); + t.expectGPUBufferValuesEqual(buffers[3], expects[3]); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/device/lost.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/device/lost.spec.js index 2b5d7a2d175..e86b009d235 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/device/lost.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/device/lost.spec.js @@ -1,17 +1,16 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for GPUDevice.lost. -`; -import { Fixture } from '../../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { attemptGarbageCollection } from '../../../../common/util/collect_garbage.js'; import { getGPU } from '../../../../common/util/navigator_gpu.js'; import { assert, assertNotSettledWithinTime, - raceWithRejectOnTimeout, -} from '../../../../common/util/util.js'; + raceWithRejectOnTimeout } from +'../../../../common/util/util.js'; class DeviceLostTests extends Fixture { // Default timeout for waiting for device lost is 2 seconds. @@ -22,7 +21,7 @@ class DeviceLostTests extends Fixture { } expectDeviceDestroyed(device) { - this.eventualAsyncExpectation(async niceStack => { + this.eventualAsyncExpectation(async (niceStack) => { try { const lost = await this.getDeviceLostWithTimeout(device.lost); this.expect(lost.reason === 'destroyed', 'device was lost from destroy'); @@ -36,58 +35,58 @@ class DeviceLostTests extends Fixture { export const g = makeTestGroup(DeviceLostTests); -g.test('not_lost_on_gc') - .desc( - `'lost' is never resolved by GPUDevice being garbage collected (with attemptGarbageCollection).` - ) - .fn(async t => { - // Wraps a lost promise object creation in a function scope so that the device has the best - // chance of being gone and ready for GC before trying to resolve the lost promise. - const { lost } = await (async () => { - const adapter = await getGPU(t.rec).requestAdapter(); - assert(adapter !== null); - const lost = (await adapter.requestDevice()).lost; - return { lost }; - })(); - await assertNotSettledWithinTime(lost, t.kDeviceLostTimeoutMS, 'device was unexpectedly lost'); - - await attemptGarbageCollection(); - }); - -g.test('lost_on_destroy') - .desc(`'lost' is resolved, with reason='destroyed', on GPUDevice.destroy().`) - .fn(async t => { +g.test('not_lost_on_gc'). +desc( + `'lost' is never resolved by GPUDevice being garbage collected (with attemptGarbageCollection).` +). +fn(async (t) => { + // Wraps a lost promise object creation in a function scope so that the device has the best + // chance of being gone and ready for GC before trying to resolve the lost promise. + const { lost } = await (async () => { const adapter = await getGPU(t.rec).requestAdapter(); assert(adapter !== null); - const device = await adapter.requestDevice(); - t.expectDeviceDestroyed(device); - device.destroy(); - }); + const lost = (await adapter.requestDevice()).lost; + return { lost }; + })(); + await assertNotSettledWithinTime(lost, t.kDeviceLostTimeoutMS, 'device was unexpectedly lost'); -g.test('same_object') - .desc(`'lost' provides the same Promise and GPUDeviceLostInfo objects each time it's accessed.`) - .fn(async t => { - const adapter = await getGPU(t.rec).requestAdapter(); - assert(adapter !== null); - const device = await adapter.requestDevice(); + await attemptGarbageCollection(); +}); - // The promises should be the same promise object. - const lostPromise1 = device.lost; - const lostPromise2 = device.lost; - t.expect(lostPromise1 === lostPromise2); +g.test('lost_on_destroy'). +desc(`'lost' is resolved, with reason='destroyed', on GPUDevice.destroy().`). +fn(async (t) => { + const adapter = await getGPU(t.rec).requestAdapter(); + assert(adapter !== null); + const device = await adapter.requestDevice(); + t.expectDeviceDestroyed(device); + device.destroy(); +}); - // Promise object should still be the same after destroy. - device.destroy(); - const lostPromise3 = device.lost; - t.expect(lostPromise1 === lostPromise3); +g.test('same_object'). +desc(`'lost' provides the same Promise and GPUDeviceLostInfo objects each time it's accessed.`). +fn(async (t) => { + const adapter = await getGPU(t.rec).requestAdapter(); + assert(adapter !== null); + const device = await adapter.requestDevice(); - // The results should also be the same result object. - const lost1 = await t.getDeviceLostWithTimeout(lostPromise1); - const lost2 = await t.getDeviceLostWithTimeout(lostPromise2); - const lost3 = await t.getDeviceLostWithTimeout(lostPromise3); - // Promise object should still be the same after we've been notified about device loss. - const lostPromise4 = device.lost; - t.expect(lostPromise1 === lostPromise4); - const lost4 = await t.getDeviceLostWithTimeout(lostPromise4); - t.expect(lost1 === lost2 && lost2 === lost3 && lost3 === lost4); - }); + // The promises should be the same promise object. + const lostPromise1 = device.lost; + const lostPromise2 = device.lost; + t.expect(lostPromise1 === lostPromise2); + + // Promise object should still be the same after destroy. + device.destroy(); + const lostPromise3 = device.lost; + t.expect(lostPromise1 === lostPromise3); + + // The results should also be the same result object. + const lost1 = await t.getDeviceLostWithTimeout(lostPromise1); + const lost2 = await t.getDeviceLostWithTimeout(lostPromise2); + const lost3 = await t.getDeviceLostWithTimeout(lostPromise3); + // Promise object should still be the same after we've been notified about device loss. + const lostPromise4 = device.lost; + t.expect(lostPromise1 === lostPromise4); + const lost4 = await t.getDeviceLostWithTimeout(lostPromise4); + t.expect(lost1 === lost2 && lost2 === lost3 && lost3 === lost4); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/labels.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/labels.spec.js index ddd2ab0e155..7da653f5ac2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/labels.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/labels.spec.js @@ -1,15 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for object labels. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { keysOf } from '../../../common/util/data_tables.js'; import { getGPU } from '../../../common/util/navigator_gpu.js'; import { GPUTest } from '../../gpu_test.js'; export const g = makeTestGroup(GPUTest); + const kTestFunctions = { createBuffer: (t, label) => { const buffer = t.device.createBuffer({ size: 16, usage: GPUBufferUsage.COPY_DST, label }); @@ -34,7 +34,7 @@ const kTestFunctions = { label, size: [1, 1, 1], format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); t.expect(texture.label === label); texture.destroy(); @@ -69,7 +69,7 @@ const kTestFunctions = { @vertex fn vs() -> @builtin(position) vec4f { return vec4f(0, 0, 0, 1); } - `, + ` }); t.expect(shaderModule.label === label); }, @@ -78,15 +78,15 @@ const kTestFunctions = { const module = t.device.createShaderModule({ code: ` @compute @workgroup_size(1u) fn foo() {} - `, + ` }); const computePipeline = t.device.createComputePipeline({ label, layout: 'auto', compute: { module, - entryPoint: 'foo', - }, + entryPoint: 'foo' + } }); t.expect(computePipeline.label === label); }, @@ -97,15 +97,15 @@ const kTestFunctions = { @vertex fn foo() -> @builtin(position) vec4f { return vec4f(0, 0, 0, 1); } - `, + ` }); const renderPipeline = t.device.createRenderPipeline({ label, layout: 'auto', vertex: { module, - entryPoint: 'foo', - }, + entryPoint: 'foo' + } }); t.expect(renderPipeline.label === label); }, @@ -114,15 +114,15 @@ const kTestFunctions = { const module = t.device.createShaderModule({ code: ` @compute @workgroup_size(1u) fn foo() {} - `, + ` }); const computePipeline = await t.device.createComputePipelineAsync({ label, layout: 'auto', compute: { module, - entryPoint: 'foo', - }, + entryPoint: 'foo' + } }); t.expect(computePipeline.label === label); }, @@ -134,15 +134,15 @@ const kTestFunctions = { @vertex fn foo() -> @builtin(position) vec4f { return vec4f(0, 0, 0, 1); } - `, + ` }); const renderPipeline = await t.device.createRenderPipelineAsync({ label, layout: 'auto', vertex: { module, - entryPoint: 'foo', - }, + entryPoint: 'foo' + } }); t.expect(renderPipeline.label === label); }, @@ -155,7 +155,7 @@ const kTestFunctions = { createRenderBundleEncoder: (t, label) => { const encoder = t.device.createRenderBundleEncoder({ label, - colorFormats: ['rgba8unorm'], + colorFormats: ['rgba8unorm'] }); t.expect(encoder.label === label); }, @@ -164,7 +164,7 @@ const kTestFunctions = { const querySet = t.device.createQuerySet({ label, type: 'occlusion', - count: 1, + count: 1 }); t.expect(querySet.label === label); querySet.destroy(); @@ -176,14 +176,14 @@ const kTestFunctions = { label, size: [1, 1, 1], format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); const label2 = `${label}-2`; const encoder = t.device.createCommandEncoder(); encoder.label = label2; const renderPass = encoder.beginRenderPass({ label, - colorAttachments: [{ view: texture.createView(), loadOp: 'clear', storeOp: 'store' }], + colorAttachments: [{ view: texture.createView(), loadOp: 'clear', storeOp: 'store' }] }); t.expect(renderPass.label === label); renderPass.end(); @@ -217,64 +217,64 @@ const kTestFunctions = { const texture = t.device.createTexture({ size: [1, 1, 1], format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); const view = texture.createView({ label }); t.expect(view.label === label); texture.destroy(); t.expect(view.label === label); - }, + } }; -g.test('object_has_descriptor_label') - .desc( - ` +g.test('object_has_descriptor_label'). +desc( + ` For every create function, the descriptor.label is carried over to the object.label. TODO: test importExternalTexture TODO: make a best effort and generating an error that is likely to use label. There's nothing to check for but it may surface bugs related to unusual labels. ` - ) - .params(u => - u - .combine('name', keysOf(kTestFunctions)) - .beginSubcases() - .combine('label', ['label', '\0', 'null\0in\0label', '🌞👆']) - ) - .fn(async t => { - const { name, label } = t.params; - const result = kTestFunctions[name](t, label); - if (result instanceof Promise) { - await result; - } - }); +). +params((u) => +u. +combine('name', keysOf(kTestFunctions)). +beginSubcases(). +combine('label', ['label', '\0', 'null\0in\0label', '🌞👆']) +). +fn(async (t) => { + const { name, label } = t.params; + const result = kTestFunctions[name](t, label); + if (result instanceof Promise) { + await result; + } +}); -g.test('wrappers_do_not_share_labels') - .desc('test that different wrapper objects for the same GPU object do not share labels') - .fn(t => { - const module = t.device.createShaderModule({ - code: ` +g.test('wrappers_do_not_share_labels'). +desc('test that different wrapper objects for the same GPU object do not share labels'). +fn((t) => { + const module = t.device.createShaderModule({ + code: ` @group(0) @binding(0) var pos: vec4f; @vertex fn main() -> @builtin(position) vec4f { return pos; } - `, - }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module, - entryPoint: 'main', - }, - }); - const layout1 = pipeline.getBindGroupLayout(0); - const layout2 = pipeline.getBindGroupLayout(0); - t.expect(layout1 !== layout2); - - layout1.label = 'foo'; - layout2.label = 'bar'; - - t.expect(layout1.label === 'foo'); - t.expect(layout2.label === 'bar'); + ` }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module, + entryPoint: 'main' + } + }); + const layout1 = pipeline.getBindGroupLayout(0); + const layout2 = pipeline.getBindGroupLayout(0); + t.expect(layout1 !== layout2); + + layout1.label = 'foo'; + layout2.label = 'bar'; + + t.expect(layout1.label === 'foo'); + t.expect(layout2.label === 'bar'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js index e6196c7f609..7687ba27cd9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js @@ -1,76 +1,89 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../../../../common/util/util.js'; -import { GPUTest } from '../../../../gpu_test.js'; -import { checkElementsEqualEither } from '../../../../util/check_contents.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../../../../common/util/util.js';import { GPUTest } from '../../../../gpu_test.js';import { checkElementsEqualEither } from '../../../../util/check_contents.js'; + export const kAllWriteOps = ['storage', 'b2b-copy', 't2b-copy', 'write-buffer']; export const kAllReadOps = [ - 'input-vertex', - 'input-index', - 'input-indirect', - 'input-indirect-index', - 'input-indirect-dispatch', +'input-vertex', +'input-index', +'input-indirect', +'input-indirect-index', +'input-indirect-dispatch', - 'constant-uniform', +'constant-uniform', - 'storage-read', +'storage-read', - 'b2b-copy', - 'b2t-copy', -]; +'b2b-copy', +'b2t-copy']; -const kOpInfo = { + + + + + + + + + + +const kOpInfo = + +{ 'write-buffer': { - contexts: ['queue'], + contexts: ['queue'] }, 'b2t-copy': { - contexts: ['command-encoder'], + contexts: ['command-encoder'] }, 'b2b-copy': { - contexts: ['command-encoder'], + contexts: ['command-encoder'] }, 't2b-copy': { - contexts: ['command-encoder'], + contexts: ['command-encoder'] }, storage: { - contexts: ['compute-pass-encoder', 'render-pass-encoder', 'render-bundle-encoder'], + contexts: ['compute-pass-encoder', 'render-pass-encoder', 'render-bundle-encoder'] }, 'storage-read': { - contexts: ['compute-pass-encoder', 'render-pass-encoder', 'render-bundle-encoder'], + contexts: ['compute-pass-encoder', 'render-pass-encoder', 'render-bundle-encoder'] }, 'input-vertex': { - contexts: ['render-pass-encoder', 'render-bundle-encoder'], + contexts: ['render-pass-encoder', 'render-bundle-encoder'] }, 'input-index': { - contexts: ['render-pass-encoder', 'render-bundle-encoder'], + contexts: ['render-pass-encoder', 'render-bundle-encoder'] }, 'input-indirect': { - contexts: ['render-pass-encoder', 'render-bundle-encoder'], + contexts: ['render-pass-encoder', 'render-bundle-encoder'] }, 'input-indirect-index': { - contexts: ['render-pass-encoder', 'render-bundle-encoder'], + contexts: ['render-pass-encoder', 'render-bundle-encoder'] }, 'input-indirect-dispatch': { - contexts: ['compute-pass-encoder'], + contexts: ['compute-pass-encoder'] }, 'constant-uniform': { - contexts: ['render-pass-encoder', 'render-bundle-encoder'], - }, + contexts: ['render-pass-encoder', 'render-bundle-encoder'] + } }; -export function checkOpsValidForContext(ops, context) { +export function checkOpsValidForContext( +ops, +context) +{ const valid = - kOpInfo[ops[0]].contexts.includes(context[0]) && kOpInfo[ops[1]].contexts.includes(context[1]); + kOpInfo[ops[0]].contexts.includes(context[0]) && kOpInfo[ops[1]].contexts.includes(context[1]); if (!valid) return false; if ( - context[0] === 'render-bundle-encoder' || - context[0] === 'render-pass-encoder' || - context[1] === 'render-bundle-encoder' || - context[1] === 'render-pass-encoder' - ) { + context[0] === 'render-bundle-encoder' || + context[0] === 'render-pass-encoder' || + context[1] === 'render-bundle-encoder' || + context[1] === 'render-pass-encoder') + { // In a render pass, it is invalid to use a resource as both writable and another usage. // Also, for storage+storage usage, the application is opting into racy behavior. // The storage+storage case is also skipped as the results cannot be reliably tested. @@ -94,7 +107,6 @@ export function checkOpsValidForContext(ops, context) { // These don't occur in a render pass. return true; } - break; case 'input-vertex': case 'input-index': @@ -108,7 +120,6 @@ export function checkOpsValidForContext(ops, context) { // These are not write usages, or don't occur in a render pass. break; } - return true; }; return checkImpl(ops[0], ops[1]) && checkImpl(ops[1], ops[0]); @@ -127,6 +138,8 @@ const kDummyVertexShader = ` export class BufferSyncTest extends GPUTest { // Vertex and index buffers used in read render pass + + // Temp buffer and texture with values for buffer/texture copy write op // There can be at most 2 write op tmpValueBuffers = [undefined, undefined]; @@ -135,7 +148,11 @@ export class BufferSyncTest extends GPUTest { // These intermediate buffers/textures are created before any read/write op // to avoid extra memory synchronization between ops introduced by await on buffer/texture creations. // Create extra buffers/textures needed by write operation - async createIntermediateBuffersAndTexturesForWriteOp(writeOp, slot, value) { + async createIntermediateBuffersAndTexturesForWriteOp( + writeOp, + slot, + value) + { switch (writeOp) { case 'b2b-copy': this.tmpValueBuffers[slot] = await this.createBufferWithValue(value); @@ -208,13 +225,13 @@ export class BufferSyncTest extends GPUTest { this.device.createBuffer({ size: Uint32Array.BYTES_PER_ELEMENT, usage: - GPUBufferUsage.COPY_SRC | - GPUBufferUsage.COPY_DST | - GPUBufferUsage.STORAGE | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX | - GPUBufferUsage.INDIRECT | - GPUBufferUsage.UNIFORM, + GPUBufferUsage.COPY_SRC | + GPUBufferUsage.COPY_DST | + GPUBufferUsage.STORAGE | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX | + GPUBufferUsage.INDIRECT | + GPUBufferUsage.UNIFORM }) ); @@ -228,16 +245,15 @@ export class BufferSyncTest extends GPUTest { mappedAtCreation: true, size: Uint32Array.BYTES_PER_ELEMENT, usage: - GPUBufferUsage.COPY_SRC | - GPUBufferUsage.COPY_DST | - GPUBufferUsage.STORAGE | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX | - GPUBufferUsage.INDIRECT | - GPUBufferUsage.UNIFORM, + GPUBufferUsage.COPY_SRC | + GPUBufferUsage.COPY_DST | + GPUBufferUsage.STORAGE | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX | + GPUBufferUsage.INDIRECT | + GPUBufferUsage.UNIFORM }) ); - new Uint32Array(buffer.getMappedRange()).fill(initValue); buffer.unmap(); await this.queue.onSubmittedWorkDone(); @@ -251,16 +267,15 @@ export class BufferSyncTest extends GPUTest { mappedAtCreation: true, size: Uint32Array.BYTES_PER_ELEMENT * initValues.length, usage: - GPUBufferUsage.COPY_SRC | - GPUBufferUsage.COPY_DST | - GPUBufferUsage.STORAGE | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX | - GPUBufferUsage.INDIRECT | - GPUBufferUsage.UNIFORM, + GPUBufferUsage.COPY_SRC | + GPUBufferUsage.COPY_DST | + GPUBufferUsage.STORAGE | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX | + GPUBufferUsage.INDIRECT | + GPUBufferUsage.UNIFORM }) ); - const bufferView = new Uint32Array(buffer.getMappedRange()); bufferView.set(initValues); buffer.unmap(); @@ -270,30 +285,32 @@ export class BufferSyncTest extends GPUTest { // Create a 1x1 texture, and initialize it to a specified value for all elements. async createTextureWithValue(initValue) { + // This is not hot in profiles; optimize if this gets used more heavily. const data = new Uint32Array(1).fill(initValue); const texture = this.trackForCleanup( this.device.createTexture({ size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format: 'r32uint', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }) ); - this.device.queue.writeTexture( { texture, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, data, { offset: 0, bytesPerRow: 256, rowsPerImage: 1 }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - await this.queue.onSubmittedWorkDone(); return texture; } - createBindGroup(pipeline, buffer) { + createBindGroup( + pipeline, + buffer) + { return this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer } }], + entries: [{ binding: 0, resource: { buffer } }] }); } @@ -314,10 +331,10 @@ export class BufferSyncTest extends GPUTest { layout: 'auto', compute: { module: this.device.createShaderModule({ - code: wgslCompute, + code: wgslCompute }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); } @@ -326,18 +343,18 @@ export class BufferSyncTest extends GPUTest { layout: 'auto', vertex: { module: this.device.createShaderModule({ - code: wgslShaders.vertex, + code: wgslShaders.vertex }), - entryPoint: 'vert_main', + entryPoint: 'vert_main' }, fragment: { module: this.device.createShaderModule({ - code: wgslShaders.fragment, + code: wgslShaders.fragment }), entryPoint: 'frag_main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'point-list' }, + primitive: { topology: 'point-list' } }); } @@ -355,7 +372,7 @@ export class BufferSyncTest extends GPUTest { data.a = ${value}u; return vec4(); // result does't matter } - `, + ` }; return this.createTrivialRenderPipeline(wgslShaders); @@ -366,23 +383,27 @@ export class BufferSyncTest extends GPUTest { this.device.createTexture({ size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }) ).createView(); return encoder.beginRenderPass({ colorAttachments: [ - { - view, - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view, + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); } // Write buffer via draw call in render pass. Use bundle if needed. - encodeWriteAsStorageBufferInRenderPass(renderer, buffer, value) { + encodeWriteAsStorageBufferInRenderPass( + renderer, + buffer, + value) + { const pipeline = this.createStorageWriteRenderPipeline(value); const bindGroup = this.createBindGroup(pipeline, buffer); @@ -392,7 +413,11 @@ export class BufferSyncTest extends GPUTest { } // Write buffer via dispatch call in compute pass. - encodeWriteAsStorageBufferInComputePass(pass, buffer, value) { + encodeWriteAsStorageBufferInComputePass( + pass, + buffer, + value) + { const pipeline = this.createStorageWriteComputePipeline(value); const bindGroup = this.createBindGroup(pipeline, buffer); pass.setPipeline(pipeline); @@ -422,12 +447,20 @@ export class BufferSyncTest extends GPUTest { // Write buffer via writeBuffer API on queue writeByWriteBuffer(buffer, value) { + // This is not hot in profiles; optimize if this gets used more heavily. const data = new Uint32Array(1).fill(value); this.device.queue.writeBuffer(buffer, 0, data); } // Issue write operation via render pass, compute pass, copy, etc. - encodeWriteOp(helper, operation, context, buffer, writeOpSlot, value) { + encodeWriteOp( + helper, + operation, + context, + buffer, + writeOpSlot, + value) + { helper.ensureContext(context); switch (operation) { @@ -451,7 +484,6 @@ export class BufferSyncTest extends GPUTest { default: unreachable(); } - break; case 'b2b-copy': assert(helper.commandEncoder !== undefined); @@ -485,20 +517,24 @@ export class BufferSyncTest extends GPUTest { layout: 'auto', compute: { module: this.device.createShaderModule({ - code: wgslCompute, + code: wgslCompute }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); } - createBindGroupSrcDstBuffer(pipeline, srcBuffer, dstBuffer) { + createBindGroupSrcDstBuffer( + pipeline, + srcBuffer, + dstBuffer) + { return this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: { buffer: srcBuffer } }, - { binding: 1, resource: { buffer: dstBuffer } }, - ], + { binding: 0, resource: { buffer: srcBuffer } }, + { binding: 1, resource: { buffer: dstBuffer } }] + }); } @@ -529,37 +565,37 @@ export class BufferSyncTest extends GPUTest { data.a = input; return vec4(); // result does't matter } - `, + ` }; return this.device.createRenderPipeline({ layout: 'auto', vertex: { module: this.device.createShaderModule({ - code: wgslShaders.vertex, + code: wgslShaders.vertex }), entryPoint: 'vert_main', buffers: [ + { + arrayStride: Uint32Array.BYTES_PER_ELEMENT, + attributes: [ { - arrayStride: Uint32Array.BYTES_PER_ELEMENT, - attributes: [ - { - shaderLocation: 0, - offset: 0, - format: 'uint32', - }, - ], - }, - ], + shaderLocation: 0, + offset: 0, + format: 'uint32' + }] + + }] + }, fragment: { module: this.device.createShaderModule({ - code: wgslShaders.fragment, + code: wgslShaders.fragment }), entryPoint: 'frag_main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'point-list' }, + primitive: { topology: 'point-list' } }); } @@ -579,7 +615,7 @@ export class BufferSyncTest extends GPUTest { data.a = constant.a; return vec4(); // result does't matter } - `, + ` }; return this.createTrivialRenderPipeline(wgslShaders); @@ -601,30 +637,34 @@ export class BufferSyncTest extends GPUTest { dstData.a = srcData.a; return vec4(); // result does't matter } - `, + ` }; return this.device.createRenderPipeline({ layout: 'auto', vertex: { module: this.device.createShaderModule({ - code: wgslShaders.vertex, + code: wgslShaders.vertex }), - entryPoint: 'vert_main', + entryPoint: 'vert_main' }, fragment: { module: this.device.createShaderModule({ - code: wgslShaders.fragment, + code: wgslShaders.fragment }), entryPoint: 'frag_main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'point-list' }, + primitive: { topology: 'point-list' } }); } // Write buffer via dispatch call in compute pass. - encodeReadAsStorageBufferInComputePass(pass, srcBuffer, dstBuffer) { + encodeReadAsStorageBufferInComputePass( + pass, + srcBuffer, + dstBuffer) + { const pipeline = this.createStorageReadComputePipeline(); const bindGroup = this.createBindGroupSrcDstBuffer(pipeline, srcBuffer, dstBuffer); pass.setPipeline(pipeline); @@ -633,7 +673,12 @@ export class BufferSyncTest extends GPUTest { } // Write buffer via dispatchWorkgroupsIndirect call in compute pass. - encodeReadAsIndirectBufferInComputePass(pass, srcBuffer, dstBuffer, value) { + encodeReadAsIndirectBufferInComputePass( + pass, + srcBuffer, + dstBuffer, + value) + { const pipeline = this.createStorageWriteComputePipeline(value); const bindGroup = this.createBindGroup(pipeline, dstBuffer); pass.setPipeline(pipeline); @@ -642,11 +687,15 @@ export class BufferSyncTest extends GPUTest { } // Read as vertex input and write buffer via draw call in render pass. Use bundle if needed. - encodeReadAsVertexBufferInRenderPass(renderer, srcBuffer, dstBuffer) { + encodeReadAsVertexBufferInRenderPass( + renderer, + srcBuffer, + dstBuffer) + { const pipeline = this.createVertexReadRenderPipeline(); const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: dstBuffer } }], + entries: [{ binding: 0, resource: { buffer: dstBuffer } }] }); renderer.setBindGroup(0, bindGroup); @@ -656,11 +705,16 @@ export class BufferSyncTest extends GPUTest { } // Read as index input and write buffer via draw call in render pass. Use bundle if needed. - encodeReadAsIndexBufferInRenderPass(renderer, srcBuffer, dstBuffer, vertexBuffer) { + encodeReadAsIndexBufferInRenderPass( + renderer, + srcBuffer, + dstBuffer, + vertexBuffer) + { const pipeline = this.createVertexReadRenderPipeline(); const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: dstBuffer } }], + entries: [{ binding: 0, resource: { buffer: dstBuffer } }] }); renderer.setBindGroup(0, bindGroup); @@ -671,11 +725,16 @@ export class BufferSyncTest extends GPUTest { } // Read as indirect input and write buffer via draw call in render pass. Use bundle if needed. - encodeReadAsIndirectBufferInRenderPass(renderer, srcBuffer, dstBuffer, vertexBuffer) { + encodeReadAsIndirectBufferInRenderPass( + renderer, + srcBuffer, + dstBuffer, + vertexBuffer) + { const pipeline = this.createVertexReadRenderPipeline(); const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: dstBuffer } }], + entries: [{ binding: 0, resource: { buffer: dstBuffer } }] }); renderer.setBindGroup(0, bindGroup); @@ -686,16 +745,16 @@ export class BufferSyncTest extends GPUTest { // Read as indexed indirect input and write buffer via draw call in render pass. Use bundle if needed. encodeReadAsIndexedIndirectBufferInRenderPass( - renderer, - srcBuffer, - dstBuffer, - vertexBuffer, - indexBuffer - ) { + renderer, + srcBuffer, + dstBuffer, + vertexBuffer, + indexBuffer) + { const pipeline = this.createVertexReadRenderPipeline(); const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: dstBuffer } }], + entries: [{ binding: 0, resource: { buffer: dstBuffer } }] }); renderer.setBindGroup(0, bindGroup); @@ -706,14 +765,18 @@ export class BufferSyncTest extends GPUTest { } // Read as uniform buffer and write buffer via draw call in render pass. Use bundle if needed. - encodeReadAsUniformBufferInRenderPass(renderer, srcBuffer, dstBuffer) { + encodeReadAsUniformBufferInRenderPass( + renderer, + srcBuffer, + dstBuffer) + { const pipeline = this.createUniformReadRenderPipeline(); const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: { buffer: srcBuffer } }, - { binding: 1, resource: { buffer: dstBuffer } }, - ], + { binding: 0, resource: { buffer: srcBuffer } }, + { binding: 1, resource: { buffer: dstBuffer } }] + }); renderer.setBindGroup(0, bindGroup); @@ -722,7 +785,11 @@ export class BufferSyncTest extends GPUTest { } // Read as storage buffer and write buffer via draw call in render pass. Use bundle if needed. - encodeReadAsStorageBufferInRenderPass(renderer, srcBuffer, dstBuffer) { + encodeReadAsStorageBufferInRenderPass( + renderer, + srcBuffer, + dstBuffer) + { const pipeline = this.createStorageReadRenderPipeline(); const bindGroup = this.createBindGroupSrcDstBuffer(pipeline, srcBuffer, dstBuffer); @@ -743,7 +810,7 @@ export class BufferSyncTest extends GPUTest { this.device.createTexture({ size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format: 'r32uint', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }) ); @@ -753,7 +820,6 @@ export class BufferSyncTest extends GPUTest { { texture: tmpTexture, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - // The t2b copy is just encoded into command encoder, it doesn't write immediately. encoder.copyTextureToBuffer( { texture: tmpTexture, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, @@ -762,11 +828,17 @@ export class BufferSyncTest extends GPUTest { ); } - encodeReadOp(helper, operation, context, srcBuffer, dstBuffer) { + encodeReadOp( + helper, + operation, + context, + srcBuffer, + dstBuffer) + { helper.ensureContext(context); const renderer = - context === 'render-bundle-encoder' ? helper.renderBundleEncoder : helper.renderPassEncoder; + context === 'render-bundle-encoder' ? helper.renderBundleEncoder : helper.renderPassEncoder; const computePass = context === 'compute-pass-encoder' ? helper.computePassEncoder : undefined; switch (operation) { @@ -794,7 +866,6 @@ export class BufferSyncTest extends GPUTest { dstBuffer, this.vertexBuffer ); - break; case 'input-indirect-index': // The srcBuffer is used as indirectBuffer for drawIndexedIndirect. @@ -809,7 +880,6 @@ export class BufferSyncTest extends GPUTest { this.vertexBuffer, this.indexBuffer ); - break; case 'input-indirect-dispatch': // The srcBuffer is used as indirectBuffer for dispatch. @@ -836,7 +906,6 @@ export class BufferSyncTest extends GPUTest { default: unreachable(); } - break; case 'b2b-copy': assert(helper.commandEncoder !== undefined); @@ -852,20 +921,22 @@ export class BufferSyncTest extends GPUTest { } verifyData(buffer, expectedValue) { + // This is not hot in profiles; optimize if this gets used more heavily. const bufferData = new Uint32Array(1); bufferData[0] = expectedValue; this.expectGPUBufferValuesEqual(buffer, bufferData); } verifyDataTwoValidValues(buffer, expectedValue1, expectedValue2) { + // This is not hot in profiles; optimize if this gets used more heavily. const bufferData1 = new Uint32Array(1); bufferData1[0] = expectedValue1; const bufferData2 = new Uint32Array(1); bufferData2[0] = expectedValue2; this.expectGPUBufferValuesPassCheck( buffer, - a => checkElementsEqualEither(a, [bufferData1, bufferData2]), + (a) => checkElementsEqualEither(a, [bufferData1, bufferData2]), { type: Uint32Array, typedLength: 1 } ); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/multiple_buffers.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/multiple_buffers.spec.js index 49cbba0b7c0..01be4c06c7f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/multiple_buffers.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/multiple_buffers.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Memory Synchronization Tests for multiple buffers: read before write, read after write, and write after write. - Create multiple src buffers and initialize it to 0, wait on the fence to ensure the data is initialized. @@ -15,20 +15,19 @@ Wait on another fence, then call expectContents to verify the dst buffer value. - If two writes are in the same passes, render result has loose guarantees. TODO: Tests with more than one buffer to try to stress implementations a little bit more. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kOperationBoundaries, kBoundaryInfo, - OperationContextHelper, -} from '../operation_context_helper.js'; + OperationContextHelper } from +'../operation_context_helper.js'; import { kAllReadOps, kAllWriteOps, BufferSyncTest, - checkOpsValidForContext, -} from './buffer_sync_test.js'; + checkOpsValidForContext } from +'./buffer_sync_test.js'; // The src value is what stores in the src buffer before any operation. const kSrcValue = 0; @@ -37,318 +36,319 @@ const kOpValue = 1; export const g = makeTestGroup(BufferSyncTest); -g.test('rw') - .desc( - ` +g.test('rw'). +desc( + ` Perform a 'read' operations on multiple buffers, followed by a 'write' operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The read should not see the contents written by the subsequent write. ` - ) - .params(u => - u // - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const readOp of kAllReadOps) { - for (const writeOp of kAllWriteOps) { - if (checkOpsValidForContext([readOp, writeOp], _context)) { - yield { - readOp, - readContext: _context[0], - writeOp, - writeContext: _context[1], - }; - } - } - } - }) - ) - .fn(async t => { - const { readContext, readOp, writeContext, writeOp, boundary } = t.params; - const helper = new OperationContextHelper(t); - - const srcBuffers = []; - const dstBuffers = []; - - const kBufferCount = 4; - for (let i = 0; i < kBufferCount; i++) { - const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); - srcBuffers.push(srcBuffer); - dstBuffers.push(dstBuffer); +). +params((u) => +u // +.combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const readOp of kAllReadOps) { + for (const writeOp of kAllWriteOps) { + if (checkOpsValidForContext([readOp, writeOp], _context)) { + yield { + readOp, + readContext: _context[0], + writeOp, + writeContext: _context[1] + }; + } } + } +}) +). +fn(async (t) => { + const { readContext, readOp, writeContext, writeOp, boundary } = t.params; + const helper = new OperationContextHelper(t); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); + const srcBuffers = []; + const dstBuffers = []; - // The read op will read from src buffers and write to dst buffers based on what it reads. - // A boundary will separate multiple read and write operations. The write op will write the - // given op value into each src buffer as well. The write op happens after read op. So we are - // expecting each src value to be in the mapped dst buffer. - for (let i = 0; i < kBufferCount; i++) { - t.encodeReadOp(helper, readOp, readContext, srcBuffers[i], dstBuffers[i]); - } + const kBufferCount = 4; + for (let i = 0; i < kBufferCount; i++) { + const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); + srcBuffers.push(srcBuffer); + dstBuffers.push(dstBuffer); + } - helper.ensureBoundary(boundary); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); - for (let i = 0; i < kBufferCount; i++) { - t.encodeWriteOp(helper, writeOp, writeContext, srcBuffers[i], 0, kOpValue); - } + // The read op will read from src buffers and write to dst buffers based on what it reads. + // A boundary will separate multiple read and write operations. The write op will write the + // given op value into each src buffer as well. The write op happens after read op. So we are + // expecting each src value to be in the mapped dst buffer. + for (let i = 0; i < kBufferCount; i++) { + t.encodeReadOp(helper, readOp, readContext, srcBuffers[i], dstBuffers[i]); + } - helper.ensureSubmit(); + helper.ensureBoundary(boundary); - for (let i = 0; i < kBufferCount; i++) { - // Only verify the value of the first element of each dstBuffer. - t.verifyData(dstBuffers[i], kSrcValue); - } - }); + for (let i = 0; i < kBufferCount; i++) { + t.encodeWriteOp(helper, writeOp, writeContext, srcBuffers[i], 0, kOpValue); + } -g.test('wr') - .desc( - ` + helper.ensureSubmit(); + + for (let i = 0; i < kBufferCount; i++) { + // Only verify the value of the first element of each dstBuffer. + t.verifyData(dstBuffers[i], kSrcValue); + } +}); + +g.test('wr'). +desc( + ` Perform a 'write' operation on on multiple buffers, followed by a 'read' operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The read should see exactly the contents written by the previous write.` - ) - .params(u => - u // - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const readOp of kAllReadOps) { - for (const writeOp of kAllWriteOps) { - if (checkOpsValidForContext([readOp, writeOp], _context)) { - yield { - readOp, - readContext: _context[0], - writeOp, - writeContext: _context[1], - }; - } - } - } - }) - ) - .fn(async t => { - const { readContext, readOp, writeContext, writeOp, boundary } = t.params; - const helper = new OperationContextHelper(t); - - const srcBuffers = []; - const dstBuffers = []; - - const kBufferCount = 4; - - for (let i = 0; i < kBufferCount; i++) { - const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); - - srcBuffers.push(srcBuffer); - dstBuffers.push(dstBuffer); +). +params((u) => +u // +.combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const readOp of kAllReadOps) { + for (const writeOp of kAllWriteOps) { + if (checkOpsValidForContext([readOp, writeOp], _context)) { + yield { + readOp, + readContext: _context[0], + writeOp, + writeContext: _context[1] + }; + } } + } +}) +). +fn(async (t) => { + const { readContext, readOp, writeContext, writeOp, boundary } = t.params; + const helper = new OperationContextHelper(t); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); + const srcBuffers = []; + const dstBuffers = []; - // The write op will write the given op value into src buffers. - // The read op will read from src buffers and write to dst buffers based on what it reads. - // The write op happens before read op. So we are expecting the op value to be in the dst - // buffers. - for (let i = 0; i < kBufferCount; i++) { - t.encodeWriteOp(helper, writeOp, writeContext, srcBuffers[i], 0, kOpValue); - } + const kBufferCount = 4; - helper.ensureBoundary(boundary); + for (let i = 0; i < kBufferCount; i++) { + const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); - for (let i = 0; i < kBufferCount; i++) { - t.encodeReadOp(helper, readOp, readContext, srcBuffers[i], dstBuffers[i]); - } + srcBuffers.push(srcBuffer); + dstBuffers.push(dstBuffer); + } - helper.ensureSubmit(); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); - for (let i = 0; i < kBufferCount; i++) { - // Only verify the value of the first element of the dstBuffer - t.verifyData(dstBuffers[i], kOpValue); - } - }); + // The write op will write the given op value into src buffers. + // The read op will read from src buffers and write to dst buffers based on what it reads. + // The write op happens before read op. So we are expecting the op value to be in the dst + // buffers. + for (let i = 0; i < kBufferCount; i++) { + t.encodeWriteOp(helper, writeOp, writeContext, srcBuffers[i], 0, kOpValue); + } -g.test('ww') - .desc( - ` + helper.ensureBoundary(boundary); + + for (let i = 0; i < kBufferCount; i++) { + t.encodeReadOp(helper, readOp, readContext, srcBuffers[i], dstBuffers[i]); + } + + helper.ensureSubmit(); + + for (let i = 0; i < kBufferCount; i++) { + // Only verify the value of the first element of the dstBuffer + t.verifyData(dstBuffers[i], kOpValue); + } +}); + +g.test('ww'). +desc( + ` Perform a 'first' write operation on multiple buffers, followed by a 'second' write operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The second write should overwrite the contents of the first.` - ) - .params(u => - u // - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const firstWriteOp of kAllWriteOps) { - for (const secondWriteOp of kAllWriteOps) { - if (checkOpsValidForContext([firstWriteOp, secondWriteOp], _context)) { - yield { - writeOps: [firstWriteOp, secondWriteOp], - contexts: _context, - }; - } - } - } - }) - ) - .fn(async t => { - const { writeOps, contexts, boundary } = t.params; - const helper = new OperationContextHelper(t); - - const buffers = []; - - const kBufferCount = 4; - - for (let i = 0; i < kBufferCount; i++) { - const buffer = await t.createBufferWithValue(0); - - buffers.push(buffer); +). +params((u) => +u // +.combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const firstWriteOp of kAllWriteOps) { + for (const secondWriteOp of kAllWriteOps) { + if (checkOpsValidForContext([firstWriteOp, secondWriteOp], _context)) { + yield { + writeOps: [firstWriteOp, secondWriteOp], + contexts: _context + }; + } } + } +}) +). +fn(async (t) => { + const { writeOps, contexts, boundary } = t.params; + const helper = new OperationContextHelper(t); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[0], 0, 1); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[1], 1, 2); + const buffers = []; - for (let i = 0; i < kBufferCount; i++) { - t.encodeWriteOp(helper, writeOps[0], contexts[0], buffers[i], 0, 1); - } + const kBufferCount = 4; - helper.ensureBoundary(boundary); + for (let i = 0; i < kBufferCount; i++) { + const buffer = await t.createBufferWithValue(0); - for (let i = 0; i < kBufferCount; i++) { - t.encodeWriteOp(helper, writeOps[1], contexts[1], buffers[i], 1, 2); - } + buffers.push(buffer); + } - helper.ensureSubmit(); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[0], 0, 1); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[1], 1, 2); - for (let i = 0; i < kBufferCount; i++) { - t.verifyData(buffers[i], 2); - } - }); + for (let i = 0; i < kBufferCount; i++) { + t.encodeWriteOp(helper, writeOps[0], contexts[0], buffers[i], 0, 1); + } -g.test('multiple_pairs_of_draws_in_one_render_pass') - .desc( - ` + helper.ensureBoundary(boundary); + + for (let i = 0; i < kBufferCount; i++) { + t.encodeWriteOp(helper, writeOps[1], contexts[1], buffers[i], 1, 2); + } + + helper.ensureSubmit(); + + for (let i = 0; i < kBufferCount; i++) { + t.verifyData(buffers[i], 2); + } +}); + +g.test('multiple_pairs_of_draws_in_one_render_pass'). +desc( + ` Test write-after-write operations on multiple buffers via the one render pass. The first write will write the buffer index * 2 + 1 into all storage buffers. The second write will write the buffer index * 2 + 2 into the all buffers in the same pass. Expected data in all buffers is either buffer index * 2 + 1 or buffer index * 2 + 2. It may use bundle in each draw. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('firstDrawUseBundle', [false, true]) - .combine('secondDrawUseBundle', [false, true]) - ) - .fn(async t => { - const { firstDrawUseBundle, secondDrawUseBundle } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('firstDrawUseBundle', [false, true]). +combine('secondDrawUseBundle', [false, true]) +). +fn(async (t) => { + const { firstDrawUseBundle, secondDrawUseBundle } = t.params; - const encoder = t.device.createCommandEncoder(); - const passEncoder = t.beginSimpleRenderPass(encoder); + const encoder = t.device.createCommandEncoder(); + const passEncoder = t.beginSimpleRenderPass(encoder); - const kBufferCount = 4; - const buffers = []; - for (let b = 0; b < kBufferCount; ++b) { - const buffer = await t.createBufferWithValue(0); - buffers.push(buffer); + const kBufferCount = 4; + const buffers = []; + for (let b = 0; b < kBufferCount; ++b) { + const buffer = await t.createBufferWithValue(0); + buffers.push(buffer); - const useBundle = [firstDrawUseBundle, secondDrawUseBundle]; - for (let i = 0; i < 2; ++i) { - const renderEncoder = useBundle[i] - ? t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }) - : passEncoder; - const pipeline = t.createStorageWriteRenderPipeline(2 * b + i + 1); - const bindGroup = t.createBindGroup(pipeline, buffer); - renderEncoder.setPipeline(pipeline); - renderEncoder.setBindGroup(0, bindGroup); - renderEncoder.draw(1, 1, 0, 0); - if (useBundle[i]) passEncoder.executeBundles([renderEncoder.finish()]); - } + const useBundle = [firstDrawUseBundle, secondDrawUseBundle]; + for (let i = 0; i < 2; ++i) { + const renderEncoder = useBundle[i] ? + t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'] + }) : + passEncoder; + const pipeline = t.createStorageWriteRenderPipeline(2 * b + i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + renderEncoder.setPipeline(pipeline); + renderEncoder.setBindGroup(0, bindGroup); + renderEncoder.draw(1, 1, 0, 0); + if (useBundle[i]) + passEncoder.executeBundles([renderEncoder.finish()]); } + } - passEncoder.end(); - t.device.queue.submit([encoder.finish()]); - for (let b = 0; b < kBufferCount; ++b) { - t.verifyDataTwoValidValues(buffers[b], 2 * b + 1, 2 * b + 2); - } - }); + passEncoder.end(); + t.device.queue.submit([encoder.finish()]); + for (let b = 0; b < kBufferCount; ++b) { + t.verifyDataTwoValidValues(buffers[b], 2 * b + 1, 2 * b + 2); + } +}); -g.test('multiple_pairs_of_draws_in_one_render_bundle') - .desc( - ` +g.test('multiple_pairs_of_draws_in_one_render_bundle'). +desc( + ` Test write-after-write operations on multiple buffers via the one render bundle. The first write will write the buffer index * 2 + 1 into all storage buffers. The second write will write the buffer index * 2 + 2 into the all buffers in the same pass. Expected data in all buffers is either buffer index * 2 + 1 or buffer index * 2 + 2. ` - ) - .fn(async t => { - const encoder = t.device.createCommandEncoder(); - const passEncoder = t.beginSimpleRenderPass(encoder); - const renderEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }); - - const kBufferCount = 4; - const buffers = []; - for (let b = 0; b < kBufferCount; ++b) { - const buffer = await t.createBufferWithValue(0); - buffers.push(buffer); - - for (let i = 0; i < 2; ++i) { - const pipeline = t.createStorageWriteRenderPipeline(2 * b + i + 1); - const bindGroup = t.createBindGroup(pipeline, buffer); - renderEncoder.setPipeline(pipeline); - renderEncoder.setBindGroup(0, bindGroup); - renderEncoder.draw(1, 1, 0, 0); - } - } - - passEncoder.executeBundles([renderEncoder.finish()]); - passEncoder.end(); - t.device.queue.submit([encoder.finish()]); - for (let b = 0; b < kBufferCount; ++b) { - t.verifyDataTwoValidValues(buffers[b], 2 * b + 1, 2 * b + 2); - } +). +fn(async (t) => { + const encoder = t.device.createCommandEncoder(); + const passEncoder = t.beginSimpleRenderPass(encoder); + const renderEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'] }); -g.test('multiple_pairs_of_dispatches_in_one_compute_pass') - .desc( - ` + const kBufferCount = 4; + const buffers = []; + for (let b = 0; b < kBufferCount; ++b) { + const buffer = await t.createBufferWithValue(0); + buffers.push(buffer); + + for (let i = 0; i < 2; ++i) { + const pipeline = t.createStorageWriteRenderPipeline(2 * b + i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + renderEncoder.setPipeline(pipeline); + renderEncoder.setBindGroup(0, bindGroup); + renderEncoder.draw(1, 1, 0, 0); + } + } + + passEncoder.executeBundles([renderEncoder.finish()]); + passEncoder.end(); + t.device.queue.submit([encoder.finish()]); + for (let b = 0; b < kBufferCount; ++b) { + t.verifyDataTwoValidValues(buffers[b], 2 * b + 1, 2 * b + 2); + } +}); + +g.test('multiple_pairs_of_dispatches_in_one_compute_pass'). +desc( + ` Test write-after-write operations on multiple buffers via the one compute pass. The first write will write the buffer index * 2 + 1 into all storage buffers. The second write will write the buffer index * 2 + 2 into the all buffers in the same pass. Expected data in all buffers is the buffer index * 2 + 2. ` - ) - .fn(async t => { - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); +). +fn(async (t) => { + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); - const kBufferCount = 4; - const buffers = []; - for (let b = 0; b < kBufferCount; ++b) { - const buffer = await t.createBufferWithValue(0); - buffers.push(buffer); + const kBufferCount = 4; + const buffers = []; + for (let b = 0; b < kBufferCount; ++b) { + const buffer = await t.createBufferWithValue(0); + buffers.push(buffer); - for (let i = 0; i < 2; ++i) { - const pipeline = t.createStorageWriteComputePipeline(2 * b + i + 1); - const bindGroup = t.createBindGroup(pipeline, buffer); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(1); - } + for (let i = 0; i < 2; ++i) { + const pipeline = t.createStorageWriteComputePipeline(2 * b + i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(1); } + } - pass.end(); + pass.end(); - t.device.queue.submit([encoder.finish()]); - for (let b = 0; b < kBufferCount; ++b) { - t.verifyData(buffers[b], 2 * b + 2); - } - }); + t.device.queue.submit([encoder.finish()]); + for (let b = 0; b < kBufferCount; ++b) { + t.verifyData(buffers[b], 2 * b + 2); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/single_buffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/single_buffer.spec.js index fede1375e83..8a6bb018e86 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/single_buffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/buffer/single_buffer.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Memory Synchronization Tests for Buffer: read before write, read after write, and write after write. - Create a src buffer and initialize it to 0, wait on the fence to ensure the data is initialized. @@ -13,20 +13,19 @@ Wait on another fence, then call expectContents to verify the dst buffer value. - x= op context: {queue, command-encoder, compute-pass-encoder, render-pass-encoder, render-bundle-encoder}, x= op boundary: {queue-op, command-buffer, pass, execute-bundles, render-bundle} - Not every context/boundary combinations are valid. We have the checkOpsValidForContext func to do the filtering. - If two writes are in the same passes, render result has loose guarantees. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kOperationBoundaries, kBoundaryInfo, - OperationContextHelper, -} from '../operation_context_helper.js'; + OperationContextHelper } from +'../operation_context_helper.js'; import { kAllReadOps, kAllWriteOps, BufferSyncTest, - checkOpsValidForContext, -} from './buffer_sync_test.js'; + checkOpsValidForContext } from +'./buffer_sync_test.js'; // The src value is what stores in the src buffer before any operation. const kSrcValue = 0; @@ -35,223 +34,224 @@ const kOpValue = 1; export const g = makeTestGroup(BufferSyncTest); -g.test('rw') - .desc( - ` +g.test('rw'). +desc( + ` Perform a 'read' operations on a buffer, followed by a 'write' operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The read should not see the contents written by the subsequent write.` - ) - .params(u => - u // - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const readOp of kAllReadOps) { - for (const writeOp of kAllWriteOps) { - if (checkOpsValidForContext([readOp, writeOp], _context)) { - yield { - readOp, - readContext: _context[0], - writeOp, - writeContext: _context[1], - }; - } - } - } - }) - ) - .fn(async t => { - const { readContext, readOp, writeContext, writeOp, boundary } = t.params; - const helper = new OperationContextHelper(t); +). +params((u) => +u // +.combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const readOp of kAllReadOps) { + for (const writeOp of kAllWriteOps) { + if (checkOpsValidForContext([readOp, writeOp], _context)) { + yield { + readOp, + readContext: _context[0], + writeOp, + writeContext: _context[1] + }; + } + } + } +}) +). +fn(async (t) => { + const { readContext, readOp, writeContext, writeOp, boundary } = t.params; + const helper = new OperationContextHelper(t); - const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); + const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); - // The read op will read from src buffer and write to dst buffer based on what it reads. - // The write op will write the given op value into src buffer as well. - // The write op happens after read op. So we are expecting the src value to be in the dst buffer. - t.encodeReadOp(helper, readOp, readContext, srcBuffer, dstBuffer); - helper.ensureBoundary(boundary); - t.encodeWriteOp(helper, writeOp, writeContext, srcBuffer, 0, kOpValue); - helper.ensureSubmit(); - // Only verify the value of the first element of the dstBuffer - t.verifyData(dstBuffer, kSrcValue); - }); + // The read op will read from src buffer and write to dst buffer based on what it reads. + // The write op will write the given op value into src buffer as well. + // The write op happens after read op. So we are expecting the src value to be in the dst buffer. + t.encodeReadOp(helper, readOp, readContext, srcBuffer, dstBuffer); + helper.ensureBoundary(boundary); + t.encodeWriteOp(helper, writeOp, writeContext, srcBuffer, 0, kOpValue); + helper.ensureSubmit(); + // Only verify the value of the first element of the dstBuffer + t.verifyData(dstBuffer, kSrcValue); +}); -g.test('wr') - .desc( - ` +g.test('wr'). +desc( + ` Perform a 'write' operation on a buffer, followed by a 'read' operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The read should see exactly the contents written by the previous write.` - ) - .params(u => - u // - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const readOp of kAllReadOps) { - for (const writeOp of kAllWriteOps) { - if (checkOpsValidForContext([readOp, writeOp], _context)) { - yield { - readOp, - readContext: _context[0], - writeOp, - writeContext: _context[1], - }; - } - } - } - }) - ) - .fn(async t => { - const { readContext, readOp, writeContext, writeOp, boundary } = t.params; - const helper = new OperationContextHelper(t); +). +params((u) => +u // +.combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const readOp of kAllReadOps) { + for (const writeOp of kAllWriteOps) { + if (checkOpsValidForContext([readOp, writeOp], _context)) { + yield { + readOp, + readContext: _context[0], + writeOp, + writeContext: _context[1] + }; + } + } + } +}) +). +fn(async (t) => { + const { readContext, readOp, writeContext, writeOp, boundary } = t.params; + const helper = new OperationContextHelper(t); - const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); + const { srcBuffer, dstBuffer } = await t.createBuffersForReadOp(readOp, kSrcValue, kOpValue); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOp, 0, kOpValue); - // The write op will write the given op value into src buffer. - // The read op will read from src buffer and write to dst buffer based on what it reads. - // The write op happens before read op. So we are expecting the op value to be in the dst buffer. - t.encodeWriteOp(helper, writeOp, writeContext, srcBuffer, 0, kOpValue); - helper.ensureBoundary(boundary); - t.encodeReadOp(helper, readOp, readContext, srcBuffer, dstBuffer); - helper.ensureSubmit(); - // Only verify the value of the first element of the dstBuffer - t.verifyData(dstBuffer, kOpValue); - }); + // The write op will write the given op value into src buffer. + // The read op will read from src buffer and write to dst buffer based on what it reads. + // The write op happens before read op. So we are expecting the op value to be in the dst buffer. + t.encodeWriteOp(helper, writeOp, writeContext, srcBuffer, 0, kOpValue); + helper.ensureBoundary(boundary); + t.encodeReadOp(helper, readOp, readContext, srcBuffer, dstBuffer); + helper.ensureSubmit(); + // Only verify the value of the first element of the dstBuffer + t.verifyData(dstBuffer, kOpValue); +}); -g.test('ww') - .desc( - ` +g.test('ww'). +desc( + ` Perform a 'first' write operation on a buffer, followed by a 'second' write operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The second write should overwrite the contents of the first.` - ) - .params(u => - u // - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const firstWriteOp of kAllWriteOps) { - for (const secondWriteOp of kAllWriteOps) { - if (checkOpsValidForContext([firstWriteOp, secondWriteOp], _context)) { - yield { - writeOps: [firstWriteOp, secondWriteOp], - contexts: _context, - }; - } - } - } - }) - ) - .fn(async t => { - const { writeOps, contexts, boundary } = t.params; - const helper = new OperationContextHelper(t); +). +params((u) => +u // +.combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const firstWriteOp of kAllWriteOps) { + for (const secondWriteOp of kAllWriteOps) { + if (checkOpsValidForContext([firstWriteOp, secondWriteOp], _context)) { + yield { + writeOps: [firstWriteOp, secondWriteOp], + contexts: _context + }; + } + } + } +}) +). +fn(async (t) => { + const { writeOps, contexts, boundary } = t.params; + const helper = new OperationContextHelper(t); - const buffer = await t.createBufferWithValue(0); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[0], 0, 1); - await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[1], 1, 2); + const buffer = await t.createBufferWithValue(0); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[0], 0, 1); + await t.createIntermediateBuffersAndTexturesForWriteOp(writeOps[1], 1, 2); - t.encodeWriteOp(helper, writeOps[0], contexts[0], buffer, 0, 1); - helper.ensureBoundary(boundary); - t.encodeWriteOp(helper, writeOps[1], contexts[1], buffer, 1, 2); - helper.ensureSubmit(); - t.verifyData(buffer, 2); - }); + t.encodeWriteOp(helper, writeOps[0], contexts[0], buffer, 0, 1); + helper.ensureBoundary(boundary); + t.encodeWriteOp(helper, writeOps[1], contexts[1], buffer, 1, 2); + helper.ensureSubmit(); + t.verifyData(buffer, 2); +}); // Cases with loose render result guarantees. -g.test('two_draws_in_the_same_render_pass') - .desc( - `Test write-after-write operations in the same render pass. The first write will write 1 into +g.test('two_draws_in_the_same_render_pass'). +desc( + `Test write-after-write operations in the same render pass. The first write will write 1 into a storage buffer. The second write will write 2 into the same buffer in the same pass. Expected data in buffer is either 1 or 2. It may use bundle in each draw.` - ) - .paramsSubcasesOnly(u => - u // - .combine('firstDrawUseBundle', [false, true]) - .combine('secondDrawUseBundle', [false, true]) - ) - .fn(async t => { - const { firstDrawUseBundle, secondDrawUseBundle } = t.params; - const buffer = await t.createBufferWithValue(0); - const encoder = t.device.createCommandEncoder(); - const passEncoder = t.beginSimpleRenderPass(encoder); +). +paramsSubcasesOnly((u) => +u // +.combine('firstDrawUseBundle', [false, true]). +combine('secondDrawUseBundle', [false, true]) +). +fn(async (t) => { + const { firstDrawUseBundle, secondDrawUseBundle } = t.params; + const buffer = await t.createBufferWithValue(0); + const encoder = t.device.createCommandEncoder(); + const passEncoder = t.beginSimpleRenderPass(encoder); - const useBundle = [firstDrawUseBundle, secondDrawUseBundle]; - for (let i = 0; i < 2; ++i) { - const renderEncoder = useBundle[i] - ? t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }) - : passEncoder; - const pipeline = t.createStorageWriteRenderPipeline(i + 1); - const bindGroup = t.createBindGroup(pipeline, buffer); - renderEncoder.setPipeline(pipeline); - renderEncoder.setBindGroup(0, bindGroup); - renderEncoder.draw(1, 1, 0, 0); - if (useBundle[i]) passEncoder.executeBundles([renderEncoder.finish()]); - } + const useBundle = [firstDrawUseBundle, secondDrawUseBundle]; + for (let i = 0; i < 2; ++i) { + const renderEncoder = useBundle[i] ? + t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'] + }) : + passEncoder; + const pipeline = t.createStorageWriteRenderPipeline(i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + renderEncoder.setPipeline(pipeline); + renderEncoder.setBindGroup(0, bindGroup); + renderEncoder.draw(1, 1, 0, 0); + if (useBundle[i]) + passEncoder.executeBundles([renderEncoder.finish()]); + } - passEncoder.end(); - t.device.queue.submit([encoder.finish()]); - t.verifyDataTwoValidValues(buffer, 1, 2); - }); + passEncoder.end(); + t.device.queue.submit([encoder.finish()]); + t.verifyDataTwoValidValues(buffer, 1, 2); +}); -g.test('two_draws_in_the_same_render_bundle') - .desc( - `Test write-after-write operations in the same render bundle. The first write will write 1 into +g.test('two_draws_in_the_same_render_bundle'). +desc( + `Test write-after-write operations in the same render bundle. The first write will write 1 into a storage buffer. The second write will write 2 into the same buffer in the same pass. Expected data in buffer is either 1 or 2.` - ) - .fn(async t => { - const buffer = await t.createBufferWithValue(0); - const encoder = t.device.createCommandEncoder(); - const passEncoder = t.beginSimpleRenderPass(encoder); - const renderEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }); - - for (let i = 0; i < 2; ++i) { - const pipeline = t.createStorageWriteRenderPipeline(i + 1); - const bindGroup = t.createBindGroup(pipeline, buffer); - renderEncoder.setPipeline(pipeline); - renderEncoder.setBindGroup(0, bindGroup); - renderEncoder.draw(1, 1, 0, 0); - } - - passEncoder.executeBundles([renderEncoder.finish()]); - passEncoder.end(); - t.device.queue.submit([encoder.finish()]); - t.verifyDataTwoValidValues(buffer, 1, 2); +). +fn(async (t) => { + const buffer = await t.createBufferWithValue(0); + const encoder = t.device.createCommandEncoder(); + const passEncoder = t.beginSimpleRenderPass(encoder); + const renderEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'] }); -g.test('two_dispatches_in_the_same_compute_pass') - .desc( - `Test write-after-write operations in the same compute pass. The first write will write 1 into + for (let i = 0; i < 2; ++i) { + const pipeline = t.createStorageWriteRenderPipeline(i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + renderEncoder.setPipeline(pipeline); + renderEncoder.setBindGroup(0, bindGroup); + renderEncoder.draw(1, 1, 0, 0); + } + + passEncoder.executeBundles([renderEncoder.finish()]); + passEncoder.end(); + t.device.queue.submit([encoder.finish()]); + t.verifyDataTwoValidValues(buffer, 1, 2); +}); + +g.test('two_dispatches_in_the_same_compute_pass'). +desc( + `Test write-after-write operations in the same compute pass. The first write will write 1 into a storage buffer. The second write will write 2 into the same buffer in the same pass. Expected data in buffer is 2.` - ) - .fn(async t => { - const buffer = await t.createBufferWithValue(0); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); +). +fn(async (t) => { + const buffer = await t.createBufferWithValue(0); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); - for (let i = 0; i < 2; ++i) { - const pipeline = t.createStorageWriteComputePipeline(i + 1); - const bindGroup = t.createBindGroup(pipeline, buffer); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(1); - } + for (let i = 0; i < 2; ++i) { + const pipeline = t.createStorageWriteComputePipeline(i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(1); + } - pass.end(); - t.device.queue.submit([encoder.finish()]); - t.verifyData(buffer, 2); - }); + pass.end(); + t.device.queue.submit([encoder.finish()]); + t.verifyData(buffer, 2); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/operation_context_helper.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/operation_context_helper.js index 222d06fac92..f3ddfa12bf9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/operation_context_helper.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/operation_context_helper.js @@ -1,34 +1,44 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../../../common/util/util.js'; /** * Boundary between the first operation, and the second operation. */ export const kOperationBoundaries = [ - 'queue-op', // Operations are performed in different queue operations (submit, writeTexture). - 'command-buffer', // Operations are in different command buffers. - 'pass', // Operations are in different passes. - 'execute-bundles', // Operations are in different executeBundles(...) calls - 'render-bundle', // Operations are in different render bundles. - 'dispatch', // Operations are in different dispatches. - 'draw', // Operations are in different draws. +'queue-op', // Operations are performed in different queue operations (submit, writeTexture). +'command-buffer', // Operations are in different command buffers. +'pass', // Operations are in different passes. +'execute-bundles', // Operations are in different executeBundles(...) calls +'render-bundle', // Operations are in different render bundles. +'dispatch', // Operations are in different dispatches. +'draw' // Operations are in different draws. ]; + /** * Context a particular operation is permitted in. * These contexts should be sorted such that the first is the most top-level * context, and the last is most nested (inside a render bundle, in a render pass, ...). */ export const kOperationContexts = [ - 'queue', // Operation occurs on the GPUQueue object - 'command-encoder', // Operation may be encoded in a GPUCommandEncoder. - 'compute-pass-encoder', // Operation may be encoded in a GPUComputePassEncoder. - 'render-pass-encoder', // Operation may be encoded in a GPURenderPassEncoder. - 'render-bundle-encoder', // Operation may be encoded in a GPURenderBundleEncoder. +'queue', // Operation occurs on the GPUQueue object +'command-encoder', // Operation may be encoded in a GPUCommandEncoder. +'compute-pass-encoder', // Operation may be encoded in a GPUComputePassEncoder. +'render-pass-encoder', // Operation may be encoded in a GPURenderPassEncoder. +'render-bundle-encoder' // Operation may be encoded in a GPURenderBundleEncoder. ]; -function combineContexts(as, bs) { + + + + + + +function combineContexts( +as, +bs) +{ const result = []; for (const a of as) { for (const b of bs) { @@ -40,52 +50,54 @@ function combineContexts(as, bs) { const queueContexts = combineContexts(kOperationContexts, kOperationContexts); const commandBufferContexts = combineContexts( - kOperationContexts.filter(c => c !== 'queue'), - kOperationContexts.filter(c => c !== 'queue') + kOperationContexts.filter((c) => c !== 'queue'), + kOperationContexts.filter((c) => c !== 'queue') ); /** * Mapping of OperationBoundary => to a set of OperationContext pairs. * The boundary is capable of separating operations in those two contexts. */ -export const kBoundaryInfo = { +export const kBoundaryInfo = + +{ 'queue-op': { - contexts: queueContexts, + contexts: queueContexts }, 'command-buffer': { - contexts: commandBufferContexts, + contexts: commandBufferContexts }, pass: { contexts: [ - ['compute-pass-encoder', 'compute-pass-encoder'], - ['compute-pass-encoder', 'render-pass-encoder'], - ['render-pass-encoder', 'compute-pass-encoder'], - ['render-pass-encoder', 'render-pass-encoder'], - ['render-bundle-encoder', 'render-pass-encoder'], - ['render-pass-encoder', 'render-bundle-encoder'], - ['render-bundle-encoder', 'render-bundle-encoder'], - ], + ['compute-pass-encoder', 'compute-pass-encoder'], + ['compute-pass-encoder', 'render-pass-encoder'], + ['render-pass-encoder', 'compute-pass-encoder'], + ['render-pass-encoder', 'render-pass-encoder'], + ['render-bundle-encoder', 'render-pass-encoder'], + ['render-pass-encoder', 'render-bundle-encoder'], + ['render-bundle-encoder', 'render-bundle-encoder']] + }, 'execute-bundles': { - contexts: [['render-bundle-encoder', 'render-bundle-encoder']], + contexts: [['render-bundle-encoder', 'render-bundle-encoder']] }, 'render-bundle': { contexts: [ - ['render-bundle-encoder', 'render-pass-encoder'], - ['render-pass-encoder', 'render-bundle-encoder'], - ['render-bundle-encoder', 'render-bundle-encoder'], - ], + ['render-bundle-encoder', 'render-pass-encoder'], + ['render-pass-encoder', 'render-bundle-encoder'], + ['render-bundle-encoder', 'render-bundle-encoder']] + }, dispatch: { - contexts: [['compute-pass-encoder', 'compute-pass-encoder']], + contexts: [['compute-pass-encoder', 'compute-pass-encoder']] }, draw: { contexts: [ - ['render-pass-encoder', 'render-pass-encoder'], - ['render-bundle-encoder', 'render-pass-encoder'], - ['render-pass-encoder', 'render-bundle-encoder'], - ], - }, + ['render-pass-encoder', 'render-pass-encoder'], + ['render-bundle-encoder', 'render-pass-encoder'], + ['render-pass-encoder', 'render-bundle-encoder']] + + } }; export class OperationContextHelper { @@ -94,6 +106,14 @@ export class OperationContextHelper { // Set based on the current context. + + + + + + + + commandBuffers = []; renderBundles = []; @@ -117,13 +137,13 @@ export class OperationContextHelper { case 'queue': unreachable(); break; - case 'command-encoder': { - assert(this.commandEncoder !== undefined); - const commandBuffer = this.commandEncoder.finish(); - this.commandEncoder = undefined; - this.currentContext = 'queue'; - return commandBuffer; - } + case 'command-encoder':{ + assert(this.commandEncoder !== undefined); + const commandBuffer = this.commandEncoder.finish(); + this.commandEncoder = undefined; + this.currentContext = 'queue'; + return commandBuffer; + } case 'compute-pass-encoder': assert(this.computePassEncoder !== undefined); this.computePassEncoder.end(); @@ -136,15 +156,14 @@ export class OperationContextHelper { this.renderPassEncoder = undefined; this.currentContext = 'command-encoder'; break; - case 'render-bundle-encoder': { - assert(this.renderBundleEncoder !== undefined); - const renderBundle = this.renderBundleEncoder.finish(); - this.renderBundleEncoder = undefined; - this.currentContext = 'render-pass-encoder'; - return renderBundle; - } + case 'render-bundle-encoder':{ + assert(this.renderBundleEncoder !== undefined); + const renderBundle = this.renderBundleEncoder.finish(); + this.renderBundleEncoder = undefined; + this.currentContext = 'render-pass-encoder'; + return renderBundle; + } } - return null; } @@ -153,26 +172,25 @@ export class OperationContextHelper { this.device.createTexture({ format: this.kTextureFormat, size: this.kTextureSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }) ); - return { view: texture.createView(), loadOp: 'load', - storeOp: 'store', + storeOp: 'store' }; } ensureContext(context) { // Find the common ancestor. So we can transition from currentContext -> context. const ancestorContext = - kOperationContexts[ - Math.min( - kOperationContexts.indexOf(context), - kOperationContexts.indexOf(this.currentContext) - ) - ]; + kOperationContexts[ + Math.min( + kOperationContexts.indexOf(context), + kOperationContexts.indexOf(this.currentContext) + )]; + // Pop the context until we're at the common ancestor. while (this.currentContext !== ancestorContext) { @@ -217,7 +235,6 @@ export class OperationContextHelper { case 'render-pass-encoder': unreachable(); } - break; case 'render-pass-encoder': switch (this.currentContext) { @@ -227,7 +244,7 @@ export class OperationContextHelper { case 'command-encoder': assert(this.commandEncoder !== undefined); this.renderPassEncoder = this.commandEncoder.beginRenderPass({ - colorAttachments: [this.makeDummyAttachment()], + colorAttachments: [this.makeDummyAttachment()] }); break; case 'render-pass-encoder': @@ -235,7 +252,6 @@ export class OperationContextHelper { case 'compute-pass-encoder': unreachable(); } - break; case 'render-bundle-encoder': switch (this.currentContext) { @@ -245,22 +261,20 @@ export class OperationContextHelper { case 'command-encoder': assert(this.commandEncoder !== undefined); this.renderPassEncoder = this.commandEncoder.beginRenderPass({ - colorAttachments: [this.makeDummyAttachment()], + colorAttachments: [this.makeDummyAttachment()] }); // fallthrough case 'render-pass-encoder': this.renderBundleEncoder = this.device.createRenderBundleEncoder({ - colorFormats: [this.kTextureFormat], + colorFormats: [this.kTextureFormat] }); break; case 'render-bundle-encoder': case 'compute-pass-encoder': unreachable(); } - break; } - this.currentContext = context; } @@ -297,9 +311,8 @@ export class OperationContextHelper { // Nothing to do to separate draws. assert( this.currentContext === 'render-pass-encoder' || - this.currentContext === 'render-bundle-encoder' + this.currentContext === 'render-bundle-encoder' ); - break; case 'pass': this.ensureContext('command-encoder'); @@ -314,4 +327,4 @@ export class OperationContextHelper { break; } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/same_subresource.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/same_subresource.spec.js index 0dcd7f90af4..ca575db19bf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/same_subresource.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/same_subresource.spec.js @@ -1,31 +1,35 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Memory Synchronization Tests for Texture: read before write, read after write, and write after write to the same subresource. - TODO: Test synchronization between multiple queues. - TODO: Test depth/stencil attachments. - TODO: Use non-solid-color texture contents [2] -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { assert, memcpy, unreachable } from '../../../../../common/util/util.js'; import { GPUTest } from '../../../../gpu_test.js'; import { align } from '../../../../util/math.js'; import { getTextureCopyLayout } from '../../../../util/texture/layout.js'; -import { kTexelRepresentationInfo } from '../../../../util/texture/texel_data.js'; +import { + kTexelRepresentationInfo } from + +'../../../../util/texture/texel_data.js'; import { kOperationBoundaries, + kBoundaryInfo, - OperationContextHelper, -} from '../operation_context_helper.js'; + OperationContextHelper } from +'../operation_context_helper.js'; import { kAllReadOps, kAllWriteOps, checkOpsValidForContext, - kOpInfo, -} from './texture_sync_test.js'; + + kOpInfo } from +'./texture_sync_test.js'; export const g = makeTestGroup(GPUTest); @@ -50,16 +54,23 @@ const fullscreenQuadWGSL = ` `; class TextureSyncTestHelper extends OperationContextHelper { + + kTextureSize = [4, 4]; kTextureFormat = 'rgba8unorm'; - constructor(t, textureCreationParams) { + constructor( + t, + textureCreationParams) + + + { super(t); this.texture = t.trackForCleanup( t.device.createTexture({ size: this.kTextureSize, format: this.kTextureFormat, - ...textureCreationParams, + ...textureCreationParams }) ); } @@ -71,112 +82,108 @@ class TextureSyncTestHelper extends OperationContextHelper { performReadOp({ op, in: context }) { this.ensureContext(context); switch (op) { - case 't2t-copy': { - const texture = this.t.trackForCleanup( - this.device.createTexture({ - size: this.kTextureSize, - format: this.kTextureFormat, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }) - ); + case 't2t-copy':{ + const texture = this.t.trackForCleanup( + this.device.createTexture({ + size: this.kTextureSize, + format: this.kTextureFormat, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }) + ); - assert(this.commandEncoder !== undefined); - this.commandEncoder.copyTextureToTexture( - { - texture: this.texture, - }, - { texture }, - this.kTextureSize - ); - - return texture; - } - case 't2b-copy': { - const { byteLength, bytesPerRow } = getTextureCopyLayout(this.kTextureFormat, '2d', [ + assert(this.commandEncoder !== undefined); + this.commandEncoder.copyTextureToTexture( + { + texture: this.texture + }, + { texture }, + this.kTextureSize + ); + return texture; + } + case 't2b-copy':{ + const { byteLength, bytesPerRow } = getTextureCopyLayout(this.kTextureFormat, '2d', [ ...this.kTextureSize, - 1, - ]); + 1] + ); + const buffer = this.t.trackForCleanup( + this.device.createBuffer({ + size: byteLength, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }) + ); - const buffer = this.t.trackForCleanup( - this.device.createBuffer({ - size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }) - ); + const texture = this.t.trackForCleanup( + this.device.createTexture({ + size: this.kTextureSize, + format: this.kTextureFormat, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }) + ); - const texture = this.t.trackForCleanup( - this.device.createTexture({ - size: this.kTextureSize, - format: this.kTextureFormat, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }) - ); + assert(this.commandEncoder !== undefined); + this.commandEncoder.copyTextureToBuffer( + { + texture: this.texture + }, + { buffer, bytesPerRow }, + this.kTextureSize + ); + this.commandEncoder.copyBufferToTexture( + { buffer, bytesPerRow }, + { texture }, + this.kTextureSize + ); + return texture; + } + case 'sample':{ + const texture = this.t.trackForCleanup( + this.device.createTexture({ + size: this.kTextureSize, + format: this.kTextureFormat, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING + }) + ); - assert(this.commandEncoder !== undefined); - this.commandEncoder.copyTextureToBuffer( - { - texture: this.texture, - }, - { buffer, bytesPerRow }, - this.kTextureSize - ); - - this.commandEncoder.copyBufferToTexture( - { buffer, bytesPerRow }, - { texture }, - this.kTextureSize - ); - - return texture; - } - case 'sample': { - const texture = this.t.trackForCleanup( - this.device.createTexture({ - size: this.kTextureSize, - format: this.kTextureFormat, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING, - }) - ); - - const bindGroupLayout = this.device.createBindGroupLayout({ - entries: [ + const bindGroupLayout = this.device.createBindGroupLayout({ + entries: [ { binding: 0, visibility: GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE, texture: { - sampleType: 'unfilterable-float', - }, + sampleType: 'unfilterable-float' + } }, { binding: 1, visibility: GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE, storageTexture: { access: 'write-only', - format: this.kTextureFormat, - }, - }, - ], - }); + format: this.kTextureFormat + } + }] - const bindGroup = this.device.createBindGroup({ - layout: bindGroupLayout, - entries: [ + }); + + const bindGroup = this.device.createBindGroup({ + layout: bindGroupLayout, + entries: [ { binding: 0, - resource: this.texture.createView(), + resource: this.texture.createView() }, { binding: 1, - resource: texture.createView(), - }, - ], - }); + resource: texture.createView() + }] - switch (context) { - case 'render-pass-encoder': - case 'render-bundle-encoder': { - const module = this.device.createShaderModule({ - code: `${fullscreenQuadWGSL} + }); + + switch (context) { + case 'render-pass-encoder': + case 'render-bundle-encoder':{ + const module = this.device.createShaderModule({ + code: `${fullscreenQuadWGSL} @group(0) @binding(0) var inputTex: texture_2d; @group(0) @binding(1) var outputTex: texture_storage_2d; @@ -186,51 +193,50 @@ class TextureSyncTestHelper extends OperationContextHelper { textureStore(outputTex, coord, textureLoad(inputTex, coord, 0)); return vec4(); } - `, - }); - const renderPipeline = this.device.createRenderPipeline({ - layout: this.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], - }), - vertex: { - module, - entryPoint: 'vert_main', - }, - fragment: { - module, - entryPoint: 'frag_main', - - // Unused attachment since we can't use textureStore in the vertex shader. - // Set writeMask to zero. - targets: [ - { - format: this.kTextureFormat, - writeMask: 0, + ` + }); + const renderPipeline = this.device.createRenderPipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayout] + }), + vertex: { + module, + entryPoint: 'vert_main' }, - ], - }, - }); + fragment: { + module, + entryPoint: 'frag_main', - switch (context) { - case 'render-bundle-encoder': - assert(this.renderBundleEncoder !== undefined); - this.renderBundleEncoder.setPipeline(renderPipeline); - this.renderBundleEncoder.setBindGroup(0, bindGroup); - this.renderBundleEncoder.draw(6); - break; - case 'render-pass-encoder': - assert(this.renderPassEncoder !== undefined); - this.renderPassEncoder.setPipeline(renderPipeline); - this.renderPassEncoder.setBindGroup(0, bindGroup); - this.renderPassEncoder.draw(6); - break; - } + // Unused attachment since we can't use textureStore in the vertex shader. + // Set writeMask to zero. + targets: [ + { + format: this.kTextureFormat, + writeMask: 0 + }] - break; - } - case 'compute-pass-encoder': { - const module = this.device.createShaderModule({ - code: ` + } + }); + + switch (context) { + case 'render-bundle-encoder': + assert(this.renderBundleEncoder !== undefined); + this.renderBundleEncoder.setPipeline(renderPipeline); + this.renderBundleEncoder.setBindGroup(0, bindGroup); + this.renderBundleEncoder.draw(6); + break; + case 'render-pass-encoder': + assert(this.renderPassEncoder !== undefined); + this.renderPassEncoder.setPipeline(renderPipeline); + this.renderPassEncoder.setBindGroup(0, bindGroup); + this.renderPassEncoder.draw(6); + break; + } + break; + } + case 'compute-pass-encoder':{ + const module = this.device.createShaderModule({ + code: ` @group(0) @binding(0) var inputTex: texture_2d; @group(0) @binding(1) var outputTex: texture_storage_2d; @@ -242,213 +248,210 @@ class TextureSyncTestHelper extends OperationContextHelper { let coord = vec2(gid.xy); textureStore(outputTex, coord, textureLoad(inputTex, coord, 0)); } - `, - }); - const computePipeline = this.device.createComputePipeline({ - layout: this.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], - }), - compute: { - module, - entryPoint: 'main', - }, - }); + ` + }); + const computePipeline = this.device.createComputePipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayout] + }), + compute: { + module, + entryPoint: 'main' + } + }); - assert(this.computePassEncoder !== undefined); - this.computePassEncoder.setPipeline(computePipeline); - this.computePassEncoder.setBindGroup(0, bindGroup); - this.computePassEncoder.dispatchWorkgroups( - Math.ceil(this.kTextureSize[0] / 8), - Math.ceil(this.kTextureSize[1] / 8) - ); - - break; + assert(this.computePassEncoder !== undefined); + this.computePassEncoder.setPipeline(computePipeline); + this.computePassEncoder.setBindGroup(0, bindGroup); + this.computePassEncoder.dispatchWorkgroups( + Math.ceil(this.kTextureSize[0] / 8), + Math.ceil(this.kTextureSize[1] / 8) + ); + break; + } + default: + unreachable(); } - default: - unreachable(); - } - return texture; - } + return texture; + } case 'b2t-copy': case 'attachment-resolve': case 'attachment-store': unreachable(); } - unreachable(); } - performWriteOp({ op, in: context }, data) { + performWriteOp( + { op, in: context }, + data) + { this.ensureContext(context); switch (op) { - case 'attachment-store': { - assert(this.commandEncoder !== undefined); - this.renderPassEncoder = this.commandEncoder.beginRenderPass({ - colorAttachments: [ + case 'attachment-store':{ + assert(this.commandEncoder !== undefined); + this.renderPassEncoder = this.commandEncoder.beginRenderPass({ + colorAttachments: [ { view: this.texture.createView(), // [2] Use non-solid-color texture values clearValue: [data.R ?? 0, data.G ?? 0, data.B ?? 0, data.A ?? 0], loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - this.currentContext = 'render-pass-encoder'; - break; - } - case 'write-texture': { - // [2] Use non-solid-color texture values - const rep = kTexelRepresentationInfo[this.kTextureFormat]; - const texelData = rep.pack(rep.encode(data)); - const numTexels = this.kTextureSize[0] * this.kTextureSize[1]; - const fullTexelData = new ArrayBuffer(texelData.byteLength * numTexels); - for (let i = 0; i < numTexels; ++i) { - memcpy({ src: texelData }, { dst: fullTexelData, start: i * texelData.byteLength }); + storeOp: 'store' + }] + + }); + this.currentContext = 'render-pass-encoder'; + break; } - - this.queue.writeTexture( - { texture: this.texture }, - fullTexelData, - { - bytesPerRow: texelData.byteLength * this.kTextureSize[0], - }, - this.kTextureSize - ); - - break; - } - case 't2t-copy': { - const texture = this.device.createTexture({ - size: this.kTextureSize, - format: this.kTextureFormat, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - // [2] Use non-solid-color texture values - const rep = kTexelRepresentationInfo[this.kTextureFormat]; - const texelData = rep.pack(rep.encode(data)); - const numTexels = this.kTextureSize[0] * this.kTextureSize[1]; - const fullTexelData = new ArrayBuffer(texelData.byteLength * numTexels); - for (let i = 0; i < numTexels; ++i) { - memcpy({ src: texelData }, { dst: fullTexelData, start: i * texelData.byteLength }); - } - - this.queue.writeTexture( - { texture }, - fullTexelData, - { - bytesPerRow: texelData.byteLength * this.kTextureSize[0], - }, - this.kTextureSize - ); - - assert(this.commandEncoder !== undefined); - this.commandEncoder.copyTextureToTexture( - { texture }, - { texture: this.texture }, - this.kTextureSize - ); - - break; - } - case 'b2t-copy': { - // [2] Use non-solid-color texture values - const rep = kTexelRepresentationInfo[this.kTextureFormat]; - const texelData = rep.pack(rep.encode(data)); - const bytesPerRow = align(texelData.byteLength, 256); - const fullTexelData = new ArrayBuffer(bytesPerRow * this.kTextureSize[1]); - for (let i = 0; i < this.kTextureSize[1]; ++i) { - for (let j = 0; j < this.kTextureSize[0]; ++j) { - memcpy( - { src: texelData }, - { - dst: fullTexelData, - start: i * bytesPerRow + j * texelData.byteLength, - } - ); + case 'write-texture':{ + // [2] Use non-solid-color texture values + const rep = kTexelRepresentationInfo[this.kTextureFormat]; + const texelData = rep.pack(rep.encode(data)); + const numTexels = this.kTextureSize[0] * this.kTextureSize[1]; + const fullTexelData = new ArrayBuffer(texelData.byteLength * numTexels); + for (let i = 0; i < numTexels; ++i) { + memcpy({ src: texelData }, { dst: fullTexelData, start: i * texelData.byteLength }); } + + this.queue.writeTexture( + { texture: this.texture }, + fullTexelData, + { + bytesPerRow: texelData.byteLength * this.kTextureSize[0] + }, + this.kTextureSize + ); + break; } - - const buffer = this.t.trackForCleanup( - this.device.createBuffer({ - size: fullTexelData.byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }) - ); - - this.queue.writeBuffer(buffer, 0, fullTexelData); - - assert(this.commandEncoder !== undefined); - this.commandEncoder.copyBufferToTexture( - { buffer, bytesPerRow }, - { texture: this.texture }, - this.kTextureSize - ); - - break; - } - case 'attachment-resolve': { - assert(this.commandEncoder !== undefined); - const renderTarget = this.t.trackForCleanup( - this.device.createTexture({ - format: this.kTextureFormat, + case 't2t-copy':{ + const texture = this.device.createTexture({ size: this.kTextureSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: 4, - }) - ); + format: this.kTextureFormat, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); - this.renderPassEncoder = this.commandEncoder.beginRenderPass({ - colorAttachments: [ + // [2] Use non-solid-color texture values + const rep = kTexelRepresentationInfo[this.kTextureFormat]; + const texelData = rep.pack(rep.encode(data)); + const numTexels = this.kTextureSize[0] * this.kTextureSize[1]; + const fullTexelData = new ArrayBuffer(texelData.byteLength * numTexels); + for (let i = 0; i < numTexels; ++i) { + memcpy({ src: texelData }, { dst: fullTexelData, start: i * texelData.byteLength }); + } + + this.queue.writeTexture( + { texture }, + fullTexelData, + { + bytesPerRow: texelData.byteLength * this.kTextureSize[0] + }, + this.kTextureSize + ); + + assert(this.commandEncoder !== undefined); + this.commandEncoder.copyTextureToTexture( + { texture }, + { texture: this.texture }, + this.kTextureSize + ); + break; + } + case 'b2t-copy':{ + // [2] Use non-solid-color texture values + const rep = kTexelRepresentationInfo[this.kTextureFormat]; + const texelData = rep.pack(rep.encode(data)); + const bytesPerRow = align(texelData.byteLength, 256); + const fullTexelData = new ArrayBuffer(bytesPerRow * this.kTextureSize[1]); + for (let i = 0; i < this.kTextureSize[1]; ++i) { + for (let j = 0; j < this.kTextureSize[0]; ++j) { + memcpy( + { src: texelData }, + { + dst: fullTexelData, + start: i * bytesPerRow + j * texelData.byteLength + } + ); + } + } + + const buffer = this.t.trackForCleanup( + this.device.createBuffer({ + size: fullTexelData.byteLength, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }) + ); + + this.queue.writeBuffer(buffer, 0, fullTexelData); + + assert(this.commandEncoder !== undefined); + this.commandEncoder.copyBufferToTexture( + { buffer, bytesPerRow }, + { texture: this.texture }, + this.kTextureSize + ); + break; + } + case 'attachment-resolve':{ + assert(this.commandEncoder !== undefined); + const renderTarget = this.t.trackForCleanup( + this.device.createTexture({ + format: this.kTextureFormat, + size: this.kTextureSize, + usage: GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: 4 + }) + ); + this.renderPassEncoder = this.commandEncoder.beginRenderPass({ + colorAttachments: [ { view: renderTarget.createView(), resolveTarget: this.texture.createView(), // [2] Use non-solid-color texture values clearValue: [data.R ?? 0, data.G ?? 0, data.B ?? 0, data.A ?? 0], loadOp: 'clear', - storeOp: 'discard', - }, - ], - }); - this.currentContext = 'render-pass-encoder'; - break; - } - case 'storage': { - const bindGroupLayout = this.device.createBindGroupLayout({ - entries: [ + storeOp: 'discard' + }] + + }); + this.currentContext = 'render-pass-encoder'; + break; + } + case 'storage':{ + const bindGroupLayout = this.device.createBindGroupLayout({ + entries: [ { binding: 0, visibility: GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE, storageTexture: { access: 'write-only', - format: this.kTextureFormat, - }, - }, - ], - }); + format: this.kTextureFormat + } + }] - const bindGroup = this.device.createBindGroup({ - layout: bindGroupLayout, - entries: [ + }); + + const bindGroup = this.device.createBindGroup({ + layout: bindGroupLayout, + entries: [ { binding: 0, - resource: this.texture.createView(), - }, - ], - }); + resource: this.texture.createView() + }] - // [2] Use non-solid-color texture values - const storedValue = `vec4(${[data.R ?? 0, data.G ?? 0, data.B ?? 0, data.A ?? 0] - .map(x => x.toFixed(5)) - .join(', ')})`; + }); - switch (context) { - case 'render-pass-encoder': - case 'render-bundle-encoder': { - const module = this.device.createShaderModule({ - code: `${fullscreenQuadWGSL} + // [2] Use non-solid-color texture values + const storedValue = `vec4(${[data.R ?? 0, data.G ?? 0, data.B ?? 0, data.A ?? 0]. + map((x) => x.toFixed(5)). + join(', ')})`; + + switch (context) { + case 'render-pass-encoder': + case 'render-bundle-encoder':{ + const module = this.device.createShaderModule({ + code: `${fullscreenQuadWGSL} @group(0) @binding(0) var outputTex: texture_storage_2d; @@ -456,51 +459,50 @@ class TextureSyncTestHelper extends OperationContextHelper { textureStore(outputTex, vec2(fragCoord.xy), ${storedValue}); return vec4(); } - `, - }); - const renderPipeline = this.device.createRenderPipeline({ - layout: this.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], - }), - vertex: { - module, - entryPoint: 'vert_main', - }, - fragment: { - module, - entryPoint: 'frag_main', - - // Unused attachment since we can't use textureStore in the vertex shader. - // Set writeMask to zero. - targets: [ - { - format: this.kTextureFormat, - writeMask: 0, + ` + }); + const renderPipeline = this.device.createRenderPipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayout] + }), + vertex: { + module, + entryPoint: 'vert_main' }, - ], - }, - }); + fragment: { + module, + entryPoint: 'frag_main', - switch (context) { - case 'render-bundle-encoder': - assert(this.renderBundleEncoder !== undefined); - this.renderBundleEncoder.setPipeline(renderPipeline); - this.renderBundleEncoder.setBindGroup(0, bindGroup); - this.renderBundleEncoder.draw(6); - break; - case 'render-pass-encoder': - assert(this.renderPassEncoder !== undefined); - this.renderPassEncoder.setPipeline(renderPipeline); - this.renderPassEncoder.setBindGroup(0, bindGroup); - this.renderPassEncoder.draw(6); - break; - } + // Unused attachment since we can't use textureStore in the vertex shader. + // Set writeMask to zero. + targets: [ + { + format: this.kTextureFormat, + writeMask: 0 + }] - break; - } - case 'compute-pass-encoder': { - const module = this.device.createShaderModule({ - code: ` + } + }); + + switch (context) { + case 'render-bundle-encoder': + assert(this.renderBundleEncoder !== undefined); + this.renderBundleEncoder.setPipeline(renderPipeline); + this.renderBundleEncoder.setBindGroup(0, bindGroup); + this.renderBundleEncoder.draw(6); + break; + case 'render-pass-encoder': + assert(this.renderPassEncoder !== undefined); + this.renderPassEncoder.setPipeline(renderPipeline); + this.renderPassEncoder.setBindGroup(0, bindGroup); + this.renderPassEncoder.draw(6); + break; + } + break; + } + case 'compute-pass-encoder':{ + const module = this.device.createShaderModule({ + code: ` @group(0) @binding(0) var outputTex: texture_storage_2d; @compute @workgroup_size(8, 8) @@ -511,34 +513,32 @@ class TextureSyncTestHelper extends OperationContextHelper { let coord = vec2(gid.xy); textureStore(outputTex, coord, ${storedValue}); } - `, - }); - const computePipeline = this.device.createComputePipeline({ - layout: this.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], - }), - compute: { - module, - entryPoint: 'main', - }, - }); + ` + }); + const computePipeline = this.device.createComputePipeline({ + layout: this.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayout] + }), + compute: { + module, + entryPoint: 'main' + } + }); - assert(this.computePassEncoder !== undefined); - this.computePassEncoder.setPipeline(computePipeline); - this.computePassEncoder.setBindGroup(0, bindGroup); - this.computePassEncoder.dispatchWorkgroups( - Math.ceil(this.kTextureSize[0] / 8), - Math.ceil(this.kTextureSize[1] / 8) - ); - - break; + assert(this.computePassEncoder !== undefined); + this.computePassEncoder.setPipeline(computePipeline); + this.computePassEncoder.setBindGroup(0, bindGroup); + this.computePassEncoder.dispatchWorkgroups( + Math.ceil(this.kTextureSize[0] / 8), + Math.ceil(this.kTextureSize[1] / 8) + ); + break; + } + default: + unreachable(); } - default: - unreachable(); + break; } - - break; - } case 't2b-copy': case 'sample': unreachable(); @@ -546,164 +546,164 @@ class TextureSyncTestHelper extends OperationContextHelper { } } -g.test('rw') - .desc( - ` +g.test('rw'). +desc( + ` Perform a 'read' operations on a texture subresource, followed by a 'write' operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The read should not see the contents written by the subsequent write.` - ) - .params(u => - u - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const read of kAllReadOps) { - for (const write of kAllWriteOps) { - if (checkOpsValidForContext([read, write], _context)) { - yield { - read: { op: read, in: _context[0] }, - write: { op: write, in: _context[1] }, - }; - } - } - } - }) - ) - .fn(t => { - const helper = new TextureSyncTestHelper(t, { - usage: - GPUTextureUsage.COPY_DST | - kOpInfo[t.params.read.op].readUsage | - kOpInfo[t.params.write.op].writeUsage, - }); - // [2] Use non-solid-color texture value. - const texelValue1 = { R: 0, G: 1, B: 0, A: 1 }; - const texelValue2 = { R: 1, G: 0, B: 0, A: 1 }; - - // Initialize the texture with something. - helper.performWriteOp({ op: 'write-texture', in: 'queue' }, texelValue1); - const readbackTexture = helper.performReadOp(t.params.read); - helper.ensureBoundary(t.params.boundary); - helper.performWriteOp(t.params.write, texelValue2); - helper.ensureSubmit(); - - // Contents should be the first value written, not the second. - t.expectSingleColor(readbackTexture, helper.kTextureFormat, { - size: [...helper.kTextureSize, 1], - exp: texelValue1, - }); +). +params((u) => +u. +combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const read of kAllReadOps) { + for (const write of kAllWriteOps) { + if (checkOpsValidForContext([read, write], _context)) { + yield { + read: { op: read, in: _context[0] }, + write: { op: write, in: _context[1] } + }; + } + } + } +}) +). +fn((t) => { + const helper = new TextureSyncTestHelper(t, { + usage: + GPUTextureUsage.COPY_DST | + kOpInfo[t.params.read.op].readUsage | + kOpInfo[t.params.write.op].writeUsage }); + // [2] Use non-solid-color texture value. + const texelValue1 = { R: 0, G: 1, B: 0, A: 1 }; + const texelValue2 = { R: 1, G: 0, B: 0, A: 1 }; -g.test('wr') - .desc( - ` + // Initialize the texture with something. + helper.performWriteOp({ op: 'write-texture', in: 'queue' }, texelValue1); + const readbackTexture = helper.performReadOp(t.params.read); + helper.ensureBoundary(t.params.boundary); + helper.performWriteOp(t.params.write, texelValue2); + helper.ensureSubmit(); + + // Contents should be the first value written, not the second. + t.expectSingleColor(readbackTexture, helper.kTextureFormat, { + size: [...helper.kTextureSize, 1], + exp: texelValue1 + }); +}); + +g.test('wr'). +desc( + ` Perform a 'write' operation on a texture subresource, followed by a 'read' operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The read should see exactly the contents written by the previous write. - TODO: Use non-solid-color texture contents [2]` - ) - .params(u => - u - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const read of kAllReadOps) { - for (const write of kAllWriteOps) { - if (checkOpsValidForContext([write, read], _context)) { - yield { - write: { op: write, in: _context[0] }, - read: { op: read, in: _context[1] }, - }; - } - } - } - }) - ) - .fn(t => { - const helper = new TextureSyncTestHelper(t, { - usage: kOpInfo[t.params.read.op].readUsage | kOpInfo[t.params.write.op].writeUsage, - }); - // [2] Use non-solid-color texture value. - const texelValue = { R: 0, G: 1, B: 0, A: 1 }; - - helper.performWriteOp(t.params.write, texelValue); - helper.ensureBoundary(t.params.boundary); - const readbackTexture = helper.performReadOp(t.params.read); - helper.ensureSubmit(); - - // Contents should be exactly the values written. - t.expectSingleColor(readbackTexture, helper.kTextureFormat, { - size: [...helper.kTextureSize, 1], - exp: texelValue, - }); +). +params((u) => +u. +combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const read of kAllReadOps) { + for (const write of kAllWriteOps) { + if (checkOpsValidForContext([write, read], _context)) { + yield { + write: { op: write, in: _context[0] }, + read: { op: read, in: _context[1] } + }; + } + } + } +}) +). +fn((t) => { + const helper = new TextureSyncTestHelper(t, { + usage: kOpInfo[t.params.read.op].readUsage | kOpInfo[t.params.write.op].writeUsage }); + // [2] Use non-solid-color texture value. + const texelValue = { R: 0, G: 1, B: 0, A: 1 }; -g.test('ww') - .desc( - ` + helper.performWriteOp(t.params.write, texelValue); + helper.ensureBoundary(t.params.boundary); + const readbackTexture = helper.performReadOp(t.params.read); + helper.ensureSubmit(); + + // Contents should be exactly the values written. + t.expectSingleColor(readbackTexture, helper.kTextureFormat, { + size: [...helper.kTextureSize, 1], + exp: texelValue + }); +}); + +g.test('ww'). +desc( + ` Perform a 'first' write operation on a texture subresource, followed by a 'second' write operation. Operations are separated by a 'boundary' (pass, encoder, queue-op, etc.). Test that the results are synchronized. The second write should overwrite the contents of the first.` - ) - .params(u => - u - .combine('boundary', kOperationBoundaries) - .expand('_context', p => kBoundaryInfo[p.boundary].contexts) - .expandWithParams(function* ({ _context }) { - for (const first of kAllWriteOps) { - for (const second of kAllWriteOps) { - if (checkOpsValidForContext([first, second], _context)) { - yield { - first: { op: first, in: _context[0] }, - second: { op: second, in: _context[1] }, - }; - } - } - } - }) - ) - .fn(t => { - const helper = new TextureSyncTestHelper(t, { - usage: - GPUTextureUsage.COPY_SRC | - kOpInfo[t.params.first.op].writeUsage | - kOpInfo[t.params.second.op].writeUsage, - }); - // [2] Use non-solid-color texture value. - const texelValue1 = { R: 1, G: 0, B: 0, A: 1 }; - const texelValue2 = { R: 0, G: 1, B: 0, A: 1 }; - - helper.performWriteOp(t.params.first, texelValue1); - helper.ensureBoundary(t.params.boundary); - helper.performWriteOp(t.params.second, texelValue2); - helper.ensureSubmit(); - - // Read back the contents so we can test the result. - const readbackTexture = helper.performReadOp({ op: 't2t-copy', in: 'command-encoder' }); - helper.ensureSubmit(); - - // Contents should be the second value written. - t.expectSingleColor(readbackTexture, helper.kTextureFormat, { - size: [...helper.kTextureSize, 1], - exp: texelValue2, - }); +). +params((u) => +u. +combine('boundary', kOperationBoundaries). +expand('_context', (p) => kBoundaryInfo[p.boundary].contexts). +expandWithParams(function* ({ _context }) { + for (const first of kAllWriteOps) { + for (const second of kAllWriteOps) { + if (checkOpsValidForContext([first, second], _context)) { + yield { + first: { op: first, in: _context[0] }, + second: { op: second, in: _context[1] } + }; + } + } + } +}) +). +fn((t) => { + const helper = new TextureSyncTestHelper(t, { + usage: + GPUTextureUsage.COPY_SRC | + kOpInfo[t.params.first.op].writeUsage | + kOpInfo[t.params.second.op].writeUsage }); + // [2] Use non-solid-color texture value. + const texelValue1 = { R: 1, G: 0, B: 0, A: 1 }; + const texelValue2 = { R: 0, G: 1, B: 0, A: 1 }; -g.test('rw,single_pass,load_store') - .desc( - ` + helper.performWriteOp(t.params.first, texelValue1); + helper.ensureBoundary(t.params.boundary); + helper.performWriteOp(t.params.second, texelValue2); + helper.ensureSubmit(); + + // Read back the contents so we can test the result. + const readbackTexture = helper.performReadOp({ op: 't2t-copy', in: 'command-encoder' }); + helper.ensureSubmit(); + + // Contents should be the second value written. + t.expectSingleColor(readbackTexture, helper.kTextureFormat, { + size: [...helper.kTextureSize, 1], + exp: texelValue2 + }); +}); + +g.test('rw,single_pass,load_store'). +desc( + ` TODO: Test memory synchronization when loading from a texture subresource in a single pass and storing to it.` - ) - .unimplemented(); +). +unimplemented(); -g.test('rw,single_pass,load_resolve') - .desc( - ` +g.test('rw,single_pass,load_resolve'). +desc( + ` TODO: Test memory synchronization when loading from a texture subresource in a single pass and resolving to it.` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/texture_sync_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/texture_sync_test.js index 35b868eaa46..f23af118bb1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/texture_sync_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/memory_sync/texture/texture_sync_test.js @@ -1,74 +1,90 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { GPUConst } from '../../../../constants.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { GPUConst } from '../../../../constants.js'; export const kAllWriteOps = [ - 'write-texture', - 'b2t-copy', - 't2t-copy', - 'storage', - 'attachment-store', - 'attachment-resolve', -]; +'write-texture', +'b2t-copy', +'t2t-copy', +'storage', +'attachment-store', +'attachment-resolve']; + + export const kAllReadOps = ['t2b-copy', 't2t-copy', 'sample']; + + + + + + + + + + /** * Mapping of Op to the OperationContext(s) it is valid in */ -export const kOpInfo = { +export const kOpInfo = + +{ 'write-texture': { contexts: ['queue'], readUsage: 0, - writeUsage: GPUConst.TextureUsage.COPY_DST, + writeUsage: GPUConst.TextureUsage.COPY_DST }, 'b2t-copy': { contexts: ['command-encoder'], readUsage: 0, - writeUsage: GPUConst.TextureUsage.COPY_DST, + writeUsage: GPUConst.TextureUsage.COPY_DST }, 't2t-copy': { contexts: ['command-encoder'], readUsage: GPUConst.TextureUsage.COPY_SRC, - writeUsage: GPUConst.TextureUsage.COPY_DST, + writeUsage: GPUConst.TextureUsage.COPY_DST }, 't2b-copy': { contexts: ['command-encoder'], readUsage: GPUConst.TextureUsage.COPY_SRC, - writeUsage: 0, + writeUsage: 0 }, storage: { contexts: ['compute-pass-encoder', 'render-pass-encoder', 'render-bundle-encoder'], readUsage: 0, - writeUsage: GPUConst.TextureUsage.STORAGE, + writeUsage: GPUConst.TextureUsage.STORAGE }, sample: { contexts: ['compute-pass-encoder', 'render-pass-encoder', 'render-bundle-encoder'], readUsage: GPUConst.TextureUsage.SAMPLED, - writeUsage: 0, + writeUsage: 0 }, 'attachment-store': { contexts: ['command-encoder'], readUsage: 0, - writeUsage: GPUConst.TextureUsage.RENDER_ATTACHMENT, + writeUsage: GPUConst.TextureUsage.RENDER_ATTACHMENT }, 'attachment-resolve': { contexts: ['command-encoder'], readUsage: 0, - writeUsage: GPUConst.TextureUsage.RENDER_ATTACHMENT, - }, + writeUsage: GPUConst.TextureUsage.RENDER_ATTACHMENT + } }; -export function checkOpsValidForContext(ops, context) { +export function checkOpsValidForContext( +ops, +context) +{ const valid = - kOpInfo[ops[0]].contexts.includes(context[0]) && kOpInfo[ops[1]].contexts.includes(context[1]); + kOpInfo[ops[0]].contexts.includes(context[0]) && kOpInfo[ops[1]].contexts.includes(context[1]); if (!valid) return false; if ( - context[0] === 'render-bundle-encoder' || - context[0] === 'render-pass-encoder' || - context[1] === 'render-bundle-encoder' || - context[1] === 'render-pass-encoder' - ) { + context[0] === 'render-bundle-encoder' || + context[0] === 'render-pass-encoder' || + context[1] === 'render-bundle-encoder' || + context[1] === 'render-pass-encoder') + { // In a render pass, it is invalid to use a resource as both writable and another usage. // Also, for storage+storage usage, the application is opting into racy behavior. // The storage+storage case is also skipped as the results cannot be reliably tested. @@ -91,7 +107,6 @@ export function checkOpsValidForContext(ops, context) { // These don't occur in a render pass. return true; } - break; case 'b2t-copy': case 'sample': @@ -101,10 +116,9 @@ export function checkOpsValidForContext(ops, context) { // These are not write usages, or don't occur in a render pass. break; } - return true; }; return checkImpl(ops[0], ops[1]) && checkImpl(ops[1], ops[0]); } return true; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/onSubmittedWorkDone.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/onSubmittedWorkDone.spec.js index 6f549c73ade..e6d6fae9b56 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/onSubmittedWorkDone.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/onSubmittedWorkDone.spec.js @@ -1,57 +1,56 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for the behavior of GPUQueue.onSubmittedWorkDone(). Note that any promise timeouts will be detected by the framework. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { range } from '../../../common/util/util.js'; import { GPUTest } from '../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('without_work') - .desc(`Await onSubmittedWorkDone once without having submitted any work.`) - .fn(async t => { +g.test('without_work'). +desc(`Await onSubmittedWorkDone once without having submitted any work.`). +fn(async (t) => { + await t.queue.onSubmittedWorkDone(); +}); + +g.test('with_work'). +desc(`Await onSubmittedWorkDone once after submitting some work (writeBuffer).`). +fn(async (t) => { + const buffer = t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }); + t.queue.writeBuffer(buffer, 0, new Uint8Array(4)); + await t.queue.onSubmittedWorkDone(); +}); + +g.test('many,serial'). +desc(`Await 1000 onSubmittedWorkDone calls in serial.`). +fn(async (t) => { + for (let i = 0; i < 1000; ++i) { await t.queue.onSubmittedWorkDone(); - }); + } +}); -g.test('with_work') - .desc(`Await onSubmittedWorkDone once after submitting some work (writeBuffer).`) - .fn(async t => { - const buffer = t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }); - t.queue.writeBuffer(buffer, 0, new Uint8Array(4)); - await t.queue.onSubmittedWorkDone(); - }); +g.test('many,parallel'). +desc(`Await 1000 onSubmittedWorkDone calls in parallel with Promise.all().`). +fn(async (t) => { + const promises = range(1000, () => t.queue.onSubmittedWorkDone()); + await Promise.all(promises); +}); -g.test('many,serial') - .desc(`Await 1000 onSubmittedWorkDone calls in serial.`) - .fn(async t => { - for (let i = 0; i < 1000; ++i) { - await t.queue.onSubmittedWorkDone(); - } - }); - -g.test('many,parallel') - .desc(`Await 1000 onSubmittedWorkDone calls in parallel with Promise.all().`) - .fn(async t => { - const promises = range(1000, () => t.queue.onSubmittedWorkDone()); - await Promise.all(promises); - }); - -g.test('many,parallel_order') - .desc(`Issue 200 onSubmittedWorkDone calls and make sure they resolve in the right order.`) - .fn(async t => { - const promises = []; - let lastResolved = -1; - for (const i of range(200, i => i)) { - promises.push( - t.queue.onSubmittedWorkDone().then(() => { - t.expect(i === lastResolved + 1); - lastResolved++; - }) - ); - } - await Promise.all(promises); - }); +g.test('many,parallel_order'). +desc(`Issue 200 onSubmittedWorkDone calls and make sure they resolve in the right order.`). +fn(async (t) => { + const promises = []; + let lastResolved = -1; + for (const i of range(200, (i) => i)) { + promises.push( + t.queue.onSubmittedWorkDone().then(() => { + t.expect(i === lastResolved + 1); + lastResolved++; + }) + ); + } + await Promise.all(promises); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/pipeline/default_layout.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/pipeline/default_layout.spec.js index 7d441d2c9de..1886c81b310 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/pipeline/default_layout.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/pipeline/default_layout.spec.js @@ -1,28 +1,27 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for default pipeline layouts. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('getBindGroupLayout_js_object') - .desc( - `Test that getBindGroupLayout returns [TODO: the same or a different, needs spec] object +g.test('getBindGroupLayout_js_object'). +desc( + `Test that getBindGroupLayout returns [TODO: the same or a different, needs spec] object each time.` - ) - .unimplemented(); +). +unimplemented(); -g.test('incompatible_with_explicit') - .desc(`Test that default bind group layouts are never compatible with explicitly created ones.`) - .unimplemented(); +g.test('incompatible_with_explicit'). +desc(`Test that default bind group layouts are never compatible with explicitly created ones.`). +unimplemented(); -g.test('layout') - .desc( - `Test that bind group layouts of the default pipeline layout are correct by passing various +g.test('layout'). +desc( + `Test that bind group layouts of the default pipeline layout are correct by passing various shaders and then checking their computed bind group layouts are compatible with particular bind groups.` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/queue/writeBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/queue/writeBuffer.spec.js index 4e59843c95e..261b756a7bb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/queue/writeBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/queue/writeBuffer.spec.js @@ -1,21 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = 'Operation tests for GPUQueue.writeBuffer()'; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = 'Operation tests for GPUQueue.writeBuffer()';import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { memcpy, range } from '../../../../common/util/util.js'; import { GPUTest } from '../../../gpu_test.js'; import { align } from '../../../util/math.js'; const kTypedArrays = [ - 'Uint8Array', - 'Uint16Array', - 'Uint32Array', - 'Int8Array', - 'Int16Array', - 'Int32Array', - 'Float32Array', - 'Float64Array', -]; +'Uint8Array', +'Uint16Array', +'Uint32Array', +'Int8Array', +'Int16Array', +'Int32Array', +'Float32Array', +'Float64Array']; + + + + + + + + + + class F extends GPUTest { calculateRequiredBufferSize(writes) { @@ -31,7 +39,7 @@ class F extends GPUTest { // Calculate the number of bytes written to the buffer. data is always an array of elements. let bytesWritten = - data.length * TypedArrayConstructor.BYTES_PER_ELEMENT - (dataOffset || 0) * bytesPerElement; + data.length * TypedArrayConstructor.BYTES_PER_ELEMENT - (dataOffset || 0) * bytesPerElement; if (dataSize) { // When defined, dataSize clamps the number of bytes written @@ -78,32 +86,32 @@ class F extends GPUTest { export const g = makeTestGroup(F); -const kTestData = range(16, i => i); +const kTestData = range(16, (i) => i); -g.test('array_types') - .desc('Tests that writeBuffer correctly handles different TypedArrays and ArrayBuffer.') - .params(u => - u // - .combine('arrayType', kTypedArrays) - .combine('useArrayBuffer', [false, true]) - ) - .fn(t => { - const { arrayType, useArrayBuffer } = t.params; - const dataOffset = 1; - const dataSize = 8; - t.testWriteBuffer({ - bufferOffset: 0, - arrayType, - data: kTestData, - dataOffset, - dataSize, - useArrayBuffer, - }); +g.test('array_types'). +desc('Tests that writeBuffer correctly handles different TypedArrays and ArrayBuffer.'). +params((u) => +u // +.combine('arrayType', kTypedArrays). +combine('useArrayBuffer', [false, true]) +). +fn((t) => { + const { arrayType, useArrayBuffer } = t.params; + const dataOffset = 1; + const dataSize = 8; + t.testWriteBuffer({ + bufferOffset: 0, + arrayType, + data: kTestData, + dataOffset, + dataSize, + useArrayBuffer }); +}); -g.test('multiple_writes_at_different_offsets_and_sizes') - .desc( - ` +g.test('multiple_writes_at_different_offsets_and_sizes'). +desc( + ` Tests that writeBuffer currently handles different offsets and writes. This includes: - Non-overlapping TypedArrays and ArrayLists - Overlapping TypedArrays and ArrayLists @@ -112,122 +120,116 @@ Tests that writeBuffer currently handles different offsets and writes. This incl - Unaligned source - Multiple overlapping writes with decreasing sizes ` - ) - .paramsSubcasesOnly([ - { - // Concatenate 2 Uint32Arrays - writes: [ - { - bufferOffset: 0, - data: kTestData, - arrayType: 'Uint32Array', - useArrayBuffer: false, - dataOffset: 2, - dataSize: 2, - }, // [2, 3] - { - bufferOffset: 2 * Uint32Array.BYTES_PER_ELEMENT, - data: kTestData, - arrayType: 'Uint32Array', - useArrayBuffer: false, - dataOffset: 0, - dataSize: 2, - }, // [0, 1] - ], // Expected [2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] - }, - { - // Concatenate 2 Uint8Arrays - writes: [ - { bufferOffset: 0, data: [0, 1, 2, 3], arrayType: 'Uint8Array', useArrayBuffer: false }, - { bufferOffset: 4, data: [4, 5, 6, 7], arrayType: 'Uint8Array', useArrayBuffer: false }, - ], - // Expected [0, 1, 2, 3, 4, 5, 6, 7] - }, - { - // Overlap in the middle - writes: [ - { bufferOffset: 0, data: kTestData, arrayType: 'Uint8Array', useArrayBuffer: false }, - { bufferOffset: 4, data: [0], arrayType: 'Uint32Array', useArrayBuffer: false }, - ], - // Expected [0, 1, 2, 3, 0, 0 ,0 ,0, 8, 9, 10, 11, 12, 13, 14, 15] - }, - { - // Overlapping arrayLists - writes: [ - { - bufferOffset: 0, - data: kTestData, - arrayType: 'Uint32Array', - useArrayBuffer: true, - dataOffset: 2, - dataSize: 4 * Uint32Array.BYTES_PER_ELEMENT, - }, - { bufferOffset: 4, data: [0x04030201], arrayType: 'Uint32Array', useArrayBuffer: true }, - ], - // Expected [0, 0, 1, 0, 1, 2, 3, 4, 0, 0, 3, 0, 0, 0, 4, 0] - }, - { - // Write over with empty buffer - writes: [ - { bufferOffset: 0, data: kTestData, arrayType: 'Uint8Array', useArrayBuffer: false }, - { bufferOffset: 0, data: [], arrayType: 'Uint8Array', useArrayBuffer: false }, - ], - // Expected [0, 1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10, 11, 12, 13, 14, 15] - }, - { - // Zero buffer - writes: [{ bufferOffset: 0, data: [], arrayType: 'Uint8Array', useArrayBuffer: false }], - }, // Expected [] - { - // Unaligned source - writes: [ - { - bufferOffset: 0, - data: [0x77, ...kTestData], - arrayType: 'Uint8Array', - useArrayBuffer: false, - dataOffset: 1, - }, - ], - // Expected [0, 1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10, 11, 12, 13, 14, 15] - }, - { - // Multiple overlapping writes - writes: [ - { - bufferOffset: 0, - data: [0x05050505, 0x05050505, 0x05050505, 0x05050505, 0x05050505], - arrayType: 'Uint32Array', - useArrayBuffer: false, - }, - { - bufferOffset: 0, - data: [0x04040404, 0x04040404, 0x04040404, 0x04040404], - arrayType: 'Uint32Array', - useArrayBuffer: false, - }, - { - bufferOffset: 0, - data: [0x03030303, 0x03030303, 0x03030303], - arrayType: 'Uint32Array', - useArrayBuffer: false, - }, - { - bufferOffset: 0, - data: [0x02020202, 0x02020202], - arrayType: 'Uint32Array', - useArrayBuffer: false, - }, - { - bufferOffset: 0, - data: [0x01010101], - arrayType: 'Uint32Array', - useArrayBuffer: false, - }, - ], - // Expected [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5] - }, - ]) - .fn(t => { - t.testWriteBuffer(...t.params.writes); - }); +). +paramsSubcasesOnly([ +{ + // Concatenate 2 Uint32Arrays + writes: [ + { + bufferOffset: 0, + data: kTestData, + arrayType: 'Uint32Array', + useArrayBuffer: false, + dataOffset: 2, + dataSize: 2 + }, // [2, 3] + { + bufferOffset: 2 * Uint32Array.BYTES_PER_ELEMENT, + data: kTestData, + arrayType: 'Uint32Array', + useArrayBuffer: false, + dataOffset: 0, + dataSize: 2 + } // [0, 1] + ] // Expected [2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] +}, +{ + // Concatenate 2 Uint8Arrays + writes: [ + { bufferOffset: 0, data: [0, 1, 2, 3], arrayType: 'Uint8Array', useArrayBuffer: false }, + { bufferOffset: 4, data: [4, 5, 6, 7], arrayType: 'Uint8Array', useArrayBuffer: false }] + // Expected [0, 1, 2, 3, 4, 5, 6, 7] +}, +{ + // Overlap in the middle + writes: [ + { bufferOffset: 0, data: kTestData, arrayType: 'Uint8Array', useArrayBuffer: false }, + { bufferOffset: 4, data: [0], arrayType: 'Uint32Array', useArrayBuffer: false }] + // Expected [0, 1, 2, 3, 0, 0 ,0 ,0, 8, 9, 10, 11, 12, 13, 14, 15] +}, +{ + // Overlapping arrayLists + writes: [ + { + bufferOffset: 0, + data: kTestData, + arrayType: 'Uint32Array', + useArrayBuffer: true, + dataOffset: 2, + dataSize: 4 * Uint32Array.BYTES_PER_ELEMENT + }, + { bufferOffset: 4, data: [0x04030201], arrayType: 'Uint32Array', useArrayBuffer: true }] + // Expected [0, 0, 1, 0, 1, 2, 3, 4, 0, 0, 3, 0, 0, 0, 4, 0] +}, +{ + // Write over with empty buffer + writes: [ + { bufferOffset: 0, data: kTestData, arrayType: 'Uint8Array', useArrayBuffer: false }, + { bufferOffset: 0, data: [], arrayType: 'Uint8Array', useArrayBuffer: false }] + // Expected [0, 1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10, 11, 12, 13, 14, 15] +}, +{ + // Zero buffer + writes: [{ bufferOffset: 0, data: [], arrayType: 'Uint8Array', useArrayBuffer: false }] +}, // Expected [] +{ + // Unaligned source + writes: [ + { + bufferOffset: 0, + data: [0x77, ...kTestData], + arrayType: 'Uint8Array', + useArrayBuffer: false, + dataOffset: 1 + }] + // Expected [0, 1, 2, 3, 4, 5 ,6 ,7, 8, 9, 10, 11, 12, 13, 14, 15] +}, +{ + // Multiple overlapping writes + writes: [ + { + bufferOffset: 0, + data: [0x05050505, 0x05050505, 0x05050505, 0x05050505, 0x05050505], + arrayType: 'Uint32Array', + useArrayBuffer: false + }, + { + bufferOffset: 0, + data: [0x04040404, 0x04040404, 0x04040404, 0x04040404], + arrayType: 'Uint32Array', + useArrayBuffer: false + }, + { + bufferOffset: 0, + data: [0x03030303, 0x03030303, 0x03030303], + arrayType: 'Uint32Array', + useArrayBuffer: false + }, + { + bufferOffset: 0, + data: [0x02020202, 0x02020202], + arrayType: 'Uint32Array', + useArrayBuffer: false + }, + { + bufferOffset: 0, + data: [0x01010101], + arrayType: 'Uint32Array', + useArrayBuffer: false + }] + // Expected [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5] +}] +). +fn((t) => { + t.testWriteBuffer(...t.params.writes); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/reflection.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/reflection.spec.js index f2e53d68f73..3fd7746ebed 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/reflection.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/reflection.spec.js @@ -1,138 +1,290 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that object attributes which reflect the object's creation properties are properly set. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { GPUConst } from '../../constants.js'; import { GPUTest } from '../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('buffer_reflection_attributes') - .desc(`For every buffer attribute, the corresponding descriptor value is carried over.`) - .paramsSubcasesOnly(u => - u.combine('descriptor', [ - { size: 4, usage: GPUConst.BufferUsage.VERTEX }, - { - size: 16, - usage: - GPUConst.BufferUsage.STORAGE | - GPUConst.BufferUsage.COPY_SRC | - GPUConst.BufferUsage.UNIFORM, - }, - { size: 32, usage: GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.COPY_DST }, - { - size: 32, - usage: GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.MAP_WRITE, - invalid: true, - }, - ]) - ) - .fn(t => { - const { descriptor } = t.params; - - t.expectValidationError(() => { - const buffer = t.device.createBuffer(descriptor); - - t.expect(buffer.size === descriptor.size); - t.expect(buffer.usage === descriptor.usage); - }, descriptor.invalid === true); - }); - -g.test('texture_reflection_attributes') - .desc(`For every texture attribute, the corresponding descriptor value is carried over.`) - .paramsSubcasesOnly(u => - u.combine('descriptor', [ - { - size: { width: 4, height: 4 }, - format: 'rgba8unorm', - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - }, - { - size: { width: 8, height: 8, depthOrArrayLayers: 8 }, - format: 'bgra8unorm', - usage: GPUConst.TextureUsage.RENDER_ATTACHMENT | GPUConst.TextureUsage.COPY_SRC, - }, - { - size: [4, 4], - format: 'rgba8unorm', - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - mipLevelCount: 2, - }, - { - size: [16, 16, 16], - format: 'rgba8unorm', - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - dimension: '3d', - }, - { - size: [32], - format: 'rgba8unorm', - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - dimension: '1d', - }, - { - size: { width: 4, height: 4 }, - format: 'rgba8unorm', - usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, - sampleCount: 4, - }, - { - size: { width: 4, height: 4 }, - format: 'rgba8unorm', - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - sampleCount: 4, - invalid: true, - }, - ]) - ) - .fn(t => { - const { descriptor } = t.params; - - let width; - let height; - let depthOrArrayLayers; - if (Array.isArray(descriptor.size)) { - width = descriptor.size[0]; - height = descriptor.size[1] || 1; - depthOrArrayLayers = descriptor.size[2] || 1; - } else { - width = descriptor.size.width; - height = descriptor.size.height || 1; - depthOrArrayLayers = descriptor.size.depthOrArrayLayers || 1; +function* extractValuePropertyKeys(obj) { + for (const key in obj) { + if (typeof obj[key] !== 'function') { + yield key; } + } +} - t.expectValidationError(() => { - const texture = t.device.createTexture(descriptor); +const kBufferSubcases = - t.expect(texture.width === width); - t.expect(texture.height === height); - t.expect(texture.depthOrArrayLayers === depthOrArrayLayers); - t.expect(texture.format === descriptor.format); - t.expect(texture.usage === descriptor.usage); - t.expect(texture.dimension === (descriptor.dimension || '2d')); - t.expect(texture.mipLevelCount === (descriptor.mipLevelCount || 1)); - t.expect(texture.sampleCount === (descriptor.sampleCount || 1)); - }, descriptor.invalid === true); - }); -g.test('query_set_reflection_attributes') - .desc(`For every queue attribute, the corresponding descriptor value is carried over.`) - .paramsSubcasesOnly(u => - u.combine('descriptor', [ - { type: 'occlusion', count: 4 }, - { type: 'occlusion', count: 16 }, - { type: 'occlusion', count: 8193, invalid: true }, - ]) - ) - .fn(t => { - const { descriptor } = t.params; - t.expectValidationError(() => { - const querySet = t.device.createQuerySet(descriptor); - t.expect(querySet.type === descriptor.type); - t.expect(querySet.count === descriptor.count); - }, descriptor.invalid === true); - }); +[ +{ size: 4, usage: GPUConst.BufferUsage.VERTEX }, +{ + size: 16, + usage: + GPUConst.BufferUsage.STORAGE | GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.UNIFORM +}, +{ size: 32, usage: GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.COPY_DST }, +{ size: 40, usage: GPUConst.BufferUsage.INDEX, label: 'some label' }, +{ + size: 32, + usage: GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.MAP_WRITE, + invalid: true +}]; + + +g.test('buffer_reflection_attributes'). +desc(`For every buffer attribute, the corresponding descriptor value is carried over.`). +paramsSubcasesOnly((u) => u.combine('descriptor', kBufferSubcases)). +fn((t) => { + const { descriptor } = t.params; + + t.expectValidationError(() => { + const buffer = t.device.createBuffer(descriptor); + + t.expect(buffer.size === descriptor.size); + t.expect(buffer.usage === descriptor.usage); + }, descriptor.invalid === true); +}); + +g.test('buffer_creation_from_reflection'). +desc( + ` + Check that you can create a buffer from a buffer's reflection. + This check is to insure that as WebGPU develops this path doesn't + suddenly break because of new reflection. + ` +). +paramsSubcasesOnly((u) => +u.combine('descriptor', kBufferSubcases).filter((p) => !p.descriptor.invalid) +). + +fn((t) => { + const { descriptor } = t.params; + + const buffer = t.device.createBuffer(descriptor); + t.trackForCleanup(buffer); + const buffer2 = t.device.createBuffer(buffer); + t.trackForCleanup(buffer2); + + const bufferAsObject = buffer; + const buffer2AsObject = buffer2; + const keys = [...extractValuePropertyKeys(bufferAsObject)]; + + // Sanity check + t.expect(keys.includes('size')); + t.expect(keys.includes('usage')); + t.expect(keys.includes('label')); + + for (const key of keys) { + t.expect(bufferAsObject[key] === buffer2AsObject[key], key); + } +}); + +const kTextureSubcases = + + + + + + + + +[ +{ + size: { width: 4, height: 4 }, + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.TEXTURE_BINDING +}, +{ + size: { width: 4, height: 4 }, + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.TEXTURE_BINDING, + label: 'some label' +}, +{ + size: { width: 8, height: 8, depthOrArrayLayers: 8 }, + format: 'bgra8unorm', + usage: GPUConst.TextureUsage.RENDER_ATTACHMENT | GPUConst.TextureUsage.COPY_SRC +}, +{ + size: [4, 4], + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.TEXTURE_BINDING, + mipLevelCount: 2 +}, +{ + size: [16, 16, 16], + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.TEXTURE_BINDING, + dimension: '3d' +}, +{ + size: [32], + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.TEXTURE_BINDING, + dimension: '1d' +}, +{ + size: { width: 4, height: 4 }, + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, + sampleCount: 4 +}, +{ + size: { width: 4, height: 4 }, + format: 'rgba8unorm', + usage: GPUConst.TextureUsage.TEXTURE_BINDING, + sampleCount: 4, + invalid: true +}]; + + +g.test('texture_reflection_attributes'). +desc(`For every texture attribute, the corresponding descriptor value is carried over.`). +paramsSubcasesOnly((u) => u.combine('descriptor', kTextureSubcases)). +fn((t) => { + const { descriptor } = t.params; + + let width; + let height; + let depthOrArrayLayers; + if (Array.isArray(descriptor.size)) { + width = descriptor.size[0]; + height = descriptor.size[1] || 1; + depthOrArrayLayers = descriptor.size[2] || 1; + } else { + width = descriptor.size.width; + height = descriptor.size.height || 1; + depthOrArrayLayers = descriptor.size.depthOrArrayLayers || 1; + } + + t.expectValidationError(() => { + const texture = t.device.createTexture(descriptor); + + t.expect(texture.width === width); + t.expect(texture.height === height); + t.expect(texture.depthOrArrayLayers === depthOrArrayLayers); + t.expect(texture.format === descriptor.format); + t.expect(texture.usage === descriptor.usage); + t.expect(texture.dimension === (descriptor.dimension || '2d')); + t.expect(texture.mipLevelCount === (descriptor.mipLevelCount || 1)); + t.expect(texture.sampleCount === (descriptor.sampleCount || 1)); + }, descriptor.invalid === true); +}); + + + + + +g.test('texture_creation_from_reflection'). +desc( + ` + Check that you can create a texture from a texture's reflection. + This check is to insure that as WebGPU develops this path doesn't + suddenly break because of new reflection. + ` +). +paramsSubcasesOnly((u) => +u.combine('descriptor', kTextureSubcases).filter((p) => !p.descriptor.invalid) +). +fn((t) => { + const { descriptor } = t.params; + + const texture = t.device.createTexture(descriptor); + t.trackForCleanup(texture); + const textureWithSize = texture; + textureWithSize.size = [texture.width, texture.height, texture.depthOrArrayLayers]; + const texture2 = t.device.createTexture(textureWithSize); + t.trackForCleanup(texture2); + + const textureAsObject = texture; + const texture2AsObject = texture2; + const keys = [...extractValuePropertyKeys(textureAsObject)].filter((k) => k !== 'size'); + + // Sanity check + t.expect(keys.includes('format')); + t.expect(keys.includes('usage')); + t.expect(keys.includes('label')); + + for (const key of keys) { + t.expect(textureAsObject[key] === texture2AsObject[key], key); + } + + // MAINTENANCE_TODO: Check this if it is made possible by a spec change. + // + // texture3 = t.device.createTexture({ + // ...texture, + // size: [texture.width, texture.height, texture.depthOrArrayLayers], + // }); + // + // and this + // + // texture3 = t.device.createTexture({ + // size: [texture.width, texture.height, texture.depthOrArrayLayers], + // ...texture, + // }); +}); + +const kQuerySetSubcases = + + + + +[ +{ type: 'occlusion', count: 4 }, +{ type: 'occlusion', count: 16 }, +{ type: 'occlusion', count: 32, label: 'some label' }, +{ type: 'occlusion', count: 8193, invalid: true }]; + + +g.test('query_set_reflection_attributes'). +desc(`For every queue attribute, the corresponding descriptor value is carried over.`). +paramsSubcasesOnly((u) => u.combine('descriptor', kQuerySetSubcases)). +fn((t) => { + const { descriptor } = t.params; + + t.expectValidationError(() => { + const querySet = t.device.createQuerySet(descriptor); + + t.expect(querySet.type === descriptor.type); + t.expect(querySet.count === descriptor.count); + }, descriptor.invalid === true); +}); + +g.test('query_set_creation_from_reflection'). +desc( + ` + Check that you can create a queryset from a queryset's reflection. + This check is to insure that as WebGPU develops this path doesn't + suddenly break because of new reflection. + ` +). +paramsSubcasesOnly((u) => +u.combine('descriptor', kQuerySetSubcases).filter((p) => !p.descriptor.invalid) +). +fn((t) => { + const { descriptor } = t.params; + + const querySet = t.device.createQuerySet(descriptor); + t.trackForCleanup(querySet); + const querySet2 = t.device.createQuerySet(querySet); + t.trackForCleanup(querySet2); + + const querySetAsObject = querySet; + const querySet2AsObject = querySet2; + const keys = [...extractValuePropertyKeys(querySetAsObject)]; + + // Sanity check + t.expect(keys.includes('type')); + t.expect(keys.includes('count')); + t.expect(keys.includes('label')); + + for (const key of keys) { + t.expect(querySetAsObject[key] === querySet2AsObject[key], key); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/clear_value.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/clear_value.spec.js index 7f8749d7edb..5c127533ba8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/clear_value.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/clear_value.spec.js @@ -1,88 +1,84 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for render pass clear values. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert } from '../../../../common/util/util.js'; import { kTextureFormatInfo, kDepthStencilFormats, - depthStencilFormatAspectSize, -} from '../../../format_info.js'; + depthStencilFormatAspectSize } from +'../../../format_info.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('stored') - .desc(`Test render pass clear values are stored at the end of an empty pass.`) - .unimplemented(); +g.test('stored'). +desc(`Test render pass clear values are stored at the end of an empty pass.`). +unimplemented(); -g.test('loaded') - .desc( - `Test render pass clear values are visible during the pass by doing some trivial blending +g.test('loaded'). +desc( + `Test render pass clear values are visible during the pass by doing some trivial blending with the attachment (e.g. add [0,0,0,0] to the color and verify the stored result).` - ) - .unimplemented(); +). +unimplemented(); -g.test('srgb') - .desc( - `Test that clear values on '-srgb' type attachments are interpreted as unencoded (linear), +g.test('srgb'). +desc( + `Test that clear values on '-srgb' type attachments are interpreted as unencoded (linear), not decoded from srgb to linear.` - ) - .unimplemented(); +). +unimplemented(); -g.test('layout') - .desc( - `Test that bind group layouts of the default pipeline layout are correct by passing various +g.test('layout'). +desc( + `Test that bind group layouts of the default pipeline layout are correct by passing various shaders and then checking their computed bind group layouts are compatible with particular bind groups.` - ) - .unimplemented(); +). +unimplemented(); -g.test('stencil_clear_value') - .desc( - `Test that when stencilLoadOp is "clear", the stencil aspect should be correctly cleared by +g.test('stencil_clear_value'). +desc( + `Test that when stencilLoadOp is "clear", the stencil aspect should be correctly cleared by GPURenderPassDepthStencilAttachment.stencilClearValue, which will be converted to the type of the stencil aspect of view by taking the same number of LSBs as the number of bits in the stencil aspect of one texel block of view.` - ) - .params(u => - u - .combine('stencilFormat', kDepthStencilFormats) - .combine('stencilClearValue', [0, 1, 0xff, 0x100 + 2, 0x10000 + 3]) - .combine('applyStencilClearValueAsStencilReferenceValue', [true, false]) - .filter(t => !!kTextureFormatInfo[t.stencilFormat].stencil) - ) - .beforeAllSubcases(t => { - const { stencilFormat } = t.params; - const info = kTextureFormatInfo[stencilFormat]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - stencilFormat, - stencilClearValue, - applyStencilClearValueAsStencilReferenceValue, - } = t.params; +). +params((u) => +u. +combine('stencilFormat', kDepthStencilFormats). +combine('stencilClearValue', [0, 1, 0xff, 0x100 + 2, 0x10000 + 3]). +combine('applyStencilClearValueAsStencilReferenceValue', [true, false]). +filter((t) => !!kTextureFormatInfo[t.stencilFormat].stencil) +). +beforeAllSubcases((t) => { + const { stencilFormat } = t.params; + const info = kTextureFormatInfo[stencilFormat]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { stencilFormat, stencilClearValue, applyStencilClearValueAsStencilReferenceValue } = + t.params; - const kSize = [1, 1, 1]; - const colorFormat = 'rgba8unorm'; - const stencilTexture = t.device.createTexture({ - format: stencilFormat, - size: kSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }); - const colorTexture = t.device.createTexture({ - format: colorFormat, - size: kSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }); - const renderPipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + const kSize = [1, 1, 1]; + const colorFormat = 'rgba8unorm'; + const stencilTexture = t.device.createTexture({ + format: stencilFormat, + size: kSize, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC + }); + const colorTexture = t.device.createTexture({ + format: colorFormat, + size: kSize, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC + }); + const renderPipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main(@builtin(vertex_index) VertexIndex : u32)-> @builtin(position) vec4 { var pos : array, 6> = array, 6>( @@ -93,101 +89,100 @@ g.test('stencil_clear_value') vec2( 1.0, 1.0), vec2( 1.0, -1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: colorFormat }], + }` + }), + entryPoint: 'main', + targets: [{ format: colorFormat }] + }, + depthStencil: { + format: stencilFormat, + depthCompare: 'always', + depthWriteEnabled: false, + stencilFront: { + compare: 'equal' }, - depthStencil: { - format: stencilFormat, - depthCompare: 'always', - depthWriteEnabled: false, - stencilFront: { - compare: 'equal', - }, - stencilBack: { - compare: 'equal', - }, - }, - primitive: { - topology: 'triangle-list', - }, - }); - - const stencilAspectSizeInBytes = depthStencilFormatAspectSize(stencilFormat, 'stencil-only'); - assert(stencilAspectSizeInBytes > 0); - const expectedStencilValue = stencilClearValue & ((stencilAspectSizeInBytes << 8) - 1); - - // StencilReference used in setStencilReference will also be masked to the lowest valid bits, so - // no matter what we set in the rest high bits that will be masked out (different or same - // between stencilClearValue and stencilReference), the test will pass if and only if the valid - // lowest bits are the same. - const stencilReference = applyStencilClearValueAsStencilReferenceValue - ? stencilClearValue - : expectedStencilValue; - - const encoder = t.device.createCommandEncoder(); - - const depthStencilAttachment = { - view: stencilTexture.createView(), - depthClearValue: 0, - stencilLoadOp: 'clear', - stencilStoreOp: 'store', - stencilClearValue, - }; - if (kTextureFormatInfo[stencilFormat].depth) { - depthStencilAttachment.depthClearValue = 0; - depthStencilAttachment.depthLoadOp = 'clear'; - depthStencilAttachment.depthStoreOp = 'store'; + stencilBack: { + compare: 'equal' + } + }, + primitive: { + topology: 'triangle-list' } - const renderPassEncoder = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorTexture.createView(), - loadOp: 'clear', - storeOp: 'store', - clearValue: [1, 0, 0, 1], - }, - ], - - depthStencilAttachment, - }); - renderPassEncoder.setPipeline(renderPipeline); - renderPassEncoder.setStencilReference(stencilReference); - renderPassEncoder.draw(6); - renderPassEncoder.end(); - - const destinationBuffer = t.device.createBuffer({ - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - size: 4, - }); - t.trackForCleanup(destinationBuffer); - encoder.copyTextureToBuffer( - { - texture: stencilTexture, - aspect: 'stencil-only', - }, - { - buffer: destinationBuffer, - }, - [1, 1, 1] - ); - - t.queue.submit([encoder.finish()]); - - t.expectSingleColor(colorTexture, colorFormat, { - size: [1, 1, 1], - exp: { R: 0, G: 1, B: 0, A: 1 }, - }); - t.expectGPUBufferValuesEqual(destinationBuffer, new Uint8Array([expectedStencilValue])); }); + + const stencilAspectSizeInBytes = depthStencilFormatAspectSize(stencilFormat, 'stencil-only'); + assert(stencilAspectSizeInBytes > 0); + const expectedStencilValue = stencilClearValue & (stencilAspectSizeInBytes << 8) - 1; + + // StencilReference used in setStencilReference will also be masked to the lowest valid bits, so + // no matter what we set in the rest high bits that will be masked out (different or same + // between stencilClearValue and stencilReference), the test will pass if and only if the valid + // lowest bits are the same. + const stencilReference = applyStencilClearValueAsStencilReferenceValue ? + stencilClearValue : + expectedStencilValue; + + const encoder = t.device.createCommandEncoder(); + + const depthStencilAttachment = { + view: stencilTexture.createView(), + depthClearValue: 0, + stencilLoadOp: 'clear', + stencilStoreOp: 'store', + stencilClearValue + }; + if (kTextureFormatInfo[stencilFormat].depth) { + depthStencilAttachment.depthClearValue = 0; + depthStencilAttachment.depthLoadOp = 'clear'; + depthStencilAttachment.depthStoreOp = 'store'; + } + const renderPassEncoder = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorTexture.createView(), + loadOp: 'clear', + storeOp: 'store', + clearValue: [1, 0, 0, 1] + }], + + depthStencilAttachment + }); + renderPassEncoder.setPipeline(renderPipeline); + renderPassEncoder.setStencilReference(stencilReference); + renderPassEncoder.draw(6); + renderPassEncoder.end(); + + const destinationBuffer = t.device.createBuffer({ + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + size: 4 + }); + t.trackForCleanup(destinationBuffer); + encoder.copyTextureToBuffer( + { + texture: stencilTexture, + aspect: 'stencil-only' + }, + { + buffer: destinationBuffer + }, + [1, 1, 1] + ); + + t.queue.submit([encoder.finish()]); + + t.expectSingleColor(colorTexture, colorFormat, { + size: [1, 1, 1], + exp: { R: 0, G: 1, B: 0, A: 1 } + }); + t.expectGPUBufferValuesEqual(destinationBuffer, new Uint8Array([expectedStencilValue])); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/resolve.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/resolve.spec.js index c9984c65fe0..abcbe24bd89 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/resolve.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/resolve.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `API Operation Tests for RenderPass StoreOp. +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `API Operation Tests for RenderPass StoreOp. Tests a render pass with a resolveTarget resolves correctly for many combinations of: - number of color attachments, some with and some without a resolveTarget - renderPass storeOp set to {'store', 'discard'} @@ -13,47 +13,46 @@ Tests a render pass with a resolveTarget resolves correctly for many combination - TODO?: resolveTarget mip level {0, >0} (TODO?: different mip level from colorAttachment) - TODO?: resolveTarget {2d array layer, TODO: 3d slice} {0, >0} with {2d, TODO: 3d} resolveTarget (different z from colorAttachment) -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; const kSlotsToResolve = [ - [0, 2], - [1, 3], - [0, 1, 2, 3], -]; +[0, 2], +[1, 3], +[0, 1, 2, 3]]; + const kSize = 4; const kFormat = 'rgba8unorm'; export const g = makeTestGroup(TextureTestMixin(GPUTest)); -g.test('render_pass_resolve') - .params(u => - u - .combine('storeOperation', ['discard', 'store']) - .beginSubcases() - .combine('numColorAttachments', [2, 4]) - .combine('slotsToResolve', kSlotsToResolve) - .combine('resolveTargetBaseMipLevel', [0, 1]) - .combine('resolveTargetBaseArrayLayer', [0, 1]) - ) - .fn(t => { - const targets = []; - for (let i = 0; i < t.params.numColorAttachments; i++) { - targets.push({ format: kFormat }); - } +g.test('render_pass_resolve'). +params((u) => +u. +combine('storeOperation', ['discard', 'store']). +beginSubcases(). +combine('numColorAttachments', [2, 4]). +combine('slotsToResolve', kSlotsToResolve). +combine('resolveTargetBaseMipLevel', [0, 1]). +combine('resolveTargetBaseArrayLayer', [0, 1]) +). +fn((t) => { + const targets = []; + for (let i = 0; i < t.params.numColorAttachments; i++) { + targets.push({ format: kFormat }); + } - // These shaders will draw a white triangle into a texture. After draw, the top left - // half of the texture will be white, and the bottom right half will be unchanged. When this - // texture is resolved, there will be two distinct colors in each portion of the texture, as - // well as a line between the portions that contain the midpoint color due to the multisample - // resolve. - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + // These shaders will draw a white triangle into a texture. After draw, the top left + // half of the texture will be white, and the bottom right half will be unchanged. When this + // texture is resolved, there will be two distinct colors in each portion of the texture, as + // well as a line between the portions that contain the midpoint color due to the multisample + // resolve. + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main( @builtin(vertex_index) VertexIndex : u32 ) -> @builtin(position) vec4 { @@ -62,13 +61,13 @@ g.test('render_pass_resolve') vec2(-1.0, 1.0), vec2( 1.0, 1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` struct Output { @location(0) fragColor0 : vec4, @location(1) fragColor1 : vec4, @@ -83,102 +82,102 @@ g.test('render_pass_resolve') vec4(1.0, 1.0, 1.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0) ); - }`, - }), - entryPoint: 'main', - targets, - }, - primitive: { topology: 'triangle-list' }, - multisample: { count: 4 }, + }` + }), + entryPoint: 'main', + targets + }, + primitive: { topology: 'triangle-list' }, + multisample: { count: 4 } + }); + + const resolveTargets = []; + const renderPassColorAttachments = []; + + // The resolve target must be the same size as the color attachment. If we're resolving to mip + // level 1, the resolve target base mip level should be 2x the color attachment size. + const kResolveTargetSize = kSize << t.params.resolveTargetBaseMipLevel; + + for (let i = 0; i < t.params.numColorAttachments; i++) { + const colorAttachment = t.device.createTexture({ + format: kFormat, + size: { width: kSize, height: kSize, depthOrArrayLayers: 1 }, + sampleCount: 4, + mipLevelCount: 1, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); - const resolveTargets = []; - const renderPassColorAttachments = []; - - // The resolve target must be the same size as the color attachment. If we're resolving to mip - // level 1, the resolve target base mip level should be 2x the color attachment size. - const kResolveTargetSize = kSize << t.params.resolveTargetBaseMipLevel; - - for (let i = 0; i < t.params.numColorAttachments; i++) { + if (t.params.slotsToResolve.includes(i)) { const colorAttachment = t.device.createTexture({ format: kFormat, size: { width: kSize, height: kSize, depthOrArrayLayers: 1 }, sampleCount: 4, mipLevelCount: 1, usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); - if (t.params.slotsToResolve.includes(i)) { - const colorAttachment = t.device.createTexture({ - format: kFormat, - size: { width: kSize, height: kSize, depthOrArrayLayers: 1 }, - sampleCount: 4, - mipLevelCount: 1, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + const resolveTarget = t.device.createTexture({ + format: kFormat, + size: { + width: kResolveTargetSize, + height: kResolveTargetSize, + depthOrArrayLayers: t.params.resolveTargetBaseArrayLayer + 1 + }, + sampleCount: 1, + mipLevelCount: t.params.resolveTargetBaseMipLevel + 1, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); - const resolveTarget = t.device.createTexture({ - format: kFormat, - size: { - width: kResolveTargetSize, - height: kResolveTargetSize, - depthOrArrayLayers: t.params.resolveTargetBaseArrayLayer + 1, - }, - sampleCount: 1, - mipLevelCount: t.params.resolveTargetBaseMipLevel + 1, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + // Clear to black for the load operation. After the draw, the top left half of the attachment + // will be white and the bottom right half will be black. + renderPassColorAttachments.push({ + view: colorAttachment.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear', + storeOp: t.params.storeOperation, + resolveTarget: resolveTarget.createView({ + baseMipLevel: t.params.resolveTargetBaseMipLevel, + baseArrayLayer: t.params.resolveTargetBaseArrayLayer + }) + }); - // Clear to black for the load operation. After the draw, the top left half of the attachment - // will be white and the bottom right half will be black. - renderPassColorAttachments.push({ - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - storeOp: t.params.storeOperation, - resolveTarget: resolveTarget.createView({ - baseMipLevel: t.params.resolveTargetBaseMipLevel, - baseArrayLayer: t.params.resolveTargetBaseArrayLayer, - }), - }); - - resolveTargets.push(resolveTarget); - } else { - renderPassColorAttachments.push({ - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - storeOp: t.params.storeOperation, - }); - } + resolveTargets.push(resolveTarget); + } else { + renderPassColorAttachments.push({ + view: colorAttachment.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear', + storeOp: t.params.storeOperation + }); } + } - const encoder = t.device.createCommandEncoder(); + const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: renderPassColorAttachments, - }); - pass.setPipeline(pipeline); - pass.draw(3); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - // Verify the resolve targets contain the correct values. Note that we use z to specify the - // array layer from which to pull the pixels for testing. - const z = t.params.resolveTargetBaseArrayLayer; - for (const resolveTarget of resolveTargets) { - t.expectSinglePixelComparisonsAreOkInTexture( - { texture: resolveTarget, mipLevel: t.params.resolveTargetBaseMipLevel }, - [ - // Top left pixel should be {1.0, 1.0, 1.0, 1.0}. - { coord: { x: 0, y: 0, z }, exp: { R: 1.0, G: 1.0, B: 1.0, A: 1.0 } }, - // Bottom right pixel should be {0, 0, 0, 0}. - { coord: { x: kSize - 1, y: kSize - 1, z }, exp: { R: 0, G: 0, B: 0, A: 0 } }, - // Top right pixel should be {0.5, 0.5, 0.5, 0.5} due to the multisampled resolve. - { coord: { x: kSize - 1, y: 0, z }, exp: { R: 0.5, G: 0.5, B: 0.5, A: 0.5 } }, - ] - ); - } + const pass = encoder.beginRenderPass({ + colorAttachments: renderPassColorAttachments }); + pass.setPipeline(pipeline); + pass.draw(3); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + // Verify the resolve targets contain the correct values. Note that we use z to specify the + // array layer from which to pull the pixels for testing. + const z = t.params.resolveTargetBaseArrayLayer; + for (const resolveTarget of resolveTargets) { + t.expectSinglePixelComparisonsAreOkInTexture( + { texture: resolveTarget, mipLevel: t.params.resolveTargetBaseMipLevel }, + [ + // Top left pixel should be {1.0, 1.0, 1.0, 1.0}. + { coord: { x: 0, y: 0, z }, exp: { R: 1.0, G: 1.0, B: 1.0, A: 1.0 } }, + // Bottom right pixel should be {0, 0, 0, 0}. + { coord: { x: kSize - 1, y: kSize - 1, z }, exp: { R: 0, G: 0, B: 0, A: 0 } }, + // Top right pixel should be {0.5, 0.5, 0.5, 0.5} due to the multisampled resolve. + { coord: { x: kSize - 1, y: 0, z }, exp: { R: 0.5, G: 0.5, B: 0.5, A: 0.5 } }] + + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeOp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeOp.spec.js index 9dc3c27f580..16ce8466993 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeOp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeOp.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `API Operation Tests for RenderPass StoreOp. +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `API Operation Tests for RenderPass StoreOp. Test Coverage: @@ -27,15 +27,15 @@ TODO: test depth24plus and depth24plus-stencil8 formats TODO: test that depth and stencil aspects are set separately TODO: depth slice set to {'0', slice > '0'} for 3D textures - TODO: test with more interesting loadOp values`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; + TODO: test with more interesting loadOp values`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kTextureFormatInfo, kEncodableTextureFormats, - kSizedDepthStencilFormats, -} from '../../../format_info.js'; + kSizedDepthStencilFormats } from +'../../../format_info.js'; import { GPUTest } from '../../../gpu_test.js'; + // Test with a zero and non-zero mip. const kMipLevel = [0, 1]; const kMipLevelCount = 2; @@ -56,218 +56,217 @@ export const g = makeTestGroup(GPUTest); // Tests a render pass with both a color and depth stencil attachment to ensure store operations are // set independently. -g.test('render_pass_store_op,color_attachment_with_depth_stencil_attachment') - .params(u => - u // - .combine('colorStoreOperation', kStoreOps) - .combine('depthStencilStoreOperation', kStoreOps) - ) - .fn(t => { - // Create a basic color attachment. - const kColorFormat = 'rgba8unorm'; - const colorAttachment = t.device.createTexture({ - format: kColorFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const colorAttachmentView = colorAttachment.createView(); - - // Create a basic depth/stencil attachment. - const kDepthStencilFormat = 'depth32float'; - const depthStencilAttachment = t.device.createTexture({ - format: kDepthStencilFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - // Color load operation will clear to {1.0, 1.0, 1.0, 1.0}. - // Depth operation will clear to 1.0. - // Store operations are determined by test the params. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachmentView, - clearValue: { r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, - loadOp: 'clear', - storeOp: t.params.colorStoreOperation, - }, - ], - - depthStencilAttachment: { - view: depthStencilAttachment.createView(), - depthClearValue: 1.0, - depthLoadOp: 'clear', - depthStoreOp: t.params.depthStencilStoreOperation, - }, - }); - pass.end(); - - t.device.queue.submit([encoder.finish()]); - - // Check that the correct store operation occurred. - let expectedColorValue = {}; - if (t.params.colorStoreOperation === 'discard') { - // If colorStoreOp was clear, the texture should now contain {0.0, 0.0, 0.0, 0.0}. - expectedColorValue = { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }; - } else if (t.params.colorStoreOperation === 'store') { - // If colorStoreOP was store, the texture should still contain {1.0, 1.0, 1.0, 1.0}. - expectedColorValue = { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }; - } - t.expectSingleColor(colorAttachment, kColorFormat, { - size: [kHeight, kWidth, 1], - exp: expectedColorValue, - }); - - // Check that the correct store operation occurred. - let expectedDepthValue = {}; - if (t.params.depthStencilStoreOperation === 'discard') { - // If depthStencilStoreOperation was clear, the texture's depth component should be 0.0, and - // the stencil component should be 0.0. - expectedDepthValue = { Depth: 0.0 }; - } else if (t.params.depthStencilStoreOperation === 'store') { - // If depthStencilStoreOperation was store, the texture's depth component should be 1.0, and - // the stencil component should be 1.0. - expectedDepthValue = { Depth: 1.0 }; - } - t.expectSingleColor(depthStencilAttachment, kDepthStencilFormat, { - size: [kHeight, kWidth, 1], - exp: expectedDepthValue, - layout: { mipLevel: 0, aspect: 'depth-only' }, - }); +g.test('render_pass_store_op,color_attachment_with_depth_stencil_attachment'). +params((u) => +u // +.combine('colorStoreOperation', kStoreOps). +combine('depthStencilStoreOperation', kStoreOps) +). +fn((t) => { + // Create a basic color attachment. + const kColorFormat = 'rgba8unorm'; + const colorAttachment = t.device.createTexture({ + format: kColorFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); + const colorAttachmentView = colorAttachment.createView(); + + // Create a basic depth/stencil attachment. + const kDepthStencilFormat = 'depth32float'; + const depthStencilAttachment = t.device.createTexture({ + format: kDepthStencilFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + // Color load operation will clear to {1.0, 1.0, 1.0, 1.0}. + // Depth operation will clear to 1.0. + // Store operations are determined by test the params. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachmentView, + clearValue: { r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, + loadOp: 'clear', + storeOp: t.params.colorStoreOperation + }], + + depthStencilAttachment: { + view: depthStencilAttachment.createView(), + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: t.params.depthStencilStoreOperation + } + }); + pass.end(); + + t.device.queue.submit([encoder.finish()]); + + // Check that the correct store operation occurred. + let expectedColorValue = {}; + if (t.params.colorStoreOperation === 'discard') { + // If colorStoreOp was clear, the texture should now contain {0.0, 0.0, 0.0, 0.0}. + expectedColorValue = { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }; + } else if (t.params.colorStoreOperation === 'store') { + // If colorStoreOP was store, the texture should still contain {1.0, 1.0, 1.0, 1.0}. + expectedColorValue = { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }; + } + t.expectSingleColor(colorAttachment, kColorFormat, { + size: [kHeight, kWidth, 1], + exp: expectedColorValue + }); + + // Check that the correct store operation occurred. + let expectedDepthValue = {}; + if (t.params.depthStencilStoreOperation === 'discard') { + // If depthStencilStoreOperation was clear, the texture's depth component should be 0.0, and + // the stencil component should be 0.0. + expectedDepthValue = { Depth: 0.0 }; + } else if (t.params.depthStencilStoreOperation === 'store') { + // If depthStencilStoreOperation was store, the texture's depth component should be 1.0, and + // the stencil component should be 1.0. + expectedDepthValue = { Depth: 1.0 }; + } + t.expectSingleColor(depthStencilAttachment, kDepthStencilFormat, { + size: [kHeight, kWidth, 1], + exp: expectedDepthValue, + layout: { mipLevel: 0, aspect: 'depth-only' } + }); +}); + // Tests that render pass color attachment store operations work correctly for all renderable color // formats, mip levels and array layers. -g.test('render_pass_store_op,color_attachment_only') - .params(u => - u - .combine('colorFormat', kEncodableTextureFormats) - // Filter out any non-renderable formats - .filter(({ colorFormat }) => !!kTextureFormatInfo[colorFormat].colorRender) - .combine('storeOperation', kStoreOps) - .beginSubcases() - .combine('mipLevel', kMipLevel) - .combine('arrayLayer', kArrayLayers) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.colorFormat); - }) - .fn(t => { - const colorAttachment = t.device.createTexture({ - format: t.params.colorFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: t.params.arrayLayer + 1 }, - mipLevelCount: kMipLevelCount, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const colorViewDesc = { - baseArrayLayer: t.params.arrayLayer, - baseMipLevel: t.params.mipLevel, - mipLevelCount: 1, - arrayLayerCount: 1, - }; - - const colorAttachmentView = colorAttachment.createView(colorViewDesc); - - // Color load operation will clear to {1.0, 0.0, 0.0, 1.0}. - // Color store operation is determined by the test params. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachmentView, - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: t.params.storeOperation, - }, - ], - }); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - // Check that the correct store operation occurred. - let expectedValue = {}; - if (t.params.storeOperation === 'discard') { - // If colorStoreOp was clear, the texture should now contain {0.0, 0.0, 0.0, 0.0}. - expectedValue = { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }; - } else if (t.params.storeOperation === 'store') { - // If colorStoreOP was store, the texture should still contain {1.0, 0.0, 0.0, 1.0}. - expectedValue = { R: 1.0, G: 0.0, B: 0.0, A: 1.0 }; - } - - t.expectSingleColor(colorAttachment, t.params.colorFormat, { - size: [kHeight, kWidth, 1], - slice: t.params.arrayLayer, - exp: expectedValue, - layout: { mipLevel: t.params.mipLevel }, - }); +g.test('render_pass_store_op,color_attachment_only'). +params((u) => +u. +combine('colorFormat', kEncodableTextureFormats) +// Filter out any non-renderable formats +.filter(({ colorFormat }) => !!kTextureFormatInfo[colorFormat].colorRender). +combine('storeOperation', kStoreOps). +beginSubcases(). +combine('mipLevel', kMipLevel). +combine('arrayLayer', kArrayLayers) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.colorFormat); +}). +fn((t) => { + const colorAttachment = t.device.createTexture({ + format: t.params.colorFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: t.params.arrayLayer + 1 }, + mipLevelCount: kMipLevelCount, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); + const colorViewDesc = { + baseArrayLayer: t.params.arrayLayer, + baseMipLevel: t.params.mipLevel, + mipLevelCount: 1, + arrayLayerCount: 1 + }; + + const colorAttachmentView = colorAttachment.createView(colorViewDesc); + + // Color load operation will clear to {1.0, 0.0, 0.0, 1.0}. + // Color store operation is determined by the test params. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachmentView, + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: t.params.storeOperation + }] + + }); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + // Check that the correct store operation occurred. + let expectedValue = {}; + if (t.params.storeOperation === 'discard') { + // If colorStoreOp was clear, the texture should now contain {0.0, 0.0, 0.0, 0.0}. + expectedValue = { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }; + } else if (t.params.storeOperation === 'store') { + // If colorStoreOP was store, the texture should still contain {1.0, 0.0, 0.0, 1.0}. + expectedValue = { R: 1.0, G: 0.0, B: 0.0, A: 1.0 }; + } + + t.expectSingleColor(colorAttachment, t.params.colorFormat, { + size: [kHeight, kWidth, 1], + slice: t.params.arrayLayer, + exp: expectedValue, + layout: { mipLevel: t.params.mipLevel } + }); +}); + // Test with multiple color attachments to ensure each attachment's storeOp is set independently. -g.test('render_pass_store_op,multiple_color_attachments') - .params(u => - u - .combine('storeOperation1', kStoreOps) - .combine('storeOperation2', kStoreOps) - .beginSubcases() - .combine('colorAttachments', kNumColorAttachments) - ) - .fn(t => { - const kColorFormat = 'rgba8unorm'; - const colorAttachments = []; +g.test('render_pass_store_op,multiple_color_attachments'). +params((u) => +u. +combine('storeOperation1', kStoreOps). +combine('storeOperation2', kStoreOps). +beginSubcases(). +combine('colorAttachments', kNumColorAttachments) +). +fn((t) => { + const kColorFormat = 'rgba8unorm'; + const colorAttachments = []; - for (let i = 0; i < t.params.colorAttachments; i++) { - colorAttachments.push( - t.device.createTexture({ - format: kColorFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); - } + for (let i = 0; i < t.params.colorAttachments; i++) { + colorAttachments.push( + t.device.createTexture({ + format: kColorFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }) + ); + } - // Color load operation will clear to {1.0, 1.0, 1.0, 1.0} - // Color store operation is determined by test params. Use storeOperation1 for even numbered - // attachments and storeOperation2 for odd numbered attachments. - const renderPassColorAttachments = []; - for (let i = 0; i < t.params.colorAttachments; i++) { - renderPassColorAttachments.push({ - view: colorAttachments[i].createView(), - clearValue: { r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, - loadOp: 'clear', - storeOp: i % 2 === 0 ? t.params.storeOperation1 : t.params.storeOperation2, - }); - } - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: renderPassColorAttachments, + // Color load operation will clear to {1.0, 1.0, 1.0, 1.0} + // Color store operation is determined by test params. Use storeOperation1 for even numbered + // attachments and storeOperation2 for odd numbered attachments. + const renderPassColorAttachments = []; + for (let i = 0; i < t.params.colorAttachments; i++) { + renderPassColorAttachments.push({ + view: colorAttachments[i].createView(), + clearValue: { r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, + loadOp: 'clear', + storeOp: i % 2 === 0 ? t.params.storeOperation1 : t.params.storeOperation2 }); - pass.end(); - t.device.queue.submit([encoder.finish()]); + } - // Check that the correct store operation occurred. - let expectedValue = {}; - for (let i = 0; i < t.params.colorAttachments; i++) { - if (renderPassColorAttachments[i].storeOp === 'discard') { - // If colorStoreOp was clear, the texture should now contain {0.0, 0.0, 0.0, 0.0}. - expectedValue = { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }; - } else if (renderPassColorAttachments[i].storeOp === 'store') { - // If colorStoreOP was store, the texture should still contain {1.0, 1.0, 1.0, 1.0}. - expectedValue = { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }; - } - t.expectSingleColor(colorAttachments[i], kColorFormat, { - size: [kHeight, kWidth, 1], - exp: expectedValue, - }); - } + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: renderPassColorAttachments }); + pass.end(); + t.device.queue.submit([encoder.finish()]); -g.test('render_pass_store_op,depth_stencil_attachment_only') - .desc( - ` + // Check that the correct store operation occurred. + let expectedValue = {}; + for (let i = 0; i < t.params.colorAttachments; i++) { + if (renderPassColorAttachments[i].storeOp === 'discard') { + // If colorStoreOp was clear, the texture should now contain {0.0, 0.0, 0.0, 0.0}. + expectedValue = { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }; + } else if (renderPassColorAttachments[i].storeOp === 'store') { + // If colorStoreOP was store, the texture should still contain {1.0, 1.0, 1.0, 1.0}. + expectedValue = { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }; + } + t.expectSingleColor(colorAttachments[i], kColorFormat, { + size: [kHeight, kWidth, 1], + exp: expectedValue + }); + } +}); + +g.test('render_pass_store_op,depth_stencil_attachment_only'). +desc( + ` Tests that render pass depth stencil store operations work correctly for all renderable color formats, mip levels and array layers. @@ -275,81 +274,81 @@ formats, mip levels and array layers. TODO: Also test unsized depth/stencil formats [1] ` - ) - .params(u => - u - .combine('depthStencilFormat', kSizedDepthStencilFormats) // [1] - .combine('storeOperation', kStoreOps) - .beginSubcases() - .combine('mipLevel', kMipLevel) - .combine('arrayLayer', kArrayLayers) - ) - .fn(t => { - const depthStencilTexture = t.device.createTexture({ - format: t.params.depthStencilFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: t.params.arrayLayer + 1 }, - mipLevelCount: kMipLevelCount, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const depthStencilViewDesc = { - baseArrayLayer: t.params.arrayLayer, - baseMipLevel: t.params.mipLevel, - mipLevelCount: 1, - arrayLayerCount: 1, - }; - - const depthStencilAttachmentView = depthStencilTexture.createView(depthStencilViewDesc); - - // Depth-stencil load operation will clear to depth = 1.0, stencil = 1.0. - // Depth-stencil store operate is determined by test params. - const encoder = t.device.createCommandEncoder(); - const depthStencilAttachment = { - view: depthStencilAttachmentView, - }; - if (kTextureFormatInfo[t.params.depthStencilFormat].depth) { - depthStencilAttachment.depthClearValue = 1.0; - depthStencilAttachment.depthLoadOp = 'clear'; - depthStencilAttachment.depthStoreOp = t.params.storeOperation; - } - if (kTextureFormatInfo[t.params.depthStencilFormat].stencil) { - depthStencilAttachment.stencilClearValue = 1; - depthStencilAttachment.stencilLoadOp = 'clear'; - depthStencilAttachment.stencilStoreOp = t.params.storeOperation; - } - const pass = encoder.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment, - }); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - let expectedDepthValue = {}; - let expectedStencilValue = {}; - if (t.params.storeOperation === 'discard') { - // If depthStencilStoreOperation was clear, the texture's depth/stencil component should be 0, - expectedDepthValue = { Depth: 0.0 }; - expectedStencilValue = { Stencil: 0 }; - } else if (t.params.storeOperation === 'store') { - // If depthStencilStoreOperation was store, the texture's depth/stencil components should be 1, - expectedDepthValue = { Depth: 1.0 }; - expectedStencilValue = { Stencil: 1 }; - } - - if (kTextureFormatInfo[t.params.depthStencilFormat].depth) { - t.expectSingleColor(depthStencilTexture, t.params.depthStencilFormat, { - size: [kHeight, kWidth, 1], - slice: t.params.arrayLayer, - exp: expectedDepthValue, - layout: { mipLevel: t.params.mipLevel, aspect: 'depth-only' }, - }); - } - if (kTextureFormatInfo[t.params.depthStencilFormat].stencil) { - t.expectSingleColor(depthStencilTexture, t.params.depthStencilFormat, { - size: [kHeight, kWidth, 1], - slice: t.params.arrayLayer, - exp: expectedStencilValue, - layout: { mipLevel: t.params.mipLevel, aspect: 'stencil-only' }, - }); - } +). +params((u) => +u. +combine('depthStencilFormat', kSizedDepthStencilFormats) // [1] +.combine('storeOperation', kStoreOps). +beginSubcases(). +combine('mipLevel', kMipLevel). +combine('arrayLayer', kArrayLayers) +). +fn((t) => { + const depthStencilTexture = t.device.createTexture({ + format: t.params.depthStencilFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: t.params.arrayLayer + 1 }, + mipLevelCount: kMipLevelCount, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); + + const depthStencilViewDesc = { + baseArrayLayer: t.params.arrayLayer, + baseMipLevel: t.params.mipLevel, + mipLevelCount: 1, + arrayLayerCount: 1 + }; + + const depthStencilAttachmentView = depthStencilTexture.createView(depthStencilViewDesc); + + // Depth-stencil load operation will clear to depth = 1.0, stencil = 1.0. + // Depth-stencil store operate is determined by test params. + const encoder = t.device.createCommandEncoder(); + const depthStencilAttachment = { + view: depthStencilAttachmentView + }; + if (kTextureFormatInfo[t.params.depthStencilFormat].depth) { + depthStencilAttachment.depthClearValue = 1.0; + depthStencilAttachment.depthLoadOp = 'clear'; + depthStencilAttachment.depthStoreOp = t.params.storeOperation; + } + if (kTextureFormatInfo[t.params.depthStencilFormat].stencil) { + depthStencilAttachment.stencilClearValue = 1; + depthStencilAttachment.stencilLoadOp = 'clear'; + depthStencilAttachment.stencilStoreOp = t.params.storeOperation; + } + const pass = encoder.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment + }); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + let expectedDepthValue = {}; + let expectedStencilValue = {}; + if (t.params.storeOperation === 'discard') { + // If depthStencilStoreOperation was clear, the texture's depth/stencil component should be 0, + expectedDepthValue = { Depth: 0.0 }; + expectedStencilValue = { Stencil: 0 }; + } else if (t.params.storeOperation === 'store') { + // If depthStencilStoreOperation was store, the texture's depth/stencil components should be 1, + expectedDepthValue = { Depth: 1.0 }; + expectedStencilValue = { Stencil: 1 }; + } + + if (kTextureFormatInfo[t.params.depthStencilFormat].depth) { + t.expectSingleColor(depthStencilTexture, t.params.depthStencilFormat, { + size: [kHeight, kWidth, 1], + slice: t.params.arrayLayer, + exp: expectedDepthValue, + layout: { mipLevel: t.params.mipLevel, aspect: 'depth-only' } + }); + } + if (kTextureFormatInfo[t.params.depthStencilFormat].stencil) { + t.expectSingleColor(depthStencilTexture, t.params.depthStencilFormat, { + size: [kHeight, kWidth, 1], + slice: t.params.arrayLayer, + exp: expectedStencilValue, + layout: { mipLevel: t.params.mipLevel, aspect: 'stencil-only' } + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeop2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeop2.spec.js index 61bb1ea5548..07894fcfc05 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeop2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pass/storeop2.spec.js @@ -1,37 +1,36 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` renderPass store op test that drawn quad is either stored or cleared based on storeop -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('storeOp_controls_whether_1x1_drawn_quad_is_stored') - .desc( - ` +g.test('storeOp_controls_whether_1x1_drawn_quad_is_stored'). +desc( + ` TODO: is this duplicated with api,operation,render_pass,storeOp? TODO: needs review and rename ` - ) - .paramsSimple([ - { storeOp: 'store', _expected: 1 }, // - { storeOp: 'discard', _expected: 0 }, - ]) - .fn(t => { - const renderTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: 'r8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); +). +paramsSimple([ +{ storeOp: 'store', _expected: 1 }, // +{ storeOp: 'discard', _expected: 0 }] +). +fn((t) => { + const renderTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'r8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); - // create render pipeline - const renderPipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + // create render pipeline + const renderPipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main( @builtin(vertex_index) VertexIndex : u32 ) -> @builtin(position) vec4 { @@ -41,44 +40,44 @@ TODO: needs review and rename vec2(-1.0, 1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); } - `, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(1.0, 0.0, 0.0, 1.0); } - `, - }), - entryPoint: 'main', - targets: [{ format: 'r8unorm' }], - }, - primitive: { topology: 'triangle-list' }, - }); - - // encode pass and submit - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTexture.createView(), - storeOp: t.params.storeOp, - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - }, - ], - }); - pass.setPipeline(renderPipeline); - pass.draw(3); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - // expect the buffer to be clear - t.expectSingleColor(renderTexture, 'r8unorm', { - size: [1, 1, 1], - exp: { R: t.params._expected }, - }); + ` + }), + entryPoint: 'main', + targets: [{ format: 'r8unorm' }] + }, + primitive: { topology: 'triangle-list' } }); + + // encode pass and submit + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTexture.createView(), + storeOp: t.params.storeOp, + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear' + }] + + }); + pass.setPipeline(renderPipeline); + pass.draw(3); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + // expect the buffer to be clear + t.expectSingleColor(renderTexture, 'r8unorm', { + size: [1, 1, 1], + exp: { R: t.params._expected } + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/culling_tests.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/culling_tests.spec.js index f03ad7e86f4..12e919b64d8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/culling_tests.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/culling_tests.spec.js @@ -1,16 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Test culling and rasterization state. +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Test culling and rasterization state. Test coverage: Test all culling combinations of GPUFrontFace and GPUCullMode show the correct output. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kTextureFormatInfo } from '../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; function faceIsCulled(face, frontFace, cullMode) { - return cullMode !== 'none' && (frontFace === face) === (cullMode === 'front'); + return cullMode !== 'none' && frontFace === face === (cullMode === 'front'); } function faceColor(face, frontFace, cullMode) { @@ -26,35 +25,38 @@ function faceColor(face, frontFace, cullMode) { } class CullingTest extends TextureTestMixin(GPUTest) { - checkCornerPixels(texture, expectedTopLeftColor, expectedBottomRightColor) { + checkCornerPixels( + texture, + expectedTopLeftColor, + expectedBottomRightColor) + { this.expectSinglePixelComparisonsAreOkInTexture({ texture }, [ - { coord: { x: 0, y: 0 }, exp: expectedTopLeftColor }, - { coord: { x: texture.width - 1, y: texture.height - 1 }, exp: expectedBottomRightColor }, - ]); + { coord: { x: 0, y: 0 }, exp: expectedTopLeftColor }, + { coord: { x: texture.width - 1, y: texture.height - 1 }, exp: expectedBottomRightColor }] + ); } drawFullClipSpaceTriangleAndCheckCornerPixels( - texture, - format, - topology, - color, - depthStencil, - depthStencilAttachment, - expectedTopLeftColor, - expectedBottomRightColor - ) { + texture, + format, + topology, + color, + depthStencil, + depthStencilAttachment, + expectedTopLeftColor, + expectedBottomRightColor) + { const { device } = this; const encoder = device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: texture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: texture.createView(), + loadOp: 'load', + storeOp: 'store' + }], - depthStencilAttachment, + depthStencilAttachment }); pass.setPipeline( @@ -71,27 +73,26 @@ class CullingTest extends TextureTestMixin(GPUTest) { vec2( 3.0, -1.0), vec2(-1.0, 3.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { - return vec4f(${Array.from(color).map(v => v / 255)}); - }`, + return vec4f(${Array.from(color).map((v) => v / 255)}); + }` }), entryPoint: 'main', - targets: [{ format }], + targets: [{ format }] }, primitive: { - topology, + topology }, - depthStencil, + depthStencil }) ); - pass.draw(3); pass.end(); @@ -103,9 +104,9 @@ class CullingTest extends TextureTestMixin(GPUTest) { export const g = makeTestGroup(CullingTest); -g.test('culling') - .desc( - ` +g.test('culling'). +desc( + ` Test 2 triangles with different winding orders: - Test that the counter-clock wise triangle has correct output for: @@ -120,129 +121,133 @@ g.test('culling') - All depth stencil attachment types (none, depth24plus, depth32float, depth24plus-stencil8) - Some primitive topologies (triangle-list, triangle-strip) ` - ) - .params(u => - u - .combine('frontFace', ['ccw', 'cw']) - .combine('cullMode', ['none', 'front', 'back']) - .beginSubcases() - .combine('depthStencilFormat', [null, 'depth24plus', 'depth32float', 'depth24plus-stencil8']) - .combine('topology', ['triangle-list', 'triangle-strip']) - ) - .fn(t => { - const { frontFace, cullMode, depthStencilFormat, topology } = t.params; - const size = 4; - const format = 'rgba8unorm'; +). +params((u) => +u. +combine('frontFace', ['ccw', 'cw']). +combine('cullMode', ['none', 'front', 'back']). +beginSubcases(). +combine('depthStencilFormat', [ +null, +'depth24plus', +'depth32float', +'depth24plus-stencil8'] +). +combine('topology', ['triangle-list', 'triangle-strip']) +). +fn((t) => { + const { frontFace, cullMode, depthStencilFormat, topology } = t.params; + const size = 4; + const format = 'rgba8unorm'; - const texture = t.device.createTexture({ + const texture = t.device.createTexture({ + size: { width: size, height: size, depthOrArrayLayers: 1 }, + format, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC + }); + + const haveStencil = depthStencilFormat && kTextureFormatInfo[depthStencilFormat].stencil; + let depthTexture = undefined; + let depthStencilAttachment = undefined; + let depthStencil = undefined; + if (depthStencilFormat) { + depthTexture = t.device.createTexture({ size: { width: size, height: size, depthOrArrayLayers: 1 }, - format, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + format: depthStencilFormat, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); - const haveStencil = depthStencilFormat && kTextureFormatInfo[depthStencilFormat].stencil; - let depthTexture = undefined; - let depthStencilAttachment = undefined; - let depthStencil = undefined; - if (depthStencilFormat) { - depthTexture = t.device.createTexture({ - size: { width: size, height: size, depthOrArrayLayers: 1 }, - format: depthStencilFormat, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }); + depthStencilAttachment = { + view: depthTexture.createView(), + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store' + }; - depthStencilAttachment = { - view: depthTexture.createView(), - depthClearValue: 1.0, - depthLoadOp: 'clear', - depthStoreOp: 'store', - }; + depthStencil = { + format: depthStencilFormat, + depthCompare: 'less', + depthWriteEnabled: true + }; - depthStencil = { - format: depthStencilFormat, - depthCompare: 'less', - depthWriteEnabled: true, - }; - - if (haveStencil) { - depthStencilAttachment.stencilLoadOp = 'clear'; - depthStencilAttachment.stencilStoreOp = 'store'; - depthStencil.stencilFront = { passOp: 'increment-clamp' }; - depthStencil.stencilBack = { passOp: 'increment-clamp' }; - } + if (haveStencil) { + depthStencilAttachment.stencilLoadOp = 'clear'; + depthStencilAttachment.stencilStoreOp = 'store'; + depthStencil.stencilFront = { passOp: 'increment-clamp' }; + depthStencil.stencilBack = { passOp: 'increment-clamp' }; } + } - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: texture.createView(), - clearValue: [0, 0, 1, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: texture.createView(), + clearValue: [0, 0, 1, 1], + loadOp: 'clear', + storeOp: 'store' + }], - depthStencilAttachment, - }); + depthStencilAttachment + }); - // Draw triangles with different winding orders: - // - // for triangle-list, 2 triangles - // 1. The top-left one is counterclockwise (CCW) - // 2. The bottom-right one is clockwise (CW) - // - // 0---2---+ - // | | | - // | | | - // 1---+---4 - // | | | - // | | | - // +---3---5 - // - // for triangle-strip, 4 triangles - // note: for triangle-strip the index order swaps every other triangle - // so the order is 012, 213, 234, 435 - // - // 1. The top left is counterclockwise (CCW) - // 2. zero size - // 3. zero size - // 4. The bottom right one is clockwise (CW) - // - // 0 - // | - // | - // +---+---+ - // | | | - // | | | - // 1---+---23--+---5 - // | | | - // | | | - // +---+---+ - // | - // | - // 4 - pass.setPipeline( - t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + // Draw triangles with different winding orders: + // + // for triangle-list, 2 triangles + // 1. The top-left one is counterclockwise (CCW) + // 2. The bottom-right one is clockwise (CW) + // + // 0---2---+ + // | | | + // | | | + // 1---+---4 + // | | | + // | | | + // +---3---5 + // + // for triangle-strip, 4 triangles + // note: for triangle-strip the index order swaps every other triangle + // so the order is 012, 213, 234, 435 + // + // 1. The top left is counterclockwise (CCW) + // 2. zero size + // 3. zero size + // 4. The bottom right one is clockwise (CW) + // + // 0 + // | + // | + // +---+---+ + // | | | + // | | | + // 1---+---23--+---5 + // | | | + // | | | + // +---+---+ + // | + // | + // 4 + pass.setPipeline( + t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main( @builtin(vertex_index) VertexIndex : u32 ) -> @builtin(position) vec4 { var pos : array, 6> = array, 6>( ${ - topology === 'triangle-list' - ? ` + topology === 'triangle-list' ? + ` vec2(-1.0, 1.0), vec2(-1.0, 0.0), vec2( 0.0, 1.0), vec2( 0.0, -1.0), vec2( 1.0, 0.0), vec2( 1.0, -1.0)); - ` - : ` + ` : + ` vec2( 0.0, 2.0), vec2(-2.0, 0.0), vec2( 0.0, 0.0), @@ -250,15 +255,15 @@ g.test('culling') vec2( 0.0, -2.0), vec2( 2.0, 0.0)); ` - } + } return vec4(pos[VertexIndex], 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main( @builtin(front_facing) FrontFacing : bool ) -> @location(0) vec4 { @@ -269,87 +274,86 @@ g.test('culling') color = vec4(1.0, 0.0, 0.0, 1.0); } return color; - }`, - }), - entryPoint: 'main', - targets: [{ format }], - }, - primitive: { - topology, - frontFace, - cullMode, - }, - depthStencil, - }) + }` + }), + entryPoint: 'main', + targets: [{ format }] + }, + primitive: { + topology, + frontFace, + cullMode + }, + depthStencil + }) + ); + pass.draw(6); + pass.end(); + + t.device.queue.submit([encoder.finish()]); + + // front facing color is green, non front facing is red, background is blue + const kCCWTriangleTopLeftColor = faceColor('ccw', frontFace, cullMode); + const kCWTriangleBottomRightColor = faceColor('cw', frontFace, cullMode); + t.checkCornerPixels(texture, kCCWTriangleTopLeftColor, kCWTriangleBottomRightColor); + + if (depthTexture) { + // draw a triangle that covers all of clip space in yellow at the same depth + // as the previous triangles with the depth test set to 'less'. We should only + // draw yellow where the previous triangles did not. + depthStencilAttachment.depthLoadOp = 'load'; + + if (haveStencil) { + depthStencilAttachment.stencilLoadOp = 'load'; + depthStencil.stencilFront.passOp = 'keep'; + depthStencil.stencilBack.passOp = 'keep'; + } + + const k2ndDrawColor = new Uint8Array([255, 255, 0, 255]); + + const isTopLeftCulled = faceIsCulled('ccw', frontFace, cullMode); + const kExpectedTopLeftColor = isTopLeftCulled ? k2ndDrawColor : kCCWTriangleTopLeftColor; + + const isBottomRightCulled = faceIsCulled('cw', frontFace, cullMode); + const kExpectedBottomRightColor = isBottomRightCulled ? + k2ndDrawColor : + kCWTriangleBottomRightColor; + + t.drawFullClipSpaceTriangleAndCheckCornerPixels( + texture, + format, + topology, + k2ndDrawColor, + depthStencil, + depthStencilAttachment, + kExpectedTopLeftColor, + kExpectedBottomRightColor ); - pass.draw(6); - pass.end(); + if (haveStencil) { + // draw a triangle that covers all of clip space in cyan with the stencil + // compare set to 'equal'. The reference value defaults to 0 so we should + // only render cyan where the first two triangles did not. + depthStencil.depthCompare = 'always'; + depthStencil.stencilFront.compare = 'equal'; + depthStencil.stencilBack.compare = 'equal'; - t.device.queue.submit([encoder.finish()]); - - // front facing color is green, non front facing is red, background is blue - const kCCWTriangleTopLeftColor = faceColor('ccw', frontFace, cullMode); - const kCWTriangleBottomRightColor = faceColor('cw', frontFace, cullMode); - t.checkCornerPixels(texture, kCCWTriangleTopLeftColor, kCWTriangleBottomRightColor); - - if (depthTexture) { - // draw a triangle that covers all of clip space in yellow at the same depth - // as the previous triangles with the depth test set to 'less'. We should only - // draw yellow where the previous triangles did not. - depthStencilAttachment.depthLoadOp = 'load'; - - if (haveStencil) { - depthStencilAttachment.stencilLoadOp = 'load'; - depthStencil.stencilFront.passOp = 'keep'; - depthStencil.stencilBack.passOp = 'keep'; - } - - const k2ndDrawColor = new Uint8Array([255, 255, 0, 255]); - - const isTopLeftCulled = faceIsCulled('ccw', frontFace, cullMode); - const kExpectedTopLeftColor = isTopLeftCulled ? k2ndDrawColor : kCCWTriangleTopLeftColor; - - const isBottomRightCulled = faceIsCulled('cw', frontFace, cullMode); - const kExpectedBottomRightColor = isBottomRightCulled - ? k2ndDrawColor - : kCWTriangleBottomRightColor; + const k3rdDrawColor = new Uint8Array([0, 255, 255, 255]); + const kExpectedTopLeftColor = isTopLeftCulled ? k3rdDrawColor : kCCWTriangleTopLeftColor; + const kExpectedBottomRightColor = isBottomRightCulled ? + k3rdDrawColor : + kCWTriangleBottomRightColor; t.drawFullClipSpaceTriangleAndCheckCornerPixels( texture, format, topology, - k2ndDrawColor, + k3rdDrawColor, depthStencil, depthStencilAttachment, kExpectedTopLeftColor, kExpectedBottomRightColor ); - - if (haveStencil) { - // draw a triangle that covers all of clip space in cyan with the stencil - // compare set to 'equal'. The reference value defaults to 0 so we should - // only render cyan where the first two triangles did not. - depthStencil.depthCompare = 'always'; - depthStencil.stencilFront.compare = 'equal'; - depthStencil.stencilBack.compare = 'equal'; - - const k3rdDrawColor = new Uint8Array([0, 255, 255, 255]); - const kExpectedTopLeftColor = isTopLeftCulled ? k3rdDrawColor : kCCWTriangleTopLeftColor; - const kExpectedBottomRightColor = isBottomRightCulled - ? k3rdDrawColor - : kCWTriangleBottomRightColor; - - t.drawFullClipSpaceTriangleAndCheckCornerPixels( - texture, - format, - topology, - k3rdDrawColor, - depthStencil, - depthStencilAttachment, - kExpectedTopLeftColor, - kExpectedBottomRightColor - ); - } } - }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/overrides.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/overrides.spec.js index dcc76eb8d06..be7a059954e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/overrides.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/overrides.spec.js @@ -1,17 +1,23 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Testing render pipeline using overridable constants in vertex stage and fragment stage. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; + class F extends GPUTest { - async ExpectShaderOutputWithConstants(isAsync, format, expected, vertex, fragment) { + async ExpectShaderOutputWithConstants( + isAsync, + format, + expected, + vertex, + fragment) + { const renderTarget = this.device.createTexture({ format, size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const descriptor = { @@ -21,30 +27,30 @@ class F extends GPUTest { primitive: { topology: 'triangle-list', frontFace: 'ccw', - cullMode: 'back', - }, + cullMode: 'back' + } }; - const promise = isAsync - ? this.device.createRenderPipelineAsync(descriptor) - : Promise.resolve(this.device.createRenderPipeline(descriptor)); + const promise = isAsync ? + this.device.createRenderPipelineAsync(descriptor) : + Promise.resolve(this.device.createRenderPipeline(descriptor)); const pipeline = await promise; const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - storeOp: 'store', - clearValue: { - r: kClearValueResult.R, - g: kClearValueResult.G, - b: kClearValueResult.B, - a: kClearValueResult.A, - }, - loadOp: 'clear', + { + view: renderTarget.createView(), + storeOp: 'store', + clearValue: { + r: kClearValueResult.R, + g: kClearValueResult.G, + b: kClearValueResult.B, + a: kClearValueResult.A }, - ], + loadOp: 'clear' + }] + }); pass.setPipeline(pipeline); pass.draw(3); @@ -53,7 +59,7 @@ class F extends GPUTest { this.expectSingleColor(renderTarget, format, { size: [1, 1, 1], - exp: expected, + exp: expected }); } } @@ -90,300 +96,323 @@ override A: f32 = 1.0; } `; -g.test('basic') - .desc( - `Test that either correct constants override values or default values when no constants override value are provided at pipeline creation time are used correctly in vertex and fragment shader.` - ) - .params(u => - u - .combine('isAsync', [true, false]) - .beginSubcases() - .combineWithParams([ - { - expected: kDefaultValueResult, - vertexConstants: {}, - fragmentConstants: {}, - }, - { - expected: kClearValueResult, - vertexConstants: { - xright: -3.0, - }, - fragmentConstants: {}, - }, - { - expected: kClearValueResult, - vertexConstants: { - ytop: -3.0, - }, - fragmentConstants: {}, - }, - { - expected: kDefaultValueResult, - vertexConstants: { - xright: 4.0, - ytop: 4.0, - }, - fragmentConstants: {}, - }, - { - expected: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, - vertexConstants: {}, - fragmentConstants: { R: 0.0, B: 0.0 }, - }, - { - expected: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, - vertexConstants: {}, - fragmentConstants: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, - }, - ]) - ) - .fn(async t => { - const format = 'bgra8unorm'; - await t.ExpectShaderOutputWithConstants( - t.params.isAsync, - format, - t.params.expected, - { - module: t.device.createShaderModule({ - code: kFullScreenTriangleVertexShader, - }), - entryPoint: 'main', - constants: t.params.vertexConstants, - }, - { - module: t.device.createShaderModule({ - code: kFullScreenTriangleFragmentShader, - }), - entryPoint: 'main', - constants: t.params.fragmentConstants, - targets: [{ format }], - } - ); +g.test('basic'). +desc( + `Test that either correct constants override values or default values when no constants override value are provided at pipeline creation time are used correctly in vertex and fragment shader.` +). +params((u) => +u. +combine('isAsync', [true, false]). +beginSubcases(). +combineWithParams([ +{ + expected: kDefaultValueResult, + vertexConstants: {}, + fragmentConstants: {} +}, +{ + expected: kClearValueResult, + vertexConstants: { + xright: -3.0 + }, + fragmentConstants: {} +}, +{ + expected: kClearValueResult, + vertexConstants: { + ytop: -3.0 + }, + fragmentConstants: {} +}, +{ + expected: kDefaultValueResult, + vertexConstants: { + xright: 4.0, + ytop: 4.0 + }, + fragmentConstants: {} +}, +{ + expected: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, + vertexConstants: {}, + fragmentConstants: { R: 0.0, B: 0.0 } +}, +{ + expected: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, + vertexConstants: {}, + fragmentConstants: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 } + + + +}] +) +). +fn(async (t) => { + const format = 'bgra8unorm'; + await t.ExpectShaderOutputWithConstants( + t.params.isAsync, + format, + t.params.expected, + { + module: t.device.createShaderModule({ + code: kFullScreenTriangleVertexShader + }), + entryPoint: 'main', + constants: t.params.vertexConstants + }, + { + module: t.device.createShaderModule({ + code: kFullScreenTriangleFragmentShader + }), + entryPoint: 'main', + constants: t.params.fragmentConstants, + targets: [{ format }] + } + ); +}); + +g.test('precision'). +desc(`Test that the float number precision is preserved for constants`). +params((u) => +u. +combine('isAsync', [true, false]). +beginSubcases(). +combineWithParams([ +{ + expected: { R: 3.14159, G: 1.0, B: 1.0, A: 1.0 }, + vertexConstants: {}, + fragmentConstants: { R: 3.14159 } +}, +{ + expected: { R: 3.141592653589793, G: 1.0, B: 1.0, A: 1.0 }, + vertexConstants: {}, + fragmentConstants: { R: 3.141592653589793 } +}] +) +). +fn(async (t) => { + const format = 'rgba32float'; + await t.ExpectShaderOutputWithConstants( + t.params.isAsync, + format, + t.params.expected, + { + module: t.device.createShaderModule({ + code: kFullScreenTriangleVertexShader + }), + entryPoint: 'main', + constants: t.params.vertexConstants + }, + { + module: t.device.createShaderModule({ + code: kFullScreenTriangleFragmentShader + }), + entryPoint: 'main', + constants: t.params.fragmentConstants, + targets: [{ format }] + } + ); +}); + +g.test('shared_shader_module'). +desc( + `Test that when the same module is shared by different pipelines, the constant values are still being used correctly.` +). +params((u) => +u. +combine('isAsync', [true, false]). +beginSubcases(). +combineWithParams([ +{ + expected0: kClearValueResult, + vertexConstants0: { + xright: -3.0 + }, + fragmentConstants0: {}, + + expected1: kDefaultValueResult, + vertexConstants1: {}, + fragmentConstants1: {} +}, +{ + expected0: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, + vertexConstants0: {}, + fragmentConstants0: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, + + + + + expected1: kDefaultValueResult, + vertexConstants1: {}, + fragmentConstants1: {} +}, +{ + expected0: { R: 1.0, G: 0.0, B: 1.0, A: 0.0 }, + vertexConstants0: {}, + fragmentConstants0: { R: 1.0, G: 0.0, B: 1.0, A: 0.0 }, + + + + + expected1: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, + vertexConstants1: {}, + fragmentConstants1: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 } + + + +}] +) +). +fn(async (t) => { + const format = 'bgra8unorm'; + const vertexModule = t.device.createShaderModule({ + code: kFullScreenTriangleVertexShader }); -g.test('precision') - .desc(`Test that the float number precision is preserved for constants`) - .params(u => - u - .combine('isAsync', [true, false]) - .beginSubcases() - .combineWithParams([ - { - expected: { R: 3.14159, G: 1.0, B: 1.0, A: 1.0 }, - vertexConstants: {}, - fragmentConstants: { R: 3.14159 }, - }, - { - expected: { R: 3.141592653589793238, G: 1.0, B: 1.0, A: 1.0 }, - vertexConstants: {}, - fragmentConstants: { R: 3.141592653589793238 }, - }, - ]) - ) - .fn(async t => { - const format = 'rgba32float'; - await t.ExpectShaderOutputWithConstants( - t.params.isAsync, - format, - t.params.expected, - { - module: t.device.createShaderModule({ - code: kFullScreenTriangleVertexShader, - }), - entryPoint: 'main', - constants: t.params.vertexConstants, - }, - { - module: t.device.createShaderModule({ - code: kFullScreenTriangleFragmentShader, - }), - entryPoint: 'main', - constants: t.params.fragmentConstants, - targets: [{ format }], - } - ); + const fragmentModule = t.device.createShaderModule({ + code: kFullScreenTriangleFragmentShader }); -g.test('shared_shader_module') - .desc( - `Test that when the same module is shared by different pipelines, the constant values are still being used correctly.` - ) - .params(u => - u - .combine('isAsync', [true, false]) - .beginSubcases() - .combineWithParams([ - { - expected0: kClearValueResult, - vertexConstants0: { - xright: -3.0, - }, - fragmentConstants0: {}, - - expected1: kDefaultValueResult, - vertexConstants1: {}, - fragmentConstants1: {}, - }, - { - expected0: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, - vertexConstants0: {}, - fragmentConstants0: { R: 0.0, G: 0.0, B: 0.0, A: 0.0 }, - - expected1: kDefaultValueResult, - vertexConstants1: {}, - fragmentConstants1: {}, - }, - { - expected0: { R: 1.0, G: 0.0, B: 1.0, A: 0.0 }, - vertexConstants0: {}, - fragmentConstants0: { R: 1.0, G: 0.0, B: 1.0, A: 0.0 }, - - expected1: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, - vertexConstants1: {}, - fragmentConstants1: { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }, - }, - ]) - ) - .fn(async t => { - const format = 'bgra8unorm'; - const vertexModule = t.device.createShaderModule({ - code: kFullScreenTriangleVertexShader, - }); - - const fragmentModule = t.device.createShaderModule({ - code: kFullScreenTriangleFragmentShader, - }); - - const createPipelineFn = async (vertexConstants, fragmentConstants) => { - const descriptor = { - layout: 'auto', - vertex: { - module: vertexModule, - entryPoint: 'main', - constants: vertexConstants, - }, - fragment: { - module: fragmentModule, - entryPoint: 'main', - targets: [{ format }], - constants: fragmentConstants, - }, - primitive: { - topology: 'triangle-list', - frontFace: 'ccw', - cullMode: 'back', - }, - }; - - return t.params.isAsync - ? t.device.createRenderPipelineAsync(descriptor) - : t.device.createRenderPipeline(descriptor); + const createPipelineFn = async ( + vertexConstants, + fragmentConstants) => + { + const descriptor = { + layout: 'auto', + vertex: { + module: vertexModule, + entryPoint: 'main', + constants: vertexConstants + }, + fragment: { + module: fragmentModule, + entryPoint: 'main', + targets: [{ format }], + constants: fragmentConstants + }, + primitive: { + topology: 'triangle-list', + frontFace: 'ccw', + cullMode: 'back' + } }; - const pipeline0 = await createPipelineFn( - t.params.vertexConstants0, - t.params.fragmentConstants0 - ); + return t.params.isAsync ? + t.device.createRenderPipelineAsync(descriptor) : + t.device.createRenderPipeline(descriptor); + }; - const pipeline1 = await createPipelineFn( - t.params.vertexConstants1, - t.params.fragmentConstants1 - ); + const pipeline0 = await createPipelineFn( + t.params.vertexConstants0, + t.params.fragmentConstants0 + ); + const pipeline1 = await createPipelineFn( + t.params.vertexConstants1, + t.params.fragmentConstants1 + ); - const renderTarget0 = t.device.createTexture({ - format, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - const renderTarget1 = t.device.createTexture({ - format, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const encoder = t.device.createCommandEncoder(); - - const pass0 = encoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget0.createView(), - storeOp: 'store', - clearValue: { - r: kClearValueResult.R, - g: kClearValueResult.G, - b: kClearValueResult.B, - a: kClearValueResult.A, - }, - loadOp: 'clear', - }, - ], - }); - pass0.setPipeline(pipeline0); - pass0.draw(3); - pass0.end(); - - const pass1 = encoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget1.createView(), - storeOp: 'store', - clearValue: { - r: kClearValueResult.R, - g: kClearValueResult.G, - b: kClearValueResult.B, - a: kClearValueResult.A, - }, - loadOp: 'clear', - }, - ], - }); - pass1.setPipeline(pipeline1); - pass1.draw(3); - pass1.end(); - - t.device.queue.submit([encoder.finish()]); - - t.expectSingleColor(renderTarget0, format, { - size: [1, 1, 1], - exp: t.params.expected0, - }); - t.expectSingleColor(renderTarget1, format, { - size: [1, 1, 1], - exp: t.params.expected1, - }); + const renderTarget0 = t.device.createTexture({ + format, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + const renderTarget1 = t.device.createTexture({ + format, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('multi_entry_points') - .desc( - `Test that when the same module is shared by vertex and fragment shader, the constant values are still being used correctly.` - ) - .params(u => - u - .combine('isAsync', [true, false]) - .beginSubcases() - .combineWithParams([ - { - expected: { R: 0.8, G: 0.4, B: 0.2, A: 1.0 }, - vertexConstants: { A: 4.0, B: 4.0 }, - fragmentConstants: { A: 0.8, B: 0.4, C: 0.2, D: 1.0 }, - }, - { - expected: { R: 0.8, G: 0.4, B: 0.2, A: 1.0 }, - vertexConstants: {}, - fragmentConstants: { A: 0.8, B: 0.4, C: 0.2, D: 1.0 }, - }, - { - expected: kClearValueResult, - vertexConstants: { A: -3.0 }, - fragmentConstants: { A: 0.8, B: 0.4, C: 0.2, D: 1.0 }, - }, - ]) - ) - .fn(async t => { - const format = 'bgra8unorm'; - const module = t.device.createShaderModule({ - code: ` + const encoder = t.device.createCommandEncoder(); + + const pass0 = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget0.createView(), + storeOp: 'store', + clearValue: { + r: kClearValueResult.R, + g: kClearValueResult.G, + b: kClearValueResult.B, + a: kClearValueResult.A + }, + loadOp: 'clear' + }] + + }); + pass0.setPipeline(pipeline0); + pass0.draw(3); + pass0.end(); + + const pass1 = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget1.createView(), + storeOp: 'store', + clearValue: { + r: kClearValueResult.R, + g: kClearValueResult.G, + b: kClearValueResult.B, + a: kClearValueResult.A + }, + loadOp: 'clear' + }] + + }); + pass1.setPipeline(pipeline1); + pass1.draw(3); + pass1.end(); + + t.device.queue.submit([encoder.finish()]); + + t.expectSingleColor(renderTarget0, format, { + size: [1, 1, 1], + exp: t.params.expected0 + }); + t.expectSingleColor(renderTarget1, format, { + size: [1, 1, 1], + exp: t.params.expected1 + }); +}); + +g.test('multi_entry_points'). +desc( + `Test that when the same module is shared by vertex and fragment shader, the constant values are still being used correctly.` +). +params((u) => +u. +combine('isAsync', [true, false]). +beginSubcases(). +combineWithParams([ +{ + expected: { R: 0.8, G: 0.4, B: 0.2, A: 1.0 }, + vertexConstants: { A: 4.0, B: 4.0 }, + fragmentConstants: { A: 0.8, B: 0.4, C: 0.2, D: 1.0 } + + + +}, +{ + expected: { R: 0.8, G: 0.4, B: 0.2, A: 1.0 }, + vertexConstants: {}, + fragmentConstants: { A: 0.8, B: 0.4, C: 0.2, D: 1.0 } + + + +}, +{ + expected: kClearValueResult, + vertexConstants: { A: -3.0 }, + fragmentConstants: { A: 0.8, B: 0.4, C: 0.2, D: 1.0 } + + + +}] +) +). +fn(async (t) => { + const format = 'bgra8unorm'; + const module = t.device.createShaderModule({ + code: ` override A: f32 = 3.0; override B: f32 = 3.0; override C: f32; @@ -403,22 +432,22 @@ g.test('multi_entry_points') -> @location(0) vec4 { return vec4(A, B, C, D); } - `, - }); - await t.ExpectShaderOutputWithConstants( - t.params.isAsync, - format, - t.params.expected, - { - module, - entryPoint: 'vertexMain', - constants: t.params.vertexConstants, - }, - { - module, - entryPoint: 'fragmentMain', - constants: t.params.fragmentConstants, - targets: [{ format }], - } - ); + ` }); + await t.ExpectShaderOutputWithConstants( + t.params.isAsync, + format, + t.params.expected, + { + module, + entryPoint: 'vertexMain', + constants: t.params.vertexConstants + }, + { + module, + entryPoint: 'fragmentMain', + constants: t.params.fragmentConstants, + targets: [{ format }] + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/pipeline_output_targets.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/pipeline_output_targets.spec.js index 3b124b09e77..5fdd9a2b669 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/pipeline_output_targets.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/pipeline_output_targets.spec.js @@ -1,15 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` - Test pipeline outputs with different color attachment number, formats, component counts, etc. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { range } from '../../../../common/util/util.js'; import { computeBytesPerSampleFromFormats, kRenderableColorTextureFormats, - kTextureFormatInfo, -} from '../../../format_info.js'; + kTextureFormatInfo } from +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { getFragmentShaderCodeWithOutput, getPlainTypeInfo } from '../../../util/shader.js'; import { kTexelRepresentationInfo } from '../../../util/texture/texel_data.js'; @@ -35,420 +34,417 @@ export const g = makeTestGroup(TextureTestMixin(GPUTest)); // Clamp alpha to 3 to avoid comparing a large expected value with a max 3 value for rgb10a2uint // MAINTENANCE_TODO: Make TexelRepresentation.numericRange per-component and use that. const attachmentsIntWriteValues = [ - { R: 1, G: 2, B: 3, A: 1 }, - { R: 5, G: 6, B: 7, A: 2 }, - { R: 9, G: 10, B: 11, A: 3 }, - { R: 13, G: 14, B: 15, A: 0 }, -]; +{ R: 1, G: 2, B: 3, A: 1 }, +{ R: 5, G: 6, B: 7, A: 2 }, +{ R: 9, G: 10, B: 11, A: 3 }, +{ R: 13, G: 14, B: 15, A: 0 }]; const attachmentsFloatWriteValues = [ - { R: 0.12, G: 0.34, B: 0.56, A: 0 }, - { R: 0.78, G: 0.9, B: 0.19, A: 1 }, - { R: 0.28, G: 0.37, B: 0.46, A: 0.3 }, - { R: 0.55, G: 0.64, B: 0.73, A: 1 }, -]; +{ R: 0.12, G: 0.34, B: 0.56, A: 0 }, +{ R: 0.78, G: 0.9, B: 0.19, A: 1 }, +{ R: 0.28, G: 0.37, B: 0.46, A: 0.3 }, +{ R: 0.55, G: 0.64, B: 0.73, A: 1 }]; -g.test('color,attachments') - .desc(`Test that pipeline with sparse color attachments write values correctly.`) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .beginSubcases() - .combine('attachmentCount', [2, 3, 4]) - .expand('emptyAttachmentId', p => range(p.attachmentCount, i => i)) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); + +g.test('color,attachments'). +desc(`Test that pipeline with sparse color attachments write values correctly.`). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +beginSubcases(). +combine('attachmentCount', [2, 3, 4]). +expand('emptyAttachmentId', (p) => range(p.attachmentCount, (i) => i)) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, attachmentCount, emptyAttachmentId } = t.params; + const componentCount = kTexelRepresentationInfo[format].componentOrder.length; + const info = kTextureFormatInfo[format]; + + // We only need to test formats that have a valid color attachment bytes per sample. + const pixelByteCost = kTextureFormatInfo[format].colorRender?.byteCost; + t.skipIf( + pixelByteCost === undefined || + computeBytesPerSampleFromFormats(range(attachmentCount, () => format)) > + t.device.limits.maxColorAttachmentBytesPerSample + ); + + const writeValues = + info.color.type === 'sint' || info.color.type === 'uint' ? + attachmentsIntWriteValues : + attachmentsFloatWriteValues; + + const renderTargets = range(attachmentCount, () => + t.device.createTexture({ + format, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }) - .fn(t => { - const { format, attachmentCount, emptyAttachmentId } = t.params; - const componentCount = kTexelRepresentationInfo[format].componentOrder.length; - const info = kTextureFormatInfo[format]; + ); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: kVertexShader + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: getFragmentShaderCodeWithOutput( + range(attachmentCount, (i) => + i === emptyAttachmentId ? + null : + { + values: [ + writeValues[i].R, + writeValues[i].G, + writeValues[i].B, + writeValues[i].A], - // We only need to test formats that have a valid color attachment bytes per sample. - const pixelByteCost = kTextureFormatInfo[format].colorRender?.byteCost; - t.skipIf( - pixelByteCost === undefined || - computeBytesPerSampleFromFormats(range(attachmentCount, () => format)) > - t.device.limits.maxColorAttachmentBytesPerSample - ); + plainType: getPlainTypeInfo(info.color.type), + componentCount + } + ) + ) + }), + entryPoint: 'main', + targets: range(attachmentCount, (i) => i === emptyAttachmentId ? null : { format }) + }, + primitive: { topology: 'triangle-list' } + }); - const writeValues = - info.color.type === 'sint' || info.color.type === 'uint' - ? attachmentsIntWriteValues - : attachmentsFloatWriteValues; - - const renderTargets = range(attachmentCount, () => - t.device.createTexture({ - format, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); - - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: kVertexShader, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: getFragmentShaderCodeWithOutput( - range(attachmentCount, i => - i === emptyAttachmentId - ? null - : { - values: [ - writeValues[i].R, - writeValues[i].G, - writeValues[i].B, - writeValues[i].A, - ], - - plainType: getPlainTypeInfo(info.color.type), - componentCount, - } - ) - ), - }), - entryPoint: 'main', - targets: range(attachmentCount, i => (i === emptyAttachmentId ? null : { format })), - }, - primitive: { topology: 'triangle-list' }, - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: range(attachmentCount, i => - i === emptyAttachmentId - ? null - : { - view: renderTargets[i].createView(), - storeOp: 'store', - clearValue: { r: 0.5, g: 0.5, b: 0.5, a: 0.5 }, - loadOp: 'clear', - } - ), - }); - pass.setPipeline(pipeline); - pass.draw(3); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - for (let i = 0; i < attachmentCount; i++) { - if (i === emptyAttachmentId) { - continue; - } - t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTargets[i] }, [ - { coord: { x: 0, y: 0 }, exp: writeValues[i] }, - ]); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: range(attachmentCount, (i) => + i === emptyAttachmentId ? + null : + { + view: renderTargets[i].createView(), + storeOp: 'store', + clearValue: { r: 0.5, g: 0.5, b: 0.5, a: 0.5 }, + loadOp: 'clear' } + ) + }); + pass.setPipeline(pipeline); + pass.draw(3); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + for (let i = 0; i < attachmentCount; i++) { + if (i === emptyAttachmentId) { + continue; + } + t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTargets[i] }, [ + { coord: { x: 0, y: 0 }, exp: writeValues[i] }] + ); + } +}); + +g.test('color,component_count'). +desc( + `Test that extra components of the output (e.g. f32, vec2, vec3, vec4) are discarded.` +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +beginSubcases(). +combine('componentCount', [1, 2, 3, 4]). +filter((x) => x.componentCount >= kTexelRepresentationInfo[x.format].componentOrder.length) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, componentCount } = t.params; + const info = kTextureFormatInfo[format]; + + // expected RGBA values + // extra channels are discarded + const values = [0, 1, 0, 1]; + + const renderTarget = t.device.createTexture({ + format, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('color,component_count') - .desc( - `Test that extra components of the output (e.g. f32, vec2, vec3, vec4) are discarded.` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .beginSubcases() - .combine('componentCount', [1, 2, 3, 4]) - .filter(x => x.componentCount >= kTexelRepresentationInfo[x.format].componentOrder.length) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { format, componentCount } = t.params; - const info = kTextureFormatInfo[format]; - - // expected RGBA values - // extra channels are discarded - const values = [0, 1, 0, 1]; - - const renderTarget = t.device.createTexture({ - format, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: kVertexShader, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: getFragmentShaderCodeWithOutput([ - { - values, - plainType: getPlainTypeInfo(info.color.type), - componentCount, - }, - ]), - }), - entryPoint: 'main', - targets: [{ format }], - }, - primitive: { topology: 'triangle-list' }, - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: kVertexShader + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: getFragmentShaderCodeWithOutput([ { - view: renderTarget.createView(), - storeOp: 'store', - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - }, - ], - }); - pass.setPipeline(pipeline); - pass.draw(3); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectSingleColor(renderTarget, format, { - size: [1, 1, 1], - exp: { R: values[0], G: values[1], B: values[2], A: values[3] }, - }); + values, + plainType: getPlainTypeInfo(info.color.type), + componentCount + }] + ) + }), + entryPoint: 'main', + targets: [{ format }] + }, + primitive: { topology: 'triangle-list' } }); -g.test('color,component_count,blend') - .desc( - `Test that blending behaves correctly when: + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + storeOp: 'store', + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear' + }] + + }); + pass.setPipeline(pipeline); + pass.draw(3); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + t.expectSingleColor(renderTarget, format, { + size: [1, 1, 1], + exp: { R: values[0], G: values[1], B: values[2], A: values[3] } + }); +}); + +g.test('color,component_count,blend'). +desc( + `Test that blending behaves correctly when: - fragment output has no alpha, but the src alpha is not used for the blend operation indicated by blend factors - attachment format has no alpha, and the dst alpha should be assumed as 1 The attachment has a load value of [1, 0, 0, 1] ` - ) - .params(u => - u - .combine('format', ['r8unorm', 'rg8unorm', 'rgba8unorm', 'bgra8unorm']) - .beginSubcases() - // _result is expected values in the color attachment (extra channels are discarded) - // output is the fragment shader output vector - // 0.498 -> 0x7f, 0.502 -> 0x80 - .combineWithParams([ - // fragment output has no alpha - { - _result: [0, 0, 0, 0], - output: [0], - colorSrcFactor: 'one', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'zero', - }, - { - _result: [0, 0, 0, 0], - output: [0], - colorSrcFactor: 'dst-alpha', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'zero', - }, - { - _result: [1, 0, 0, 0], - output: [0], - colorSrcFactor: 'one-minus-dst-alpha', - colorDstFactor: 'dst-alpha', - alphaSrcFactor: 'zero', - alphaDstFactor: 'one', - }, - { - _result: [0.498, 0, 0, 0], - output: [0.498], - colorSrcFactor: 'dst-alpha', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'one', - }, - { - _result: [0, 1, 0, 0], - output: [0, 1], - colorSrcFactor: 'one', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'zero', - }, - { - _result: [0, 1, 0, 0], - output: [0, 1], - colorSrcFactor: 'dst-alpha', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'zero', - }, - { - _result: [1, 0, 0, 0], - output: [0, 1], - colorSrcFactor: 'one-minus-dst-alpha', - colorDstFactor: 'dst-alpha', - alphaSrcFactor: 'zero', - alphaDstFactor: 'one', - }, - { - _result: [0, 1, 0, 0], - output: [0, 1, 0], - colorSrcFactor: 'one', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'zero', - }, - { - _result: [0, 1, 0, 0], - output: [0, 1, 0], - colorSrcFactor: 'dst-alpha', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'zero', - }, - { - _result: [1, 0, 0, 0], - output: [0, 1, 0], - colorSrcFactor: 'one-minus-dst-alpha', - colorDstFactor: 'dst-alpha', - alphaSrcFactor: 'zero', - alphaDstFactor: 'one', - }, - // fragment output has alpha - { - _result: [0.502, 1, 0, 0.498], - output: [0, 1, 0, 0.498], - colorSrcFactor: 'one', - colorDstFactor: 'one-minus-src-alpha', - alphaSrcFactor: 'one', - alphaDstFactor: 'zero', - }, - { - _result: [0.502, 0.498, 0, 0.498], - output: [0, 1, 0, 0.498], - colorSrcFactor: 'src-alpha', - colorDstFactor: 'one-minus-src-alpha', - alphaSrcFactor: 'one', - alphaDstFactor: 'zero', - }, - { - _result: [0, 1, 0, 0.498], - output: [0, 1, 0, 0.498], - colorSrcFactor: 'dst-alpha', - colorDstFactor: 'zero', - alphaSrcFactor: 'one', - alphaDstFactor: 'zero', - }, - { - _result: [0, 1, 0, 0.498], - output: [0, 1, 0, 0.498], - colorSrcFactor: 'dst-alpha', - colorDstFactor: 'zero', - alphaSrcFactor: 'zero', - alphaDstFactor: 'src', - }, - { - _result: [1, 0, 0, 1], - output: [0, 1, 0, 0.498], - colorSrcFactor: 'one-minus-dst-alpha', - colorDstFactor: 'dst-alpha', - alphaSrcFactor: 'zero', - alphaDstFactor: 'dst-alpha', - }, - ]) - .filter(x => x.output.length >= kTexelRepresentationInfo[x.format].componentOrder.length) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - format, - _result, - output, - colorSrcFactor, - colorDstFactor, - alphaSrcFactor, - alphaDstFactor, - } = t.params; - const componentCount = output.length; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('format', ['r8unorm', 'rg8unorm', 'rgba8unorm', 'bgra8unorm']). +beginSubcases() +// _result is expected values in the color attachment (extra channels are discarded) +// output is the fragment shader output vector +// 0.498 -> 0x7f, 0.502 -> 0x80 +.combineWithParams([ +// fragment output has no alpha +{ + _result: [0, 0, 0, 0], + output: [0], + colorSrcFactor: 'one', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'zero' +}, +{ + _result: [0, 0, 0, 0], + output: [0], + colorSrcFactor: 'dst-alpha', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'zero' +}, +{ + _result: [1, 0, 0, 0], + output: [0], + colorSrcFactor: 'one-minus-dst-alpha', + colorDstFactor: 'dst-alpha', + alphaSrcFactor: 'zero', + alphaDstFactor: 'one' +}, +{ + _result: [0.498, 0, 0, 0], + output: [0.498], + colorSrcFactor: 'dst-alpha', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'one' +}, +{ + _result: [0, 1, 0, 0], + output: [0, 1], + colorSrcFactor: 'one', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'zero' +}, +{ + _result: [0, 1, 0, 0], + output: [0, 1], + colorSrcFactor: 'dst-alpha', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'zero' +}, +{ + _result: [1, 0, 0, 0], + output: [0, 1], + colorSrcFactor: 'one-minus-dst-alpha', + colorDstFactor: 'dst-alpha', + alphaSrcFactor: 'zero', + alphaDstFactor: 'one' +}, +{ + _result: [0, 1, 0, 0], + output: [0, 1, 0], + colorSrcFactor: 'one', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'zero' +}, +{ + _result: [0, 1, 0, 0], + output: [0, 1, 0], + colorSrcFactor: 'dst-alpha', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'zero' +}, +{ + _result: [1, 0, 0, 0], + output: [0, 1, 0], + colorSrcFactor: 'one-minus-dst-alpha', + colorDstFactor: 'dst-alpha', + alphaSrcFactor: 'zero', + alphaDstFactor: 'one' +}, +// fragment output has alpha +{ + _result: [0.502, 1, 0, 0.498], + output: [0, 1, 0, 0.498], + colorSrcFactor: 'one', + colorDstFactor: 'one-minus-src-alpha', + alphaSrcFactor: 'one', + alphaDstFactor: 'zero' +}, +{ + _result: [0.502, 0.498, 0, 0.498], + output: [0, 1, 0, 0.498], + colorSrcFactor: 'src-alpha', + colorDstFactor: 'one-minus-src-alpha', + alphaSrcFactor: 'one', + alphaDstFactor: 'zero' +}, +{ + _result: [0, 1, 0, 0.498], + output: [0, 1, 0, 0.498], + colorSrcFactor: 'dst-alpha', + colorDstFactor: 'zero', + alphaSrcFactor: 'one', + alphaDstFactor: 'zero' +}, +{ + _result: [0, 1, 0, 0.498], + output: [0, 1, 0, 0.498], + colorSrcFactor: 'dst-alpha', + colorDstFactor: 'zero', + alphaSrcFactor: 'zero', + alphaDstFactor: 'src' +}, +{ + _result: [1, 0, 0, 1], + output: [0, 1, 0, 0.498], + colorSrcFactor: 'one-minus-dst-alpha', + colorDstFactor: 'dst-alpha', + alphaSrcFactor: 'zero', + alphaDstFactor: 'dst-alpha' +}] +). +filter((x) => x.output.length >= kTexelRepresentationInfo[x.format].componentOrder.length) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + format, + _result, + output, + colorSrcFactor, + colorDstFactor, + alphaSrcFactor, + alphaDstFactor + } = t.params; + const componentCount = output.length; + const info = kTextureFormatInfo[format]; - const renderTarget = t.device.createTexture({ - format, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: kVertexShader, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: getFragmentShaderCodeWithOutput([ - { - values: output, - plainType: getPlainTypeInfo(info.color.type), - componentCount, - }, - ]), - }), - entryPoint: 'main', - targets: [ - { - format, - blend: { - color: { - srcFactor: colorSrcFactor, - dstFactor: colorDstFactor, - operation: 'add', - }, - alpha: { - srcFactor: alphaSrcFactor, - dstFactor: alphaDstFactor, - operation: 'add', - }, - }, - }, - ], - }, - primitive: { topology: 'triangle-list' }, - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - storeOp: 'store', - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - }, - ], - }); - pass.setPipeline(pipeline); - pass.draw(3); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectSingleColor(renderTarget, format, { - size: [1, 1, 1], - exp: { R: _result[0], G: _result[1], B: _result[2], A: _result[3] }, - }); + const renderTarget = t.device.createTexture({ + format, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); + + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: kVertexShader + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: getFragmentShaderCodeWithOutput([ + { + values: output, + plainType: getPlainTypeInfo(info.color.type), + componentCount + }] + ) + }), + entryPoint: 'main', + targets: [ + { + format, + blend: { + color: { + srcFactor: colorSrcFactor, + dstFactor: colorDstFactor, + operation: 'add' + }, + alpha: { + srcFactor: alphaSrcFactor, + dstFactor: alphaDstFactor, + operation: 'add' + } + } + }] + + }, + primitive: { topology: 'triangle-list' } + }); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + storeOp: 'store', + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear' + }] + + }); + pass.setPipeline(pipeline); + pass.draw(3); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + t.expectSingleColor(renderTarget, format, { + size: [1, 1, 1], + exp: { R: _result[0], G: _result[1], B: _result[2], A: _result[3] } + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/primitive_topology.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/primitive_topology.spec.js index bf188dd5f47..bcdcf5bf005 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/primitive_topology.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/primitive_topology.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Test primitive topology rendering. +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Test primitive topology rendering. Draw a primitive using 6 vertices with each topology and check if the pixel is covered. @@ -55,16 +55,21 @@ Test locations are framebuffer coordinates: ****** ** ****** ** {v2,v3,v4} and {v3,v4,v5}. With primitive restart: v1 v3 v5 Triangle {v2, v3, v4} and {v3, v4, v5}. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; + const kRTSize = 56; const kColorFormat = 'rgba8unorm'; const kValidPixelColor = new Uint8Array([0x00, 0xff, 0x00, 0xff]); // green const kInvalidPixelColor = new Uint8Array([0x00, 0x00, 0x00, 0x00]); // black class Point2D { + + + + + constructor(x, y) { this.x = x; this.y = y; @@ -76,7 +81,7 @@ class Point2D { // NDC coordinate space is y-up, so we negate the y mapping. // To ensure the resulting vertex in NDC will be placed at the center of the pixel, we // must offset by the pixel coordinates or 0.5. - return new Point2D((2 * (this.x + 0.5)) / kRTSize - 1, (-2 * (this.y + 0.5)) / kRTSize + 1); + return new Point2D(2 * (this.x + 0.5) / kRTSize - 1, -2 * (this.y + 0.5) / kRTSize + 1); } static getMidpoint(a, b) { @@ -88,13 +93,15 @@ class Point2D { } } + + const VertexLocations = [ - new Point2D(8, 24), // v1 - new Point2D(16, 8), // v2 - new Point2D(24, 24), // v3 - new Point2D(32, 8), // v4 - new Point2D(40, 24), // v5 - new Point2D(48, 8), // v6 +new Point2D(8, 24), // v1 +new Point2D(16, 8), // v2 +new Point2D(24, 24), // v3 +new Point2D(32, 8), // v4 +new Point2D(40, 24), // v5 +new Point2D(48, 8) // v6 ]; function getPointTestLocations(expectedColor) { @@ -109,92 +116,96 @@ function getPointTestLocations(expectedColor) { function getLineTestLocations(expectedColor) { // Midpoints of 3 line segments return [ - { - // Line {v1, v2} - coord: Point2D.getMidpoint(VertexLocations[0], VertexLocations[1]), - exp: expectedColor, - }, - { - // Line {v3, v4} - coord: Point2D.getMidpoint(VertexLocations[2], VertexLocations[3]), - exp: expectedColor, - }, - { - // Line {v5, v6} - coord: Point2D.getMidpoint(VertexLocations[4], VertexLocations[5]), - exp: expectedColor, - }, - ]; + { + // Line {v1, v2} + coord: Point2D.getMidpoint(VertexLocations[0], VertexLocations[1]), + exp: expectedColor + }, + { + // Line {v3, v4} + coord: Point2D.getMidpoint(VertexLocations[2], VertexLocations[3]), + exp: expectedColor + }, + { + // Line {v5, v6} + coord: Point2D.getMidpoint(VertexLocations[4], VertexLocations[5]), + exp: expectedColor + }]; + } function getPrimitiveRestartLineTestLocations(expectedColor) { // Midpoints of 2 line segments return [ - { - // Line {v1, v2} - coord: Point2D.getMidpoint(VertexLocations[0], VertexLocations[1]), - exp: expectedColor, - }, - { - // Line {v5, v6} - coord: Point2D.getMidpoint(VertexLocations[4], VertexLocations[5]), - exp: expectedColor, - }, - ]; + { + // Line {v1, v2} + coord: Point2D.getMidpoint(VertexLocations[0], VertexLocations[1]), + exp: expectedColor + }, + { + // Line {v5, v6} + coord: Point2D.getMidpoint(VertexLocations[4], VertexLocations[5]), + exp: expectedColor + }]; + } function getLineStripTestLocations(expectedColor) { // Midpoints of 2 line segments return [ - { - // Line {v2, v3} - coord: Point2D.getMidpoint(VertexLocations[1], VertexLocations[2]), - exp: expectedColor, - }, - { - // Line {v4, v5} - coord: Point2D.getMidpoint(VertexLocations[3], VertexLocations[4]), - exp: expectedColor, - }, - ]; + { + // Line {v2, v3} + coord: Point2D.getMidpoint(VertexLocations[1], VertexLocations[2]), + exp: expectedColor + }, + { + // Line {v4, v5} + coord: Point2D.getMidpoint(VertexLocations[3], VertexLocations[4]), + exp: expectedColor + }]; + } function getTriangleListTestLocations(expectedColor) { // Center of two triangles return [ - { - // Triangle {v1, v2, v3} - coord: Point2D.getCentroid(VertexLocations[0], VertexLocations[1], VertexLocations[2]), - exp: expectedColor, - }, - { - // Triangle {v4, v5, v6} - coord: Point2D.getCentroid(VertexLocations[3], VertexLocations[4], VertexLocations[5]), - exp: expectedColor, - }, - ]; + { + // Triangle {v1, v2, v3} + coord: Point2D.getCentroid(VertexLocations[0], VertexLocations[1], VertexLocations[2]), + exp: expectedColor + }, + { + // Triangle {v4, v5, v6} + coord: Point2D.getCentroid(VertexLocations[3], VertexLocations[4], VertexLocations[5]), + exp: expectedColor + }]; + } function getTriangleStripTestLocations(expectedColor) { // Center of two triangles return [ - { - // Triangle {v2, v3, v4} - coord: Point2D.getCentroid(VertexLocations[1], VertexLocations[2], VertexLocations[3]), - exp: expectedColor, - }, - { - // Triangle {v3, v4, v5} - coord: Point2D.getCentroid(VertexLocations[2], VertexLocations[3], VertexLocations[4]), - exp: expectedColor, - }, - ]; + { + // Triangle {v2, v3, v4} + coord: Point2D.getCentroid(VertexLocations[1], VertexLocations[2], VertexLocations[3]), + exp: expectedColor + }, + { + // Triangle {v3, v4, v5} + coord: Point2D.getCentroid(VertexLocations[2], VertexLocations[3], VertexLocations[4]), + exp: expectedColor + }]; + } function getDefaultTestLocations({ topology, primitiveRestart = false, - invalidateLastInList = false, + invalidateLastInList = false + + + + }) { function maybeInvalidateLast(locations) { if (!invalidateLastInList) return locations; @@ -203,7 +214,7 @@ function getDefaultTestLocations({ if (i === locations.length - 1) { return { coord: tl.coord, - exp: kInvalidPixelColor, + exp: kInvalidPixelColor }; } else { return tl; @@ -215,49 +226,43 @@ function getDefaultTestLocations({ switch (topology) { case 'point-list': testLocations = [ - ...getPointTestLocations(kValidPixelColor), - ...getLineStripTestLocations(kInvalidPixelColor), - ...getTriangleListTestLocations(kInvalidPixelColor), - ...getTriangleStripTestLocations(kInvalidPixelColor), - ]; + ...getPointTestLocations(kValidPixelColor), + ...getLineStripTestLocations(kInvalidPixelColor), + ...getTriangleListTestLocations(kInvalidPixelColor), + ...getTriangleStripTestLocations(kInvalidPixelColor)]; break; case 'line-list': testLocations = [ - ...maybeInvalidateLast(getLineTestLocations(kValidPixelColor)), - ...getLineStripTestLocations(kInvalidPixelColor), - ...getTriangleListTestLocations(kInvalidPixelColor), - ...getTriangleStripTestLocations(kInvalidPixelColor), - ]; + ...maybeInvalidateLast(getLineTestLocations(kValidPixelColor)), + ...getLineStripTestLocations(kInvalidPixelColor), + ...getTriangleListTestLocations(kInvalidPixelColor), + ...getTriangleStripTestLocations(kInvalidPixelColor)]; break; case 'line-strip': testLocations = [ - ...(primitiveRestart - ? getPrimitiveRestartLineTestLocations(kValidPixelColor) - : getLineTestLocations(kValidPixelColor)), - ...getLineStripTestLocations(kValidPixelColor), - ...getTriangleListTestLocations(kInvalidPixelColor), - ...getTriangleStripTestLocations(kInvalidPixelColor), - ]; + ...(primitiveRestart ? + getPrimitiveRestartLineTestLocations(kValidPixelColor) : + getLineTestLocations(kValidPixelColor)), + ...getLineStripTestLocations(kValidPixelColor), + ...getTriangleListTestLocations(kInvalidPixelColor), + ...getTriangleStripTestLocations(kInvalidPixelColor)]; break; case 'triangle-list': testLocations = [ - ...maybeInvalidateLast(getTriangleListTestLocations(kValidPixelColor)), - ...getTriangleStripTestLocations(kInvalidPixelColor), - ]; + ...maybeInvalidateLast(getTriangleListTestLocations(kValidPixelColor)), + ...getTriangleStripTestLocations(kInvalidPixelColor)]; break; case 'triangle-strip': testLocations = [ - ...getTriangleListTestLocations(kValidPixelColor), - ...getTriangleStripTestLocations(primitiveRestart ? kInvalidPixelColor : kValidPixelColor), - ]; + ...getTriangleListTestLocations(kValidPixelColor), + ...getTriangleStripTestLocations(primitiveRestart ? kInvalidPixelColor : kValidPixelColor)]; break; } - return testLocations; } @@ -279,7 +284,7 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { return this.device.createTexture({ format: kColorFormat, size: { width: kRTSize, height: kRTSize, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }); } @@ -288,7 +293,13 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { indirect, testLocations, primitiveRestart = false, - drawCount = kDefaultDrawCount, + drawCount = kDefaultDrawCount + + + + + + }) { const colorAttachment = this.makeAttachmentTexture(); @@ -296,13 +307,13 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { const encoder = this.device.createCommandEncoder(); const renderPass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: colorAttachment.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); let stripIndexFormat = undefined; @@ -325,36 +336,36 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { @location(0) pos : vec4 ) -> @builtin(position) vec4 { return pos; - }`, + }` }), entryPoint: 'main', buffers: [ + { + arrayStride: 4 * Float32Array.BYTES_PER_ELEMENT, + attributes: [ { - arrayStride: 4 * Float32Array.BYTES_PER_ELEMENT, - attributes: [ - { - format: 'float32x4', - offset: 0, - shaderLocation: 0, - }, - ], - }, - ], + format: 'float32x4', + offset: 0, + shaderLocation: 0 + }] + + }] + }, fragment: { module: this.device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: kColorFormat }], + targets: [{ format: kColorFormat }] }, primitive: { topology, - stripIndexFormat, - }, + stripIndexFormat + } }) ); @@ -369,7 +380,6 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { new Uint32Array([0, 1, 2, -1, 3, 4, 5]), GPUBufferUsage.INDEX ); - renderPass.setIndexBuffer(indexBuffer, 'uint32'); if (indirect) { @@ -378,7 +388,6 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { new Uint32Array([drawCount + 1, 1, 0, 0, 0]), GPUBufferUsage.INDIRECT ), - 0 ); } else { @@ -391,7 +400,6 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { new Uint32Array([drawCount, 1, 0, 0]), GPUBufferUsage.INDIRECT ), - 0 ); } else { @@ -408,11 +416,17 @@ class PrimitiveTopologyTest extends TextureTestMixin(GPUTest) { export const g = makeTestGroup(PrimitiveTopologyTest); -const topologies = ['point-list', 'line-list', 'line-strip', 'triangle-list', 'triangle-strip']; +const topologies = [ +'point-list', +'line-list', +'line-strip', +'triangle-list', +'triangle-strip']; -g.test('basic') - .desc( - `Compute test locations for valid and invalid pixels for each topology. + +g.test('basic'). +desc( + `Compute test locations for valid and invalid pixels for each topology. If the primitive covers the pixel, the color value will be |kValidPixelColor|. Otherwise, a non-covered pixel will be |kInvalidPixelColor|. @@ -421,26 +435,26 @@ g.test('basic') - indirect= {true, false} - primitiveRestart= { true, false } - always false for non-strip topologies ` - ) - .params(u => - u // - .combine('topology', topologies) - .combine('indirect', [false, true]) - .combine('primitiveRestart', [false, true]) - .unless( - p => p.primitiveRestart && p.topology !== 'line-strip' && p.topology !== 'triangle-strip' - ) - ) - .fn(t => { - t.run({ - ...t.params, - testLocations: getDefaultTestLocations(t.params), - }); +). +params((u) => +u // +.combine('topology', topologies). +combine('indirect', [false, true]). +combine('primitiveRestart', [false, true]). +unless( + (p) => p.primitiveRestart && p.topology !== 'line-strip' && p.topology !== 'triangle-strip' +) +). +fn((t) => { + t.run({ + ...t.params, + testLocations: getDefaultTestLocations(t.params) }); +}); -g.test('unaligned_vertex_count') - .desc( - `Test that drawing with a number of vertices that's not a multiple of the vertices a given primitive list topology is not an error. The last primitive is not drawn. +g.test('unaligned_vertex_count'). +desc( + `Test that drawing with a number of vertices that's not a multiple of the vertices a given primitive list topology is not an error. The last primitive is not drawn. Params: - topology= {line-list, triangle-list} @@ -448,27 +462,27 @@ g.test('unaligned_vertex_count') - drawCount - number of vertices to draw. A value smaller than the test's default of ${kDefaultDrawCount}. One smaller for line-list. One or two smaller for triangle-list. ` - ) - .params(u => - u // - .combine('topology', ['line-list', 'triangle-list']) - .combine('indirect', [false, true]) - .expand('drawCount', function* (p) { - switch (p.topology) { - case 'line-list': - yield kDefaultDrawCount - 1; - break; - case 'triangle-list': - yield kDefaultDrawCount - 1; - yield kDefaultDrawCount - 2; - break; - } - }) - ) - .fn(t => { - const testLocations = getDefaultTestLocations({ ...t.params, invalidateLastInList: true }); - t.run({ - ...t.params, - testLocations, - }); +). +params((u) => +u // +.combine('topology', ['line-list', 'triangle-list']). +combine('indirect', [false, true]). +expand('drawCount', function* (p) { + switch (p.topology) { + case 'line-list': + yield kDefaultDrawCount - 1; + break; + case 'triangle-list': + yield kDefaultDrawCount - 1; + yield kDefaultDrawCount - 2; + break; + } +}) +). +fn((t) => { + const testLocations = getDefaultTestLocations({ ...t.params, invalidateLastInList: true }); + t.run({ + ...t.params, + testLocations }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/sample_mask.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/sample_mask.spec.js index f1f45e98143..60487998dfd 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/sample_mask.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/sample_mask.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that the final sample mask is the logical AND of all the relevant masks, including the rasterization mask, sample mask, fragment output mask, and alpha to coverage mask (when alphaToCoverageEnabled === true). @@ -15,8 +15,7 @@ The cross-platform behavior is unknown. could be any of: - it uses the first non-null attachment - it's an error Details could be found at: https://github.com/gpuweb/cts/issues/2201 -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert, range } from '../../../../common/util/util.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { checkElementsPassPredicate, checkElementsEqual } from '../../../util/check_contents.js'; @@ -24,15 +23,15 @@ import { TypeF32, TypeU32 } from '../../../util/conversion.js'; import { TexelView } from '../../../util/texture/texel_view.js'; const kColors = [ - // Red - new Uint8Array([0xff, 0, 0, 0xff]), - // Green - new Uint8Array([0, 0xff, 0, 0xff]), - // Blue - new Uint8Array([0, 0, 0xff, 0xff]), - // Yellow - new Uint8Array([0xff, 0xff, 0, 0xff]), -]; +// Red +new Uint8Array([0xff, 0, 0, 0xff]), +// Green +new Uint8Array([0, 0xff, 0, 0xff]), +// Blue +new Uint8Array([0, 0, 0xff, 0xff]), +// Yellow +new Uint8Array([0xff, 0xff, 0, 0xff])]; + const kDepthClearValue = 1.0; const kDepthWriteValue = 0.0; @@ -47,16 +46,21 @@ const depthStencilFormat = 'depth24plus-stencil8'; const kRenderTargetSize = 1; -function hasSample(rasterizationMask, sampleMask, fragmentShaderOutputMask, sampleIndex = 0) { - return (rasterizationMask & sampleMask & fragmentShaderOutputMask & (1 << sampleIndex)) > 0; +function hasSample( +rasterizationMask, +sampleMask, +fragmentShaderOutputMask, +sampleIndex = 0) +{ + return (rasterizationMask & sampleMask & fragmentShaderOutputMask & 1 << sampleIndex) > 0; } function getExpectedColorData( - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMaskOrAlphaToCoverageMask -) { +sampleCount, +rasterizationMask, +sampleMask, +fragmentShaderOutputMaskOrAlphaToCoverageMask) +{ const expectedData = new Float32Array(sampleCount * 4); if (sampleCount === 1) { if (hasSample(rasterizationMask, sampleMask, fragmentShaderOutputMaskOrAlphaToCoverageMask)) { @@ -69,8 +73,8 @@ function getExpectedColorData( } else { for (let i = 0; i < sampleCount; i++) { if ( - hasSample(rasterizationMask, sampleMask, fragmentShaderOutputMaskOrAlphaToCoverageMask, i) - ) { + hasSample(rasterizationMask, sampleMask, fragmentShaderOutputMaskOrAlphaToCoverageMask, i)) + { const o = i * 4; expectedData[o + 0] = kColors[i][0] / 0xff; expectedData[o + 1] = kColors[i][1] / 0xff; @@ -83,11 +87,11 @@ function getExpectedColorData( } function getExpectedDepthData( - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMaskOrAlphaToCoverageMask -) { +sampleCount, +rasterizationMask, +sampleMask, +fragmentShaderOutputMaskOrAlphaToCoverageMask) +{ const expectedData = new Float32Array(sampleCount); for (let i = 0; i < sampleCount; i++) { const s = hasSample( @@ -96,18 +100,17 @@ function getExpectedDepthData( fragmentShaderOutputMaskOrAlphaToCoverageMask, i ); - expectedData[i] = s ? kDepthWriteValue : kDepthClearValue; } return expectedData; } function getExpectedStencilData( - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMaskOrAlphaToCoverageMask -) { +sampleCount, +rasterizationMask, +sampleMask, +fragmentShaderOutputMaskOrAlphaToCoverageMask) +{ const expectedData = new Uint32Array(sampleCount); for (let i = 0; i < sampleCount; i++) { const s = hasSample( @@ -116,7 +119,6 @@ function getExpectedStencilData( fragmentShaderOutputMaskOrAlphaToCoverageMask, i ); - expectedData[i] = s ? kStencilReferenceValue : kStencilClearValue; } return expectedData; @@ -260,6 +262,9 @@ struct FragmentOutput2 { `; class F extends TextureTestMixin(GPUTest) { + + + async init() { await super.init(); if (this.isCompatibility) { @@ -272,47 +277,53 @@ class F extends TextureTestMixin(GPUTest) { // texel 3 - Yellow const kSampleTextureSize = 2; this.sampleTexture = this.createTextureFromTexelView( - TexelView.fromTexelsAsBytes(format, coord => { + TexelView.fromTexelsAsBytes(format, (coord) => { const id = coord.x + coord.y * kSampleTextureSize; return kColors[id]; }), { size: [kSampleTextureSize, kSampleTextureSize, 1], usage: - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.COPY_DST | - GPUTextureUsage.RENDER_ATTACHMENT, + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.COPY_DST | + GPUTextureUsage.RENDER_ATTACHMENT } ); this.sampler = this.device.createSampler({ magFilter: 'nearest', - minFilter: 'nearest', + minFilter: 'nearest' }); } - GetTargetTexture(sampleCount, rasterizationMask, pipeline, uniformBuffer, colorTargetsCount = 1) { + GetTargetTexture( + sampleCount, + rasterizationMask, + pipeline, + uniformBuffer, + colorTargetsCount = 1) + { assert(this.sampleTexture !== undefined); assert(this.sampler !== undefined); const uniformBindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: this.sampler, - }, - { - binding: 1, - resource: this.sampleTexture.createView(), - }, - { - binding: 2, - resource: { - buffer: uniformBuffer, - }, - }, - ], + { + binding: 0, + resource: this.sampler + }, + { + binding: 1, + resource: this.sampleTexture.createView() + }, + { + binding: 2, + resource: { + buffer: uniformBuffer + } + }] + }); const renderTargetTextures = []; @@ -323,39 +334,39 @@ class F extends TextureTestMixin(GPUTest) { size: { width: kRenderTargetSize, height: kRenderTargetSize, - depthOrArrayLayers: 1, + depthOrArrayLayers: 1 }, sampleCount, mipLevelCount: 1, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING }); renderTargetTextures.push(renderTargetTexture); const resolveTargetTexture = - sampleCount === 1 - ? null - : this.device.createTexture({ - format, - size: { - width: kRenderTargetSize, - height: kRenderTargetSize, - depthOrArrayLayers: 1, - }, - sampleCount: 1, - mipLevelCount: 1, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + sampleCount === 1 ? + null : + this.device.createTexture({ + format, + size: { + width: kRenderTargetSize, + height: kRenderTargetSize, + depthOrArrayLayers: 1 + }, + sampleCount: 1, + mipLevelCount: 1, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); resolveTargetTextures.push(resolveTargetTexture); } const depthStencilTexture = this.device.createTexture({ size: { width: kRenderTargetSize, - height: kRenderTargetSize, + height: kRenderTargetSize }, format: depthStencilFormat, sampleCount, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING }); const renderPassDescriptor = { @@ -365,7 +376,7 @@ class F extends TextureTestMixin(GPUTest) { resolveTarget: resolveTargetTextures[index]?.createView(), clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, loadOp: 'clear', - storeOp: 'store', + storeOp: 'store' }; }), depthStencilAttachment: { @@ -375,8 +386,8 @@ class F extends TextureTestMixin(GPUTest) { depthStoreOp: 'store', stencilClearValue: kStencilClearValue, stencilLoadOp: 'clear', - stencilStoreOp: 'store', - }, + stencilStoreOp: 'store' + } }; const commandEncoder = this.device.createCommandEncoder(); const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor); @@ -413,17 +424,17 @@ class F extends TextureTestMixin(GPUTest) { return { color: renderTargetTextures[0], - depthStencil: depthStencilTexture, + depthStencil: depthStencilTexture }; } CheckColorAttachmentResult( - texture, - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMask - ) { + texture, + sampleCount, + rasterizationMask, + sampleMask, + fragmentShaderOutputMask) + { const buffer = this.copySinglePixelTextureToBufferUsingComputePass( TypeF32, // correspond to 'rgba8unorm' format 4, @@ -437,18 +448,17 @@ class F extends TextureTestMixin(GPUTest) { sampleMask, fragmentShaderOutputMask ); - this.expectGPUBufferValuesEqual(buffer, expected); } CheckDepthStencilResult( - aspect, - depthStencilTexture, - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMask - ) { + aspect, + depthStencilTexture, + sampleCount, + rasterizationMask, + sampleMask, + fragmentShaderOutputMask) + { const buffer = this.copySinglePixelTextureToBufferUsingComputePass( // Use f32 as the scalar type for depth (depth24plus, depth32float) // Use u32 as the scalar type for stencil (stencil8) @@ -459,24 +469,23 @@ class F extends TextureTestMixin(GPUTest) { ); const expected = - aspect === 'depth-only' - ? getExpectedDepthData(sampleCount, rasterizationMask, sampleMask, fragmentShaderOutputMask) - : getExpectedStencilData( - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMask - ); - + aspect === 'depth-only' ? + getExpectedDepthData(sampleCount, rasterizationMask, sampleMask, fragmentShaderOutputMask) : + getExpectedStencilData( + sampleCount, + rasterizationMask, + sampleMask, + fragmentShaderOutputMask + ); this.expectGPUBufferValuesEqual(buffer, expected); } } export const g = makeTestGroup(F); -g.test('fragment_output_mask') - .desc( - ` +g.test('fragment_output_mask'). +desc( + ` Tests that the final sample mask is the logical AND of all the relevant masks -- meaning that the samples not included in the final mask are discarded on any attachments including - color outputs @@ -498,113 +507,107 @@ textureLoad each sample index from the texture and write to a storage buffer to - fragment shader output @builtin(sample_mask) = { 0, 0b0001, 0b0010, 0b0111, 0b1011, 0b1101, 0b1110, 0b1111, 0b11110 } - [choosing 0b11110 because the 5th bit should be ignored] ` - ) - .params(u => - u - .combine('interpolated', [false, true]) - .combine('sampleCount', [1, 4]) - .expand('rasterizationMask', function* (p) { - const maxMask = 2 ** p.sampleCount - 1; - for (let i = 0; i <= maxMask; i++) { - yield i; - } - }) - .beginSubcases() - .combine('sampleMask', [0, 0b0001, 0b0010, 0b0111, 0b1011, 0b1101, 0b1110, 0b1111, 0b11110]) - .combine('fragmentShaderOutputMask', [ - 0, - 0b0001, - 0b0010, - 0b0111, - 0b1011, - 0b1101, - 0b1110, - 0b1111, - 0b11110, - ]) - ) - .fn(t => { - const { sampleCount, rasterizationMask, sampleMask, fragmentShaderOutputMask } = t.params; +). +params((u) => +u. +combine('interpolated', [false, true]). +combine('sampleCount', [1, 4]). +expand('rasterizationMask', function* (p) { + const maxMask = 2 ** p.sampleCount - 1; + for (let i = 0; i <= maxMask; i++) { + yield i; + } +}). +beginSubcases(). +combine('sampleMask', [ +0, 0b0001, 0b0010, 0b0111, 0b1011, 0b1101, 0b1110, 0b1111, 0b11110] +). +combine('fragmentShaderOutputMask', [ +0, 0b0001, 0b0010, 0b0111, 0b1011, 0b1101, 0b1110, 0b1111, 0b11110] +) +). +fn((t) => { + const { sampleCount, rasterizationMask, sampleMask, fragmentShaderOutputMask } = t.params; - const fragmentMaskUniformBuffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(fragmentMaskUniformBuffer); - t.device.queue.writeBuffer( - fragmentMaskUniformBuffer, - 0, - new Uint32Array([fragmentShaderOutputMask]) - ); + const fragmentMaskUniformBuffer = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(fragmentMaskUniformBuffer); + t.device.queue.writeBuffer( + fragmentMaskUniformBuffer, + 0, + new Uint32Array([fragmentShaderOutputMask]) + ); - const module = t.device.createShaderModule({ code: kSampleMaskTestShader }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module, entryPoint: 'vmain' }, - fragment: { - module, - entryPoint: `fmain__fragment_output_mask__${t.params.interpolated ? 'interp' : 'flat'}`, - targets: [{ format }], + const module = t.device.createShaderModule({ code: kSampleMaskTestShader }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module, entryPoint: 'vmain' }, + fragment: { + module, + entryPoint: `fmain__fragment_output_mask__${t.params.interpolated ? 'interp' : 'flat'}`, + targets: [{ format }] + }, + primitive: { topology: 'triangle-list' }, + multisample: { + count: sampleCount, + mask: sampleMask, + alphaToCoverageEnabled: false + }, + depthStencil: { + format: depthStencilFormat, + depthWriteEnabled: true, + depthCompare: 'always', + + stencilFront: { + compare: 'always', + passOp: 'replace' }, - primitive: { topology: 'triangle-list' }, - multisample: { - count: sampleCount, - mask: sampleMask, - alphaToCoverageEnabled: false, - }, - depthStencil: { - format: depthStencilFormat, - depthWriteEnabled: true, - depthCompare: 'always', - - stencilFront: { - compare: 'always', - passOp: 'replace', - }, - stencilBack: { - compare: 'always', - passOp: 'replace', - }, - }, - }); - - const { color, depthStencil } = t.GetTargetTexture( - sampleCount, - rasterizationMask, - pipeline, - fragmentMaskUniformBuffer - ); - - t.CheckColorAttachmentResult( - color, - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMask - ); - - t.CheckDepthStencilResult( - 'depth-only', - depthStencil, - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMask - ); - - t.CheckDepthStencilResult( - 'stencil-only', - depthStencil, - sampleCount, - rasterizationMask, - sampleMask, - fragmentShaderOutputMask - ); + stencilBack: { + compare: 'always', + passOp: 'replace' + } + } }); -g.test('alpha_to_coverage_mask') - .desc( - ` + const { color, depthStencil } = t.GetTargetTexture( + sampleCount, + rasterizationMask, + pipeline, + fragmentMaskUniformBuffer + ); + + t.CheckColorAttachmentResult( + color, + sampleCount, + rasterizationMask, + sampleMask, + fragmentShaderOutputMask + ); + + t.CheckDepthStencilResult( + 'depth-only', + depthStencil, + sampleCount, + rasterizationMask, + sampleMask, + fragmentShaderOutputMask + ); + + t.CheckDepthStencilResult( + 'stencil-only', + depthStencil, + sampleCount, + rasterizationMask, + sampleMask, + fragmentShaderOutputMask + ); +}); + +g.test('alpha_to_coverage_mask'). +desc( + ` Test that alpha_to_coverage_mask is working properly with the alpha output of color target[0]. - for sampleCount = 4, alphaToCoverageEnabled = true and various combinations of: @@ -623,179 +626,181 @@ The algorithm of producing the alpha-to-coverage mask is platform-dependent. The at each sample point. for any two alpha values (alpha and alpha') where 0 < alpha' < alpha < 1, the color values (color and color') must satisfy color' <= color. ` - ) - .params(u => - u - .combine('interpolated', [false, true]) - .combine('sampleCount', [4]) - .expand('rasterizationMask', function* (p) { - const maxMask = 2 ** p.sampleCount - 1; - for (let i = 0; i <= maxMask; i++) { - yield i; - } - }) - .beginSubcases() - .combine('alpha1', [0.0, 0.5, 1.0]) - ) - .fn(async t => { - const { sampleCount, rasterizationMask, alpha1 } = t.params; - const sampleMask = 0xffffffff; +). +params((u) => +u. +combine('interpolated', [false, true]). +combine('sampleCount', [4]). +expand('rasterizationMask', function* (p) { + const maxMask = 2 ** p.sampleCount - 1; + for (let i = 0; i <= maxMask; i++) { + yield i; + } +}). +beginSubcases(). +combine('alpha1', [0.0, 0.5, 1.0]) +). +fn(async (t) => { + const { sampleCount, rasterizationMask, alpha1 } = t.params; + const sampleMask = 0xffffffff; - const alphaValues = new Float32Array(4); // [alpha0, alpha1, 0, 0] - const alphaValueUniformBuffer = t.device.createBuffer({ - size: alphaValues.byteLength, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC, + const alphaValues = new Float32Array(4); // [alpha0, alpha1, 0, 0] + const alphaValueUniformBuffer = t.device.createBuffer({ + size: alphaValues.byteLength, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(alphaValueUniformBuffer); + + const module = t.device.createShaderModule({ code: kSampleMaskTestShader }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module, entryPoint: 'vmain' }, + fragment: { + module, + entryPoint: `fmain__alpha_to_coverage_mask__${t.params.interpolated ? 'interp' : 'flat'}`, + targets: [{ format }, { format }] + }, + primitive: { topology: 'triangle-list' }, + multisample: { + count: sampleCount, + mask: sampleMask, + alphaToCoverageEnabled: true + }, + depthStencil: { + format: depthStencilFormat, + depthWriteEnabled: true, + depthCompare: 'always', + + stencilFront: { + compare: 'always', + passOp: 'replace' + }, + stencilBack: { + compare: 'always', + passOp: 'replace' + } + } + }); + + // { < 0, = 0, = 1/16, = 2/16, ..., = 15/16, = 1, > 1 } + const alpha0ParamsArray = [-0.1, ...range(16, (i) => i / 16), 1.0, 1.1]; + + const colorResultPromises = []; + const depthResultPromises = []; + const stencilResultPromises = []; + + for (const alpha0 of alpha0ParamsArray) { + alphaValues[0] = alpha0; + alphaValues[1] = alpha1; + t.device.queue.writeBuffer(alphaValueUniformBuffer, 0, alphaValues); + + const { color, depthStencil } = t.GetTargetTexture( + sampleCount, + rasterizationMask, + pipeline, + alphaValueUniformBuffer, + 2 + ); + + const colorBuffer = t.copySinglePixelTextureToBufferUsingComputePass( + TypeF32, // correspond to 'rgba8unorm' format + 4, + color.createView(), + sampleCount + ); + const colorResult = t.readGPUBufferRangeTyped(colorBuffer, { + type: Float32Array, + typedLength: colorBuffer.size / Float32Array.BYTES_PER_ELEMENT }); - t.trackForCleanup(alphaValueUniformBuffer); + colorResultPromises.push(colorResult); - const module = t.device.createShaderModule({ code: kSampleMaskTestShader }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module, entryPoint: 'vmain' }, - fragment: { - module, - entryPoint: `fmain__alpha_to_coverage_mask__${t.params.interpolated ? 'interp' : 'flat'}`, - targets: [{ format }, { format }], - }, - primitive: { topology: 'triangle-list' }, - multisample: { - count: sampleCount, - mask: sampleMask, - alphaToCoverageEnabled: true, - }, - depthStencil: { - format: depthStencilFormat, - depthWriteEnabled: true, - depthCompare: 'always', - - stencilFront: { - compare: 'always', - passOp: 'replace', - }, - stencilBack: { - compare: 'always', - passOp: 'replace', - }, - }, + const depthBuffer = t.copySinglePixelTextureToBufferUsingComputePass( + TypeF32, // correspond to 'depth24plus-stencil8' format + 1, + depthStencil.createView({ aspect: 'depth-only' }), + sampleCount + ); + const depthResult = t.readGPUBufferRangeTyped(depthBuffer, { + type: Float32Array, + typedLength: depthBuffer.size / Float32Array.BYTES_PER_ELEMENT }); + depthResultPromises.push(depthResult); - // { < 0, = 0, = 1/16, = 2/16, ..., = 15/16, = 1, > 1 } - const alpha0ParamsArray = [-0.1, ...range(16, i => i / 16), 1.0, 1.1]; + const stencilBuffer = t.copySinglePixelTextureToBufferUsingComputePass( + TypeU32, // correspond to 'depth24plus-stencil8' format + 1, + depthStencil.createView({ aspect: 'stencil-only' }), + sampleCount + ); + const stencilResult = t.readGPUBufferRangeTyped(stencilBuffer, { + type: Uint32Array, + typedLength: stencilBuffer.size / Uint32Array.BYTES_PER_ELEMENT + }); + stencilResultPromises.push(stencilResult); + } - const colorResultPromises = []; - const depthResultPromises = []; - const stencilResultPromises = []; + const resultsArray = await Promise.all([ + Promise.all(colorResultPromises), + Promise.all(depthResultPromises), + Promise.all(stencilResultPromises)] + ); - for (const alpha0 of alpha0ParamsArray) { - alphaValues[0] = alpha0; - alphaValues[1] = alpha1; - t.device.queue.writeBuffer(alphaValueUniformBuffer, 0, alphaValues); + const checkResults = ( + results, + getExpectedDataFn, - const { color, depthStencil } = t.GetTargetTexture( - sampleCount, - rasterizationMask, - pipeline, - alphaValueUniformBuffer, - 2 - ); - const colorBuffer = t.copySinglePixelTextureToBufferUsingComputePass( - TypeF32, // correspond to 'rgba8unorm' format - 4, - color.createView(), - sampleCount - ); - const colorResult = t.readGPUBufferRangeTyped(colorBuffer, { - type: Float32Array, - typedLength: colorBuffer.size / Float32Array.BYTES_PER_ELEMENT, - }); - colorResultPromises.push(colorResult); - const depthBuffer = t.copySinglePixelTextureToBufferUsingComputePass( - TypeF32, // correspond to 'depth24plus-stencil8' format - 1, - depthStencil.createView({ aspect: 'depth-only' }), - sampleCount - ); - const depthResult = t.readGPUBufferRangeTyped(depthBuffer, { - type: Float32Array, - typedLength: depthBuffer.size / Float32Array.BYTES_PER_ELEMENT, - }); - depthResultPromises.push(depthResult); - const stencilBuffer = t.copySinglePixelTextureToBufferUsingComputePass( - TypeU32, // correspond to 'depth24plus-stencil8' format - 1, - depthStencil.createView({ aspect: 'stencil-only' }), - sampleCount - ); - const stencilResult = t.readGPUBufferRangeTyped(stencilBuffer, { - type: Uint32Array, - typedLength: stencilBuffer.size / Uint32Array.BYTES_PER_ELEMENT, - }); - stencilResultPromises.push(stencilResult); + + positiveCorrelation) => + { + for (let i = 0; i < results.length; i++) { + const result = results[i]; + const alpha0 = alpha0ParamsArray[i]; + + if (alpha0 <= 0) { + const expected = getExpectedDataFn(sampleCount, rasterizationMask, sampleMask, 0x0); + const check = checkElementsEqual(result.data, expected); + t.expectOK(check); + } else if (alpha0 >= 1) { + const expected = getExpectedDataFn( + sampleCount, + rasterizationMask, + sampleMask, + 0xffffffff + ); + const check = checkElementsEqual(result.data, expected); + t.expectOK(check); + } else { + assert(i > 0); + const prevResult = results[i - 1]; + const check = checkElementsPassPredicate( + result.data, + (index, value) => + positiveCorrelation ? + value >= prevResult.data[index] : + value <= prevResult.data[index], + {} + ); + t.expectOK(check); + } } - const resultsArray = await Promise.all([ - Promise.all(colorResultPromises), - Promise.all(depthResultPromises), - Promise.all(stencilResultPromises), - ]); + for (const result of results) { + result.cleanup(); + } + }; - const checkResults = ( - results, - getExpectedDataFn, + // Check color results + checkResults(resultsArray[0], getExpectedColorData, true); - positiveCorrelation - ) => { - for (let i = 0; i < results.length; i++) { - const result = results[i]; - const alpha0 = alpha0ParamsArray[i]; + // Check depth results + checkResults(resultsArray[1], getExpectedDepthData, false); - if (alpha0 <= 0) { - const expected = getExpectedDataFn(sampleCount, rasterizationMask, sampleMask, 0x0); - const check = checkElementsEqual(result.data, expected); - t.expectOK(check); - } else if (alpha0 >= 1) { - const expected = getExpectedDataFn( - sampleCount, - rasterizationMask, - sampleMask, - 0xffffffff - ); - - const check = checkElementsEqual(result.data, expected); - t.expectOK(check); - } else { - assert(i > 0); - const prevResult = results[i - 1]; - const check = checkElementsPassPredicate( - result.data, - (index, value) => - positiveCorrelation - ? value >= prevResult.data[index] - : value <= prevResult.data[index], - {} - ); - - t.expectOK(check); - } - } - - for (const result of results) { - result.cleanup(); - } - }; - - // Check color results - checkResults(resultsArray[0], getExpectedColorData, true); - - // Check depth results - checkResults(resultsArray[1], getExpectedDepthData, false); - - // Check stencil results - checkResults(resultsArray[2], getExpectedStencilData, true); - }); + // Check stencil results + checkResults(resultsArray[2], getExpectedStencilData, true); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/vertex_only_render_pipeline.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/vertex_only_render_pipeline.spec.js index eb6e3611969..34a61ca27c1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/vertex_only_render_pipeline.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/render_pipeline/vertex_only_render_pipeline.spec.js @@ -1,18 +1,17 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test vertex-only render pipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; class F extends GPUTest {} export const g = makeTestGroup(F); -g.test('draw_depth_and_stencil_with_vertex_only_pipeline') - .desc( - ` +g.test('draw_depth_and_stencil_with_vertex_only_pipeline'). +desc( + ` TODO: - Test drawing depth and stencil with vertex-only render pipelines by 1. Create a color attachment and depth-stencil attachment of 4 pixels in a line, clear the color @@ -26,5 +25,5 @@ TODO: 5. Validate that only the third pixel is of color RGBA(0.0, 1.0, 0.0, 1.0), and all other pixels are RGBA(0.0, 0.0, 0.0, 0.0). ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/basic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/basic.spec.js index a850903b9e1..c549a195a78 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/basic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/basic.spec.js @@ -1,38 +1,37 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Basic command buffer rendering tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { now } from '../../../../common/util/util.js'; import { GPUTest } from '../../../gpu_test.js'; import { checkElementsEqual } from '../../../util/check_contents.js'; export const g = makeTestGroup(GPUTest); -g.test('clear').fn(t => { +g.test('clear').fn((t) => { const dst = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); const colorAttachment = t.device.createTexture({ format: 'rgba8unorm', size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const colorAttachmentView = colorAttachment.createView(); const encoder = t.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachmentView, - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: colorAttachmentView, + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); pass.end(); encoder.copyTextureToBuffer( @@ -40,22 +39,21 @@ g.test('clear').fn(t => { { buffer: dst, bytesPerRow: 256 }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - t.device.queue.submit([encoder.finish()]); t.expectGPUBufferValuesEqual(dst, new Uint8Array([0x00, 0xff, 0x00, 0xff])); }); -g.test('fullscreen_quad').fn(t => { +g.test('fullscreen_quad').fn((t) => { const dst = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); const colorAttachment = t.device.createTexture({ format: 'rgba8unorm', size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const colorAttachmentView = colorAttachment.createView(); @@ -73,9 +71,9 @@ g.test('fullscreen_quad').fn(t => { vec2(-1.0, 1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: t.device.createShaderModule({ @@ -83,24 +81,24 @@ g.test('fullscreen_quad').fn(t => { @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); } - `, + ` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); const encoder = t.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachmentView, - storeOp: 'store', - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - }, - ], + { + view: colorAttachmentView, + storeOp: 'store', + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear' + }] + }); pass.setPipeline(pipeline); pass.draw(3); @@ -110,15 +108,14 @@ g.test('fullscreen_quad').fn(t => { { buffer: dst, bytesPerRow: 256 }, { width: 1, height: 1, depthOrArrayLayers: 1 } ); - t.device.queue.submit([encoder.finish()]); t.expectGPUBufferValuesEqual(dst, new Uint8Array([0x00, 0xff, 0x00, 0xff])); }); -g.test('large_draw') - .desc( - `Test reasonably-sized large {draw, drawIndexed} (see also stress tests). +g.test('large_draw'). +desc( + `Test reasonably-sized large {draw, drawIndexed} (see also stress tests). Tests that draw calls behave reasonably with large vertex counts for non-indexed draws, large index counts for indexed draws, and large instance @@ -139,89 +136,89 @@ g.test('large_draw') Params: - indexed= {true, false} - whether to test indexed or non-indexed draw calls - indirect= {true, false} - whether to use indirect or direct draw calls` - ) - .params(u => - u // - .combine('indexed', [true, false]) - .combine('indirect', [true, false]) - ) - .fn(async t => { - const { indexed, indirect } = t.params; +). +params((u) => +u // +.combine('indexed', [true, false]). +combine('indirect', [true, false]) +). +fn(async (t) => { + const { indexed, indirect } = t.params; - const kBytesPerRow = 256; - const dst = t.device.createBuffer({ - size: 3 * kBytesPerRow, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + const kBytesPerRow = 256; + const dst = t.device.createBuffer({ + size: 3 * kBytesPerRow, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + const paramsBuffer = t.device.createBuffer({ + size: 8, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST + }); + + const indirectBuffer = t.device.createBuffer({ + size: 20, + usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST + }); + const writeIndirectParams = (count, instanceCount) => { + const params = new Uint32Array(5); + params[0] = count; // Vertex or index count + params[1] = instanceCount; + params[2] = 0; // First vertex or index + params[3] = 0; // First instance (non-indexed) or base vertex (indexed) + params[4] = 0; // First instance (indexed) + t.device.queue.writeBuffer(indirectBuffer, 0, params, 0, 5); + }; + + let indexBuffer = null; + if (indexed) { + const kMaxIndices = 16 * 1024 * 1024; + indexBuffer = t.device.createBuffer({ + size: kMaxIndices * Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST, + mappedAtCreation: true }); - - const paramsBuffer = t.device.createBuffer({ - size: 8, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, - }); - - const indirectBuffer = t.device.createBuffer({ - size: 20, - usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST, - }); - const writeIndirectParams = (count, instanceCount) => { - const params = new Uint32Array(5); - params[0] = count; // Vertex or index count - params[1] = instanceCount; - params[2] = 0; // First vertex or index - params[3] = 0; // First instance (non-indexed) or base vertex (indexed) - params[4] = 0; // First instance (indexed) - t.device.queue.writeBuffer(indirectBuffer, 0, params, 0, 5); - }; - - let indexBuffer = null; - if (indexed) { - const kMaxIndices = 16 * 1024 * 1024; - indexBuffer = t.device.createBuffer({ - size: kMaxIndices * Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST, - mappedAtCreation: true, - }); - t.trackForCleanup(indexBuffer); - const indexData = new Uint32Array(indexBuffer.getMappedRange()); - for (let i = 0; i < kMaxIndices; ++i) { - indexData[i] = i; - } - indexBuffer.unmap(); + t.trackForCleanup(indexBuffer); + const indexData = new Uint32Array(indexBuffer.getMappedRange()); + for (let i = 0; i < kMaxIndices; ++i) { + indexData[i] = i; } + indexBuffer.unmap(); + } - const colorAttachment = t.device.createTexture({ - format: 'rgba8unorm', - size: { width: 3, height: 3, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - const colorAttachmentView = colorAttachment.createView(); + const colorAttachment = t.device.createTexture({ + format: 'rgba8unorm', + size: { width: 3, height: 3, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + const colorAttachmentView = colorAttachment.createView(); - const bgLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }); + const bgLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.VERTEX, + buffer: {} + }] - const bindGroup = t.device.createBindGroup({ - layout: bgLayout, - entries: [ - { - binding: 0, - resource: { buffer: paramsBuffer }, - }, - ], - }); + }); - const pipeline = t.device.createRenderPipeline({ - layout: t.device.createPipelineLayout({ bindGroupLayouts: [bgLayout] }), + const bindGroup = t.device.createBindGroup({ + layout: bgLayout, + entries: [ + { + binding: 0, + resource: { buffer: paramsBuffer } + }] - vertex: { - module: t.device.createShaderModule({ - code: ` + }); + + const pipeline = t.device.createRenderPipeline({ + layout: t.device.createPipelineLayout({ bindGroupLayouts: [bgLayout] }), + + vertex: { + module: t.device.createShaderModule({ + code: ` struct Params { numVertices: u32, numInstances: u32, @@ -242,116 +239,115 @@ g.test('large_draw') let y = -selectValue(i, params.numInstances); return vec4(x, y, 0.0, 1.0); } - `, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(1.0, 1.0, 0.0, 1.0); } - `, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - primitive: { topology: 'point-list' }, + ` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + }, + primitive: { topology: 'point-list' } + }); + + const runPipeline = (numVertices, numInstances) => { + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachmentView, + storeOp: 'store', + clearValue: { r: 0.0, g: 0.0, b: 1.0, a: 1.0 }, + loadOp: 'clear' + }] + }); - const runPipeline = (numVertices, numInstances) => { - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachmentView, - storeOp: 'store', - clearValue: { r: 0.0, g: 0.0, b: 1.0, a: 1.0 }, - loadOp: 'clear', - }, - ], - }); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + if (indexBuffer !== null) { + pass.setIndexBuffer(indexBuffer, 'uint32'); + } - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - if (indexBuffer !== null) { - pass.setIndexBuffer(indexBuffer, 'uint32'); - } - - if (indirect) { - writeIndirectParams(numVertices, numInstances); - if (indexed) { - pass.drawIndexedIndirect(indirectBuffer, 0); - } else { - pass.drawIndirect(indirectBuffer, 0); - } + if (indirect) { + writeIndirectParams(numVertices, numInstances); + if (indexed) { + pass.drawIndexedIndirect(indirectBuffer, 0); } else { - if (indexed) { - pass.drawIndexed(numVertices, numInstances); - } else { - pass.draw(numVertices, numInstances); - } + pass.drawIndirect(indirectBuffer, 0); } - pass.end(); - encoder.copyTextureToBuffer( - { texture: colorAttachment, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, - { buffer: dst, bytesPerRow: kBytesPerRow }, - { width: 3, height: 3, depthOrArrayLayers: 1 } - ); - - const params = new Uint32Array([numVertices, numInstances]); - t.device.queue.writeBuffer(paramsBuffer, 0, params, 0, 2); - t.device.queue.submit([encoder.finish()]); - - const yellow = [0xff, 0xff, 0x00, 0xff]; - const allYellow = new Uint8Array([...yellow, ...yellow, ...yellow]); - for (const row of [0, 1, 2]) { - t.expectGPUBufferValuesPassCheck(dst, data => checkElementsEqual(data, allYellow), { - srcByteOffset: row * 256, - type: Uint8Array, - typedLength: 12, - }); - } - }; - - // If any iteration takes longer than this, we stop incrementing along that - // branch and move on to the next instance count. Note that the max - // supported vertex count for any iteration is 2**24 due to our choice of - // index buffer size. - const maxDurationMs = 100; - const counts = [ - { - numInstances: 4, - vertexCounts: [2 ** 10, 2 ** 16, 2 ** 18, 2 ** 20, 2 ** 22, 2 ** 24], - }, - { - numInstances: 2 ** 8, - vertexCounts: [2 ** 10, 2 ** 16, 2 ** 18, 2 ** 20, 2 ** 22], - }, - { - numInstances: 2 ** 10, - vertexCounts: [2 ** 8, 2 ** 10, 2 ** 12, 2 ** 16, 2 ** 18, 2 ** 20], - }, - { - numInstances: 2 ** 16, - vertexCounts: [2 ** 4, 2 ** 8, 2 ** 10, 2 ** 12, 2 ** 14], - }, - { - numInstances: 2 ** 20, - vertexCounts: [2 ** 4, 2 ** 8, 2 ** 10], - }, - ]; - - for (const { numInstances, vertexCounts } of counts) { - for (const numVertices of vertexCounts) { - const start = now(); - runPipeline(numVertices, numInstances); - await t.device.queue.onSubmittedWorkDone(); - const duration = now() - start; - if (duration >= maxDurationMs) { - break; - } + } else { + if (indexed) { + pass.drawIndexed(numVertices, numInstances); + } else { + pass.draw(numVertices, numInstances); } } - }); + pass.end(); + encoder.copyTextureToBuffer( + { texture: colorAttachment, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { buffer: dst, bytesPerRow: kBytesPerRow }, + { width: 3, height: 3, depthOrArrayLayers: 1 } + ); + + const params = new Uint32Array([numVertices, numInstances]); + t.device.queue.writeBuffer(paramsBuffer, 0, params, 0, 2); + t.device.queue.submit([encoder.finish()]); + + const yellow = [0xff, 0xff, 0x00, 0xff]; + const allYellow = new Uint8Array([...yellow, ...yellow, ...yellow]); + for (const row of [0, 1, 2]) { + t.expectGPUBufferValuesPassCheck(dst, (data) => checkElementsEqual(data, allYellow), { + srcByteOffset: row * 256, + type: Uint8Array, + typedLength: 12 + }); + } + }; + + // If any iteration takes longer than this, we stop incrementing along that + // branch and move on to the next instance count. Note that the max + // supported vertex count for any iteration is 2**24 due to our choice of + // index buffer size. + const maxDurationMs = 100; + const counts = [ + { + numInstances: 4, + vertexCounts: [2 ** 10, 2 ** 16, 2 ** 18, 2 ** 20, 2 ** 22, 2 ** 24] + }, + { + numInstances: 2 ** 8, + vertexCounts: [2 ** 10, 2 ** 16, 2 ** 18, 2 ** 20, 2 ** 22] + }, + { + numInstances: 2 ** 10, + vertexCounts: [2 ** 8, 2 ** 10, 2 ** 12, 2 ** 16, 2 ** 18, 2 ** 20] + }, + { + numInstances: 2 ** 16, + vertexCounts: [2 ** 4, 2 ** 8, 2 ** 10, 2 ** 12, 2 ** 14] + }, + { + numInstances: 2 ** 20, + vertexCounts: [2 ** 4, 2 ** 8, 2 ** 10] + }]; + + for (const { numInstances, vertexCounts } of counts) { + for (const numVertices of vertexCounts) { + const start = now(); + runPipeline(numVertices, numInstances); + await t.device.queue.onSubmittedWorkDone(); + const duration = now() - start; + if (duration >= maxDurationMs) { + break; + } + } + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/color_target_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/color_target_state.spec.js index 6e55f623da7..4e0a49f507f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/color_target_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/color_target_state.spec.js @@ -1,14 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test blending results. TODO: - Test result for all combinations of args (make sure each case is distinguishable from others - Test underflow/overflow has consistent behavior - ? -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert, unreachable } from '../../../../common/util/util.js'; import { kBlendFactors, kBlendOperations } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; @@ -32,9 +31,9 @@ class BlendingTest extends GPUTest { @fragment fn main() -> @location(0) vec4 { return params.color; } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, vertex: { module: this.device.createShaderModule({ @@ -48,10 +47,10 @@ class BlendingTest extends GPUTest { vec2(-1.0, 3.0)); return vec4(pos[VertexIndex], 0.0, 1.0); } - `, + ` }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); } @@ -59,29 +58,37 @@ class BlendingTest extends GPUTest { return this.device.createBindGroup({ layout, entries: [ - { - binding: 0, - resource: { - buffer: this.makeBufferWithContents(data, GPUBufferUsage.UNIFORM), - }, - }, - ], + { + binding: 0, + resource: { + buffer: this.makeBufferWithContents(data, GPUBufferUsage.UNIFORM) + } + }] + }); } } export const g = makeTestGroup(TextureTestMixin(BlendingTest)); -function mapColor(col, f) { +function mapColor( +col, +f) +{ return { r: f(col.r, 'r'), g: f(col.g, 'g'), b: f(col.b, 'b'), - a: f(col.a, 'a'), + a: f(col.a, 'a') }; } -function computeBlendFactor(src, dst, blendColor, factor) { +function computeBlendFactor( +src, +dst, +blendColor, +factor) +{ switch (factor) { case 'zero': return { r: 0, g: 0, b: 0, a: 0 }; @@ -90,7 +97,7 @@ function computeBlendFactor(src, dst, blendColor, factor) { case 'src': return { ...src }; case 'one-minus-src': - return mapColor(src, v => 1 - v); + return mapColor(src, (v) => 1 - v); case 'src-alpha': return mapColor(src, () => src.a); case 'one-minus-src-alpha': @@ -98,27 +105,33 @@ function computeBlendFactor(src, dst, blendColor, factor) { case 'dst': return { ...dst }; case 'one-minus-dst': - return mapColor(dst, v => 1 - v); + return mapColor(dst, (v) => 1 - v); case 'dst-alpha': return mapColor(dst, () => dst.a); case 'one-minus-dst-alpha': return mapColor(dst, () => 1 - dst.a); - case 'src-alpha-saturated': { - const f = Math.min(src.a, 1 - dst.a); - return { r: f, g: f, b: f, a: 1 }; - } + case 'src-alpha-saturated':{ + const f = Math.min(src.a, 1 - dst.a); + return { r: f, g: f, b: f, a: 1 }; + } case 'constant': assert(blendColor !== undefined); return { ...blendColor }; case 'one-minus-constant': assert(blendColor !== undefined); - return mapColor(blendColor, v => 1 - v); + return mapColor(blendColor, (v) => 1 - v); default: unreachable(); } } -function computeBlendOperation(src, srcFactor, dst, dstFactor, operation) { +function computeBlendOperation( +src, +srcFactor, +dst, +dstFactor, +operation) +{ switch (operation) { case 'add': return mapColor(src, (_, k) => srcFactor[k] * src[k] + dstFactor[k] * dst[k]); @@ -133,9 +146,9 @@ function computeBlendOperation(src, srcFactor, dst, dstFactor, operation) { } } -g.test('blending,GPUBlendComponent') - .desc( - `Test all combinations of parameters for GPUBlendComponent. +g.test('blending,GPUBlendComponent'). +desc( + `Test all combinations of parameters for GPUBlendComponent. Tests that parameters are correctly passed to the backend API and blend computations are done correctly by blending a single pixel. The test uses rgba16float as the format @@ -146,84 +159,83 @@ g.test('blending,GPUBlendComponent') - srcFactor= {...all GPUBlendFactors} - dstFactor= {...all GPUBlendFactors} - operation= {...all GPUBlendOperations}` - ) - .params(u => - u // - .combine('component', ['color', 'alpha']) - .combine('srcFactor', kBlendFactors) - .combine('dstFactor', kBlendFactors) - .combine('operation', kBlendOperations) - .filter(t => { - if (t.operation === 'min' || t.operation === 'max') { - return t.srcFactor === 'one' && t.dstFactor === 'one'; +). +params((u) => +u // +.combine('component', ['color', 'alpha']). +combine('srcFactor', kBlendFactors). +combine('dstFactor', kBlendFactors). +combine('operation', kBlendOperations). +filter((t) => { + if (t.operation === 'min' || t.operation === 'max') { + return t.srcFactor === 'one' && t.dstFactor === 'one'; + } + return true; +}). +beginSubcases(). +combine('srcColor', [{ r: 0.11, g: 0.61, b: 0.81, a: 0.44 }]). +combine('dstColor', [ +{ r: 0.51, g: 0.22, b: 0.71, a: 0.33 }, +{ r: 0.09, g: 0.73, b: 0.93, a: 0.81 }] +). +expand('blendConstant', (p) => { + const needsBlendConstant = + p.srcFactor === 'one-minus-constant' || + p.srcFactor === 'constant' || + p.dstFactor === 'one-minus-constant' || + p.dstFactor === 'constant'; + return needsBlendConstant ? [{ r: 0.91, g: 0.82, b: 0.73, a: 0.64 }] : [undefined]; +}) +). +fn((t) => { + const textureFormat = 'rgba16float'; + const srcColor = t.params.srcColor; + const dstColor = t.params.dstColor; + const blendConstant = t.params.blendConstant; + + const srcFactor = computeBlendFactor(srcColor, dstColor, blendConstant, t.params.srcFactor); + const dstFactor = computeBlendFactor(srcColor, dstColor, blendConstant, t.params.dstFactor); + + const expectedColor = computeBlendOperation( + srcColor, + srcFactor, + dstColor, + dstFactor, + t.params.operation + ); + + switch (t.params.component) { + case 'color': + expectedColor.a = srcColor.a; + break; + case 'alpha': + expectedColor.r = srcColor.r; + expectedColor.g = srcColor.g; + expectedColor.b = srcColor.b; + break; + } + + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + fragment: { + targets: [ + { + format: textureFormat, + blend: { + // Set both color/alpha to defaults... + color: {}, + alpha: {}, + // ... but then override the component we're testing. + [t.params.component]: { + srcFactor: t.params.srcFactor, + dstFactor: t.params.dstFactor, + operation: t.params.operation + } } - return true; - }) - .beginSubcases() - .combine('srcColor', [{ r: 0.11, g: 0.61, b: 0.81, a: 0.44 }]) - .combine('dstColor', [ - { r: 0.51, g: 0.22, b: 0.71, a: 0.33 }, - { r: 0.09, g: 0.73, b: 0.93, a: 0.81 }, - ]) - .expand('blendConstant', p => { - const needsBlendConstant = - p.srcFactor === 'one-minus-constant' || - p.srcFactor === 'constant' || - p.dstFactor === 'one-minus-constant' || - p.dstFactor === 'constant'; - return needsBlendConstant ? [{ r: 0.91, g: 0.82, b: 0.73, a: 0.64 }] : [undefined]; - }) - ) - .fn(t => { - const textureFormat = 'rgba16float'; - const srcColor = t.params.srcColor; - const dstColor = t.params.dstColor; - const blendConstant = t.params.blendConstant; + }], - const srcFactor = computeBlendFactor(srcColor, dstColor, blendConstant, t.params.srcFactor); - const dstFactor = computeBlendFactor(srcColor, dstColor, blendConstant, t.params.dstFactor); - - const expectedColor = computeBlendOperation( - srcColor, - srcFactor, - dstColor, - dstFactor, - t.params.operation - ); - - switch (t.params.component) { - case 'color': - expectedColor.a = srcColor.a; - break; - case 'alpha': - expectedColor.r = srcColor.r; - expectedColor.g = srcColor.g; - expectedColor.b = srcColor.b; - break; - } - - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - fragment: { - targets: [ - { - format: textureFormat, - blend: { - // Set both color/alpha to defaults... - color: {}, - alpha: {}, - // ... but then override the component we're testing. - [t.params.component]: { - srcFactor: t.params.srcFactor, - dstFactor: t.params.dstFactor, - operation: t.params.operation, - }, - }, - }, - ], - - module: t.device.createShaderModule({ - code: ` + module: t.device.createShaderModule({ + code: ` struct Uniform { color: vec4 }; @@ -232,583 +244,575 @@ struct Uniform { @fragment fn main() -> @location(0) vec4 { return u.color; } - `, - }), - entryPoint: 'main', - }, - vertex: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); } - `, - }), - entryPoint: 'main', - }, - primitive: { - topology: 'point-list', - }, - }); - - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [1, 1, 1], - format: textureFormat, - }); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - clearValue: dstColor, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(pipeline); - if (blendConstant) { - renderPass.setBlendConstant(blendConstant); + ` + }), + entryPoint: 'main' + }, + primitive: { + topology: 'point-list' } - renderPass.setBindGroup( - 0, - t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: { - buffer: t.makeBufferWithContents( - new Float32Array([srcColor.r, srcColor.g, srcColor.b, srcColor.a]), - GPUBufferUsage.UNIFORM - ), - }, - }, - ], - }) - ); - - renderPass.draw(1); - renderPass.end(); - - t.device.queue.submit([commandEncoder.finish()]); - - t.expectSinglePixelComparisonsAreOkInTexture( - { texture: renderTarget }, - [ - { - coord: { x: 0, y: 0 }, - exp: { R: expectedColor.r, G: expectedColor.g, B: expectedColor.b, A: expectedColor.a }, - }, - ], - - { maxFractionalDiff: 0.003 } - ); }); -const kBlendableFormats = kEncodableTextureFormats.filter(f => { + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [1, 1, 1], + format: textureFormat + }); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + clearValue: dstColor, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(pipeline); + if (blendConstant) { + renderPass.setBlendConstant(blendConstant); + } + renderPass.setBindGroup( + 0, + t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: t.makeBufferWithContents( + new Float32Array([srcColor.r, srcColor.g, srcColor.b, srcColor.a]), + GPUBufferUsage.UNIFORM + ) + } + }] + + }) + ); + renderPass.draw(1); + renderPass.end(); + + t.device.queue.submit([commandEncoder.finish()]); + + t.expectSinglePixelComparisonsAreOkInTexture( + { texture: renderTarget }, + [ + { + coord: { x: 0, y: 0 }, + exp: { R: expectedColor.r, G: expectedColor.g, B: expectedColor.b, A: expectedColor.a } + }], + + { maxFractionalDiff: 0.003 } + ); +}); + +const kBlendableFormats = kEncodableTextureFormats.filter((f) => { const info = kTextureFormatInfo[f]; return info.renderable && info.sampleType === 'float'; }); -g.test('blending,formats') - .desc( - `Test blending results works for all formats that support it, and that blending is not applied +g.test('blending,formats'). +desc( + `Test blending results works for all formats that support it, and that blending is not applied for formats that do not. Blending should be done in linear space for srgb formats.` - ) - .params(u => - u // - .combine('format', kBlendableFormats) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(t => { - const { format } = t.params; +). +params((u) => +u // +.combine('format', kBlendableFormats) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn((t) => { + const { format } = t.params; - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - fragment: { - targets: [ - { - format, - blend: { - color: { srcFactor: 'one', dstFactor: 'one', operation: 'add' }, - alpha: { srcFactor: 'one', dstFactor: 'one', operation: 'add' }, - }, - }, - ], + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + fragment: { + targets: [ + { + format, + blend: { + color: { srcFactor: 'one', dstFactor: 'one', operation: 'add' }, + alpha: { srcFactor: 'one', dstFactor: 'one', operation: 'add' } + } + }], - module: t.device.createShaderModule({ - code: ` + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.4, 0.4, 0.4, 0.4); } - `, - }), - entryPoint: 'main', - }, - vertex: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); } - `, - }), - entryPoint: 'main', - }, - primitive: { - topology: 'point-list', - }, - }); - - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [1, 1, 1], - format, - }); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - clearValue: { r: 0.2, g: 0.2, b: 0.2, a: 0.2 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(pipeline); - renderPass.draw(1); - renderPass.end(); - t.device.queue.submit([commandEncoder.finish()]); - - const expColor = { R: 0.6, G: 0.6, B: 0.6, A: 0.6 }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1, 1]); + ` + }), + entryPoint: 'main' + }, + primitive: { + topology: 'point-list' + } }); -g.test('blend_constant,initial') - .desc(`Test that the blend constant is set to [0,0,0,0] at the beginning of a pass.`) - .fn(t => { - const format = 'rgba8unorm'; - const kSize = 1; - const kWhiteColorData = new Float32Array([255, 255, 255, 255]); + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [1, 1, 1], + format + }); - const blendComponent = { srcFactor: 'constant', dstFactor: 'one', operation: 'add' }; - const testPipeline = t.createRenderPipelineForTest({ - format, - blend: { color: blendComponent, alpha: blendComponent }, - }); + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + clearValue: { r: 0.2, g: 0.2, b: 0.2, a: 0.2 }, + loadOp: 'clear', + storeOp: 'store' + }] - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [kSize, kSize], - format, - }); + }); + renderPass.setPipeline(pipeline); + renderPass.draw(1); + renderPass.end(); + t.device.queue.submit([commandEncoder.finish()]); - const commandEncoder = t.device.createCommandEncoder(); + const expColor = { R: 0.6, G: 0.6, B: 0.6, A: 0.6 }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1, 1]); +}); + +g.test('blend_constant,initial'). +desc(`Test that the blend constant is set to [0,0,0,0] at the beginning of a pass.`). +fn((t) => { + const format = 'rgba8unorm'; + const kSize = 1; + const kWhiteColorData = new Float32Array([255, 255, 255, 255]); + + const blendComponent = { srcFactor: 'constant', dstFactor: 'one', operation: 'add' }; + const testPipeline = t.createRenderPipelineForTest({ + format, + blend: { color: blendComponent, alpha: blendComponent } + }); + + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [kSize, kSize], + format + }); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(testPipeline); + renderPass.setBindGroup( + 0, + t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) + ); + renderPass.draw(3); + // Draw [1,1,1,1] with `src * constant + dst * 1`. + // The blend constant defaults to [0,0,0,0], so the result is + // `[1,1,1,1] * [0,0,0,0] + [0,0,0,0] * 1` = [0,0,0,0]. + renderPass.end(); + t.device.queue.submit([commandEncoder.finish()]); + + // Check that the initial blend constant is black(0,0,0,0) after setting testPipeline which has + // a white color buffer data. + const expColor = { R: 0, G: 0, B: 0, A: 0 }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ + kSize, + kSize] + ); +}); + +g.test('blend_constant,setting'). +desc(`Test that setting the blend constant to the RGBA values works at the beginning of a pass.`). +paramsSubcasesOnly([ +{ r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, +{ r: 0.5, g: 1.0, b: 0.5, a: 0.0 }, +{ r: 0.0, g: 0.0, b: 0.0, a: 0.0 }] +). +fn((t) => { + const { r, g, b, a } = t.params; + + const format = 'rgba8unorm'; + const kSize = 1; + const kWhiteColorData = new Float32Array([255, 255, 255, 255]); + + const blendComponent = { srcFactor: 'constant', dstFactor: 'one', operation: 'add' }; + const testPipeline = t.createRenderPipelineForTest({ + format, + blend: { color: blendComponent, alpha: blendComponent } + }); + + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [kSize, kSize], + format + }); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(testPipeline); + renderPass.setBlendConstant({ r, g, b, a }); + renderPass.setBindGroup( + 0, + t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) + ); + renderPass.draw(3); + // Draw [1,1,1,1] with `src * constant + dst * 1`. The blend constant to [r,g,b,a], so the + // result is `[1,1,1,1] * [r,g,b,a] + [0,0,0,0] * 1` = [r,g,b,a]. + renderPass.end(); + t.device.queue.submit([commandEncoder.finish()]); + + // Check that the blend constant is the same as the given constant after setting the constant + // via setBlendConstant. + const expColor = { R: r, G: g, B: b, A: a }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); + + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ + kSize, + kSize] + ); +}); + +g.test('blend_constant,not_inherited'). +desc(`Test that the blending constant is not inherited between render passes.`). +fn((t) => { + const format = 'rgba8unorm'; + const kSize = 1; + const kWhiteColorData = new Float32Array([255, 255, 255, 255]); + + const blendComponent = { srcFactor: 'constant', dstFactor: 'one', operation: 'add' }; + const testPipeline = t.createRenderPipelineForTest({ + format, + blend: { color: blendComponent, alpha: blendComponent } + }); + + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [kSize, kSize], + format + }); + + const commandEncoder = t.device.createCommandEncoder(); + { const renderPass = commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: renderTarget.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(testPipeline); + renderPass.setBlendConstant({ r: 1.0, g: 1.0, b: 1.0, a: 1.0 }); // Set to white color. + renderPass.setBindGroup( + 0, + t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) + ); + renderPass.draw(3); + // Draw [1,1,1,1] with `src * constant + dst * 1`. The blend constant to [1,1,1,1], so the + // result is `[1,1,1,1] * [1,1,1,1] + [0,0,0,0] * 1` = [1,1,1,1]. + renderPass.end(); + } + { + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + loadOp: 'clear', + storeOp: 'store' + }] + }); renderPass.setPipeline(testPipeline); renderPass.setBindGroup( 0, t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) ); - renderPass.draw(3); - // Draw [1,1,1,1] with `src * constant + dst * 1`. - // The blend constant defaults to [0,0,0,0], so the result is - // `[1,1,1,1] * [0,0,0,0] + [0,0,0,0] * 1` = [0,0,0,0]. + // Draw [1,1,1,1] with `src * constant + dst * 1`. The blend constant defaults to [0,0,0,0], + // so the result is `[1,1,1,1] * [0,0,0,0] + [0,0,0,0] * 1` = [0,0,0,0]. renderPass.end(); - t.device.queue.submit([commandEncoder.finish()]); + } + t.device.queue.submit([commandEncoder.finish()]); - // Check that the initial blend constant is black(0,0,0,0) after setting testPipeline which has - // a white color buffer data. - const expColor = { R: 0, G: 0, B: 0, A: 0 }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ - kSize, - kSize, - ]); - }); + // Check that the blend constant is not inherited from the first render pass. + const expColor = { R: 0, G: 0, B: 0, A: 0 }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); -g.test('blend_constant,setting') - .desc(`Test that setting the blend constant to the RGBA values works at the beginning of a pass.`) - .paramsSubcasesOnly([ - { r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, - { r: 0.5, g: 1.0, b: 0.5, a: 0.0 }, - { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - ]) - .fn(t => { - const { r, g, b, a } = t.params; + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ + kSize, + kSize] + ); +}); - const format = 'rgba8unorm'; - const kSize = 1; - const kWhiteColorData = new Float32Array([255, 255, 255, 255]); +const kColorWriteCombinations = [ +0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; - const blendComponent = { srcFactor: 'constant', dstFactor: 'one', operation: 'add' }; - const testPipeline = t.createRenderPipelineForTest({ - format, - blend: { color: blendComponent, alpha: blendComponent }, - }); - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [kSize, kSize], - format, - }); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(testPipeline); - renderPass.setBlendConstant({ r, g, b, a }); - renderPass.setBindGroup( - 0, - t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) - ); - - renderPass.draw(3); - // Draw [1,1,1,1] with `src * constant + dst * 1`. The blend constant to [r,g,b,a], so the - // result is `[1,1,1,1] * [r,g,b,a] + [0,0,0,0] * 1` = [r,g,b,a]. - renderPass.end(); - t.device.queue.submit([commandEncoder.finish()]); - - // Check that the blend constant is the same as the given constant after setting the constant - // via setBlendConstant. - const expColor = { R: r, G: g, B: b, A: a }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ - kSize, - kSize, - ]); - }); - -g.test('blend_constant,not_inherited') - .desc(`Test that the blending constant is not inherited between render passes.`) - .fn(t => { - const format = 'rgba8unorm'; - const kSize = 1; - const kWhiteColorData = new Float32Array([255, 255, 255, 255]); - - const blendComponent = { srcFactor: 'constant', dstFactor: 'one', operation: 'add' }; - const testPipeline = t.createRenderPipelineForTest({ - format, - blend: { color: blendComponent, alpha: blendComponent }, - }); - - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [kSize, kSize], - format, - }); - - const commandEncoder = t.device.createCommandEncoder(); - { - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(testPipeline); - renderPass.setBlendConstant({ r: 1.0, g: 1.0, b: 1.0, a: 1.0 }); // Set to white color. - renderPass.setBindGroup( - 0, - t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) - ); - - renderPass.draw(3); - // Draw [1,1,1,1] with `src * constant + dst * 1`. The blend constant to [1,1,1,1], so the - // result is `[1,1,1,1] * [1,1,1,1] + [0,0,0,0] * 1` = [1,1,1,1]. - renderPass.end(); - } - { - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(testPipeline); - renderPass.setBindGroup( - 0, - t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kWhiteColorData) - ); - - renderPass.draw(3); - // Draw [1,1,1,1] with `src * constant + dst * 1`. The blend constant defaults to [0,0,0,0], - // so the result is `[1,1,1,1] * [0,0,0,0] + [0,0,0,0] * 1` = [0,0,0,0]. - renderPass.end(); - } - t.device.queue.submit([commandEncoder.finish()]); - - // Check that the blend constant is not inherited from the first render pass. - const expColor = { R: 0, G: 0, B: 0, A: 0 }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ - kSize, - kSize, - ]); - }); - -const kColorWriteCombinations = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; - -g.test('color_write_mask,channel_work') - .desc( - ` +g.test('color_write_mask,channel_work'). +desc( + ` Test that the color write mask works with the zero channel, a single channel, multiple channels, and all channels. ` - ) - .params(u => - u // - .combine('mask', kColorWriteCombinations) - ) - .fn(t => { - const { mask } = t.params; +). +params((u) => +u // +.combine('mask', kColorWriteCombinations) +). +fn((t) => { + const { mask } = t.params; - const format = 'rgba8unorm'; - const kSize = 1; + const format = 'rgba8unorm'; + const kSize = 1; - let r = 0, - g = 0, - b = 0, - a = 0; - if (mask & GPUConst.ColorWrite.RED) { - r = 1; - } - if (mask & GPUConst.ColorWrite.GREEN) { - g = 1; - } - if (mask & GPUConst.ColorWrite.BLUE) { - b = 1; - } - if (mask & GPUConst.ColorWrite.ALPHA) { - a = 1; - } + let r = 0, + g = 0, + b = 0, + a = 0; + if (mask & GPUConst.ColorWrite.RED) { + r = 1; + } + if (mask & GPUConst.ColorWrite.GREEN) { + g = 1; + } + if (mask & GPUConst.ColorWrite.BLUE) { + b = 1; + } + if (mask & GPUConst.ColorWrite.ALPHA) { + a = 1; + } - const testPipeline = t.createRenderPipelineForTest({ - format, - writeMask: mask, - }); - - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [kSize, kSize], - format, - }); - - const kBaseColorData = new Float32Array([32, 64, 128, 192]); - - const commandEncoder = t.device.createCommandEncoder(); - { - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(testPipeline); - renderPass.setBindGroup( - 0, - t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kBaseColorData) - ); - - renderPass.draw(3); - renderPass.end(); - } - t.device.queue.submit([commandEncoder.finish()]); - - const expColor = { R: r, G: g, B: b, A: a }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ - kSize, - kSize, - ]); + const testPipeline = t.createRenderPipelineForTest({ + format, + writeMask: mask }); -g.test('color_write_mask,blending_disabled') - .desc( - `Test that the color write mask works when blending is disabled or set to the defaults + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [kSize, kSize], + format + }); + + const kBaseColorData = new Float32Array([32, 64, 128, 192]); + + const commandEncoder = t.device.createCommandEncoder(); + { + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(testPipeline); + renderPass.setBindGroup( + 0, + t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kBaseColorData) + ); + renderPass.draw(3); + renderPass.end(); + } + t.device.queue.submit([commandEncoder.finish()]); + + const expColor = { R: r, G: g, B: b, A: a }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); + + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ + kSize, + kSize] + ); +}); + +g.test('color_write_mask,blending_disabled'). +desc( + `Test that the color write mask works when blending is disabled or set to the defaults (which has the same blending result).` - ) - .params(u => u.combine('disabled', [false, true])) - .fn(t => { - const format = 'rgba8unorm'; - const kSize = 1; +). +params((u) => u.combine('disabled', [false, true])). +fn((t) => { + const format = 'rgba8unorm'; + const kSize = 1; - const blend = t.params.disabled ? undefined : { color: {}, alpha: {} }; + const blend = t.params.disabled ? undefined : { color: {}, alpha: {} }; - const testPipeline = t.createRenderPipelineForTest({ - format, - blend, - writeMask: GPUColorWrite.RED, - }); - - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [kSize, kSize], - format, - }); - - const kBaseColorData = new Float32Array([32, 64, 128, 192]); - - const commandEncoder = t.device.createCommandEncoder(); - { - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(testPipeline); - renderPass.setBindGroup( - 0, - t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kBaseColorData) - ); - - // Draw [1,1,1,1] with `src * 1 + dst * 0`. So the - // result is `[1,1,1,1] * [1,1,1,1] + [0,0,0,0] * 0` = [1,1,1,1]. - renderPass.draw(3); - renderPass.end(); - } - t.device.queue.submit([commandEncoder.finish()]); - - const expColor = { R: 1, G: 0, B: 0, A: 0 }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ - kSize, - kSize, - ]); + const testPipeline = t.createRenderPipelineForTest({ + format, + blend, + writeMask: GPUColorWrite.RED }); -g.test('blending,clamping') - .desc( - ` + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [kSize, kSize], + format + }); + + const kBaseColorData = new Float32Array([32, 64, 128, 192]); + + const commandEncoder = t.device.createCommandEncoder(); + { + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(testPipeline); + renderPass.setBindGroup( + 0, + t.createBindGroupForTest(testPipeline.getBindGroupLayout(0), kBaseColorData) + ); + // Draw [1,1,1,1] with `src * 1 + dst * 0`. So the + // result is `[1,1,1,1] * [1,1,1,1] + [0,0,0,0] * 0` = [1,1,1,1]. + renderPass.draw(3); + renderPass.end(); + } + t.device.queue.submit([commandEncoder.finish()]); + + const expColor = { R: 1, G: 0, B: 0, A: 0 }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); + + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [ + kSize, + kSize] + ); +}); + +g.test('blending,clamping'). +desc( + ` Test that clamping occurs at the correct points in the blend process: src value, src factor, dst factor, and output. - TODO: Need to test snorm formats. - TODO: Need to test src value, srcFactor and dstFactor. ` - ) - .params(u => - u // - .combine('format', ['rgba8unorm', 'rg16float']) - .combine('srcValue', [0.4, 0.6, 0.8, 1.0]) - .combine('dstValue', [0.2, 0.4]) - ) - .fn(t => { - const { format, srcValue, dstValue } = t.params; +). +params((u) => +u // +.combine('format', ['rgba8unorm', 'rg16float']). +combine('srcValue', [0.4, 0.6, 0.8, 1.0]). +combine('dstValue', [0.2, 0.4]) +). +fn((t) => { + const { format, srcValue, dstValue } = t.params; - const blendComponent = { srcFactor: 'one', dstFactor: 'one', operation: 'add' }; + const blendComponent = { srcFactor: 'one', dstFactor: 'one', operation: 'add' }; - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - fragment: { - targets: [ - { - format, - blend: { - color: blendComponent, - alpha: blendComponent, - }, - }, - ], + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + fragment: { + targets: [ + { + format, + blend: { + color: blendComponent, + alpha: blendComponent + } + }], - module: t.device.createShaderModule({ - code: ` + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(${srcValue}, ${srcValue}, ${srcValue}, ${srcValue}); } - `, - }), - entryPoint: 'main', - }, - vertex: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); } - `, - }), - entryPoint: 'main', - }, - primitive: { - topology: 'point-list', - }, - }); - - const renderTarget = t.device.createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - size: [1, 1, 1], - format, - }); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - clearValue: { r: dstValue, g: dstValue, b: dstValue, a: dstValue }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(pipeline); - renderPass.draw(1); - renderPass.end(); - t.device.queue.submit([commandEncoder.finish()]); - - let expValue; - switch (format) { - case 'rgba8unorm': // unorm types should clamp if the sum of srcValue and dstValue exceeds 1. - expValue = clamp(srcValue + dstValue, { min: 0, max: 1 }); - break; - case 'rg16float': // float format types doesn't clamp. - expValue = srcValue + dstValue; - break; + ` + }), + entryPoint: 'main' + }, + primitive: { + topology: 'point-list' } - - const expColor = { R: expValue, G: expValue, B: expValue, A: expValue }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - - t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1, 1]); }); + + const renderTarget = t.device.createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + size: [1, 1, 1], + format + }); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + clearValue: { r: dstValue, g: dstValue, b: dstValue, a: dstValue }, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(pipeline); + renderPass.draw(1); + renderPass.end(); + t.device.queue.submit([commandEncoder.finish()]); + + let expValue; + switch (format) { + case 'rgba8unorm': // unorm types should clamp if the sum of srcValue and dstValue exceeds 1. + expValue = clamp(srcValue + dstValue, { min: 0, max: 1 }); + break; + case 'rg16float': // float format types doesn't clamp. + expValue = srcValue + dstValue; + break; + } + + const expColor = { R: expValue, G: expValue, B: expValue, A: expValue }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); + + t.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1, 1]); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth.spec.js index 53e28bf32b9..12c88f8dcd6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test related to depth buffer, depth op, compare func, etc. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kDepthStencilFormats, kTextureFormatInfo } from '../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; @@ -16,6 +15,12 @@ const kBaseColor = new Float32Array([1.0, 1.0, 1.0, 1.0]); const kRedStencilColor = new Float32Array([1.0, 0.0, 0.0, 1.0]); const kGreenStencilColor = new Float32Array([0.0, 1.0, 0.0, 1.0]); + + + + + + class DepthTest extends TextureTestMixin(GPUTest) { runDepthStateTest(testStates, expectedColor) { const renderTargetFormat = 'rgba8unorm'; @@ -24,7 +29,7 @@ class DepthTest extends TextureTestMixin(GPUTest) { this.device.createTexture({ format: renderTargetFormat, size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }) ); @@ -35,7 +40,7 @@ class DepthTest extends TextureTestMixin(GPUTest) { format: depthStencilFormat, sampleCount: 1, mipLevelCount: 1, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST }) ); @@ -44,20 +49,19 @@ class DepthTest extends TextureTestMixin(GPUTest) { depthLoadOp: 'load', depthStoreOp: 'store', stencilLoadOp: 'load', - stencilStoreOp: 'store', + stencilStoreOp: 'store' }; const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - storeOp: 'store', - loadOp: 'load', - }, - ], + { + view: renderTarget.createView(), + storeOp: 'store', + loadOp: 'load' + }], - depthStencilAttachment, + depthStencilAttachment }); // Draw a triangle with the given depth state, color, and depth. @@ -68,7 +72,6 @@ class DepthTest extends TextureTestMixin(GPUTest) { 0, this.createBindGroupForTest(testPipeline.getBindGroupLayout(0), test.color) ); - pass.draw(1); } @@ -79,14 +82,17 @@ class DepthTest extends TextureTestMixin(GPUTest) { R: expectedColor[0], G: expectedColor[1], B: expectedColor[2], - A: expectedColor[3], + A: expectedColor[3] }; - const expTexelView = TexelView.fromTexelsAsColors(renderTargetFormat, coords => expColor); + const expTexelView = TexelView.fromTexelsAsColors(renderTargetFormat, (_coords) => expColor); this.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1]); } - createRenderPipelineForTest(depthStencil, depth) { + createRenderPipelineForTest( + depthStencil, + depth) + { return this.device.createRenderPipeline({ layout: 'auto', vertex: { @@ -96,9 +102,9 @@ class DepthTest extends TextureTestMixin(GPUTest) { fn main(@builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4 { return vec4(0.0, 0.0, ${depth}, 1.0); } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { targets: [{ format: 'rgba8unorm' }], @@ -111,12 +117,12 @@ class DepthTest extends TextureTestMixin(GPUTest) { @fragment fn main() -> @location(0) vec4 { return vec4(params.color); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, primitive: { topology: 'point-list' }, - depthStencil, + depthStencil }); } @@ -124,336 +130,335 @@ class DepthTest extends TextureTestMixin(GPUTest) { return this.device.createBindGroup({ layout, entries: [ - { - binding: 0, - resource: { - buffer: this.makeBufferWithContents(data, GPUBufferUsage.UNIFORM), - }, - }, - ], + { + binding: 0, + resource: { + buffer: this.makeBufferWithContents(data, GPUBufferUsage.UNIFORM) + } + }] + }); } } export const g = makeTestGroup(DepthTest); -g.test('depth_disabled') - .desc('Tests render results with depth test disabled.') - .fn(t => { - const depthSpencilFormat = 'depth24plus-stencil8'; - const state = { - format: depthSpencilFormat, - depthWriteEnabled: false, - depthCompare: 'always', - }; +g.test('depth_disabled'). +desc('Tests render results with depth test disabled.'). +fn((t) => { + const depthSpencilFormat = 'depth24plus-stencil8'; + const state = { + format: depthSpencilFormat, + depthWriteEnabled: false, + depthCompare: 'always' + }; - const testStates = [ - { state, color: kBaseColor, depth: 0.0 }, - { state, color: kRedStencilColor, depth: 0.5 }, - { state, color: kGreenStencilColor, depth: 1.0 }, - ]; + const testStates = [ + { state, color: kBaseColor, depth: 0.0 }, + { state, color: kRedStencilColor, depth: 0.5 }, + { state, color: kGreenStencilColor, depth: 1.0 }]; - // Test that for all combinations and ensure the last triangle drawn is the one visible - // regardless of depth testing. - for (let last = 0; last < 3; ++last) { - const i = (last + 1) % 3; - const j = (last + 2) % 3; - t.runDepthStateTest([testStates[i], testStates[j], testStates[last]], testStates[last].color); - t.runDepthStateTest([testStates[j], testStates[i], testStates[last]], testStates[last].color); - } - }); + // Test that for all combinations and ensure the last triangle drawn is the one visible + // regardless of depth testing. + for (let last = 0; last < 3; ++last) { + const i = (last + 1) % 3; + const j = (last + 2) % 3; -g.test('depth_write_disabled') - .desc( - ` + t.runDepthStateTest([testStates[i], testStates[j], testStates[last]], testStates[last].color); + t.runDepthStateTest([testStates[j], testStates[i], testStates[last]], testStates[last].color); + } +}); + +g.test('depth_write_disabled'). +desc( + ` Test that depthWriteEnabled behaves as expected. If enabled, a depth value of 0.0 is written. If disabled, it's not written, so it keeps the previous value of 1.0. Use a depthCompare: 'equal' check at the end to check the value. ` - ) - .params(u => - u // - .combineWithParams([ - { depthWriteEnabled: false, lastDepth: 0.0, _expectedColor: kRedStencilColor }, - { depthWriteEnabled: true, lastDepth: 0.0, _expectedColor: kGreenStencilColor }, - { depthWriteEnabled: false, lastDepth: 1.0, _expectedColor: kGreenStencilColor }, - { depthWriteEnabled: true, lastDepth: 1.0, _expectedColor: kRedStencilColor }, - ]) - ) - .fn(t => { - const { depthWriteEnabled, lastDepth, _expectedColor } = t.params; +). +params((u) => +u // +.combineWithParams([ +{ depthWriteEnabled: false, lastDepth: 0.0, _expectedColor: kRedStencilColor }, +{ depthWriteEnabled: true, lastDepth: 0.0, _expectedColor: kGreenStencilColor }, +{ depthWriteEnabled: false, lastDepth: 1.0, _expectedColor: kGreenStencilColor }, +{ depthWriteEnabled: true, lastDepth: 1.0, _expectedColor: kRedStencilColor }] +) +). +fn((t) => { + const { depthWriteEnabled, lastDepth, _expectedColor } = t.params; - const depthSpencilFormat = 'depth24plus-stencil8'; + const depthSpencilFormat = 'depth24plus-stencil8'; - const stencilState = { - compare: 'always', - failOp: 'keep', - depthFailOp: 'keep', - passOp: 'keep', - }; + const stencilState = { + compare: 'always', + failOp: 'keep', + depthFailOp: 'keep', + passOp: 'keep' + }; - const baseState = { - format: depthSpencilFormat, - depthWriteEnabled: true, - depthCompare: 'always', - stencilFront: stencilState, - stencilBack: stencilState, - stencilReadMask: 0xff, - stencilWriteMask: 0xff, - }; + const baseState = { + format: depthSpencilFormat, + depthWriteEnabled: true, + depthCompare: 'always', + stencilFront: stencilState, + stencilBack: stencilState, + stencilReadMask: 0xff, + stencilWriteMask: 0xff + }; - const depthWriteState = { - format: depthSpencilFormat, - depthWriteEnabled, - depthCompare: 'always', - stencilFront: stencilState, - stencilBack: stencilState, - stencilReadMask: 0xff, - stencilWriteMask: 0xff, - }; + const depthWriteState = { + format: depthSpencilFormat, + depthWriteEnabled, + depthCompare: 'always', + stencilFront: stencilState, + stencilBack: stencilState, + stencilReadMask: 0xff, + stencilWriteMask: 0xff + }; - const checkState = { - format: depthSpencilFormat, - depthWriteEnabled: false, - depthCompare: 'equal', - stencilFront: stencilState, - stencilBack: stencilState, - stencilReadMask: 0xff, - stencilWriteMask: 0xff, - }; + const checkState = { + format: depthSpencilFormat, + depthWriteEnabled: false, + depthCompare: 'equal', + stencilFront: stencilState, + stencilBack: stencilState, + stencilReadMask: 0xff, + stencilWriteMask: 0xff + }; - const testStates = [ - // Draw a base point with depth write enabled. - { state: baseState, color: kBaseColor, depth: 1.0 }, - // Draw a second point without depth write enabled. - { state: depthWriteState, color: kRedStencilColor, depth: 0.0 }, - // Draw a third point which should occlude the second even though it is behind it. - { state: checkState, color: kGreenStencilColor, depth: lastDepth }, - ]; + const testStates = [ + // Draw a base point with depth write enabled. + { state: baseState, color: kBaseColor, depth: 1.0 }, + // Draw a second point without depth write enabled. + { state: depthWriteState, color: kRedStencilColor, depth: 0.0 }, + // Draw a third point which should occlude the second even though it is behind it. + { state: checkState, color: kGreenStencilColor, depth: lastDepth }]; - t.runDepthStateTest(testStates, _expectedColor); - }); -g.test('depth_test_fail') - .desc( - ` + t.runDepthStateTest(testStates, _expectedColor); +}); + +g.test('depth_test_fail'). +desc( + ` Test that render results on depth test failure cases with 'less' depthCompare operation and depthWriteEnabled is true. ` - ) - .params(u => - u // - .combineWithParams([ - { secondDepth: 1.0, lastDepth: 2.0, _expectedColor: kBaseColor }, // fail -> fail. - { secondDepth: 0.0, lastDepth: 2.0, _expectedColor: kRedStencilColor }, // pass -> fail. - { secondDepth: 2.0, lastDepth: 0.9, _expectedColor: kGreenStencilColor }, // fail -> pass. - ]) - ) - .fn(t => { - const { secondDepth, lastDepth, _expectedColor } = t.params; +). +params((u) => +u // +.combineWithParams([ +{ secondDepth: 1.0, lastDepth: 2.0, _expectedColor: kBaseColor }, // fail -> fail. +{ secondDepth: 0.0, lastDepth: 2.0, _expectedColor: kRedStencilColor }, // pass -> fail. +{ secondDepth: 2.0, lastDepth: 0.9, _expectedColor: kGreenStencilColor } // fail -> pass. +]) +). +fn((t) => { + const { secondDepth, lastDepth, _expectedColor } = t.params; - const depthSpencilFormat = 'depth24plus-stencil8'; + const depthSpencilFormat = 'depth24plus-stencil8'; - const baseState = { - format: depthSpencilFormat, - depthWriteEnabled: true, - depthCompare: 'always', - stencilReadMask: 0xff, - stencilWriteMask: 0xff, - }; + const baseState = { + format: depthSpencilFormat, + depthWriteEnabled: true, + depthCompare: 'always', + stencilReadMask: 0xff, + stencilWriteMask: 0xff + }; - const depthTestState = { - format: depthSpencilFormat, - depthWriteEnabled: true, - depthCompare: 'less', - stencilReadMask: 0xff, - stencilWriteMask: 0xff, - }; + const depthTestState = { + format: depthSpencilFormat, + depthWriteEnabled: true, + depthCompare: 'less', + stencilReadMask: 0xff, + stencilWriteMask: 0xff + }; - const testStates = [ - { state: baseState, color: kBaseColor, depth: 1.0 }, - { state: depthTestState, color: kRedStencilColor, depth: secondDepth }, - { state: depthTestState, color: kGreenStencilColor, depth: lastDepth }, - ]; + const testStates = [ + { state: baseState, color: kBaseColor, depth: 1.0 }, + { state: depthTestState, color: kRedStencilColor, depth: secondDepth }, + { state: depthTestState, color: kGreenStencilColor, depth: lastDepth }]; - t.runDepthStateTest(testStates, _expectedColor); - }); + + t.runDepthStateTest(testStates, _expectedColor); +}); // Use a depth value that's not exactly 0.5 because it is exactly between two depth16unorm value and // can get rounded either way (and a different way between shaders and clearDepthValue). const kMiddleDepthValue = 0.5001; -g.test('depth_compare_func') - .desc( - `Tests each depth compare function works properly. Clears the depth attachment to various values, and renders a point at depth 0.5 with various depthCompare modes.` - ) - .params(u => - u - .combine( - 'format', - kDepthStencilFormats.filter(format => kTextureFormatInfo[format].depth) - ) - .combineWithParams([ - { depthCompare: 'never', depthClearValue: 1.0, _expected: backgroundColor }, - { depthCompare: 'never', depthClearValue: kMiddleDepthValue, _expected: backgroundColor }, - { depthCompare: 'never', depthClearValue: 0.0, _expected: backgroundColor }, - { depthCompare: 'less', depthClearValue: 1.0, _expected: triangleColor }, - { depthCompare: 'less', depthClearValue: kMiddleDepthValue, _expected: backgroundColor }, - { depthCompare: 'less', depthClearValue: 0.0, _expected: backgroundColor }, - { depthCompare: 'less-equal', depthClearValue: 1.0, _expected: triangleColor }, - { - depthCompare: 'less-equal', - depthClearValue: kMiddleDepthValue, - _expected: triangleColor, - }, - { depthCompare: 'less-equal', depthClearValue: 0.0, _expected: backgroundColor }, - { depthCompare: 'equal', depthClearValue: 1.0, _expected: backgroundColor }, - { depthCompare: 'equal', depthClearValue: kMiddleDepthValue, _expected: triangleColor }, - { depthCompare: 'equal', depthClearValue: 0.0, _expected: backgroundColor }, - { depthCompare: 'not-equal', depthClearValue: 1.0, _expected: triangleColor }, - { - depthCompare: 'not-equal', - depthClearValue: kMiddleDepthValue, - _expected: backgroundColor, - }, - { depthCompare: 'not-equal', depthClearValue: 0.0, _expected: triangleColor }, - { depthCompare: 'greater-equal', depthClearValue: 1.0, _expected: backgroundColor }, - { - depthCompare: 'greater-equal', - depthClearValue: kMiddleDepthValue, - _expected: triangleColor, - }, - { depthCompare: 'greater-equal', depthClearValue: 0.0, _expected: triangleColor }, - { depthCompare: 'greater', depthClearValue: 1.0, _expected: backgroundColor }, - { depthCompare: 'greater', depthClearValue: kMiddleDepthValue, _expected: backgroundColor }, - { depthCompare: 'greater', depthClearValue: 0.0, _expected: triangleColor }, - { depthCompare: 'always', depthClearValue: 1.0, _expected: triangleColor }, - { depthCompare: 'always', depthClearValue: kMiddleDepthValue, _expected: triangleColor }, - { depthCompare: 'always', depthClearValue: 0.0, _expected: triangleColor }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { depthCompare, depthClearValue, _expected, format } = t.params; +g.test('depth_compare_func'). +desc( + `Tests each depth compare function works properly. Clears the depth attachment to various values, and renders a point at depth 0.5 with various depthCompare modes.` +). +params((u) => +u. +combine( + 'format', + kDepthStencilFormats.filter((format) => kTextureFormatInfo[format].depth) +). +combineWithParams([ +{ depthCompare: 'never', depthClearValue: 1.0, _expected: backgroundColor }, +{ depthCompare: 'never', depthClearValue: kMiddleDepthValue, _expected: backgroundColor }, +{ depthCompare: 'never', depthClearValue: 0.0, _expected: backgroundColor }, +{ depthCompare: 'less', depthClearValue: 1.0, _expected: triangleColor }, +{ depthCompare: 'less', depthClearValue: kMiddleDepthValue, _expected: backgroundColor }, +{ depthCompare: 'less', depthClearValue: 0.0, _expected: backgroundColor }, +{ depthCompare: 'less-equal', depthClearValue: 1.0, _expected: triangleColor }, +{ + depthCompare: 'less-equal', + depthClearValue: kMiddleDepthValue, + _expected: triangleColor +}, +{ depthCompare: 'less-equal', depthClearValue: 0.0, _expected: backgroundColor }, +{ depthCompare: 'equal', depthClearValue: 1.0, _expected: backgroundColor }, +{ depthCompare: 'equal', depthClearValue: kMiddleDepthValue, _expected: triangleColor }, +{ depthCompare: 'equal', depthClearValue: 0.0, _expected: backgroundColor }, +{ depthCompare: 'not-equal', depthClearValue: 1.0, _expected: triangleColor }, +{ + depthCompare: 'not-equal', + depthClearValue: kMiddleDepthValue, + _expected: backgroundColor +}, +{ depthCompare: 'not-equal', depthClearValue: 0.0, _expected: triangleColor }, +{ depthCompare: 'greater-equal', depthClearValue: 1.0, _expected: backgroundColor }, +{ + depthCompare: 'greater-equal', + depthClearValue: kMiddleDepthValue, + _expected: triangleColor +}, +{ depthCompare: 'greater-equal', depthClearValue: 0.0, _expected: triangleColor }, +{ depthCompare: 'greater', depthClearValue: 1.0, _expected: backgroundColor }, +{ depthCompare: 'greater', depthClearValue: kMiddleDepthValue, _expected: backgroundColor }, +{ depthCompare: 'greater', depthClearValue: 0.0, _expected: triangleColor }, +{ depthCompare: 'always', depthClearValue: 1.0, _expected: triangleColor }, +{ depthCompare: 'always', depthClearValue: kMiddleDepthValue, _expected: triangleColor }, +{ depthCompare: 'always', depthClearValue: 0.0, _expected: triangleColor }] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { depthCompare, depthClearValue, _expected, format } = t.params; - const colorAttachmentFormat = 'rgba8unorm'; - const colorAttachment = t.device.createTexture({ - format: colorAttachmentFormat, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - const colorAttachmentView = colorAttachment.createView(); + const colorAttachmentFormat = 'rgba8unorm'; + const colorAttachment = t.device.createTexture({ + format: colorAttachmentFormat, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + const colorAttachmentView = colorAttachment.createView(); - const depthTexture = t.device.createTexture({ - size: { width: 1, height: 1 }, - format, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, - }); - const depthTextureView = depthTexture.createView(); + const depthTexture = t.device.createTexture({ + size: { width: 1, height: 1 }, + format, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING + }); + const depthTextureView = depthTexture.createView(); - const pipelineDescriptor = { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipelineDescriptor = { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main( @builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4 { return vec4(0.5, 0.5, ${kMiddleDepthValue}, 1.0); } - `, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(1.0, 1.0, 1.0, 1.0); } - `, - }), - entryPoint: 'main', - targets: [{ format: colorAttachmentFormat }], - }, - primitive: { topology: 'point-list' }, - depthStencil: { - depthWriteEnabled: true, - depthCompare, - format, - }, - }; - const pipeline = t.device.createRenderPipeline(pipelineDescriptor); - - const encoder = t.device.createCommandEncoder(); - const depthStencilAttachment = { - view: depthTextureView, - depthClearValue, - depthLoadOp: 'clear', - depthStoreOp: 'store', - }; - if (kTextureFormatInfo[format].stencil) { - depthStencilAttachment.stencilClearValue = 0; - depthStencilAttachment.stencilLoadOp = 'clear'; - depthStencilAttachment.stencilStoreOp = 'store'; + ` + }), + entryPoint: 'main', + targets: [{ format: colorAttachmentFormat }] + }, + primitive: { topology: 'point-list' }, + depthStencil: { + depthWriteEnabled: true, + depthCompare, + format } - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachmentView, - storeOp: 'store', - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - }, - ], + }; + const pipeline = t.device.createRenderPipeline(pipelineDescriptor); - depthStencilAttachment, - }); - pass.setPipeline(pipeline); - pass.draw(1); - pass.end(); - t.device.queue.submit([encoder.finish()]); + const encoder = t.device.createCommandEncoder(); + const depthStencilAttachment = { + view: depthTextureView, + depthClearValue, + depthLoadOp: 'clear', + depthStoreOp: 'store' + }; + if (kTextureFormatInfo[format].stencil) { + depthStencilAttachment.stencilClearValue = 0; + depthStencilAttachment.stencilLoadOp = 'clear'; + depthStencilAttachment.stencilStoreOp = 'store'; + } + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachmentView, + storeOp: 'store', + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear' + }], - t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ - { - coord: { x: 0, y: 0 }, - exp: new Uint8Array(_expected), - }, - ]); + depthStencilAttachment }); + pass.setPipeline(pipeline); + pass.draw(1); + pass.end(); + t.device.queue.submit([encoder.finish()]); -g.test('reverse_depth') - .desc( - `Tests simple rendering with reversed depth buffer, ensures depth test works properly: fragments are in correct order and out of range fragments are clipped. + t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ + { + coord: { x: 0, y: 0 }, + exp: new Uint8Array(_expected) + }] + ); +}); + +g.test('reverse_depth'). +desc( + `Tests simple rendering with reversed depth buffer, ensures depth test works properly: fragments are in correct order and out of range fragments are clipped. Note that in real use case the depth range remapping is done by the modified projection matrix. (see https://developer.nvidia.com/content/depth-precision-visualized).` - ) - .params(u => u.combine('reversed', [false, true])) - .fn(t => { - const colorAttachmentFormat = 'rgba8unorm'; - const colorAttachment = t.device.createTexture({ - format: colorAttachmentFormat, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - const colorAttachmentView = colorAttachment.createView(); +). +params((u) => u.combine('reversed', [false, true])). +fn((t) => { + const colorAttachmentFormat = 'rgba8unorm'; + const colorAttachment = t.device.createTexture({ + format: colorAttachmentFormat, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + const colorAttachmentView = colorAttachment.createView(); - const depthBufferFormat = 'depth32float'; - const depthTexture = t.device.createTexture({ - size: { width: 1, height: 1 }, - format: depthBufferFormat, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, - }); - const depthTextureView = depthTexture.createView(); + const depthBufferFormat = 'depth32float'; + const depthTexture = t.device.createTexture({ + size: { width: 1, height: 1 }, + format: depthBufferFormat, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING + }); + const depthTextureView = depthTexture.createView(); - const pipelineDescriptor = { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipelineDescriptor = { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` struct Output { @builtin(position) Position : vec4, @location(0) color : vec4, @@ -481,62 +486,61 @@ g.test('reverse_depth') output.color = colors[InstanceIndex]; return output; } - `, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main( @location(0) color : vec4 ) -> @location(0) vec4 { return color; } - `, - }), - entryPoint: 'main', - targets: [{ format: colorAttachmentFormat }], - }, - primitive: { topology: 'point-list' }, - depthStencil: { - depthWriteEnabled: true, - depthCompare: t.params.reversed ? 'greater' : 'less', - format: depthBufferFormat, - }, - }; - const pipeline = t.device.createRenderPipeline(pipelineDescriptor); + ` + }), + entryPoint: 'main', + targets: [{ format: colorAttachmentFormat }] + }, + primitive: { topology: 'point-list' }, + depthStencil: { + depthWriteEnabled: true, + depthCompare: t.params.reversed ? 'greater' : 'less', + format: depthBufferFormat + } + }; + const pipeline = t.device.createRenderPipeline(pipelineDescriptor); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachmentView, - storeOp: 'store', - clearValue: { r: 0.5, g: 0.5, b: 0.5, a: 1.0 }, - loadOp: 'clear', - }, - ], + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachmentView, + storeOp: 'store', + clearValue: { r: 0.5, g: 0.5, b: 0.5, a: 1.0 }, + loadOp: 'clear' + }], - depthStencilAttachment: { - view: depthTextureView, + depthStencilAttachment: { + view: depthTextureView, - depthClearValue: t.params.reversed ? 0.0 : 1.0, - depthLoadOp: 'clear', - depthStoreOp: 'store', - }, - }); - pass.setPipeline(pipeline); - pass.draw(1, 4); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ - { - coord: { x: 0, y: 0 }, - exp: new Uint8Array( - t.params.reversed ? [0x00, 0xff, 0x00, 0xff] : [0xff, 0x00, 0x00, 0xff] - ), - }, - ]); + depthClearValue: t.params.reversed ? 0.0 : 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store' + } }); + pass.setPipeline(pipeline); + pass.draw(1, 4); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ + { + coord: { x: 0, y: 0 }, + exp: new Uint8Array( + t.params.reversed ? [0x00, 0xff, 0x00, 0xff] : [0xff, 0x00, 0x00, 0xff] + ) + }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_bias.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_bias.spec.js index e1e8f5d285e..4cae7f53ebe 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_bias.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_bias.spec.js @@ -1,15 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests render results with different depth bias values like 'positive', 'negative', 'slope', 'clamp', etc. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { unreachable } from '../../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../../format_info.js'; +import { + kTextureFormatInfo } from + + +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; -import { TexelView } from '../../../util/texture/texel_view.js'; -var QuadAngle; +import { TexelView } from '../../../util/texture/texel_view.js';var + +QuadAngle = /*#__PURE__*/function (QuadAngle) {QuadAngle[QuadAngle["Flat"] = 0] = "Flat";QuadAngle[QuadAngle["TiltedX"] = 1] = "TiltedX";return QuadAngle;}(QuadAngle || {}); + + + // Floating point depth buffers use the following formula to calculate bias // bias = depthBias * 2 ** (exponent(max z of primitive) - number of bits in mantissa) + @@ -20,17 +27,25 @@ var QuadAngle; // // To get a final bias of 0.25 for primitives with z = 0.25, we can use // depthBias = 0.25 / (2 ** (-2 - 23)) = 8388608. -(function (QuadAngle) { - QuadAngle[(QuadAngle['Flat'] = 0)] = 'Flat'; - QuadAngle[(QuadAngle['TiltedX'] = 1)] = 'TiltedX'; -})(QuadAngle || (QuadAngle = {})); const kPointTwoFiveBiasForPointTwoFiveZOnFloat = 8388608; class DepthBiasTest extends TextureTestMixin(GPUTest) { runDepthBiasTestInternal( - depthFormat, - { quadAngle, bias, biasSlopeScale, biasClamp, initialDepth } - ) { + depthFormat, + { + quadAngle, + bias, + biasSlopeScale, + biasClamp, + initialDepth + + + + + + + }) + { const renderTargetFormat = 'rgba8unorm'; const depthFormatInfo = kTextureFormatInfo[depthFormat]; @@ -76,7 +91,7 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { this.device.createTexture({ format: renderTargetFormat, size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }) ); @@ -86,7 +101,7 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { format: depthFormat, sampleCount: 1, mipLevelCount: 1, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }) ); @@ -96,20 +111,19 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { depthStoreOp: depthFormatInfo.depth ? 'store' : undefined, stencilLoadOp: depthFormatInfo.stencil ? 'clear' : undefined, stencilStoreOp: depthFormatInfo.stencil ? 'store' : undefined, - depthClearValue: initialDepth, + depthClearValue: initialDepth }; const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - storeOp: 'store', - loadOp: 'load', - }, - ], + { + view: renderTarget.createView(), + storeOp: 'store', + loadOp: 'load' + }], - depthStencilAttachment, + depthStencilAttachment }); let depthCompare = 'always'; @@ -123,7 +137,7 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { depthWriteEnabled: true, depthBias: bias, depthBiasSlopeScale: biasSlopeScale, - depthBiasClamp: biasClamp, + depthBiasClamp: biasClamp }; // Draw a square with the given depth state and bias values. @@ -136,30 +150,57 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { return { renderTarget, depthTexture }; } - runDepthBiasTest(depthFormat, { quadAngle, bias, biasSlopeScale, biasClamp, _expectedDepth }) { + runDepthBiasTest( + depthFormat, + { + quadAngle, + bias, + biasSlopeScale, + biasClamp, + _expectedDepth + + + + + + + }) + { const { depthTexture } = this.runDepthBiasTestInternal(depthFormat, { quadAngle, bias, biasSlopeScale, biasClamp, - initialDepth: 0, + initialDepth: 0 }); const expColor = { Depth: _expectedDepth }; - const expTexelView = TexelView.fromTexelsAsColors(depthFormat, coords => expColor); + const expTexelView = TexelView.fromTexelsAsColors(depthFormat, (_coords) => expColor); this.expectTexelViewComparisonIsOkInTexture({ texture: depthTexture }, expTexelView, [1, 1]); } runDepthBiasTestFor24BitFormat( - depthFormat, - { quadAngle, bias, biasSlopeScale, biasClamp, _expectedColor } - ) { + depthFormat, + { + quadAngle, + bias, + biasSlopeScale, + biasClamp, + _expectedColor + + + + + + + }) + { const { renderTarget } = this.runDepthBiasTestInternal(depthFormat, { quadAngle, bias, biasSlopeScale, biasClamp, - initialDepth: 0.4, + initialDepth: 0.4 }); const renderTargetFormat = 'rgba8unorm'; @@ -167,20 +208,23 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { R: _expectedColor[0], G: _expectedColor[1], B: _expectedColor[2], - A: _expectedColor[3], + A: _expectedColor[3] }; - const expTexelView = TexelView.fromTexelsAsColors(renderTargetFormat, coords => expColor); + const expTexelView = TexelView.fromTexelsAsColors(renderTargetFormat, (_coords) => expColor); this.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1]); } - createRenderPipelineForTest(vertex, depthStencil) { + createRenderPipelineForTest( + vertex, + depthStencil) + { return this.device.createRenderPipeline({ layout: 'auto', vertex: { module: this.device.createShaderModule({ - code: vertex, + code: vertex }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { targets: [{ format: 'rgba8unorm' }], @@ -188,85 +232,85 @@ class DepthBiasTest extends TextureTestMixin(GPUTest) { code: ` @fragment fn main() -> @location(0) vec4 { return vec4(1.0, 0.0, 0.0, 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, - depthStencil, + depthStencil }); } } export const g = makeTestGroup(DepthBiasTest); -g.test('depth_bias') - .desc( - ` +g.test('depth_bias'). +desc( + ` Tests that a square with different depth bias values like 'positive', 'negative', 'slope', 'clamp', etc. is drawn as expected. ` - ) - .params(u => - u // - .combineWithParams([ - { - quadAngle: QuadAngle.Flat, - bias: kPointTwoFiveBiasForPointTwoFiveZOnFloat, - biasSlopeScale: 0, - biasClamp: 0, - _expectedDepth: 0.5, - }, - { - quadAngle: QuadAngle.Flat, - bias: kPointTwoFiveBiasForPointTwoFiveZOnFloat, - biasSlopeScale: 0, - biasClamp: 0.125, - _expectedDepth: 0.375, - }, - { - quadAngle: QuadAngle.Flat, - bias: -kPointTwoFiveBiasForPointTwoFiveZOnFloat, - biasSlopeScale: 0, - biasClamp: 0.125, - _expectedDepth: 0, - }, - { - quadAngle: QuadAngle.Flat, - bias: -kPointTwoFiveBiasForPointTwoFiveZOnFloat, - biasSlopeScale: 0, - biasClamp: -0.125, - _expectedDepth: 0.125, - }, - { - quadAngle: QuadAngle.TiltedX, - bias: 0, - biasSlopeScale: 0, - biasClamp: 0, - _expectedDepth: 0.25, - }, - { - quadAngle: QuadAngle.TiltedX, - bias: 0, - biasSlopeScale: 1, - biasClamp: 0, - _expectedDepth: 0.75, - }, - { - quadAngle: QuadAngle.TiltedX, - bias: 0, - biasSlopeScale: -0.5, - biasClamp: 0, - _expectedDepth: 0, - }, - ]) - ) - .fn(t => { - t.runDepthBiasTest('depth32float', t.params); - }); +). +params((u) => +u // +.combineWithParams([ +{ + quadAngle: QuadAngle.Flat, + bias: kPointTwoFiveBiasForPointTwoFiveZOnFloat, + biasSlopeScale: 0, + biasClamp: 0, + _expectedDepth: 0.5 +}, +{ + quadAngle: QuadAngle.Flat, + bias: kPointTwoFiveBiasForPointTwoFiveZOnFloat, + biasSlopeScale: 0, + biasClamp: 0.125, + _expectedDepth: 0.375 +}, +{ + quadAngle: QuadAngle.Flat, + bias: -kPointTwoFiveBiasForPointTwoFiveZOnFloat, + biasSlopeScale: 0, + biasClamp: 0.125, + _expectedDepth: 0 +}, +{ + quadAngle: QuadAngle.Flat, + bias: -kPointTwoFiveBiasForPointTwoFiveZOnFloat, + biasSlopeScale: 0, + biasClamp: -0.125, + _expectedDepth: 0.125 +}, +{ + quadAngle: QuadAngle.TiltedX, + bias: 0, + biasSlopeScale: 0, + biasClamp: 0, + _expectedDepth: 0.25 +}, +{ + quadAngle: QuadAngle.TiltedX, + bias: 0, + biasSlopeScale: 1, + biasClamp: 0, + _expectedDepth: 0.75 +}, +{ + quadAngle: QuadAngle.TiltedX, + bias: 0, + biasSlopeScale: -0.5, + biasClamp: 0, + _expectedDepth: 0 +}] +) +). +fn((t) => { + t.runDepthBiasTest('depth32float', t.params); +}); -g.test('depth_bias_24bit_format') - .desc( - ` +g.test('depth_bias_24bit_format'). +desc( + ` Tests that a square with different depth bias values like 'positive', 'negative', 'slope', 'clamp', etc. is drawn as expected with 24 bit depth format. @@ -274,35 +318,35 @@ g.test('depth_bias_24bit_format') and checking the result directly, like the non-24-bit depth tests, instead of just relying on whether the depth test passes or fails. ` - ) - .params(u => - u // - .combine('format', ['depth24plus', 'depth24plus-stencil8']) - .combineWithParams([ - { - quadAngle: QuadAngle.Flat, - bias: 0.25 * (1 << 25), - biasSlopeScale: 0, - biasClamp: 0, - _expectedColor: new Float32Array([1.0, 0.0, 0.0, 1.0]), - }, - { - quadAngle: QuadAngle.TiltedX, - bias: 0.25 * (1 << 25), - biasSlopeScale: 1, - biasClamp: 0, - _expectedColor: new Float32Array([1.0, 0.0, 0.0, 1.0]), - }, - { - quadAngle: QuadAngle.Flat, - bias: 0.25 * (1 << 25), - biasSlopeScale: 0, - biasClamp: 0.1, - _expectedColor: new Float32Array([0.0, 0.0, 0.0, 0.0]), - }, - ]) - ) - .fn(t => { - const { format } = t.params; - t.runDepthBiasTestFor24BitFormat(format, t.params); - }); +). +params((u) => +u // +.combine('format', ['depth24plus', 'depth24plus-stencil8']). +combineWithParams([ +{ + quadAngle: QuadAngle.Flat, + bias: 0.25 * (1 << 25), + biasSlopeScale: 0, + biasClamp: 0, + _expectedColor: new Float32Array([1.0, 0.0, 0.0, 1.0]) +}, +{ + quadAngle: QuadAngle.TiltedX, + bias: 0.25 * (1 << 25), + biasSlopeScale: 1, + biasClamp: 0, + _expectedColor: new Float32Array([1.0, 0.0, 0.0, 1.0]) +}, +{ + quadAngle: QuadAngle.Flat, + bias: 0.25 * (1 << 25), + biasSlopeScale: 0, + biasClamp: 0.1, + _expectedColor: new Float32Array([0.0, 0.0, 0.0, 0.0]) +}] +) +). +fn((t) => { + const { format } = t.params; + t.runDepthBiasTestFor24BitFormat(format, t.params); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_clip_clamp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_clip_clamp.spec.js index f9ecfdcedc5..28d639990d1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_clip_clamp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/depth_clip_clamp.spec.js @@ -1,19 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for depth clipping, depth clamping (at various points in the pipeline), and maybe extended depth ranges as well. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kDepthStencilFormats, kTextureFormatInfo } from '../../../format_info.js'; import { GPUTest } from '../../../gpu_test.js'; -import { checkElementsBetween, checkElementsPassPredicate } from '../../../util/check_contents.js'; +import { + checkElementsBetween, + checkElementsPassPredicate } from + +'../../../util/check_contents.js'; export const g = makeTestGroup(GPUTest); -g.test('depth_clamp_and_clip') - .desc( - ` +g.test('depth_clamp_and_clip'). +desc( + ` Depth written to the depth attachment should always be in the range of the viewport depth, even if it was written by the fragment shader (using frag_depth). If depth clipping is enabled, primitives should be clipped to the viewport depth before rasterization; if not, these fragments @@ -29,35 +32,35 @@ be all (near) 0. Then, run another pass (which outputs every point at z=0.5 to avoid clipping) to verify the depth buffer contents by outputting the expected depth with depthCompare:'not-equal': any fragments that have unexpected values then get drawn to the color buffer, which is later checked to be empty.` - ) - .params(u => - u // - .combine('format', kDepthStencilFormats) - .filter(p => !!kTextureFormatInfo[p.format].depth) - .combine('unclippedDepth', [undefined, false, true]) - .combine('writeDepth', [false, true]) - .combine('multisampled', [false, true]) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; +). +params((u) => +u // +.combine('format', kDepthStencilFormats). +filter((p) => !!kTextureFormatInfo[p.format].depth). +combine('unclippedDepth', [undefined, false, true]). +combine('writeDepth', [false, true]). +combine('multisampled', [false, true]) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; - t.selectDeviceOrSkipTestCase([ - t.params.unclippedDepth ? 'depth-clip-control' : undefined, - info.feature, - ]); - }) - .fn(async t => { - const { format, unclippedDepth, writeDepth, multisampled } = t.params; - const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase([ + t.params.unclippedDepth ? 'depth-clip-control' : undefined, + info.feature] + ); +}). +fn(async (t) => { + const { format, unclippedDepth, writeDepth, multisampled } = t.params; + const info = kTextureFormatInfo[format]; - /** Number of depth values to test for both vertex output and frag_depth output. */ - const kNumDepthValues = 8; - /** Test every combination of vertex output and frag_depth output. */ - const kNumTestPoints = kNumDepthValues * kNumDepthValues; - const kViewportMinDepth = 0.25; - const kViewportMaxDepth = 0.75; + /** Number of depth values to test for both vertex output and frag_depth output. */ + const kNumDepthValues = 8; + /** Test every combination of vertex output and frag_depth output. */ + const kNumTestPoints = kNumDepthValues * kNumDepthValues; + const kViewportMinDepth = 0.25; + const kViewportMaxDepth = 0.75; - const shaderSource = ` + const shaderSource = ` // Test depths, with viewport range corresponding to [0,1]. var kDepths: array = array( -1.0, -0.5, 0.0, 0.25, 0.75, 1.0, 1.5, 2.0); @@ -163,180 +166,178 @@ have unexpected values then get drawn to the color buffer, which is later checke return f; } `; - const module = t.device.createShaderModule({ code: shaderSource }); + const module = t.device.createShaderModule({ code: shaderSource }); - // Draw points at different vertex depths and fragment depths into the depth attachment, - // with a viewport of [0.25,0.75]. - const testPipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module, entryPoint: 'vtest' }, - primitive: { - topology: 'point-list', - unclippedDepth, - }, - depthStencil: { format, depthWriteEnabled: true, depthCompare: 'always' }, - multisample: multisampled ? { count: 4 } : undefined, - fragment: { - module, - entryPoint: writeDepth ? 'ftest_WriteDepth' : 'ftest_NoWriteDepth', - targets: [], - }, - }); - - // Use depth comparison to check that the depth attachment now has the expected values. - const checkPipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module, entryPoint: 'vcheck' }, - primitive: { topology: 'point-list' }, - depthStencil: { - format, - // NOTE: This check is probably very susceptible to floating point error. If it fails, maybe - // replace it with two checks (less + greater) with an epsilon applied in the check shader? - depthCompare: 'not-equal', // Expect every depth value to be exactly equal. - depthWriteEnabled: true, // If the check failed, overwrite with the expected result. - }, - multisample: multisampled ? { count: 4 } : undefined, - fragment: { module, entryPoint: 'fcheck', targets: [{ format: 'r8unorm' }] }, - }); - - const dsTexture = t.device.createTexture({ - format, - size: [kNumTestPoints], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - sampleCount: multisampled ? 4 : 1, - }); - const dsTextureView = dsTexture.createView(); - - const checkTextureDesc = { - format: 'r8unorm', - size: [kNumTestPoints], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }; - const checkTexture = t.device.createTexture(checkTextureDesc); - const checkTextureView = checkTexture.createView(); - const checkTextureMSView = multisampled - ? t.device.createTexture({ ...checkTextureDesc, sampleCount: 4 }).createView() - : undefined; - - const dsActual = - !multisampled && info.bytesPerBlock - ? t.device.createBuffer({ - size: kNumTestPoints * info.bytesPerBlock, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }) - : undefined; - const dsExpected = - !multisampled && info.bytesPerBlock - ? t.device.createBuffer({ - size: kNumTestPoints * info.bytesPerBlock, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }) - : undefined; - const checkBuffer = t.device.createBuffer({ - size: kNumTestPoints, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - - const fragInputZFailedBuffer = t.device.createBuffer({ - size: 4 * kNumTestPoints, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - const testBindGroup = t.device.createBindGroup({ - layout: testPipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: fragInputZFailedBuffer } }], - }); - - const enc = t.device.createCommandEncoder(); - { - const pass = enc.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment: { - view: dsTextureView, - depthClearValue: 0.5, // Will see this depth value if the fragment was clipped. - depthLoadOp: 'clear', - depthStoreOp: 'store', - stencilClearValue: info.stencil ? 0 : undefined, - stencilLoadOp: info.stencil ? 'clear' : undefined, - stencilStoreOp: info.stencil ? 'discard' : undefined, - }, - }); - pass.setPipeline(testPipeline); - pass.setBindGroup(0, testBindGroup); - pass.setViewport(0, 0, kNumTestPoints, 1, kViewportMinDepth, kViewportMaxDepth); - pass.draw(kNumTestPoints); - pass.end(); + // Draw points at different vertex depths and fragment depths into the depth attachment, + // with a viewport of [0.25,0.75]. + const testPipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module, entryPoint: 'vtest' }, + primitive: { + topology: 'point-list', + unclippedDepth + }, + depthStencil: { format, depthWriteEnabled: true, depthCompare: 'always' }, + multisample: multisampled ? { count: 4 } : undefined, + fragment: { + module, + entryPoint: writeDepth ? 'ftest_WriteDepth' : 'ftest_NoWriteDepth', + targets: [] } - if (dsActual) { - enc.copyTextureToBuffer({ texture: dsTexture }, { buffer: dsActual }, [kNumTestPoints]); - } - { - const clearValue = [0, 0, 0, 0]; // Will see this color if the check passed. - const pass = enc.beginRenderPass({ - colorAttachments: [ - checkTextureMSView - ? { - view: checkTextureMSView, - resolveTarget: checkTextureView, - clearValue, - loadOp: 'clear', - storeOp: 'discard', - } - : { view: checkTextureView, clearValue, loadOp: 'clear', storeOp: 'store' }, - ], - - depthStencilAttachment: { - view: dsTextureView, - depthLoadOp: 'load', - depthStoreOp: 'store', - stencilClearValue: info.stencil ? 0 : undefined, - stencilLoadOp: info.stencil ? 'clear' : undefined, - stencilStoreOp: info.stencil ? 'discard' : undefined, - }, - }); - pass.setPipeline(checkPipeline); - pass.setViewport(0, 0, kNumTestPoints, 1, 0.0, 1.0); - pass.draw(kNumTestPoints); - pass.end(); - } - enc.copyTextureToBuffer({ texture: checkTexture }, { buffer: checkBuffer }, [kNumTestPoints]); - if (dsExpected) { - enc.copyTextureToBuffer({ texture: dsTexture }, { buffer: dsExpected }, [kNumTestPoints]); - } - t.device.queue.submit([enc.finish()]); - - t.expectGPUBufferValuesPassCheck( - fragInputZFailedBuffer, - a => checkElementsBetween(a, [() => -1e-5, () => 1e-5]), - { type: Float32Array, typedLength: kNumTestPoints } - ); - - const kCheckPassedValue = 0; - const predicatePrinter = [ - { leftHeader: 'expected ==', getValueForCell: index => kCheckPassedValue }, - ]; - - if (dsActual && dsExpected && format === 'depth32float') { - await Promise.all([dsActual.mapAsync(GPUMapMode.READ), dsExpected.mapAsync(GPUMapMode.READ)]); - const act = new Float32Array(dsActual.getMappedRange()); - const exp = new Float32Array(dsExpected.getMappedRange()); - predicatePrinter.push( - { leftHeader: 'act ==', getValueForCell: index => act[index].toFixed(2) }, - { leftHeader: 'exp ==', getValueForCell: index => exp[index].toFixed(2) } - ); - } - t.expectGPUBufferValuesPassCheck( - checkBuffer, - a => - checkElementsPassPredicate(a, (index, value) => value === kCheckPassedValue, { - predicatePrinter, - }), - { type: Uint8Array, typedLength: kNumTestPoints, method: 'map' } - ); }); -g.test('depth_test_input_clamped') - .desc( - ` + // Use depth comparison to check that the depth attachment now has the expected values. + const checkPipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module, entryPoint: 'vcheck' }, + primitive: { topology: 'point-list' }, + depthStencil: { + format, + // NOTE: This check is probably very susceptible to floating point error. If it fails, maybe + // replace it with two checks (less + greater) with an epsilon applied in the check shader? + depthCompare: 'not-equal', // Expect every depth value to be exactly equal. + depthWriteEnabled: true // If the check failed, overwrite with the expected result. + }, + multisample: multisampled ? { count: 4 } : undefined, + fragment: { module, entryPoint: 'fcheck', targets: [{ format: 'r8unorm' }] } + }); + + const dsTexture = t.device.createTexture({ + format, + size: [kNumTestPoints], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + sampleCount: multisampled ? 4 : 1 + }); + const dsTextureView = dsTexture.createView(); + + const checkTextureDesc = { + format: 'r8unorm', + size: [kNumTestPoints], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC + }; + const checkTexture = t.device.createTexture(checkTextureDesc); + const checkTextureView = checkTexture.createView(); + const checkTextureMSView = multisampled ? + t.device.createTexture({ ...checkTextureDesc, sampleCount: 4 }).createView() : + undefined; + + const dsActual = + !multisampled && info.bytesPerBlock ? + t.device.createBuffer({ + size: kNumTestPoints * info.bytesPerBlock, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ + }) : + undefined; + const dsExpected = + !multisampled && info.bytesPerBlock ? + t.device.createBuffer({ + size: kNumTestPoints * info.bytesPerBlock, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ + }) : + undefined; + const checkBuffer = t.device.createBuffer({ + size: kNumTestPoints, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ + }); + + const fragInputZFailedBuffer = t.device.createBuffer({ + size: 4 * kNumTestPoints, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + const testBindGroup = t.device.createBindGroup({ + layout: testPipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: fragInputZFailedBuffer } }] + }); + + const enc = t.device.createCommandEncoder(); + { + const pass = enc.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment: { + view: dsTextureView, + depthClearValue: 0.5, // Will see this depth value if the fragment was clipped. + depthLoadOp: 'clear', + depthStoreOp: 'store', + stencilClearValue: info.stencil ? 0 : undefined, + stencilLoadOp: info.stencil ? 'clear' : undefined, + stencilStoreOp: info.stencil ? 'discard' : undefined + } + }); + pass.setPipeline(testPipeline); + pass.setBindGroup(0, testBindGroup); + pass.setViewport(0, 0, kNumTestPoints, 1, kViewportMinDepth, kViewportMaxDepth); + pass.draw(kNumTestPoints); + pass.end(); + } + if (dsActual) { + enc.copyTextureToBuffer({ texture: dsTexture }, { buffer: dsActual }, [kNumTestPoints]); + } + { + const clearValue = [0, 0, 0, 0]; // Will see this color if the check passed. + const pass = enc.beginRenderPass({ + colorAttachments: [ + checkTextureMSView ? + { + view: checkTextureMSView, + resolveTarget: checkTextureView, + clearValue, + loadOp: 'clear', + storeOp: 'discard' + } : + { view: checkTextureView, clearValue, loadOp: 'clear', storeOp: 'store' }], + + depthStencilAttachment: { + view: dsTextureView, + depthLoadOp: 'load', + depthStoreOp: 'store', + stencilClearValue: info.stencil ? 0 : undefined, + stencilLoadOp: info.stencil ? 'clear' : undefined, + stencilStoreOp: info.stencil ? 'discard' : undefined + } + }); + pass.setPipeline(checkPipeline); + pass.setViewport(0, 0, kNumTestPoints, 1, 0.0, 1.0); + pass.draw(kNumTestPoints); + pass.end(); + } + enc.copyTextureToBuffer({ texture: checkTexture }, { buffer: checkBuffer }, [kNumTestPoints]); + if (dsExpected) { + enc.copyTextureToBuffer({ texture: dsTexture }, { buffer: dsExpected }, [kNumTestPoints]); + } + t.device.queue.submit([enc.finish()]); + + t.expectGPUBufferValuesPassCheck( + fragInputZFailedBuffer, + (a) => checkElementsBetween(a, [() => -1e-5, () => 1e-5]), + { type: Float32Array, typedLength: kNumTestPoints } + ); + + const kCheckPassedValue = 0; + const predicatePrinter = [ + { leftHeader: 'expected ==', getValueForCell: (_index) => kCheckPassedValue }]; + + if (dsActual && dsExpected && format === 'depth32float') { + await Promise.all([dsActual.mapAsync(GPUMapMode.READ), dsExpected.mapAsync(GPUMapMode.READ)]); + const act = new Float32Array(dsActual.getMappedRange()); + const exp = new Float32Array(dsExpected.getMappedRange()); + predicatePrinter.push( + { leftHeader: 'act ==', getValueForCell: (index) => act[index].toFixed(2) }, + { leftHeader: 'exp ==', getValueForCell: (index) => exp[index].toFixed(2) } + ); + } + t.expectGPUBufferValuesPassCheck( + checkBuffer, + (a) => + checkElementsPassPredicate(a, (_index, value) => value === kCheckPassedValue, { + predicatePrinter + }), + { type: Uint8Array, typedLength: kNumTestPoints, method: 'map' } + ); +}); + +g.test('depth_test_input_clamped'). +desc( + ` Input to the depth test should always be in the range of viewport depth, even if it was written by the fragment shader (using frag_depth). @@ -347,31 +348,31 @@ Then, run another pass with the viewport depth set to [0.25,0.75], and output va frag_depth values from its fragment shader with depthCompare:'not-equal'. These should get clamped; any fragments that have unexpected values then get drawn to the color buffer, which is later checked to be empty.` - ) - .params(u => - u // - .combine('format', kDepthStencilFormats) - .filter(p => !!kTextureFormatInfo[p.format].depth) - .combine('unclippedDepth', [false, true]) - .combine('multisampled', [false, true]) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; +). +params((u) => +u // +.combine('format', kDepthStencilFormats). +filter((p) => !!kTextureFormatInfo[p.format].depth). +combine('unclippedDepth', [false, true]). +combine('multisampled', [false, true]) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; - t.selectDeviceOrSkipTestCase([ - t.params.unclippedDepth ? 'depth-clip-control' : undefined, - info.feature, - ]); - }) - .fn(t => { - const { format, unclippedDepth, multisampled } = t.params; - const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase([ + t.params.unclippedDepth ? 'depth-clip-control' : undefined, + info.feature] + ); +}). +fn((t) => { + const { format, unclippedDepth, multisampled } = t.params; + const info = kTextureFormatInfo[format]; - const kNumDepthValues = 8; - const kViewportMinDepth = 0.25; - const kViewportMaxDepth = 0.75; + const kNumDepthValues = 8; + const kViewportMinDepth = 0.25; + const kViewportMaxDepth = 0.75; - const shaderSource = ` + const shaderSource = ` // Test depths, with viewport range corresponding to [0,1]. var kDepths: array = array( -1.0, -0.5, 0.0, 0.25, 0.75, 1.0, 1.5, 2.0); @@ -418,107 +419,106 @@ to be empty.` } `; - const module = t.device.createShaderModule({ code: shaderSource }); + const module = t.device.createShaderModule({ code: shaderSource }); - // Initialize depth attachment with expected values, in [0.25,0.75]. - const initPipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module, entryPoint: 'vmain' }, - primitive: { topology: 'point-list' }, - depthStencil: { format, depthWriteEnabled: true, depthCompare: 'always' }, - multisample: multisampled ? { count: 4 } : undefined, - fragment: { module, entryPoint: 'finit', targets: [] }, - }); - - // With a viewport set to [0.25,0.75], output values in [0.0,1.0] and check they're clamped - // before the depth test, regardless of whether unclippedDepth is enabled. - const testPipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module, entryPoint: 'vmain' }, - primitive: { - topology: 'point-list', - unclippedDepth, - }, - depthStencil: { format, depthCompare: 'not-equal', depthWriteEnabled: false }, - multisample: multisampled ? { count: 4 } : undefined, - fragment: { module, entryPoint: 'ftest', targets: [{ format: 'r8unorm' }] }, - }); - - const dsTexture = t.device.createTexture({ - format, - size: [kNumDepthValues], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - sampleCount: multisampled ? 4 : 1, - }); - const dsTextureView = dsTexture.createView(); - - const testTextureDesc = { - format: 'r8unorm', - size: [kNumDepthValues], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }; - const testTexture = t.device.createTexture(testTextureDesc); - const testTextureView = testTexture.createView(); - const testTextureMSView = multisampled - ? t.device.createTexture({ ...testTextureDesc, sampleCount: 4 }).createView() - : undefined; - - const resultBuffer = t.device.createBuffer({ - size: kNumDepthValues, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - - const enc = t.device.createCommandEncoder(); - { - const pass = enc.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment: { - view: dsTextureView, - depthClearValue: 1.0, - depthLoadOp: 'clear', - depthStoreOp: 'store', - stencilClearValue: info.stencil ? 0 : undefined, - stencilLoadOp: info.stencil ? 'clear' : undefined, - stencilStoreOp: info.stencil ? 'discard' : undefined, - }, - }); - pass.setPipeline(initPipeline); - pass.draw(kNumDepthValues); - pass.end(); - } - { - const clearValue = [0, 0, 0, 0]; // Will see this color if the test passed. - const pass = enc.beginRenderPass({ - colorAttachments: [ - testTextureMSView - ? { - view: testTextureMSView, - resolveTarget: testTextureView, - clearValue, - loadOp: 'clear', - storeOp: 'discard', - } - : { view: testTextureView, clearValue, loadOp: 'clear', storeOp: 'store' }, - ], - - depthStencilAttachment: { - view: dsTextureView, - depthLoadOp: 'load', - depthStoreOp: 'store', - stencilClearValue: info.stencil ? 0 : undefined, - stencilLoadOp: info.stencil ? 'clear' : undefined, - stencilStoreOp: info.stencil ? 'discard' : undefined, - }, - }); - pass.setPipeline(testPipeline); - pass.setViewport(0, 0, kNumDepthValues, 1, kViewportMinDepth, kViewportMaxDepth); - pass.draw(kNumDepthValues); - pass.end(); - } - enc.copyTextureToBuffer({ texture: testTexture }, { buffer: resultBuffer }, [kNumDepthValues]); - t.device.queue.submit([enc.finish()]); - - t.expectGPUBufferValuesEqual(resultBuffer, new Uint8Array(kNumDepthValues), 0, { - method: 'map', - }); + // Initialize depth attachment with expected values, in [0.25,0.75]. + const initPipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module, entryPoint: 'vmain' }, + primitive: { topology: 'point-list' }, + depthStencil: { format, depthWriteEnabled: true, depthCompare: 'always' }, + multisample: multisampled ? { count: 4 } : undefined, + fragment: { module, entryPoint: 'finit', targets: [] } }); + + // With a viewport set to [0.25,0.75], output values in [0.0,1.0] and check they're clamped + // before the depth test, regardless of whether unclippedDepth is enabled. + const testPipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module, entryPoint: 'vmain' }, + primitive: { + topology: 'point-list', + unclippedDepth + }, + depthStencil: { format, depthCompare: 'not-equal', depthWriteEnabled: false }, + multisample: multisampled ? { count: 4 } : undefined, + fragment: { module, entryPoint: 'ftest', targets: [{ format: 'r8unorm' }] } + }); + + const dsTexture = t.device.createTexture({ + format, + size: [kNumDepthValues], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + sampleCount: multisampled ? 4 : 1 + }); + const dsTextureView = dsTexture.createView(); + + const testTextureDesc = { + format: 'r8unorm', + size: [kNumDepthValues], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC + }; + const testTexture = t.device.createTexture(testTextureDesc); + const testTextureView = testTexture.createView(); + const testTextureMSView = multisampled ? + t.device.createTexture({ ...testTextureDesc, sampleCount: 4 }).createView() : + undefined; + + const resultBuffer = t.device.createBuffer({ + size: kNumDepthValues, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ + }); + + const enc = t.device.createCommandEncoder(); + { + const pass = enc.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment: { + view: dsTextureView, + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + stencilClearValue: info.stencil ? 0 : undefined, + stencilLoadOp: info.stencil ? 'clear' : undefined, + stencilStoreOp: info.stencil ? 'discard' : undefined + } + }); + pass.setPipeline(initPipeline); + pass.draw(kNumDepthValues); + pass.end(); + } + { + const clearValue = [0, 0, 0, 0]; // Will see this color if the test passed. + const pass = enc.beginRenderPass({ + colorAttachments: [ + testTextureMSView ? + { + view: testTextureMSView, + resolveTarget: testTextureView, + clearValue, + loadOp: 'clear', + storeOp: 'discard' + } : + { view: testTextureView, clearValue, loadOp: 'clear', storeOp: 'store' }], + + depthStencilAttachment: { + view: dsTextureView, + depthLoadOp: 'load', + depthStoreOp: 'store', + stencilClearValue: info.stencil ? 0 : undefined, + stencilLoadOp: info.stencil ? 'clear' : undefined, + stencilStoreOp: info.stencil ? 'discard' : undefined + } + }); + pass.setPipeline(testPipeline); + pass.setViewport(0, 0, kNumDepthValues, 1, kViewportMinDepth, kViewportMaxDepth); + pass.draw(kNumDepthValues); + pass.end(); + } + enc.copyTextureToBuffer({ texture: testTexture }, { buffer: resultBuffer }, [kNumDepthValues]); + t.device.queue.submit([enc.finish()]); + + t.expectGPUBufferValuesEqual(resultBuffer, new Uint8Array(kNumDepthValues), 0, { + method: 'map' + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/draw.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/draw.spec.js index 489975f63f2..541b8764851 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/draw.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/draw.spec.js @@ -1,17 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for the general aspects of draw/drawIndexed/drawIndirect/drawIndexedIndirect. Primitive topology tested in api/operation/render_pipeline/primitive_topology.spec.ts. Index format tested in api/operation/command_buffer/render/state_tracking.spec.ts. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { assert } from '../../../../common/util/util.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { + assert } from + + +'../../../../common/util/util.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; + class DrawTest extends TextureTestMixin(GPUTest) { - checkTriangleDraw(opts) { + checkTriangleDraw(opts) + + + + + + + + + + { // Set fallbacks when parameters are undefined in order to calculate the expected values. const defaulted = { firstIndex: opts.firstIndex ?? 0, @@ -22,7 +36,7 @@ class DrawTest extends TextureTestMixin(GPUTest) { indirect: opts.indirect, vertexBufferOffset: opts.vertexBufferOffset, indexBufferOffset: opts.indexBufferOffset ?? 0, - baseVertex: opts.baseVertex ?? 0, + baseVertex: opts.baseVertex ?? 0 }; const renderTargetSize = [72, 36]; @@ -40,12 +54,17 @@ class DrawTest extends TextureTestMixin(GPUTest) { // | \ // |______\ // Unit triangle shaped like this. 0-1 Y-down. - const triangleVertices = [0.0, 0.0, 0.0, 1.0, 1.0, 1.0]; + + const triangleVertices = [ + 0.0, 0.0, + 0.0, 1.0, + 1.0, 1.0]; + const renderTarget = this.device.createTexture({ size: renderTargetSize, usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - format: 'rgba8unorm', + format: 'rgba8unorm' }); const vertexModule = this.device.createShaderModule({ @@ -70,7 +89,7 @@ struct Inputs { y = -2.0 * y + 1.0; return vec4(x, y, 0.0, 1.0); } -`, +` }); const fragmentModule = this.device.createShaderModule({ @@ -85,7 +104,7 @@ struct Output { output.value = 1u; return vec4(0.0, 1.0, 0.0, 1.0); } -`, +` }); const pipeline = this.device.createRenderPipeline({ @@ -94,57 +113,56 @@ struct Output { module: vertexModule, entryPoint: 'vert_main', buffers: [ + { + attributes: [ { - attributes: [ - { - shaderLocation: 0, - format: 'float32x2', - offset: 0, - }, - ], + shaderLocation: 0, + format: 'float32x2', + offset: 0 + }], + + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT + }] - arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, - }, - ], }, fragment: { module: fragmentModule, entryPoint: 'frag_main', targets: [ - { - format: 'rgba8unorm', - }, - ], - }, + { + format: 'rgba8unorm' + }] + + } }); const resultBuffer = this.device.createBuffer({ size: Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); const resultBindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: { - buffer: resultBuffer, - }, - }, - ], + { + binding: 0, + resource: { + buffer: resultBuffer + } + }] + }); const commandEncoder = this.device.createCommandEncoder(); const renderPass = commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: renderTarget.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + }); renderPass.setPipeline(pipeline); @@ -158,22 +176,15 @@ struct Output { renderPass.setIndexBuffer( this.makeBufferWithContents( new Uint32Array([ - // Offset the index buffer contents by empty data. - ...new Array(defaulted.indexBufferOffset / Uint32Array.BYTES_PER_ELEMENT), + // Offset the index buffer contents by empty data. + ...new Array(defaulted.indexBufferOffset / Uint32Array.BYTES_PER_ELEMENT), - 0, - 1, - 2, // - 3, - 4, - 5, // - 6, - 7, - 8, // + 0, 1, 2, // + 3, 4, 5, // + 6, 7, 8 // ]), GPUBufferUsage.INDEX ), - 'uint32', defaulted.indexBufferOffset ); @@ -182,35 +193,33 @@ struct Output { 0, this.makeBufferWithContents( new Float32Array([ - // Offset the vertex buffer contents by empty data. - ...new Array(defaulted.vertexBufferOffset / Float32Array.BYTES_PER_ELEMENT), + // Offset the vertex buffer contents by empty data. + ...new Array(defaulted.vertexBufferOffset / Float32Array.BYTES_PER_ELEMENT), - // selected with base_vertex=0 - // count=6 - ...triangleVertices, // | count=6;first=3 - ...triangleVertices, // | | - ...triangleVertices, // | + // selected with base_vertex=0 + // count=6 + ...triangleVertices, // | count=6;first=3 + ...triangleVertices, // | | + ...triangleVertices, // | - // selected with base_vertex=9 - // count=6 - ...triangleVertices, // | count=6;first=3 - ...triangleVertices, // | | - ...triangleVertices, // | + // selected with base_vertex=9 + // count=6 + ...triangleVertices, // | count=6;first=3 + ...triangleVertices, // | | + ...triangleVertices // | ]), GPUBufferUsage.VERTEX ), - defaulted.vertexBufferOffset ); if (defaulted.indirect) { const args = [ - defaulted.count, - defaulted.instanceCount, - defaulted.firstIndex, - defaulted.baseVertex, - defaulted.firstInstance, - ]; + defaulted.count, + defaulted.instanceCount, + defaulted.firstIndex, + defaulted.baseVertex, + defaulted.firstInstance]; renderPass.drawIndexedIndirect( this.makeBufferWithContents(new Uint32Array(args), GPUBufferUsage.INDIRECT), @@ -218,12 +227,11 @@ struct Output { ); } else { const args = [ - opts.count, - opts.instanceCount, - opts.firstIndex, - opts.baseVertex, - opts.firstInstance, - ]; + opts.count, + opts.instanceCount, + opts.firstIndex, + opts.baseVertex, + opts.firstInstance]; renderPass.drawIndexed.apply(renderPass, [...args]); } @@ -233,27 +241,25 @@ struct Output { 0, this.makeBufferWithContents( new Float32Array([ - // Offset the vertex buffer contents by empty data. - ...new Array(defaulted.vertexBufferOffset / Float32Array.BYTES_PER_ELEMENT), + // Offset the vertex buffer contents by empty data. + ...new Array(defaulted.vertexBufferOffset / Float32Array.BYTES_PER_ELEMENT), - // count=6 - ...triangleVertices, // | count=6;first=3 - ...triangleVertices, // | | - ...triangleVertices, // | + // count=6 + ...triangleVertices, // | count=6;first=3 + ...triangleVertices, // | | + ...triangleVertices // | ]), GPUBufferUsage.VERTEX ), - defaulted.vertexBufferOffset ); if (defaulted.indirect) { const args = [ - defaulted.count, - defaulted.instanceCount, - defaulted.firstIndex, - defaulted.firstInstance, - ]; + defaulted.count, + defaulted.instanceCount, + defaulted.firstIndex, + defaulted.firstInstance]; renderPass.drawIndirect( this.makeBufferWithContents(new Uint32Array(args), GPUBufferUsage.INDIRECT), @@ -281,22 +287,22 @@ struct Output { for (let instanceId = 0; instanceId < numY; ++instanceId) { let expectedColor = didDraw ? green : transparentBlack; if ( - primitiveId * 3 < defaulted.firstIndex + baseVertexCount || - primitiveId * 3 >= defaulted.firstIndex + baseVertexCount + defaulted.count - ) { + primitiveId * 3 < defaulted.firstIndex + baseVertexCount || + primitiveId * 3 >= defaulted.firstIndex + baseVertexCount + defaulted.count) + { expectedColor = transparentBlack; } if ( - instanceId < defaulted.firstInstance || - instanceId >= defaulted.firstInstance + defaulted.instanceCount - ) { + instanceId < defaulted.firstInstance || + instanceId >= defaulted.firstInstance + defaulted.instanceCount) + { expectedColor = transparentBlack; } pixelComparisons.push({ coord: { x: (1 / 3 + primitiveId) * tileSizeX, y: (2 / 3 + instanceId) * tileSizeY }, - exp: expectedColor, + exp: expectedColor }); } } @@ -306,9 +312,9 @@ struct Output { export const g = makeTestGroup(DrawTest); -g.test('arguments') - .desc( - `Test that draw arguments are passed correctly by drawing triangles in a grid. +g.test('arguments'). +desc( + `Test that draw arguments are passed correctly by drawing triangles in a grid. Horizontally across the texture are triangles with increasing "primitive id". Vertically down the screen are triangles with increasing instance id. Increasing the |first| param should skip some of the beginning triangles on the horizontal axis. @@ -328,77 +334,79 @@ Params: - index_buffer_offset= {0, 16} - only for indexed draws - base_vertex= {0, 9} - only for indexed draws ` - ) - .params(u => - u - .combine('first', [0, 3]) - .combine('count', [0, 3, 6]) - .combine('first_instance', [0, 2]) - .combine('instance_count', [0, 1, 4]) - .combine('indexed', [false, true]) - .combine('indirect', [false, true]) - .combine('vertex_buffer_offset', [0, 32]) - .expand('index_buffer_offset', p => (p.indexed ? [0, 16] : [undefined])) - .expand('base_vertex', p => (p.indexed ? [0, 9] : [undefined])) - ) - .beforeAllSubcases(t => { - if (t.params.first_instance > 0 && t.params.indirect) { - t.selectDeviceOrSkipTestCase('indirect-first-instance'); - } - }) - .fn(t => { - t.checkTriangleDraw({ - firstIndex: t.params.first, - count: t.params.count, - firstInstance: t.params.first_instance, - instanceCount: t.params.instance_count, - indexed: t.params.indexed, - indirect: t.params.indirect, - vertexBufferOffset: t.params.vertex_buffer_offset, - indexBufferOffset: t.params.index_buffer_offset, - baseVertex: t.params.base_vertex, - }); +). +params((u) => +u. +combine('first', [0, 3]). +combine('count', [0, 3, 6]). +combine('first_instance', [0, 2]). +combine('instance_count', [0, 1, 4]). +combine('indexed', [false, true]). +combine('indirect', [false, true]). +combine('vertex_buffer_offset', [0, 32]). +expand('index_buffer_offset', (p) => p.indexed ? [0, 16] : [undefined]). +expand('base_vertex', (p) => p.indexed ? [0, 9] : [undefined]) +). +beforeAllSubcases((t) => { + if (t.params.first_instance > 0 && t.params.indirect) { + t.selectDeviceOrSkipTestCase('indirect-first-instance'); + } +}). +fn((t) => { + t.checkTriangleDraw({ + firstIndex: t.params.first, + count: t.params.count, + firstInstance: t.params.first_instance, + instanceCount: t.params.instance_count, + indexed: t.params.indexed, + indirect: t.params.indirect, + vertexBufferOffset: t.params.vertex_buffer_offset, + indexBufferOffset: t.params.index_buffer_offset, + baseVertex: t.params.base_vertex }); +}); -g.test('default_arguments') - .desc( - ` +g.test('default_arguments'). +desc( + ` Test that defaults arguments are passed correctly by drawing triangles in a grid when they are not defined. This test is written based on the 'arguments' with 'undefined' value in the parameters. - mode= {draw, drawIndexed} - arg= {instance_count, first_index, first_instance, base_vertex} ` - ) - .params(u => - u - .combine('mode', ['draw', 'drawIndexed']) - .beginSubcases() - .combine('instance_count', [undefined, 4]) - .combine('first_index', [undefined, 3]) - .combine('first_instance', [undefined, 2]) - .expand('base_vertex', p => (p.mode === 'drawIndexed' ? [undefined, 9] : [undefined])) - ) - .fn(t => { - const kVertexCount = 3; - const kVertexBufferOffset = 32; - const kIndexBufferOffset = 16; +). +params((u) => +u. +combine('mode', ['draw', 'drawIndexed']). +beginSubcases(). +combine('instance_count', [undefined, 4]). +combine('first_index', [undefined, 3]). +combine('first_instance', [undefined, 2]). +expand('base_vertex', (p) => +p.mode === 'drawIndexed' ? [undefined, 9] : [undefined] +) +). +fn((t) => { + const kVertexCount = 3; + const kVertexBufferOffset = 32; + const kIndexBufferOffset = 16; - t.checkTriangleDraw({ - firstIndex: t.params.first_index, - count: kVertexCount, - firstInstance: t.params.first_instance, - instanceCount: t.params.instance_count, - indexed: t.params.mode === 'drawIndexed', - indirect: false, // indirect - vertexBufferOffset: kVertexBufferOffset, - indexBufferOffset: kIndexBufferOffset, - baseVertex: t.params.base_vertex, - }); + t.checkTriangleDraw({ + firstIndex: t.params.first_index, + count: kVertexCount, + firstInstance: t.params.first_instance, + instanceCount: t.params.instance_count, + indexed: t.params.mode === 'drawIndexed', + indirect: false, // indirect + vertexBufferOffset: kVertexBufferOffset, + indexBufferOffset: kIndexBufferOffset, + baseVertex: t.params.base_vertex }); +}); -g.test('vertex_attributes,basic') - .desc( - `Test basic fetching of vertex attributes. +g.test('vertex_attributes,basic'). +desc( + `Test basic fetching of vertex attributes. Each vertex attribute is a single value and written out into a storage buffer. Tests that vertices with offsets/strides for instanced/non-instanced attributes are fetched correctly. Not all vertex formats are tested. @@ -409,248 +417,247 @@ g.test('vertex_attributes,basic') - vertex_format={uint32, float32} - step_mode= {undefined, vertex, instance, mixed} - where mixed only applies for vertex_buffer_count > 1 ` - ) - .params(u => - u - .combine('vertex_attribute_count', [1, 4, 8, 16]) - .combine('vertex_buffer_count', [1, 4, 8]) - .combine('vertex_format', ['uint32', 'float32']) - .combine('step_mode', [undefined, 'vertex', 'instance', 'mixed']) - .unless(p => p.vertex_attribute_count < p.vertex_buffer_count) - .unless(p => p.step_mode === 'mixed' && p.vertex_buffer_count <= 1) - ) - .fn(t => { - const vertexCount = 4; - const instanceCount = 4; +). +params((u) => +u. +combine('vertex_attribute_count', [1, 4, 8, 16]). +combine('vertex_buffer_count', [1, 4, 8]). +combine('vertex_format', ['uint32', 'float32']). +combine('step_mode', [undefined, 'vertex', 'instance', 'mixed']). +unless((p) => p.vertex_attribute_count < p.vertex_buffer_count). +unless((p) => p.step_mode === 'mixed' && p.vertex_buffer_count <= 1) +). +fn((t) => { + const vertexCount = 4; + const instanceCount = 4; - // In compat mode, @builtin(vertex_index) and @builtin(instance_index) each take an attribute. - const maxAttributes = t.device.limits.maxVertexAttributes - (t.isCompatibility ? 2 : 0); - const numAttributes = Math.min(maxAttributes, t.params.vertex_attribute_count); - const maxAttributesPerVertexBuffer = Math.ceil(numAttributes / t.params.vertex_buffer_count); + // In compat mode, @builtin(vertex_index) and @builtin(instance_index) each take an attribute. + const maxAttributes = t.device.limits.maxVertexAttributes - (t.isCompatibility ? 2 : 0); + const numAttributes = Math.min(maxAttributes, t.params.vertex_attribute_count); + const maxAttributesPerVertexBuffer = Math.ceil(numAttributes / t.params.vertex_buffer_count); - let shaderLocation = 0; - let attributeValue = 0; - const bufferLayouts = []; + let shaderLocation = 0; + let attributeValue = 0; + const bufferLayouts = []; - let ExpectedDataConstructor; - switch (t.params.vertex_format) { - case 'uint32': - ExpectedDataConstructor = Uint32Array; + let ExpectedDataConstructor; + switch (t.params.vertex_format) { + case 'uint32': + ExpectedDataConstructor = Uint32Array; + break; + case 'float32': + ExpectedDataConstructor = Float32Array; + break; + } + + // Populate |bufferLayouts|, |vertexBufferData|, and |vertexBuffers|. + // We will use this to both create the render pipeline, and produce the + // expected data on the CPU. + // Attributes in each buffer will be interleaved. + const vertexBuffers = []; + const vertexBufferData = []; + for (let b = 0; b < t.params.vertex_buffer_count; ++b) { + const vertexBufferValues = []; + + let offset = 0; + let stepMode = t.params.step_mode; + + // If stepMode is mixed, alternate between vertex and instance. + if (stepMode === 'mixed') { + stepMode = ['vertex', 'instance'][b % 2]; + } + + let vertexOrInstanceCount; + switch (stepMode) { + case undefined: + case 'vertex': + vertexOrInstanceCount = vertexCount; break; - case 'float32': - ExpectedDataConstructor = Float32Array; + case 'instance': + vertexOrInstanceCount = instanceCount; break; } - // Populate |bufferLayouts|, |vertexBufferData|, and |vertexBuffers|. - // We will use this to both create the render pipeline, and produce the - // expected data on the CPU. - // Attributes in each buffer will be interleaved. - const vertexBuffers = []; - const vertexBufferData = []; - for (let b = 0; b < t.params.vertex_buffer_count; ++b) { - const vertexBufferValues = []; - - let offset = 0; - let stepMode = t.params.step_mode; - - // If stepMode is mixed, alternate between vertex and instance. - if (stepMode === 'mixed') { - stepMode = ['vertex', 'instance'][b % 2]; - } - - let vertexOrInstanceCount; - switch (stepMode) { - case undefined: - case 'vertex': - vertexOrInstanceCount = vertexCount; - break; - case 'instance': - vertexOrInstanceCount = instanceCount; - break; - } - - const attributes = []; - const numAttributesForBuffer = Math.min( - maxAttributesPerVertexBuffer, - maxAttributes - b * maxAttributesPerVertexBuffer - ); - - for (let a = 0; a < numAttributesForBuffer; ++a) { - const attribute = { - format: t.params.vertex_format, - shaderLocation, - offset, - }; - attributes.push(attribute); - - offset += ExpectedDataConstructor.BYTES_PER_ELEMENT; - shaderLocation += 1; - } - - for (let v = 0; v < vertexOrInstanceCount; ++v) { - for (let a = 0; a < numAttributesForBuffer; ++a) { - vertexBufferValues.push(attributeValue); - attributeValue += 1.234; // Values will get rounded later if we make a Uint32Array. - } - } - - bufferLayouts.push({ - attributes, - arrayStride: offset, - stepMode, - }); - - const data = new ExpectedDataConstructor(vertexBufferValues); - vertexBufferData.push(data); - vertexBuffers.push(t.makeBufferWithContents(data, GPUBufferUsage.VERTEX)); - } - - // Create an array of shader locations [0, 1, 2, 3, ...] for easy iteration. - const vertexInputShaderLocations = new Array(shaderLocation).fill(0).map((_, i) => i); - - // Create the expected data buffer. - const expectedData = new ExpectedDataConstructor( - vertexCount * instanceCount * vertexInputShaderLocations.length + const attributes = []; + const numAttributesForBuffer = Math.min( + maxAttributesPerVertexBuffer, + maxAttributes - b * maxAttributesPerVertexBuffer ); - // Populate the expected data. This is a CPU-side version of what we expect the shader - // to do. - for (let vertexIndex = 0; vertexIndex < vertexCount; ++vertexIndex) { - for (let instanceIndex = 0; instanceIndex < instanceCount; ++instanceIndex) { - bufferLayouts.forEach((bufferLayout, b) => { - for (const attribute of bufferLayout.attributes) { - const primitiveId = vertexCount * instanceIndex + vertexIndex; - const outputIndex = - primitiveId * vertexInputShaderLocations.length + attribute.shaderLocation; + for (let a = 0; a < numAttributesForBuffer; ++a) { + const attribute = { + format: t.params.vertex_format, + shaderLocation, + offset + }; + attributes.push(attribute); - let vertexOrInstanceIndex; - switch (bufferLayout.stepMode) { - case undefined: - case 'vertex': - vertexOrInstanceIndex = vertexIndex; - break; - case 'instance': - vertexOrInstanceIndex = instanceIndex; - break; - } + offset += ExpectedDataConstructor.BYTES_PER_ELEMENT; + shaderLocation += 1; + } - const view = new ExpectedDataConstructor( - vertexBufferData[b].buffer, - bufferLayout.arrayStride * vertexOrInstanceIndex + attribute.offset, - 1 - ); - - expectedData[outputIndex] = view[0]; - } - }); + for (let v = 0; v < vertexOrInstanceCount; ++v) { + for (let a = 0; a < numAttributesForBuffer; ++a) { + vertexBufferValues.push(attributeValue); + attributeValue += 1.234; // Values will get rounded later if we make a Uint32Array. } } - let wgslFormat; - switch (t.params.vertex_format) { - case 'uint32': - wgslFormat = 'u32'; - break; - case 'float32': - wgslFormat = 'f32'; - break; + bufferLayouts.push({ + attributes, + arrayStride: offset, + stepMode + }); + + const data = new ExpectedDataConstructor(vertexBufferValues); + vertexBufferData.push(data); + vertexBuffers.push(t.makeBufferWithContents(data, GPUBufferUsage.VERTEX)); + } + + // Create an array of shader locations [0, 1, 2, 3, ...] for easy iteration. + const vertexInputShaderLocations = new Array(shaderLocation).fill(0).map((_, i) => i); + + // Create the expected data buffer. + const expectedData = new ExpectedDataConstructor( + vertexCount * instanceCount * vertexInputShaderLocations.length + ); + + // Populate the expected data. This is a CPU-side version of what we expect the shader + // to do. + for (let vertexIndex = 0; vertexIndex < vertexCount; ++vertexIndex) { + for (let instanceIndex = 0; instanceIndex < instanceCount; ++instanceIndex) { + bufferLayouts.forEach((bufferLayout, b) => { + for (const attribute of bufferLayout.attributes) { + const primitiveId = vertexCount * instanceIndex + vertexIndex; + const outputIndex = + primitiveId * vertexInputShaderLocations.length + attribute.shaderLocation; + + let vertexOrInstanceIndex; + switch (bufferLayout.stepMode) { + case undefined: + case 'vertex': + vertexOrInstanceIndex = vertexIndex; + break; + case 'instance': + vertexOrInstanceIndex = instanceIndex; + break; + } + + const view = new ExpectedDataConstructor( + vertexBufferData[b].buffer, + bufferLayout.arrayStride * vertexOrInstanceIndex + attribute.offset, + 1 + ); + expectedData[outputIndex] = view[0]; + } + }); } + } - // Maximum inter-stage shader location is 14, and we need to consume one for primitiveId, 12 for - // location 0 to 11, and combine the remaining vertex inputs into one location (one - // vec4 when vertex_attribute_count === 16). - const interStageScalarShaderLocation = Math.min(shaderLocation, 12); - const interStageScalarShaderLocations = new Array(interStageScalarShaderLocation) - .fill(0) - .map((_, i) => i); + let wgslFormat; + switch (t.params.vertex_format) { + case 'uint32': + wgslFormat = 'u32'; + break; + case 'float32': + wgslFormat = 'f32'; + break; + } - let accumulateVariableDeclarationsInVertexShader = ''; - let accumulateVariableAssignmentsInVertexShader = ''; - let accumulateVariableDeclarationsInFragmentShader = ''; - let accumulateVariableAssignmentsInFragmentShader = ''; - // The remaining 3 vertex attributes - if (numAttributes === 16) { - accumulateVariableDeclarationsInVertexShader = ` + // Maximum inter-stage shader location is 14, and we need to consume one for primitiveId, 12 for + // location 0 to 11, and combine the remaining vertex inputs into one location (one + // vec4 when vertex_attribute_count === 16). + const interStageScalarShaderLocation = Math.min(shaderLocation, 12); + const interStageScalarShaderLocations = new Array(interStageScalarShaderLocation). + fill(0). + map((_, i) => i); + + let accumulateVariableDeclarationsInVertexShader = ''; + let accumulateVariableAssignmentsInVertexShader = ''; + let accumulateVariableDeclarationsInFragmentShader = ''; + let accumulateVariableAssignmentsInFragmentShader = ''; + // The remaining 3 vertex attributes + if (numAttributes === 16) { + accumulateVariableDeclarationsInVertexShader = ` @location(13) @interpolate(flat) outAttrib13 : vec4<${wgslFormat}>, `; - accumulateVariableAssignmentsInVertexShader = ` + accumulateVariableAssignmentsInVertexShader = ` output.outAttrib13 = vec4<${wgslFormat}>(input.attrib12, input.attrib13, input.attrib14, input.attrib15); `; - accumulateVariableDeclarationsInFragmentShader = ` + accumulateVariableDeclarationsInFragmentShader = ` @location(13) @interpolate(flat) attrib13 : vec4<${wgslFormat}>, `; - accumulateVariableAssignmentsInFragmentShader = ` + accumulateVariableAssignmentsInFragmentShader = ` outBuffer.primitives[input.primitiveId].attrib12 = input.attrib13.x; outBuffer.primitives[input.primitiveId].attrib13 = input.attrib13.y; outBuffer.primitives[input.primitiveId].attrib14 = input.attrib13.z; outBuffer.primitives[input.primitiveId].attrib15 = input.attrib13.w; `; - } else if (numAttributes === 14) { - accumulateVariableDeclarationsInVertexShader = ` + } else if (numAttributes === 14) { + accumulateVariableDeclarationsInVertexShader = ` @location(13) @interpolate(flat) outAttrib13 : vec4<${wgslFormat}>, `; - accumulateVariableAssignmentsInVertexShader = ` + accumulateVariableAssignmentsInVertexShader = ` output.outAttrib13 = vec4<${wgslFormat}>(input.attrib12, input.attrib13, 0, 0); `; - accumulateVariableDeclarationsInFragmentShader = ` + accumulateVariableDeclarationsInFragmentShader = ` @location(13) @interpolate(flat) attrib13 : vec4<${wgslFormat}>, `; - accumulateVariableAssignmentsInFragmentShader = ` + accumulateVariableAssignmentsInFragmentShader = ` outBuffer.primitives[input.primitiveId].attrib12 = input.attrib13.x; outBuffer.primitives[input.primitiveId].attrib13 = input.attrib13.y; `; - } + } - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` struct Inputs { @builtin(vertex_index) vertexIndex : u32, @builtin(instance_index) instanceIndex : u32, -${vertexInputShaderLocations.map(i => ` @location(${i}) attrib${i} : ${wgslFormat},`).join('\n')} +${vertexInputShaderLocations.map((i) => ` @location(${i}) attrib${i} : ${wgslFormat},`).join('\n')} }; struct Outputs { @builtin(position) Position : vec4, -${interStageScalarShaderLocations - .map(i => ` @location(${i}) @interpolate(flat) outAttrib${i} : ${wgslFormat},`) - .join('\n')} +${interStageScalarShaderLocations. + map((i) => ` @location(${i}) @interpolate(flat) outAttrib${i} : ${wgslFormat},`). + join('\n')} @location(${interStageScalarShaderLocations.length}) @interpolate(flat) primitiveId : u32, ${accumulateVariableDeclarationsInVertexShader} }; @vertex fn main(input : Inputs) -> Outputs { var output : Outputs; -${interStageScalarShaderLocations.map(i => ` output.outAttrib${i} = input.attrib${i};`).join('\n')} +${interStageScalarShaderLocations.map((i) => ` output.outAttrib${i} = input.attrib${i};`).join('\n')} ${accumulateVariableAssignmentsInVertexShader} output.primitiveId = input.instanceIndex * ${instanceCount}u + input.vertexIndex; output.Position = vec4(0.0, 0.0, 0.5, 1.0); return output; } - `, - }), - entryPoint: 'main', - buffers: bufferLayouts, - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + ` + }), + entryPoint: 'main', + buffers: bufferLayouts + }, + fragment: { + module: t.device.createShaderModule({ + code: ` struct Inputs { -${interStageScalarShaderLocations - .map(i => ` @location(${i}) @interpolate(flat) attrib${i} : ${wgslFormat},`) - .join('\n')} +${interStageScalarShaderLocations. + map((i) => ` @location(${i}) @interpolate(flat) attrib${i} : ${wgslFormat},`). + join('\n')} @location(${interStageScalarShaderLocations.length}) @interpolate(flat) primitiveId : u32, ${accumulateVariableDeclarationsInFragmentShader} }; struct OutPrimitive { -${vertexInputShaderLocations.map(i => ` attrib${i} : ${wgslFormat},`).join('\n')} +${vertexInputShaderLocations.map((i) => ` attrib${i} : ${wgslFormat},`).join('\n')} }; struct OutBuffer { primitives : array @@ -658,78 +665,78 @@ struct OutBuffer { @group(0) @binding(0) var outBuffer : OutBuffer; @fragment fn main(input : Inputs) { -${interStageScalarShaderLocations - .map(i => ` outBuffer.primitives[input.primitiveId].attrib${i} = input.attrib${i};`) - .join('\n')} +${interStageScalarShaderLocations. + map((i) => ` outBuffer.primitives[input.primitiveId].attrib${i} = input.attrib${i};`). + join('\n')} ${accumulateVariableAssignmentsInFragmentShader} } - `, - }), - entryPoint: 'main', - targets: [ - { - format: 'rgba8unorm', - writeMask: 0, - }, - ], - }, - primitive: { - topology: 'point-list', - }, - }); + ` + }), + entryPoint: 'main', + targets: [ + { + format: 'rgba8unorm', + writeMask: 0 + }] - const resultBuffer = t.device.createBuffer({ - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - size: vertexCount * instanceCount * vertexInputShaderLocations.length * 4, - }); - - const resultBindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: { - buffer: resultBuffer, - }, - }, - ], - }); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - // Dummy render attachment - not used (WebGPU doesn't allow using a render pass with no - // attachments) - view: t.device - .createTexture({ - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [1], - format: 'rgba8unorm', - }) - .createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - renderPass.setPipeline(pipeline); - renderPass.setBindGroup(0, resultBindGroup); - for (let i = 0; i < t.params.vertex_buffer_count; ++i) { - renderPass.setVertexBuffer(i, vertexBuffers[i]); + }, + primitive: { + topology: 'point-list' } - renderPass.draw(vertexCount, instanceCount); - renderPass.end(); - t.device.queue.submit([commandEncoder.finish()]); - - t.expectGPUBufferValuesEqual(resultBuffer, expectedData); }); -g.test('vertex_attributes,formats') - .desc( - `Test all vertex formats are fetched correctly. + const resultBuffer = t.device.createBuffer({ + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + size: vertexCount * instanceCount * vertexInputShaderLocations.length * 4 + }); + + const resultBindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: resultBuffer + } + }] + + }); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + // Dummy render attachment - not used (WebGPU doesn't allow using a render pass with no + // attachments) + view: t.device. + createTexture({ + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [1], + format: 'rgba8unorm' + }). + createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + renderPass.setPipeline(pipeline); + renderPass.setBindGroup(0, resultBindGroup); + for (let i = 0; i < t.params.vertex_buffer_count; ++i) { + renderPass.setVertexBuffer(i, vertexBuffers[i]); + } + renderPass.draw(vertexCount, instanceCount); + renderPass.end(); + t.device.queue.submit([commandEncoder.finish()]); + + t.expectGPUBufferValuesEqual(resultBuffer, expectedData); +}); + +g.test('vertex_attributes,formats'). +desc( + `Test all vertex formats are fetched correctly. Runs a basic vertex shader which loads vertex data from two attributes which may have different formats. Write data out to a storage buffer and check that @@ -739,12 +746,12 @@ g.test('vertex_attributes,formats') - vertex_format_1={...all_vertex_formats} - vertex_format_2={...all_vertex_formats} ` - ) - .unimplemented(); +). +unimplemented(); -g.test(`largeish_buffer`) - .desc( - ` +g.test(`largeish_buffer`). +desc( + ` Test a very large range of buffer is bound. For a render pipeline that use a vertex step mode and a instance step mode vertex buffer, test that : @@ -757,5 +764,5 @@ g.test(`largeish_buffer`) - For drawIndirect and drawIndexedIndirect: - The indirect buffer is significantly larger than necessary ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/indirect_draw.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/indirect_draw.spec.js index 15d227809a8..4bc9cf57275 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/indirect_draw.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/indirect_draw.spec.js @@ -1,13 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for the indirect-specific aspects of drawIndirect/drawIndexedIndirect. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kDrawIndirectParametersSize, - kDrawIndexedIndirectParametersSize, -} from '../../../capability_info.js'; + kDrawIndexedIndirectParametersSize } from +'../../../capability_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; const filled = new Uint8Array([0, 255, 0, 255]); @@ -19,37 +18,32 @@ class F extends GPUTest { MakeIndexBuffer() { return this.makeBufferWithContents( new Uint32Array([ - 0, - 1, - 2, // The bottom left triangle - 1, - 2, - 3, // The top right triangle + 0, 1, 2, // The bottom left triangle + 1, 2, 3 // The top right triangle ]), GPUBufferUsage.INDEX ); } MakeVertexBuffer(isIndexed) { - const vertices = isIndexed - ? [-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0] - : [ - // The bottom left triangle - -1.0, - 1.0, - 1.0, - -1.0, - -1.0, - -1.0, - // The top right triangle - -1.0, - 1.0, - 1.0, - -1.0, - 1.0, - 1.0, - ]; + const vertices = isIndexed ? + [ + -1.0, -1.0, + -1.0, 1.0, + 1.0, -1.0, + 1.0, 1.0] : + + [ + // The bottom left triangle + -1.0, 1.0, + 1.0, -1.0, + -1.0, -1.0, + + // The top right triangle + -1.0, 1.0, + 1.0, -1.0, + 1.0, 1.0]; return this.makeBufferWithContents(new Float32Array(vertices), GPUBufferUsage.VERTEX); } @@ -57,9 +51,9 @@ class F extends GPUTest { MakeIndirectBuffer(isIndexed, indirectOffset) { const o = indirectOffset / Uint32Array.BYTES_PER_ELEMENT; - const parametersSize = isIndexed - ? kDrawIndexedIndirectParametersSize - : kDrawIndirectParametersSize; + const parametersSize = isIndexed ? + kDrawIndexedIndirectParametersSize : + kDrawIndirectParametersSize; const arraySize = o + parametersSize * 2; const indirectBuffer = [...Array(arraySize)].map(() => Math.floor(Math.random() * 100)); @@ -132,9 +126,9 @@ class F extends GPUTest { export const g = makeTestGroup(TextureTestMixin(F)); -g.test('basics') - .desc( - `Test that the indirect draw parameters are tightly packed for drawIndirect and drawIndexedIndirect. +g.test('basics'). +desc( + `Test that the indirect draw parameters are tightly packed for drawIndirect and drawIndexedIndirect. An indirectBuffer is created based on indirectOffset. The actual draw args being used indicated by the indirectOffset is going to draw a left bottom triangle. While the remaining indirectBuffer is populated with random numbers or draw args @@ -146,104 +140,103 @@ Params: - draw{Indirect, IndexedIndirect} - indirectOffset= {0, 4, k * sizeof(args struct), k * sizeof(args struct) + 4} ` - ) - .params(u => - u - .combine('isIndexed', [true, false]) - .beginSubcases() - .expand('indirectOffset', p => { - const indirectDrawParametersSize = p.isIndexed - ? kDrawIndexedIndirectParametersSize * Uint32Array.BYTES_PER_ELEMENT - : kDrawIndirectParametersSize * Uint32Array.BYTES_PER_ELEMENT; - return [ - 0, - Uint32Array.BYTES_PER_ELEMENT, - 1 * indirectDrawParametersSize, - 1 * indirectDrawParametersSize + Uint32Array.BYTES_PER_ELEMENT, - 3 * indirectDrawParametersSize, - 3 * indirectDrawParametersSize + Uint32Array.BYTES_PER_ELEMENT, - 99 * indirectDrawParametersSize, - 99 * indirectDrawParametersSize + Uint32Array.BYTES_PER_ELEMENT, - ]; - }) - ) - .fn(t => { - const { isIndexed, indirectOffset } = t.params; +). +params((u) => +u. +combine('isIndexed', [true, false]). +beginSubcases(). +expand('indirectOffset', (p) => { + const indirectDrawParametersSize = p.isIndexed ? + kDrawIndexedIndirectParametersSize * Uint32Array.BYTES_PER_ELEMENT : + kDrawIndirectParametersSize * Uint32Array.BYTES_PER_ELEMENT; + return [ + 0, + Uint32Array.BYTES_PER_ELEMENT, + 1 * indirectDrawParametersSize, + 1 * indirectDrawParametersSize + Uint32Array.BYTES_PER_ELEMENT, + 3 * indirectDrawParametersSize, + 3 * indirectDrawParametersSize + Uint32Array.BYTES_PER_ELEMENT, + 99 * indirectDrawParametersSize, + 99 * indirectDrawParametersSize + Uint32Array.BYTES_PER_ELEMENT]; - const vertexBuffer = t.MakeVertexBuffer(isIndexed); - const indirectBuffer = t.MakeIndirectBuffer(isIndexed, indirectOffset); +}) +). +fn((t) => { + const { isIndexed, indirectOffset } = t.params; - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: `@vertex fn main(@location(0) pos : vec2) -> @builtin(position) vec4 { + const vertexBuffer = t.MakeVertexBuffer(isIndexed); + const indirectBuffer = t.MakeIndirectBuffer(isIndexed, indirectOffset); + + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: `@vertex fn main(@location(0) pos : vec2) -> @builtin(position) vec4 { return vec4(pos, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - buffers: [ - { - attributes: [ - { - shaderLocation: 0, - format: 'float32x2', - offset: 0, - }, - ], - - arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, - }, - ], - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() -> @location(0) vec4 { - return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [ - { - format: kRenderTargetFormat, - }, - ], - }, - }); - - const renderTarget = t.device.createTexture({ - size: [4, 4], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - format: kRenderTargetFormat, - }); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ + }` + }), + entryPoint: 'main', + buffers: [ + { + attributes: [ { - view: renderTarget.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(pipeline); - renderPass.setVertexBuffer(0, vertexBuffer, 0); + shaderLocation: 0, + format: 'float32x2', + offset: 0 + }], + + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT + }] + + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() -> @location(0) vec4 { + return vec4(0.0, 1.0, 0.0, 1.0); + }` + }), + entryPoint: 'main', + targets: [ + { + format: kRenderTargetFormat + }] - if (isIndexed) { - renderPass.setIndexBuffer(t.MakeIndexBuffer(), 'uint32', 0); - renderPass.drawIndexedIndirect(indirectBuffer, indirectOffset); - } else { - renderPass.drawIndirect(indirectBuffer, indirectOffset); } - renderPass.end(); - t.queue.submit([commandEncoder.finish()]); - - t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTarget }, [ - // The bottom left area is filled - { coord: { x: 0, y: 1 }, exp: filled }, - // The top right area is not filled - { coord: { x: 1, y: 0 }, exp: notFilled }, - ]); }); + + const renderTarget = t.device.createTexture({ + size: [4, 4], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + format: kRenderTargetFormat + }); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(pipeline); + renderPass.setVertexBuffer(0, vertexBuffer, 0); + + if (isIndexed) { + renderPass.setIndexBuffer(t.MakeIndexBuffer(), 'uint32', 0); + renderPass.drawIndexedIndirect(indirectBuffer, indirectOffset); + } else { + renderPass.drawIndirect(indirectBuffer, indirectOffset); + } + renderPass.end(); + t.queue.submit([commandEncoder.finish()]); + + t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTarget }, [ + // The bottom left area is filled + { coord: { x: 0, y: 1 }, exp: filled }, + // The top right area is not filled + { coord: { x: 1, y: 0 }, exp: notFilled }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/robust_access_index.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/robust_access_index.spec.js index 6b052b895d4..0e5c1fa8aff 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/robust_access_index.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/robust_access_index.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: Test that drawIndexedIndirect accesses the index buffer robustly. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; -export const g = makeTestGroup(GPUTest); +export const g = makeTestGroup(GPUTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/stencil.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/stencil.spec.js index fd4adf84329..9868fa37c10 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/stencil.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/rendering/stencil.spec.js @@ -1,40 +1,49 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test related to stencil states, stencil op, compare func, etc. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { kDepthStencilFormats, kTextureFormatInfo } from '../../../format_info.js'; +import { + kDepthStencilFormats, + kTextureFormatInfo } from + +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { TexelView } from '../../../util/texture/texel_view.js'; -const kStencilFormats = kDepthStencilFormats.filter(format => kTextureFormatInfo[format].stencil); +const kStencilFormats = kDepthStencilFormats.filter((format) => kTextureFormatInfo[format].stencil); const kBaseColor = new Float32Array([1.0, 1.0, 1.0, 1.0]); const kRedStencilColor = new Float32Array([1.0, 0.0, 0.0, 1.0]); const kGreenStencilColor = new Float32Array([0.0, 1.0, 0.0, 1.0]); + + + + + + class StencilTest extends TextureTestMixin(GPUTest) { checkStencilOperation( - depthStencilFormat, - testStencilState, - initialStencil, - _expectedStencil, - depthCompare = 'always' - ) { + depthStencilFormat, + testStencilState, + initialStencil, + _expectedStencil, + depthCompare = 'always') + { const kReferenceStencil = 3; const baseStencilState = { compare: 'always', failOp: 'keep', - passOp: 'replace', + passOp: 'replace' }; const stencilState = { compare: 'equal', failOp: 'keep', - passOp: 'keep', + passOp: 'keep' }; const baseState = { @@ -42,7 +51,7 @@ class StencilTest extends TextureTestMixin(GPUTest) { depthWriteEnabled: false, depthCompare: 'always', stencilFront: baseStencilState, - stencilBack: baseStencilState, + stencilBack: baseStencilState }; const testState = { @@ -50,7 +59,7 @@ class StencilTest extends TextureTestMixin(GPUTest) { depthWriteEnabled: false, depthCompare, stencilFront: testStencilState, - stencilBack: testStencilState, + stencilBack: testStencilState }; const testState2 = { @@ -58,30 +67,34 @@ class StencilTest extends TextureTestMixin(GPUTest) { depthWriteEnabled: false, depthCompare: 'always', stencilFront: stencilState, - stencilBack: stencilState, + stencilBack: stencilState }; const testStates = [ - // Draw the base triangle with stencil reference 1. This clears the stencil buffer to 1. - { state: baseState, color: kBaseColor, stencil: initialStencil }, - { state: testState, color: kRedStencilColor, stencil: kReferenceStencil }, - { state: testState2, color: kGreenStencilColor, stencil: _expectedStencil }, - ]; + // Draw the base triangle with stencil reference 1. This clears the stencil buffer to 1. + { state: baseState, color: kBaseColor, stencil: initialStencil }, + { state: testState, color: kRedStencilColor, stencil: kReferenceStencil }, + { state: testState2, color: kGreenStencilColor, stencil: _expectedStencil }]; this.runStencilStateTest(depthStencilFormat, testStates, kGreenStencilColor); } - checkStencilCompareFunction(depthStencilFormat, compareFunction, stencilRefValue, expectedColor) { + checkStencilCompareFunction( + depthStencilFormat, + compareFunction, + stencilRefValue, + expectedColor) + { const baseStencilState = { compare: 'always', failOp: 'keep', - passOp: 'replace', + passOp: 'replace' }; const stencilState = { compare: compareFunction, failOp: 'keep', - passOp: 'keep', + passOp: 'keep' }; const baseState = { @@ -89,7 +102,7 @@ class StencilTest extends TextureTestMixin(GPUTest) { depthWriteEnabled: false, depthCompare: 'always', stencilFront: baseStencilState, - stencilBack: baseStencilState, + stencilBack: baseStencilState }; const testState = { @@ -97,30 +110,29 @@ class StencilTest extends TextureTestMixin(GPUTest) { depthWriteEnabled: false, depthCompare: 'always', stencilFront: stencilState, - stencilBack: stencilState, + stencilBack: stencilState }; const testStates = [ - // Draw the base triangle with stencil reference 1. This clears the stencil buffer to 1. - { state: baseState, color: kBaseColor, stencil: 1 }, - { state: testState, color: kGreenStencilColor, stencil: stencilRefValue }, - ]; + // Draw the base triangle with stencil reference 1. This clears the stencil buffer to 1. + { state: baseState, color: kBaseColor, stencil: 1 }, + { state: testState, color: kGreenStencilColor, stencil: stencilRefValue }]; this.runStencilStateTest(depthStencilFormat, testStates, expectedColor); } runStencilStateTest( - depthStencilFormat, - testStates, - expectedColor, - isSingleEncoderMultiplePass = false - ) { + depthStencilFormat, + testStates, + expectedColor, + isSingleEncoderMultiplePass = false) + { const renderTargetFormat = 'rgba8unorm'; const renderTarget = this.trackForCleanup( this.device.createTexture({ format: renderTargetFormat, size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }) ); @@ -130,7 +142,7 @@ class StencilTest extends TextureTestMixin(GPUTest) { format: depthStencilFormat, sampleCount: 1, mipLevelCount: 1, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST }) ); @@ -140,20 +152,19 @@ class StencilTest extends TextureTestMixin(GPUTest) { depthLoadOp: hasDepth ? 'load' : undefined, depthStoreOp: hasDepth ? 'store' : undefined, stencilLoadOp: 'load', - stencilStoreOp: 'store', + stencilStoreOp: 'store' }; const encoder = this.device.createCommandEncoder(); let pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - storeOp: 'store', - loadOp: 'load', - }, - ], + { + view: renderTarget.createView(), + storeOp: 'store', + loadOp: 'load' + }], - depthStencilAttachment, + depthStencilAttachment }); if (isSingleEncoderMultiplePass) { @@ -166,14 +177,13 @@ class StencilTest extends TextureTestMixin(GPUTest) { if (isSingleEncoderMultiplePass) { pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: renderTarget.createView(), - storeOp: 'store', - loadOp: 'load', - }, - ], + { + view: renderTarget.createView(), + storeOp: 'store', + loadOp: 'load' + }], - depthStencilAttachment, + depthStencilAttachment }); } const testPipeline = this.createRenderPipelineForTest(test.state); @@ -185,7 +195,6 @@ class StencilTest extends TextureTestMixin(GPUTest) { 0, this.createBindGroupForTest(testPipeline.getBindGroupLayout(0), test.color) ); - pass.draw(1); if (isSingleEncoderMultiplePass) { @@ -202,9 +211,9 @@ class StencilTest extends TextureTestMixin(GPUTest) { R: expectedColor[0], G: expectedColor[1], B: expectedColor[2], - A: expectedColor[3], + A: expectedColor[3] }; - const expTexelView = TexelView.fromTexelsAsColors(renderTargetFormat, coords => expColor); + const expTexelView = TexelView.fromTexelsAsColors(renderTargetFormat, (_coords) => expColor); this.expectTexelViewComparisonIsOkInTexture({ texture: renderTarget }, expTexelView, [1, 1]); } @@ -218,9 +227,9 @@ class StencilTest extends TextureTestMixin(GPUTest) { fn main(@builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { targets: [{ format: 'rgba8unorm' }], @@ -233,12 +242,12 @@ class StencilTest extends TextureTestMixin(GPUTest) { @fragment fn main() -> @location(0) vec4 { return vec4(params.color); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, primitive: { topology: 'point-list' }, - depthStencil, + depthStencil }); } @@ -246,67 +255,67 @@ class StencilTest extends TextureTestMixin(GPUTest) { return this.device.createBindGroup({ layout, entries: [ - { - binding: 0, - resource: { - buffer: this.makeBufferWithContents(data, GPUBufferUsage.UNIFORM), - }, - }, - ], + { + binding: 0, + resource: { + buffer: this.makeBufferWithContents(data, GPUBufferUsage.UNIFORM) + } + }] + }); } } export const g = makeTestGroup(StencilTest); -g.test('stencil_compare_func') - .desc( - ` +g.test('stencil_compare_func'). +desc( + ` Tests that stencil comparison functions with the stencil reference value works as expected. ` - ) - .params(u => - u // - .combine('format', kStencilFormats) - .combineWithParams([ - { stencilCompare: 'always', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'always', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'always', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'equal', stencilRefValue: 0, _expectedColor: kBaseColor }, - { stencilCompare: 'equal', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'equal', stencilRefValue: 2, _expectedColor: kBaseColor }, - { stencilCompare: 'greater', stencilRefValue: 0, _expectedColor: kBaseColor }, - { stencilCompare: 'greater', stencilRefValue: 1, _expectedColor: kBaseColor }, - { stencilCompare: 'greater', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'greater-equal', stencilRefValue: 0, _expectedColor: kBaseColor }, - { stencilCompare: 'greater-equal', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'greater-equal', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'less', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'less', stencilRefValue: 1, _expectedColor: kBaseColor }, - { stencilCompare: 'less', stencilRefValue: 2, _expectedColor: kBaseColor }, - { stencilCompare: 'less-equal', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'less-equal', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'less-equal', stencilRefValue: 2, _expectedColor: kBaseColor }, - { stencilCompare: 'never', stencilRefValue: 0, _expectedColor: kBaseColor }, - { stencilCompare: 'never', stencilRefValue: 1, _expectedColor: kBaseColor }, - { stencilCompare: 'never', stencilRefValue: 2, _expectedColor: kBaseColor }, - { stencilCompare: 'not-equal', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, - { stencilCompare: 'not-equal', stencilRefValue: 1, _expectedColor: kBaseColor }, - { stencilCompare: 'not-equal', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { format, stencilCompare, stencilRefValue, _expectedColor } = t.params; +). +params((u) => +u // +.combine('format', kStencilFormats). +combineWithParams([ +{ stencilCompare: 'always', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'always', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'always', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'equal', stencilRefValue: 0, _expectedColor: kBaseColor }, +{ stencilCompare: 'equal', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'equal', stencilRefValue: 2, _expectedColor: kBaseColor }, +{ stencilCompare: 'greater', stencilRefValue: 0, _expectedColor: kBaseColor }, +{ stencilCompare: 'greater', stencilRefValue: 1, _expectedColor: kBaseColor }, +{ stencilCompare: 'greater', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'greater-equal', stencilRefValue: 0, _expectedColor: kBaseColor }, +{ stencilCompare: 'greater-equal', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'greater-equal', stencilRefValue: 2, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'less', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'less', stencilRefValue: 1, _expectedColor: kBaseColor }, +{ stencilCompare: 'less', stencilRefValue: 2, _expectedColor: kBaseColor }, +{ stencilCompare: 'less-equal', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'less-equal', stencilRefValue: 1, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'less-equal', stencilRefValue: 2, _expectedColor: kBaseColor }, +{ stencilCompare: 'never', stencilRefValue: 0, _expectedColor: kBaseColor }, +{ stencilCompare: 'never', stencilRefValue: 1, _expectedColor: kBaseColor }, +{ stencilCompare: 'never', stencilRefValue: 2, _expectedColor: kBaseColor }, +{ stencilCompare: 'not-equal', stencilRefValue: 0, _expectedColor: kGreenStencilColor }, +{ stencilCompare: 'not-equal', stencilRefValue: 1, _expectedColor: kBaseColor }, +{ stencilCompare: 'not-equal', stencilRefValue: 2, _expectedColor: kGreenStencilColor }] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { format, stencilCompare, stencilRefValue, _expectedColor } = t.params; - t.checkStencilCompareFunction(format, stencilCompare, stencilRefValue, _expectedColor); - }); + t.checkStencilCompareFunction(format, stencilCompare, stencilRefValue, _expectedColor); +}); -g.test('stencil_passOp_operation') - .desc( - ` +g.test('stencil_passOp_operation'). +desc( + ` Test that the stencil operation is executed on stencil pass. A triangle is drawn with the 'always' comparison function, so it should pass. Then, test that each pass stencil operation works with the given stencil values correctly as expected. For example, @@ -314,43 +323,43 @@ g.test('stencil_passOp_operation') - If the pass operation is 'replace', it replaces the initial stencil value with the reference stencil value. ` - ) - .params(u => - u // - .combine('format', kStencilFormats) - .combineWithParams([ - { passOp: 'keep', initialStencil: 1, _expectedStencil: 1 }, - { passOp: 'zero', initialStencil: 1, _expectedStencil: 0 }, - { passOp: 'replace', initialStencil: 1, _expectedStencil: 3 }, - { passOp: 'invert', initialStencil: 0xf0, _expectedStencil: 0x0f }, - { passOp: 'increment-clamp', initialStencil: 1, _expectedStencil: 2 }, - { passOp: 'increment-clamp', initialStencil: 0xff, _expectedStencil: 0xff }, - { passOp: 'increment-wrap', initialStencil: 1, _expectedStencil: 2 }, - { passOp: 'increment-wrap', initialStencil: 0xff, _expectedStencil: 0 }, - { passOp: 'decrement-clamp', initialStencil: 1, _expectedStencil: 0 }, - { passOp: 'decrement-clamp', initialStencil: 0, _expectedStencil: 0 }, - { passOp: 'decrement-wrap', initialStencil: 1, _expectedStencil: 0 }, - { passOp: 'decrement-wrap', initialStencil: 0, _expectedStencil: 0xff }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { format, passOp, initialStencil, _expectedStencil } = t.params; +). +params((u) => +u // +.combine('format', kStencilFormats). +combineWithParams([ +{ passOp: 'keep', initialStencil: 1, _expectedStencil: 1 }, +{ passOp: 'zero', initialStencil: 1, _expectedStencil: 0 }, +{ passOp: 'replace', initialStencil: 1, _expectedStencil: 3 }, +{ passOp: 'invert', initialStencil: 0xf0, _expectedStencil: 0x0f }, +{ passOp: 'increment-clamp', initialStencil: 1, _expectedStencil: 2 }, +{ passOp: 'increment-clamp', initialStencil: 0xff, _expectedStencil: 0xff }, +{ passOp: 'increment-wrap', initialStencil: 1, _expectedStencil: 2 }, +{ passOp: 'increment-wrap', initialStencil: 0xff, _expectedStencil: 0 }, +{ passOp: 'decrement-clamp', initialStencil: 1, _expectedStencil: 0 }, +{ passOp: 'decrement-clamp', initialStencil: 0, _expectedStencil: 0 }, +{ passOp: 'decrement-wrap', initialStencil: 1, _expectedStencil: 0 }, +{ passOp: 'decrement-wrap', initialStencil: 0, _expectedStencil: 0xff }] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { format, passOp, initialStencil, _expectedStencil } = t.params; - const stencilState = { - compare: 'always', - failOp: 'keep', - passOp, - }; + const stencilState = { + compare: 'always', + failOp: 'keep', + passOp + }; - t.checkStencilOperation(format, stencilState, initialStencil, _expectedStencil); - }); + t.checkStencilOperation(format, stencilState, initialStencil, _expectedStencil); +}); -g.test('stencil_failOp_operation') - .desc( - ` +g.test('stencil_failOp_operation'). +desc( + ` Test that the stencil operation is executed on stencil fail. A triangle is drawn with the 'never' comparison function, so it should fail. Then, test that each fail stencil operation works with the given stencil values correctly as expected. For example, @@ -358,47 +367,47 @@ g.test('stencil_failOp_operation') - If the fail operation is 'replace', it replaces the initial stencil value with the reference stencil value. ` - ) - .params(u => - u // - .combine('format', kStencilFormats) - .combineWithParams([ - { failOp: 'keep', initialStencil: 1, _expectedStencil: 1 }, - { failOp: 'zero', initialStencil: 1, _expectedStencil: 0 }, - { failOp: 'replace', initialStencil: 1, _expectedStencil: 3 }, - { failOp: 'invert', initialStencil: 0xf0, _expectedStencil: 0x0f }, - { failOp: 'increment-clamp', initialStencil: 1, _expectedStencil: 2 }, - { failOp: 'increment-clamp', initialStencil: 0xff, _expectedStencil: 0xff }, - { failOp: 'increment-wrap', initialStencil: 1, _expectedStencil: 2 }, - { failOp: 'increment-wrap', initialStencil: 0xff, _expectedStencil: 0 }, - { failOp: 'decrement-clamp', initialStencil: 1, _expectedStencil: 0 }, - { failOp: 'decrement-clamp', initialStencil: 0, _expectedStencil: 0 }, - { failOp: 'decrement-wrap', initialStencil: 2, _expectedStencil: 1 }, - { failOp: 'decrement-wrap', initialStencil: 1, _expectedStencil: 0 }, - { failOp: 'decrement-wrap', initialStencil: 0, _expectedStencil: 0xff }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { format, failOp, initialStencil, _expectedStencil } = t.params; +). +params((u) => +u // +.combine('format', kStencilFormats). +combineWithParams([ +{ failOp: 'keep', initialStencil: 1, _expectedStencil: 1 }, +{ failOp: 'zero', initialStencil: 1, _expectedStencil: 0 }, +{ failOp: 'replace', initialStencil: 1, _expectedStencil: 3 }, +{ failOp: 'invert', initialStencil: 0xf0, _expectedStencil: 0x0f }, +{ failOp: 'increment-clamp', initialStencil: 1, _expectedStencil: 2 }, +{ failOp: 'increment-clamp', initialStencil: 0xff, _expectedStencil: 0xff }, +{ failOp: 'increment-wrap', initialStencil: 1, _expectedStencil: 2 }, +{ failOp: 'increment-wrap', initialStencil: 0xff, _expectedStencil: 0 }, +{ failOp: 'decrement-clamp', initialStencil: 1, _expectedStencil: 0 }, +{ failOp: 'decrement-clamp', initialStencil: 0, _expectedStencil: 0 }, +{ failOp: 'decrement-wrap', initialStencil: 2, _expectedStencil: 1 }, +{ failOp: 'decrement-wrap', initialStencil: 1, _expectedStencil: 0 }, +{ failOp: 'decrement-wrap', initialStencil: 0, _expectedStencil: 0xff }] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { format, failOp, initialStencil, _expectedStencil } = t.params; - const stencilState = { - compare: 'never', - failOp, - passOp: 'keep', - }; + const stencilState = { + compare: 'never', + failOp, + passOp: 'keep' + }; - // Draw the base triangle with stencil reference 1. This clears the stencil buffer to 1. - // Always fails because the comparison never passes. Therefore red is never drawn, and the - // stencil contents may be updated according to `operation`. - t.checkStencilOperation(format, stencilState, initialStencil, _expectedStencil); - }); + // Draw the base triangle with stencil reference 1. This clears the stencil buffer to 1. + // Always fails because the comparison never passes. Therefore red is never drawn, and the + // stencil contents may be updated according to `operation`. + t.checkStencilOperation(format, stencilState, initialStencil, _expectedStencil); +}); -g.test('stencil_depthFailOp_operation') - .desc( - ` +g.test('stencil_depthFailOp_operation'). +desc( + ` Test that the stencil operation is executed on depthCompare fail. A triangle is drawn with the 'never' depthCompare, so it should fail the depth test. Then, test that each 'depthFailOp' stencil operation works with the given stencil values correctly as expected. For example, @@ -406,53 +415,53 @@ g.test('stencil_depthFailOp_operation') - If the depthFailOp operation is 'replace', it replaces the initial stencil value with the reference stencil value. ` - ) - .params(u => - u // - .combine( - 'format', - kDepthStencilFormats.filter(format => { - const info = kTextureFormatInfo[format]; - return info.depth && info.stencil; - }) - ) - .combineWithParams([ - { depthFailOp: 'keep', initialStencil: 1, _expectedStencil: 1 }, - { depthFailOp: 'zero', initialStencil: 1, _expectedStencil: 0 }, - { depthFailOp: 'replace', initialStencil: 1, _expectedStencil: 3 }, - { depthFailOp: 'invert', initialStencil: 0xf0, _expectedStencil: 0x0f }, - { depthFailOp: 'increment-clamp', initialStencil: 1, _expectedStencil: 2 }, - { depthFailOp: 'increment-clamp', initialStencil: 0xff, _expectedStencil: 0xff }, - { depthFailOp: 'increment-wrap', initialStencil: 1, _expectedStencil: 2 }, - { depthFailOp: 'increment-wrap', initialStencil: 0xff, _expectedStencil: 0 }, - { depthFailOp: 'decrement-clamp', initialStencil: 1, _expectedStencil: 0 }, - { depthFailOp: 'decrement-clamp', initialStencil: 0, _expectedStencil: 0 }, - { depthFailOp: 'decrement-wrap', initialStencil: 2, _expectedStencil: 1 }, - { depthFailOp: 'decrement-wrap', initialStencil: 1, _expectedStencil: 0 }, - { depthFailOp: 'decrement-wrap', initialStencil: 0, _expectedStencil: 0xff }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +). +params((u) => +u // +.combine( + 'format', + kDepthStencilFormats.filter((format) => { + const info = kTextureFormatInfo[format]; + return info.depth && info.stencil; }) - .fn(t => { - const { format, depthFailOp, initialStencil, _expectedStencil } = t.params; +). +combineWithParams([ +{ depthFailOp: 'keep', initialStencil: 1, _expectedStencil: 1 }, +{ depthFailOp: 'zero', initialStencil: 1, _expectedStencil: 0 }, +{ depthFailOp: 'replace', initialStencil: 1, _expectedStencil: 3 }, +{ depthFailOp: 'invert', initialStencil: 0xf0, _expectedStencil: 0x0f }, +{ depthFailOp: 'increment-clamp', initialStencil: 1, _expectedStencil: 2 }, +{ depthFailOp: 'increment-clamp', initialStencil: 0xff, _expectedStencil: 0xff }, +{ depthFailOp: 'increment-wrap', initialStencil: 1, _expectedStencil: 2 }, +{ depthFailOp: 'increment-wrap', initialStencil: 0xff, _expectedStencil: 0 }, +{ depthFailOp: 'decrement-clamp', initialStencil: 1, _expectedStencil: 0 }, +{ depthFailOp: 'decrement-clamp', initialStencil: 0, _expectedStencil: 0 }, +{ depthFailOp: 'decrement-wrap', initialStencil: 2, _expectedStencil: 1 }, +{ depthFailOp: 'decrement-wrap', initialStencil: 1, _expectedStencil: 0 }, +{ depthFailOp: 'decrement-wrap', initialStencil: 0, _expectedStencil: 0xff }] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { format, depthFailOp, initialStencil, _expectedStencil } = t.params; - const stencilState = { - compare: 'always', - failOp: 'keep', - passOp: 'keep', - depthFailOp, - }; + const stencilState = { + compare: 'always', + failOp: 'keep', + passOp: 'keep', + depthFailOp + }; - // Call checkStencilOperation function with enabling the depthTest to test that the depthFailOp - // stencil operation works as expected. - t.checkStencilOperation(format, stencilState, initialStencil, _expectedStencil, 'never'); - }); + // Call checkStencilOperation function with enabling the depthTest to test that the depthFailOp + // stencil operation works as expected. + t.checkStencilOperation(format, stencilState, initialStencil, _expectedStencil, 'never'); +}); -g.test('stencil_read_write_mask') - .desc( - ` +g.test('stencil_read_write_mask'). +desc( + ` Tests that setting a stencil read/write masks work. Basically, The base triangle sets 3 to the stencil, and then try to draw a triangle with different stencil values. - In case that 'write' mask is 1, @@ -467,109 +476,109 @@ g.test('stencil_read_write_mask') * If the stencil of the triangle is 2, it draws because 'base stencil(3) & read mask(2) == triangle stencil(2)'. ` - ) - .params(u => - u // - .combine('format', kStencilFormats) - .combineWithParams([ - { maskType: 'write', stencilRefValue: 1, _expectedColor: kRedStencilColor }, - { maskType: 'write', stencilRefValue: 2, _expectedColor: kBaseColor }, - { maskType: 'read', stencilRefValue: 1, _expectedColor: kBaseColor }, - { maskType: 'read', stencilRefValue: 2, _expectedColor: kRedStencilColor }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { format, maskType, stencilRefValue, _expectedColor } = t.params; +). +params((u) => +u // +.combine('format', kStencilFormats). +combineWithParams([ +{ maskType: 'write', stencilRefValue: 1, _expectedColor: kRedStencilColor }, +{ maskType: 'write', stencilRefValue: 2, _expectedColor: kBaseColor }, +{ maskType: 'read', stencilRefValue: 1, _expectedColor: kBaseColor }, +{ maskType: 'read', stencilRefValue: 2, _expectedColor: kRedStencilColor }] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { format, maskType, stencilRefValue, _expectedColor } = t.params; - const baseStencilState = { - compare: 'always', - failOp: 'keep', - passOp: 'replace', - }; + const baseStencilState = { + compare: 'always', + failOp: 'keep', + passOp: 'replace' + }; - const stencilState = { - compare: 'equal', - failOp: 'keep', - passOp: 'keep', - }; + const stencilState = { + compare: 'equal', + failOp: 'keep', + passOp: 'keep' + }; - const baseState = { - format, - depthWriteEnabled: false, - depthCompare: 'always', - stencilFront: baseStencilState, - stencilBack: baseStencilState, - stencilReadMask: 0xff, - stencilWriteMask: maskType === 'write' ? 0x1 : 0xff, - }; + const baseState = { + format, + depthWriteEnabled: false, + depthCompare: 'always', + stencilFront: baseStencilState, + stencilBack: baseStencilState, + stencilReadMask: 0xff, + stencilWriteMask: maskType === 'write' ? 0x1 : 0xff + }; - const testState = { - format, - depthWriteEnabled: false, - depthCompare: 'always', - stencilFront: stencilState, - stencilBack: stencilState, - stencilReadMask: maskType === 'read' ? 0x2 : 0xff, - stencilWriteMask: 0xff, - }; + const testState = { + format, + depthWriteEnabled: false, + depthCompare: 'always', + stencilFront: stencilState, + stencilBack: stencilState, + stencilReadMask: maskType === 'read' ? 0x2 : 0xff, + stencilWriteMask: 0xff + }; - const testStates = [ - // Draw the base triangle with stencil reference 3. This clears the stencil buffer to 3. - { state: baseState, color: kBaseColor, stencil: 3 }, - { state: testState, color: kRedStencilColor, stencil: stencilRefValue }, - ]; + const testStates = [ + // Draw the base triangle with stencil reference 3. This clears the stencil buffer to 3. + { state: baseState, color: kBaseColor, stencil: 3 }, + { state: testState, color: kRedStencilColor, stencil: stencilRefValue }]; - t.runStencilStateTest(format, testStates, _expectedColor); - }); -g.test('stencil_reference_initialized') - .desc('Test that stencil reference is initialized as zero for new render pass.') - .params(u => u.combine('format', kStencilFormats)) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { format } = t.params; + t.runStencilStateTest(format, testStates, _expectedColor); +}); - const baseStencilState = { - compare: 'always', - passOp: 'replace', - }; +g.test('stencil_reference_initialized'). +desc('Test that stencil reference is initialized as zero for new render pass.'). +params((u) => u.combine('format', kStencilFormats)). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { format } = t.params; - const testStencilState = { - compare: 'equal', - passOp: 'keep', - }; + const baseStencilState = { + compare: 'always', + passOp: 'replace' + }; - const hasDepth = !!kTextureFormatInfo[format].depth; + const testStencilState = { + compare: 'equal', + passOp: 'keep' + }; - const baseState = { - format, - depthWriteEnabled: hasDepth, - depthCompare: 'always', - stencilFront: baseStencilState, - stencilBack: baseStencilState, - }; + const hasDepth = !!kTextureFormatInfo[format].depth; - const testState = { - format, - depthWriteEnabled: hasDepth, - depthCompare: 'always', - stencilFront: testStencilState, - stencilBack: testStencilState, - }; + const baseState = { + format, + depthWriteEnabled: hasDepth, + depthCompare: 'always', + stencilFront: baseStencilState, + stencilBack: baseStencilState + }; - // First pass sets the stencil to 0x1, the second pass sets the stencil to its default - // value, and the third pass tests if the stencil is zero. - const testStates = [ - { state: baseState, color: kBaseColor, stencil: 0x1 }, - { state: baseState, color: kRedStencilColor, stencil: undefined }, - { state: testState, color: kGreenStencilColor, stencil: 0x0 }, - ]; + const testState = { + format, + depthWriteEnabled: hasDepth, + depthCompare: 'always', + stencilFront: testStencilState, + stencilBack: testStencilState + }; - // The third draw should pass the stencil test since the second pass set it to default zero. - t.runStencilStateTest(format, testStates, kGreenStencilColor, true); - }); + // First pass sets the stencil to 0x1, the second pass sets the stencil to its default + // value, and the third pass tests if the stencil is zero. + const testStates = [ + { state: baseState, color: kBaseColor, stencil: 0x1 }, + { state: baseState, color: kRedStencilColor, stencil: undefined }, + { state: testState, color: kGreenStencilColor, stencil: 0x0 }]; + + + // The third draw should pass the stencil test since the second pass set it to default zero. + t.runStencilStateTest(format, testStates, kGreenStencilColor, true); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/buffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/buffer.spec.js index 0008f0dafea..fa7cbdbbbab 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/buffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/buffer.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { unreachable } from '../../../../common/util/util.js'; -import { GPUConst } from '../../../constants.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { makeTestGroup } from '../../../../common/framework/test_group.js';import { unreachable } from '../../../../common/util/util.js';import { GPUConst } from '../../../constants.js'; import { GPUTest } from '../../../gpu_test.js'; import { getTextureCopyLayout } from '../../../util/texture/layout.js'; + export const description = ` Test uninitialized buffers are initialized to zero when read (or read-written, e.g. with depth write or atomics). @@ -17,10 +16,10 @@ Note that: const kMapModeOptions = [GPUConst.MapMode.READ, GPUConst.MapMode.WRITE]; const kBufferUsagesForMappedAtCreationTests = [ - GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, - GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.MAP_WRITE, - GPUConst.BufferUsage.COPY_SRC, -]; +GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, +GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.MAP_WRITE, +GPUConst.BufferUsage.COPY_SRC]; + class F extends GPUTest { GetBufferUsageFromMapMode(mapMode) { @@ -35,41 +34,50 @@ class F extends GPUTest { } } - CheckGPUBufferContent(buffer, bufferUsage, expectedData) { + CheckGPUBufferContent( + buffer, + bufferUsage, + expectedData) + { const mappable = bufferUsage & GPUBufferUsage.MAP_READ; this.expectGPUBufferValuesEqual(buffer, expectedData, 0, { method: mappable ? 'map' : 'copy' }); } - TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize) { + TestBufferZeroInitInBindGroup( + computeShaderModule, + buffer, + bufferOffset, + boundBufferSize) + { const computePipeline = this.device.createComputePipeline({ layout: 'auto', compute: { module: computeShaderModule, - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const outputTexture = this.device.createTexture({ format: 'rgba8unorm', size: [1, 1, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING }); this.trackForCleanup(outputTexture); const bindGroup = this.device.createBindGroup({ layout: computePipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: { - buffer, - offset: bufferOffset, - size: boundBufferSize, - }, - }, - { - binding: 1, - resource: outputTexture.createView(), - }, - ], + { + binding: 0, + resource: { + buffer, + offset: bufferOffset, + size: boundBufferSize + } + }, + { + binding: 1, + resource: outputTexture.createView() + }] + }); const encoder = this.device.createCommandEncoder(); @@ -83,12 +91,15 @@ class F extends GPUTest { this.CheckBufferAndOutputTexture(buffer, boundBufferSize + bufferOffset, outputTexture); } - CreateRenderPipelineForTest(vertexShaderModule, testVertexBuffer) { + CreateRenderPipelineForTest( + vertexShaderModule, + testVertexBuffer) + { const renderPipelineDescriptor = { layout: 'auto', vertex: { module: vertexShaderModule, - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ @@ -96,51 +107,55 @@ class F extends GPUTest { @fragment fn main(@location(0) i_color : vec4) -> @location(0) vec4 { return i_color; - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, primitive: { - topology: 'point-list', - }, + topology: 'point-list' + } }; if (testVertexBuffer) { renderPipelineDescriptor.vertex.buffers = [ - { - arrayStride: 16, - attributes: [{ format: 'float32x4', offset: 0, shaderLocation: 0 }], - }, - ]; + { + arrayStride: 16, + attributes: [{ format: 'float32x4', offset: 0, shaderLocation: 0 }] + }]; + } return this.device.createRenderPipeline(renderPipelineDescriptor); } - RecordInitializeTextureColor(encoder, texture, color) { + RecordInitializeTextureColor( + encoder, + texture, + color) + { const renderPass = encoder.beginRenderPass({ colorAttachments: [ - { - view: texture.createView(), - clearValue: color, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: texture.createView(), + clearValue: color, + loadOp: 'clear', + storeOp: 'store' + }] + }); renderPass.end(); } CheckBufferAndOutputTexture( - buffer, - bufferSize, - outputTexture, - outputTextureSize = [1, 1, 1], - outputTextureColor = { R: 0.0, G: 1.0, B: 0.0, A: 1.0 } - ) { + buffer, + bufferSize, + outputTexture, + outputTextureSize = [1, 1, 1], + outputTextureColor = { R: 0.0, G: 1.0, B: 0.0, A: 1.0 }) + { this.expectSingleColor(outputTexture, 'rgba8unorm', { size: outputTextureSize, - exp: outputTextureColor, + exp: outputTextureColor }); const expectedBufferData = new Uint8Array(bufferSize); @@ -150,364 +165,362 @@ class F extends GPUTest { export const g = makeTestGroup(F); -g.test('partial_write_buffer') - .desc( - `Verify when we upload data to a part of a buffer with writeBuffer() just after the creation of +g.test('partial_write_buffer'). +desc( + `Verify when we upload data to a part of a buffer with writeBuffer() just after the creation of the buffer, the remaining part of that buffer will be initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('offset', [0, 8, -12])) - .fn(t => { - const { offset } = t.params; - const bufferSize = 32; - const appliedOffset = offset >= 0 ? offset : bufferSize + offset; +). +paramsSubcasesOnly((u) => u.combine('offset', [0, 8, -12])). +fn((t) => { + const { offset } = t.params; + const bufferSize = 32; + const appliedOffset = offset >= 0 ? offset : bufferSize + offset; - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(buffer); - - const copySize = 12; - const writeData = new Uint8Array(copySize); - const expectedData = new Uint8Array(bufferSize); - for (let i = 0; i < copySize; ++i) { - expectedData[appliedOffset + i] = writeData[i] = i + 1; - } - t.queue.writeBuffer(buffer, appliedOffset, writeData, 0); - - t.expectGPUBufferValuesEqual(buffer, expectedData); + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); + t.trackForCleanup(buffer); -g.test('map_whole_buffer') - .desc( - `Verify when we map the whole range of a mappable GPUBuffer to a typed array buffer just after + const copySize = 12; + const writeData = new Uint8Array(copySize); + const expectedData = new Uint8Array(bufferSize); + for (let i = 0; i < copySize; ++i) { + expectedData[appliedOffset + i] = writeData[i] = i + 1; + } + t.queue.writeBuffer(buffer, appliedOffset, writeData, 0); + + t.expectGPUBufferValuesEqual(buffer, expectedData); +}); + +g.test('map_whole_buffer'). +desc( + `Verify when we map the whole range of a mappable GPUBuffer to a typed array buffer just after creating the GPUBuffer, the contents of both the typed array buffer and the GPUBuffer itself have already been initialized to 0.` - ) - .params(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; +). +params((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; - const bufferSize = 32; - const bufferUsage = t.GetBufferUsageFromMapMode(mapMode); - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: bufferUsage, - }); - t.trackForCleanup(buffer); - - await buffer.mapAsync(mapMode); - const readData = new Uint8Array(buffer.getMappedRange()); - for (let i = 0; i < bufferSize; ++i) { - t.expect(readData[i] === 0); - } - buffer.unmap(); - - const expectedData = new Uint8Array(bufferSize); - t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); + const bufferSize = 32; + const bufferUsage = t.GetBufferUsageFromMapMode(mapMode); + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: bufferUsage }); + t.trackForCleanup(buffer); -g.test('map_partial_buffer') - .desc( - `Verify when we map a subrange of a mappable GPUBuffer to a typed array buffer just after the + await buffer.mapAsync(mapMode); + const readData = new Uint8Array(buffer.getMappedRange()); + for (let i = 0; i < bufferSize; ++i) { + t.expect(readData[i] === 0); + } + buffer.unmap(); + + const expectedData = new Uint8Array(bufferSize); + t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); +}); + +g.test('map_partial_buffer'). +desc( + `Verify when we map a subrange of a mappable GPUBuffer to a typed array buffer just after the creation of the GPUBuffer, the contents of both the typed array buffer and the GPUBuffer have already been initialized to 0.` - ) - .params(u => u.combine('mapMode', kMapModeOptions).beginSubcases().combine('offset', [0, 8, -16])) - .fn(async t => { - const { mapMode, offset } = t.params; - const bufferSize = 32; - const appliedOffset = offset >= 0 ? offset : bufferSize + offset; +). +params((u) => u.combine('mapMode', kMapModeOptions).beginSubcases().combine('offset', [0, 8, -16])). +fn(async (t) => { + const { mapMode, offset } = t.params; + const bufferSize = 32; + const appliedOffset = offset >= 0 ? offset : bufferSize + offset; - const bufferUsage = t.GetBufferUsageFromMapMode(mapMode); - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: bufferUsage, - }); - t.trackForCleanup(buffer); - - const expectedData = new Uint8Array(bufferSize); - { - const mapSize = 16; - await buffer.mapAsync(mapMode, appliedOffset, mapSize); - const mappedData = new Uint8Array(buffer.getMappedRange(appliedOffset, mapSize)); - for (let i = 0; i < mapSize; ++i) { - t.expect(mappedData[i] === 0); - if (mapMode === GPUMapMode.WRITE) { - mappedData[i] = expectedData[appliedOffset + i] = i + 1; - } - } - buffer.unmap(); - } - - t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); + const bufferUsage = t.GetBufferUsageFromMapMode(mapMode); + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: bufferUsage }); + t.trackForCleanup(buffer); -g.test('mapped_at_creation_whole_buffer') - .desc( - `Verify when we call getMappedRange() at the whole range of a GPUBuffer created with -mappedAtCreation === true just after its creation, the contents of both the returned typed -array buffer of getMappedRange() and the GPUBuffer itself have all been initialized to 0.` - ) - .params(u => u.combine('bufferUsage', kBufferUsagesForMappedAtCreationTests)) - .fn(t => { - const { bufferUsage } = t.params; - - const bufferSize = 32; - const buffer = t.device.createBuffer({ - mappedAtCreation: true, - size: bufferSize, - usage: bufferUsage, - }); - t.trackForCleanup(buffer); - - const mapped = new Uint8Array(buffer.getMappedRange()); - for (let i = 0; i < bufferSize; ++i) { - t.expect(mapped[i] === 0); + const expectedData = new Uint8Array(bufferSize); + { + const mapSize = 16; + await buffer.mapAsync(mapMode, appliedOffset, mapSize); + const mappedData = new Uint8Array(buffer.getMappedRange(appliedOffset, mapSize)); + for (let i = 0; i < mapSize; ++i) { + t.expect(mappedData[i] === 0); + if (mapMode === GPUMapMode.WRITE) { + mappedData[i] = expectedData[appliedOffset + i] = i + 1; + } } buffer.unmap(); + } - const expectedData = new Uint8Array(bufferSize); - t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); - }); + t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); +}); -g.test('mapped_at_creation_partial_buffer') - .desc( - `Verify when we call getMappedRange() at a subrange of a GPUBuffer created with +g.test('mapped_at_creation_whole_buffer'). +desc( + `Verify when we call getMappedRange() at the whole range of a GPUBuffer created with mappedAtCreation === true just after its creation, the contents of both the returned typed array buffer of getMappedRange() and the GPUBuffer itself have all been initialized to 0.` - ) - .params(u => - u - .combine('bufferUsage', kBufferUsagesForMappedAtCreationTests) - .beginSubcases() - .combine('offset', [0, 8, -16]) - ) - .fn(t => { - const { bufferUsage, offset } = t.params; - const bufferSize = 32; - const appliedOffset = offset >= 0 ? offset : bufferSize + offset; +). +params((u) => u.combine('bufferUsage', kBufferUsagesForMappedAtCreationTests)). +fn((t) => { + const { bufferUsage } = t.params; - const buffer = t.device.createBuffer({ - mappedAtCreation: true, - size: bufferSize, - usage: bufferUsage, - }); - t.trackForCleanup(buffer); - - const expectedData = new Uint8Array(bufferSize); - { - const mappedSize = 12; - const mapped = new Uint8Array(buffer.getMappedRange(appliedOffset, mappedSize)); - for (let i = 0; i < mappedSize; ++i) { - t.expect(mapped[i] === 0); - if (!(bufferUsage & GPUBufferUsage.MAP_READ)) { - mapped[i] = expectedData[appliedOffset + i] = i + 1; - } - } - buffer.unmap(); - } - - t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); + const bufferSize = 32; + const buffer = t.device.createBuffer({ + mappedAtCreation: true, + size: bufferSize, + usage: bufferUsage }); + t.trackForCleanup(buffer); -g.test('copy_buffer_to_buffer_copy_source') - .desc( - `Verify when the first usage of a GPUBuffer is being used as the source buffer of + const mapped = new Uint8Array(buffer.getMappedRange()); + for (let i = 0; i < bufferSize; ++i) { + t.expect(mapped[i] === 0); + } + buffer.unmap(); + + const expectedData = new Uint8Array(bufferSize); + t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); +}); + +g.test('mapped_at_creation_partial_buffer'). +desc( + `Verify when we call getMappedRange() at a subrange of a GPUBuffer created with +mappedAtCreation === true just after its creation, the contents of both the returned typed +array buffer of getMappedRange() and the GPUBuffer itself have all been initialized to 0.` +). +params((u) => +u. +combine('bufferUsage', kBufferUsagesForMappedAtCreationTests). +beginSubcases(). +combine('offset', [0, 8, -16]) +). +fn((t) => { + const { bufferUsage, offset } = t.params; + const bufferSize = 32; + const appliedOffset = offset >= 0 ? offset : bufferSize + offset; + + const buffer = t.device.createBuffer({ + mappedAtCreation: true, + size: bufferSize, + usage: bufferUsage + }); + t.trackForCleanup(buffer); + + const expectedData = new Uint8Array(bufferSize); + { + const mappedSize = 12; + const mapped = new Uint8Array(buffer.getMappedRange(appliedOffset, mappedSize)); + for (let i = 0; i < mappedSize; ++i) { + t.expect(mapped[i] === 0); + if (!(bufferUsage & GPUBufferUsage.MAP_READ)) { + mapped[i] = expectedData[appliedOffset + i] = i + 1; + } + } + buffer.unmap(); + } + + t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); +}); + +g.test('copy_buffer_to_buffer_copy_source'). +desc( + `Verify when the first usage of a GPUBuffer is being used as the source buffer of CopyBufferToBuffer(), the contents of the GPUBuffer have already been initialized to 0.` - ) - .fn(t => { - const bufferSize = 32; - const bufferUsage = GPUBufferUsage.COPY_SRC; - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: bufferUsage, - }); - t.trackForCleanup(buffer); - - const expectedData = new Uint8Array(bufferSize); - // copyBufferToBuffer() is called inside t.CheckGPUBufferContent(). - t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); +). +fn((t) => { + const bufferSize = 32; + const bufferUsage = GPUBufferUsage.COPY_SRC; + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: bufferUsage }); + t.trackForCleanup(buffer); -g.test('copy_buffer_to_texture') - .desc( - `Verify when the first usage of a GPUBuffer is being used as the source buffer of + const expectedData = new Uint8Array(bufferSize); + // copyBufferToBuffer() is called inside t.CheckGPUBufferContent(). + t.CheckGPUBufferContent(buffer, bufferUsage, expectedData); +}); + +g.test('copy_buffer_to_texture'). +desc( + `Verify when the first usage of a GPUBuffer is being used as the source buffer of CopyBufferToTexture(), the contents of the GPUBuffer have already been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 8])) - .fn(t => { - const { bufferOffset } = t.params; - const textureSize = [8, 8, 1]; - const dstTextureFormat = 'rgba8unorm'; +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 8])). +fn((t) => { + const { bufferOffset } = t.params; + const textureSize = [8, 8, 1]; + const dstTextureFormat = 'rgba8unorm'; - const dstTexture = t.device.createTexture({ - size: textureSize, - format: dstTextureFormat, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - t.trackForCleanup(dstTexture); - const layout = getTextureCopyLayout(dstTextureFormat, '2d', textureSize); - const srcBufferSize = layout.byteLength + bufferOffset; - const srcBufferUsage = GPUBufferUsage.COPY_SRC; - const srcBuffer = t.device.createBuffer({ - size: srcBufferSize, - usage: srcBufferUsage, - }); - t.trackForCleanup(srcBuffer); + const dstTexture = t.device.createTexture({ + size: textureSize, + format: dstTextureFormat, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); + t.trackForCleanup(dstTexture); + const layout = getTextureCopyLayout(dstTextureFormat, '2d', textureSize); + const srcBufferSize = layout.byteLength + bufferOffset; + const srcBufferUsage = GPUBufferUsage.COPY_SRC; + const srcBuffer = t.device.createBuffer({ + size: srcBufferSize, + usage: srcBufferUsage + }); + t.trackForCleanup(srcBuffer); - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToTexture( + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToTexture( + { + buffer: srcBuffer, + offset: bufferOffset, + bytesPerRow: layout.bytesPerRow, + rowsPerImage: layout.rowsPerImage + }, + { texture: dstTexture }, + textureSize + ); + t.queue.submit([encoder.finish()]); + + t.CheckBufferAndOutputTexture(srcBuffer, srcBufferSize, dstTexture, textureSize, { + R: 0.0, + G: 0.0, + B: 0.0, + A: 0.0 + }); +}); + +g.test('resolve_query_set_to_partial_buffer'). +desc( + `Verify when we resolve a query set into a GPUBuffer just after creating that GPUBuffer, the +remaining part of it will be initialized to 0.` +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 256])). +fn((t) => { + const { bufferOffset } = t.params; + const bufferSize = bufferOffset + 8; + const bufferUsage = GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE; + const dstBuffer = t.device.createBuffer({ + size: bufferSize, + usage: bufferUsage + }); + t.trackForCleanup(dstBuffer); + + const querySet = t.device.createQuerySet({ type: 'occlusion', count: 1 }); + const encoder = t.device.createCommandEncoder(); + encoder.resolveQuerySet(querySet, 0, 1, dstBuffer, bufferOffset); + t.queue.submit([encoder.finish()]); + + const expectedBufferData = new Uint8Array(bufferSize); + t.CheckGPUBufferContent(dstBuffer, bufferUsage, expectedBufferData); +}); + +g.test('copy_texture_to_partial_buffer'). +desc( + `Verify when we copy from a GPUTexture into a GPUBuffer just after creating that GPUBuffer, the +remaining part of it will be initialized to 0.` +). +paramsSubcasesOnly((u) => +u. +combine('bufferOffset', [0, 8, -16]). +combine('arrayLayerCount', [1, 3]). +combine('copyMipLevel', [0, 2]). +combine('rowsPerImage', [16, 20]). +filter((t) => { + // We don't need to test the copies that will cover the whole GPUBuffer. + return !(t.bufferOffset === 0 && t.rowsPerImage === 16); +}) +). +fn((t) => { + const { bufferOffset, arrayLayerCount, copyMipLevel, rowsPerImage } = t.params; + const srcTextureFormat = 'r8uint'; + const textureSize = [32, 16, arrayLayerCount]; + + const srcTexture = t.device.createTexture({ + format: srcTextureFormat, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + size: textureSize, + mipLevelCount: copyMipLevel + 1 + }); + t.trackForCleanup(srcTexture); + + const bytesPerRow = 256; + const layout = getTextureCopyLayout(srcTextureFormat, '2d', textureSize, { + mipLevel: copyMipLevel, + bytesPerRow, + rowsPerImage + }); + + const dstBufferSize = layout.byteLength + Math.abs(bufferOffset); + const dstBuffer = t.device.createBuffer({ + size: dstBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(dstBuffer); + + const encoder = t.device.createCommandEncoder(); + + // Initialize srcTexture + for (let layer = 0; layer < arrayLayerCount; ++layer) { + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ { - buffer: srcBuffer, - offset: bufferOffset, - bytesPerRow: layout.bytesPerRow, - rowsPerImage: layout.rowsPerImage, - }, - { texture: dstTexture }, - textureSize - ); + view: srcTexture.createView({ + baseArrayLayer: layer, + arrayLayerCount: 1, + baseMipLevel: copyMipLevel + }), + clearValue: { r: layer + 1, g: 0, b: 0, a: 0 }, + loadOp: 'clear', + storeOp: 'store' + }] - t.queue.submit([encoder.finish()]); - - t.CheckBufferAndOutputTexture(srcBuffer, srcBufferSize, dstTexture, textureSize, { - R: 0.0, - G: 0.0, - B: 0.0, - A: 0.0, }); - }); + renderPass.end(); + } -g.test('resolve_query_set_to_partial_buffer') - .desc( - `Verify when we resolve a query set into a GPUBuffer just after creating that GPUBuffer, the -remaining part of it will be initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 256])) - .fn(t => { - const { bufferOffset } = t.params; - const bufferSize = bufferOffset + 8; - const bufferUsage = GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE; - const dstBuffer = t.device.createBuffer({ - size: bufferSize, - usage: bufferUsage, - }); - t.trackForCleanup(dstBuffer); + // Do texture-to-buffer copy + const appliedOffset = Math.max(bufferOffset, 0); + encoder.copyTextureToBuffer( + { texture: srcTexture, mipLevel: copyMipLevel }, + { buffer: dstBuffer, offset: appliedOffset, bytesPerRow, rowsPerImage }, + layout.mipSize + ); + t.queue.submit([encoder.finish()]); - const querySet = t.device.createQuerySet({ type: 'occlusion', count: 1 }); - const encoder = t.device.createCommandEncoder(); - encoder.resolveQuerySet(querySet, 0, 1, dstBuffer, bufferOffset); - t.queue.submit([encoder.finish()]); - - const expectedBufferData = new Uint8Array(bufferSize); - t.CheckGPUBufferContent(dstBuffer, bufferUsage, expectedBufferData); - }); - -g.test('copy_texture_to_partial_buffer') - .desc( - `Verify when we copy from a GPUTexture into a GPUBuffer just after creating that GPUBuffer, the -remaining part of it will be initialized to 0.` - ) - .paramsSubcasesOnly(u => - u - .combine('bufferOffset', [0, 8, -16]) - .combine('arrayLayerCount', [1, 3]) - .combine('copyMipLevel', [0, 2]) - .combine('rowsPerImage', [16, 20]) - .filter(t => { - // We don't need to test the copies that will cover the whole GPUBuffer. - return !(t.bufferOffset === 0 && t.rowsPerImage === 16); - }) - ) - .fn(t => { - const { bufferOffset, arrayLayerCount, copyMipLevel, rowsPerImage } = t.params; - const srcTextureFormat = 'r8uint'; - const textureSize = [32, 16, arrayLayerCount]; - - const srcTexture = t.device.createTexture({ - format: srcTextureFormat, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - size: textureSize, - mipLevelCount: copyMipLevel + 1, - }); - t.trackForCleanup(srcTexture); - - const bytesPerRow = 256; - const layout = getTextureCopyLayout(srcTextureFormat, '2d', textureSize, { - mipLevel: copyMipLevel, - bytesPerRow, - rowsPerImage, - }); - - const dstBufferSize = layout.byteLength + Math.abs(bufferOffset); - const dstBuffer = t.device.createBuffer({ - size: dstBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(dstBuffer); - - const encoder = t.device.createCommandEncoder(); - - // Initialize srcTexture - for (let layer = 0; layer < arrayLayerCount; ++layer) { - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: srcTexture.createView({ - baseArrayLayer: layer, - arrayLayerCount: 1, - baseMipLevel: copyMipLevel, - }), - clearValue: { r: layer + 1, g: 0, b: 0, a: 0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.end(); - } - - // Do texture-to-buffer copy - const appliedOffset = Math.max(bufferOffset, 0); - encoder.copyTextureToBuffer( - { texture: srcTexture, mipLevel: copyMipLevel }, - { buffer: dstBuffer, offset: appliedOffset, bytesPerRow, rowsPerImage }, - layout.mipSize - ); - - t.queue.submit([encoder.finish()]); - - // Check if the contents of the destination buffer are what we expect. - const expectedData = new Uint8Array(dstBufferSize); - for (let layer = 0; layer < arrayLayerCount; ++layer) { - for (let y = 0; y < layout.mipSize[1]; ++y) { - for (let x = 0; x < layout.mipSize[0]; ++x) { - expectedData[appliedOffset + layer * bytesPerRow * rowsPerImage + y * bytesPerRow + x] = - layer + 1; - } + // Check if the contents of the destination buffer are what we expect. + const expectedData = new Uint8Array(dstBufferSize); + for (let layer = 0; layer < arrayLayerCount; ++layer) { + for (let y = 0; y < layout.mipSize[1]; ++y) { + for (let x = 0; x < layout.mipSize[0]; ++x) { + expectedData[appliedOffset + layer * bytesPerRow * rowsPerImage + y * bytesPerRow + x] = + layer + 1; } } - t.expectGPUBufferValuesEqual(dstBuffer, expectedData); - }); + } + t.expectGPUBufferValuesEqual(dstBuffer, expectedData); +}); -g.test('uniform_buffer') - .desc( - `Verify when we use a GPUBuffer as a uniform buffer just after the creation of that GPUBuffer, +g.test('uniform_buffer'). +desc( + `Verify when we use a GPUBuffer as a uniform buffer just after the creation of that GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 256])) - .fn(t => { - const { bufferOffset } = t.params; +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 256])). +fn((t) => { + const { bufferOffset } = t.params; - const boundBufferSize = 16; - const buffer = t.device.createBuffer({ - size: bufferOffset + boundBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.UNIFORM, - }); - t.trackForCleanup(buffer); + const boundBufferSize = 16; + const buffer = t.device.createBuffer({ + size: bufferOffset + boundBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.UNIFORM + }); + t.trackForCleanup(buffer); - const computeShaderModule = t.device.createShaderModule({ - code: ` + const computeShaderModule = t.device.createShaderModule({ + code: ` struct UBO { value : vec4 }; @@ -520,30 +533,30 @@ g.test('uniform_buffer') } else { textureStore(outImage, vec2(0, 0), vec4(1.0, 0.0, 0.0, 1.0)); } - }`, - }); - - // Verify the whole range of the buffer has been initialized to 0 in a compute shader. - t.TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize); + }` }); -g.test('readonly_storage_buffer') - .desc( - `Verify when we use a GPUBuffer as a read-only storage buffer just after the creation of that - GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 256])) - .fn(t => { - const { bufferOffset } = t.params; - const boundBufferSize = 16; - const buffer = t.device.createBuffer({ - size: bufferOffset + boundBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }); - t.trackForCleanup(buffer); + // Verify the whole range of the buffer has been initialized to 0 in a compute shader. + t.TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize); +}); - const computeShaderModule = t.device.createShaderModule({ - code: ` +g.test('readonly_storage_buffer'). +desc( + `Verify when we use a GPUBuffer as a read-only storage buffer just after the creation of that + GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 256])). +fn((t) => { + const { bufferOffset } = t.params; + const boundBufferSize = 16; + const buffer = t.device.createBuffer({ + size: bufferOffset + boundBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }); + t.trackForCleanup(buffer); + + const computeShaderModule = t.device.createShaderModule({ + code: ` struct SSBO { value : vec4 }; @@ -556,30 +569,30 @@ g.test('readonly_storage_buffer') } else { textureStore(outImage, vec2(0, 0), vec4(1.0, 0.0, 0.0, 1.0)); } - }`, - }); - - // Verify the whole range of the buffer has been initialized to 0 in a compute shader. - t.TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize); + }` }); -g.test('storage_buffer') - .desc( - `Verify when we use a GPUBuffer as a storage buffer just after the creation of that - GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 256])) - .fn(t => { - const { bufferOffset } = t.params; - const boundBufferSize = 16; - const buffer = t.device.createBuffer({ - size: bufferOffset + boundBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }); - t.trackForCleanup(buffer); + // Verify the whole range of the buffer has been initialized to 0 in a compute shader. + t.TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize); +}); - const computeShaderModule = t.device.createShaderModule({ - code: ` +g.test('storage_buffer'). +desc( + `Verify when we use a GPUBuffer as a storage buffer just after the creation of that + GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 256])). +fn((t) => { + const { bufferOffset } = t.params; + const boundBufferSize = 16; + const buffer = t.device.createBuffer({ + size: bufferOffset + boundBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }); + t.trackForCleanup(buffer); + + const computeShaderModule = t.device.createShaderModule({ + code: ` struct SSBO { value : vec4 }; @@ -592,25 +605,25 @@ g.test('storage_buffer') } else { textureStore(outImage, vec2(0, 0), vec4(1.0, 0.0, 0.0, 1.0)); } - }`, - }); - - // Verify the whole range of the buffer has been initialized to 0 in a compute shader. - t.TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize); + }` }); -g.test('vertex_buffer') - .desc( - `Verify when we use a GPUBuffer as a vertex buffer just after the creation of that - GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 16])) - .fn(t => { - const { bufferOffset } = t.params; + // Verify the whole range of the buffer has been initialized to 0 in a compute shader. + t.TestBufferZeroInitInBindGroup(computeShaderModule, buffer, bufferOffset, boundBufferSize); +}); - const renderPipeline = t.CreateRenderPipelineForTest( - t.device.createShaderModule({ - code: ` +g.test('vertex_buffer'). +desc( + `Verify when we use a GPUBuffer as a vertex buffer just after the creation of that + GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 16])). +fn((t) => { + const { bufferOffset } = t.params; + + const renderPipeline = t.CreateRenderPipelineForTest( + t.device.createShaderModule({ + code: ` struct VertexOut { @location(0) color : vec4, @builtin(position) position : vec4, @@ -625,57 +638,57 @@ g.test('vertex_buffer') } output.position = vec4(0.0, 0.0, 0.0, 1.0); return output; - }`, - }), - true - ); + }` + }), + true + ); - const bufferSize = 16 + bufferOffset; - const vertexBuffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(vertexBuffer); - - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [1, 1, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - t.trackForCleanup(outputTexture); - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setVertexBuffer(0, vertexBuffer, bufferOffset); - renderPass.setPipeline(renderPipeline); - renderPass.draw(1); - renderPass.end(); - t.queue.submit([encoder.finish()]); - - t.CheckBufferAndOutputTexture(vertexBuffer, bufferSize, outputTexture); + const bufferSize = 16 + bufferOffset; + const vertexBuffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_SRC }); + t.trackForCleanup(vertexBuffer); -g.test('index_buffer') - .desc( - `Verify when we use a GPUBuffer as an index buffer just after the creation of that + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [1, 1, 1], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + t.trackForCleanup(outputTexture); + + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setVertexBuffer(0, vertexBuffer, bufferOffset); + renderPass.setPipeline(renderPipeline); + renderPass.draw(1); + renderPass.end(); + t.queue.submit([encoder.finish()]); + + t.CheckBufferAndOutputTexture(vertexBuffer, bufferSize, outputTexture); +}); + +g.test('index_buffer'). +desc( + `Verify when we use a GPUBuffer as an index buffer just after the creation of that GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 16])) - .fn(t => { - const { bufferOffset } = t.params; +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 16])). +fn((t) => { + const { bufferOffset } = t.params; - const renderPipeline = t.CreateRenderPipelineForTest( - t.device.createShaderModule({ - code: ` + const renderPipeline = t.CreateRenderPipelineForTest( + t.device.createShaderModule({ + code: ` struct VertexOut { @location(0) color : vec4, @builtin(position) position : vec4, @@ -691,61 +704,61 @@ GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` } output.position = vec4(0.0, 0.0, 0.0, 1.0); return output; - }`, - }), - false - ); + }` + }), + false + ); - // The size of GPUBuffer must be at least 4. - const bufferSize = 4 + bufferOffset; - const indexBuffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(indexBuffer); - - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [1, 1, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - t.trackForCleanup(outputTexture); - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(renderPipeline); - renderPass.setIndexBuffer(indexBuffer, 'uint16', bufferOffset, 4); - renderPass.drawIndexed(1); - renderPass.end(); - t.queue.submit([encoder.finish()]); - - t.CheckBufferAndOutputTexture(indexBuffer, bufferSize, outputTexture); + // The size of GPUBuffer must be at least 4. + const bufferSize = 4 + bufferOffset; + const indexBuffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_SRC }); + t.trackForCleanup(indexBuffer); -g.test('indirect_buffer_for_draw_indirect') - .desc( - `Verify when we use a GPUBuffer as an indirect buffer for drawIndirect() or + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [1, 1, 1], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + t.trackForCleanup(outputTexture); + + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(renderPipeline); + renderPass.setIndexBuffer(indexBuffer, 'uint16', bufferOffset, 4); + renderPass.drawIndexed(1); + renderPass.end(); + t.queue.submit([encoder.finish()]); + + t.CheckBufferAndOutputTexture(indexBuffer, bufferSize, outputTexture); +}); + +g.test('indirect_buffer_for_draw_indirect'). +desc( + `Verify when we use a GPUBuffer as an indirect buffer for drawIndirect() or drawIndexedIndirect() just after the creation of that GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .params(u => - u.combine('test_indexed_draw', [true, false]).beginSubcases().combine('bufferOffset', [0, 16]) - ) - .fn(t => { - const { test_indexed_draw, bufferOffset } = t.params; +). +params((u) => +u.combine('test_indexed_draw', [true, false]).beginSubcases().combine('bufferOffset', [0, 16]) +). +fn((t) => { + const { test_indexed_draw, bufferOffset } = t.params; - const renderPipeline = t.CreateRenderPipelineForTest( - t.device.createShaderModule({ - code: ` + const renderPipeline = t.CreateRenderPipelineForTest( + t.device.createShaderModule({ + code: ` struct VertexOut { @location(0) color : vec4, @builtin(position) position : vec4, @@ -756,131 +769,131 @@ have been initialized to 0.` output.color = vec4(1.0, 0.0, 0.0, 1.0); output.position = vec4(0.0, 0.0, 0.0, 1.0); return output; - }`, - }), - false - ); + }` + }), + false + ); - const kDrawIndirectParametersSize = 16; - const kDrawIndexedIndirectParametersSize = 20; - const bufferSize = - Math.max(kDrawIndirectParametersSize, kDrawIndexedIndirectParametersSize) + bufferOffset; - const indirectBuffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.INDIRECT, - }); - t.trackForCleanup(indirectBuffer); - - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [1, 1, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - t.trackForCleanup(outputTexture); - - // Initialize outputTexture to green. - const encoder = t.device.createCommandEncoder(); - t.RecordInitializeTextureColor(encoder, outputTexture, { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }); - - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: outputTexture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(renderPipeline); - - let indexBuffer = undefined; - if (test_indexed_draw) { - indexBuffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.INDEX, - }); - t.trackForCleanup(indexBuffer); - renderPass.setIndexBuffer(indexBuffer, 'uint16'); - renderPass.drawIndexedIndirect(indirectBuffer, bufferOffset); - } else { - renderPass.drawIndirect(indirectBuffer, bufferOffset); - } - - renderPass.end(); - t.queue.submit([encoder.finish()]); - - // The indirect buffer should be lazily cleared to 0, so we actually draw nothing and the color - // attachment will keep its original color (green) after we end the render pass. - t.CheckBufferAndOutputTexture(indirectBuffer, bufferSize, outputTexture); + const kDrawIndirectParametersSize = 16; + const kDrawIndexedIndirectParametersSize = 20; + const bufferSize = + Math.max(kDrawIndirectParametersSize, kDrawIndexedIndirectParametersSize) + bufferOffset; + const indirectBuffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.INDIRECT }); + t.trackForCleanup(indirectBuffer); -g.test('indirect_buffer_for_dispatch_indirect') - .desc( - `Verify when we use a GPUBuffer as an indirect buffer for dispatchWorkgroupsIndirect() just + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [1, 1, 1], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + t.trackForCleanup(outputTexture); + + // Initialize outputTexture to green. + const encoder = t.device.createCommandEncoder(); + t.RecordInitializeTextureColor(encoder, outputTexture, { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }); + + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: outputTexture.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPass.setPipeline(renderPipeline); + + let indexBuffer = undefined; + if (test_indexed_draw) { + indexBuffer = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.INDEX + }); + t.trackForCleanup(indexBuffer); + renderPass.setIndexBuffer(indexBuffer, 'uint16'); + renderPass.drawIndexedIndirect(indirectBuffer, bufferOffset); + } else { + renderPass.drawIndirect(indirectBuffer, bufferOffset); + } + + renderPass.end(); + t.queue.submit([encoder.finish()]); + + // The indirect buffer should be lazily cleared to 0, so we actually draw nothing and the color + // attachment will keep its original color (green) after we end the render pass. + t.CheckBufferAndOutputTexture(indirectBuffer, bufferSize, outputTexture); +}); + +g.test('indirect_buffer_for_dispatch_indirect'). +desc( + `Verify when we use a GPUBuffer as an indirect buffer for dispatchWorkgroupsIndirect() just after the creation of that GPUBuffer, all the contents in that GPUBuffer have been initialized to 0.` - ) - .paramsSubcasesOnly(u => u.combine('bufferOffset', [0, 16])) - .fn(t => { - const { bufferOffset } = t.params; +). +paramsSubcasesOnly((u) => u.combine('bufferOffset', [0, 16])). +fn((t) => { + const { bufferOffset } = t.params; - const computePipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const computePipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` @group(0) @binding(0) var outImage : texture_storage_2d; @compute @workgroup_size(1) fn main() { textureStore(outImage, vec2(0, 0), vec4(1.0, 0.0, 0.0, 1.0)); - }`, - }), - entryPoint: 'main', - }, - }); - - const kDispatchIndirectParametersSize = 12; - const bufferSize = kDispatchIndirectParametersSize + bufferOffset; - const indirectBuffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.INDIRECT, - }); - t.trackForCleanup(indirectBuffer); - - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [1, 1, 1], - usage: - GPUTextureUsage.COPY_SRC | - GPUTextureUsage.RENDER_ATTACHMENT | - GPUTextureUsage.STORAGE_BINDING, - }); - t.trackForCleanup(outputTexture); - - // Initialize outputTexture to green. - const encoder = t.device.createCommandEncoder(); - t.RecordInitializeTextureColor(encoder, outputTexture, { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }); - - const bindGroup = t.device.createBindGroup({ - layout: computePipeline.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: outputTexture.createView(), - }, - ], - }); - - // The indirect buffer should be lazily cleared to 0, so we actually don't execute the compute - // shader and the output texture should keep its original color (green). - const computePass = encoder.beginComputePass(); - computePass.setBindGroup(0, bindGroup); - computePass.setPipeline(computePipeline); - computePass.dispatchWorkgroupsIndirect(indirectBuffer, bufferOffset); - computePass.end(); - t.queue.submit([encoder.finish()]); - - // The indirect buffer should be lazily cleared to 0, so we actually draw nothing and the color - // attachment will keep its original color (green) after we end the compute pass. - t.CheckBufferAndOutputTexture(indirectBuffer, bufferSize, outputTexture); + }` + }), + entryPoint: 'main' + } }); + + const kDispatchIndirectParametersSize = 12; + const bufferSize = kDispatchIndirectParametersSize + bufferOffset; + const indirectBuffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.INDIRECT + }); + t.trackForCleanup(indirectBuffer); + + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [1, 1, 1], + usage: + GPUTextureUsage.COPY_SRC | + GPUTextureUsage.RENDER_ATTACHMENT | + GPUTextureUsage.STORAGE_BINDING + }); + t.trackForCleanup(outputTexture); + + // Initialize outputTexture to green. + const encoder = t.device.createCommandEncoder(); + t.RecordInitializeTextureColor(encoder, outputTexture, { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }); + + const bindGroup = t.device.createBindGroup({ + layout: computePipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: outputTexture.createView() + }] + + }); + + // The indirect buffer should be lazily cleared to 0, so we actually don't execute the compute + // shader and the output texture should keep its original color (green). + const computePass = encoder.beginComputePass(); + computePass.setBindGroup(0, bindGroup); + computePass.setPipeline(computePipeline); + computePass.dispatchWorkgroupsIndirect(indirectBuffer, bufferOffset); + computePass.end(); + t.queue.submit([encoder.finish()]); + + // The indirect buffer should be lazily cleared to 0, so we actually draw nothing and the color + // attachment will keep its original color (green) after we end the compute pass. + t.CheckBufferAndOutputTexture(indirectBuffer, bufferSize, outputTexture); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_copy.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_copy.js index 0f363d25a9b..40254673063 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_copy.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_copy.js @@ -1,10 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../../../format_info.js'; -import { virtualMipSize } from '../../../../util/texture/base.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../../../../common/util/util.js';import { kTextureFormatInfo } from '../../../../format_info.js';import { virtualMipSize } from '../../../../util/texture/base.js'; -export const checkContentsByBufferCopy = (t, params, texture, state, subresourceRange) => { + +export const checkContentsByBufferCopy = ( +t, +params, +texture, +state, +subresourceRange) => +{ for (const { level: mipLevel, layer } of subresourceRange.each()) { assert(params.format in kTextureFormatInfo); const format = params.format; @@ -14,12 +19,18 @@ export const checkContentsByBufferCopy = (t, params, texture, state, subresource dimension: params.dimension, slice: params.dimension === '2d' ? layer : 0, layout: { mipLevel, aspect: params.aspect }, - exp: t.stateToTexelComponents[state], + exp: t.stateToTexelComponents[state] }); } }; -export const checkContentsByTextureCopy = (t, params, texture, state, subresourceRange) => { +export const checkContentsByTextureCopy = ( +t, +params, +texture, +state, +subresourceRange) => +{ for (const { level, layer } of subresourceRange.each()) { assert(params.format in kTextureFormatInfo); const format = params.format; @@ -34,7 +45,7 @@ export const checkContentsByTextureCopy = (t, params, texture, state, subresourc dimension: params.dimension, size: [width, height, depth], format: params.format, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC }); t.trackForCleanup(dst); @@ -44,13 +55,12 @@ export const checkContentsByTextureCopy = (t, params, texture, state, subresourc { texture: dst, mipLevel: 0 }, { width, height, depthOrArrayLayers: depth } ); - t.queue.submit([commandEncoder.finish()]); t.expectSingleColor(dst, format, { size: [width, height, depth], exp: t.stateToTexelComponents[state], - layout: { mipLevel: 0, aspect: params.aspect }, + layout: { mipLevel: 0, aspect: params.aspect } }); } -}; +}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_ds_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_ds_test.js index 84d63563ec1..3a88f02a6ad 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_ds_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_ds_test.js @@ -1,9 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../../../format_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../../../../common/util/util.js';import { kTextureFormatInfo } from '../../../../format_info.js'; import { virtualMipSize } from '../../../../util/texture/base.js'; + function makeFullscreenVertexModule(device) { return device.createShaderModule({ code: ` @@ -16,16 +16,21 @@ function makeFullscreenVertexModule(device) { vec2(-1.0, 1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); } - `, + ` }); } -function getDepthTestEqualPipeline(t, format, sampleCount, expected) { +function getDepthTestEqualPipeline( +t, +format, +sampleCount, +expected) +{ return t.device.createRenderPipeline({ layout: 'auto', vertex: { entryPoint: 'main', - module: makeFullscreenVertexModule(t.device), + module: makeFullscreenVertexModule(t.device) }, fragment: { entryPoint: 'main', @@ -43,26 +48,30 @@ function getDepthTestEqualPipeline(t, format, sampleCount, expected) { output.outSuccess = 1.0; return output; } - `, + ` }), - targets: [{ format: 'r8unorm' }], + targets: [{ format: 'r8unorm' }] }, depthStencil: { format, depthCompare: 'equal', - depthWriteEnabled: false, + depthWriteEnabled: false }, primitive: { topology: 'triangle-list' }, - multisample: { count: sampleCount }, + multisample: { count: sampleCount } }); } -function getStencilTestEqualPipeline(t, format, sampleCount) { +function getStencilTestEqualPipeline( +t, +format, +sampleCount) +{ return t.device.createRenderPipeline({ layout: 'auto', vertex: { entryPoint: 'main', - module: makeFullscreenVertexModule(t.device), + module: makeFullscreenVertexModule(t.device) }, fragment: { entryPoint: 'main', @@ -72,23 +81,30 @@ function getStencilTestEqualPipeline(t, format, sampleCount) { fn main() -> @location(0) f32 { return 1.0; } - `, + ` }), - targets: [{ format: 'r8unorm' }], + targets: [{ format: 'r8unorm' }] }, depthStencil: { depthWriteEnabled: false, depthCompare: 'always', format, stencilFront: { compare: 'equal' }, - stencilBack: { compare: 'equal' }, + stencilBack: { compare: 'equal' } }, primitive: { topology: 'triangle-list' }, - multisample: { count: sampleCount }, + multisample: { count: sampleCount } }); } -const checkContents = (type, t, params, texture, state, subresourceRange) => { +const checkContents = ( +type, +t, +params, +texture, +state, +subresourceRange) => +{ const formatInfo = kTextureFormatInfo[params.format]; assert(params.dimension === '2d'); @@ -107,7 +123,7 @@ const checkContents = (type, t, params, texture, state, subresourceRange) => { size: [width, height, 1], format: 'r8unorm', usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - sampleCount: params.sampleCount, + sampleCount: params.sampleCount }); let resolveTexture = undefined; @@ -116,7 +132,7 @@ const checkContents = (type, t, params, texture, state, subresourceRange) => { resolveTexture = t.device.createTexture({ size: [width, height, 1], format: 'r8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }); resolveTarget = resolveTexture.createView(); } @@ -126,44 +142,42 @@ const checkContents = (type, t, params, texture, state, subresourceRange) => { const pass = commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: renderTexture.createView(), - resolveTarget, - clearValue: [0, 0, 0, 0], - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: renderTexture.createView(), + resolveTarget, + clearValue: [0, 0, 0, 0], + loadOp: 'load', + storeOp: 'store' + }], depthStencilAttachment: { view: texture.createView(viewDescriptor), depthStoreOp: formatInfo.depth ? 'store' : undefined, depthLoadOp: formatInfo.depth ? 'load' : undefined, stencilStoreOp: formatInfo.stencil ? 'store' : undefined, - stencilLoadOp: formatInfo.stencil ? 'load' : undefined, - }, + stencilLoadOp: formatInfo.stencil ? 'load' : undefined + } }); switch (type) { - case 'depth': { - const expectedDepth = t.stateToTexelComponents[state].Depth; - assert(expectedDepth !== undefined); + case 'depth':{ + const expectedDepth = t.stateToTexelComponents[state].Depth; + assert(expectedDepth !== undefined); - pass.setPipeline( - getDepthTestEqualPipeline(t, params.format, params.sampleCount, expectedDepth) - ); + pass.setPipeline( + getDepthTestEqualPipeline(t, params.format, params.sampleCount, expectedDepth) + ); + break; + } - break; - } + case 'stencil':{ + const expectedStencil = t.stateToTexelComponents[state].Stencil; + assert(expectedStencil !== undefined); - case 'stencil': { - const expectedStencil = t.stateToTexelComponents[state].Stencil; - assert(expectedStencil !== undefined); - - pass.setPipeline(getStencilTestEqualPipeline(t, params.format, params.sampleCount)); - pass.setStencilReference(expectedStencil); - break; - } + pass.setPipeline(getStencilTestEqualPipeline(t, params.format, params.sampleCount)); + pass.setStencilReference(expectedStencil); + break; + } } pass.draw(3); @@ -174,11 +188,13 @@ const checkContents = (type, t, params, texture, state, subresourceRange) => { t.expectSingleColor(resolveTexture || renderTexture, 'r8unorm', { size: [width, height, 1], - exp: { R: 1 }, + exp: { R: 1 } }); } }; -export const checkContentsByDepthTest = (...args) => checkContents('depth', ...args); +export const checkContentsByDepthTest = (...args) => +checkContents('depth', ...args); -export const checkContentsByStencilTest = (...args) => checkContents('stencil', ...args); +export const checkContentsByStencilTest = (...args) => +checkContents('stencil', ...args); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_sampling.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_sampling.js index 476b689315f..3ab4d42916c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_sampling.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/check_texture/by_sampling.js @@ -1,15 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../../../format_info.js'; -import { virtualMipSize } from '../../../../util/texture/base.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../../../../common/util/util.js';import { kTextureFormatInfo } from '../../../../format_info.js';import { virtualMipSize } from '../../../../util/texture/base.js'; import { kTexelRepresentationInfo, getSingleDataType, - getComponentReadbackTraits, -} from '../../../../util/texture/texel_data.js'; + getComponentReadbackTraits } from +'../../../../util/texture/texel_data.js'; -export const checkContentsBySampling = (t, params, texture, state, subresourceRange) => { + +export const checkContentsBySampling = ( +t, +params, +texture, +state, +subresourceRange) => +{ assert(params.format in kTextureFormatInfo); const format = params.format; const rep = kTexelRepresentationInfo[format]; @@ -32,20 +37,26 @@ export const checkContentsBySampling = (t, params, texture, state, subresourceRa // For multi-component textures, generates ex.) // .rgba[i], .bgra[i], .rgb[i] const indexExpression = - componentCount === 1 - ? componentOrder[0].toLowerCase() - : componentOrder.map(c => c.toLowerCase()).join('') + '[i]'; + componentCount === 1 ? + componentOrder[0].toLowerCase() : + componentOrder.map((c) => c.toLowerCase()).join('') + '[i]'; - const _xd = '_' + params.dimension; + const viewDimension = + t.isCompatibility && params.dimension === '2d' && texture.depthOrArrayLayers > 1 ? + '2d-array' : + params.dimension; + const _xd = `_${viewDimension.replace('-', '_')}`; const _multisampled = params.sampleCount > 1 ? '_multisampled' : ''; const texelIndexExpression = - params.dimension === '2d' - ? 'vec2(GlobalInvocationID.xy)' - : params.dimension === '3d' - ? 'vec3(GlobalInvocationID.xyz)' - : params.dimension === '1d' - ? 'i32(GlobalInvocationID.x)' - : unreachable(); + viewDimension === '2d' ? + 'vec2(GlobalInvocationID.xy)' : + viewDimension === '2d-array' ? + 'vec2(GlobalInvocationID.xy), constants.layer' : + viewDimension === '3d' ? + 'vec3(GlobalInvocationID.xyz)' : + viewDimension === '1d' ? + 'i32(GlobalInvocationID.x)' : + unreachable(); const computePipeline = t.device.createComputePipeline({ layout: 'auto', compute: { @@ -53,7 +64,8 @@ export const checkContentsBySampling = (t, params, texture, state, subresourceRa module: t.device.createShaderModule({ code: ` struct Constants { - level : i32 + level : i32, + layer : i32, }; @group(0) @binding(0) var constants : Constants; @@ -77,50 +89,54 @@ export const checkContentsBySampling = (t, params, texture, state, subresourceRa for (var i : u32 = 0u; i < ${componentCount}u; i = i + 1u) { result.values[flatIndex + i] = texel.${indexExpression}; } - }`, - }), - }, + }` + }) + } }); for (const layer of layers) { const ubo = t.device.createBuffer({ mappedAtCreation: true, - size: 4, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + size: 8, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST }); - new Int32Array(ubo.getMappedRange(), 0, 1)[0] = level; + new Int32Array(ubo.getMappedRange()).set([level, layer]); ubo.unmap(); const byteLength = - width * height * depth * ReadbackTypedArray.BYTES_PER_ELEMENT * rep.componentOrder.length; + width * height * depth * ReadbackTypedArray.BYTES_PER_ELEMENT * rep.componentOrder.length; const resultBuffer = t.device.createBuffer({ size: byteLength, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); t.trackForCleanup(resultBuffer); + const viewDescriptor = { + ...(!t.isCompatibility && { + baseArrayLayer: layer, + arrayLayerCount: 1 + }), + dimension: viewDimension + }; + const bindGroup = t.device.createBindGroup({ layout: computePipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: { buffer: ubo }, - }, - { - binding: 1, - resource: texture.createView({ - baseArrayLayer: layer, - arrayLayerCount: 1, - dimension: params.dimension, - }), - }, - { - binding: 3, - resource: { - buffer: resultBuffer, - }, - }, - ], + { + binding: 0, + resource: { buffer: ubo } + }, + { + binding: 1, + resource: texture.createView(viewDescriptor) + }, + { + binding: 3, + resource: { + buffer: resultBuffer + } + }] + }); const commandEncoder = t.device.createCommandEncoder(); @@ -149,4 +165,4 @@ export const checkContentsBySampling = (t, params, texture, state, subresourceRa t.expectGPUBufferValuesEqual(resultBuffer, expectedValues); } } -}; +}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/texture_zero.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/texture_zero.spec.js index b2a4c0d2b77..d7e83601c1b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/texture_zero.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/resource_init/texture_zero.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test uninitialized textures are initialized to zero when read. TODO: @@ -10,7 +10,11 @@ TODO: `; // MAINTENANCE_TODO: This is a test file, it probably shouldn't export anything. // Everything that's exported should be moved to another file. -import { kUnitCaseParamsBuilder } from '../../../../common/framework/params_builder.js'; + +import { + kUnitCaseParamsBuilder } from + +'../../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert, unreachable } from '../../../../common/util/util.js'; import { kTextureAspects, kTextureDimensions } from '../../../capability_info.js'; @@ -18,46 +22,42 @@ import { GPUConst } from '../../../constants.js'; import { kTextureFormatInfo, kUncompressedTextureFormats, - textureDimensionAndFormatCompatible, -} from '../../../format_info.js'; + textureDimensionAndFormatCompatible } from + + +'../../../format_info.js'; import { GPUTest } from '../../../gpu_test.js'; import { virtualMipSize } from '../../../util/texture/base.js'; import { createTextureUploadBuffer } from '../../../util/texture/layout.js'; import { SubresourceRange } from '../../../util/texture/subresource.js'; import { kTexelRepresentationInfo } from '../../../util/texture/texel_data.js'; -export let UninitializeMethod; +export let UninitializeMethod = /*#__PURE__*/function (UninitializeMethod) {UninitializeMethod["Creation"] = "Creation";UninitializeMethod["StoreOpClear"] = "StoreOpClear";return UninitializeMethod;}({}); // The texture was rendered to with GPUStoreOp "clear" -(function (UninitializeMethod) { - UninitializeMethod['Creation'] = 'Creation'; - UninitializeMethod['StoreOpClear'] = 'StoreOpClear'; -})(UninitializeMethod || (UninitializeMethod = {})); + const kUninitializeMethods = Object.keys(UninitializeMethod); -export let ReadMethod; +export let ReadMethod = /*#__PURE__*/function (ReadMethod) {ReadMethod["Sample"] = "Sample";ReadMethod["CopyToBuffer"] = "CopyToBuffer";ReadMethod["CopyToTexture"] = "CopyToTexture";ReadMethod["DepthTest"] = "DepthTest";ReadMethod["StencilTest"] = "StencilTest";ReadMethod["ColorBlending"] = "ColorBlending";ReadMethod["Storage"] = "Storage";return ReadMethod;}({}); + + + + + // Read the texture as a storage texture + // Test with these mip level counts -(function (ReadMethod) { - ReadMethod['Sample'] = 'Sample'; - ReadMethod['CopyToBuffer'] = 'CopyToBuffer'; - ReadMethod['CopyToTexture'] = 'CopyToTexture'; - ReadMethod['DepthTest'] = 'DepthTest'; - ReadMethod['StencilTest'] = 'StencilTest'; - ReadMethod['ColorBlending'] = 'ColorBlending'; - ReadMethod['Storage'] = 'Storage'; -})(ReadMethod || (ReadMethod = {})); + const kMipLevelCounts = [1, 5]; // For each mip level count, define the mip ranges to leave uninitialized. const kUninitializedMipRangesToTest = { 1: [{ begin: 0, end: 1 }], // Test the only mip 5: [ - { begin: 0, end: 2 }, - { begin: 3, end: 4 }, - ], + { begin: 0, end: 2 }, + { begin: 3, end: 4 }] // Test a range and a single mip }; @@ -66,13 +66,13 @@ const kSampleCounts = [1, 4]; // Test with these layer counts. + // For each layer count, define the layers to leave uninitialized. const kUninitializedLayerRangesToTest = { 1: [{ begin: 0, end: 1 }], // Test the only layer 7: [ - { begin: 2, end: 4 }, - { begin: 6, end: 7 }, - ], + { begin: 2, end: 4 }, + { begin: 6, end: 7 }] // Test a range and a single layer }; @@ -80,30 +80,30 @@ const kUninitializedLayerRangesToTest = { // the data for each value may have a different representation. These enums are converted to a // representation such that their values can be compared. ex.) An integer is needed to upload to an // unsigned normalized format, but its value is read as a float in the shader. -export let InitializedState; +export let InitializedState = /*#__PURE__*/function (InitializedState) {InitializedState[InitializedState["Canary"] = 0] = "Canary";InitializedState[InitializedState["Zero"] = 1] = "Zero";return InitializedState;}({}); // We check that uninitialized subresources are in this state when read back. -(function (InitializedState) { - InitializedState[(InitializedState['Canary'] = 0)] = 'Canary'; - InitializedState[(InitializedState['Zero'] = 1)] = 'Zero'; -})(InitializedState || (InitializedState = {})); + const initializedStateAsFloat = { [InitializedState.Zero]: 0, - [InitializedState.Canary]: 1, + [InitializedState.Canary]: 1 }; const initializedStateAsUint = { [InitializedState.Zero]: 0, - [InitializedState.Canary]: 1, + [InitializedState.Canary]: 1 }; const initializedStateAsSint = { [InitializedState.Zero]: 0, - [InitializedState.Canary]: -1, + [InitializedState.Canary]: -1 }; -function initializedStateAsColor(state, format) { +function initializedStateAsColor( +state, +format) +{ let value; if (format.indexOf('uint') !== -1) { value = initializedStateAsUint[state]; @@ -117,15 +117,20 @@ function initializedStateAsColor(state, format) { const initializedStateAsDepth = { [InitializedState.Zero]: 0, - [InitializedState.Canary]: 0.8, + [InitializedState.Canary]: 0.8 }; const initializedStateAsStencil = { [InitializedState.Zero]: 0, - [InitializedState.Canary]: 42, + [InitializedState.Canary]: 42 }; -function getRequiredTextureUsage(format, sampleCount, uninitializeMethod, readMethod) { +function getRequiredTextureUsage( +format, +sampleCount, +uninitializeMethod, +readMethod) +{ let usage = GPUConst.TextureUsage.COPY_DST; switch (uninitializeMethod) { @@ -175,11 +180,14 @@ function getRequiredTextureUsage(format, sampleCount, uninitializeMethod, readMe } export class TextureZeroInitTest extends GPUTest { + + + constructor(sharedState, rec, params) { super(sharedState, rec, params); this.p = params; - const stateToTexelComponents = state => { + const stateToTexelComponents = (state) => { const [R, G, B, A] = initializedStateAsColor(state, this.p.format); return { R, @@ -187,13 +195,13 @@ export class TextureZeroInitTest extends GPUTest { B, A, Depth: initializedStateAsDepth[state], - Stencil: initializedStateAsStencil[state], + Stencil: initializedStateAsStencil[state] }; }; this.stateToTexelComponents = { [InitializedState.Zero]: stateToTexelComponents(InitializedState.Zero), - [InitializedState.Canary]: stateToTexelComponents(InitializedState.Canary), + [InitializedState.Canary]: stateToTexelComponents(InitializedState.Canary) }; } @@ -252,17 +260,20 @@ export class TextureZeroInitTest extends GPUTest { if (!uninitialized[level][layer]) { yield new SubresourceRange({ mipRange: { begin: level, count: 1 }, - layerRange: { begin: layer, count: 1 }, + layerRange: { begin: layer, count: 1 } }); } } } } - *generateTextureViewDescriptorsForRendering(aspect, subresourceRange) { + *generateTextureViewDescriptorsForRendering( + aspect, + subresourceRange) + { const viewDescriptor = { dimension: '2d', - aspect, + aspect }; if (subresourceRange === undefined) { @@ -275,12 +286,16 @@ export class TextureZeroInitTest extends GPUTest { baseMipLevel: level, mipLevelCount: 1, baseArrayLayer: layer, - arrayLayerCount: 1, + arrayLayerCount: 1 }; } } - initializeWithStoreOp(state, texture, subresourceRange) { + initializeWithStoreOp( + state, + texture, + subresourceRange) + { const commandEncoder = this.device.createCommandEncoder(); commandEncoder.pushDebugGroup('initializeWithStoreOp'); @@ -289,21 +304,21 @@ export class TextureZeroInitTest extends GPUTest { subresourceRange )) { if (kTextureFormatInfo[this.p.format].color) { - commandEncoder - .beginRenderPass({ - colorAttachments: [ - { - view: texture.createView(viewDescriptor), - storeOp: 'store', - clearValue: initializedStateAsColor(state, this.p.format), - loadOp: 'clear', - }, - ], - }) - .end(); + commandEncoder. + beginRenderPass({ + colorAttachments: [ + { + view: texture.createView(viewDescriptor), + storeOp: 'store', + clearValue: initializedStateAsColor(state, this.p.format), + loadOp: 'clear' + }] + + }). + end(); } else { const depthStencilAttachment = { - view: texture.createView(viewDescriptor), + view: texture.createView(viewDescriptor) }; if (kTextureFormatInfo[this.p.format].depth) { depthStencilAttachment.depthClearValue = initializedStateAsDepth[state]; @@ -315,12 +330,12 @@ export class TextureZeroInitTest extends GPUTest { depthStencilAttachment.stencilLoadOp = 'clear'; depthStencilAttachment.stencilStoreOp = 'store'; } - commandEncoder - .beginRenderPass({ - colorAttachments: [], - depthStencilAttachment, - }) - .end(); + commandEncoder. + beginRenderPass({ + colorAttachments: [], + depthStencilAttachment + }). + end(); } } @@ -328,7 +343,11 @@ export class TextureZeroInitTest extends GPUTest { this.queue.submit([commandEncoder.finish()]); } - initializeWithCopy(texture, state, subresourceRange) { + initializeWithCopy( + texture, + state, + subresourceRange) + { assert(this.p.format in kTextureFormatInfo); const format = this.p.format; @@ -364,7 +383,7 @@ export class TextureZeroInitTest extends GPUTest { { buffer, bytesPerRow, - rowsPerImage, + rowsPerImage }, { texture, mipLevel: level, origin: { x: 0, y: 0, z: layer } }, { width, height, depthOrArrayLayers: depth } @@ -374,7 +393,11 @@ export class TextureZeroInitTest extends GPUTest { buffer.destroy(); } - initializeTexture(texture, state, subresourceRange) { + initializeTexture( + texture, + state, + subresourceRange) + { if (this.p.sampleCount > 1 || !kTextureFormatInfo[this.p.format].copyDst) { // Copies to multisampled textures not yet specified. // Use a storeOp for now. @@ -391,20 +414,20 @@ export class TextureZeroInitTest extends GPUTest { for (const desc of this.generateTextureViewDescriptorsForRendering('all', subresourceRange)) { if (kTextureFormatInfo[this.p.format].color) { - commandEncoder - .beginRenderPass({ - colorAttachments: [ - { - view: texture.createView(desc), - storeOp: 'discard', - loadOp: 'load', - }, - ], - }) - .end(); + commandEncoder. + beginRenderPass({ + colorAttachments: [ + { + view: texture.createView(desc), + storeOp: 'discard', + loadOp: 'load' + }] + + }). + end(); } else { const depthStencilAttachment = { - view: texture.createView(desc), + view: texture.createView(desc) }; if (kTextureFormatInfo[this.p.format].depth) { depthStencilAttachment.depthLoadOp = 'load'; @@ -414,12 +437,12 @@ export class TextureZeroInitTest extends GPUTest { depthStencilAttachment.stencilLoadOp = 'load'; depthStencilAttachment.stencilStoreOp = 'discard'; } - commandEncoder - .beginRenderPass({ - colorAttachments: [], - depthStencilAttachment, - }) - .end(); + commandEncoder. + beginRenderPass({ + colorAttachments: [], + depthStencilAttachment + }). + end(); } } @@ -428,104 +451,112 @@ export class TextureZeroInitTest extends GPUTest { } } -const kTestParams = kUnitCaseParamsBuilder - .combine('dimension', kTextureDimensions) - .combine('readMethod', [ - ReadMethod.CopyToBuffer, - ReadMethod.CopyToTexture, - ReadMethod.Sample, - ReadMethod.DepthTest, - ReadMethod.StencilTest, - ]) +const kTestParams = kUnitCaseParamsBuilder. +combine('dimension', kTextureDimensions). +combine('readMethod', [ +ReadMethod.CopyToBuffer, +ReadMethod.CopyToTexture, +ReadMethod.Sample, +ReadMethod.DepthTest, +ReadMethod.StencilTest] +) +// [3] compressed formats +.combine('format', kUncompressedTextureFormats). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('aspect', kTextureAspects). +unless(({ readMethod, format, aspect }) => { + const info = kTextureFormatInfo[format]; + return ( + readMethod === ReadMethod.DepthTest && (!info.depth || aspect === 'stencil-only') || + readMethod === ReadMethod.StencilTest && (!info.stencil || aspect === 'depth-only') || + readMethod === ReadMethod.ColorBlending && !info.color || + // [1]: Test with depth/stencil sampling + readMethod === ReadMethod.Sample && (!!info.depth || !!info.stencil) || + aspect === 'depth-only' && !info.depth || + aspect === 'stencil-only' && !info.stencil || + aspect === 'all' && !!info.depth && !!info.stencil || + // Cannot copy from a packed depth format. + // [2]: Test copying out of the stencil aspect. + (readMethod === ReadMethod.CopyToBuffer || readMethod === ReadMethod.CopyToTexture) && ( + format === 'depth24plus' || format === 'depth24plus-stencil8')); + +}). +combine('mipLevelCount', kMipLevelCounts) +// 1D texture can only have a single mip level +.unless((p) => p.dimension === '1d' && p.mipLevelCount !== 1). +combine('sampleCount', kSampleCounts). +unless( + ({ readMethod, sampleCount }) => + // We can only read from multisampled textures by sampling. + sampleCount > 1 && ( + readMethod === ReadMethod.CopyToBuffer || readMethod === ReadMethod.CopyToTexture) +) +// Multisampled textures may only have one mip +.unless(({ sampleCount, mipLevelCount }) => sampleCount > 1 && mipLevelCount > 1). +combine('uninitializeMethod', kUninitializeMethods). +unless(({ dimension, readMethod, uninitializeMethod, format, sampleCount }) => { + const formatInfo = kTextureFormatInfo[format]; + return ( + dimension !== '2d' && ( + sampleCount > 1 || + !!formatInfo.depth || + !!formatInfo.stencil || + readMethod === ReadMethod.DepthTest || + readMethod === ReadMethod.StencilTest || + readMethod === ReadMethod.ColorBlending || + uninitializeMethod === UninitializeMethod.StoreOpClear)); + +}). +expandWithParams(function* ({ dimension }) { + switch (dimension) { + case '2d': + yield { layerCount: 1 }; + yield { layerCount: 7 }; + break; + case '1d': + case '3d': + yield { layerCount: 1 }; + break; + } +}) +// Multisampled 3D / 2D array textures not supported. +.unless(({ sampleCount, layerCount }) => sampleCount > 1 && layerCount > 1). +unless(({ format, sampleCount, uninitializeMethod, readMethod }) => { + const usage = getRequiredTextureUsage(format, sampleCount, uninitializeMethod, readMethod); + const info = kTextureFormatInfo[format]; + + return ( + (usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && !info.renderable || + (usage & GPUConst.TextureUsage.STORAGE_BINDING) !== 0 && !info.color?.storage || + sampleCount > 1 && !info.multisample); + +}). +combine('nonPowerOfTwo', [false, true]). +combine('canaryOnCreation', [false, true]). +filter(({ canaryOnCreation, format }) => { + // We can only initialize the texture if it's encodable or renderable. + const canInitialize = format in kTextureFormatInfo || kTextureFormatInfo[format].renderable; + + // Filter out cases where we want canary values but can't initialize. + return !canaryOnCreation || canInitialize; +}); + + + + + + - // [3] compressed formats - .combine('format', kUncompressedTextureFormats) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('aspect', kTextureAspects) - .unless(({ readMethod, format, aspect }) => { - const info = kTextureFormatInfo[format]; - return ( - (readMethod === ReadMethod.DepthTest && (!info.depth || aspect === 'stencil-only')) || - (readMethod === ReadMethod.StencilTest && (!info.stencil || aspect === 'depth-only')) || - (readMethod === ReadMethod.ColorBlending && !info.color) || - // [1]: Test with depth/stencil sampling - (readMethod === ReadMethod.Sample && (!!info.depth || !!info.stencil)) || - (aspect === 'depth-only' && !info.depth) || - (aspect === 'stencil-only' && !info.stencil) || - (aspect === 'all' && !!info.depth && !!info.stencil) || - // Cannot copy from a packed depth format. - // [2]: Test copying out of the stencil aspect. - ((readMethod === ReadMethod.CopyToBuffer || readMethod === ReadMethod.CopyToTexture) && - (format === 'depth24plus' || format === 'depth24plus-stencil8')) - ); - }) - .combine('mipLevelCount', kMipLevelCounts) - // 1D texture can only have a single mip level - .unless(p => p.dimension === '1d' && p.mipLevelCount !== 1) - .combine('sampleCount', kSampleCounts) - .unless( - ({ readMethod, sampleCount }) => - // We can only read from multisampled textures by sampling. - sampleCount > 1 && - (readMethod === ReadMethod.CopyToBuffer || readMethod === ReadMethod.CopyToTexture) - ) - // Multisampled textures may only have one mip - .unless(({ sampleCount, mipLevelCount }) => sampleCount > 1 && mipLevelCount > 1) - .combine('uninitializeMethod', kUninitializeMethods) - .unless(({ dimension, readMethod, uninitializeMethod, format, sampleCount }) => { - const formatInfo = kTextureFormatInfo[format]; - return ( - dimension !== '2d' && - (sampleCount > 1 || - !!formatInfo.depth || - !!formatInfo.stencil || - readMethod === ReadMethod.DepthTest || - readMethod === ReadMethod.StencilTest || - readMethod === ReadMethod.ColorBlending || - uninitializeMethod === UninitializeMethod.StoreOpClear) - ); - }) - .expandWithParams(function* ({ dimension }) { - switch (dimension) { - case '2d': - yield { layerCount: 1 }; - yield { layerCount: 7 }; - break; - case '1d': - case '3d': - yield { layerCount: 1 }; - break; - } - }) - // Multisampled 3D / 2D array textures not supported. - .unless(({ sampleCount, layerCount }) => sampleCount > 1 && layerCount > 1) - .unless(({ format, sampleCount, uninitializeMethod, readMethod }) => { - const usage = getRequiredTextureUsage(format, sampleCount, uninitializeMethod, readMethod); - const info = kTextureFormatInfo[format]; - return ( - ((usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && !info.renderable) || - ((usage & GPUConst.TextureUsage.STORAGE_BINDING) !== 0 && !info.color?.storage) || - (sampleCount > 1 && !info.multisample) - ); - }) - .combine('nonPowerOfTwo', [false, true]) - .combine('canaryOnCreation', [false, true]) - .filter(({ canaryOnCreation, format }) => { - // We can only initialize the texture if it's encodable or renderable. - const canInitialize = format in kTextureFormatInfo || kTextureFormatInfo[format].renderable; - // Filter out cases where we want canary values but can't initialize. - return !canaryOnCreation || canInitialize; - }); import { checkContentsByBufferCopy, checkContentsByTextureCopy } from './check_texture/by_copy.js'; import { checkContentsByDepthTest, - checkContentsByStencilTest, -} from './check_texture/by_ds_test.js'; + checkContentsByStencilTest } from +'./check_texture/by_ds_test.js'; import { checkContentsBySampling } from './check_texture/by_sampling.js'; const checkContentsImpl = { @@ -534,81 +565,81 @@ const checkContentsImpl = { CopyToTexture: checkContentsByTextureCopy, DepthTest: checkContentsByDepthTest, StencilTest: checkContentsByStencilTest, - ColorBlending: t => t.skip('Not implemented'), - Storage: t => t.skip('Not implemented'), + ColorBlending: (t) => t.skip('Not implemented'), + Storage: (t) => t.skip('Not implemented') }; export const g = makeTestGroup(TextureZeroInitTest); -g.test('uninitialized_texture_is_zero') - .params(kTestParams) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[t.params.format].feature); - }) - .fn(t => { - const usage = getRequiredTextureUsage( - t.params.format, - t.params.sampleCount, - t.params.uninitializeMethod, - t.params.readMethod - ); +g.test('uninitialized_texture_is_zero'). +params(kTestParams). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[t.params.format].feature); +}). +fn((t) => { + const usage = getRequiredTextureUsage( + t.params.format, + t.params.sampleCount, + t.params.uninitializeMethod, + t.params.readMethod + ); - const texture = t.device.createTexture({ - size: [t.textureWidth, t.textureHeight, t.textureDepthOrArrayLayers], - format: t.params.format, - dimension: t.params.dimension, - usage, - mipLevelCount: t.params.mipLevelCount, - sampleCount: t.params.sampleCount, - }); - t.trackForCleanup(texture); + const texture = t.device.createTexture({ + size: [t.textureWidth, t.textureHeight, t.textureDepthOrArrayLayers], + format: t.params.format, + dimension: t.params.dimension, + usage, + mipLevelCount: t.params.mipLevelCount, + sampleCount: t.params.sampleCount + }); + t.trackForCleanup(texture); - if (t.params.canaryOnCreation) { - // Initialize some subresources with canary values - for (const subresourceRange of t.iterateInitializedSubresources()) { + if (t.params.canaryOnCreation) { + // Initialize some subresources with canary values + for (const subresourceRange of t.iterateInitializedSubresources()) { + t.initializeTexture(texture, InitializedState.Canary, subresourceRange); + } + } + + switch (t.params.uninitializeMethod) { + case UninitializeMethod.Creation: + break; + case UninitializeMethod.StoreOpClear: + // Initialize the rest of the resources. + for (const subresourceRange of t.iterateUninitializedSubresources()) { t.initializeTexture(texture, InitializedState.Canary, subresourceRange); } - } + // Then use a store op to discard their contents. + for (const subresourceRange of t.iterateUninitializedSubresources()) { + t.discardTexture(texture, subresourceRange); + } + break; + default: + unreachable(); + } - switch (t.params.uninitializeMethod) { - case UninitializeMethod.Creation: - break; - case UninitializeMethod.StoreOpClear: - // Initialize the rest of the resources. - for (const subresourceRange of t.iterateUninitializedSubresources()) { - t.initializeTexture(texture, InitializedState.Canary, subresourceRange); - } - // Then use a store op to discard their contents. - for (const subresourceRange of t.iterateUninitializedSubresources()) { - t.discardTexture(texture, subresourceRange); - } - break; - default: - unreachable(); - } + // Check that all uninitialized resources are zero. + for (const subresourceRange of t.iterateUninitializedSubresources()) { + checkContentsImpl[t.params.readMethod]( + t, + t.params, + texture, + InitializedState.Zero, + subresourceRange + ); + } - // Check that all uninitialized resources are zero. - for (const subresourceRange of t.iterateUninitializedSubresources()) { + if (t.params.canaryOnCreation) { + // Check the all other resources are unchanged. + for (const subresourceRange of t.iterateInitializedSubresources()) { checkContentsImpl[t.params.readMethod]( t, t.params, texture, - InitializedState.Zero, + InitializedState.Canary, subresourceRange ); } - - if (t.params.canaryOnCreation) { - // Check the all other resources are unchanged. - for (const subresourceRange of t.iterateInitializedSubresources()) { - checkContentsImpl[t.params.readMethod]( - t, - t.params, - texture, - InitializedState.Canary, - subresourceRange - ); - } - } - }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/anisotropy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/anisotropy.spec.js index 43fb17a51ee..8408f619f4b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/anisotropy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/anisotropy.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests the behavior of anisotropic filtering. TODO: @@ -10,27 +10,27 @@ things. If there are no guarantees we can issue warnings instead of failures. Id sample values come out of the sample operation. - Check anisotropy is done in the correct direction (by having a 2D gradient and checking we get more of the color in the correct direction). -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert } from '../../../../common/util/util.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { checkElementsEqual } from '../../../util/check_contents.js'; import { TexelView } from '../../../util/texture/texel_view.js'; + const kRTSize = 16; const kBytesPerRow = 256; const xMiddle = kRTSize / 2; // we check the pixel value in the middle of the render target const kColorAttachmentFormat = 'rgba8unorm'; const kTextureFormat = 'rgba8unorm'; const colors = [ - new Uint8Array([0xff, 0x00, 0x00, 0xff]), // miplevel = 0 - new Uint8Array([0x00, 0xff, 0x00, 0xff]), // miplevel = 1 - new Uint8Array([0x00, 0x00, 0xff, 0xff]), // miplevel = 2 +new Uint8Array([0xff, 0x00, 0x00, 0xff]), // miplevel = 0 +new Uint8Array([0x00, 0xff, 0x00, 0xff]), // miplevel = 1 +new Uint8Array([0x00, 0x00, 0xff, 0xff]) // miplevel = 2 ]; const checkerColors = [ - new Uint8Array([0xff, 0x00, 0x00, 0xff]), - new Uint8Array([0x00, 0xff, 0x00, 0xff]), -]; +new Uint8Array([0xff, 0x00, 0x00, 0xff]), +new Uint8Array([0x00, 0xff, 0x00, 0xff])]; + // renders texture a slanted plane placed in a specific way class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { @@ -38,7 +38,7 @@ class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { const byteLength = kRTSize * kBytesPerRow; const buffer = this.device.createBuffer({ size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); const commandEncoder = this.device.createCommandEncoder(); @@ -47,12 +47,12 @@ class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { { buffer, bytesPerRow: kBytesPerRow, rowsPerImage: kRTSize }, { width: kRTSize, height: kRTSize, depthOrArrayLayers: 1 } ); - this.queue.submit([commandEncoder.finish()]); return buffer; } + async init() { await super.init(); @@ -95,9 +95,9 @@ class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { output.Position = matrix * vec4(position[VertexIndex], 1.0); return output; } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ @@ -111,12 +111,12 @@ class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { -> @location(0) vec4 { return textureSample(texture0, sampler0, fragUV); } - `, + ` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); } @@ -127,30 +127,29 @@ class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { const bindGroup = this.device.createBindGroup({ entries: [ - { binding: 0, resource: sampler }, - { binding: 1, resource: textureView }, - ], + { binding: 0, resource: sampler }, + { binding: 1, resource: textureView }], - layout: this.pipeline.getBindGroupLayout(0), + layout: this.pipeline.getBindGroupLayout(0) }); const colorAttachment = this.device.createTexture({ format: kColorAttachmentFormat, size: { width: kRTSize, height: kRTSize, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const colorAttachmentView = colorAttachment.createView(); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachmentView, - storeOp: 'store', - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - }, - ], + { + view: colorAttachmentView, + storeOp: 'store', + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear' + }] + }); pass.setPipeline(this.pipeline); pass.setBindGroup(0, bindGroup); @@ -164,168 +163,163 @@ class SamplerAnisotropicFilteringSlantedPlaneTest extends GPUTest { export const g = makeTestGroup(TextureTestMixin(SamplerAnisotropicFilteringSlantedPlaneTest)); -g.test('anisotropic_filter_checkerboard') - .desc( - `Anisotropic filter rendering tests that draws a slanted plane and samples from a texture +g.test('anisotropic_filter_checkerboard'). +desc( + `Anisotropic filter rendering tests that draws a slanted plane and samples from a texture that only has a top level mipmap, the content of which is like a checkerboard. We will check the rendering result using sampler with maxAnisotropy values to be different from each other, as the sampling rate is different. We will also check if those large maxAnisotropy values are clamped so that rendering is the same as the supported upper limit say 16. A similar webgl demo is at https://jsfiddle.net/yqnbez24` - ) - .fn(async t => { - // init texture with only a top level mipmap - const textureSize = 32; - const texture = t.device.createTexture({ - mipLevelCount: 1, - size: { width: textureSize, height: textureSize, depthOrArrayLayers: 1 }, - format: kTextureFormat, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING, - }); - - const textureEncoder = t.device.createCommandEncoder(); - - const bufferSize = kBytesPerRow * textureSize; // RGBA8 for each pixel (256 > 16 * 4) - - // init checkerboard texture data - const data = new Uint8Array(bufferSize); - for (let r = 0; r < textureSize; r++) { - const o = r * kBytesPerRow; - for (let c = o, end = o + textureSize * 4; c < end; c += 4) { - const cid = (r + (c - o) / 4) % 2; - const color = checkerColors[cid]; - data[c] = color[0]; - data[c + 1] = color[1]; - data[c + 2] = color[2]; - data[c + 3] = color[3]; - } - } - const buffer = t.makeBufferWithContents( - data, - GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST - ); - - const bytesPerRow = kBytesPerRow; - const rowsPerImage = textureSize; - - textureEncoder.copyBufferToTexture( - { - buffer, - bytesPerRow, - rowsPerImage, - }, - { - texture, - mipLevel: 0, - origin: [0, 0, 0], - }, - [textureSize, textureSize, 1] - ); - - t.device.queue.submit([textureEncoder.finish()]); - - const textureView = texture.createView(); - const byteLength = kRTSize * kBytesPerRow; - const results = []; - - for (const maxAnisotropy of [1, 16, 1024]) { - const sampler = t.device.createSampler({ - magFilter: 'linear', - minFilter: 'linear', - mipmapFilter: 'linear', - maxAnisotropy, - }); - const result = await t.readGPUBufferRangeTyped( - t.copyRenderTargetToBuffer(t.drawSlantedPlane(textureView, sampler)), - { type: Uint8Array, typedLength: byteLength } - ); - - results.push(result); - } - - const check0 = checkElementsEqual(results[0].data, results[1].data); - if (check0 === undefined) { - t.warn('Render results with sampler.maxAnisotropy being 1 and 16 should be different.'); - } - const check1 = checkElementsEqual(results[1].data, results[2].data); - if (check1 !== undefined) { - t.expect( - false, - 'Render results with sampler.maxAnisotropy being 16 and 1024 should be the same.' - ); - } - - for (const result of results) { - result.cleanup(); - } +). +fn(async (t) => { + // init texture with only a top level mipmap + const textureSize = 32; + const texture = t.device.createTexture({ + mipLevelCount: 1, + size: { width: textureSize, height: textureSize, depthOrArrayLayers: 1 }, + format: kTextureFormat, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING }); -g.test('anisotropic_filter_mipmap_color') - .desc( - `Anisotropic filter rendering tests that draws a slanted plane and samples from a texture + const textureEncoder = t.device.createCommandEncoder(); + + const bufferSize = kBytesPerRow * textureSize; // RGBA8 for each pixel (256 > 16 * 4) + + // init checkerboard texture data + const data = new Uint8Array(bufferSize); + for (let r = 0; r < textureSize; r++) { + const o = r * kBytesPerRow; + for (let c = o, end = o + textureSize * 4; c < end; c += 4) { + const cid = (r + (c - o) / 4) % 2; + const color = checkerColors[cid]; + data[c] = color[0]; + data[c + 1] = color[1]; + data[c + 2] = color[2]; + data[c + 3] = color[3]; + } + } + const buffer = t.makeBufferWithContents( + data, + GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + ); + const bytesPerRow = kBytesPerRow; + const rowsPerImage = textureSize; + + textureEncoder.copyBufferToTexture( + { + buffer, + bytesPerRow, + rowsPerImage + }, + { + texture, + mipLevel: 0, + origin: [0, 0, 0] + }, + [textureSize, textureSize, 1] + ); + + t.device.queue.submit([textureEncoder.finish()]); + + const textureView = texture.createView(); + const byteLength = kRTSize * kBytesPerRow; + const results = []; + + for (const maxAnisotropy of [1, 16, 1024]) { + const sampler = t.device.createSampler({ + magFilter: 'linear', + minFilter: 'linear', + mipmapFilter: 'linear', + maxAnisotropy + }); + const result = await t.readGPUBufferRangeTyped( + t.copyRenderTargetToBuffer(t.drawSlantedPlane(textureView, sampler)), + { type: Uint8Array, typedLength: byteLength } + ); + results.push(result); + } + + const check0 = checkElementsEqual(results[0].data, results[1].data); + if (check0 === undefined) { + t.warn('Render results with sampler.maxAnisotropy being 1 and 16 should be different.'); + } + const check1 = checkElementsEqual(results[1].data, results[2].data); + if (check1 !== undefined) { + t.expect( + false, + 'Render results with sampler.maxAnisotropy being 16 and 1024 should be the same.' + ); + } + + for (const result of results) { + result.cleanup(); + } +}); + +g.test('anisotropic_filter_mipmap_color'). +desc( + `Anisotropic filter rendering tests that draws a slanted plane and samples from a texture containing mipmaps of different colors. Given the same fragment with dFdx and dFdy for uv being different, sampler with bigger maxAnisotropy value tends to bigger mip levels to provide better details. We can then look at the color of the fragment to know which mip level is being sampled from and to see if it fits expectations. A similar webgl demo is at https://jsfiddle.net/t8k7c95o/5/` - ) - .paramsSimple([ - { - maxAnisotropy: 1, - _results: [ - { coord: { x: xMiddle, y: 2 }, expected: colors[2] }, - { coord: { x: xMiddle, y: 6 }, expected: [colors[0], colors[1]] }, - ], +). +paramsSimple([ +{ + maxAnisotropy: 1, + _results: [ + { coord: { x: xMiddle, y: 2 }, expected: colors[2] }, + { coord: { x: xMiddle, y: 6 }, expected: [colors[0], colors[1]] }], - _generateWarningOnly: false, - }, - { - maxAnisotropy: 4, - _results: [ - { coord: { x: xMiddle, y: 2 }, expected: [colors[0], colors[1]] }, - { coord: { x: xMiddle, y: 6 }, expected: colors[0] }, - ], + _generateWarningOnly: false +}, +{ + maxAnisotropy: 4, + _results: [ + { coord: { x: xMiddle, y: 2 }, expected: [colors[0], colors[1]] }, + { coord: { x: xMiddle, y: 6 }, expected: colors[0] }], - _generateWarningOnly: true, - }, - ]) - .fn(t => { - const texture = t.createTextureFromTexelViewsMultipleMipmaps( - colors.map(value => TexelView.fromTexelsAsBytes(kTextureFormat, coords_ => value)), - { size: [4, 4, 1], usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING } - ); + _generateWarningOnly: true +}] +). +fn((t) => { + const texture = t.createTextureFromTexelViewsMultipleMipmaps( + colors.map((value) => TexelView.fromTexelsAsBytes(kTextureFormat, (_coords) => value)), + { size: [4, 4, 1], usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING } + ); + const textureView = texture.createView(); - const textureView = texture.createView(); - - const sampler = t.device.createSampler({ - magFilter: 'linear', - minFilter: 'linear', - mipmapFilter: 'linear', - maxAnisotropy: t.params.maxAnisotropy, - }); - - const colorAttachment = t.drawSlantedPlane(textureView, sampler); - - const pixelComparisons = []; - for (const entry of t.params._results) { - if (entry.expected instanceof Uint8Array) { - // equal exactly one color - pixelComparisons.push({ coord: entry.coord, exp: entry.expected }); - } else { - // a lerp between two colors - // MAINTENANCE_TODO: Unify comparison to allow for a strict in-between comparison to support - // this kind of expectation. - t.expectSinglePixelBetweenTwoValuesIn2DTexture( - colorAttachment, - kColorAttachmentFormat, - entry.coord, - { - exp: entry.expected, - generateWarningOnly: t.params._generateWarningOnly, - } - ); - } - } - t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, pixelComparisons); + const sampler = t.device.createSampler({ + magFilter: 'linear', + minFilter: 'linear', + mipmapFilter: 'linear', + maxAnisotropy: t.params.maxAnisotropy }); + + const colorAttachment = t.drawSlantedPlane(textureView, sampler); + + const pixelComparisons = []; + for (const entry of t.params._results) { + if (entry.expected instanceof Uint8Array) { + // equal exactly one color + pixelComparisons.push({ coord: entry.coord, exp: entry.expected }); + } else { + // a lerp between two colors + // MAINTENANCE_TODO: Unify comparison to allow for a strict in-between comparison to support + // this kind of expectation. + t.expectSinglePixelBetweenTwoValuesIn2DTexture( + colorAttachment, + kColorAttachmentFormat, + entry.coord, + { + exp: entry.expected, + generateWarningOnly: t.params._generateWarningOnly + } + ); + } + } + t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, pixelComparisons); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/filter_mode.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/filter_mode.spec.js index f9501fc629f..860eb03f8d1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/filter_mode.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/filter_mode.spec.js @@ -1,11 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests the behavior of different filtering modes in minFilter/magFilter/mipmapFilter. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kAddressModes, kMipmapFilterModes } from '../../../capability_info.js'; -import { kRenderableColorTextureFormats, kTextureFormatInfo } from '../../../format_info.js'; +import { + + kRenderableColorTextureFormats, + kTextureFormatInfo } from +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { getTextureCopyLayout } from '../../../util/texture/layout.js'; import { TexelView } from '../../../util/texture/texel_view.js'; @@ -13,59 +16,65 @@ import { TexelView } from '../../../util/texture/texel_view.js'; // Simple checkerboard 2x2 texture used as a base for the sampling. const kCheckerTextureSize = 2; const kCheckerTextureData = [ - { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }, - { R: 0.0, G: 0.0, B: 0.0, A: 1.0 }, - { R: 0.0, G: 0.0, B: 0.0, A: 1.0 }, - { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }, -]; +{ R: 1.0, G: 1.0, B: 1.0, A: 1.0 }, +{ R: 0.0, G: 0.0, B: 0.0, A: 1.0 }, +{ R: 0.0, G: 0.0, B: 0.0, A: 1.0 }, +{ R: 1.0, G: 1.0, B: 1.0, A: 1.0 }]; + class FilterModeTest extends TextureTestMixin(GPUTest) { - runFilterRenderPipeline(sampler, module, format, renderSize, vertexCount, instanceCount) { + runFilterRenderPipeline( + sampler, + module, + format, + renderSize, + vertexCount, + instanceCount) + { const sampleTexture = this.createTextureFromTexelView( - TexelView.fromTexelsAsColors(format, coord => { + TexelView.fromTexelsAsColors(format, (coord) => { const id = coord.x + coord.y * kCheckerTextureSize; return kCheckerTextureData[id]; }), { size: [kCheckerTextureSize, kCheckerTextureSize], - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST } ); - const renderTexture = this.device.createTexture({ format, size: renderSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }); const pipeline = this.device.createRenderPipeline({ layout: 'auto', vertex: { module, - entryPoint: 'vs_main', + entryPoint: 'vs_main' }, fragment: { module, entryPoint: 'fs_main', - targets: [{ format }], - }, + targets: [{ format }] + } }); const bindgroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: sampler }, - { binding: 1, resource: sampleTexture.createView() }, - ], + { binding: 0, resource: sampler }, + { binding: 1, resource: sampleTexture.createView() }] + }); const commandEncoder = this.device.createCommandEncoder(); const renderPass = commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: renderTexture.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: renderTexture.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + }); renderPass.setPipeline(pipeline); renderPass.setBindGroup(0, bindgroup); @@ -78,6 +87,8 @@ class FilterModeTest extends TextureTestMixin(GPUTest) { export const g = makeTestGroup(FilterModeTest); + + /* For filter mode 'nearest', we need to check a 6x6 of pixels because 4x4s are identical when using * address mode 'clamp-to-edge' and 'mirror-repeat'. The minFilter and magFilter tests are setup so * that they both render the same results. (See the respective test for details.) The following @@ -106,89 +117,81 @@ export const g = makeTestGroup(FilterModeTest); * mirror-repeat │ │█│ │█│ │█│ │ │ │ │█│█│█│ │█│ │ │█│█│ │ * │ │█│ │█│ │█│ │ │ │ │█│█│█│ │█│ │ │█│█│ │ * │█│ │█│ │█│ │ │█│█│█│ │ │ │ │ │█│█│ │ │█│ - */ +*/ const kNearestRenderSize = 6; const kNearestRenderDim = [kNearestRenderSize, kNearestRenderSize]; const kNearestURepeatVRepeat = [ - [1, 0, 1, 0, 1, 0], - [0, 1, 0, 1, 0, 1], - [1, 0, 1, 0, 1, 0], - [0, 1, 0, 1, 0, 1], - [1, 0, 1, 0, 1, 0], - [0, 1, 0, 1, 0, 1], -]; +[1, 0, 1, 0, 1, 0], +[0, 1, 0, 1, 0, 1], +[1, 0, 1, 0, 1, 0], +[0, 1, 0, 1, 0, 1], +[1, 0, 1, 0, 1, 0], +[0, 1, 0, 1, 0, 1]]; const kNearestURepeatVClamped = [ - [1, 0, 1, 0, 1, 0], - [1, 0, 1, 0, 1, 0], - [1, 0, 1, 0, 1, 0], - [0, 1, 0, 1, 0, 1], - [0, 1, 0, 1, 0, 1], - [0, 1, 0, 1, 0, 1], -]; +[1, 0, 1, 0, 1, 0], +[1, 0, 1, 0, 1, 0], +[1, 0, 1, 0, 1, 0], +[0, 1, 0, 1, 0, 1], +[0, 1, 0, 1, 0, 1], +[0, 1, 0, 1, 0, 1]]; const kNearestURepeatVMirror = [ - [0, 1, 0, 1, 0, 1], - [1, 0, 1, 0, 1, 0], - [1, 0, 1, 0, 1, 0], - [0, 1, 0, 1, 0, 1], - [0, 1, 0, 1, 0, 1], - [1, 0, 1, 0, 1, 0], -]; +[0, 1, 0, 1, 0, 1], +[1, 0, 1, 0, 1, 0], +[1, 0, 1, 0, 1, 0], +[0, 1, 0, 1, 0, 1], +[0, 1, 0, 1, 0, 1], +[1, 0, 1, 0, 1, 0]]; const kNearestUClampedVRepeat = [ - [1, 1, 1, 0, 0, 0], - [0, 0, 0, 1, 1, 1], - [1, 1, 1, 0, 0, 0], - [0, 0, 0, 1, 1, 1], - [1, 1, 1, 0, 0, 0], - [0, 0, 0, 1, 1, 1], -]; +[1, 1, 1, 0, 0, 0], +[0, 0, 0, 1, 1, 1], +[1, 1, 1, 0, 0, 0], +[0, 0, 0, 1, 1, 1], +[1, 1, 1, 0, 0, 0], +[0, 0, 0, 1, 1, 1]]; const kNearestUClampedVClamped = [ - [1, 1, 1, 0, 0, 0], - [1, 1, 1, 0, 0, 0], - [1, 1, 1, 0, 0, 0], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], -]; +[1, 1, 1, 0, 0, 0], +[1, 1, 1, 0, 0, 0], +[1, 1, 1, 0, 0, 0], +[0, 0, 0, 1, 1, 1], +[0, 0, 0, 1, 1, 1], +[0, 0, 0, 1, 1, 1]]; const kNearestUClampedVMirror = [ - [0, 0, 0, 1, 1, 1], - [1, 1, 1, 0, 0, 0], - [1, 1, 1, 0, 0, 0], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [1, 1, 1, 0, 0, 0], -]; +[0, 0, 0, 1, 1, 1], +[1, 1, 1, 0, 0, 0], +[1, 1, 1, 0, 0, 0], +[0, 0, 0, 1, 1, 1], +[0, 0, 0, 1, 1, 1], +[1, 1, 1, 0, 0, 0]]; const kNearestUMirrorVRepeat = [ - [0, 1, 1, 0, 0, 1], - [1, 0, 0, 1, 1, 0], - [0, 1, 1, 0, 0, 1], - [1, 0, 0, 1, 1, 0], - [0, 1, 1, 0, 0, 1], - [1, 0, 0, 1, 1, 0], -]; +[0, 1, 1, 0, 0, 1], +[1, 0, 0, 1, 1, 0], +[0, 1, 1, 0, 0, 1], +[1, 0, 0, 1, 1, 0], +[0, 1, 1, 0, 0, 1], +[1, 0, 0, 1, 1, 0]]; const kNearestUMirrorVClamped = [ - [0, 1, 1, 0, 0, 1], - [0, 1, 1, 0, 0, 1], - [0, 1, 1, 0, 0, 1], - [1, 0, 0, 1, 1, 0], - [1, 0, 0, 1, 1, 0], - [1, 0, 0, 1, 1, 0], -]; +[0, 1, 1, 0, 0, 1], +[0, 1, 1, 0, 0, 1], +[0, 1, 1, 0, 0, 1], +[1, 0, 0, 1, 1, 0], +[1, 0, 0, 1, 1, 0], +[1, 0, 0, 1, 1, 0]]; const kNearestUMirrorVMirror = [ - [1, 0, 0, 1, 1, 0], - [0, 1, 1, 0, 0, 1], - [0, 1, 1, 0, 0, 1], - [1, 0, 0, 1, 1, 0], - [1, 0, 0, 1, 1, 0], - [0, 1, 1, 0, 0, 1], -]; +[1, 0, 0, 1, 1, 0], +[0, 1, 1, 0, 0, 1], +[0, 1, 1, 0, 0, 1], +[1, 0, 0, 1, 1, 0], +[1, 0, 0, 1, 1, 0], +[0, 1, 1, 0, 0, 1]]; + /* For filter mode 'linear', the tests samples 16 points (to create a 4x4) on what the effective 8x8 * expanded texture via the address modes looks like (see table below for what those look like). The @@ -254,86 +257,83 @@ const kNearestUMirrorVMirror = [ const kLinearRenderSize = 4; const kLinearRenderDim = [kLinearRenderSize, kLinearRenderSize]; const kLinearURepeatVRepeat = [ - [10, 6, 10, 6], - [10, 6, 10, 6], - [6, 10, 6, 10], - [6, 10, 6, 10], -]; +[10, 6, 10, 6], +[10, 6, 10, 6], +[6, 10, 6, 10], +[6, 10, 6, 10]]; const kLinearURepeatVClamped = [ - [12, 4, 12, 4], - [12, 4, 12, 4], - [4, 12, 4, 12], - [4, 12, 4, 12], -]; +[12, 4, 12, 4], +[12, 4, 12, 4], +[4, 12, 4, 12], +[4, 12, 4, 12]]; const kLinearURepeatVMirror = [ - [4, 12, 4, 12], - [12, 4, 12, 4], - [4, 12, 4, 12], - [12, 4, 12, 4], -]; +[4, 12, 4, 12], +[12, 4, 12, 4], +[4, 12, 4, 12], +[12, 4, 12, 4]]; const kLinearUClampedVRepeat = [ - [12, 12, 4, 4], - [12, 12, 4, 4], - [4, 4, 12, 12], - [4, 4, 12, 12], -]; +[12, 12, 4, 4], +[12, 12, 4, 4], +[4, 4, 12, 12], +[4, 4, 12, 12]]; const kLinearUClampedVClamped = [ - [16, 16, 0, 0], - [16, 16, 0, 0], - [0, 0, 16, 16], - [0, 0, 16, 16], -]; +[16, 16, 0, 0], +[16, 16, 0, 0], +[0, 0, 16, 16], +[0, 0, 16, 16]]; const kLinearUClampedVMirror = [ - [0, 0, 16, 16], - [16, 16, 0, 0], - [0, 0, 16, 16], - [16, 16, 0, 0], -]; +[0, 0, 16, 16], +[16, 16, 0, 0], +[0, 0, 16, 16], +[16, 16, 0, 0]]; const kLinearUMirrorVRepeat = [ - [4, 12, 4, 12], - [4, 12, 4, 12], - [12, 4, 12, 4], - [12, 4, 12, 4], -]; +[4, 12, 4, 12], +[4, 12, 4, 12], +[12, 4, 12, 4], +[12, 4, 12, 4]]; const kLinearUMirrorVClamped = [ - [0, 16, 0, 16], - [0, 16, 0, 16], - [16, 0, 16, 0], - [16, 0, 16, 0], -]; +[0, 16, 0, 16], +[0, 16, 0, 16], +[16, 0, 16, 0], +[16, 0, 16, 0]]; const kLinearUMirrorVMirror = [ - [16, 0, 16, 0], - [0, 16, 0, 16], - [16, 0, 16, 0], - [0, 16, 0, 16], -]; +[16, 0, 16, 0], +[0, 16, 0, 16], +[16, 0, 16, 0], +[0, 16, 0, 16]]; -function expectedNearestColors(format, addressModeU, addressModeV) { + + + +function expectedNearestColors( +format, +addressModeU, +addressModeV) +{ let expectedColors; switch (addressModeU) { - case 'clamp-to-edge': { - switch (addressModeV) { - case 'clamp-to-edge': - expectedColors = kNearestUClampedVClamped; - break; - case 'repeat': - expectedColors = kNearestUClampedVRepeat; - break; - case 'mirror-repeat': - expectedColors = kNearestUClampedVMirror; - break; + case 'clamp-to-edge':{ + switch (addressModeV) { + case 'clamp-to-edge': + expectedColors = kNearestUClampedVClamped; + break; + case 'repeat': + expectedColors = kNearestUClampedVRepeat; + break; + case 'mirror-repeat': + expectedColors = kNearestUClampedVMirror; + break; + } + break; } - - break; - } case 'repeat': switch (addressModeV) { case 'clamp-to-edge': @@ -346,7 +346,6 @@ function expectedNearestColors(format, addressModeU, addressModeV) { expectedColors = kNearestURepeatVMirror; break; } - break; case 'mirror-repeat': switch (addressModeV) { @@ -360,33 +359,34 @@ function expectedNearestColors(format, addressModeU, addressModeV) { expectedColors = kNearestUMirrorVMirror; break; } - break; } - - return TexelView.fromTexelsAsColors(format, coord => { + return TexelView.fromTexelsAsColors(format, (coord) => { const c = expectedColors[coord.y][coord.x]; return { R: c, G: c, B: c, A: 1.0 }; }); } -function expectedLinearColors(format, addressModeU, addressModeV) { +function expectedLinearColors( +format, +addressModeU, +addressModeV) +{ let expectedColors; switch (addressModeU) { - case 'clamp-to-edge': { - switch (addressModeV) { - case 'clamp-to-edge': - expectedColors = kLinearUClampedVClamped; - break; - case 'repeat': - expectedColors = kLinearUClampedVRepeat; - break; - case 'mirror-repeat': - expectedColors = kLinearUClampedVMirror; - break; + case 'clamp-to-edge':{ + switch (addressModeV) { + case 'clamp-to-edge': + expectedColors = kLinearUClampedVClamped; + break; + case 'repeat': + expectedColors = kLinearUClampedVRepeat; + break; + case 'mirror-repeat': + expectedColors = kLinearUClampedVMirror; + break; + } + break; } - - break; - } case 'repeat': switch (addressModeV) { case 'clamp-to-edge': @@ -399,7 +399,6 @@ function expectedLinearColors(format, addressModeU, addressModeV) { expectedColors = kLinearURepeatVMirror; break; } - break; case 'mirror-repeat': switch (addressModeV) { @@ -413,16 +412,19 @@ function expectedLinearColors(format, addressModeU, addressModeV) { expectedColors = kLinearUMirrorVMirror; break; } - break; } - - return TexelView.fromTexelsAsColors(format, coord => { + return TexelView.fromTexelsAsColors(format, (coord) => { const c = expectedColors[coord.y][coord.x]; return { R: c / 16, G: c / 16, B: c / 16, A: 1.0 }; }); } -function expectedColors(format, filterMode, addressModeU, addressModeV) { +function expectedColors( +format, +filterMode, +addressModeU, +addressModeV) +{ switch (filterMode) { case 'nearest': return expectedNearestColors(format, addressModeU, addressModeV); @@ -455,42 +457,43 @@ function expectedColors(format, filterMode, addressModeU, addressModeV) { * ╚═╝─┴─┴─┴─┴─┘ ╚═╝ * (-.875,1.875) (-.625,1.875) */ -g.test('magFilter,nearest') - .desc( - ` +g.test('magFilter,nearest'). +desc( + ` Test that for filterable formats, magFilter 'nearest' mode correctly modifies the sampling. - format= {} - addressModeU= {'clamp-to-edge', 'repeat', 'mirror-repeat'} - addressModeV= {'clamp-to-edge', 'repeat', 'mirror-repeat'} ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .filter(t => { - return ( - kTextureFormatInfo[t.format].color.type === 'float' || - kTextureFormatInfo[t.format].color.type === 'unfilterable-float' - ); - }) - .beginSubcases() - .combine('addressModeU', kAddressModes) - .combine('addressModeV', kAddressModes) - ) - .beforeAllSubcases(t => { - if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { - t.selectDeviceOrSkipTestCase('float32-filterable'); - } - }) - .fn(t => { - const { format, addressModeU, addressModeV } = t.params; - const sampler = t.device.createSampler({ - addressModeU, - addressModeV, - magFilter: 'nearest', - }); - const module = t.device.createShaderModule({ - code: ` +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +filter((t) => { + return ( + kTextureFormatInfo[t.format].color.type === 'float' || + kTextureFormatInfo[t.format].color.type === 'unfilterable-float'); + +}). +beginSubcases(). +combine('addressModeU', kAddressModes). +combine('addressModeV', kAddressModes) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); + if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { + t.selectDeviceOrSkipTestCase('float32-filterable'); + } +}). +fn((t) => { + const { format, addressModeU, addressModeV } = t.params; + const sampler = t.device.createSampler({ + addressModeU, + addressModeV, + magFilter: 'nearest' + }); + const module = t.device.createShaderModule({ + code: ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var t : texture_2d; @@ -527,25 +530,24 @@ g.test('magFilter,nearest') fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f { return textureSample(t, s, uv); } - `, - }); - const vertexCount = 6; - const instanceCount = kNearestRenderDim.reduce((sink, current) => sink * current); - const render = t.runFilterRenderPipeline( - sampler, - module, - format, - kNearestRenderDim, - vertexCount, - instanceCount - ); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: render }, - expectedColors(format, 'nearest', addressModeU, addressModeV), - kNearestRenderDim - ); + ` }); + const vertexCount = 6; + const instanceCount = kNearestRenderDim.reduce((sink, current) => sink * current); + const render = t.runFilterRenderPipeline( + sampler, + module, + format, + kNearestRenderDim, + vertexCount, + instanceCount + ); + t.expectTexelViewComparisonIsOkInTexture( + { texture: render }, + expectedColors(format, 'nearest', addressModeU, addressModeV), + kNearestRenderDim + ); +}); /* The following diagram shows the UV shift (almost to scale) for what the pixel at cell (0,0) (the * dark square) looks like w.r.t the UV of the texture if we just mapped the entire 2x2 texture to @@ -578,42 +580,43 @@ g.test('magFilter,nearest') * │ │ │ │ │ │ │ │ │ * └────┴────┴────┴────┴────┴────┴────┴────┘ */ -g.test('magFilter,linear') - .desc( - ` +g.test('magFilter,linear'). +desc( + ` Test that for filterable formats, magFilter 'linear' mode correctly modifies the sampling. - format= {} - addressModeU= {'clamp-to-edge', 'repeat', 'mirror-repeat'} - addressModeV= {'clamp-to-edge', 'repeat', 'mirror-repeat'} ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .filter(t => { - return ( - kTextureFormatInfo[t.format].color.type === 'float' || - kTextureFormatInfo[t.format].color.type === 'unfilterable-float' - ); - }) - .beginSubcases() - .combine('addressModeU', kAddressModes) - .combine('addressModeV', kAddressModes) - ) - .beforeAllSubcases(t => { - if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { - t.selectDeviceOrSkipTestCase('float32-filterable'); - } - }) - .fn(t => { - const { format, addressModeU, addressModeV } = t.params; - const sampler = t.device.createSampler({ - addressModeU, - addressModeV, - magFilter: 'linear', - }); - const module = t.device.createShaderModule({ - code: ` +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +filter((t) => { + return ( + kTextureFormatInfo[t.format].color.type === 'float' || + kTextureFormatInfo[t.format].color.type === 'unfilterable-float'); + +}). +beginSubcases(). +combine('addressModeU', kAddressModes). +combine('addressModeV', kAddressModes) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); + if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { + t.selectDeviceOrSkipTestCase('float32-filterable'); + } +}). +fn((t) => { + const { format, addressModeU, addressModeV } = t.params; + const sampler = t.device.createSampler({ + addressModeU, + addressModeV, + magFilter: 'linear' + }); + const module = t.device.createShaderModule({ + code: ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var t : texture_2d; @@ -652,25 +655,24 @@ g.test('magFilter,linear') fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f { return textureSample(t, s, uv); } - `, - }); - const vertexCount = 6; - const instanceCount = kLinearRenderDim.reduce((sink, current) => sink * current); - const render = t.runFilterRenderPipeline( - sampler, - module, - format, - kLinearRenderDim, - vertexCount, - instanceCount - ); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: render }, - expectedColors(format, 'linear', addressModeU, addressModeV), - kLinearRenderDim - ); + ` }); + const vertexCount = 6; + const instanceCount = kLinearRenderDim.reduce((sink, current) => sink * current); + const render = t.runFilterRenderPipeline( + sampler, + module, + format, + kLinearRenderDim, + vertexCount, + instanceCount + ); + t.expectTexelViewComparisonIsOkInTexture( + { texture: render }, + expectedColors(format, 'linear', addressModeU, addressModeV), + kLinearRenderDim + ); +}); /* For the minFilter tests, each rendered pixel is a small instanced quad that is UV mapped such * that it is either the 6x6 or 8x8 textures from above. Each quad in each cell is then offsetted @@ -713,42 +715,43 @@ g.test('magFilter,linear') * │ │ * └───────────────────────────────────────────────┘ */ -g.test('minFilter,nearest') - .desc( - ` +g.test('minFilter,nearest'). +desc( + ` Test that for filterable formats, minFilter 'nearest' mode correctly modifies the sampling. - format= {} - addressModeU= {'clamp-to-edge', 'repeat', 'mirror-repeat'} - addressModeV= {'clamp-to-edge', 'repeat', 'mirror-repeat'} ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .filter(t => { - return ( - kTextureFormatInfo[t.format].color.type === 'float' || - kTextureFormatInfo[t.format].color.type === 'unfilterable-float' - ); - }) - .beginSubcases() - .combine('addressModeU', kAddressModes) - .combine('addressModeV', kAddressModes) - ) - .beforeAllSubcases(t => { - if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { - t.selectDeviceOrSkipTestCase('float32-filterable'); - } - }) - .fn(t => { - const { format, addressModeU, addressModeV } = t.params; - const sampler = t.device.createSampler({ - addressModeU, - addressModeV, - minFilter: 'nearest', - }); - const module = t.device.createShaderModule({ - code: ` +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +filter((t) => { + return ( + kTextureFormatInfo[t.format].color.type === 'float' || + kTextureFormatInfo[t.format].color.type === 'unfilterable-float'); + +}). +beginSubcases(). +combine('addressModeU', kAddressModes). +combine('addressModeV', kAddressModes) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); + if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { + t.selectDeviceOrSkipTestCase('float32-filterable'); + } +}). +fn((t) => { + const { format, addressModeU, addressModeV } = t.params; + const sampler = t.device.createSampler({ + addressModeU, + addressModeV, + minFilter: 'nearest' + }); + const module = t.device.createShaderModule({ + code: ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var t : texture_2d; @@ -789,25 +792,24 @@ g.test('minFilter,nearest') fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f { return textureSample(t, s, uv); } - `, - }); - const vertexCount = 6; - const instanceCount = kNearestRenderDim.reduce((sink, current) => sink * current); - const render = t.runFilterRenderPipeline( - sampler, - module, - format, - kNearestRenderDim, - vertexCount, - instanceCount - ); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: render }, - expectedColors(format, 'nearest', addressModeU, addressModeV), - kNearestRenderDim - ); + ` }); + const vertexCount = 6; + const instanceCount = kNearestRenderDim.reduce((sink, current) => sink * current); + const render = t.runFilterRenderPipeline( + sampler, + module, + format, + kNearestRenderDim, + vertexCount, + instanceCount + ); + t.expectTexelViewComparisonIsOkInTexture( + { texture: render }, + expectedColors(format, 'nearest', addressModeU, addressModeV), + kNearestRenderDim + ); +}); /* The following diagram shows the sub-pixel quad and the relative distances between the sample * points and the origin. The pixel is not shown in this diagram but is a 2x bounding box around the @@ -846,42 +848,43 @@ g.test('minFilter,nearest') * │ │ │ │ │ │ │ │ │ * └────┴────┴────┴────┴────┴────┴────┴────┘ */ -g.test('minFilter,linear') - .desc( - ` +g.test('minFilter,linear'). +desc( + ` Test that for filterable formats, minFilter 'linear' mode correctly modifies the sampling. - format= {} - addressModeU= {'clamp-to-edge', 'repeat', 'mirror-repeat'} - addressModeV= {'clamp-to-edge', 'repeat', 'mirror-repeat'} ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .filter(t => { - return ( - kTextureFormatInfo[t.format].color.type === 'float' || - kTextureFormatInfo[t.format].color.type === 'unfilterable-float' - ); - }) - .beginSubcases() - .combine('addressModeU', kAddressModes) - .combine('addressModeV', kAddressModes) - ) - .beforeAllSubcases(t => { - if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { - t.selectDeviceOrSkipTestCase('float32-filterable'); - } - }) - .fn(t => { - const { format, addressModeU, addressModeV } = t.params; - const sampler = t.device.createSampler({ - addressModeU, - addressModeV, - minFilter: 'linear', - }); - const module = t.device.createShaderModule({ - code: ` +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +filter((t) => { + return ( + kTextureFormatInfo[t.format].color.type === 'float' || + kTextureFormatInfo[t.format].color.type === 'unfilterable-float'); + +}). +beginSubcases(). +combine('addressModeU', kAddressModes). +combine('addressModeV', kAddressModes) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); + if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { + t.selectDeviceOrSkipTestCase('float32-filterable'); + } +}). +fn((t) => { + const { format, addressModeU, addressModeV } = t.params; + const sampler = t.device.createSampler({ + addressModeU, + addressModeV, + minFilter: 'linear' + }); + const module = t.device.createShaderModule({ + code: ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var t : texture_2d; @@ -924,88 +927,86 @@ g.test('minFilter,linear') fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f { return textureSample(t, s, uv); } - `, - }); - const vertexCount = 6; - const instanceCount = kLinearRenderDim.reduce((sink, current) => sink * current); - const render = t.runFilterRenderPipeline( - sampler, - module, - format, - kLinearRenderDim, - vertexCount, - instanceCount - ); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: render }, - expectedColors(format, 'linear', addressModeU, addressModeV), - kLinearRenderDim - ); + ` }); + const vertexCount = 6; + const instanceCount = kLinearRenderDim.reduce((sink, current) => sink * current); + const render = t.runFilterRenderPipeline( + sampler, + module, + format, + kLinearRenderDim, + vertexCount, + instanceCount + ); + t.expectTexelViewComparisonIsOkInTexture( + { texture: render }, + expectedColors(format, 'linear', addressModeU, addressModeV), + kLinearRenderDim + ); +}); -g.test('mipmapFilter') - .desc( - ` +g.test('mipmapFilter'). +desc( + ` Test that for filterable formats, mipmapFilter modes correctly modifies the sampling. - format= {} - filterMode= {'nearest', 'linear'} ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .filter(t => { - return ( - kTextureFormatInfo[t.format].color.type === 'float' || - kTextureFormatInfo[t.format].color.type === 'unfilterable-float' - ); - }) - .beginSubcases() - .combine('filterMode', kMipmapFilterModes) - ) - .beforeAllSubcases(t => { - if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { - t.selectDeviceOrSkipTestCase('float32-filterable'); +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +filter((t) => { + return ( + kTextureFormatInfo[t.format].color.type === 'float' || + kTextureFormatInfo[t.format].color.type === 'unfilterable-float'); + +}). +beginSubcases(). +combine('filterMode', kMipmapFilterModes) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); + if (kTextureFormatInfo[t.params.format].color.type === 'unfilterable-float') { + t.selectDeviceOrSkipTestCase('float32-filterable'); + } +}). +fn((t) => { + const { format, filterMode } = t.params; + // Takes a 8x8/4x4 mipmapped texture and renders it on multiple quads with different UVs such + // that each instanced quad from left to right emulates moving the quad further and further from + // the camera. Each quad is then rendered to a single pixel in a 1-dimensional texture. Since + // the 8x8 is fully black and the 4x4 is fully white, we should see the pixels increase in + // brightness from left to right when sampling linearly, and jump from black to white when + // sampling for the nearest mip level. + const kTextureSize = 8; + const kRenderSize = 8; + + const sampler = t.device.createSampler({ + mipmapFilter: filterMode + }); + const sampleTexture = t.createTextureFromTexelViewsMultipleMipmaps( + [ + TexelView.fromTexelsAsColors(format, () => { + return { R: 0.0, G: 0.0, B: 0.0, A: 1.0 }; + }), + TexelView.fromTexelsAsColors(format, (_coords) => { + return { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }; + })], + + { + size: [kTextureSize, 1], + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST } - }) - .fn(t => { - const { format, filterMode } = t.params; - // Takes a 8x8/4x4 mipmapped texture and renders it on multiple quads with different UVs such - // that each instanced quad from left to right emulates moving the quad further and further from - // the camera. Each quad is then rendered to a single pixel in a 1-dimensional texture. Since - // the 8x8 is fully black and the 4x4 is fully white, we should see the pixels increase in - // brightness from left to right when sampling linearly, and jump from black to white when - // sampling for the nearest mip level. - const kTextureSize = 8; - const kRenderSize = 8; - - const sampler = t.device.createSampler({ - mipmapFilter: filterMode, - }); - const sampleTexture = t.createTextureFromTexelViewsMultipleMipmaps( - [ - TexelView.fromTexelsAsColors(format, () => { - return { R: 0.0, G: 0.0, B: 0.0, A: 1.0 }; - }), - TexelView.fromTexelsAsColors(format, coord => { - return { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }; - }), - ], - - { - size: [kTextureSize, 1], - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST, - } - ); - - const renderTexture = t.device.createTexture({ - format, - size: [kRenderSize, 1], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }); - const module = t.device.createShaderModule({ - code: ` + ); + const renderTexture = t.device.createTexture({ + format, + size: [kRenderSize, 1], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC + }); + const module = t.device.createShaderModule({ + code: ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var t : texture_2d; @@ -1039,63 +1040,63 @@ g.test('mipmapFilter') fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f { return textureSample(t, s, uv); } - `, - }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module, - entryPoint: 'vs_main', - }, - fragment: { - module, - entryPoint: 'fs_main', - targets: [{ format }], - }, - }); - const bindgroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: sampler }, - { binding: 1, resource: sampleTexture.createView() }, - ], - }); - const commandEncoder = t.device.createCommandEncoder(); - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTexture.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - renderPass.setPipeline(pipeline); - renderPass.setBindGroup(0, bindgroup); - renderPass.draw(6, kRenderSize); - renderPass.end(); - t.device.queue.submit([commandEncoder.finish()]); + ` + }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module, + entryPoint: 'vs_main' + }, + fragment: { + module, + entryPoint: 'fs_main', + targets: [{ format }] + } + }); + const bindgroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: sampler }, + { binding: 1, resource: sampleTexture.createView() }] - // Since mipmap filtering varies across different backends, we verify that the result exhibits - // filtered characteristics without strict value equalities via copies to a buffer. - const buffer = t.copyWholeTextureToNewBufferSimple(renderTexture, 0); - t.expectGPUBufferValuesPassCheck( - buffer, - actual => { - // Convert the buffer to texel view so we can do comparisons. - const layout = getTextureCopyLayout(format, '2d', [kRenderSize, 1, 1]); - const view = TexelView.fromTextureDataByReference(format, actual, { - bytesPerRow: layout.bytesPerRow, - rowsPerImage: layout.rowsPerImage, - subrectOrigin: [0, 0, 0], - subrectSize: [kRenderSize, 1, 1], - }); + }); + const commandEncoder = t.device.createCommandEncoder(); + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTexture.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] - // We only check the R component for the conditions, since all components should be equal if - // specified in the format. - switch (filterMode) { - case 'linear': { + }); + renderPass.setPipeline(pipeline); + renderPass.setBindGroup(0, bindgroup); + renderPass.draw(6, kRenderSize); + renderPass.end(); + t.device.queue.submit([commandEncoder.finish()]); + + // Since mipmap filtering varies across different backends, we verify that the result exhibits + // filtered characteristics without strict value equalities via copies to a buffer. + const buffer = t.copyWholeTextureToNewBufferSimple(renderTexture, 0); + t.expectGPUBufferValuesPassCheck( + buffer, + (actual) => { + // Convert the buffer to texel view so we can do comparisons. + const layout = getTextureCopyLayout(format, '2d', [kRenderSize, 1, 1]); + const view = TexelView.fromTextureDataByReference(format, actual, { + bytesPerRow: layout.bytesPerRow, + rowsPerImage: layout.rowsPerImage, + subrectOrigin: [0, 0, 0], + subrectSize: [kRenderSize, 1, 1] + }); + + // We only check the R component for the conditions, since all components should be equal if + // specified in the format. + switch (filterMode) { + case 'linear':{ // For 'linear' mode, we check that the resulting 1d image is monotonically increasing. for (let x = 1; x < kRenderSize; x++) { const { R: Ri } = view.color({ x: x - 1, y: 0, z: 0 }); @@ -1103,16 +1104,16 @@ g.test('mipmapFilter') if (Ri >= Rj) { return Error( 'Linear filtering on mipmaps should be a monotonically increasing sequence:\n' + - view.toString( - { x: 0, y: 0, z: 0 }, - { width: kRenderSize, height: 1, depthOrArrayLayers: 1 } - ) + view.toString( + { x: 0, y: 0, z: 0 }, + { width: kRenderSize, height: 1, depthOrArrayLayers: 1 } + ) ); } } break; } - case 'nearest': { + case 'nearest':{ // For 'nearest' mode, we check that the resulting 1d image changes from 0.0 to 1.0 // exactly once. let changes = 0; @@ -1126,18 +1127,17 @@ g.test('mipmapFilter') if (changes !== 1) { return Error( `Nearest filtering on mipmaps should change exacly once but found (${changes}):\n` + - view.toString( - { x: 0, y: 0, z: 0 }, - { width: kRenderSize, height: 1, depthOrArrayLayers: 1 } - ) + view.toString( + { x: 0, y: 0, z: 0 }, + { width: kRenderSize, height: 1, depthOrArrayLayers: 1 } + ) ); } break; } - } - - return undefined; - }, - { srcByteOffset: 0, type: Uint8Array, typedLength: buffer.size } - ); - }); + } + return undefined; + }, + { srcByteOffset: 0, type: Uint8Array, typedLength: buffer.size } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/lod_clamp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/lod_clamp.spec.js index b05896a34d9..07c36e85aa0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/lod_clamp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/sampling/lod_clamp.spec.js @@ -1,13 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests the behavior of LOD clamping (lodMinClamp, lodMaxClamp). TODO: - Write a test that can test the exact clamping behavior - Test a bunch of values, including very large/small ones. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; -export const g = makeTestGroup(GPUTest); +export const g = makeTestGroup(GPUTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/shader_module/compilation_info.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/shader_module/compilation_info.spec.js index 26a314fbc79..9f9a1fcba04 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/shader_module/compilation_info.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/shader_module/compilation_info.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` ShaderModule CompilationInfo tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { assert } from '../../../../common/util/util.js'; import { GPUTest } from '../../../gpu_test.js'; @@ -11,69 +10,69 @@ import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); const kValidShaderSources = [ - { - valid: true, - name: 'ascii', - _code: ` +{ + valid: true, + name: 'ascii', + _code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }, - { - valid: true, - name: 'unicode', - _code: ` + }` +}, +{ + valid: true, + name: 'unicode', + _code: ` // 頂点シェーダー 👩‍💻 @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }, -]; + }` +}]; + const kInvalidShaderSources = [ - { - valid: false, - name: 'ascii', - _errorLine: 4, - _code: ` +{ + valid: false, + name: 'ascii', + _errorLine: 4, + _code: ` @vertex fn main() -> @builtin(position) vec4 { // Expected Error: unknown function 'unknown' return unknown(0.0, 0.0, 0.0, 1.0); - }`, - }, - { - valid: false, - name: 'unicode', - _errorLine: 5, - _code: ` + }` +}, +{ + valid: false, + name: 'unicode', + _errorLine: 5, + _code: ` // 頂点シェーダー 👩‍💻 @vertex fn main() -> @builtin(position) vec4 { // Expected Error: unknown function 'unknown' return unknown(0.0, 0.0, 0.0, 1.0); - }`, - }, - { - valid: false, - name: 'carriage-return', - _errorLine: 5, - _code: - ` + }` +}, +{ + valid: false, + name: 'carriage-return', + _errorLine: 5, + _code: + ` @vertex fn main() -> @builtin(position) vec4 {` + - '\r\n' + - ` + '\r\n' + + ` // Expected Error: unknown function 'unknown' return unknown(0.0, 0.0, 0.0, 1.0); - }`, - }, -]; + }` +}]; + const kAllShaderSources = [...kValidShaderSources, ...kInvalidShaderSources]; // This is the source the sourcemap refers to. -const kOriginalSource = new Array(20) - .fill(0) - .map((_, i) => `original line ${i}`) - .join('\n'); +const kOriginalSource = new Array(20). +fill(0). +map((_, i) => `original line ${i}`). +join('\n'); const kSourceMaps = { none: undefined, @@ -85,12 +84,12 @@ const kSourceMaps = { sources: ['myCode'], sourcesContent: [kOriginalSource], names: ['myMain', 'wasUnknown'], - mappings: ';kBAYkCA,OACd;SAElB;gBAKOC;gBACAA', + mappings: ';kBAYkCA,OACd;SAElB;gBAKOC;gBACAA' }, // not a valid sourcemap invalid: { version: -123, - notAnything: {}, + notAnything: {} }, // The correct format but this data is for lines 11,12 even // though the source only has 5 or 6 lines @@ -99,14 +98,14 @@ const kSourceMaps = { sources: ['myCode'], sourcesContent: [kOriginalSource], names: ['myMain'], - mappings: ';;;;;;;;;;kBAYkCA,OACd;SAElB', - }, + mappings: ';;;;;;;;;;kBAYkCA,OACd;SAElB' + } }; const kSourceMapsKeys = keysOf(kSourceMaps); -g.test('getCompilationInfo_returns') - .desc( - ` +g.test('getCompilationInfo_returns'). +desc( + ` Test that getCompilationInfo() can be called on any ShaderModule. Note: sourcemaps are not used in the WebGPU API. We are only testing that @@ -117,47 +116,47 @@ g.test('getCompilationInfo_returns') - Test for shader modules containing only ASCII and those containing unicode characters. - Test that the compilation info for valid shader modules contains no errors. - Test that the compilation info for invalid shader modules contains at least one error.` - ) - .params(u => - u.combineWithParams(kAllShaderSources).beginSubcases().combine('sourceMapName', kSourceMapsKeys) - ) - .fn(async t => { - const { _code, valid, sourceMapName } = t.params; +). +params((u) => +u.combineWithParams(kAllShaderSources).beginSubcases().combine('sourceMapName', kSourceMapsKeys) +). +fn(async (t) => { + const { _code, valid, sourceMapName } = t.params; - const shaderModule = t.expectGPUError( - 'validation', - () => { - const sourceMap = kSourceMaps[sourceMapName]; - return t.device.createShaderModule({ code: _code, ...(sourceMap && { sourceMap }) }); - }, - !valid - ); + const shaderModule = t.expectGPUError( + 'validation', + () => { + const sourceMap = kSourceMaps[sourceMapName]; + return t.device.createShaderModule({ code: _code, ...(sourceMap && { sourceMap }) }); + }, + !valid + ); - const info = await shaderModule.getCompilationInfo(); + const info = await shaderModule.getCompilationInfo(); - t.expect( - info instanceof GPUCompilationInfo, - 'Expected a GPUCompilationInfo object to be returned' - ); + t.expect( + info instanceof GPUCompilationInfo, + 'Expected a GPUCompilationInfo object to be returned' + ); - // Expect that we get zero error messages from a valid shader. - // Message types other than errors are OK. - let errorCount = 0; - for (const message of info.messages) { - if (message.type === 'error') { - errorCount++; - } + // Expect that we get zero error messages from a valid shader. + // Message types other than errors are OK. + let errorCount = 0; + for (const message of info.messages) { + if (message.type === 'error') { + errorCount++; } - if (valid) { - t.expect(errorCount === 0, "Expected zero GPUCompilationMessages of type 'error'"); - } else { - t.expect(errorCount > 0, "Expected at least one GPUCompilationMessages of type 'error'"); - } - }); + } + if (valid) { + t.expect(errorCount === 0, "Expected zero GPUCompilationMessages of type 'error'"); + } else { + t.expect(errorCount > 0, "Expected at least one GPUCompilationMessages of type 'error'"); + } +}); -g.test('line_number_and_position') - .desc( - ` +g.test('line_number_and_position'). +desc( + ` Test that line numbers reported by compilationInfo either point at an appropriate line and position or at 0:0, indicating an unknown position. @@ -167,52 +166,52 @@ g.test('line_number_and_position') - Test for invalid shader modules containing containing at least one error. - Test for shader modules containing only ASCII and those containing unicode characters.` - ) - .params(u => - u - .combineWithParams(kInvalidShaderSources) - .beginSubcases() - .combine('sourceMapName', kSourceMapsKeys) - ) - .fn(async t => { - const { _code, _errorLine, sourceMapName } = t.params; +). +params((u) => +u. +combineWithParams(kInvalidShaderSources). +beginSubcases(). +combine('sourceMapName', kSourceMapsKeys) +). +fn(async (t) => { + const { _code, _errorLine, sourceMapName } = t.params; - const shaderModule = t.expectGPUError('validation', () => { - const sourceMap = kSourceMaps[sourceMapName]; - return t.device.createShaderModule({ code: _code, ...(sourceMap && { sourceMap }) }); - }); - - const info = await shaderModule.getCompilationInfo(); - - let foundAppropriateError = false; - for (const message of info.messages) { - if (message.type === 'error') { - // Some backends may not be able to indicate a precise location for the error. In those - // cases a line and position of 0 should be reported. - // If a line is reported, it should point at the correct line (1-based). - t.expect( - (message.lineNum === 0) === (message.linePos === 0), - "GPUCompilationMessages that don't report a line number should not report a line position." - ); - - if (message.lineNum === 0 || message.lineNum === _errorLine) { - foundAppropriateError = true; - - // Various backends may choose to report the error at different positions within the line, - // so it's difficult to meaningfully validate them. - break; - } - } - } - t.expect( - foundAppropriateError, - 'Expected to find an error which corresponded with the erroneous line' - ); + const shaderModule = t.expectGPUError('validation', () => { + const sourceMap = kSourceMaps[sourceMapName]; + return t.device.createShaderModule({ code: _code, ...(sourceMap && { sourceMap }) }); }); -g.test('offset_and_length') - .desc( - `Test that message offsets and lengths are valid and align with any reported lineNum and linePos. + const info = await shaderModule.getCompilationInfo(); + + let foundAppropriateError = false; + for (const message of info.messages) { + if (message.type === 'error') { + // Some backends may not be able to indicate a precise location for the error. In those + // cases a line and position of 0 should be reported. + // If a line is reported, it should point at the correct line (1-based). + t.expect( + message.lineNum === 0 === (message.linePos === 0), + "GPUCompilationMessages that don't report a line number should not report a line position." + ); + + if (message.lineNum === 0 || message.lineNum === _errorLine) { + foundAppropriateError = true; + + // Various backends may choose to report the error at different positions within the line, + // so it's difficult to meaningfully validate them. + break; + } + } + } + t.expect( + foundAppropriateError, + 'Expected to find an error which corresponded with the erroneous line' + ); +}); + +g.test('offset_and_length'). +desc( + `Test that message offsets and lengths are valid and align with any reported lineNum and linePos. Note: sourcemaps are not used in the WebGPU API. We are only testing that browser that happen to use them don't fail or crash if the sourcemap is @@ -220,46 +219,46 @@ g.test('offset_and_length') - Test for valid and invalid shader modules. - Test for shader modules containing only ASCII and those containing unicode characters.` - ) - .params(u => - u.combineWithParams(kAllShaderSources).beginSubcases().combine('sourceMapName', kSourceMapsKeys) - ) - .fn(async t => { - const { _code, valid, sourceMapName } = t.params; +). +params((u) => +u.combineWithParams(kAllShaderSources).beginSubcases().combine('sourceMapName', kSourceMapsKeys) +). +fn(async (t) => { + const { _code, valid, sourceMapName } = t.params; - const shaderModule = t.expectGPUError( - 'validation', - () => { - const sourceMap = kSourceMaps[sourceMapName]; - return t.device.createShaderModule({ code: _code, ...(sourceMap && { sourceMap }) }); - }, - !valid + const shaderModule = t.expectGPUError( + 'validation', + () => { + const sourceMap = kSourceMaps[sourceMapName]; + return t.device.createShaderModule({ code: _code, ...(sourceMap && { sourceMap }) }); + }, + !valid + ); + + const info = await shaderModule.getCompilationInfo(); + + for (const message of info.messages) { + // Any offsets and lengths should reference valid spans of the shader code. + t.expect(message.offset <= _code.length, 'Message offset should be within the shader source'); + t.expect( + message.offset + message.length <= _code.length, + 'Message offset and length should be within the shader source' ); - const info = await shaderModule.getCompilationInfo(); - - for (const message of info.messages) { - // Any offsets and lengths should reference valid spans of the shader code. - t.expect(message.offset <= _code.length, 'Message offset should be within the shader source'); - t.expect( - message.offset + message.length <= _code.length, - 'Message offset and length should be within the shader source' - ); - - // If a valid line number and position are given, the offset should point the the same - // location in the shader source. - if (message.lineNum !== 0 && message.linePos !== 0) { - let lineOffset = 0; - for (let i = 0; i < message.lineNum - 1; ++i) { - lineOffset = _code.indexOf('\n', lineOffset); - assert(lineOffset !== -1); - lineOffset += 1; - } - - t.expect( - message.offset === lineOffset + message.linePos - 1, - 'lineNum and linePos should point to the same location as offset' - ); + // If a valid line number and position are given, the offset should point the the same + // location in the shader source. + if (message.lineNum !== 0 && message.linePos !== 0) { + let lineOffset = 0; + for (let i = 0; i < message.lineNum - 1; ++i) { + lineOffset = _code.indexOf('\n', lineOffset); + assert(lineOffset !== -1); + lineOffset += 1; } + + t.expect( + message.offset === lineOffset + message.linePos - 1, + 'lineNum and linePos should point to the same location as offset' + ); } - }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/format_reinterpretation.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/format_reinterpretation.spec.js index b4af4f28fd7..a3c0c280e98 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/format_reinterpretation.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/format_reinterpretation.spec.js @@ -1,38 +1,38 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test texture views can reinterpret the format of the original texture. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kRenderableColorTextureFormats, kRegularTextureFormats, - viewCompatible, -} from '../../../format_info.js'; + viewCompatible } from + +'../../../format_info.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { TexelView } from '../../../util/texture/texel_view.js'; export const g = makeTestGroup(TextureTestMixin(GPUTest)); const kColors = [ - { R: 1.0, G: 0.0, B: 0.0, A: 0.8 }, - { R: 0.0, G: 1.0, B: 0.0, A: 0.7 }, - { R: 0.0, G: 0.0, B: 0.0, A: 0.6 }, - { R: 0.0, G: 0.0, B: 0.0, A: 0.5 }, - { R: 1.0, G: 1.0, B: 1.0, A: 0.4 }, - { R: 0.7, G: 0.0, B: 0.0, A: 0.3 }, - { R: 0.0, G: 0.8, B: 0.0, A: 0.2 }, - { R: 0.0, G: 0.0, B: 0.9, A: 0.1 }, - { R: 0.1, G: 0.2, B: 0.0, A: 0.3 }, - { R: 0.4, G: 0.3, B: 0.6, A: 0.8 }, -]; +{ R: 1.0, G: 0.0, B: 0.0, A: 0.8 }, +{ R: 0.0, G: 1.0, B: 0.0, A: 0.7 }, +{ R: 0.0, G: 0.0, B: 0.0, A: 0.6 }, +{ R: 0.0, G: 0.0, B: 0.0, A: 0.5 }, +{ R: 1.0, G: 1.0, B: 1.0, A: 0.4 }, +{ R: 0.7, G: 0.0, B: 0.0, A: 0.3 }, +{ R: 0.0, G: 0.8, B: 0.0, A: 0.2 }, +{ R: 0.0, G: 0.0, B: 0.9, A: 0.1 }, +{ R: 0.1, G: 0.2, B: 0.0, A: 0.3 }, +{ R: 0.4, G: 0.3, B: 0.6, A: 0.8 }]; + const kTextureSize = 16; function makeInputTexelView(format) { return TexelView.fromTexelsAsColors( format, - coords => { + (coords) => { const pixelPos = coords.y * kTextureSize + coords.x; return kColors[pixelPos % kColors.length]; }, @@ -40,7 +40,11 @@ function makeInputTexelView(format) { ); } -function makeBlitPipeline(device, format, multisample) { +function makeBlitPipeline( +device, +format, +multisample) +{ return device.createRenderPipeline({ layout: 'auto', vertex: { @@ -55,15 +59,15 @@ function makeBlitPipeline(device, format, multisample) { vec2( 1.0, -1.0), vec2( 1.0, 1.0)); return vec4(pos[VertexIndex], 0.0, 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: - multisample.sample > 1 - ? device.createShaderModule({ - code: ` + multisample.sample > 1 ? + device.createShaderModule({ + code: ` @group(0) @binding(0) var src: texture_multisampled_2d; @fragment fn main(@builtin(position) coord: vec4) -> @location(0) vec4 { var result : vec4; @@ -71,62 +75,64 @@ function makeBlitPipeline(device, format, multisample) { result = result + textureLoad(src, vec2(coord.xy), i); } return result * ${1 / multisample.sample}; - }`, - }) - : device.createShaderModule({ - code: ` + }` + }) : + device.createShaderModule({ + code: ` @group(0) @binding(0) var src: texture_2d; @fragment fn main(@builtin(position) coord: vec4) -> @location(0) vec4 { return textureLoad(src, vec2(coord.xy), 0); - }`, - }), + }` + }), entryPoint: 'main', - targets: [{ format }], + targets: [{ format }] }, multisample: { - count: multisample.render, - }, + count: multisample.render + } }); } -g.test('texture_binding') - .desc(`Test that a regular texture allocated as 'format' is correctly sampled as 'viewFormat'.`) - .params(u => - u // - .combine('format', kRegularTextureFormats) - .combine('viewFormat', kRegularTextureFormats) - .filter( - ({ format, viewFormat }) => format !== viewFormat && viewCompatible(format, viewFormat) - ) - ) - .beforeAllSubcases(t => { - const { format, viewFormat } = t.params; - t.skipIfTextureFormatNotSupported(format, viewFormat); - }) - .fn(t => { - const { format, viewFormat } = t.params; +g.test('texture_binding'). +desc(`Test that a regular texture allocated as 'format' is correctly sampled as 'viewFormat'.`). +params((u) => +u // +.combine('format', kRegularTextureFormats). +combine('viewFormat', kRegularTextureFormats). +filter( + ({ format, viewFormat }) => format !== viewFormat && viewCompatible(format, viewFormat) +) +). +beforeAllSubcases((t) => { + const { format, viewFormat } = t.params; + t.skipIfTextureFormatNotSupported(format, viewFormat); + // Compatibility mode does not support format reinterpretation. + t.skipIf(t.isCompatibility); +}). +fn((t) => { + const { format, viewFormat } = t.params; - // Make an input texel view. - const inputTexelView = makeInputTexelView(format); + // Make an input texel view. + const inputTexelView = makeInputTexelView(format); - // Create the initial texture with the contents if the input texel view. - const texture = t.createTextureFromTexelView(inputTexelView, { - size: [kTextureSize, kTextureSize], - usage: GPUTextureUsage.TEXTURE_BINDING, - viewFormats: [viewFormat], - }); + // Create the initial texture with the contents if the input texel view. + const texture = t.createTextureFromTexelView(inputTexelView, { + size: [kTextureSize, kTextureSize], + usage: GPUTextureUsage.TEXTURE_BINDING, + viewFormats: [viewFormat] + }); - // Reinterpret the texture as the view format. - // Make a texel view of the format that also reinterprets the data. - const reinterpretedView = texture.createView({ format: viewFormat }); - const reinterpretedTexelView = TexelView.fromTexelsAsBytes(viewFormat, inputTexelView.bytes); + // Reinterpret the texture as the view format. + // Make a texel view of the format that also reinterprets the data. + const reinterpretedView = texture.createView({ format: viewFormat }); + const reinterpretedTexelView = TexelView.fromTexelsAsBytes(viewFormat, inputTexelView.bytes); - // Create a pipeline to write data out to rgba8unorm. - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + // Create a pipeline to write data out to rgba8unorm. + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` @group(0) @binding(0) var src: texture_2d; @group(0) @binding(1) var dst: texture_storage_2d; @compute @workgroup_size(1, 1) fn main( @@ -134,138 +140,181 @@ g.test('texture_binding') ) { var coord = vec2(global_id.xy); textureStore(dst, coord, textureLoad(src, coord, 0)); - }`, - }), - entryPoint: 'main', - }, - }); - - // Create an rgba8unorm output texture. - const outputTexture = t.trackForCleanup( - t.device.createTexture({ - format: 'rgba8unorm', - size: [kTextureSize, kTextureSize], - usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.COPY_SRC, - }) - ); - - // Execute a compute pass to load data from the reinterpreted view and - // write out to the rgba8unorm texture. - const commandEncoder = t.device.createCommandEncoder(); - const pass = commandEncoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup( - 0, - t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: reinterpretedView, - }, - { - binding: 1, - resource: outputTexture.createView(), - }, - ], - }) - ); - - pass.dispatchWorkgroups(kTextureSize, kTextureSize); - pass.end(); - t.device.queue.submit([commandEncoder.finish()]); - - t.expectTexelViewComparisonIsOkInTexture( - { texture: outputTexture }, - TexelView.fromTexelsAsColors('rgba8unorm', reinterpretedTexelView.color, { - clampToFormatRange: true, + }` }), - [kTextureSize, kTextureSize] - ); + entryPoint: 'main' + } }); -g.test('render_and_resolve_attachment') - .desc( - `Test that a color render attachment allocated as 'format' is correctly rendered to as 'viewFormat', + // Create an rgba8unorm output texture. + const outputTexture = t.trackForCleanup( + t.device.createTexture({ + format: 'rgba8unorm', + size: [kTextureSize, kTextureSize], + usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.COPY_SRC + }) + ); + + // Execute a compute pass to load data from the reinterpreted view and + // write out to the rgba8unorm texture. + const commandEncoder = t.device.createCommandEncoder(); + const pass = commandEncoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup( + 0, + t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: reinterpretedView + }, + { + binding: 1, + resource: outputTexture.createView() + }] + + }) + ); + pass.dispatchWorkgroups(kTextureSize, kTextureSize); + pass.end(); + t.device.queue.submit([commandEncoder.finish()]); + + t.expectTexelViewComparisonIsOkInTexture( + { texture: outputTexture }, + TexelView.fromTexelsAsColors('rgba8unorm', reinterpretedTexelView.color, { + clampToFormatRange: true + }), + [kTextureSize, kTextureSize] + ); +}); + +g.test('render_and_resolve_attachment'). +desc( + `Test that a color render attachment allocated as 'format' is correctly rendered to as 'viewFormat', and resolved to an attachment allocated as 'format' viewed as 'viewFormat'. Other combinations aren't possible because the render and resolve targets must both match in view format and match in base format.` - ) - .params(u => - u // - .combine('format', kRenderableColorTextureFormats) - .combine('viewFormat', kRenderableColorTextureFormats) - .filter( - ({ format, viewFormat }) => format !== viewFormat && viewCompatible(format, viewFormat) - ) - .combine('sampleCount', [1, 4]) - ) - .beforeAllSubcases(t => { - const { format, viewFormat } = t.params; - t.skipIfTextureFormatNotSupported(format, viewFormat); - }) - .fn(t => { - const { format, viewFormat, sampleCount } = t.params; +). +params((u) => +u // +.combine('format', kRenderableColorTextureFormats). +combine('viewFormat', kRenderableColorTextureFormats). +filter( + ({ format, viewFormat }) => format !== viewFormat && viewCompatible(format, viewFormat) +). +combine('sampleCount', [1, 4]) +). +beforeAllSubcases((t) => { + const { format, viewFormat } = t.params; + t.skipIfTextureFormatNotSupported(format, viewFormat); + // Compatibility mode does not support format reinterpretation. + t.skipIf(t.isCompatibility); +}). +fn((t) => { + const { format, viewFormat, sampleCount } = t.params; - // Make an input texel view. - const inputTexelView = makeInputTexelView(format); + // Make an input texel view. + const inputTexelView = makeInputTexelView(format); - // Create the renderTexture as |format|. - const renderTexture = t.trackForCleanup( - t.device.createTexture({ - format, - size: [kTextureSize, kTextureSize], - usage: - GPUTextureUsage.RENDER_ATTACHMENT | - (sampleCount > 1 ? GPUTextureUsage.TEXTURE_BINDING : GPUTextureUsage.COPY_SRC), - viewFormats: [viewFormat], - sampleCount, - }) - ); - - const resolveTexture = - sampleCount === 1 - ? undefined - : t.trackForCleanup( - t.device.createTexture({ - format, - size: [kTextureSize, kTextureSize], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - viewFormats: [viewFormat], - }) - ); - - // Create the sample source with the contents of the input texel view. - // We will sample this texture into |renderTexture|. It uses the same format to keep the same - // number of bits of precision. - const sampleSource = t.createTextureFromTexelView(inputTexelView, { + // Create the renderTexture as |format|. + const renderTexture = t.trackForCleanup( + t.device.createTexture({ + format, size: [kTextureSize, kTextureSize], - usage: GPUTextureUsage.TEXTURE_BINDING, - }); + usage: + GPUTextureUsage.RENDER_ATTACHMENT | ( + sampleCount > 1 ? GPUTextureUsage.TEXTURE_BINDING : GPUTextureUsage.COPY_SRC), + viewFormats: [viewFormat], + sampleCount + }) + ); - // Reinterpret the renderTexture as |viewFormat|. - const reinterpretedRenderView = renderTexture.createView({ format: viewFormat }); - const reinterpretedResolveView = - resolveTexture && resolveTexture.createView({ format: viewFormat }); + const resolveTexture = + sampleCount === 1 ? + undefined : + t.trackForCleanup( + t.device.createTexture({ + format, + size: [kTextureSize, kTextureSize], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + viewFormats: [viewFormat] + }) + ); - // Create a pipeline to blit a src texture to the render attachment. - const pipeline = makeBlitPipeline(t.device, viewFormat, { - sample: 1, - render: sampleCount, - }); + // Create the sample source with the contents of the input texel view. + // We will sample this texture into |renderTexture|. It uses the same format to keep the same + // number of bits of precision. + const sampleSource = t.createTextureFromTexelView(inputTexelView, { + size: [kTextureSize, kTextureSize], + usage: GPUTextureUsage.TEXTURE_BINDING + }); - // Execute a render pass to sample |sampleSource| into |texture| viewed as |viewFormat|. - const commandEncoder = t.device.createCommandEncoder(); + // Reinterpret the renderTexture as |viewFormat|. + const reinterpretedRenderView = renderTexture.createView({ format: viewFormat }); + const reinterpretedResolveView = + resolveTexture && resolveTexture.createView({ format: viewFormat }); + + // Create a pipeline to blit a src texture to the render attachment. + const pipeline = makeBlitPipeline(t.device, viewFormat, { + sample: 1, + render: sampleCount + }); + + // Execute a render pass to sample |sampleSource| into |texture| viewed as |viewFormat|. + const commandEncoder = t.device.createCommandEncoder(); + const pass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: reinterpretedRenderView, + resolveTarget: reinterpretedResolveView, + loadOp: 'load', + storeOp: 'store' + }] + + }); + pass.setPipeline(pipeline); + pass.setBindGroup( + 0, + t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: sampleSource.createView() + }] + + }) + ); + pass.draw(6); + pass.end(); + + // If the render target is multisampled, we'll manually resolve it to check + // the contents. + const singleSampleRenderTexture = resolveTexture ? + t.trackForCleanup( + t.device.createTexture({ + format, + size: [kTextureSize, kTextureSize], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }) + ) : + renderTexture; + + if (resolveTexture) { + // Create a pipeline to blit the multisampled render texture to a non-multisample texture. + // We are basically performing a manual resolve step to the same format as the original + // render texture to check its contents. + const pipeline = makeBlitPipeline(t.device, format, { sample: sampleCount, render: 1 }); const pass = commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: reinterpretedRenderView, - resolveTarget: reinterpretedResolveView, - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: singleSampleRenderTexture.createView(), + loadOp: 'load', + storeOp: 'store' + }] + }); pass.setPipeline(pipeline); pass.setBindGroup( @@ -273,85 +322,41 @@ in view format and match in base format.` t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: sampleSource.createView(), - }, - ], + { + binding: 0, + resource: renderTexture.createView() + }] + }) ); - pass.draw(6); pass.end(); + } - // If the render target is multisampled, we'll manually resolve it to check - // the contents. - const singleSampleRenderTexture = resolveTexture - ? t.trackForCleanup( - t.device.createTexture({ - format, - size: [kTextureSize, kTextureSize], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }) - ) - : renderTexture; + // Submit the commands. + t.device.queue.submit([commandEncoder.finish()]); - if (resolveTexture) { - // Create a pipeline to blit the multisampled render texture to a non-multisample texture. - // We are basically performing a manual resolve step to the same format as the original - // render texture to check its contents. - const pipeline = makeBlitPipeline(t.device, format, { sample: sampleCount, render: 1 }); - const pass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: singleSampleRenderTexture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - pass.setPipeline(pipeline); - pass.setBindGroup( - 0, - t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: renderTexture.createView(), - }, - ], - }) - ); + // Check the rendered contents. + const renderViewTexels = TexelView.fromTexelsAsColors(viewFormat, inputTexelView.color, { + clampToFormatRange: true + }); + t.expectTexelViewComparisonIsOkInTexture( + { texture: singleSampleRenderTexture }, + renderViewTexels, + [kTextureSize, kTextureSize], + { maxDiffULPsForNormFormat: 2 } + ); - pass.draw(6); - pass.end(); - } - - // Submit the commands. - t.device.queue.submit([commandEncoder.finish()]); - - // Check the rendered contents. - const renderViewTexels = TexelView.fromTexelsAsColors(viewFormat, inputTexelView.color, { - clampToFormatRange: true, + // Check the resolved contents. + if (resolveTexture) { + const resolveView = TexelView.fromTexelsAsColors(viewFormat, renderViewTexels.color, { + clampToFormatRange: true }); t.expectTexelViewComparisonIsOkInTexture( - { texture: singleSampleRenderTexture }, - renderViewTexels, + { texture: resolveTexture }, + resolveView, [kTextureSize, kTextureSize], { maxDiffULPsForNormFormat: 2 } ); - - // Check the resolved contents. - if (resolveTexture) { - const resolveView = TexelView.fromTexelsAsColors(viewFormat, renderViewTexels.color, { - clampToFormatRange: true, - }); - t.expectTexelViewComparisonIsOkInTexture( - { texture: resolveTexture }, - resolveView, - [kTextureSize, kTextureSize], - { maxDiffULPsForNormFormat: 2 } - ); - } - }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/read.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/read.spec.js index 96884efec51..193c3074e1d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/read.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/read.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test the result of reading textures through texture views with various options. All x= every possible view read method: { @@ -14,26 +14,25 @@ All x= every possible view read method: { Format reinterpretation is not tested here. It is in format_reinterpretation.spec.ts. TODO: Write helper for this if not already available (see resource_init, buffer_sync_test for related code). -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('format') - .desc( - `Views of every allowed format. +g.test('format'). +desc( + `Views of every allowed format. - x= every texture format - x= sampleCount {1, 4} if valid - x= every possible view read method (see above) ` - ) - .unimplemented(); +). +unimplemented(); -g.test('dimension') - .desc( - `Views of every allowed dimension. +g.test('dimension'). +desc( + `Views of every allowed dimension. - x= a representative subset of formats - x= {every texture dimension} x {every valid view dimension} @@ -41,17 +40,17 @@ g.test('dimension') - x= sampleCount {1, 4} if valid - x= every possible view read method (see above) ` - ) - .unimplemented(); +). +unimplemented(); -g.test('aspect') - .desc( - `Views of every allowed aspect of depth/stencil textures. +g.test('aspect'). +desc( + `Views of every allowed aspect of depth/stencil textures. - x= every depth/stencil format - x= {"all", "stencil-only", "depth-only"} where valid for the format - x= sampleCount {1, 4} if valid - x= every possible view read method (see above) ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/write.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/write.spec.js index 3a47c0360eb..5b52d9d0b21 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/write.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/texture_view/write.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test the result of writing textures through texture views with various options. All x= every possible view write method: { @@ -12,26 +12,25 @@ All x= every possible view write method: { Format reinterpretation is not tested here. It is in format_reinterpretation.spec.ts. TODO: Write helper for this if not already available (see resource_init, buffer_sync_test for related code). -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('format') - .desc( - `Views of every allowed format. +g.test('format'). +desc( + `Views of every allowed format. - x= every texture format - x= sampleCount {1, 4} if valid - x= every possible view write method (see above) ` - ) - .unimplemented(); +). +unimplemented(); -g.test('dimension') - .desc( - `Views of every allowed dimension. +g.test('dimension'). +desc( + `Views of every allowed dimension. - x= a representative subset of formats - x= {every texture dimension} x {every valid view dimension} @@ -39,17 +38,17 @@ g.test('dimension') - x= sampleCount {1, 4} if valid - x= every possible view write method (see above) ` - ) - .unimplemented(); +). +unimplemented(); -g.test('aspect') - .desc( - `Views of every allowed aspect of depth/stencil textures. +g.test('aspect'). +desc( + `Views of every allowed aspect of depth/stencil textures. - x= every depth/stencil format - x= {"all", "stencil-only", "depth-only"} where valid for the format - x= sampleCount {1, 4} if valid - x= every possible view write method (see above) ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/uncapturederror.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/uncapturederror.spec.js index acd39ae972f..3c7615f9611 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/uncapturederror.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/uncapturederror.spec.js @@ -1,35 +1,34 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for GPUDevice.onuncapturederror. -`; -import { Fixture } from '../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; export const g = makeTestGroup(Fixture); -g.test('constructor') - .desc( - `GPUUncapturedErrorEvent constructor options (also tests constructing GPUOutOfMemoryError/GPUValidationError)` - ) - .unimplemented(); +g.test('constructor'). +desc( + `GPUUncapturedErrorEvent constructor options (also tests constructing GPUOutOfMemoryError/GPUValidationError)` +). +unimplemented(); -g.test('iff_uncaptured') - .desc( - `{validation, out-of-memory} error should fire uncapturederror iff not captured by a scope.` - ) - .unimplemented(); +g.test('iff_uncaptured'). +desc( + `{validation, out-of-memory} error should fire uncapturederror iff not captured by a scope.` +). +unimplemented(); -g.test('only_original_device_is_event_target') - .desc( - `Original GPUDevice objects are EventTargets and have onuncapturederror, but +g.test('only_original_device_is_event_target'). +desc( + `Original GPUDevice objects are EventTargets and have onuncapturederror, but deserialized GPUDevices do not.` - ) - .unimplemented(); +). +unimplemented(); -g.test('uncapturederror_from_non_originating_thread') - .desc( - `Uncaptured errors on any thread should always propagate to the original GPUDevice object +g.test('uncapturederror_from_non_originating_thread'). +desc( + `Uncaptured errors on any thread should always propagate to the original GPUDevice object (since deserialized ones don't have EventTarget/onuncapturederror).` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/correctness.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/correctness.spec.js index 4b54604e1ae..0973299a73e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/correctness.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/correctness.spec.js @@ -1,22 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: Test more corner case values for Float16 / Float32 (INF, NaN, ...) and reduce the float tolerance. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert, filterUniqueValueTestVariants, makeValueTestVariant, memcpy, - unreachable, -} from '../../../../common/util/util.js'; + unreachable } from +'../../../../common/util/util.js'; import { kPerStageBindingLimits, kVertexFormatInfo, - kVertexFormats, -} from '../../../capability_info.js'; + kVertexFormats } from +'../../../capability_info.js'; import { GPUTest } from '../../../gpu_test.js'; import { float32ToFloat16Bits, normalizedIntegerAsFloat } from '../../../util/conversion.js'; import { align, clamp } from '../../../util/math.js'; @@ -29,33 +28,83 @@ import { align, clamp } from '../../../util/math.js'; // VertexBuffer<{arrayStride: number}, {format: VertexFormat}> // VertexAttrib<{format: VertexFormat}> -function mapBufferAttribs(buffer, f) { + + + + + + + + + + + +function mapBufferAttribs( +buffer, +f) +{ const newAttributes = []; for (const a of buffer.attributes) { newAttributes.push({ shaderLocation: a.shaderLocation, - ...f(buffer, a), + ...f(buffer, a) }); } return { ...buffer, attributes: newAttributes }; } -function mapStateAttribs(buffers, f) { - return buffers.map(b => mapBufferAttribs(b, f)); +function mapStateAttribs( +buffers, +f) +{ + return buffers.map((b) => mapBufferAttribs(b, f)); } +function makeRgb10a2(rgba) { + const [r, g, b, a] = rgba; + assert((r & 0x3ff) === r); + assert((g & 0x3ff) === g); + assert((b & 0x3ff) === b); + assert((a & 0x3) === a); + return r | g << 10 | b << 20 | a << 30; +} + +function normalizeRgb10a2(rgba, index) { + const normalizationFactor = index % 4 === 3 ? 3 : 1023; + return rgba / normalizationFactor; +} + + + + + + + + + + + + + class VertexStateTest extends GPUTest { // Generate for VS + FS (entrypoints vsMain / fsMain) that for each attribute will check that its // value corresponds to what's expected (as provided by a uniform buffer per attribute) and then // renders each vertex at position (vertexIndex, instanceindex) with either 1 (success) or // a negative number corresponding to the check number (in case you need to debug a failure). makeTestWGSL( - buffers, + buffers, - vertexCount, - instanceCount - ) { + + + + + + + + vertexCount, + instanceCount) + { // In the base WebGPU spec maxVertexAttributes is larger than maxUniformBufferPerStage. We'll // use a combination of uniform and storage buffers to cover all possible attributes. This // happens to work because maxUniformBuffer + maxStorageBuffer = 12 + 8 = 20 which is larger @@ -65,7 +114,7 @@ class VertexStateTest extends GPUTest { const maxUniformBuffers = this.getDefaultLimit(kPerStageBindingLimits['uniformBuf'].maxLimit); assert( maxUniformBuffers + this.getDefaultLimit(kPerStageBindingLimits['storageBuf'].maxLimit) >= - this.device.limits.maxVertexAttributes + this.device.limits.maxVertexAttributes ); let vsInputs = ''; @@ -112,13 +161,13 @@ class VertexStateTest extends GPUTest { // Check each component individually, with special handling of tolerance for floats. const attribComponent = - shaderComponentCount === 1 ? `input.attrib${i}` : `input.attrib${i}[${component}]`; + shaderComponentCount === 1 ? `input.attrib${i}` : `input.attrib${i}[${component}]`; const providedData = `providedData${i}.data[${indexBuiltin}][${component}]`; if (format.type === 'uint' || format.type === 'sint') { vsChecks += ` check(${attribComponent} == ${providedData});\n`; } else { vsChecks += ` check(floatsSimilar(${attribComponent}, ${providedData}, f32(${ - a.floatTolerance ?? 0 + a.floatTolerance ?? 0 })));\n`; } } @@ -180,13 +229,21 @@ struct VSOutputs { } makeTestPipeline( - buffers, + buffers, - vertexCount, - instanceCount - ) { + + + + + + + + + vertexCount, + instanceCount) + { const module = this.device.createShaderModule({ - code: this.makeTestWGSL(buffers, vertexCount, instanceCount), + code: this.makeTestWGSL(buffers, vertexCount, instanceCount) }); const bufferLayouts = []; @@ -199,42 +256,48 @@ struct VSOutputs { vertex: { module, entryPoint: 'vsMain', - buffers: bufferLayouts, + buffers: bufferLayouts }, primitive: { - topology: 'point-list', + topology: 'point-list' }, fragment: { module, entryPoint: 'fsMain', targets: [ - { - format: 'r32sint', - }, - ], - }, + { + format: 'r32sint' + }] + + } }); } // Runs the render pass drawing points in a vertexCount*instanceCount rectangle, then check each // of produced a value of 1 which means that the tests in the shader passed. - submitRenderPass(pipeline, buffers, expectedData, vertexCount, instanceCount) { + submitRenderPass( + pipeline, + buffers, + expectedData, + vertexCount, + instanceCount) + { const testTexture = this.device.createTexture({ format: 'r32sint', size: [vertexCount, instanceCount], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: testTexture.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: testTexture.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + }); pass.setPipeline(pipeline); @@ -249,7 +312,7 @@ struct VSOutputs { this.expectSingleColor(testTexture, 'r32sint', { size: [vertexCount, instanceCount, 1], - exp: { R: 1 }, + exp: { R: 1 } }); } @@ -259,156 +322,155 @@ struct VSOutputs { // test value in a test is still meaningful. generateTestData(format) { const formatInfo = kVertexFormatInfo[format]; - const bitSize = formatInfo.bytesPerComponent * 8; + const bitSize = + formatInfo.bytesPerComponent === 'packed' ? 0 : formatInfo.bytesPerComponent * 8; switch (formatInfo.type) { - case 'float': { - // -0.0 and +0.0 have different bit patterns, but compare as equal. - const data = [42.42, 0.0, -0.0, 1.0, -1.0, 1000, -18.7, 25.17]; - const expectedData = new Float32Array(data).buffer; - const vertexData = - bitSize === 32 - ? expectedData - : bitSize === 16 - ? new Uint16Array(data.map(float32ToFloat16Bits)).buffer - : unreachable(); + case 'float':{ + // -0.0 and +0.0 have different bit patterns, but compare as equal. + const data = [42.42, 0.0, -0.0, 1.0, -1.0, 1000, -18.7, 25.17]; + const expectedData = new Float32Array(data).buffer; + const vertexData = + bitSize === 32 ? + expectedData : + bitSize === 16 ? + new Uint16Array(data.map(float32ToFloat16Bits)).buffer : + unreachable(); - return { - shaderBaseType: 'f32', - testComponentCount: data.length, - expectedData, - vertexData, - floatTolerance: 0.05, - }; - } + return { + shaderBaseType: 'f32', + testComponentCount: data.length, + expectedData, + vertexData, + floatTolerance: 0.05 + }; + } - case 'sint': { - const data = [ + case 'sint':{ + + const data = [ 42, - 0, - 1, - 2, - 3, - 4, - 5, - -1, - -2, - -3, - -4, - -5, + 0, 1, 2, 3, 4, 5, + -1, -2, -3, -4, -5, Math.pow(2, bitSize - 2), Math.pow(2, bitSize - 1) - 1, // max value -Math.pow(2, bitSize - 2), - -Math.pow(2, bitSize - 1), // min value - ]; - const expectedData = new Int32Array(data).buffer; - const vertexData = - bitSize === 32 - ? expectedData - : bitSize === 16 - ? new Int16Array(data).buffer - : new Int8Array(data).buffer; + -Math.pow(2, bitSize - 1) // min value + ]; + const expectedData = new Int32Array(data).buffer; + const vertexData = + bitSize === 32 ? + expectedData : + bitSize === 16 ? + new Int16Array(data).buffer : + new Int8Array(data).buffer; - return { - shaderBaseType: 'i32', - testComponentCount: data.length, - expectedData, - vertexData, - }; - } + return { + shaderBaseType: 'i32', + testComponentCount: data.length, + expectedData, + vertexData + }; + } - case 'uint': { - const data = [ + case 'uint':{ + + const data = [ 42, - 0, - 1, - 2, - 3, - 4, - 5, + 0, 1, 2, 3, 4, 5, Math.pow(2, bitSize - 1), - Math.pow(2, bitSize) - 1, // max value - ]; - const expectedData = new Uint32Array(data).buffer; - const vertexData = - bitSize === 32 - ? expectedData - : bitSize === 16 - ? new Uint16Array(data).buffer - : new Uint8Array(data).buffer; + Math.pow(2, bitSize) - 1 // max value + ]; + const expectedData = new Uint32Array(data).buffer; + const vertexData = + bitSize === 32 ? + expectedData : + bitSize === 16 ? + new Uint16Array(data).buffer : + new Uint8Array(data).buffer; - return { - shaderBaseType: 'u32', - testComponentCount: data.length, - expectedData, - vertexData, - }; - } + return { + shaderBaseType: 'u32', + testComponentCount: data.length, + expectedData, + vertexData + }; + } - case 'snorm': { - const data = [ + case 'snorm':{ + + const data = [ 42, - 0, - 1, - 2, - 3, - 4, - 5, - -1, - -2, - -3, - -4, - -5, + 0, 1, 2, 3, 4, 5, + -1, -2, -3, -4, -5, Math.pow(2, bitSize - 2), Math.pow(2, bitSize - 1) - 1, // max value -Math.pow(2, bitSize - 2), - -Math.pow(2, bitSize - 1), // min value - ]; - const vertexData = - bitSize === 16 - ? new Int16Array(data).buffer - : bitSize === 8 - ? new Int8Array(data).buffer - : unreachable(); + -Math.pow(2, bitSize - 1) // min value + ]; + const vertexData = + bitSize === 16 ? + new Int16Array(data).buffer : + bitSize === 8 ? + new Int8Array(data).buffer : + unreachable(); - return { - shaderBaseType: 'f32', - testComponentCount: data.length, - expectedData: new Float32Array(data.map(v => normalizedIntegerAsFloat(v, bitSize, true))) - .buffer, - vertexData, - floatTolerance: 0.1 * normalizedIntegerAsFloat(1, bitSize, true), - }; - } + return { + shaderBaseType: 'f32', + testComponentCount: data.length, + expectedData: new Float32Array(data.map((v) => normalizedIntegerAsFloat(v, bitSize, true))). + buffer, + vertexData, + floatTolerance: 0.1 * normalizedIntegerAsFloat(1, bitSize, true) + }; + } - case 'unorm': { - const data = [ + case 'unorm':{ + if (formatInfo.bytesPerComponent === 'packed') { + assert(format === 'unorm10-10-10-2'); // This is the only packed format for now. + assert(bitSize === 0); + + + const data = [ + [0, 0, 0, 0], + [1023, 1023, 1023, 3], + [243, 567, 765, 2]]; + + const vertexData = new Uint32Array(data.map(makeRgb10a2)).buffer; + const expectedData = new Float32Array(data.flat().map(normalizeRgb10a2)).buffer; + + return { + shaderBaseType: 'f32', + testComponentCount: data.flat().length, + expectedData, + vertexData, + floatTolerance: 0.1 / 1023 + }; + } + + + const data = [ 42, - 0, - 1, - 2, - 3, - 4, - 5, + 0, 1, 2, 3, 4, 5, Math.pow(2, bitSize - 1), - Math.pow(2, bitSize) - 1, // max value - ]; - const vertexData = - bitSize === 16 - ? new Uint16Array(data).buffer - : bitSize === 8 - ? new Uint8Array(data).buffer - : unreachable(); + Math.pow(2, bitSize) - 1 // max value + ]; + const vertexData = + bitSize === 16 ? + new Uint16Array(data).buffer : + bitSize === 8 ? + new Uint8Array(data).buffer : + unreachable(); - return { - shaderBaseType: 'f32', - testComponentCount: data.length, - expectedData: new Float32Array(data.map(v => normalizedIntegerAsFloat(v, bitSize, false))) - .buffer, - vertexData, - floatTolerance: 0.1 * normalizedIntegerAsFloat(1, bitSize, false), - }; - } + return { + shaderBaseType: 'f32', + testComponentCount: data.length, + expectedData: new Float32Array(data.map((v) => normalizedIntegerAsFloat(v, bitSize, false))). + buffer, + vertexData, + floatTolerance: 0.1 * normalizedIntegerAsFloat(1, bitSize, false) + }; + } } } @@ -435,8 +497,8 @@ struct VSOutputs { const targetExpectedOffset = (index * 4 + component) * expectedComponentSize; const sourceExpectedOffset = - ((index * componentCount + component) * expectedComponentSize) % - data.expectedData.byteLength; + (index * componentCount + component) * expectedComponentSize % + data.expectedData.byteLength; memcpy( { src: data.expectedData, start: sourceExpectedOffset, length: expectedComponentSize }, { dst: expandedExpectedData, start: targetExpectedOffset } @@ -449,24 +511,32 @@ struct VSOutputs { testComponentCount: maxCount * componentCount, floatTolerance: data.floatTolerance, expectedData: expandedExpectedData.buffer, - vertexData: expandedVertexData.buffer, + vertexData: expandedVertexData.buffer }; } // Copies `size` bytes from `source` to `target` starting at `offset` each `targetStride`. // (the data in `source` is assumed packed) - interleaveVertexDataInto(target, src, { targetStride, offset, size }) { + interleaveVertexDataInto( + target, + src, + { targetStride, offset, size }) + { const dst = new Uint8Array(target); for ( - let srcStart = 0, dstStart = offset; - srcStart < src.byteLength; - srcStart += size, dstStart += targetStride - ) { + let srcStart = 0, dstStart = offset; + srcStart < src.byteLength; + srcStart += size, dstStart += targetStride) + { memcpy({ src, start: srcStart, length: size }, { dst, start: dstStart }); } } - createTestAndPipelineData(state, vertexCount, instanceCount) { + createTestAndPipelineData( + state, + vertexCount, + instanceCount) + { // Gather the test data and some additional test state for attribs. return mapStateAttribs(state, (buffer, attrib) => { const maxCount = buffer.stepMode === 'instance' ? instanceCount : vertexCount; @@ -477,7 +547,7 @@ struct VSOutputs { return { ...testData, - ...attrib, + ...attrib }; }); } @@ -492,21 +562,24 @@ struct VSOutputs { new Uint8Array(attrib.expectedData), GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE ); - bgEntries.push({ binding: attrib.shaderLocation, - resource: { buffer: expectedDataBuffer }, + resource: { buffer: expectedDataBuffer } }); } } return this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: bgEntries, + entries: bgEntries }); } - createVertexBuffers(state, vertexCount, instanceCount) { + createVertexBuffers( + state, + vertexCount, + instanceCount) + { // Create the vertex buffers const vertexBuffers = []; @@ -518,7 +591,6 @@ struct VSOutputs { const vertexData = new ArrayBuffer( align(buffer.arrayStride * maxCount + (buffer.vbOffset ?? 0), 4) ); - new Uint8Array(vertexData).fill(0xc4); for (const attrib of buffer.attributes) { @@ -526,7 +598,7 @@ struct VSOutputs { this.interleaveVertexDataInto(vertexData, attrib.vertexData, { targetStride: buffer.arrayStride, offset: (buffer.vbOffset ?? 0) + attrib.offset, - size: formatInfo.componentCount * formatInfo.bytesPerComponent, + size: formatInfo.byteSize }); } @@ -534,7 +606,7 @@ struct VSOutputs { slot: buffer.slot, buffer: this.makeBufferWithContents(new Uint8Array(vertexData), GPUBufferUsage.VERTEX), vbOffset: buffer.vbOffset, - attributes: [], + attributes: [] }); } @@ -542,12 +614,12 @@ struct VSOutputs { } runTest( - buffers, - // Default to using 20 vertices and 20 instances so that we cover each of the test data at least - // once (at the time of writing the largest testData has 16 values). - vertexCount = 20, - instanceCount = 20 - ) { + buffers, + // Default to using 20 vertices and 20 instances so that we cover each of the test data at least + // once (at the time of writing the largest testData has 16 values). + vertexCount = 20, + instanceCount = 20) + { const testData = this.createTestAndPipelineData(buffers, vertexCount, instanceCount); const pipeline = this.makeTestPipeline(testData, vertexCount, instanceCount); const expectedDataBG = this.createExpectedBG(testData, pipeline); @@ -558,560 +630,551 @@ struct VSOutputs { export const g = makeTestGroup(VertexStateTest); -g.test('vertex_format_to_shader_format_conversion') - .desc( - `Test that the raw data passed in vertex buffers is correctly converted to the input type in the shader. Test for: +g.test('vertex_format_to_shader_format_conversion'). +desc( + `Test that the raw data passed in vertex buffers is correctly converted to the input type in the shader. Test for: - all formats - 1 to 4 components in the shader's input type (unused components are filled with 0 and except the 4th with 1) - various locations - various slots` - ) - .params(u => - u // - .combine('format', kVertexFormats) - .combine('shaderComponentCount', [1, 2, 3, 4]) - .beginSubcases() - .combine('slotVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('shaderLocationVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - ) - .fn(t => { - const { format, shaderComponentCount, slotVariant, shaderLocationVariant } = t.params; - const slot = t.makeLimitVariant('maxVertexBuffers', slotVariant); - const shaderLocation = t.makeLimitVariant('maxVertexAttributes', shaderLocationVariant); - t.runTest([ - { - slot, - arrayStride: 16, - stepMode: 'vertex', - attributes: [ - { - shaderLocation, - format, - offset: 0, - shaderComponentCount, - }, - ], - }, - ]); - }); +). +params((u) => +u // +.combine('format', kVertexFormats). +combine('shaderComponentCount', [1, 2, 3, 4]). +beginSubcases(). +combine('slotVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('shaderLocationVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +) +). +fn((t) => { + const { format, shaderComponentCount, slotVariant, shaderLocationVariant } = t.params; + const slot = t.makeLimitVariant('maxVertexBuffers', slotVariant); + const shaderLocation = t.makeLimitVariant('maxVertexAttributes', shaderLocationVariant); + t.runTest([ + { + slot, + arrayStride: 16, + stepMode: 'vertex', + attributes: [ + { + shaderLocation, + format, + offset: 0, + shaderComponentCount + }] -g.test('setVertexBuffer_offset_and_attribute_offset') - .desc( - `Test that the vertex buffer offset and attribute offset in the vertex state are applied correctly. Test for: + }] + ); +}); + +g.test('setVertexBuffer_offset_and_attribute_offset'). +desc( + `Test that the vertex buffer offset and attribute offset in the vertex state are applied correctly. Test for: - all formats - various setVertexBuffer offsets - various attribute offsets in a fixed arrayStride` - ) - .params(u => - u // - .combine('format', kVertexFormats) - .beginSubcases() - .combine('vbOffset', [0, 4, 400, 1004]) - .combine('arrayStride', [128]) - .expand('offset', p => { - const formatInfo = kVertexFormatInfo[p.format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - return new Set([ - 0, - 4, - 8, - formatSize, - formatSize * 2, - p.arrayStride / 2, - p.arrayStride - formatSize - 4, - p.arrayStride - formatSize - 8, - p.arrayStride - formatSize - formatSize, - p.arrayStride - formatSize - formatSize * 2, - p.arrayStride - formatSize, - ]); - }) - ) - .fn(t => { - const { format, vbOffset, arrayStride, offset } = t.params; - t.runTest([ - { - slot: 0, - arrayStride, - stepMode: 'vertex', - vbOffset, - attributes: [ - { - shaderLocation: 0, - format, - offset, - }, - ], - }, - ]); - }); +). +params((u) => +u // +.combine('format', kVertexFormats). +beginSubcases(). +combine('vbOffset', [0, 4, 400, 1004]). +combine('arrayStride', [128]). +expand('offset', (p) => { + const formatInfo = kVertexFormatInfo[p.format]; + const formatSize = formatInfo.byteSize; + return new Set([ + 0, + 4, + 8, + formatSize, + formatSize * 2, + p.arrayStride / 2, + p.arrayStride - formatSize - 4, + p.arrayStride - formatSize - 8, + p.arrayStride - formatSize - formatSize, + p.arrayStride - formatSize - formatSize * 2, + p.arrayStride - formatSize] + ); +}) +). +fn((t) => { + const { format, vbOffset, arrayStride, offset } = t.params; + t.runTest([ + { + slot: 0, + arrayStride, + stepMode: 'vertex', + vbOffset, + attributes: [ + { + shaderLocation: 0, + format, + offset + }] -g.test('non_zero_array_stride_and_attribute_offset') - .desc( - `Test that the array stride and attribute offset in the vertex state are applied correctly. Test for: + }] + ); +}); + +g.test('non_zero_array_stride_and_attribute_offset'). +desc( + `Test that the array stride and attribute offset in the vertex state are applied correctly. Test for: - all formats - various array strides - various attribute offsets in a fixed arrayStride` - ) - .params(u => - u // - .combine('format', kVertexFormats) - .beginSubcases() - .expand('arrayStrideVariant', p => { - const formatInfo = kVertexFormatInfo[p.format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; +). +params((u) => +u // +.combine('format', kVertexFormats). +beginSubcases(). +expand('arrayStrideVariant', (p) => { + const formatInfo = kVertexFormatInfo[p.format]; + const formatSize = formatInfo.byteSize; - return [ - { mult: 0, add: align(formatSize, 4) }, - { mult: 0, add: align(formatSize, 4) + 4 }, - { mult: 1, add: 0 }, - ]; - }) - .expand('offsetVariant', p => { - const formatInfo = kVertexFormatInfo[p.format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - return [ - { mult: 0, add: 0 }, - { mult: 0, add: formatSize }, - { mult: 0, add: 4 }, - { mult: 0.5, add: 0 }, - { mult: 1, add: -formatSize * 2 }, - { mult: 1, add: -formatSize - 4 }, - { mult: 1, add: -formatSize }, - ]; - }) - ) - .fn(t => { - const { format, arrayStrideVariant, offsetVariant } = t.params; - const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); - const formatInfo = kVertexFormatInfo[format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - const offset = clamp(makeValueTestVariant(arrayStride, offsetVariant), { - min: 0, - max: arrayStride - formatSize, + return [ + { mult: 0, add: align(formatSize, 4) }, + { mult: 0, add: align(formatSize, 4) + 4 }, + { mult: 1, add: 0 }]; + +}). +expand('offsetVariant', function* (p) { + const formatInfo = kVertexFormatInfo[p.format]; + const formatSize = formatInfo.byteSize; + yield { mult: 0, add: 0 }; + yield { mult: 0, add: 4 }; + if (formatSize !== 4) yield { mult: 0, add: formatSize }; + yield { mult: 0.5, add: 0 }; + yield { mult: 1, add: -formatSize * 2 }; + if (formatSize !== 4) yield { mult: 1, add: -formatSize - 4 }; + yield { mult: 1, add: -formatSize }; +}) +). +fn((t) => { + const { format, arrayStrideVariant, offsetVariant } = t.params; + const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); + const formatInfo = kVertexFormatInfo[format]; + const formatSize = formatInfo.byteSize; + const offset = clamp(makeValueTestVariant(arrayStride, offsetVariant), { + min: 0, + max: arrayStride - formatSize + }); + + t.runTest([ + { + slot: 0, + arrayStride, + stepMode: 'vertex', + attributes: [ + { + shaderLocation: 0, + format, + offset + }] + + }] + ); +}); + +g.test('buffers_with_varying_step_mode'). +desc( + `Test buffers with varying step modes in the same vertex state. + - Various combination of step modes` +). +paramsSubcasesOnly((u) => +u // +.combine('stepModes', [ +['instance'], +['vertex', 'vertex', 'instance'], +['instance', 'vertex', 'instance'], +['vertex', 'instance', 'vertex', 'vertex']] +) +). +fn((t) => { + const { stepModes } = t.params; + const state = stepModes.map((stepMode, i) => ({ + slot: i, + arrayStride: 4, + stepMode, + attributes: [ + { + shaderLocation: i, + format: 'float32', + offset: 0 + }] + + })); + t.runTest(state); +}); + +g.test('vertex_buffer_used_multiple_times_overlapped'). +desc( + `Test using the same vertex buffer in for multiple "vertex buffers", with data from each buffer overlapping. + - For each vertex format. + - For various numbers of vertex buffers [2, 3, max]` +). +params((u) => +u // +.combine('format', kVertexFormats). +beginSubcases(). +combine('vbCountVariant', [ +{ mult: 0, add: 2 }, +{ mult: 0, add: 3 }, +{ mult: 1, add: 0 }] +). +combine('additionalVBOffset', [0, 4, 120]) +). +fn((t) => { + const { format, vbCountVariant, additionalVBOffset } = t.params; + const vbCount = t.makeLimitVariant('maxVertexBuffers', vbCountVariant); + const kVertexCount = 20; + const kInstanceCount = 1; + const formatInfo = kVertexFormatInfo[format]; + const formatByteSize = formatInfo.byteSize; + // We need to align so the offset for non-0 setVertexBuffer don't fail validation. + const alignedFormatByteSize = align(formatByteSize, 4); + + // In this test we want to test using the same vertex buffer for multiple different attributes. + // For example if vbCount is 3, we will create a vertex buffer containing the following data: + // a0, a1, a2, a3, ..., a + // We also create the expected data for the vertex fetching from that buffer so we can modify it + // below. + const baseDataVertexCount = kVertexCount + vbCount - 1; + const baseData = t.createTestAndPipelineData( + [ + { + slot: 0, + arrayStride: alignedFormatByteSize, + stepMode: 'vertex', + vbOffset: additionalVBOffset, + attributes: [{ shaderLocation: 0, format, offset: 0 }] + }], + + baseDataVertexCount, + kInstanceCount + ); + const vertexBuffer = t.createVertexBuffers(baseData, baseDataVertexCount, kInstanceCount)[0]. + buffer; + + // We are going to bind the vertex buffer multiple times, each time at a different offset that's + // a multiple of the data size. So what should be fetched by the vertex shader is: + // - attrib0: a0, a1, ..., a19 + // - attrib1: a1, a2, ..., a20 + // - attrib2: a2, a3, ..., a21 + // etc. + // We re-create the test data by: + // 1) creating multiple "vertex buffers" that all point at the GPUBuffer above but at + // different offsets. + // 2) selecting what parts of the expectedData each attribute will see in the expectedData for + // the full vertex buffer. + const baseTestData = baseData[0].attributes[0]; + assert(baseTestData.testComponentCount === formatInfo.componentCount * baseDataVertexCount); + const expectedDataBytesPerVertex = baseTestData.expectedData.byteLength / baseDataVertexCount; + + const testData = []; + const vertexBuffers = []; + for (let i = 0; i < vbCount; i++) { + vertexBuffers.push({ + buffer: vertexBuffer, + slot: i, + vbOffset: additionalVBOffset + i * alignedFormatByteSize, + attributes: [] }); - t.runTest([ - { - slot: 0, - arrayStride, - stepMode: 'vertex', - attributes: [ - { - shaderLocation: 0, - format, - offset, - }, - ], - }, - ]); - }); - -g.test('buffers_with_varying_step_mode') - .desc( - `Test buffers with varying step modes in the same vertex state. - - Various combination of step modes` - ) - .paramsSubcasesOnly(u => - u // - .combine('stepModes', [ - ['instance'], - ['vertex', 'vertex', 'instance'], - ['instance', 'vertex', 'instance'], - ['vertex', 'instance', 'vertex', 'vertex'], - ]) - ) - .fn(t => { - const { stepModes } = t.params; - const state = stepModes.map((stepMode, i) => ({ + testData.push({ slot: i, - arrayStride: 4, - stepMode, + arrayStride: alignedFormatByteSize, + stepMode: 'vertex', attributes: [ - { - shaderLocation: i, - format: 'float32', - offset: 0, - }, - ], - })); - t.runTest(state); - }); + { + shaderLocation: i, + format, + offset: 0, -g.test('vertex_buffer_used_multiple_times_overlapped') - .desc( - `Test using the same vertex buffer in for multiple "vertex buffers", with data from each buffer overlapping. + shaderBaseType: baseTestData.shaderBaseType, + floatTolerance: baseTestData.floatTolerance, + // Select vertices [i, i + kVertexCount] + testComponentCount: kVertexCount * formatInfo.componentCount, + expectedData: baseTestData.expectedData.slice( + expectedDataBytesPerVertex * i, + expectedDataBytesPerVertex * (kVertexCount + i) + ), + vertexData: new ArrayBuffer(0) + }] + + }); + } + + // Run the test with the modified test data. + const pipeline = t.makeTestPipeline(testData, kVertexCount, kInstanceCount); + const expectedDataBG = t.createExpectedBG(testData, pipeline); + t.submitRenderPass(pipeline, vertexBuffers, expectedDataBG, kVertexCount, kInstanceCount); +}); + +g.test('vertex_buffer_used_multiple_times_interleaved'). +desc( + `Test using the same vertex buffer in for multiple "vertex buffers", with data from each buffer interleaved. - For each vertex format. - For various numbers of vertex buffers [2, 3, max]` - ) - .params(u => - u // - .combine('format', kVertexFormats) - .beginSubcases() - .combine('vbCountVariant', [ - { mult: 0, add: 2 }, - { mult: 0, add: 3 }, - { mult: 1, add: 0 }, - ]) - .combine('additionalVBOffset', [0, 4, 120]) - ) - .fn(t => { - const { format, vbCountVariant, additionalVBOffset } = t.params; - const vbCount = t.makeLimitVariant('maxVertexBuffers', vbCountVariant); - const kVertexCount = 20; - const kInstanceCount = 1; - const formatInfo = kVertexFormatInfo[format]; - const formatByteSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - // We need to align so the offset for non-0 setVertexBuffer don't fail validation. - const alignedFormatByteSize = align(formatByteSize, 4); +). +params((u) => +u // +.combine('format', kVertexFormats). +beginSubcases(). +combine('vbCountVariant', [ +{ mult: 0, add: 2 }, +{ mult: 0, add: 3 }, +{ mult: 1, add: 0 }] +). +combine('additionalVBOffset', [0, 4, 120]) +). +fn((t) => { + const { format, vbCountVariant, additionalVBOffset } = t.params; + const vbCount = t.makeLimitVariant('maxVertexBuffers', vbCountVariant); + const kVertexCount = 20; + const kInstanceCount = 1; + const formatInfo = kVertexFormatInfo[format]; + const formatByteSize = formatInfo.byteSize; + // We need to align so the offset for non-0 setVertexBuffer don't fail validation. + const alignedFormatByteSize = align(formatByteSize, 4); - // In this test we want to test using the same vertex buffer for multiple different attributes. - // For example if vbCount is 3, we will create a vertex buffer containing the following data: - // a0, a1, a2, a3, ..., a - // We also create the expected data for the vertex fetching from that buffer so we can modify it - // below. - const baseDataVertexCount = kVertexCount + vbCount - 1; - const baseData = t.createTestAndPipelineData( - [ - { - slot: 0, - arrayStride: alignedFormatByteSize, - stepMode: 'vertex', - vbOffset: additionalVBOffset, - attributes: [{ shaderLocation: 0, format, offset: 0 }], - }, - ], + // Create data for a single vertex buffer with many attributes, that will be split between + // many vertex buffers set at different offsets. - baseDataVertexCount, - kInstanceCount - ); + // In this test we want to test using the same vertex buffer for multiple different attributes. + // For example if vbCount is 3, we will create a vertex buffer containing the following data: + // a0, a0, a0, a1, a1, a1, ... + // To do that we create a single vertex buffer with `vbCount` attributes that all have the same + // format. + const attribs = []; + for (let i = 0; i < vbCount; i++) { + attribs.push({ format, offset: i * alignedFormatByteSize, shaderLocation: i }); + } + const baseData = t.createTestAndPipelineData( + [ + { + slot: 0, + arrayStride: alignedFormatByteSize * vbCount, + stepMode: 'vertex', + vbOffset: additionalVBOffset, + attributes: attribs + }], - const vertexBuffer = t.createVertexBuffers(baseData, baseDataVertexCount, kInstanceCount)[0] - .buffer; + // Request one vertex more than what we need so we have an extra full stride. Otherwise WebGPU + // validation of vertex being in bounds will fail for all vertex buffers at an offset that's + // not 0 (since their last stride will go beyond the data for vertex kVertexCount -1). + kVertexCount + 1, + kInstanceCount + ); + const vertexBuffer = t.createVertexBuffers(baseData, kVertexCount + 1, kInstanceCount)[0]. + buffer; - // We are going to bind the vertex buffer multiple times, each time at a different offset that's - // a multiple of the data size. So what should be fetched by the vertex shader is: - // - attrib0: a0, a1, ..., a19 - // - attrib1: a1, a2, ..., a20 - // - attrib2: a2, a3, ..., a21 - // etc. - // We re-create the test data by: - // 1) creating multiple "vertex buffers" that all point at the GPUBuffer above but at - // different offsets. - // 2) selecting what parts of the expectedData each attribute will see in the expectedData for - // the full vertex buffer. - const baseTestData = baseData[0].attributes[0]; - assert(baseTestData.testComponentCount === formatInfo.componentCount * baseDataVertexCount); - const expectedDataBytesPerVertex = baseTestData.expectedData.byteLength / baseDataVertexCount; + // Then we recreate test data by: + // 1) creating multiple "vertex buffers" that all point at the GPUBuffer above but at + // different offsets. + // 2) have multiple vertex buffer, each with one attributes that will expect a0, a1, ... + const testData = []; + const vertexBuffers = []; + for (let i = 0; i < vbCount; i++) { + vertexBuffers.push({ + slot: i, + buffer: vertexBuffer, + vbOffset: additionalVBOffset + i * alignedFormatByteSize, + attributes: [] + }); + testData.push({ + ...baseData[0], + slot: i, + attributes: [{ ...baseData[0].attributes[i], offset: 0 }] + }); + } - const testData = []; - const vertexBuffers = []; - for (let i = 0; i < vbCount; i++) { - vertexBuffers.push({ - buffer: vertexBuffer, - slot: i, - vbOffset: additionalVBOffset + i * alignedFormatByteSize, - attributes: [], - }); + // Run the test with the modified test data. + const pipeline = t.makeTestPipeline(testData, kVertexCount, kInstanceCount); + const expectedDataBG = t.createExpectedBG(testData, pipeline); + t.submitRenderPass(pipeline, vertexBuffers, expectedDataBG, kVertexCount, kInstanceCount); +}); - testData.push({ - slot: i, - arrayStride: alignedFormatByteSize, - stepMode: 'vertex', - attributes: [ - { - shaderLocation: i, - format, - offset: 0, - - shaderBaseType: baseTestData.shaderBaseType, - floatTolerance: baseTestData.floatTolerance, - // Select vertices [i, i + kVertexCount] - testComponentCount: kVertexCount * formatInfo.componentCount, - expectedData: baseTestData.expectedData.slice( - expectedDataBytesPerVertex * i, - expectedDataBytesPerVertex * (kVertexCount + i) - ), - - vertexData: new ArrayBuffer(0), - }, - ], - }); - } - - // Run the test with the modified test data. - const pipeline = t.makeTestPipeline(testData, kVertexCount, kInstanceCount); - const expectedDataBG = t.createExpectedBG(testData, pipeline); - t.submitRenderPass(pipeline, vertexBuffers, expectedDataBG, kVertexCount, kInstanceCount); - }); - -g.test('vertex_buffer_used_multiple_times_interleaved') - .desc( - `Test using the same vertex buffer in for multiple "vertex buffers", with data from each buffer interleaved. - - For each vertex format. - - For various numbers of vertex buffers [2, 3, max]` - ) - .params(u => - u // - .combine('format', kVertexFormats) - .beginSubcases() - .combine('vbCountVariant', [ - { mult: 0, add: 2 }, - { mult: 0, add: 3 }, - { mult: 1, add: 0 }, - ]) - .combine('additionalVBOffset', [0, 4, 120]) - ) - .fn(t => { - const { format, vbCountVariant, additionalVBOffset } = t.params; - const vbCount = t.makeLimitVariant('maxVertexBuffers', vbCountVariant); - const kVertexCount = 20; - const kInstanceCount = 1; - const formatInfo = kVertexFormatInfo[format]; - const formatByteSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - // We need to align so the offset for non-0 setVertexBuffer don't fail validation. - const alignedFormatByteSize = align(formatByteSize, 4); - - // Create data for a single vertex buffer with many attributes, that will be split between - // many vertex buffers set at different offsets. - - // In this test we want to test using the same vertex buffer for multiple different attributes. - // For example if vbCount is 3, we will create a vertex buffer containing the following data: - // a0, a0, a0, a1, a1, a1, ... - // To do that we create a single vertex buffer with `vbCount` attributes that all have the same - // format. - const attribs = []; - for (let i = 0; i < vbCount; i++) { - attribs.push({ format, offset: i * alignedFormatByteSize, shaderLocation: i }); - } - const baseData = t.createTestAndPipelineData( - [ - { - slot: 0, - arrayStride: alignedFormatByteSize * vbCount, - stepMode: 'vertex', - vbOffset: additionalVBOffset, - attributes: attribs, - }, - ], - - // Request one vertex more than what we need so we have an extra full stride. Otherwise WebGPU - // validation of vertex being in bounds will fail for all vertex buffers at an offset that's - // not 0 (since their last stride will go beyond the data for vertex kVertexCount -1). - kVertexCount + 1, - kInstanceCount - ); - - const vertexBuffer = t.createVertexBuffers(baseData, kVertexCount + 1, kInstanceCount)[0] - .buffer; - - // Then we recreate test data by: - // 1) creating multiple "vertex buffers" that all point at the GPUBuffer above but at - // different offsets. - // 2) have multiple vertex buffer, each with one attributes that will expect a0, a1, ... - const testData = []; - const vertexBuffers = []; - for (let i = 0; i < vbCount; i++) { - vertexBuffers.push({ - slot: i, - buffer: vertexBuffer, - vbOffset: additionalVBOffset + i * alignedFormatByteSize, - attributes: [], - }); - testData.push({ - ...baseData[0], - slot: i, - attributes: [{ ...baseData[0].attributes[i], offset: 0 }], - }); - } - - // Run the test with the modified test data. - const pipeline = t.makeTestPipeline(testData, kVertexCount, kInstanceCount); - const expectedDataBG = t.createExpectedBG(testData, pipeline); - t.submitRenderPass(pipeline, vertexBuffers, expectedDataBG, kVertexCount, kInstanceCount); - }); - -g.test('max_buffers_and_attribs') - .desc( - `Test a vertex state that loads as many attributes and buffers as possible. +g.test('max_buffers_and_attribs'). +desc( + `Test a vertex state that loads as many attributes and buffers as possible. - For each format. ` - ) - .params(u => u.combine('format', kVertexFormats)) - .fn(t => { - const { format } = t.params; - // In compat mode, @builtin(vertex_index) and @builtin(instance_index) each take an attribute - const maxVertexBuffers = t.device.limits.maxVertexBuffers; - const deviceMaxVertexAttributes = t.device.limits.maxVertexAttributes; - const maxVertexAttributes = deviceMaxVertexAttributes - (t.isCompatibility ? 2 : 0); - const attributesPerBuffer = Math.ceil(maxVertexAttributes / maxVertexBuffers); - let attributesEmitted = 0; +). +params((u) => u.combine('format', kVertexFormats)). +fn((t) => { + const { format } = t.params; + // In compat mode, @builtin(vertex_index) and @builtin(instance_index) each take an attribute + const maxVertexBuffers = t.device.limits.maxVertexBuffers; + const deviceMaxVertexAttributes = t.device.limits.maxVertexAttributes; + const maxVertexAttributes = deviceMaxVertexAttributes - (t.isCompatibility ? 2 : 0); + const attributesPerBuffer = Math.ceil(maxVertexAttributes / maxVertexBuffers); + let attributesEmitted = 0; - const state = []; - for (let i = 0; i < maxVertexBuffers; i++) { - const attributes = []; - for (let j = 0; j < attributesPerBuffer && attributesEmitted < maxVertexAttributes; j++) { - attributes.push({ format, offset: 0, shaderLocation: attributesEmitted }); - attributesEmitted++; - } - state.push({ - slot: i, - stepMode: 'vertex', - arrayStride: 32, - attributes, - }); + const state = []; + for (let i = 0; i < maxVertexBuffers; i++) { + const attributes = []; + for (let j = 0; j < attributesPerBuffer && attributesEmitted < maxVertexAttributes; j++) { + attributes.push({ format, offset: 0, shaderLocation: attributesEmitted }); + attributesEmitted++; } - t.runTest(state); - }); + state.push({ + slot: i, + stepMode: 'vertex', + arrayStride: 32, + attributes + }); + } + t.runTest(state); +}); -g.test('array_stride_zero') - .desc( - `Test that arrayStride 0 correctly uses the same data for all vertex/instances, while another test vertex buffer with arrayStride != 0 gets different data. +g.test('array_stride_zero'). +desc( + `Test that arrayStride 0 correctly uses the same data for all vertex/instances, while another test vertex buffer with arrayStride != 0 gets different data. - Test for all formats - Test for both step modes` - ) - .params(u => - u // - .combine('format', kVertexFormats) - .beginSubcases() - .combine('stepMode', ['vertex', 'instance']) - .expand('offsetVariant', p => { - const formatInfo = kVertexFormatInfo[p.format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - return filterUniqueValueTestVariants([ - { mult: 0, add: 0 }, - { mult: 0, add: 4 }, - { mult: 0, add: 8 }, - { mult: 0, add: formatSize }, - { mult: 0, add: formatSize * 2 }, - { mult: 0.5, add: 0 }, - { mult: 1, add: -formatSize - 4 }, - { mult: 1, add: -formatSize - 8 }, - { mult: 1, add: -formatSize }, - { mult: 1, add: -formatSize * 2 }, - ]); - }) - ) - .fn(t => { - const { format, stepMode, offsetVariant } = t.params; - const offset = t.makeLimitVariant('maxVertexBufferArrayStride', offsetVariant); - const kCount = 10; +). +params((u) => +u // +.combine('format', kVertexFormats). +beginSubcases(). +combine('stepMode', ['vertex', 'instance']). +expand('offsetVariant', (p) => { + const formatInfo = kVertexFormatInfo[p.format]; + const formatSize = formatInfo.byteSize; + return filterUniqueValueTestVariants([ + { mult: 0, add: 0 }, + { mult: 0, add: 4 }, + { mult: 0, add: 8 }, + { mult: 0, add: formatSize }, + { mult: 0, add: formatSize * 2 }, + { mult: 0.5, add: 0 }, + { mult: 1, add: -formatSize - 4 }, + { mult: 1, add: -formatSize - 8 }, + { mult: 1, add: -formatSize }, + { mult: 1, add: -formatSize * 2 }] + ); +}) +). +fn((t) => { + const { format, stepMode, offsetVariant } = t.params; + const offset = t.makeLimitVariant('maxVertexBufferArrayStride', offsetVariant); + const kCount = 10; - // Create the stride 0 part of the test, first by faking a single vertex being drawn and - // then expanding the data to cover kCount vertex / instances - const stride0TestData = t.createTestAndPipelineData( - [ - { - slot: 0, - arrayStride: 2048, - stepMode, - vbOffset: offset, // used to push data in the vertex buffer - attributes: [{ format, offset: 0, shaderLocation: 0 }], - }, - ], + // Create the stride 0 part of the test, first by faking a single vertex being drawn and + // then expanding the data to cover kCount vertex / instances + const stride0TestData = t.createTestAndPipelineData( + [ + { + slot: 0, + arrayStride: 2048, + stepMode, + vbOffset: offset, // used to push data in the vertex buffer + attributes: [{ format, offset: 0, shaderLocation: 0 }] + }], - 1, - 1 - )[0]; - const stride0VertexBuffer = t.createVertexBuffers([stride0TestData], kCount, kCount)[0]; + 1, + 1 + )[0]; + const stride0VertexBuffer = t.createVertexBuffers([stride0TestData], kCount, kCount)[0]; - // Expand the stride0 test data to have kCount values for expectedData. - const originalData = stride0TestData.attributes[0].expectedData; - const expandedData = new ArrayBuffer(kCount * originalData.byteLength); - for (let i = 0; i < kCount; i++) { - new Uint8Array(expandedData, originalData.byteLength * i).set(new Uint8Array(originalData)); - } + // Expand the stride0 test data to have kCount values for expectedData. + const originalData = stride0TestData.attributes[0].expectedData; + const expandedData = new ArrayBuffer(kCount * originalData.byteLength); + for (let i = 0; i < kCount; i++) { + new Uint8Array(expandedData, originalData.byteLength * i).set(new Uint8Array(originalData)); + } - // Fixup stride0TestData to use arrayStride 0. - stride0TestData.attributes[0].offset = offset; - stride0TestData.attributes[0].expectedData = expandedData; - stride0TestData.attributes[0].testComponentCount *= kCount; - stride0TestData.arrayStride = 0; - stride0VertexBuffer.vbOffset = 0; + // Fixup stride0TestData to use arrayStride 0. + stride0TestData.attributes[0].offset = offset; + stride0TestData.attributes[0].expectedData = expandedData; + stride0TestData.attributes[0].testComponentCount *= kCount; + stride0TestData.arrayStride = 0; + stride0VertexBuffer.vbOffset = 0; - // Create the part of the state that will be varying for each vertex / instance - const varyingTestData = t.createTestAndPipelineData( - [ - { - slot: 1, - arrayStride: 32, - stepMode, - attributes: [{ format, offset: 0, shaderLocation: 1 }], - }, - ], + // Create the part of the state that will be varying for each vertex / instance + const varyingTestData = t.createTestAndPipelineData( + [ + { + slot: 1, + arrayStride: 32, + stepMode, + attributes: [{ format, offset: 0, shaderLocation: 1 }] + }], - kCount, - kCount - )[0]; - const varyingVertexBuffer = t.createVertexBuffers([varyingTestData], kCount, kCount)[0]; + kCount, + kCount + )[0]; + const varyingVertexBuffer = t.createVertexBuffers([varyingTestData], kCount, kCount)[0]; - // Run the test with the merged test state. - const state = [stride0TestData, varyingTestData]; - const vertexBuffers = [stride0VertexBuffer, varyingVertexBuffer]; + // Run the test with the merged test state. + const state = [stride0TestData, varyingTestData]; + const vertexBuffers = [stride0VertexBuffer, varyingVertexBuffer]; - const pipeline = t.makeTestPipeline(state, kCount, kCount); - const expectedDataBG = t.createExpectedBG(state, pipeline); - t.submitRenderPass(pipeline, vertexBuffers, expectedDataBG, kCount, kCount); - }); + const pipeline = t.makeTestPipeline(state, kCount, kCount); + const expectedDataBG = t.createExpectedBG(state, pipeline); + t.submitRenderPass(pipeline, vertexBuffers, expectedDataBG, kCount, kCount); +}); -g.test('discontiguous_location_and_attribs') - .desc('Test that using far away slots / shaderLocations works as expected') - .fn(t => { - t.runTest([ - { - slot: t.device.limits.maxVertexBuffers - 1, - arrayStride: 4, - stepMode: 'vertex', - attributes: [ - { format: 'uint8x2', offset: 2, shaderLocation: 0 }, - { format: 'uint8x2', offset: 0, shaderLocation: 8 }, - ], - }, - { - slot: 1, - arrayStride: 16, - stepMode: 'instance', - vbOffset: 1000, - attributes: [ - { - format: 'uint32x4', - offset: 0, - shaderLocation: t.device.limits.maxVertexAttributes - 1, - }, - ], - }, - ]); - }); +g.test('discontiguous_location_and_attribs'). +desc('Test that using far away slots / shaderLocations works as expected'). +fn((t) => { + t.runTest([ + { + slot: t.device.limits.maxVertexBuffers - 1, + arrayStride: 4, + stepMode: 'vertex', + attributes: [ + { format: 'uint8x2', offset: 2, shaderLocation: 0 }, + { format: 'uint8x2', offset: 0, shaderLocation: 8 }] -g.test('overlapping_attributes') - .desc( - `Test that overlapping attributes in the same vertex buffer works + }, + { + slot: 1, + arrayStride: 16, + stepMode: 'instance', + vbOffset: 1000, + attributes: [ + { + format: 'uint32x4', + offset: 0, + shaderLocation: t.device.limits.maxVertexAttributes - 1 + }] + + }] + ); +}); + +g.test('overlapping_attributes'). +desc( + `Test that overlapping attributes in the same vertex buffer works - Test for all formats` - ) - .params(u => u.combine('format', kVertexFormats)) - .fn(t => { - const { format } = t.params; +). +params((u) => u.combine('format', kVertexFormats)). +fn((t) => { + const { format } = t.params; - // In compat mode, @builtin(vertex_index) and @builtin(instance_index) each take an attribute - const maxVertexAttributes = t.device.limits.maxVertexAttributes - (t.isCompatibility ? 2 : 0); - const attributes = []; - for (let i = 0; i < maxVertexAttributes; i++) { - attributes.push({ format, offset: 0, shaderLocation: i }); - } + // In compat mode, @builtin(vertex_index) and @builtin(instance_index) each take an attribute + const maxVertexAttributes = t.device.limits.maxVertexAttributes - (t.isCompatibility ? 2 : 0); + const attributes = []; + for (let i = 0; i < maxVertexAttributes; i++) { + attributes.push({ format, offset: 0, shaderLocation: i }); + } - t.runTest([ - { - slot: 0, - stepMode: 'vertex', - arrayStride: 32, - attributes, - }, - ]); - }); + t.runTest([ + { + slot: 0, + stepMode: 'vertex', + arrayStride: 32, + attributes + }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/index_format.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/index_format.spec.js index 5e06d0705dd..60ffb5bc369 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/index_format.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/operation/vertex_state/index_format.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test indexing, index format and primitive restart. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { getTextureCopyLayout } from '../../../util/texture/layout.js'; @@ -13,38 +12,47 @@ const kTextureFormat = 'r8uint'; /** 4x4 grid of r8uint values (each 0 or 1). */ + + + + + + /** Expected 4x4 rasterization of a bottom-left triangle. */ const kBottomLeftTriangle = [ - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0, 0], - [0, 0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 1, 1, 1, 0], -]; +[0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 1, 0, 0, 0], +[0, 0, 0, 0, 1, 1, 0, 0], +[0, 0, 0, 0, 1, 1, 1, 0]]; + /** Expected 4x4 rasterization filling the whole quad. */ const kSquare = [ - [0, 0, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 1, 1], -]; +[0, 0, 0, 0, 1, 1, 1, 1], +[0, 0, 0, 0, 1, 1, 1, 1], +[0, 0, 0, 0, 1, 1, 1, 1], +[0, 0, 0, 0, 1, 1, 1, 1]]; + /** Expected 4x4 rasterization with no pixels. */ const kNothing = [ - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], -]; +[0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0]]; + const { byteLength, bytesPerRow, rowsPerImage } = getTextureCopyLayout(kTextureFormat, '2d', [ - kWidth, - kHeight, - 1, -]); +kWidth, +kHeight, +1] +); class IndexFormatTest extends GPUTest { - MakeRenderPipeline(topology, stripIndexFormat) { + MakeRenderPipeline( + topology, + stripIndexFormat) + { const vertexModule = this.device.createShaderModule({ // NOTE: These positions will create triangles that cut right through pixel centers. If this // results in different rasterization results on different hardware, tweak to avoid this. @@ -63,7 +71,7 @@ class IndexFormatTest extends GPUTest { } return vec4(pos[VertexIndex], 0.0, 1.0); } - `, + ` }); const fragmentModule = this.device.createShaderModule({ @@ -72,7 +80,7 @@ class IndexFormatTest extends GPUTest { fn main() -> @location(0) u32 { return 1u; } - `, + ` }); return this.device.createRenderPipeline({ @@ -81,12 +89,12 @@ class IndexFormatTest extends GPUTest { fragment: { module: fragmentModule, entryPoint: 'main', - targets: [{ format: kTextureFormat }], + targets: [{ format: kTextureFormat }] }, primitive: { topology, - stripIndexFormat, - }, + stripIndexFormat + } }); } @@ -95,7 +103,13 @@ class IndexFormatTest extends GPUTest { return this.makeBufferWithContents(new typedArrayConstructor(indices), GPUBufferUsage.INDEX); } - run(indexBuffer, indexCount, indexFormat, indexOffset = 0, primitiveTopology = 'triangle-list') { + run( + indexBuffer, + indexCount, + indexFormat, + indexOffset = 0, + primitiveTopology = 'triangle-list') + { let pipeline; // The indexFormat must be set in render pipeline descriptor that specifies a strip primitive // topology for primitive restart testing @@ -108,24 +122,24 @@ class IndexFormatTest extends GPUTest { const colorAttachment = this.device.createTexture({ format: kTextureFormat, size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const result = this.device.createBuffer({ size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: colorAttachment.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + }); pass.setPipeline(pipeline); pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); @@ -136,7 +150,6 @@ class IndexFormatTest extends GPUTest { { buffer: result, bytesPerRow, rowsPerImage }, [kWidth, kHeight] ); - this.device.queue.submit([encoder.finish()]); return result; @@ -159,264 +172,262 @@ class IndexFormatTest extends GPUTest { export const g = makeTestGroup(IndexFormatTest); -g.test('index_format,uint16') - .desc('Test rendering result of indexed draw with index format of uint16.') - .paramsSubcasesOnly([ - { indexOffset: 0, _indexCount: 10, _expectedShape: kSquare }, - { indexOffset: 6, _indexCount: 6, _expectedShape: kBottomLeftTriangle }, - { indexOffset: 18, _indexCount: 0, _expectedShape: kNothing }, - ]) - .fn(t => { - const { indexOffset, _indexCount, _expectedShape } = t.params; +g.test('index_format,uint16'). +desc('Test rendering result of indexed draw with index format of uint16.'). +paramsSubcasesOnly([ +{ indexOffset: 0, _indexCount: 10, _expectedShape: kSquare }, +{ indexOffset: 6, _indexCount: 6, _expectedShape: kBottomLeftTriangle }, +{ indexOffset: 18, _indexCount: 0, _expectedShape: kNothing }] +). +fn((t) => { + const { indexOffset, _indexCount, _expectedShape } = t.params; - // If this is written as uint16 but interpreted as uint32, it will have index 1 and 2 be both 0 - // and render nothing. - // And the index buffer size - offset must be not less than the size required by triangle - // list, otherwise it also render nothing. - const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; - const indexBuffer = t.CreateIndexBuffer(indices, 'uint16'); - const result = t.run(indexBuffer, _indexCount, 'uint16', indexOffset); + // If this is written as uint16 but interpreted as uint32, it will have index 1 and 2 be both 0 + // and render nothing. + // And the index buffer size - offset must be not less than the size required by triangle + // list, otherwise it also render nothing. + const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; + const indexBuffer = t.CreateIndexBuffer(indices, 'uint16'); + const result = t.run(indexBuffer, _indexCount, 'uint16', indexOffset); - const expectedTextureValues = t.CreateExpectedUint8Array(_expectedShape); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); + const expectedTextureValues = t.CreateExpectedUint8Array(_expectedShape); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); +}); + +g.test('index_format,uint32'). +desc('Test rendering result of indexed draw with index format of uint32.'). +paramsSubcasesOnly([ +{ indexOffset: 0, _indexCount: 10, _expectedShape: kSquare }, +{ indexOffset: 12, _indexCount: 7, _expectedShape: kBottomLeftTriangle }, +{ indexOffset: 36, _indexCount: 0, _expectedShape: kNothing }] +). +fn((t) => { + const { indexOffset, _indexCount, _expectedShape } = t.params; + + // If this is interpreted as uint16, then it would be 0, 1, 0, ... and would draw nothing. + // And the index buffer size - offset must be not less than the size required by triangle + // list, otherwise it also render nothing. + const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; + const indexBuffer = t.CreateIndexBuffer(indices, 'uint32'); + const result = t.run(indexBuffer, _indexCount, 'uint32', indexOffset); + + const expectedTextureValues = t.CreateExpectedUint8Array(_expectedShape); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); +}); + +g.test('index_format,change_pipeline_after_setIndexBuffer'). +desc('Test that setting the index buffer before the pipeline works correctly.'). +params((u) => u.combine('setPipelineBeforeSetIndexBuffer', [false, true])). +fn((t) => { + const indexOffset = 12; + const indexCount = 7; + const expectedShape = kBottomLeftTriangle; + + const indexFormat16 = 'uint16'; + const indexFormat32 = 'uint32'; + + const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; + const indexBuffer = t.CreateIndexBuffer(indices, indexFormat32); + + const kPrimitiveTopology = 'triangle-strip'; + const pipeline32 = t.MakeRenderPipeline(kPrimitiveTopology, indexFormat32); + const pipeline16 = t.MakeRenderPipeline(kPrimitiveTopology, indexFormat16); + + const colorAttachment = t.device.createTexture({ + format: kTextureFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('index_format,uint32') - .desc('Test rendering result of indexed draw with index format of uint32.') - .paramsSubcasesOnly([ - { indexOffset: 0, _indexCount: 10, _expectedShape: kSquare }, - { indexOffset: 12, _indexCount: 7, _expectedShape: kBottomLeftTriangle }, - { indexOffset: 36, _indexCount: 0, _expectedShape: kNothing }, - ]) - .fn(t => { - const { indexOffset, _indexCount, _expectedShape } = t.params; - - // If this is interpreted as uint16, then it would be 0, 1, 0, ... and would draw nothing. - // And the index buffer size - offset must be not less than the size required by triangle - // list, otherwise it also render nothing. - const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; - const indexBuffer = t.CreateIndexBuffer(indices, 'uint32'); - const result = t.run(indexBuffer, _indexCount, 'uint32', indexOffset); - - const expectedTextureValues = t.CreateExpectedUint8Array(_expectedShape); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); + const result = t.device.createBuffer({ + size: byteLength, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); -g.test('index_format,change_pipeline_after_setIndexBuffer') - .desc('Test that setting the index buffer before the pipeline works correctly.') - .params(u => u.combine('setPipelineBeforeSetIndexBuffer', [false, true])) - .fn(t => { - const indexOffset = 12; - const indexCount = 7; - const expectedShape = kBottomLeftTriangle; + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachment.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] - const indexFormat16 = 'uint16'; - const indexFormat32 = 'uint32'; - - const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; - const indexBuffer = t.CreateIndexBuffer(indices, indexFormat32); - - const kPrimitiveTopology = 'triangle-strip'; - const pipeline32 = t.MakeRenderPipeline(kPrimitiveTopology, indexFormat32); - const pipeline16 = t.MakeRenderPipeline(kPrimitiveTopology, indexFormat16); - - const colorAttachment = t.device.createTexture({ - format: kTextureFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const result = t.device.createBuffer({ - size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - if (t.params.setPipelineBeforeSetIndexBuffer) { - pass.setPipeline(pipeline16); - } - pass.setIndexBuffer(indexBuffer, indexFormat32, indexOffset); - pass.setPipeline(pipeline32); // Set the pipeline for 'indexFormat32' again. - pass.drawIndexed(indexCount); - pass.end(); - encoder.copyTextureToBuffer( - { texture: colorAttachment }, - { buffer: result, bytesPerRow, rowsPerImage }, - [kWidth, kHeight] - ); - - t.device.queue.submit([encoder.finish()]); - - const expectedTextureValues = t.CreateExpectedUint8Array(expectedShape); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); }); -g.test('index_format,setIndexBuffer_before_setPipeline') - .desc('Test that setting the index buffer before the pipeline works correctly.') - .params(u => u.combine('setIndexBufferBeforeSetPipeline', [false, true])) - .fn(t => { - const indexOffset = 12; - const indexCount = 7; - const expectedShape = kBottomLeftTriangle; + if (t.params.setPipelineBeforeSetIndexBuffer) { + pass.setPipeline(pipeline16); + } + pass.setIndexBuffer(indexBuffer, indexFormat32, indexOffset); + pass.setPipeline(pipeline32); // Set the pipeline for 'indexFormat32' again. + pass.drawIndexed(indexCount); + pass.end(); + encoder.copyTextureToBuffer( + { texture: colorAttachment }, + { buffer: result, bytesPerRow, rowsPerImage }, + [kWidth, kHeight] + ); + t.device.queue.submit([encoder.finish()]); - const indexFormat = 'uint32'; + const expectedTextureValues = t.CreateExpectedUint8Array(expectedShape); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); +}); - const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; - const indexBuffer = t.CreateIndexBuffer(indices, indexFormat); +g.test('index_format,setIndexBuffer_before_setPipeline'). +desc('Test that setting the index buffer before the pipeline works correctly.'). +params((u) => u.combine('setIndexBufferBeforeSetPipeline', [false, true])). +fn((t) => { + const indexOffset = 12; + const indexCount = 7; + const expectedShape = kBottomLeftTriangle; - const kPrimitiveTopology = 'triangle-strip'; - const pipeline = t.MakeRenderPipeline(kPrimitiveTopology, indexFormat); + const indexFormat = 'uint32'; - const colorAttachment = t.device.createTexture({ - format: kTextureFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; + const indexBuffer = t.CreateIndexBuffer(indices, indexFormat); - const result = t.device.createBuffer({ - size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); + const kPrimitiveTopology = 'triangle-strip'; + const pipeline = t.MakeRenderPipeline(kPrimitiveTopology, indexFormat); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - if (t.params.setIndexBufferBeforeSetPipeline) { - pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); - pass.setPipeline(pipeline); - } else { - pass.setPipeline(pipeline); - pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); - } - - pass.drawIndexed(indexCount); - pass.end(); - encoder.copyTextureToBuffer( - { texture: colorAttachment }, - { buffer: result, bytesPerRow, rowsPerImage }, - [kWidth, kHeight] - ); - - t.device.queue.submit([encoder.finish()]); - - const expectedTextureValues = t.CreateExpectedUint8Array(expectedShape); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); + const colorAttachment = t.device.createTexture({ + format: kTextureFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('index_format,setIndexBuffer_different_formats') - .desc( - ` + const result = t.device.createBuffer({ + size: byteLength, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachment.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + if (t.params.setIndexBufferBeforeSetPipeline) { + pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); + pass.setPipeline(pipeline); + } else { + pass.setPipeline(pipeline); + pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); + } + + pass.drawIndexed(indexCount); + pass.end(); + encoder.copyTextureToBuffer( + { texture: colorAttachment }, + { buffer: result, bytesPerRow, rowsPerImage }, + [kWidth, kHeight] + ); + t.device.queue.submit([encoder.finish()]); + + const expectedTextureValues = t.CreateExpectedUint8Array(expectedShape); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); +}); + +g.test('index_format,setIndexBuffer_different_formats'). +desc( + ` Test that index buffers of multiple formats can be used with a pipeline that doesn't use strip primitive topology. ` - ) - .fn(t => { - const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; +). +fn((t) => { + const indices = [1, 2, 0, 0, 0, 0, 0, 1, 3, 0]; - // Create a pipeline to be used by different index formats. - const kPrimitiveTopology = 'triangle-list'; - const pipeline = t.MakeRenderPipeline(kPrimitiveTopology); + // Create a pipeline to be used by different index formats. + const kPrimitiveTopology = 'triangle-list'; + const pipeline = t.MakeRenderPipeline(kPrimitiveTopology); - const expectedTextureValues = t.CreateExpectedUint8Array(kBottomLeftTriangle); + const expectedTextureValues = t.CreateExpectedUint8Array(kBottomLeftTriangle); - const colorAttachment = t.device.createTexture({ - format: kTextureFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const result = t.device.createBuffer({ - size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - let encoder = t.device.createCommandEncoder(); - { - const indexFormat = 'uint32'; - const indexOffset = 12; - const indexCount = 7; - const indexBuffer = t.CreateIndexBuffer(indices, indexFormat); - - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); - pass.setPipeline(pipeline); - pass.drawIndexed(indexCount); - pass.end(); - encoder.copyTextureToBuffer( - { texture: colorAttachment }, - { buffer: result, bytesPerRow, rowsPerImage }, - [kWidth, kHeight] - ); - } - t.device.queue.submit([encoder.finish()]); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); - - // Call setIndexBuffer with the pipeline and a different index format buffer. - encoder = t.device.createCommandEncoder(); - { - const indexFormat = 'uint16'; - const indexOffset = 6; - const indexCount = 6; - const indexBuffer = t.CreateIndexBuffer(indices, indexFormat); - - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); - pass.setPipeline(pipeline); - pass.drawIndexed(indexCount); - pass.end(); - encoder.copyTextureToBuffer( - { texture: colorAttachment }, - { buffer: result, bytesPerRow, rowsPerImage }, - [kWidth, kHeight] - ); - } - t.device.queue.submit([encoder.finish()]); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); + const colorAttachment = t.device.createTexture({ + format: kTextureFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('primitive_restart') - .desc( - ` + const result = t.device.createBuffer({ + size: byteLength, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + let encoder = t.device.createCommandEncoder(); + { + const indexFormat = 'uint32'; + const indexOffset = 12; + const indexCount = 7; + const indexBuffer = t.CreateIndexBuffer(indices, indexFormat); + + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachment.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); + pass.setPipeline(pipeline); + pass.drawIndexed(indexCount); + pass.end(); + encoder.copyTextureToBuffer( + { texture: colorAttachment }, + { buffer: result, bytesPerRow, rowsPerImage }, + [kWidth, kHeight] + ); + } + t.device.queue.submit([encoder.finish()]); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); + + // Call setIndexBuffer with the pipeline and a different index format buffer. + encoder = t.device.createCommandEncoder(); + { + const indexFormat = 'uint16'; + const indexOffset = 6; + const indexCount = 6; + const indexBuffer = t.CreateIndexBuffer(indices, indexFormat); + + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachment.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + pass.setIndexBuffer(indexBuffer, indexFormat, indexOffset); + pass.setPipeline(pipeline); + pass.drawIndexed(indexCount); + pass.end(); + encoder.copyTextureToBuffer( + { texture: colorAttachment }, + { buffer: result, bytesPerRow, rowsPerImage }, + [kWidth, kHeight] + ); + } + t.device.queue.submit([encoder.finish()]); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); +}); + +g.test('primitive_restart'). +desc( + ` Test primitive restart with each primitive topology. Primitive restart should be always active with strip primitive topologies @@ -505,69 +516,69 @@ is different from what you would get if the topology were incorrect. | ## ## | |########| ` - ) - .params(u => - u // - .combine('indexFormat', ['uint16', 'uint32']) - .combineWithParams([ - { - primitiveTopology: 'point-list', - _indices: [0, 1, -1, 2, 3, 0], - _expectedShape: [ - [0, 0, 0, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [1, 0, 0, 0, 1, 0, 0, 1], - ], - }, - { - primitiveTopology: 'line-list', - _indices: [0, 1, -1, 2, 3, 0], - _expectedShape: [ - [0, 0, 0, 0, 1, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 1, 0], - [1, 1, 0, 0, 1, 0, 0, 1], - ], - }, - { - primitiveTopology: 'line-strip', - _indices: [0, 1, -1, 2, 3, 0], - _expectedShape: [ - [0, 0, 0, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 1, 0, 0, 1], - ], - }, - { - primitiveTopology: 'triangle-list', - _indices: [0, 1, 3, -1, 2, 1, 0, 0], - _expectedShape: [ - [0, 0, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 1, 1, 1, 1, 1], - [0, 1, 1, 1, 1, 1, 1, 1], - ], - }, - { - primitiveTopology: 'triangle-strip', - _indices: [3, 1, 0, -1, 2, 2, 1, 3], - _expectedShape: [ - [0, 0, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 1, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 1, 1], - ], - }, - ]) - ) - .fn(t => { - const { indexFormat, primitiveTopology, _indices, _expectedShape } = t.params; +). +params((u) => +u // +.combine('indexFormat', ['uint16', 'uint32']). +combineWithParams([ +{ + primitiveTopology: 'point-list', + _indices: [0, 1, -1, 2, 3, 0], + _expectedShape: [ + [0, 0, 0, 0, 1, 0, 0, 1], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 1, 0, 0, 1]] - const indexBuffer = t.CreateIndexBuffer(_indices, indexFormat); - const result = t.run(indexBuffer, _indices.length, indexFormat, 0, primitiveTopology); +}, +{ + primitiveTopology: 'line-list', + _indices: [0, 1, -1, 2, 3, 0], + _expectedShape: [ + [0, 0, 0, 0, 1, 0, 1, 1], + [0, 0, 0, 0, 1, 1, 0, 0], + [0, 0, 1, 1, 1, 0, 1, 0], + [1, 1, 0, 0, 1, 0, 0, 1]] - const expectedTextureValues = t.CreateExpectedUint8Array(_expectedShape); - t.expectGPUBufferValuesEqual(result, expectedTextureValues); - }); +}, +{ + primitiveTopology: 'line-strip', + _indices: [0, 1, -1, 2, 3, 0], + _expectedShape: [ + [0, 0, 0, 0, 1, 0, 0, 1], + [0, 0, 0, 0, 1, 1, 1, 0], + [0, 0, 0, 0, 1, 1, 1, 0], + [0, 0, 0, 0, 1, 0, 0, 1]] + +}, +{ + primitiveTopology: 'triangle-list', + _indices: [0, 1, 3, -1, 2, 1, 0, 0], + _expectedShape: [ + [0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 1, 1, 1, 1], + [0, 0, 0, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1]] + +}, +{ + primitiveTopology: 'triangle-strip', + _indices: [3, 1, 0, -1, 2, 2, 1, 3], + _expectedShape: [ + [0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 1, 0, 1, 1], + [0, 0, 0, 0, 1, 1, 1, 1], + [0, 0, 0, 0, 1, 1, 1, 1]] + +}] +) +). +fn((t) => { + const { indexFormat, primitiveTopology, _indices, _expectedShape } = t.params; + + const indexBuffer = t.CreateIndexBuffer(_indices, indexFormat); + const result = t.run(indexBuffer, _indices.length, indexFormat, 0, primitiveTopology); + + const expectedTextureValues = t.CreateExpectedUint8Array(_expectedShape); + t.expectGPUBufferValuesEqual(result, expectedTextureValues); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/create.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/create.spec.js index 0a5a695097e..d28cee735aa 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/create.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/create.spec.js @@ -1,15 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for validation in createBuffer. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert } from '../../../../common/util/util.js'; import { kAllBufferUsageBits, kBufferSizeAlignment, - kBufferUsages, -} from '../../../capability_info.js'; + kBufferUsages } from +'../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; import { kMaxSafeMultipleOf8 } from '../../../util/math.js'; import { ValidationTest } from '../validation_test.js'; @@ -17,98 +16,98 @@ import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); assert(kBufferSizeAlignment === 4); -g.test('size') - .desc( - 'Test buffer size alignment is validated to be a multiple of 4 if mappedAtCreation is true.' - ) - .params(u => - u - .combine('mappedAtCreation', [false, true]) - .beginSubcases() - .combine('size', [ - 0, - kBufferSizeAlignment * 0.5, - kBufferSizeAlignment, - kBufferSizeAlignment * 1.5, - kBufferSizeAlignment * 2, - ]) - ) - .fn(t => { - const { mappedAtCreation, size } = t.params; - const isValid = !mappedAtCreation || size % kBufferSizeAlignment === 0; - const usage = BufferUsage.COPY_SRC; - t.expectGPUError( - 'validation', - () => t.device.createBuffer({ size, usage, mappedAtCreation }), - !isValid - ); - }); +g.test('size'). +desc( + 'Test buffer size alignment is validated to be a multiple of 4 if mappedAtCreation is true.' +). +params((u) => +u. +combine('mappedAtCreation', [false, true]). +beginSubcases(). +combine('size', [ +0, +kBufferSizeAlignment * 0.5, +kBufferSizeAlignment, +kBufferSizeAlignment * 1.5, +kBufferSizeAlignment * 2] +) +). +fn((t) => { + const { mappedAtCreation, size } = t.params; + const isValid = !mappedAtCreation || size % kBufferSizeAlignment === 0; + const usage = BufferUsage.COPY_SRC; + t.expectGPUError( + 'validation', + () => t.device.createBuffer({ size, usage, mappedAtCreation }), + !isValid + ); +}); -g.test('limit') - .desc('Test buffer size is validated against maxBufferSize.') - .params(u => u.beginSubcases().combine('sizeAddition', [-1, 0, +1])) - .fn(t => { - const { sizeAddition } = t.params; - const size = t.makeLimitVariant('maxBufferSize', { mult: 1, add: sizeAddition }); - const isValid = size <= t.device.limits.maxBufferSize; - const usage = BufferUsage.COPY_SRC; - t.expectGPUError('validation', () => t.device.createBuffer({ size, usage }), !isValid); - }); +g.test('limit'). +desc('Test buffer size is validated against maxBufferSize.'). +params((u) => u.beginSubcases().combine('sizeAddition', [-1, 0, +1])). +fn((t) => { + const { sizeAddition } = t.params; + const size = t.makeLimitVariant('maxBufferSize', { mult: 1, add: sizeAddition }); + const isValid = size <= t.device.limits.maxBufferSize; + const usage = BufferUsage.COPY_SRC; + t.expectGPUError('validation', () => t.device.createBuffer({ size, usage }), !isValid); +}); const kInvalidUsage = 0x8000; assert((kInvalidUsage & kAllBufferUsageBits) === 0); -g.test('usage') - .desc('Test combinations of zero to two usage flags are validated to be valid.') - .params(u => - u - .combine('usage1', [0, ...kBufferUsages, kInvalidUsage]) - .combine('usage2', [0, ...kBufferUsages, kInvalidUsage]) - .beginSubcases() - .combine('mappedAtCreation', [false, true]) - ) - .fn(t => { - const { mappedAtCreation, usage1, usage2 } = t.params; - const usage = usage1 | usage2; +g.test('usage'). +desc('Test combinations of zero to two usage flags are validated to be valid.'). +params((u) => +u. +combine('usage1', [0, ...kBufferUsages, kInvalidUsage]). +combine('usage2', [0, ...kBufferUsages, kInvalidUsage]). +beginSubcases(). +combine('mappedAtCreation', [false, true]) +). +fn((t) => { + const { mappedAtCreation, usage1, usage2 } = t.params; + const usage = usage1 | usage2; - const isValid = - usage !== 0 && - (usage & ~kAllBufferUsageBits) === 0 && - ((usage & GPUBufferUsage.MAP_READ) === 0 || - (usage & ~(GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ)) === 0) && - ((usage & GPUBufferUsage.MAP_WRITE) === 0 || - (usage & ~(GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE)) === 0); + const isValid = + usage !== 0 && + (usage & ~kAllBufferUsageBits) === 0 && ( + (usage & GPUBufferUsage.MAP_READ) === 0 || + (usage & ~(GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ)) === 0) && ( + (usage & GPUBufferUsage.MAP_WRITE) === 0 || + (usage & ~(GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE)) === 0); - t.expectGPUError( - 'validation', - () => t.device.createBuffer({ size: kBufferSizeAlignment * 2, usage, mappedAtCreation }), - !isValid - ); - }); + t.expectGPUError( + 'validation', + () => t.device.createBuffer({ size: kBufferSizeAlignment * 2, usage, mappedAtCreation }), + !isValid + ); +}); const BufferUsage = GPUConst.BufferUsage; -g.test('createBuffer_invalid_and_oom') - .desc( - `When creating a mappable buffer, it's expected that shmem may be immediately allocated +g.test('createBuffer_invalid_and_oom'). +desc( + `When creating a mappable buffer, it's expected that shmem may be immediately allocated (in the content process, before validation occurs in the GPU process). If the buffer is really large, though, it could fail shmem allocation before validation fails. Ensure that OOM error is hidden behind the "more severe" validation error.` - ) - .paramsSubcasesOnly(u => - u.combineWithParams([ - { _valid: true, usage: BufferUsage.UNIFORM, size: 16 }, - { _valid: true, usage: BufferUsage.STORAGE, size: 16 }, - // Invalid because UNIFORM is not allowed with map usages. - { usage: BufferUsage.MAP_WRITE | BufferUsage.UNIFORM, size: 16 }, - { usage: BufferUsage.MAP_WRITE | BufferUsage.UNIFORM, size: kMaxSafeMultipleOf8 }, - { usage: BufferUsage.MAP_WRITE | BufferUsage.UNIFORM, size: 0x20_0000_0000 }, // 128 GiB - { usage: BufferUsage.MAP_READ | BufferUsage.UNIFORM, size: 16 }, - { usage: BufferUsage.MAP_READ | BufferUsage.UNIFORM, size: kMaxSafeMultipleOf8 }, - { usage: BufferUsage.MAP_READ | BufferUsage.UNIFORM, size: 0x20_0000_0000 }, // 128 GiB - ]) - ) - .fn(t => { - const { _valid, usage, size } = t.params; +). +paramsSubcasesOnly((u) => +u.combineWithParams([ +{ _valid: true, usage: BufferUsage.UNIFORM, size: 16 }, +{ _valid: true, usage: BufferUsage.STORAGE, size: 16 }, +// Invalid because UNIFORM is not allowed with map usages. +{ usage: BufferUsage.MAP_WRITE | BufferUsage.UNIFORM, size: 16 }, +{ usage: BufferUsage.MAP_WRITE | BufferUsage.UNIFORM, size: kMaxSafeMultipleOf8 }, +{ usage: BufferUsage.MAP_WRITE | BufferUsage.UNIFORM, size: 0x20_0000_0000 }, // 128 GiB +{ usage: BufferUsage.MAP_READ | BufferUsage.UNIFORM, size: 16 }, +{ usage: BufferUsage.MAP_READ | BufferUsage.UNIFORM, size: kMaxSafeMultipleOf8 }, +{ usage: BufferUsage.MAP_READ | BufferUsage.UNIFORM, size: 0x20_0000_0000 } // 128 GiB +]) +). +fn((t) => { + const { _valid, usage, size } = t.params; - t.expectGPUError('validation', () => t.device.createBuffer({ size, usage }), !_valid); - }); + t.expectGPUError('validation', () => t.device.createBuffer({ size, usage }), !_valid); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/destroy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/destroy.spec.js index 13572c50959..59b6c9500db 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/destroy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/destroy.spec.js @@ -1,102 +1,101 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for GPUBuffer.destroy. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kBufferUsages } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('all_usages') - .desc('Test destroying buffers of every usage type.') - .paramsSubcasesOnly(u => - u // - .combine('usage', kBufferUsages) - ) - .fn(t => { - const { usage } = t.params; - const buf = t.device.createBuffer({ - size: 4, - usage, - }); - - buf.destroy(); +g.test('all_usages'). +desc('Test destroying buffers of every usage type.'). +paramsSubcasesOnly((u) => +u // +.combine('usage', kBufferUsages) +). +fn((t) => { + const { usage } = t.params; + const buf = t.device.createBuffer({ + size: 4, + usage }); -g.test('error_buffer') - .desc('Test that error buffers may be destroyed without generating validation errors.') - .fn(t => { - const buf = t.getErrorBuffer(); - buf.destroy(); - }); + buf.destroy(); +}); -g.test('twice') - .desc( - `Test that destroying a buffer more than once is allowed. +g.test('error_buffer'). +desc('Test that error buffers may be destroyed without generating validation errors.'). +fn((t) => { + const buf = t.getErrorBuffer(); + buf.destroy(); +}); + +g.test('twice'). +desc( + `Test that destroying a buffer more than once is allowed. - Tests buffers which are mapped at creation or not - Tests buffers with various usages` - ) - .paramsSubcasesOnly(u => - u // - .combine('mappedAtCreation', [false, true]) - .combineWithParams([ - { size: 4, usage: GPUConst.BufferUsage.COPY_SRC }, - { size: 4, usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, - { size: 4, usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, - ]) - ) - .fn(t => { - const buf = t.device.createBuffer(t.params); +). +paramsSubcasesOnly((u) => +u // +.combine('mappedAtCreation', [false, true]). +combineWithParams([ +{ size: 4, usage: GPUConst.BufferUsage.COPY_SRC }, +{ size: 4, usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, +{ size: 4, usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }] +) +). +fn((t) => { + const buf = t.device.createBuffer(t.params); - buf.destroy(); - buf.destroy(); - }); + buf.destroy(); + buf.destroy(); +}); -g.test('while_mapped') - .desc( - `Test destroying buffers while mapped or after being unmapped. +g.test('while_mapped'). +desc( + `Test destroying buffers while mapped or after being unmapped. - Tests {mappable, unmappable mapAtCreation, mappable mapAtCreation} - Tests while {mapped, mapped at creation, unmapped}` - ) - .paramsSubcasesOnly(u => - u // - .combine('mappedAtCreation', [false, true]) - .combine('unmapBeforeDestroy', [false, true]) - .combineWithParams([ - { usage: GPUConst.BufferUsage.COPY_SRC }, - { usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, - { usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, - { - usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC, - mapMode: GPUConst.MapMode.WRITE, - }, - { - usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, - mapMode: GPUConst.MapMode.READ, - }, - ]) - .unless(p => p.mappedAtCreation === false && p.mapMode === undefined) - ) - .fn(async t => { - const { usage, mapMode, mappedAtCreation, unmapBeforeDestroy } = t.params; - const buf = t.device.createBuffer({ - size: 4, - usage, - mappedAtCreation, - }); +). +paramsSubcasesOnly((u) => +u // +.combine('mappedAtCreation', [false, true]). +combine('unmapBeforeDestroy', [false, true]). +combineWithParams([ +{ usage: GPUConst.BufferUsage.COPY_SRC }, +{ usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, +{ usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, +{ + usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC, + mapMode: GPUConst.MapMode.WRITE +}, +{ + usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, + mapMode: GPUConst.MapMode.READ +}] +). +unless((p) => p.mappedAtCreation === false && p.mapMode === undefined) +). +fn(async (t) => { + const { usage, mapMode, mappedAtCreation, unmapBeforeDestroy } = t.params; + const buf = t.device.createBuffer({ + size: 4, + usage, + mappedAtCreation + }); - if (mapMode !== undefined) { - if (mappedAtCreation) { - buf.unmap(); - } - await buf.mapAsync(mapMode); - } - if (unmapBeforeDestroy) { + if (mapMode !== undefined) { + if (mappedAtCreation) { buf.unmap(); } + await buf.mapAsync(mapMode); + } + if (unmapBeforeDestroy) { + buf.unmap(); + } - buf.destroy(); - }); + buf.destroy(); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/mapping.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/mapping.spec.js index 85e82107083..3d27f025676 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/mapping.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/mapping.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for GPUBuffer.mapAsync, GPUBuffer.unmap and GPUBuffer.getMappedRange. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { attemptGarbageCollection } from '../../../../common/util/collect_garbage.js'; import { assert, unreachable } from '../../../../common/util/util.js'; import { kBufferUsages } from '../../../capability_info.js'; @@ -12,13 +11,14 @@ import { ValidationTest } from '../validation_test.js'; class F extends ValidationTest { async testMapAsyncCall( - expectation, + expectation, - buffer, - mode, - offset, - size - ) { + + buffer, + mode, + offset, + size) + { if (expectation === 'success') { const p = buffer.mapAsync(mode, offset, size); await p; @@ -45,6 +45,7 @@ class F extends ValidationTest { assert(expectation.rejectName === null, 'mapAsync unexpectedly passed'); } catch (ex) { assert(ex instanceof Error, 'mapAsync rejected with non-error'); + assert(typeof ex.stack === 'string', 'mapAsync rejected without a stack'); assert(expectation.rejectName === ex.name, `mapAsync rejected unexpectedly with: ${ex}`); assert( expectation.earlyRejection === rejectedEarly, @@ -73,12 +74,12 @@ class F extends ValidationTest { case GPUMapMode.READ: return this.device.createBuffer({ size, - usage: GPUBufferUsage.MAP_READ, + usage: GPUBufferUsage.MAP_READ }); case GPUMapMode.WRITE: return this.device.createBuffer({ size, - usage: GPUBufferUsage.MAP_WRITE, + usage: GPUBufferUsage.MAP_WRITE }); default: unreachable(); @@ -92,1039 +93,1033 @@ const kMapModeOptions = [GPUConst.MapMode.READ, GPUConst.MapMode.WRITE]; const kOffsetAlignment = 8; const kSizeAlignment = 4; -g.test('mapAsync,usage') - .desc( - `Test the usage validation for mapAsync. +g.test('mapAsync,usage'). +desc( + `Test the usage validation for mapAsync. For each buffer usage: For GPUMapMode.READ, GPUMapMode.WRITE, and 0: Test that the mapAsync call is valid iff the mapping usage is not 0 and the buffer usage the mapMode flag.` - ) - .paramsSubcasesOnly(u => - u // - .combineWithParams([ - { mapMode: GPUConst.MapMode.READ, validUsage: GPUConst.BufferUsage.MAP_READ }, - { mapMode: GPUConst.MapMode.WRITE, validUsage: GPUConst.BufferUsage.MAP_WRITE }, - // Using mapMode 0 is never valid, so there is no validUsage. - { mapMode: 0, validUsage: null }, - ]) - .combine('usage', kBufferUsages) - ) - .fn(async t => { - const { mapMode, validUsage, usage } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combineWithParams([ +{ mapMode: GPUConst.MapMode.READ, validUsage: GPUConst.BufferUsage.MAP_READ }, +{ mapMode: GPUConst.MapMode.WRITE, validUsage: GPUConst.BufferUsage.MAP_WRITE }, +// Using mapMode 0 is never valid, so there is no validUsage. +{ mapMode: 0, validUsage: null }] +). +combine('usage', kBufferUsages) +). +fn(async (t) => { + const { mapMode, validUsage, usage } = t.params; - const buffer = t.device.createBuffer({ - size: 16, - usage, - }); - - const successParam = - usage === validUsage - ? 'success' - : { - validationError: true, - earlyRejection: false, - rejectName: 'OperationError', - }; - await t.testMapAsyncCall(successParam, buffer, mapMode); + const buffer = t.device.createBuffer({ + size: 16, + usage }); -g.test('mapAsync,invalidBuffer') - .desc('Test that mapAsync is an error when called on an invalid buffer.') - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const buffer = t.getErrorBuffer(); - await t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, - buffer, - mapMode - ); - }); + const successParam = + usage === validUsage ? + 'success' : + { + validationError: true, + earlyRejection: false, + rejectName: 'OperationError' + }; + await t.testMapAsyncCall(successParam, buffer, mapMode); +}); -g.test('mapAsync,state,destroyed') - .desc('Test that mapAsync is an error when called on a destroyed buffer.') - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); +g.test('mapAsync,invalidBuffer'). +desc('Test that mapAsync is an error when called on an invalid buffer.'). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const buffer = t.getErrorBuffer(); + await t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); +}); - // Start mapping the buffer, we are going to destroy it before it resolves so it will reject - // the mapping promise with an AbortError. - const pending = t.testMapAsyncCall( - { validationError: false, earlyRejection: false, rejectName: 'AbortError' }, - buffer, - mapMode - ); +g.test('mapAsync,state,destroyed'). +desc('Test that mapAsync is an error when called on a destroyed buffer.'). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const buffer = t.createMappableBuffer(mapMode, 16); - buffer.destroy(); - await t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, - buffer, - mapMode - ); + // Start mapping the buffer, we are going to destroy it before it resolves so it will reject + // the mapping promise with an AbortError. + const pending = t.testMapAsyncCall( + { validationError: false, earlyRejection: false, rejectName: 'AbortError' }, + buffer, + mapMode + ); - await pending; - }); + buffer.destroy(); + await t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); -g.test('mapAsync,state,mappedAtCreation') - .desc( - `Test that mapAsync is an error when called on a buffer mapped at creation, + await pending; +}); + +g.test('mapAsync,state,mappedAtCreation'). +desc( + `Test that mapAsync is an error when called on a buffer mapped at creation, but succeeds after unmapping it.` - ) - .paramsSubcasesOnly([ - { mapMode: GPUConst.MapMode.READ, validUsage: GPUConst.BufferUsage.MAP_READ }, - { mapMode: GPUConst.MapMode.WRITE, validUsage: GPUConst.BufferUsage.MAP_WRITE }, - ]) - .fn(async t => { - const { mapMode, validUsage } = t.params; +). +paramsSubcasesOnly([ +{ mapMode: GPUConst.MapMode.READ, validUsage: GPUConst.BufferUsage.MAP_READ }, +{ mapMode: GPUConst.MapMode.WRITE, validUsage: GPUConst.BufferUsage.MAP_WRITE }] +). +fn(async (t) => { + const { mapMode, validUsage } = t.params; - const buffer = t.device.createBuffer({ - size: 16, - usage: validUsage, - mappedAtCreation: true, - }); - await t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, - buffer, - mapMode - ); - - buffer.unmap(); - await t.testMapAsyncCall('success', buffer, mapMode); + const buffer = t.device.createBuffer({ + size: 16, + usage: validUsage, + mappedAtCreation: true }); + await t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); -g.test('mapAsync,state,mapped') - .desc( - `Test that mapAsync is an error when called on a mapped buffer, but succeeds + buffer.unmap(); + await t.testMapAsyncCall('success', buffer, mapMode); +}); + +g.test('mapAsync,state,mapped'). +desc( + `Test that mapAsync is an error when called on a mapped buffer, but succeeds after unmapping it.` - ) - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; +). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); - await t.testMapAsyncCall('success', buffer, mapMode); - await t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, - buffer, - mapMode - ); + const buffer = t.createMappableBuffer(mapMode, 16); + await t.testMapAsyncCall('success', buffer, mapMode); + await t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); - buffer.unmap(); - await t.testMapAsyncCall('success', buffer, mapMode); - }); + buffer.unmap(); + await t.testMapAsyncCall('success', buffer, mapMode); +}); -g.test('mapAsync,state,mappingPending') - .desc( - `Test that mapAsync is rejected when called on a buffer that is being mapped, +g.test('mapAsync,state,mappingPending'). +desc( + `Test that mapAsync is rejected when called on a buffer that is being mapped, but succeeds after the previous mapping request is cancelled.` - ) - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; +). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); + const buffer = t.createMappableBuffer(mapMode, 16); - // Start mapping the buffer, we are going to unmap it before it resolves so it will reject - // the mapping promise with an AbortError. - const pending0 = t.testMapAsyncCall( - { validationError: false, earlyRejection: false, rejectName: 'AbortError' }, - buffer, - mapMode - ); + // Start mapping the buffer, we are going to unmap it before it resolves so it will reject + // the mapping promise with an AbortError. + const pending0 = t.testMapAsyncCall( + { validationError: false, earlyRejection: false, rejectName: 'AbortError' }, + buffer, + mapMode + ); - // Do the test of mapAsync while [[pending_map]] is non-null. It has to be synchronous so - // that we can unmap the previous mapping in the same stack frame and testing this one doesn't - // get canceled, but instead is rejected. - const pending1 = t.testMapAsyncCall( - { validationError: false, earlyRejection: true, rejectName: 'OperationError' }, - buffer, - mapMode - ); + // Do the test of mapAsync while [[pending_map]] is non-null. It has to be synchronous so + // that we can unmap the previous mapping in the same stack frame and testing this one doesn't + // get canceled, but instead is rejected. + const pending1 = t.testMapAsyncCall( + { validationError: false, earlyRejection: true, rejectName: 'OperationError' }, + buffer, + mapMode + ); - // Unmap the first mapping. It should now be possible to successfully call mapAsync - // This unmap should cause the first mapAsync rejection. - buffer.unmap(); - await t.testMapAsyncCall('success', buffer, mapMode); + // Unmap the first mapping. It should now be possible to successfully call mapAsync + // This unmap should cause the first mapAsync rejection. + buffer.unmap(); + await t.testMapAsyncCall('success', buffer, mapMode); - await pending0; - await pending1; - }); + await pending0; + await pending1; +}); -g.test('mapAsync,sizeUnspecifiedOOB') - .desc( - `Test that mapAsync with size unspecified rejects if offset > buffer.[[size]], +g.test('mapAsync,sizeUnspecifiedOOB'). +desc( + `Test that mapAsync with size unspecified rejects if offset > buffer.[[size]], with various cases at the limits of the buffer size or with a misaligned offset. Also test for an empty buffer.` - ) - .paramsSubcasesOnly(u => - u // - .combine('mapMode', kMapModeOptions) - .combineWithParams([ - // 0 size buffer. - { bufferSize: 0, offset: 0 }, - { bufferSize: 0, offset: 1 }, - { bufferSize: 0, offset: kOffsetAlignment }, +). +paramsSubcasesOnly((u) => +u // +.combine('mapMode', kMapModeOptions). +combineWithParams([ +// 0 size buffer. +{ bufferSize: 0, offset: 0 }, +{ bufferSize: 0, offset: 1 }, +{ bufferSize: 0, offset: kOffsetAlignment }, - // Test with a buffer that's not empty. - { bufferSize: 16, offset: 0 }, - { bufferSize: 16, offset: kOffsetAlignment }, - { bufferSize: 16, offset: 16 }, - { bufferSize: 16, offset: 17 }, - { bufferSize: 16, offset: 16 + kOffsetAlignment }, - ]) - ) - .fn(async t => { - const { mapMode, bufferSize, offset } = t.params; - const buffer = t.createMappableBuffer(mapMode, bufferSize); +// Test with a buffer that's not empty. +{ bufferSize: 16, offset: 0 }, +{ bufferSize: 16, offset: kOffsetAlignment }, +{ bufferSize: 16, offset: 16 }, +{ bufferSize: 16, offset: 17 }, +{ bufferSize: 16, offset: 16 + kOffsetAlignment }] +) +). +fn(async (t) => { + const { mapMode, bufferSize, offset } = t.params; + const buffer = t.createMappableBuffer(mapMode, bufferSize); - const successParam = - offset <= bufferSize - ? 'success' - : { - validationError: true, - earlyRejection: false, - rejectName: 'OperationError', - }; - await t.testMapAsyncCall(successParam, buffer, mapMode, offset); - }); + const successParam = + offset <= bufferSize ? + 'success' : + { + validationError: true, + earlyRejection: false, + rejectName: 'OperationError' + }; + await t.testMapAsyncCall(successParam, buffer, mapMode, offset); +}); -g.test('mapAsync,offsetAndSizeAlignment') - .desc("Test that mapAsync fails if the alignment of offset and size isn't correct.") - .paramsSubcasesOnly(u => - u - .combine('mapMode', kMapModeOptions) - .combine('offset', [0, kOffsetAlignment, kOffsetAlignment / 2]) - .combine('size', [0, kSizeAlignment, kSizeAlignment / 2]) - ) - .fn(async t => { - const { mapMode, offset, size } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); +g.test('mapAsync,offsetAndSizeAlignment'). +desc("Test that mapAsync fails if the alignment of offset and size isn't correct."). +paramsSubcasesOnly((u) => +u. +combine('mapMode', kMapModeOptions). +combine('offset', [0, kOffsetAlignment, kOffsetAlignment / 2]). +combine('size', [0, kSizeAlignment, kSizeAlignment / 2]) +). +fn(async (t) => { + const { mapMode, offset, size } = t.params; + const buffer = t.createMappableBuffer(mapMode, 16); - const successParam = - offset % kOffsetAlignment === 0 && size % kSizeAlignment === 0 - ? 'success' - : { - validationError: true, - earlyRejection: false, - rejectName: 'OperationError', - }; - await t.testMapAsyncCall(successParam, buffer, mapMode, offset, size); - }); + const successParam = + offset % kOffsetAlignment === 0 && size % kSizeAlignment === 0 ? + 'success' : + { + validationError: true, + earlyRejection: false, + rejectName: 'OperationError' + }; + await t.testMapAsyncCall(successParam, buffer, mapMode, offset, size); +}); -g.test('mapAsync,offsetAndSizeOOB') - .desc('Test that mapAsync fails if offset + size is larger than the buffer size.') - .paramsSubcasesOnly(u => - u // - .combine('mapMode', kMapModeOptions) - .combineWithParams([ - // For a 0 size buffer - { bufferSize: 0, offset: 0, size: 0 }, - { bufferSize: 0, offset: 0, size: 4 }, - { bufferSize: 0, offset: 8, size: 0 }, +g.test('mapAsync,offsetAndSizeOOB'). +desc('Test that mapAsync fails if offset + size is larger than the buffer size.'). +paramsSubcasesOnly((u) => +u // +.combine('mapMode', kMapModeOptions). +combineWithParams([ +// For a 0 size buffer +{ bufferSize: 0, offset: 0, size: 0 }, +{ bufferSize: 0, offset: 0, size: 4 }, +{ bufferSize: 0, offset: 8, size: 0 }, - // For a small buffer - { bufferSize: 16, offset: 0, size: 16 }, - { bufferSize: 16, offset: kOffsetAlignment, size: 16 }, +// For a small buffer +{ bufferSize: 16, offset: 0, size: 16 }, +{ bufferSize: 16, offset: kOffsetAlignment, size: 16 }, - { bufferSize: 16, offset: 16, size: 0 }, - { bufferSize: 16, offset: 16, size: kSizeAlignment }, +{ bufferSize: 16, offset: 16, size: 0 }, +{ bufferSize: 16, offset: 16, size: kSizeAlignment }, - { bufferSize: 16, offset: 8, size: 0 }, - { bufferSize: 16, offset: 8, size: 8 }, - { bufferSize: 16, offset: 8, size: 8 + kSizeAlignment }, +{ bufferSize: 16, offset: 8, size: 0 }, +{ bufferSize: 16, offset: 8, size: 8 }, +{ bufferSize: 16, offset: 8, size: 8 + kSizeAlignment }, - // For a larger buffer - { bufferSize: 1024, offset: 0, size: 1024 }, - { bufferSize: 1024, offset: kOffsetAlignment, size: 1024 }, +// For a larger buffer +{ bufferSize: 1024, offset: 0, size: 1024 }, +{ bufferSize: 1024, offset: kOffsetAlignment, size: 1024 }, - { bufferSize: 1024, offset: 1024, size: 0 }, - { bufferSize: 1024, offset: 1024, size: kSizeAlignment }, +{ bufferSize: 1024, offset: 1024, size: 0 }, +{ bufferSize: 1024, offset: 1024, size: kSizeAlignment }, - { bufferSize: 1024, offset: 512, size: 0 }, - { bufferSize: 1024, offset: 512, size: 512 }, - { bufferSize: 1024, offset: 512, size: 512 + kSizeAlignment }, - ]) - ) - .fn(async t => { - const { mapMode, bufferSize, size, offset } = t.params; - const buffer = t.createMappableBuffer(mapMode, bufferSize); +{ bufferSize: 1024, offset: 512, size: 0 }, +{ bufferSize: 1024, offset: 512, size: 512 }, +{ bufferSize: 1024, offset: 512, size: 512 + kSizeAlignment }] +) +). +fn(async (t) => { + const { mapMode, bufferSize, size, offset } = t.params; + const buffer = t.createMappableBuffer(mapMode, bufferSize); - const successParam = - offset + size <= bufferSize - ? 'success' - : { - validationError: true, - earlyRejection: false, - rejectName: 'OperationError', - }; - await t.testMapAsyncCall(successParam, buffer, mapMode, offset, size); - }); + const successParam = + offset + size <= bufferSize ? + 'success' : + { + validationError: true, + earlyRejection: false, + rejectName: 'OperationError' + }; + await t.testMapAsyncCall(successParam, buffer, mapMode, offset, size); +}); -g.test('mapAsync,earlyRejection') - .desc("Test that mapAsync fails immediately if it's pending map.") - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions).combine('offset2', [0, 8])) - .fn(async t => { - const { mapMode, offset2 } = t.params; +g.test('mapAsync,earlyRejection'). +desc("Test that mapAsync fails immediately if it's pending map."). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions).combine('offset2', [0, 8])). +fn(async (t) => { + const { mapMode, offset2 } = t.params; - const bufferSize = 16; - const mapSize = 8; - const offset1 = 0; + const bufferSize = 16; + const mapSize = 8; + const offset1 = 0; - const buffer = t.createMappableBuffer(mapMode, bufferSize); - const p1 = buffer.mapAsync(mapMode, offset1, mapSize); // succeeds - await t.testMapAsyncCall( - { - validationError: false, - earlyRejection: true, - rejectName: 'OperationError', - }, - buffer, - mapMode, - offset2, - mapSize - ); + const buffer = t.createMappableBuffer(mapMode, bufferSize); + const p1 = buffer.mapAsync(mapMode, offset1, mapSize); // succeeds + await t.testMapAsyncCall( + { + validationError: false, + earlyRejection: true, + rejectName: 'OperationError' + }, + buffer, + mapMode, + offset2, + mapSize + ); + await p1; // ensure the original map still succeeds +}); - await p1; // ensure the original map still succeeds - }); - -g.test('mapAsync,abort_over_invalid_error') - .desc( - `Test that unmap abort error should have precedence over validation error +g.test('mapAsync,abort_over_invalid_error'). +desc( + `Test that unmap abort error should have precedence over validation error TODO - Add other validation error test (eg. offset is not a multiple of 8) ` - ) - .paramsSubcasesOnly(u => - u.combine('mapMode', kMapModeOptions).combine('unmapBeforeResolve', [true, false]) - ) - .fn(async t => { - const { mapMode, unmapBeforeResolve } = t.params; - const bufferSize = 8; - const buffer = t.createMappableBuffer(mapMode, bufferSize); - await buffer.mapAsync(mapMode); +). +paramsSubcasesOnly((u) => +u.combine('mapMode', kMapModeOptions).combine('unmapBeforeResolve', [true, false]) +). +fn(async (t) => { + const { mapMode, unmapBeforeResolve } = t.params; + const bufferSize = 8; + const buffer = t.createMappableBuffer(mapMode, bufferSize); + await buffer.mapAsync(mapMode); - if (unmapBeforeResolve) { - // unmap abort error should have precedence over validation error - const pending = t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'AbortError' }, - buffer, - mapMode - ); - - buffer.unmap(); - await pending; - } else { - // map on already mapped buffer should cause validation error - await t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, - buffer, - mapMode - ); - - buffer.unmap(); - } - }); - -g.test('getMappedRange,state,mapped') - .desc('Test that it is valid to call getMappedRange in the mapped state') - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const bufferSize = 16; - const buffer = t.createMappableBuffer(mapMode, bufferSize); - await buffer.mapAsync(mapMode); - - const data = buffer.getMappedRange(); - t.expect(data instanceof ArrayBuffer); - t.expect(data.byteLength === bufferSize); - - // map on already mapped buffer should be rejected + if (unmapBeforeResolve) { + // unmap abort error should have precedence over validation error const pending = t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + { validationError: true, earlyRejection: false, rejectName: 'AbortError' }, buffer, mapMode ); - - t.expect(data.byteLength === bufferSize); - await pending; - buffer.unmap(); - - t.expect(data.byteLength === 0); - }); - -g.test('getMappedRange,state,mappedAtCreation') - .desc( - `Test that, in the mapped-at-creation state, it is valid to call getMappedRange, for all buffer usages, - and invalid to call mapAsync, for all map modes.` - ) - .paramsSubcasesOnly(u => - u.combine('bufferUsage', kBufferUsages).combine('mapMode', kMapModeOptions) - ) - .fn(async t => { - const { bufferUsage, mapMode } = t.params; - const bufferSize = 16; - const buffer = t.device.createBuffer({ - usage: bufferUsage, - size: bufferSize, - mappedAtCreation: true, - }); - - const data = buffer.getMappedRange(); - t.expect(data instanceof ArrayBuffer); - t.expect(data.byteLength === bufferSize); - - // map on already mapped buffer should be rejected - const pending = t.testMapAsyncCall( - { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, - buffer, - mapMode - ); - - t.expect(data.byteLength === bufferSize); await pending; - - buffer.unmap(); - - t.expect(data.byteLength === 0); - }); - -g.test('getMappedRange,state,invalid_mappedAtCreation') - .desc( - `mappedAtCreation should return a mapped buffer, even if the buffer is invalid. -Like VRAM allocation (see map_oom), validation can be performed asynchronously (in the GPU process) -so the Content process doesn't necessarily know the buffer is invalid.` - ) - .fn(t => { - const buffer = t.expectGPUError('validation', () => - t.device.createBuffer({ - mappedAtCreation: true, - size: 16, - usage: 0xffff_ffff, // Invalid usage - }) - ); - - // Should still be valid. - buffer.getMappedRange(); - }); - -g.test('getMappedRange,state,mappedAgain') - .desc( - 'Test that it is valid to call getMappedRange in the mapped state, even if there is a duplicate mapAsync before' - ) - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); - await buffer.mapAsync(mapMode); - - // call mapAsync again on already mapped buffer should fail + } else { + // map on already mapped buffer should cause validation error await t.testMapAsyncCall( { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, buffer, mapMode ); + buffer.unmap(); + } +}); - // getMapppedRange should still success - t.testGetMappedRangeCall(true, buffer); +g.test('getMappedRange,state,mapped'). +desc('Test that it is valid to call getMappedRange in the mapped state'). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const bufferSize = 16; + const buffer = t.createMappableBuffer(mapMode, bufferSize); + await buffer.mapAsync(mapMode); + + const data = buffer.getMappedRange(); + t.expect(data instanceof ArrayBuffer); + t.expect(data.byteLength === bufferSize); + + // map on already mapped buffer should be rejected + const pending = t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); + t.expect(data.byteLength === bufferSize); + await pending; + + buffer.unmap(); + + t.expect(data.byteLength === 0); +}); + +g.test('getMappedRange,state,mappedAtCreation'). +desc( + `Test that, in the mapped-at-creation state, it is valid to call getMappedRange, for all buffer usages, + and invalid to call mapAsync, for all map modes.` +). +paramsSubcasesOnly((u) => +u.combine('bufferUsage', kBufferUsages).combine('mapMode', kMapModeOptions) +). +fn(async (t) => { + const { bufferUsage, mapMode } = t.params; + const bufferSize = 16; + const buffer = t.device.createBuffer({ + usage: bufferUsage, + size: bufferSize, + mappedAtCreation: true }); -g.test('getMappedRange,state,unmapped') - .desc( - `Test that it is invalid to call getMappedRange in the unmapped state. + const data = buffer.getMappedRange(); + t.expect(data instanceof ArrayBuffer); + t.expect(data.byteLength === bufferSize); + + // map on already mapped buffer should be rejected + const pending = t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); + t.expect(data.byteLength === bufferSize); + await pending; + + buffer.unmap(); + + t.expect(data.byteLength === 0); +}); + +g.test('getMappedRange,state,invalid_mappedAtCreation'). +desc( + `mappedAtCreation should return a mapped buffer, even if the buffer is invalid. +Like VRAM allocation (see map_oom), validation can be performed asynchronously (in the GPU process) +so the Content process doesn't necessarily know the buffer is invalid.` +). +fn((t) => { + const buffer = t.expectGPUError('validation', () => + t.device.createBuffer({ + mappedAtCreation: true, + size: 16, + usage: 0xffff_ffff // Invalid usage + }) + ); + + // Should still be valid. + buffer.getMappedRange(); +}); + +g.test('getMappedRange,state,mappedAgain'). +desc( + 'Test that it is valid to call getMappedRange in the mapped state, even if there is a duplicate mapAsync before' +). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const buffer = t.createMappableBuffer(mapMode, 16); + await buffer.mapAsync(mapMode); + + // call mapAsync again on already mapped buffer should fail + await t.testMapAsyncCall( + { validationError: true, earlyRejection: false, rejectName: 'OperationError' }, + buffer, + mapMode + ); + + // getMapppedRange should still success + t.testGetMappedRangeCall(true, buffer); +}); + +g.test('getMappedRange,state,unmapped'). +desc( + `Test that it is invalid to call getMappedRange in the unmapped state. Test for various cases of being unmapped: at creation, after a mapAsync call or after being created mapped.` - ) - .fn(async t => { - // It is invalid to call getMappedRange when the buffer starts unmapped when created. - { - const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); - t.testGetMappedRangeCall(false, buffer); - } - - // It is invalid to call getMappedRange when the buffer is unmapped after mapAsync. - { - const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); - await buffer.mapAsync(GPUMapMode.READ); - buffer.unmap(); - t.testGetMappedRangeCall(false, buffer); - } - - // It is invalid to call getMappedRange when the buffer is unmapped after mappedAtCreation. - { - const buffer = t.device.createBuffer({ - usage: GPUBufferUsage.MAP_READ, - size: 16, - mappedAtCreation: true, - }); - buffer.unmap(); - t.testGetMappedRangeCall(false, buffer); - } - }); - -g.test('getMappedRange,subrange,mapped') - .desc( - `Test that old getMappedRange returned arraybuffer does not exist after unmap, and newly returned - arraybuffer after new map has correct subrange` - ) - .params(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const bufferSize = 16; - const offset = 8; - const subrangeSize = bufferSize - offset; - const buffer = t.createMappableBuffer(mapMode, bufferSize); - await buffer.mapAsync(mapMode); - - const data0 = buffer.getMappedRange(); - t.expect(data0 instanceof ArrayBuffer); - t.expect(data0.byteLength === bufferSize); - - buffer.unmap(); - t.expect(data0.byteLength === 0); - - await buffer.mapAsync(mapMode, offset); - const data1 = buffer.getMappedRange(8); - - t.expect(data0.byteLength === 0); - t.expect(data1.byteLength === subrangeSize); - }); - -g.test('getMappedRange,subrange,mappedAtCreation') - .desc( - `Test that old getMappedRange returned arraybuffer does not exist after unmap and newly returned - arraybuffer after new map has correct subrange` - ) - .fn(async t => { - const bufferSize = 16; - const offset = 8; - const subrangeSize = bufferSize - offset; - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - mappedAtCreation: true, - }); - - const data0 = buffer.getMappedRange(); - t.expect(data0 instanceof ArrayBuffer); - t.expect(data0.byteLength === bufferSize); - - buffer.unmap(); - t.expect(data0.byteLength === 0); - - await buffer.mapAsync(GPUMapMode.READ, offset); - const data1 = buffer.getMappedRange(8); - - t.expect(data0.byteLength === 0); - t.expect(data1.byteLength === subrangeSize); - }); - -g.test('getMappedRange,state,destroyed') - .desc( - `Test that it is invalid to call getMappedRange in the destroyed state. -Test for various cases of being destroyed: at creation, after a mapAsync call or after being created mapped.` - ) - .fn(async t => { - // It is invalid to call getMappedRange when the buffer is destroyed when unmapped. - { - const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); - buffer.destroy(); - t.testGetMappedRangeCall(false, buffer); - } - - // It is invalid to call getMappedRange when the buffer is destroyed when mapped. - { - const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); - await buffer.mapAsync(GPUMapMode.READ); - buffer.destroy(); - t.testGetMappedRangeCall(false, buffer); - } - - // It is invalid to call getMappedRange when the buffer is destroyed when mapped at creation. - { - const buffer = t.device.createBuffer({ - usage: GPUBufferUsage.MAP_READ, - size: 16, - mappedAtCreation: true, - }); - buffer.destroy(); - t.testGetMappedRangeCall(false, buffer); - } - }); - -g.test('getMappedRange,state,mappingPending') - .desc(`Test that it is invalid to call getMappedRange in the mappingPending state.`) - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); - - /* noawait */ const mapping0 = buffer.mapAsync(mapMode); - // seconding mapping should be rejected - const mapping1 = t.testMapAsyncCall( - { validationError: false, earlyRejection: true, rejectName: 'OperationError' }, - buffer, - mapMode - ); - - // invalid in mappingPending state +). +fn(async (t) => { + // It is invalid to call getMappedRange when the buffer starts unmapped when created. + { + const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); t.testGetMappedRangeCall(false, buffer); + } - await mapping0; - - // valid after buffer is mapped - t.testGetMappedRangeCall(true, buffer); - - await mapping1; - }); - -g.test('getMappedRange,offsetAndSizeAlignment,mapped') - .desc(`Test that getMappedRange fails if the alignment of offset and size isn't correct.`) - .params(u => - u - .combine('mapMode', kMapModeOptions) - .beginSubcases() - .combine('mapOffset', [0, kOffsetAlignment]) - .combine('offset', [0, kOffsetAlignment, kOffsetAlignment / 2]) - .combine('size', [0, kSizeAlignment, kSizeAlignment / 2]) - ) - .fn(async t => { - const { mapMode, mapOffset, offset, size } = t.params; - const buffer = t.createMappableBuffer(mapMode, 32); - await buffer.mapAsync(mapMode, mapOffset); - - const success = offset % kOffsetAlignment === 0 && size % kSizeAlignment === 0; - t.testGetMappedRangeCall(success, buffer, offset + mapOffset, size); - }); - -g.test('getMappedRange,offsetAndSizeAlignment,mappedAtCreation') - .desc(`Test that getMappedRange fails if the alignment of offset and size isn't correct.`) - .paramsSubcasesOnly(u => - u - .combine('offset', [0, kOffsetAlignment, kOffsetAlignment / 2]) - .combine('size', [0, kSizeAlignment, kSizeAlignment / 2]) - ) - .fn(t => { - const { offset, size } = t.params; - const buffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - mappedAtCreation: true, - }); - const success = offset % kOffsetAlignment === 0 && size % kSizeAlignment === 0; - t.testGetMappedRangeCall(success, buffer, offset, size); - }); - -g.test('getMappedRange,sizeAndOffsetOOB,mappedAtCreation') - .desc( - `Test that getMappedRange size + offset must be less than the buffer size for a - buffer mapped at creation. (and offset has not constraints on its own)` - ) - .paramsSubcasesOnly([ - // Tests for a zero-sized buffer, with and without a size defined. - { bufferSize: 0, offset: undefined, size: undefined }, - { bufferSize: 0, offset: undefined, size: 0 }, - { bufferSize: 0, offset: undefined, size: kSizeAlignment }, - { bufferSize: 0, offset: 0, size: undefined }, - { bufferSize: 0, offset: 0, size: 0 }, - { bufferSize: 0, offset: kOffsetAlignment, size: undefined }, - { bufferSize: 0, offset: kOffsetAlignment, size: 0 }, - - // Tests for a non-empty buffer, with an undefined offset. - { bufferSize: 80, offset: undefined, size: 80 }, - { bufferSize: 80, offset: undefined, size: 80 + kSizeAlignment }, - - // Tests for a non-empty buffer, with an undefined size. - { bufferSize: 80, offset: undefined, size: undefined }, - { bufferSize: 80, offset: 0, size: undefined }, - { bufferSize: 80, offset: kOffsetAlignment, size: undefined }, - { bufferSize: 80, offset: 80, size: undefined }, - { bufferSize: 80, offset: 80 + kOffsetAlignment, size: undefined }, - - // Tests for a non-empty buffer with a size defined. - { bufferSize: 80, offset: 0, size: 80 }, - { bufferSize: 80, offset: 0, size: 80 + kSizeAlignment }, - { bufferSize: 80, offset: kOffsetAlignment, size: 80 }, - - { bufferSize: 80, offset: 40, size: 40 }, - { bufferSize: 80, offset: 40 + kOffsetAlignment, size: 40 }, - { bufferSize: 80, offset: 40, size: 40 + kSizeAlignment }, - ]) - .fn(t => { - const { bufferSize, offset, size } = t.params; - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_DST, - mappedAtCreation: true, - }); - - const actualOffset = offset ?? 0; - const actualSize = size ?? bufferSize - actualOffset; - - const success = actualOffset <= bufferSize && actualOffset + actualSize <= bufferSize; - t.testGetMappedRangeCall(success, buffer, offset, size); - }); - -g.test('getMappedRange,sizeAndOffsetOOB,mapped') - .desc('Test that getMappedRange size + offset must be less than the mapAsync range.') - .paramsSubcasesOnly(u => - u // - .combine('mapMode', kMapModeOptions) - .combineWithParams([ - // Tests for an empty buffer, and implicit mapAsync size. - { bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: undefined, size: undefined }, - { bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: undefined, size: 0 }, - { - bufferSize: 0, - mapOffset: 0, - mapSize: undefined, - offset: undefined, - size: kSizeAlignment, - }, - { bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: 0, size: undefined }, - { bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: 0, size: 0 }, - { - bufferSize: 0, - mapOffset: 0, - mapSize: undefined, - offset: kOffsetAlignment, - size: undefined, - }, - { bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: kOffsetAlignment, size: 0 }, - - // Tests for an empty buffer, and explicit mapAsync size. - { bufferSize: 0, mapOffset: 0, mapSize: 0, offset: undefined, size: undefined }, - { bufferSize: 0, mapOffset: 0, mapSize: 0, offset: 0, size: undefined }, - { bufferSize: 0, mapOffset: 0, mapSize: 0, offset: 0, size: 0 }, - { bufferSize: 0, mapOffset: 0, mapSize: 0, offset: kOffsetAlignment, size: undefined }, - { bufferSize: 0, mapOffset: 0, mapSize: 0, offset: kOffsetAlignment, size: 0 }, - - // Test for a fully implicit mapAsync call - { bufferSize: 80, mapOffset: undefined, mapSize: undefined, offset: 0, size: 80 }, - { - bufferSize: 80, - mapOffset: undefined, - mapSize: undefined, - offset: 0, - size: 80 + kSizeAlignment, - }, - { - bufferSize: 80, - mapOffset: undefined, - mapSize: undefined, - offset: kOffsetAlignment, - size: 80, - }, - - // Test for a mapAsync call with an implicit size - { bufferSize: 80, mapOffset: 24, mapSize: undefined, offset: 24, size: 80 - 24 }, - { - bufferSize: 80, - mapOffset: 24, - mapSize: undefined, - offset: 0, - size: 80 - 24 + kSizeAlignment, - }, - { - bufferSize: 80, - mapOffset: 24, - mapSize: undefined, - offset: kOffsetAlignment, - size: 80 - 24, - }, - - // Test for a non-empty buffer fully mapped. - { bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 0, size: 80 }, - { bufferSize: 80, mapOffset: 0, mapSize: 80, offset: kOffsetAlignment, size: 80 }, - { bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 0, size: 80 + kSizeAlignment }, - - { bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 40, size: 40 }, - { bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 40 + kOffsetAlignment, size: 40 }, - { bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 40, size: 40 + kSizeAlignment }, - - // Test for a buffer partially mapped. - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24, size: 40 }, - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24 - kOffsetAlignment, size: 40 }, - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24 + kOffsetAlignment, size: 40 }, - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24, size: 40 + kSizeAlignment }, - - // Test for a partially mapped buffer with implicit size and offset for getMappedRange. - // - Buffer partially mapped in the middle - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: undefined, size: undefined }, - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 0, size: undefined }, - { bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24, size: undefined }, - // - Buffer partially mapped to the end - { bufferSize: 80, mapOffset: 24, mapSize: undefined, offset: 24, size: undefined }, - { bufferSize: 80, mapOffset: 24, mapSize: undefined, offset: 80, size: undefined }, - // - Buffer partially mapped from the start - { bufferSize: 80, mapOffset: 0, mapSize: 64, offset: undefined, size: undefined }, - { bufferSize: 80, mapOffset: 0, mapSize: 64, offset: undefined, size: 64 }, - ]) - ) - .fn(async t => { - const { mapMode, bufferSize, mapOffset, mapSize, offset, size } = t.params; - const buffer = t.createMappableBuffer(mapMode, bufferSize); - await buffer.mapAsync(mapMode, mapOffset, mapSize); - - const actualMapOffset = mapOffset ?? 0; - const actualMapSize = mapSize ?? bufferSize - actualMapOffset; - - const actualOffset = offset ?? 0; - const actualSize = size ?? bufferSize - actualOffset; - - const success = - actualOffset >= actualMapOffset && - actualOffset <= bufferSize && - actualOffset + actualSize <= actualMapOffset + actualMapSize; - t.testGetMappedRangeCall(success, buffer, offset, size); - }); - -g.test('getMappedRange,disjointRanges') - .desc('Test that the ranges asked through getMappedRange must be disjoint.') - .paramsSubcasesOnly(u => - u // - .combine('remapBetweenCalls', [false, true]) - .combineWithParams([ - // Disjoint ranges with one that's empty. - { offset1: 8, size1: 0, offset2: 8, size2: 8 }, - { offset1: 16, size1: 0, offset2: 8, size2: 8 }, - - { offset1: 8, size1: 8, offset2: 8, size2: 0 }, - { offset1: 8, size1: 8, offset2: 16, size2: 0 }, - - // Disjoint ranges with both non-empty. - { offset1: 0, size1: 8, offset2: 8, size2: 8 }, - { offset1: 16, size1: 8, offset2: 8, size2: 8 }, - - { offset1: 8, size1: 8, offset2: 0, size2: 8 }, - { offset1: 8, size1: 8, offset2: 16, size2: 8 }, - - // Empty range contained inside another one. - { offset1: 16, size1: 20, offset2: 24, size2: 0 }, - { offset1: 24, size1: 0, offset2: 16, size2: 20 }, - - // Ranges that overlap only partially. - { offset1: 16, size1: 20, offset2: 8, size2: 20 }, - { offset1: 16, size1: 20, offset2: 32, size2: 20 }, - - // Ranges that include one another. - { offset1: 0, size1: 80, offset2: 16, size2: 20 }, - { offset1: 16, size1: 20, offset2: 0, size2: 80 }, - ]) - ) - .fn(async t => { - const { offset1, size1, offset2, size2, remapBetweenCalls } = t.params; - const buffer = t.device.createBuffer({ size: 80, usage: GPUBufferUsage.MAP_READ }); + // It is invalid to call getMappedRange when the buffer is unmapped after mapAsync. + { + const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); await buffer.mapAsync(GPUMapMode.READ); + buffer.unmap(); + t.testGetMappedRangeCall(false, buffer); + } - t.testGetMappedRangeCall(true, buffer, offset1, size1); - - if (remapBetweenCalls) { - buffer.unmap(); - await buffer.mapAsync(GPUMapMode.READ); - } - - const range1StartsAfter2 = offset1 >= offset2 + size2; - const range2StartsAfter1 = offset2 >= offset1 + size1; - const disjoint = range1StartsAfter2 || range2StartsAfter1; - const success = disjoint || remapBetweenCalls; - - t.testGetMappedRangeCall(success, buffer, offset2, size2); - }); - -g.test('getMappedRange,disjoinRanges_many') - .desc('Test getting a lot of small ranges, and that the disjoint check checks them all.') - .fn(async t => { - const kStride = 256; - const kNumStrides = 256; - + // It is invalid to call getMappedRange when the buffer is unmapped after mappedAtCreation. + { const buffer = t.device.createBuffer({ - size: kStride * kNumStrides, usage: GPUBufferUsage.MAP_READ, + size: 16, + mappedAtCreation: true }); + buffer.unmap(); + t.testGetMappedRangeCall(false, buffer); + } +}); + +g.test('getMappedRange,subrange,mapped'). +desc( + `Test that old getMappedRange returned arraybuffer does not exist after unmap, and newly returned + arraybuffer after new map has correct subrange` +). +params((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const bufferSize = 16; + const offset = 8; + const subrangeSize = bufferSize - offset; + const buffer = t.createMappableBuffer(mapMode, bufferSize); + await buffer.mapAsync(mapMode); + + const data0 = buffer.getMappedRange(); + t.expect(data0 instanceof ArrayBuffer); + t.expect(data0.byteLength === bufferSize); + + buffer.unmap(); + t.expect(data0.byteLength === 0); + + await buffer.mapAsync(mapMode, offset); + const data1 = buffer.getMappedRange(8); + + t.expect(data0.byteLength === 0); + t.expect(data1.byteLength === subrangeSize); +}); + +g.test('getMappedRange,subrange,mappedAtCreation'). +desc( + `Test that old getMappedRange returned arraybuffer does not exist after unmap and newly returned + arraybuffer after new map has correct subrange` +). +fn(async (t) => { + const bufferSize = 16; + const offset = 8; + const subrangeSize = bufferSize - offset; + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, + mappedAtCreation: true + }); + + const data0 = buffer.getMappedRange(); + t.expect(data0 instanceof ArrayBuffer); + t.expect(data0.byteLength === bufferSize); + + buffer.unmap(); + t.expect(data0.byteLength === 0); + + await buffer.mapAsync(GPUMapMode.READ, offset); + const data1 = buffer.getMappedRange(8); + + t.expect(data0.byteLength === 0); + t.expect(data1.byteLength === subrangeSize); +}); + +g.test('getMappedRange,state,destroyed'). +desc( + `Test that it is invalid to call getMappedRange in the destroyed state. +Test for various cases of being destroyed: at creation, after a mapAsync call or after being created mapped.` +). +fn(async (t) => { + // It is invalid to call getMappedRange when the buffer is destroyed when unmapped. + { + const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); + buffer.destroy(); + t.testGetMappedRangeCall(false, buffer); + } + + // It is invalid to call getMappedRange when the buffer is destroyed when mapped. + { + const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); await buffer.mapAsync(GPUMapMode.READ); + buffer.destroy(); + t.testGetMappedRangeCall(false, buffer); + } - // Get a lot of small mapped ranges. - for (let stride = 0; stride < kNumStrides; stride++) { - t.testGetMappedRangeCall(true, buffer, stride * kStride, 8); - } - - // Check for each range it is invalid to get a range that overlaps it and check that it is valid - // to get ranges for the rest of the buffer. - for (let stride = 0; stride < kNumStrides; stride++) { - t.testGetMappedRangeCall(false, buffer, stride * kStride, kStride); - t.testGetMappedRangeCall(true, buffer, stride * kStride + 8, kStride - 8); - } - }); - -g.test('unmap,state,unmapped') - .desc( - `Test it is valid to call unmap on a buffer that is unmapped (at creation, or after - mappedAtCreation or mapAsync)` - ) - .fn(async t => { - // It is valid to call unmap after creation of an unmapped buffer. - { - const buffer = t.device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_READ }); - buffer.unmap(); - } - - // It is valid to call unmap after unmapping a mapAsynced buffer. - { - const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); - await buffer.mapAsync(GPUMapMode.READ); - buffer.unmap(); - buffer.unmap(); - } - - // It is valid to call unmap after unmapping a mappedAtCreation buffer. - { - const buffer = t.device.createBuffer({ - usage: GPUBufferUsage.MAP_READ, - size: 16, - mappedAtCreation: true, - }); - buffer.unmap(); - buffer.unmap(); - } - }); - -g.test('unmap,state,destroyed') - .desc( - `Test it is valid to call unmap on a buffer that is destroyed (at creation, or after - mappedAtCreation or mapAsync)` - ) - .fn(async t => { - // It is valid to call unmap after destruction of an unmapped buffer. - { - const buffer = t.device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_READ }); - buffer.destroy(); - buffer.unmap(); - } - - // It is valid to call unmap after destroying a mapAsynced buffer. - { - const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); - await buffer.mapAsync(GPUMapMode.READ); - buffer.destroy(); - buffer.unmap(); - } - - // It is valid to call unmap after destroying a mappedAtCreation buffer. - { - const buffer = t.device.createBuffer({ - usage: GPUBufferUsage.MAP_READ, - size: 16, - mappedAtCreation: true, - }); - buffer.destroy(); - buffer.unmap(); - } - }); - -g.test('unmap,state,mappedAtCreation') - .desc('Test it is valid to call unmap on a buffer mapped at creation, for various usages') - .paramsSubcasesOnly(u => - u // - .combine('bufferUsage', kBufferUsages) - ) - .fn(t => { - const { bufferUsage } = t.params; - const buffer = t.device.createBuffer({ size: 16, usage: bufferUsage, mappedAtCreation: true }); - - buffer.unmap(); - }); - -g.test('unmap,state,mapped') - .desc("Test it is valid to call unmap on a buffer that's mapped") - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); - - await buffer.mapAsync(mapMode); - buffer.unmap(); - }); - -g.test('unmap,state,mappingPending') - .desc("Test it is valid to call unmap on a buffer that's being mapped") - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; - const buffer = t.createMappableBuffer(mapMode, 16); - - const pending = t.testMapAsyncCall( - { validationError: false, earlyRejection: false, rejectName: 'AbortError' }, - buffer, - mapMode - ); - - buffer.unmap(); - await pending; - }); - -g.test('gc_behavior,mappedAtCreation') - .desc( - "Test that GCing the buffer while mappings are handed out doesn't invalidate them - mappedAtCreation case" - ) - .fn(async t => { - let buffer = null; - buffer = t.device.createBuffer({ - size: 256, - usage: GPUBufferUsage.COPY_DST, - mappedAtCreation: true, + // It is invalid to call getMappedRange when the buffer is destroyed when mapped at creation. + { + const buffer = t.device.createBuffer({ + usage: GPUBufferUsage.MAP_READ, + size: 16, + mappedAtCreation: true }); + buffer.destroy(); + t.testGetMappedRangeCall(false, buffer); + } +}); - // Write some non-zero data to the buffer. - const contents = new Uint32Array(buffer.getMappedRange()); - for (let i = 0; i < contents.length; i++) { - contents[i] = i; - } +g.test('getMappedRange,state,mappingPending'). +desc(`Test that it is invalid to call getMappedRange in the mappingPending state.`). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const buffer = t.createMappableBuffer(mapMode, 16); - // Trigger garbage collection that should collect the buffer (or as if it collected it) - // NOTE: This won't fail unless the browser immediately starts reusing the memory, or gives it - // back to the OS. One good option for browsers to check their logic is good is to zero-out the - // memory on GPUBuffer (or internal gpu::Buffer-like object) destruction. - buffer = null; - await attemptGarbageCollection(); + /* noawait */const mapping0 = buffer.mapAsync(mapMode); + // seconding mapping should be rejected + const mapping1 = t.testMapAsyncCall( + { validationError: false, earlyRejection: true, rejectName: 'OperationError' }, + buffer, + mapMode + ); - // Use the mapping again both for read and write, it should work. - for (let i = 0; i < contents.length; i++) { - t.expect(contents[i] === i); - contents[i] = i + 1; - } + // invalid in mappingPending state + t.testGetMappedRangeCall(false, buffer); + + await mapping0; + + // valid after buffer is mapped + t.testGetMappedRangeCall(true, buffer); + + await mapping1; +}); + +g.test('getMappedRange,offsetAndSizeAlignment,mapped'). +desc(`Test that getMappedRange fails if the alignment of offset and size isn't correct.`). +params((u) => +u. +combine('mapMode', kMapModeOptions). +beginSubcases(). +combine('mapOffset', [0, kOffsetAlignment]). +combine('offset', [0, kOffsetAlignment, kOffsetAlignment / 2]). +combine('size', [0, kSizeAlignment, kSizeAlignment / 2]) +). +fn(async (t) => { + const { mapMode, mapOffset, offset, size } = t.params; + const buffer = t.createMappableBuffer(mapMode, 32); + await buffer.mapAsync(mapMode, mapOffset); + + const success = offset % kOffsetAlignment === 0 && size % kSizeAlignment === 0; + t.testGetMappedRangeCall(success, buffer, offset + mapOffset, size); +}); + +g.test('getMappedRange,offsetAndSizeAlignment,mappedAtCreation'). +desc(`Test that getMappedRange fails if the alignment of offset and size isn't correct.`). +paramsSubcasesOnly((u) => +u. +combine('offset', [0, kOffsetAlignment, kOffsetAlignment / 2]). +combine('size', [0, kSizeAlignment, kSizeAlignment / 2]) +). +fn((t) => { + const { offset, size } = t.params; + const buffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST, + mappedAtCreation: true + }); + const success = offset % kOffsetAlignment === 0 && size % kSizeAlignment === 0; + t.testGetMappedRangeCall(success, buffer, offset, size); +}); + +g.test('getMappedRange,sizeAndOffsetOOB,mappedAtCreation'). +desc( + `Test that getMappedRange size + offset must be less than the buffer size for a + buffer mapped at creation. (and offset has not constraints on its own)` +). +paramsSubcasesOnly([ +// Tests for a zero-sized buffer, with and without a size defined. +{ bufferSize: 0, offset: undefined, size: undefined }, +{ bufferSize: 0, offset: undefined, size: 0 }, +{ bufferSize: 0, offset: undefined, size: kSizeAlignment }, +{ bufferSize: 0, offset: 0, size: undefined }, +{ bufferSize: 0, offset: 0, size: 0 }, +{ bufferSize: 0, offset: kOffsetAlignment, size: undefined }, +{ bufferSize: 0, offset: kOffsetAlignment, size: 0 }, + +// Tests for a non-empty buffer, with an undefined offset. +{ bufferSize: 80, offset: undefined, size: 80 }, +{ bufferSize: 80, offset: undefined, size: 80 + kSizeAlignment }, + +// Tests for a non-empty buffer, with an undefined size. +{ bufferSize: 80, offset: undefined, size: undefined }, +{ bufferSize: 80, offset: 0, size: undefined }, +{ bufferSize: 80, offset: kOffsetAlignment, size: undefined }, +{ bufferSize: 80, offset: 80, size: undefined }, +{ bufferSize: 80, offset: 80 + kOffsetAlignment, size: undefined }, + +// Tests for a non-empty buffer with a size defined. +{ bufferSize: 80, offset: 0, size: 80 }, +{ bufferSize: 80, offset: 0, size: 80 + kSizeAlignment }, +{ bufferSize: 80, offset: kOffsetAlignment, size: 80 }, + +{ bufferSize: 80, offset: 40, size: 40 }, +{ bufferSize: 80, offset: 40 + kOffsetAlignment, size: 40 }, +{ bufferSize: 80, offset: 40, size: 40 + kSizeAlignment }] +). +fn((t) => { + const { bufferSize, offset, size } = t.params; + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.COPY_DST, + mappedAtCreation: true }); -g.test('gc_behavior,mapAsync') - .desc( - "Test that GCing the buffer while mappings are handed out doesn't invalidate them - mapAsync case" - ) - .paramsSubcasesOnly(u => u.combine('mapMode', kMapModeOptions)) - .fn(async t => { - const { mapMode } = t.params; + const actualOffset = offset ?? 0; + const actualSize = size ?? bufferSize - actualOffset; - let buffer = null; - buffer = t.createMappableBuffer(mapMode, 256); - await buffer.mapAsync(mapMode); + const success = actualOffset <= bufferSize && actualOffset + actualSize <= bufferSize; + t.testGetMappedRangeCall(success, buffer, offset, size); +}); - // Write some non-zero data to the buffer. - const contents = new Uint32Array(buffer.getMappedRange()); - for (let i = 0; i < contents.length; i++) { - contents[i] = i; - } +g.test('getMappedRange,sizeAndOffsetOOB,mapped'). +desc('Test that getMappedRange size + offset must be less than the mapAsync range.'). +paramsSubcasesOnly((u) => +u // +.combine('mapMode', kMapModeOptions). +combineWithParams([ +// Tests for an empty buffer, and implicit mapAsync size. +{ bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: undefined, size: undefined }, +{ bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: undefined, size: 0 }, +{ + bufferSize: 0, + mapOffset: 0, + mapSize: undefined, + offset: undefined, + size: kSizeAlignment +}, +{ bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: 0, size: undefined }, +{ bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: 0, size: 0 }, +{ + bufferSize: 0, + mapOffset: 0, + mapSize: undefined, + offset: kOffsetAlignment, + size: undefined +}, +{ bufferSize: 0, mapOffset: 0, mapSize: undefined, offset: kOffsetAlignment, size: 0 }, - // Trigger garbage collection that should collect the buffer (or as if it collected it) - // NOTE: This won't fail unless the browser immediately starts reusing the memory, or gives it - // back to the OS. One good option for browsers to check their logic is good is to zero-out the - // memory on GPUBuffer (or internal gpu::Buffer-like object) destruction. - buffer = null; - await attemptGarbageCollection(); +// Tests for an empty buffer, and explicit mapAsync size. +{ bufferSize: 0, mapOffset: 0, mapSize: 0, offset: undefined, size: undefined }, +{ bufferSize: 0, mapOffset: 0, mapSize: 0, offset: 0, size: undefined }, +{ bufferSize: 0, mapOffset: 0, mapSize: 0, offset: 0, size: 0 }, +{ bufferSize: 0, mapOffset: 0, mapSize: 0, offset: kOffsetAlignment, size: undefined }, +{ bufferSize: 0, mapOffset: 0, mapSize: 0, offset: kOffsetAlignment, size: 0 }, - // Use the mapping again both for read and write, it should work. - for (let i = 0; i < contents.length; i++) { - t.expect(contents[i] === i); - contents[i] = i + 1; - } +// Test for a fully implicit mapAsync call +{ bufferSize: 80, mapOffset: undefined, mapSize: undefined, offset: 0, size: 80 }, +{ + bufferSize: 80, + mapOffset: undefined, + mapSize: undefined, + offset: 0, + size: 80 + kSizeAlignment +}, +{ + bufferSize: 80, + mapOffset: undefined, + mapSize: undefined, + offset: kOffsetAlignment, + size: 80 +}, + +// Test for a mapAsync call with an implicit size +{ bufferSize: 80, mapOffset: 24, mapSize: undefined, offset: 24, size: 80 - 24 }, +{ + bufferSize: 80, + mapOffset: 24, + mapSize: undefined, + offset: 0, + size: 80 - 24 + kSizeAlignment +}, +{ + bufferSize: 80, + mapOffset: 24, + mapSize: undefined, + offset: kOffsetAlignment, + size: 80 - 24 +}, + +// Test for a non-empty buffer fully mapped. +{ bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 0, size: 80 }, +{ bufferSize: 80, mapOffset: 0, mapSize: 80, offset: kOffsetAlignment, size: 80 }, +{ bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 0, size: 80 + kSizeAlignment }, + +{ bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 40, size: 40 }, +{ bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 40 + kOffsetAlignment, size: 40 }, +{ bufferSize: 80, mapOffset: 0, mapSize: 80, offset: 40, size: 40 + kSizeAlignment }, + +// Test for a buffer partially mapped. +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24, size: 40 }, +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24 - kOffsetAlignment, size: 40 }, +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24 + kOffsetAlignment, size: 40 }, +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24, size: 40 + kSizeAlignment }, + +// Test for a partially mapped buffer with implicit size and offset for getMappedRange. +// - Buffer partially mapped in the middle +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: undefined, size: undefined }, +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 0, size: undefined }, +{ bufferSize: 80, mapOffset: 24, mapSize: 40, offset: 24, size: undefined }, +// - Buffer partially mapped to the end +{ bufferSize: 80, mapOffset: 24, mapSize: undefined, offset: 24, size: undefined }, +{ bufferSize: 80, mapOffset: 24, mapSize: undefined, offset: 80, size: undefined }, +// - Buffer partially mapped from the start +{ bufferSize: 80, mapOffset: 0, mapSize: 64, offset: undefined, size: undefined }, +{ bufferSize: 80, mapOffset: 0, mapSize: 64, offset: undefined, size: 64 }] +) +). +fn(async (t) => { + const { mapMode, bufferSize, mapOffset, mapSize, offset, size } = t.params; + const buffer = t.createMappableBuffer(mapMode, bufferSize); + await buffer.mapAsync(mapMode, mapOffset, mapSize); + + const actualMapOffset = mapOffset ?? 0; + const actualMapSize = mapSize ?? bufferSize - actualMapOffset; + + const actualOffset = offset ?? 0; + const actualSize = size ?? bufferSize - actualOffset; + + const success = + actualOffset >= actualMapOffset && + actualOffset <= bufferSize && + actualOffset + actualSize <= actualMapOffset + actualMapSize; + t.testGetMappedRangeCall(success, buffer, offset, size); +}); + +g.test('getMappedRange,disjointRanges'). +desc('Test that the ranges asked through getMappedRange must be disjoint.'). +paramsSubcasesOnly((u) => +u // +.combine('remapBetweenCalls', [false, true]). +combineWithParams([ +// Disjoint ranges with one that's empty. +{ offset1: 8, size1: 0, offset2: 8, size2: 8 }, +{ offset1: 16, size1: 0, offset2: 8, size2: 8 }, + +{ offset1: 8, size1: 8, offset2: 8, size2: 0 }, +{ offset1: 8, size1: 8, offset2: 16, size2: 0 }, + +// Disjoint ranges with both non-empty. +{ offset1: 0, size1: 8, offset2: 8, size2: 8 }, +{ offset1: 16, size1: 8, offset2: 8, size2: 8 }, + +{ offset1: 8, size1: 8, offset2: 0, size2: 8 }, +{ offset1: 8, size1: 8, offset2: 16, size2: 8 }, + +// Empty range contained inside another one. +{ offset1: 16, size1: 20, offset2: 24, size2: 0 }, +{ offset1: 24, size1: 0, offset2: 16, size2: 20 }, + +// Ranges that overlap only partially. +{ offset1: 16, size1: 20, offset2: 8, size2: 20 }, +{ offset1: 16, size1: 20, offset2: 32, size2: 20 }, + +// Ranges that include one another. +{ offset1: 0, size1: 80, offset2: 16, size2: 20 }, +{ offset1: 16, size1: 20, offset2: 0, size2: 80 }] +) +). +fn(async (t) => { + const { offset1, size1, offset2, size2, remapBetweenCalls } = t.params; + const buffer = t.device.createBuffer({ size: 80, usage: GPUBufferUsage.MAP_READ }); + await buffer.mapAsync(GPUMapMode.READ); + + t.testGetMappedRangeCall(true, buffer, offset1, size1); + + if (remapBetweenCalls) { + buffer.unmap(); + await buffer.mapAsync(GPUMapMode.READ); + } + + const range1StartsAfter2 = offset1 >= offset2 + size2; + const range2StartsAfter1 = offset2 >= offset1 + size1; + const disjoint = range1StartsAfter2 || range2StartsAfter1; + const success = disjoint || remapBetweenCalls; + + t.testGetMappedRangeCall(success, buffer, offset2, size2); +}); + +g.test('getMappedRange,disjoinRanges_many'). +desc('Test getting a lot of small ranges, and that the disjoint check checks them all.'). +fn(async (t) => { + const kStride = 256; + const kNumStrides = 256; + + const buffer = t.device.createBuffer({ + size: kStride * kNumStrides, + usage: GPUBufferUsage.MAP_READ }); + await buffer.mapAsync(GPUMapMode.READ); + + // Get a lot of small mapped ranges. + for (let stride = 0; stride < kNumStrides; stride++) { + t.testGetMappedRangeCall(true, buffer, stride * kStride, 8); + } + + // Check for each range it is invalid to get a range that overlaps it and check that it is valid + // to get ranges for the rest of the buffer. + for (let stride = 0; stride < kNumStrides; stride++) { + t.testGetMappedRangeCall(false, buffer, stride * kStride, kStride); + t.testGetMappedRangeCall(true, buffer, stride * kStride + 8, kStride - 8); + } +}); + +g.test('unmap,state,unmapped'). +desc( + `Test it is valid to call unmap on a buffer that is unmapped (at creation, or after + mappedAtCreation or mapAsync)` +). +fn(async (t) => { + // It is valid to call unmap after creation of an unmapped buffer. + { + const buffer = t.device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_READ }); + buffer.unmap(); + } + + // It is valid to call unmap after unmapping a mapAsynced buffer. + { + const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); + await buffer.mapAsync(GPUMapMode.READ); + buffer.unmap(); + buffer.unmap(); + } + + // It is valid to call unmap after unmapping a mappedAtCreation buffer. + { + const buffer = t.device.createBuffer({ + usage: GPUBufferUsage.MAP_READ, + size: 16, + mappedAtCreation: true + }); + buffer.unmap(); + buffer.unmap(); + } +}); + +g.test('unmap,state,destroyed'). +desc( + `Test it is valid to call unmap on a buffer that is destroyed (at creation, or after + mappedAtCreation or mapAsync)` +). +fn(async (t) => { + // It is valid to call unmap after destruction of an unmapped buffer. + { + const buffer = t.device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_READ }); + buffer.destroy(); + buffer.unmap(); + } + + // It is valid to call unmap after destroying a mapAsynced buffer. + { + const buffer = t.createMappableBuffer(GPUMapMode.READ, 16); + await buffer.mapAsync(GPUMapMode.READ); + buffer.destroy(); + buffer.unmap(); + } + + // It is valid to call unmap after destroying a mappedAtCreation buffer. + { + const buffer = t.device.createBuffer({ + usage: GPUBufferUsage.MAP_READ, + size: 16, + mappedAtCreation: true + }); + buffer.destroy(); + buffer.unmap(); + } +}); + +g.test('unmap,state,mappedAtCreation'). +desc('Test it is valid to call unmap on a buffer mapped at creation, for various usages'). +paramsSubcasesOnly((u) => +u // +.combine('bufferUsage', kBufferUsages) +). +fn((t) => { + const { bufferUsage } = t.params; + const buffer = t.device.createBuffer({ size: 16, usage: bufferUsage, mappedAtCreation: true }); + + buffer.unmap(); +}); + +g.test('unmap,state,mapped'). +desc("Test it is valid to call unmap on a buffer that's mapped"). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const buffer = t.createMappableBuffer(mapMode, 16); + + await buffer.mapAsync(mapMode); + buffer.unmap(); +}); + +g.test('unmap,state,mappingPending'). +desc("Test it is valid to call unmap on a buffer that's being mapped"). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + const buffer = t.createMappableBuffer(mapMode, 16); + + const pending = t.testMapAsyncCall( + { validationError: false, earlyRejection: false, rejectName: 'AbortError' }, + buffer, + mapMode + ); + buffer.unmap(); + await pending; +}); + +g.test('gc_behavior,mappedAtCreation'). +desc( + "Test that GCing the buffer while mappings are handed out doesn't invalidate them - mappedAtCreation case" +). +fn(async (t) => { + let buffer = null; + buffer = t.device.createBuffer({ + size: 256, + usage: GPUBufferUsage.COPY_DST, + mappedAtCreation: true + }); + + // Write some non-zero data to the buffer. + const contents = new Uint32Array(buffer.getMappedRange()); + for (let i = 0; i < contents.length; i++) { + contents[i] = i; + } + + // Trigger garbage collection that should collect the buffer (or as if it collected it) + // NOTE: This won't fail unless the browser immediately starts reusing the memory, or gives it + // back to the OS. One good option for browsers to check their logic is good is to zero-out the + // memory on GPUBuffer (or internal gpu::Buffer-like object) destruction. + buffer = null; + await attemptGarbageCollection(); + + // Use the mapping again both for read and write, it should work. + for (let i = 0; i < contents.length; i++) { + t.expect(contents[i] === i); + contents[i] = i + 1; + } +}); + +g.test('gc_behavior,mapAsync'). +desc( + "Test that GCing the buffer while mappings are handed out doesn't invalidate them - mapAsync case" +). +paramsSubcasesOnly((u) => u.combine('mapMode', kMapModeOptions)). +fn(async (t) => { + const { mapMode } = t.params; + + let buffer = null; + buffer = t.createMappableBuffer(mapMode, 256); + await buffer.mapAsync(mapMode); + + // Write some non-zero data to the buffer. + const contents = new Uint32Array(buffer.getMappedRange()); + for (let i = 0; i < contents.length; i++) { + contents[i] = i; + } + + // Trigger garbage collection that should collect the buffer (or as if it collected it) + // NOTE: This won't fail unless the browser immediately starts reusing the memory, or gives it + // back to the OS. One good option for browsers to check their logic is good is to zero-out the + // memory on GPUBuffer (or internal gpu::Buffer-like object) destruction. + buffer = null; + await attemptGarbageCollection(); + + // Use the mapping again both for read and write, it should work. + for (let i = 0; i < contents.length; i++) { + t.expect(contents[i] === i); + contents[i] = i + 1; + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/threading.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/threading.spec.js index 46256ab73d4..3b22b148798 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/threading.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/buffer/threading.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: - Try to map on one thread while {pending, mapped, mappedAtCreation, mappedAtCreation+unmap+mapped} on another thread. @@ -8,8 +8,7 @@ TODO: {with, without} it being in the transfer array. - Copy GPUBuffer to another thread while {pending, mapped mappedAtCreation} on {same,diff} thread (valid), then try to map on that thread (invalid) -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ValidationTest } from '../validation_test.js'; -export const g = makeTestGroup(ValidationTest); +export const g = makeTestGroup(ValidationTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/query_types.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/query_types.spec.js index de90d0bb1b8..44097d184c3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/query_types.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/query_types.spec.js @@ -1,77 +1,120 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for capability checking for features enabling optional query types. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('createQuerySet') - .desc( - ` +g.test('createQuerySet'). +desc( + ` Tests that creating a query set throws a type error exception if the features don't contain 'timestamp-query'. - createQuerySet - type {occlusion, timestamp} - - x= {pipeline statistics, timestamp} query {enable, disable} + - x= timestamp query {enable, disable} ` - ) - .params(u => - u - .combine('type', ['occlusion', 'timestamp']) - .combine('featureContainsTimestampQuery', [false, true]) - ) - .beforeAllSubcases(t => { - const { featureContainsTimestampQuery } = t.params; +). +params((u) => +u. +combine('type', ['occlusion', 'timestamp']). +combine('featureContainsTimestampQuery', [false, true]) +). +beforeAllSubcases((t) => { + const { featureContainsTimestampQuery } = t.params; - const requiredFeatures = []; - if (featureContainsTimestampQuery) { - requiredFeatures.push('timestamp-query'); - } + const requiredFeatures = []; + if (featureContainsTimestampQuery) { + requiredFeatures.push('timestamp-query'); + } - t.selectDeviceOrSkipTestCase({ requiredFeatures }); - }) - .fn(t => { - const { type, featureContainsTimestampQuery } = t.params; + t.selectDeviceOrSkipTestCase({ requiredFeatures }); +}). +fn((t) => { + const { type, featureContainsTimestampQuery } = t.params; - const count = 1; - const shouldException = type === 'timestamp' && !featureContainsTimestampQuery; + const count = 1; + const shouldException = type === 'timestamp' && !featureContainsTimestampQuery; - t.shouldThrow(shouldException ? 'TypeError' : false, () => { - t.device.createQuerySet({ type, count }); - }); + t.shouldThrow(shouldException ? 'TypeError' : false, () => { + t.device.createQuerySet({ type, count }); }); +}); -g.test('writeTimestamp') - .desc( - ` +g.test('timestamp'). +desc( + ` Tests that writing a timestamp throws a type error exception if the features don't contain 'timestamp-query'. + + TODO: writeTimestamp test is disabled since it's removed from the spec for now. ` - ) - .params(u => u.combine('featureContainsTimestampQuery', [false, true])) - .beforeAllSubcases(t => { - const { featureContainsTimestampQuery } = t.params; +). +params((u) => u.combine('featureContainsTimestampQuery', [false, true])). +beforeAllSubcases((t) => { + const { featureContainsTimestampQuery } = t.params; - const requiredFeatures = []; - if (featureContainsTimestampQuery) { - requiredFeatures.push('timestamp-query'); - } + const requiredFeatures = []; + if (featureContainsTimestampQuery) { + requiredFeatures.push('timestamp-query'); + } - t.selectDeviceOrSkipTestCase({ requiredFeatures }); - }) - .fn(t => { - const { featureContainsTimestampQuery } = t.params; + t.selectDeviceOrSkipTestCase({ requiredFeatures }); +}). +fn((t) => { + const { featureContainsTimestampQuery } = t.params; + + const querySet = t.device.createQuerySet({ + type: featureContainsTimestampQuery ? 'timestamp' : 'occlusion', + count: 2 + }); + + { + let expected = featureContainsTimestampQuery ? false : 'TypeError'; + // writeTimestamp no longer exists and this should always TypeError. + expected = 'TypeError'; - const querySet = t.device.createQuerySet({ - type: featureContainsTimestampQuery ? 'timestamp' : 'occlusion', - count: 1, - }); const encoder = t.createEncoder('non-pass'); + t.shouldThrow(expected, () => { - t.shouldThrow(featureContainsTimestampQuery ? false : 'TypeError', () => { encoder.encoder.writeTimestamp(querySet, 0); }); - }); + encoder.finish(); + } + + { + const encoder = t.createEncoder('non-pass'); + encoder.encoder. + beginComputePass({ + timestampWrites: { querySet, beginningOfPassWriteIndex: 0, endOfPassWriteIndex: 1 } + }). + end(); + t.expectValidationError(() => { + encoder.finish(); + }, !featureContainsTimestampQuery); + } + + { + const encoder = t.createEncoder('non-pass'); + const view = t. + trackForCleanup( + t.device.createTexture({ + size: [16, 16, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ). + createView(); + encoder.encoder. + beginRenderPass({ + colorAttachments: [{ view, loadOp: 'clear', storeOp: 'discard' }], + timestampWrites: { querySet, beginningOfPassWriteIndex: 0, endOfPassWriteIndex: 1 } + }). + end(); + t.expectValidationError(() => { + encoder.finish(); + }, !featureContainsTimestampQuery); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/texture_formats.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/texture_formats.spec.js index b281643a12c..4e88bfc4fff 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/texture_formats.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/features/texture_formats.spec.js @@ -1,9 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for capability checking for features enabling optional texture formats. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +import { getGPU } from '../../../../../common/util/navigator_gpu.js'; import { assert } from '../../../../../common/util/util.js'; import { kAllTextureFormats, kTextureFormatInfo } from '../../../../format_info.js'; import { kAllCanvasTypes, createCanvas } from '../../../../util/create_elements.js'; @@ -12,429 +12,452 @@ import { ValidationTest } from '../../validation_test.js'; export const g = makeTestGroup(ValidationTest); const kOptionalTextureFormats = kAllTextureFormats.filter( - t => kTextureFormatInfo[t].feature !== undefined + (t) => kTextureFormatInfo[t].feature !== undefined ); -g.test('texture_descriptor') - .desc( - ` +g.test('texture_descriptor'). +desc( + ` Test creating a texture with an optional texture format will fail if the required optional feature is not enabled. ` - ) - .params(u => - u.combine('format', kOptionalTextureFormats).combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u.combine('format', kOptionalTextureFormats).combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createTexture({ - format, - size: [formatInfo.blockWidth, formatInfo.blockHeight, 1], - usage: GPUTextureUsage.TEXTURE_BINDING, - }); + const formatInfo = kTextureFormatInfo[format]; + t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { + t.device.createTexture({ + format, + size: [formatInfo.blockWidth, formatInfo.blockHeight, 1], + usage: GPUTextureUsage.TEXTURE_BINDING }); }); +}); -g.test('texture_descriptor_view_formats') - .desc( - ` +g.test('texture_descriptor_view_formats'). +desc( + ` Test creating a texture with view formats that have an optional texture format will fail if the required optional feature is not enabled. ` - ) - .params(u => - u.combine('format', kOptionalTextureFormats).combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u.combine('format', kOptionalTextureFormats).combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createTexture({ - format, - size: [formatInfo.blockWidth, formatInfo.blockHeight, 1], - usage: GPUTextureUsage.TEXTURE_BINDING, - viewFormats: [format], - }); + const formatInfo = kTextureFormatInfo[format]; + t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { + t.device.createTexture({ + format, + size: [formatInfo.blockWidth, formatInfo.blockHeight, 1], + usage: GPUTextureUsage.TEXTURE_BINDING, + viewFormats: [format] }); }); +}); -g.test('texture_view_descriptor') - .desc( - ` +g.test('texture_view_descriptor'). +desc( + ` Test creating a texture view with all texture formats will fail if the required optional feature is not enabled. ` - ) - .params(u => - u.combine('format', kOptionalTextureFormats).combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u.combine('format', kOptionalTextureFormats).combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, enable_required_feature } = t.params; - // If the required feature isn't enabled then the texture will fail to create and we won't be - // able to test createView, so pick and alternate guaranteed format instead. This will almost - // certainly not be view-compatible with the format being tested, but that doesn't matter since - // createView should throw an exception due to the format feature not being enabled before it - // has a chance to validate that the view and texture formats aren't compatible. - const textureFormat = enable_required_feature ? format : 'rgba8unorm'; + // If the required feature isn't enabled then the texture will fail to create and we won't be + // able to test createView, so pick and alternate guaranteed format instead. This will almost + // certainly not be view-compatible with the format being tested, but that doesn't matter since + // createView should throw an exception due to the format feature not being enabled before it + // has a chance to validate that the view and texture formats aren't compatible. + const textureFormat = enable_required_feature ? format : 'rgba8unorm'; - const formatInfo = kTextureFormatInfo[format]; - const testTexture = t.device.createTexture({ - format: textureFormat, - size: [formatInfo.blockWidth, formatInfo.blockHeight, 1], - usage: GPUTextureUsage.TEXTURE_BINDING, - }); - const testViewDesc = { - format, - dimension: '2d', - aspect: 'all', - arrayLayerCount: 1, - baseMipLevel: 0, - mipLevelCount: 1, - baseArrayLayer: 0, - }; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - testTexture.createView(testViewDesc); - }); + const formatInfo = kTextureFormatInfo[format]; + const testTexture = t.device.createTexture({ + format: textureFormat, + size: [formatInfo.blockWidth, formatInfo.blockHeight, 1], + usage: GPUTextureUsage.TEXTURE_BINDING }); + const testViewDesc = { + format, + dimension: '2d', + aspect: 'all', + arrayLayerCount: 1, + baseMipLevel: 0, + mipLevelCount: 1, + baseArrayLayer: 0 + }; + t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { + testTexture.createView(testViewDesc); + }); +}); -g.test('canvas_configuration') - .desc( - ` +g.test('canvas_configuration'). +desc( + ` Test configuring a canvas with optional texture formats will throw an exception if the required optional feature is not enabled. Otherwise, a validation error should be generated instead of throwing an exception. ` - ) - .params(u => - u - .combine('format', kOptionalTextureFormats) - .combine('canvasType', kAllCanvasTypes) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u. +combine('format', kOptionalTextureFormats). +combine('canvasType', kAllCanvasTypes). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, canvasType, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, canvasType, enable_required_feature } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - const canvasConf = { - device: t.device, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }; + const canvasConf = { + device: t.device, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }; - if (enable_required_feature) { - t.expectValidationError(() => { - ctx.configure(canvasConf); - }); - } else { - t.shouldThrow('TypeError', () => { - ctx.configure(canvasConf); - }); - } - }); + if (enable_required_feature) { + t.expectValidationError(() => { + ctx.configure(canvasConf); + }); + } else { + t.shouldThrow('TypeError', () => { + ctx.configure(canvasConf); + }); + } +}); -g.test('canvas_configuration_view_formats') - .desc( - ` +g.test('canvas_configuration_view_formats'). +desc( + ` Test that configuring a canvas with view formats throws an exception if the required optional feature is not enabled. Otherwise, a validation error should be generated instead of throwing an exception. ` - ) - .params(u => - u - .combine('viewFormats', [ - ...kOptionalTextureFormats.map(format => [format]), - ['bgra8unorm', 'bc1-rgba-unorm'], - ['bc1-rgba-unorm', 'bgra8unorm'], - ]) - .combine('canvasType', kAllCanvasTypes) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { viewFormats, enable_required_feature } = t.params; +). +params((u) => +u. +combine('viewFormats', [ +...kOptionalTextureFormats.map((format) => [format]), +['bgra8unorm', 'bc1-rgba-unorm'], +['bc1-rgba-unorm', 'bgra8unorm']] +). +combine('canvasType', kAllCanvasTypes). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { viewFormats, enable_required_feature } = t.params; - if (enable_required_feature) { - t.selectDeviceForTextureFormatOrSkipTestCase(viewFormats); - } - }) - .fn(t => { - const { viewFormats, canvasType, enable_required_feature } = t.params; + if (enable_required_feature) { + t.selectDeviceForTextureFormatOrSkipTestCase(viewFormats); + } +}). +fn((t) => { + const { viewFormats, canvasType, enable_required_feature } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - const canvasConf = { - device: t.device, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - viewFormats: viewFormats, - }; + const canvasConf = { + device: t.device, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + viewFormats: viewFormats + }; - if (enable_required_feature) { - t.expectValidationError(() => { - ctx.configure(canvasConf); - }); - } else { - t.shouldThrow('TypeError', () => { - ctx.configure(canvasConf); - }); - } - }); + if (enable_required_feature) { + t.expectValidationError(() => { + ctx.configure(canvasConf); + }); + } else { + t.shouldThrow('TypeError', () => { + ctx.configure(canvasConf); + }); + } +}); -g.test('storage_texture_binding_layout') - .desc( - ` +g.test('storage_texture_binding_layout'). +desc( + ` Test creating a GPUStorageTextureBindingLayout with an optional texture format will fail if the required optional feature are not enabled. Note: This test has no cases if there are no optional texture formats supporting storage. ` - ) - .params(u => - u - .combine('format', kOptionalTextureFormats) - .filter(t => !!kTextureFormatInfo[t.format].color?.storage) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u. +combine('format', kOptionalTextureFormats). +filter((t) => !!kTextureFormatInfo[t.format].color?.storage). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, enable_required_feature } = t.params; + + t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + storageTexture: { + format + } + }] - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - storageTexture: { - format, - }, - }, - ], - }); }); }); +}); -g.test('color_target_state') - .desc( - ` +g.test('color_target_state'). +desc( + ` Test creating a render pipeline with an optional texture format set in GPUColorTargetState will fail if the required optional feature is not enabled. Note: This test has no cases if there are no optional texture formats supporting color rendering. ` - ) - .params(u => - u - .combine('format', kOptionalTextureFormats) - .filter(t => !!kTextureFormatInfo[t.format].colorRender) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kOptionalTextureFormats). +filter((t) => !!kTextureFormatInfo[t.format].colorRender). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { isAsync, format, enable_required_feature } = t.params; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest( + isAsync, + enable_required_feature, + { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main()-> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format }], - }, - }); - }); - }); + }` + }), + entryPoint: 'main', + targets: [{ format }] + } + }, + 'TypeError' + ); +}); -g.test('depth_stencil_state') - .desc( - ` +g.test('depth_stencil_state'). +desc( + ` Test creating a render pipeline with an optional texture format set in GPUColorTargetState will fail if the required optional feature is not enabled. ` - ) - .params(u => - u - .combine('format', kOptionalTextureFormats) - .filter(t => !!(kTextureFormatInfo[t.format].depth || kTextureFormatInfo[t.format].stencil)) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kOptionalTextureFormats). +filter((t) => !!(kTextureFormatInfo[t.format].depth || kTextureFormatInfo[t.format].stencil)). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { isAsync, format, enable_required_feature } = t.params; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest( + isAsync, + enable_required_feature, + { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main()-> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - depthStencil: { - format, - depthCompare: 'always', - depthWriteEnabled: false, - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + depthStencil: { + format, + depthCompare: 'always', + depthWriteEnabled: false + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); - }); - }); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } + }, + 'TypeError' + ); +}); -g.test('render_bundle_encoder_descriptor_color_format') - .desc( - ` +g.test('render_bundle_encoder_descriptor_color_format'). +desc( + ` Test creating a render bundle encoder with an optional texture format set as one of the color format will fail if the required optional feature is not enabled. Note: This test has no cases if there are no optional texture formats supporting color rendering. ` - ) - .params(u => - u - .combine('format', kOptionalTextureFormats) - .filter(t => !!kTextureFormatInfo[t.format].colorRender) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u. +combine('format', kOptionalTextureFormats). +filter((t) => !!kTextureFormatInfo[t.format].colorRender). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, enable_required_feature } = t.params; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createRenderBundleEncoder({ - colorFormats: [format], - }); + t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { + t.device.createRenderBundleEncoder({ + colorFormats: [format] }); }); +}); -g.test('render_bundle_encoder_descriptor_depth_stencil_format') - .desc( - ` +g.test('render_bundle_encoder_descriptor_depth_stencil_format'). +desc( + ` Test creating a render bundle encoder with an optional texture format set as the depth stencil format will fail if the required optional feature is not enabled. ` - ) - .params(u => - u - .combine('format', kOptionalTextureFormats) - .filter(t => !!(kTextureFormatInfo[t.format].depth || kTextureFormatInfo[t.format].stencil)) - .combine('enable_required_feature', [true, false]) - ) - .beforeAllSubcases(t => { - const { format, enable_required_feature } = t.params; +). +params((u) => +u. +combine('format', kOptionalTextureFormats). +filter((t) => !!(kTextureFormatInfo[t.format].depth || kTextureFormatInfo[t.format].stencil)). +combine('enable_required_feature', [true, false]) +). +beforeAllSubcases((t) => { + const { format, enable_required_feature } = t.params; - const formatInfo = kTextureFormatInfo[format]; - if (enable_required_feature) { - t.selectDeviceOrSkipTestCase(formatInfo.feature); - } - }) - .fn(t => { - const { format, enable_required_feature } = t.params; + const formatInfo = kTextureFormatInfo[format]; + if (enable_required_feature) { + t.selectDeviceOrSkipTestCase(formatInfo.feature); + } +}). +fn((t) => { + const { format, enable_required_feature } = t.params; - t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { - t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - depthStencilFormat: format, - }); + t.shouldThrow(enable_required_feature ? false : 'TypeError', () => { + t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'], + depthStencilFormat: format }); }); +}); + +g.test('check_capability_guarantees'). +desc( + `check "texture-compression-bc" is supported or both "texture-compression-etc2" and "texture-compression-astc" are supported.` +). +fn(async (t) => { + const adapter = await getGPU(t.rec).requestAdapter(); + assert(adapter !== null); + + const features = adapter.features; + t.expect( + features.has('texture-compression-bc') || + features.has('texture-compression-etc2') && features.has('texture-compression-astc') + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/limit_utils.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/limit_utils.js index 350cb07a753..10cfffdcefa 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/limit_utils.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/limit_utils.js @@ -1,31 +1,36 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kUnitCaseParamsBuilder } from '../../../../../common/framework/params_builder.js'; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; -import { getGPU } from '../../../../../common/util/navigator_gpu.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kUnitCaseParamsBuilder } from '../../../../../common/framework/params_builder.js';import { makeTestGroup } from '../../../../../common/framework/test_group.js';import { getGPU } from '../../../../../common/util/navigator_gpu.js'; import { assert, range, reorder } from '../../../../../common/util/util.js'; import { getDefaultLimitsForAdapter } from '../../../../capability_info.js'; import { GPUTestBase } from '../../../../gpu_test.js'; + + export const kCreatePipelineTypes = [ - 'createRenderPipeline', - 'createRenderPipelineWithFragmentStage', - 'createComputePipeline', -]; +'createRenderPipeline', +'createRenderPipelineWithFragmentStage', +'createComputePipeline']; + + export const kRenderEncoderTypes = ['render', 'renderBundle']; + export const kEncoderTypes = ['compute', 'render', 'renderBundle']; + export const kBindGroupTests = ['sameGroup', 'differentGroups']; + export const kBindingCombinations = [ - 'vertex', - 'fragment', - 'vertexAndFragmentWithPossibleVertexStageOverflow', - 'vertexAndFragmentWithPossibleFragmentStageOverflow', - 'compute', -]; +'vertex', +'fragment', +'vertexAndFragmentWithPossibleVertexStageOverflow', +'vertexAndFragmentWithPossibleFragmentStageOverflow', +'compute']; + + export function getPipelineTypeForBindingCombination(bindingCombination) { switch (bindingCombination) { @@ -49,29 +54,35 @@ function getBindGroupIndex(bindGroupTest, i) { } } -function getWGSLBindings(order, bindGroupTest, storageDefinitionWGSLSnippetFn, numBindings, id) { +function getWGSLBindings( +order, +bindGroupTest, +storageDefinitionWGSLSnippetFn, +numBindings, +id) +{ return reorder( order, range( numBindings, - i => - `@group(${getBindGroupIndex( - bindGroupTest, - i - )}) @binding(${i}) ${storageDefinitionWGSLSnippetFn(i, id)};` + (i) => + `@group(${getBindGroupIndex( + bindGroupTest, + i + )}) @binding(${i}) ${storageDefinitionWGSLSnippetFn(i, id)};` ) ).join('\n '); } export function getPerStageWGSLForBindingCombinationImpl( - bindingCombination, - order, - bindGroupTest, - storageDefinitionWGSLSnippetFn, - bodyFn, - numBindings, - extraWGSL = '' -) { +bindingCombination, +order, +bindGroupTest, +storageDefinitionWGSLSnippetFn, +bodyFn, +numBindings, +extraWGSL = '') +{ switch (bindingCombination) { case 'vertex': return ` @@ -98,8 +109,8 @@ export function getPerStageWGSLForBindingCombinationImpl( ${bodyFn(numBindings, 0)} } `; - case 'vertexAndFragmentWithPossibleVertexStageOverflow': { - return ` + case 'vertexAndFragmentWithPossibleVertexStageOverflow':{ + return ` ${extraWGSL} ${getWGSLBindings(order, bindGroupTest, storageDefinitionWGSLSnippetFn, numBindings, 0)} @@ -115,9 +126,9 @@ export function getPerStageWGSLForBindingCombinationImpl( ${bodyFn(numBindings - 1, 1)} } `; - } - case 'vertexAndFragmentWithPossibleFragmentStageOverflow': { - return ` + } + case 'vertexAndFragmentWithPossibleFragmentStageOverflow':{ + return ` ${extraWGSL} ${getWGSLBindings(order, bindGroupTest, storageDefinitionWGSLSnippetFn, numBindings - 1, 0)} @@ -133,7 +144,7 @@ export function getPerStageWGSLForBindingCombinationImpl( ${bodyFn(numBindings, 1)} } `; - } + } case 'compute': return ` ${extraWGSL} @@ -148,42 +159,42 @@ export function getPerStageWGSLForBindingCombinationImpl( } export function getPerStageWGSLForBindingCombination( - bindingCombination, - order, - bindGroupTest, - storageDefinitionWGSLSnippetFn, - usageWGSLSnippetFn, - numBindings, - extraWGSL = '' -) { +bindingCombination, +order, +bindGroupTest, +storageDefinitionWGSLSnippetFn, +usageWGSLSnippetFn, +numBindings, +extraWGSL = '') +{ return getPerStageWGSLForBindingCombinationImpl( bindingCombination, order, bindGroupTest, storageDefinitionWGSLSnippetFn, (numBindings, set) => - `${range(numBindings, i => usageWGSLSnippetFn(i, set)).join('\n ')}`, + `${range(numBindings, (i) => usageWGSLSnippetFn(i, set)).join('\n ')}`, numBindings, extraWGSL ); } export function getPerStageWGSLForBindingCombinationStorageTextures( - bindingCombination, - order, - bindGroupTest, - storageDefinitionWGSLSnippetFn, - usageWGSLSnippetFn, - numBindings, - extraWGSL = '' -) { +bindingCombination, +order, +bindGroupTest, +storageDefinitionWGSLSnippetFn, +usageWGSLSnippetFn, +numBindings, +extraWGSL = '') +{ return getPerStageWGSLForBindingCombinationImpl( bindingCombination, order, bindGroupTest, storageDefinitionWGSLSnippetFn, (numBindings, set) => - `${range(numBindings, i => usageWGSLSnippetFn(i, set)).join('\n ')}`, + `${range(numBindings, (i) => usageWGSLSnippetFn(i, set)).join('\n ')}`, numBindings, extraWGSL ); @@ -191,8 +202,11 @@ export function getPerStageWGSLForBindingCombinationStorageTextures( export const kLimitModes = ['defaultLimit', 'adapterLimit']; + + export const kMaximumTestValues = ['atLimit', 'overLimit']; + export function getMaximumTestValue(limit, testValue) { switch (testValue) { case 'atLimit': @@ -204,15 +218,21 @@ export function getMaximumTestValue(limit, testValue) { export const kMinimumTestValues = ['atLimit', 'underLimit']; -export const kMaximumLimitValueTests = [ - 'atDefault', - 'underDefault', - 'betweenDefaultAndMaximum', - 'atMaximum', - 'overMaximum', -]; -export function getLimitValue(defaultLimit, maximumLimit, limitValueTest) { +export const kMaximumLimitValueTests = [ +'atDefault', +'underDefault', +'betweenDefaultAndMaximum', +'atMaximum', +'overMaximum']; + + + +export function getLimitValue( +defaultLimit, +maximumLimit, +limitValueTest) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; @@ -229,33 +249,51 @@ export function getLimitValue(defaultLimit, maximumLimit, limitValueTest) { } export const kMinimumLimitValueTests = [ - 'atDefault', - 'overDefault', - 'betweenDefaultAndMinimum', - 'atMinimum', - 'underMinimum', -]; +'atDefault', +'overDefault', +'betweenDefaultAndMinimum', +'atMinimum', +'underMinimum']; + + export function getDefaultLimitForAdapter(adapter, limit) { const limitInfo = getDefaultLimitsForAdapter(adapter); return limitInfo[limit].default; } + + + + + + + + + + + + + + + + + const kMinimumLimits = new Set([ - 'minUniformBufferOffsetAlignment', - 'minStorageBufferOffsetAlignment', -]); +'minUniformBufferOffsetAlignment', +'minStorageBufferOffsetAlignment'] +); /** * Adds the default parameters to a limit test */ -export const kMaximumLimitBaseParams = kUnitCaseParamsBuilder - .combine('limitTest', kMaximumLimitValueTests) - .combine('testValueName', kMaximumTestValues); +export const kMaximumLimitBaseParams = kUnitCaseParamsBuilder. +combine('limitTest', kMaximumLimitValueTests). +combine('testValueName', kMaximumTestValues); -export const kMinimumLimitBaseParams = kUnitCaseParamsBuilder - .combine('limitTest', kMinimumLimitValueTests) - .combine('testValueName', kMinimumTestValues); +export const kMinimumLimitBaseParams = kUnitCaseParamsBuilder. +combine('limitTest', kMinimumLimitValueTests). +combine('testValueName', kMinimumTestValues); export class LimitTestsImpl extends GPUTestBase { _adapter = null; @@ -285,9 +323,16 @@ export class LimitTestsImpl extends GPUTestBase { return this._device; } - async requestDeviceWithLimits(adapter, requiredLimits, shouldReject, requiredFeatures) { + async requestDeviceWithLimits( + adapter, + requiredLimits, + shouldReject, + requiredFeatures) + { if (shouldReject) { - this.shouldReject('OperationError', adapter.requestDevice({ requiredLimits })); + this.shouldReject('OperationError', adapter.requestDevice({ requiredLimits }), { + allowMissingStack: true + }); return undefined; } else { return await adapter.requestDevice({ requiredLimits, requiredFeatures }); @@ -308,7 +353,11 @@ export class LimitTestsImpl extends GPUTestBase { * is correct or that the device failed to create if the requested limit is * beyond the maximum supported by the device. */ - async _getDeviceWithSpecificLimit(requestedLimit, extraLimits, features) { + async _getDeviceWithSpecificLimit( + requestedLimit, + extraLimits, + features) + { const { adapter, limit, adapterLimit, defaultLimit } = this; const requiredLimits = {}; @@ -318,15 +367,15 @@ export class LimitTestsImpl extends GPUTestBase { for (const [extraLimitStr, limitMode] of Object.entries(extraLimits)) { const extraLimit = extraLimitStr; requiredLimits[extraLimit] = - limitMode === 'defaultLimit' - ? getDefaultLimitForAdapter(adapter, extraLimit) - : adapter.limits[extraLimit]; + limitMode === 'defaultLimit' ? + getDefaultLimitForAdapter(adapter, extraLimit) : + adapter.limits[extraLimit]; } } - const shouldReject = kMinimumLimits.has(limit) - ? requestedLimit < adapterLimit - : requestedLimit > adapterLimit; + const shouldReject = kMinimumLimits.has(limit) ? + requestedLimit < adapterLimit : + requestedLimit > adapterLimit; const device = await this.requestDeviceWithLimits( adapter, @@ -334,7 +383,6 @@ export class LimitTestsImpl extends GPUTestBase { shouldReject, features ); - const actualLimit = device ? device.limits[limit] : 0; if (shouldReject) { @@ -375,7 +423,11 @@ export class LimitTestsImpl extends GPUTestBase { * is correct or that the device failed to create if the requested limit is * beyond the maximum supported by the device. */ - async _getDeviceWithRequestedMaximumLimit(limitValueTest, extraLimits, features) { + async _getDeviceWithRequestedMaximumLimit( + limitValueTest, + extraLimits, + features) + { const { defaultLimit, adapterLimit: maximumLimit } = this; const requestedLimit = getLimitValue(defaultLimit, maximumLimit, limitValueTest); @@ -385,15 +437,19 @@ export class LimitTestsImpl extends GPUTestBase { /** * Call the given function and check no WebGPU errors are leaked. */ - async _testThenDestroyDevice(deviceAndLimits, testValue, fn) { + async _testThenDestroyDevice( + deviceAndLimits, + testValue, + fn) + { assert(!this._device); const { device, actualLimit } = deviceAndLimits; this._device = device; - const shouldError = kMinimumLimits.has(this.limit) - ? testValue < actualLimit - : testValue > actualLimit; + const shouldError = kMinimumLimits.has(this.limit) ? + testValue < actualLimit : + testValue > actualLimit; device.pushErrorScope('internal'); device.pushErrorScope('out-of-memory'); @@ -410,7 +466,6 @@ export class LimitTestsImpl extends GPUTestBase { !outOfMemoryError, `unexpected out-of-memory error: ${outOfMemoryError?.message || ''}` ); - this.expect(!internalError, `unexpected internal error: ${internalError?.message || ''}`); device.destroy(); @@ -423,7 +478,13 @@ export class LimitTestsImpl extends GPUTestBase { * If the device is created then we call a test function, checking * that the function does not leak any GPU errors. */ - async testDeviceWithSpecificLimits(deviceLimitValue, testValue, fn, extraLimits, features) { + async testDeviceWithSpecificLimits( + deviceLimitValue, + testValue, + fn, + extraLimits, + features) + { assert(!this._device); const deviceAndLimits = await this._getDeviceWithSpecificLimit( @@ -431,7 +492,6 @@ export class LimitTestsImpl extends GPUTestBase { extraLimits, features ); - // If we request over the limit requestDevice will throw if (!deviceAndLimits) { return; @@ -446,7 +506,12 @@ export class LimitTestsImpl extends GPUTestBase { * If the device is created then we call a test function, checking * that the function does not leak any GPU errors. */ - async testDeviceWithRequestedMaximumLimits(limitTest, testValueName, fn, extraLimits) { + async testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + fn, + extraLimits) + { assert(!this._device); const deviceAndLimits = await this._getDeviceWithRequestedMaximumLimit(limitTest, extraLimits); @@ -458,16 +523,25 @@ export class LimitTestsImpl extends GPUTestBase { const { actualLimit } = deviceAndLimits; const testValue = getMaximumTestValue(actualLimit, testValueName); - await this._testThenDestroyDevice(deviceAndLimits, testValue, async inputs => { - await fn({ ...inputs, testValueName }); - }); + await this._testThenDestroyDevice( + deviceAndLimits, + testValue, + async (inputs) => { + await fn({ ...inputs, testValueName }); + } + ); } /** * Calls a function that expects a GPU error if shouldError is true */ // MAINTENANCE_TODO: Remove this duplicated code with GPUTest if possible - async expectGPUErrorAsync(filter, fn, shouldError = true, msg = '') { + async expectGPUErrorAsync( + filter, + fn, + shouldError = true, + msg = '') + { const { device } = this; device.pushErrorScope(filter); @@ -486,11 +560,16 @@ export class LimitTestsImpl extends GPUTestBase { } /** Expect that the provided promise rejects, with the provided exception name. */ - async shouldRejectConditionally(expectedName, p, shouldReject, msg) { + async shouldRejectConditionally( + expectedName, + p, + shouldReject, + message) + { if (shouldReject) { - this.shouldReject(expectedName, p, msg); + this.shouldReject(expectedName, p, { message }); } else { - this.shouldResolve(p, msg); + this.shouldResolve(p, message); } // We need to explicitly wait for the promise because the device may be @@ -498,14 +577,18 @@ export class LimitTestsImpl extends GPUTestBase { try { await p; } catch (e) { + // - } - } + }} /** * Calls a function that expects a validation error if shouldError is true */ - async expectValidationError(fn, shouldError = true, msg = '') { + async expectValidationError( + fn, + shouldError = true, + msg = '') + { return this.expectGPUErrorAsync('validation', fn, shouldError, msg); } @@ -521,7 +604,11 @@ export class LimitTestsImpl extends GPUTestBase { * if shouldError is true then expect a validation error, * if shouldError is false then ignore out-of-memory errors. */ - async testForValidationErrorWithPossibleOutOfMemoryError(fn, shouldError = true, msg = '') { + async testForValidationErrorWithPossibleOutOfMemoryError( + fn, + shouldError = true, + msg = '') + { const { device } = this; if (!shouldError) { @@ -610,28 +697,30 @@ export class LimitTestsImpl extends GPUTestBase { layout: 'auto', vertex: { module, - entryPoint: 'mainVS', - }, + entryPoint: 'mainVS' + } }; } - _createRenderPipelineDescriptorWithFragmentShader(module) { + _createRenderPipelineDescriptorWithFragmentShader( + module) + { return { layout: 'auto', vertex: { module, - entryPoint: 'mainVS', + entryPoint: 'mainVS' }, fragment: { module, entryPoint: 'mainFS', - targets: [], + targets: [] }, depthStencil: { format: 'depth24plus-stencil8', depthWriteEnabled: true, - depthCompare: 'always', - }, + depthCompare: 'always' + } }; } @@ -640,8 +729,8 @@ export class LimitTestsImpl extends GPUTestBase { layout: 'auto', compute: { module, - entryPoint: 'main', - }, + entryPoint: 'main' + } }; } @@ -656,7 +745,6 @@ export class LimitTestsImpl extends GPUTestBase { return device.createRenderPipeline( this._createRenderPipelineDescriptorWithFragmentShader(module) ); - break; case 'createComputePipeline': return device.createComputePipeline(this._createComputePipelineDescriptor(module)); @@ -674,13 +762,18 @@ export class LimitTestsImpl extends GPUTestBase { return device.createRenderPipelineAsync( this._createRenderPipelineDescriptorWithFragmentShader(module) ); - case 'createComputePipeline': return device.createComputePipelineAsync(this._createComputePipelineDescriptor(module)); } } - async testCreatePipeline(createPipelineType, async, module, shouldError, msg = '') { + async testCreatePipeline( + createPipelineType, + async, + module, + shouldError, + msg = '') + { if (async) { await this.shouldRejectConditionally( 'GPUPipelineError', @@ -699,7 +792,12 @@ export class LimitTestsImpl extends GPUTestBase { } } - async testCreateRenderPipeline(pipelineDescriptor, async, shouldError, msg = '') { + async testCreateRenderPipeline( + pipelineDescriptor, + async, + shouldError, + msg = '') + { const { device } = this; if (async) { await this.shouldRejectConditionally( @@ -719,9 +817,14 @@ export class LimitTestsImpl extends GPUTestBase { } } - async testMaxComputeWorkgroupSize(limitTest, testValueName, async, axis) { + async testMaxComputeWorkgroupSize( + limitTest, + testValueName, + async, + axis) + { const kExtraLimits = { - maxComputeInvocationsPerWorkgroup: 'adapterLimit', + maxComputeInvocationsPerWorkgroup: 'adapterLimit' }; await this.testDeviceWithRequestedMaximumLimits( @@ -755,108 +858,108 @@ export class LimitTestsImpl extends GPUTestBase { const { device } = this; switch (encoderType) { - case 'render': { - const buffer = this.trackForCleanup( - device.createBuffer({ - size: 16, - usage: GPUBufferUsage.UNIFORM, - }) - ); + case 'render':{ + const buffer = this.trackForCleanup( + device.createBuffer({ + size: 16, + usage: GPUBufferUsage.UNIFORM + }) + ); - const texture = this.trackForCleanup( - device.createTexture({ - size: [1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); + const texture = this.trackForCleanup( + device.createTexture({ + size: [1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ); - const layout = device.createBindGroupLayout({ - entries: [ + const layout = device.createBindGroupLayout({ + entries: [ { binding: 0, visibility: GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }); + buffer: {} + }] - const bindGroup = device.createBindGroup({ - layout, - entries: [ + }); + + const bindGroup = device.createBindGroup({ + layout, + entries: [ { binding: 0, - resource: { buffer }, - }, - ], - }); + resource: { buffer } + }] - const encoder = device.createCommandEncoder(); - const mixin = encoder.beginRenderPass({ - colorAttachments: [ + }); + + const encoder = device.createCommandEncoder(); + const mixin = encoder.beginRenderPass({ + colorAttachments: [ { view: texture.createView(), loadOp: 'clear', - storeOp: 'store', + storeOp: 'store' + }] + + }); + + return { + mixin, + bindGroup, + prep() { + mixin.end(); }, - ], - }); + test() { + encoder.finish(); + } + }; + break; + } - return { - mixin, - bindGroup, - prep() { - mixin.end(); - }, - test() { - encoder.finish(); - }, - }; - break; - } + case 'renderBundle':{ + const buffer = this.trackForCleanup( + device.createBuffer({ + size: 16, + usage: GPUBufferUsage.UNIFORM + }) + ); - case 'renderBundle': { - const buffer = this.trackForCleanup( - device.createBuffer({ - size: 16, - usage: GPUBufferUsage.UNIFORM, - }) - ); - - const layout = device.createBindGroupLayout({ - entries: [ + const layout = device.createBindGroupLayout({ + entries: [ { binding: 0, visibility: GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }); + buffer: {} + }] - const bindGroup = device.createBindGroup({ - layout, - entries: [ + }); + + const bindGroup = device.createBindGroup({ + layout, + entries: [ { binding: 0, - resource: { buffer }, - }, - ], - }); + resource: { buffer } + }] - const mixin = device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }); + }); - return { - mixin, - bindGroup, - prep() {}, - test() { - mixin.finish(); - }, - }; - break; - } + const mixin = device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'] + }); + + return { + mixin, + bindGroup, + prep() {}, + test() { + mixin.finish(); + } + }; + break; + } } } @@ -864,7 +967,12 @@ export class LimitTestsImpl extends GPUTestBase { * Tests a method on GPURenderCommandsMixin * The function will be called with the mixin. */ - async testGPURenderCommandsMixin(encoderType, fn, shouldError, msg = '') { + async testGPURenderCommandsMixin( + encoderType, + fn, + shouldError, + msg = '') + { const { mixin, prep, test } = this._getGPURenderCommandsMixin(encoderType); fn({ mixin }); prep(); @@ -879,48 +987,48 @@ export class LimitTestsImpl extends GPUTestBase { const { device } = this; switch (encoderType) { - case 'compute': { - const buffer = this.trackForCleanup( - device.createBuffer({ - size: 16, - usage: GPUBufferUsage.UNIFORM, - }) - ); + case 'compute':{ + const buffer = this.trackForCleanup( + device.createBuffer({ + size: 16, + usage: GPUBufferUsage.UNIFORM + }) + ); - const layout = device.createBindGroupLayout({ - entries: [ + const layout = device.createBindGroupLayout({ + entries: [ { binding: 0, visibility: GPUShaderStage.COMPUTE, - buffer: {}, - }, - ], - }); + buffer: {} + }] - const bindGroup = device.createBindGroup({ - layout, - entries: [ + }); + + const bindGroup = device.createBindGroup({ + layout, + entries: [ { binding: 0, - resource: { buffer }, - }, - ], - }); + resource: { buffer } + }] - const encoder = device.createCommandEncoder(); - const mixin = encoder.beginComputePass(); - return { - mixin, - bindGroup, - prep() { - mixin.end(); - }, - test() { - encoder.finish(); - }, - }; - break; - } + }); + + const encoder = device.createCommandEncoder(); + const mixin = encoder.beginComputePass(); + return { + mixin, + bindGroup, + prep() { + mixin.end(); + }, + test() { + encoder.finish(); + } + }; + break; + } case 'render': return this._getGPURenderCommandsMixin('render'); case 'renderBundle': @@ -932,7 +1040,12 @@ export class LimitTestsImpl extends GPUTestBase { * Tests a method on GPUBindingCommandsMixin * The function pass will be called with the mixin and a bindGroup */ - async testGPUBindingCommandsMixin(encoderType, fn, shouldError, msg = '') { + async testGPUBindingCommandsMixin( + encoderType, + fn, + shouldError, + msg = '') + { const { mixin, bindGroup, prep, test } = this._getGPUBindingCommandsMixin(encoderType); fn({ mixin, bindGroup }); prep(); @@ -973,4 +1086,4 @@ export function makeLimitTestGroup(limit) { const description = `API Validation Tests for ${limit}.`; const g = makeTestGroup(makeLimitTestFixture(limit)); return { g, description, limit }; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindGroups.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindGroups.spec.js index bd13235b8b7..ab0eaa3e4bc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindGroups.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindGroups.spec.js @@ -1,88 +1,95 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range } from '../../../../../common/util/util.js'; -import { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../../../../common/util/util.js';import { kCreatePipelineTypes, kEncoderTypes, kMaximumLimitBaseParams, - makeLimitTestGroup, -} from './limit_utils.js'; + makeLimitTestGroup } from +'./limit_utils.js'; const limit = 'maxBindGroups'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createPipelineLayout,at_over') - .desc(`Test using createPipelineLayout at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const bindGroupLayouts = range(testValue, i => - device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }) - ); +g.test('createPipelineLayout,at_over'). +desc(`Test using createPipelineLayout at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const bindGroupLayouts = range(testValue, (_i) => + device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.VERTEX, + buffer: {} + }] - await t.expectValidationError(() => { - device.createPipelineLayout({ bindGroupLayouts }); - }, shouldError); - } - ); - }); + }) + ); -g.test('createPipeline,at_over') - .desc( - `Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit` - ) - .params( - kMaximumLimitBaseParams - .combine('createPipelineType', kCreatePipelineTypes) - .combine('async', [false, true]) - ) - .fn(async t => { - const { limitTest, testValueName, createPipelineType, async } = t.params; + await t.expectValidationError(() => { + device.createPipelineLayout({ bindGroupLayouts }); + }, shouldError); + } + ); +}); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const lastIndex = testValue - 1; +g.test('createPipeline,at_over'). +desc( + `Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit` +). +params( + kMaximumLimitBaseParams. + combine('createPipelineType', kCreatePipelineTypes). + combine('async', [false, true]) +). +fn(async (t) => { + const { limitTest, testValueName, createPipelineType, async } = t.params; - const code = t.getGroupIndexWGSLForPipelineType(createPipelineType, lastIndex); - const module = device.createShaderModule({ code }); + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const lastIndex = testValue - 1; - await t.testCreatePipeline(createPipelineType, async, module, shouldError); - } - ); - }); + const code = t.getGroupIndexWGSLForPipelineType(createPipelineType, lastIndex); + const module = device.createShaderModule({ code }); -g.test('setBindGroup,at_over') - .desc(`Test using setBindGroup at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('encoderType', kEncoderTypes)) - .fn(async t => { - const { limitTest, testValueName, encoderType } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ testValue, actualLimit, shouldError }) => { - const lastIndex = testValue - 1; - await t.testGPUBindingCommandsMixin( - encoderType, - ({ mixin, bindGroup }) => { - mixin.setBindGroup(lastIndex, bindGroup); - }, - shouldError, - `shouldError: ${shouldError}, actualLimit: ${actualLimit}, testValue: ${lastIndex}` - ); - } - ); - }); + await t.testCreatePipeline(createPipelineType, async, module, shouldError); + } + ); +}); + +g.test('setBindGroup,at_over'). +desc(`Test using setBindGroup at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('encoderType', kEncoderTypes)). +fn(async (t) => { + const { limitTest, testValueName, encoderType } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ testValue, actualLimit, shouldError }) => { + const lastIndex = testValue - 1; + await t.testGPUBindingCommandsMixin( + encoderType, + ({ mixin, bindGroup }) => { + mixin.setBindGroup(lastIndex, bindGroup); + }, + shouldError, + `shouldError: ${shouldError}, actualLimit: ${actualLimit}, testValue: ${lastIndex}` + ); + } + ); +}); + +g.test('validate,maxBindGroupsPlusVertexBuffers'). +desc(`Test that ${limit} <= maxBindGroupsPlusVertexBuffers`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxBindGroupsPlusVertexBuffers')); + t.expect(adapterLimit <= adapter.limits.maxBindGroupsPlusVertexBuffers); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindingsPerBindGroup.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindingsPerBindGroup.spec.js index ebc2e8c07d9..5c5c6ebcb96 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindingsPerBindGroup.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBindingsPerBindGroup.spec.js @@ -1,77 +1,75 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { - kCreatePipelineTypes, - kMaximumLimitBaseParams, - makeLimitTestGroup, -} from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kCreatePipelineTypes, kMaximumLimitBaseParams, + makeLimitTestGroup } from +'./limit_utils.js'; const limit = 'maxBindingsPerBindGroup'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBindGroupLayout,at_over') - .desc(`Test using createBindGroupLayout at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError(() => { - device.createBindGroupLayout({ - entries: [ - { - binding: testValue - 1, - visibility: GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }); - }, shouldError); - } - ); - }); +g.test('createBindGroupLayout,at_over'). +desc(`Test using createBindGroupLayout at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError(() => { + device.createBindGroupLayout({ + entries: [ + { + binding: testValue - 1, + visibility: GPUShaderStage.VERTEX, + buffer: {} + }] -g.test('createPipeline,at_over') - .desc( - `Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit` - ) - .params( - kMaximumLimitBaseParams - .combine('createPipelineType', kCreatePipelineTypes) - .combine('async', [false, true]) - ) - .fn(async t => { - const { limitTest, testValueName, createPipelineType, async } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const lastIndex = testValue - 1; + }); + }, shouldError); + } + ); +}); - const code = t.getBindingIndexWGSLForPipelineType(createPipelineType, lastIndex); - const module = device.createShaderModule({ code }); +g.test('createPipeline,at_over'). +desc( + `Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit` +). +params( + kMaximumLimitBaseParams. + combine('createPipelineType', kCreatePipelineTypes). + combine('async', [false, true]) +). +fn(async (t) => { + const { limitTest, testValueName, createPipelineType, async } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const lastIndex = testValue - 1; - await t.testCreatePipeline(createPipelineType, async, module, shouldError, code); - } - ); - }); + const code = t.getBindingIndexWGSLForPipelineType(createPipelineType, lastIndex); + const module = device.createShaderModule({ code }); -g.test('validate') - .desc(`Test ${limit} matches the spec limits`) - .fn(t => { - const { adapter, adapterLimit } = t; - const maxBindingsPerShaderStage = - adapter.limits.maxSampledTexturesPerShaderStage + - adapter.limits.maxSamplersPerShaderStage + - adapter.limits.maxStorageBuffersPerShaderStage + - adapter.limits.maxStorageTexturesPerShaderStage + - adapter.limits.maxUniformBuffersPerShaderStage; - const maxShaderStagesPerPipeline = 2; - const minMaxBindingsPerBindGroup = maxBindingsPerShaderStage * maxShaderStagesPerPipeline; - t.expect( - adapterLimit >= minMaxBindingsPerBindGroup, - `maxBindingsPerBindGroup(${adapterLimit}) >= maxBindingsPerShaderStage(${maxBindingsPerShaderStage}) * maxShaderStagesPerPipeline(${maxShaderStagesPerPipeline} = (${minMaxBindingsPerBindGroup}))` - ); - }); + await t.testCreatePipeline(createPipelineType, async, module, shouldError, code); + } + ); +}); + +g.test('validate'). +desc(`Test ${limit} matches the spec limits`). +fn((t) => { + const { adapter, adapterLimit } = t; + const maxBindingsPerShaderStage = + adapter.limits.maxSampledTexturesPerShaderStage + + adapter.limits.maxSamplersPerShaderStage + + adapter.limits.maxStorageBuffersPerShaderStage + + adapter.limits.maxStorageTexturesPerShaderStage + + adapter.limits.maxUniformBuffersPerShaderStage; + const maxShaderStagesPerPipeline = 2; + const minMaxBindingsPerBindGroup = maxBindingsPerShaderStage * maxShaderStagesPerPipeline; + t.expect( + adapterLimit >= minMaxBindingsPerBindGroup, + `maxBindingsPerBindGroup(${adapterLimit}) >= maxBindingsPerShaderStage(${maxBindingsPerShaderStage}) * maxShaderStagesPerPipeline(${maxShaderStagesPerPipeline} = (${minMaxBindingsPerBindGroup}))` + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBufferSize.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBufferSize.spec.js index 2f232776fcc..ab2d5215d5d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBufferSize.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxBufferSize.spec.js @@ -1,29 +1,28 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxBufferSize'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxBufferSize'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBuffer,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - await t.testForValidationErrorWithPossibleOutOfMemoryError( - () => { - const buffer = device.createBuffer({ - usage: GPUBufferUsage.VERTEX, - size: testValue, - }); - buffer.destroy(); - }, - shouldError, - `size: ${testValue}, limit: ${actualLimit}` - ); - } - ); - }); +g.test('createBuffer,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + await t.testForValidationErrorWithPossibleOutOfMemoryError( + () => { + const buffer = device.createBuffer({ + usage: GPUBufferUsage.VERTEX, + size: testValue + }); + buffer.destroy(); + }, + shouldError, + `size: ${testValue}, limit: ${actualLimit}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachmentBytesPerSample.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachmentBytesPerSample.spec.js index 5d93d1b969e..508b436deee 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachmentBytesPerSample.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachmentBytesPerSample.spec.js @@ -1,24 +1,39 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../../../../common/util/util.js'; -import { kTextureSampleCounts } from '../../../../capability_info.js'; -import { kTextureFormatInfo } from '../../../../format_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../../../../common/util/util.js';import { kTextureSampleCounts } from '../../../../capability_info.js';import { kTextureFormatInfo } from '../../../../format_info.js'; import { align } from '../../../../util/math.js'; -import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +import { + kMaximumLimitBaseParams, -const kFormatsToUseBySize = ['rgba32float', 'rgba16float', 'rgba8unorm', 'rg8unorm', 'r8unorm']; -const kInterleaveFormats = ['rgba16float', 'rg16float', 'rgba8unorm', 'rg8unorm', 'r8unorm']; + makeLimitTestGroup } from +'./limit_utils.js'; + +const kFormatsToUseBySize = [ +'rgba32float', +'rgba16float', +'rgba8unorm', +'rg8unorm', +'r8unorm']; + + +const kInterleaveFormats = [ +'rgba16float', +'rg16float', +'rgba8unorm', +'rg8unorm', +'r8unorm']; + function getAttachments(interleaveFormat, testValue) { let bytesPerSample = 0; const targets = []; - const addTexture = format => { + const addTexture = (format) => { const info = kTextureFormatInfo[format]; const newBytesPerSample = - align(bytesPerSample, info.colorRender.alignment) + info.colorRender.byteCost; + align(bytesPerSample, info.colorRender.alignment) + info.colorRender.byteCost; if (newBytesPerSample > testValue) { return false; } @@ -40,30 +55,41 @@ function getAttachments(interleaveFormat, testValue) { return targets; } -function getDescription(testValue, actualLimit, sampleCount, targets) { +function getDescription( +testValue, +actualLimit, +sampleCount, +targets) +{ return ` // testValue : ${testValue} // actualLimit: ${actualLimit} // sampleCount: ${sampleCount} // targets: ${(() => { - let offset = 0; - return targets - .map(({ format }) => { - const info = kTextureFormatInfo[format]; - offset = align(offset, info.colorRender.alignment); - const s = `// ${format.padEnd(11)} (offset: ${offset.toString().padStart(2)}, align: ${ - info.colorRender.alignment - }, size: ${info.colorRender.byteCost})`; - offset += info.colorRender.byteCost; - return s; - }) - .join('\n '); - })()} + let offset = 0; + return targets. + map(({ format }) => { + const info = kTextureFormatInfo[format]; + offset = align(offset, info.colorRender.alignment); + const s = `// ${format.padEnd(11)} (offset: ${offset.toString().padStart(2)}, align: ${ + info.colorRender.alignment + }, size: ${info.colorRender.byteCost})`; + offset += info.colorRender.byteCost; + return s; + }). + join('\n '); + })()} `; } -function getPipelineDescriptor(device, actualLimit, interleaveFormat, sampleCount, testValue) { +function getPipelineDescriptor( +device, +actualLimit, +interleaveFormat, +sampleCount, +testValue) +{ const targets = getAttachments(interleaveFormat, testValue); if (!targets) { return; @@ -84,152 +110,151 @@ function getPipelineDescriptor(device, actualLimit, interleaveFormat, sampleCoun layout: 'auto', vertex: { module, - entryPoint: 'vs', + entryPoint: 'vs' }, fragment: { module, entryPoint: 'fs', - targets, + targets }, // depth should not affect the test so added to make sure the implementation does not consider it depthStencil: { depthWriteEnabled: true, depthCompare: 'less', - format: 'depth24plus', + format: 'depth24plus' }, multisample: { - count: sampleCount, - }, + count: sampleCount + } }; return { pipelineDescriptor, code }; } function createTextures(t, targets) { return targets.map(({ format }) => - t.trackForCleanup( - t.device.createTexture({ - size: [1, 1], - format, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ) + t.trackForCleanup( + t.device.createTexture({ + size: [1, 1], + format, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ) ); } const kExtraLimits = { - maxColorAttachments: 'adapterLimit', + maxColorAttachments: 'adapterLimit' }; const limit = 'maxColorAttachmentBytesPerSample'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('sampleCount', kTextureSampleCounts) - .combine('interleaveFormat', kInterleaveFormats) - ) - .fn(async t => { - const { limitTest, testValueName, async, sampleCount, interleaveFormat } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const result = getPipelineDescriptor( - device, - actualLimit, - interleaveFormat, - sampleCount, - testValue - ); +g.test('createRenderPipeline,at_over'). +desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('sampleCount', kTextureSampleCounts). + combine('interleaveFormat', kInterleaveFormats) +). +fn(async (t) => { + const { limitTest, testValueName, async, sampleCount, interleaveFormat } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const result = getPipelineDescriptor( + device, + actualLimit, + interleaveFormat, + sampleCount, + testValue + ); + if (!result) { + return; + } + const { pipelineDescriptor, code } = result; + const numTargets = pipelineDescriptor.fragment.targets.length; + if (numTargets > device.limits.maxColorAttachments) { + return; + } - if (!result) { - return; - } - const { pipelineDescriptor, code } = result; - const numTargets = pipelineDescriptor.fragment.targets.length; - if (numTargets > device.limits.maxColorAttachments) { - return; - } + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError, code); + }, + kExtraLimits + ); +}); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError, code); - }, - kExtraLimits - ); - }); +g.test('beginRenderPass,at_over'). +desc(`Test using at and over ${limit} limit in beginRenderPass`). +params( + kMaximumLimitBaseParams. + combine('sampleCount', kTextureSampleCounts). + combine('interleaveFormat', kInterleaveFormats) +). +fn(async (t) => { + const { limitTest, testValueName, sampleCount, interleaveFormat } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const targets = getAttachments(interleaveFormat, testValue); + if (targets.length > device.limits.maxColorAttachments) { + return; + } -g.test('beginRenderPass,at_over') - .desc(`Test using at and over ${limit} limit in beginRenderPass`) - .params( - kMaximumLimitBaseParams - .combine('sampleCount', kTextureSampleCounts) - .combine('interleaveFormat', kInterleaveFormats) - ) - .fn(async t => { - const { limitTest, testValueName, sampleCount, interleaveFormat } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const targets = getAttachments(interleaveFormat, testValue); - if (targets.length > device.limits.maxColorAttachments) { - return; - } + const encoder = device.createCommandEncoder(); + const textures = createTextures(t, targets); - const encoder = device.createCommandEncoder(); - const textures = createTextures(t, targets); + const pass = encoder.beginRenderPass({ + colorAttachments: textures.map((texture) => ({ + view: texture.createView(), + loadOp: 'clear', + storeOp: 'store' + })) + }); + pass.end(); - const pass = encoder.beginRenderPass({ - colorAttachments: textures.map(texture => ({ - view: texture.createView(), - loadOp: 'clear', - storeOp: 'store', - })), - }); - pass.end(); + await t.expectValidationError( + () => { + encoder.finish(); + }, + shouldError, + getDescription(testValue, actualLimit, sampleCount, targets) + ); + }, + kExtraLimits + ); +}); - await t.expectValidationError( - () => { - encoder.finish(); - }, - shouldError, - getDescription(testValue, actualLimit, sampleCount, targets) - ); - }, - kExtraLimits - ); - }); +g.test('createRenderBundle,at_over'). +desc(`Test using at and over ${limit} limit in createRenderBundle`). +params( + kMaximumLimitBaseParams. + combine('sampleCount', kTextureSampleCounts). + combine('interleaveFormat', kInterleaveFormats) +). +fn(async (t) => { + const { limitTest, testValueName, sampleCount, interleaveFormat } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const targets = getAttachments(interleaveFormat, testValue); + if (targets.length > device.limits.maxColorAttachments) { + return; + } -g.test('createRenderBundle,at_over') - .desc(`Test using at and over ${limit} limit in createRenderBundle`) - .params( - kMaximumLimitBaseParams - .combine('sampleCount', kTextureSampleCounts) - .combine('interleaveFormat', kInterleaveFormats) - ) - .fn(async t => { - const { limitTest, testValueName, sampleCount, interleaveFormat } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const targets = getAttachments(interleaveFormat, testValue); - if (targets.length > device.limits.maxColorAttachments) { - return; - } - - await t.expectValidationError( - () => { - device.createRenderBundleEncoder({ - colorFormats: targets.map(({ format }) => format), - }); - }, - shouldError, - getDescription(testValue, actualLimit, sampleCount, targets) - ); - }, - kExtraLimits - ); - }); + await t.expectValidationError( + () => { + device.createRenderBundleEncoder({ + colorFormats: targets.map(({ format }) => format) + }); + }, + shouldError, + getDescription(testValue, actualLimit, sampleCount, targets) + ); + }, + kExtraLimits + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachments.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachments.spec.js index 7c291765f80..80fa8fdd7cf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachments.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxColorAttachments.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range } from '../../../../../common/util/util.js'; -import { kMaxColorAttachmentsToTest } from '../../../../capability_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../../../../common/util/util.js';import { kMaxColorAttachmentsToTest } from '../../../../capability_info.js'; import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; function getPipelineDescriptor(device, testValue) { @@ -19,107 +18,107 @@ function getPipelineDescriptor(device, testValue) { layout: 'auto', vertex: { module, - entryPoint: 'vs', + entryPoint: 'vs' }, fragment: { module, entryPoint: 'fs', - targets: new Array(testValue).fill({ format: 'r8unorm', writeMask: 0 }), - }, + targets: new Array(testValue).fill({ format: 'r8unorm', writeMask: 0 }) + } }; } const limit = 'maxColorAttachments'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const pipelineDescriptor = getPipelineDescriptor(device, testValue); +g.test('createRenderPipeline,at_over'). +desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const pipelineDescriptor = getPipelineDescriptor(device, testValue); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); - } - ); - }); + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); + } + ); +}); -g.test('beginRenderPass,at_over') - .desc(`Test using at and over ${limit} limit in beginRenderPass`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const encoder = device.createCommandEncoder(); +g.test('beginRenderPass,at_over'). +desc(`Test using at and over ${limit} limit in beginRenderPass`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const encoder = device.createCommandEncoder(); - const textures = range(testValue, _ => - t.trackForCleanup( - device.createTexture({ - size: [1, 1], - format: 'r8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ) - ); + const textures = range(testValue, (_) => + t.trackForCleanup( + device.createTexture({ + size: [1, 1], + format: 'r8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ) + ); - const pass = encoder.beginRenderPass({ - colorAttachments: range(testValue, i => ({ - view: textures[i].createView(), - loadOp: 'clear', - storeOp: 'store', - })), + const pass = encoder.beginRenderPass({ + colorAttachments: range(testValue, (i) => ({ + view: textures[i].createView(), + loadOp: 'clear', + storeOp: 'store' + })) + }); + pass.end(); + + await t.expectValidationError(() => { + encoder.finish(); + }, shouldError); + } + ); +}); + +g.test('createRenderBundle,at_over'). +desc(`Test using at and over ${limit} limit in createRenderBundle`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError(() => { + device.createRenderBundleEncoder({ + colorFormats: new Array(testValue).fill('r8unorm') }); - pass.end(); + }, shouldError); + } + ); +}); - await t.expectValidationError(() => { - encoder.finish(); - }, shouldError); - } - ); - }); +g.test('validate,maxColorAttachmentBytesPerSample'). +desc(`Test ${limit} against maxColorAttachmentBytesPerSample`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit: maximumLimit } = t; + const minColorAttachmentBytesPerSample = t.getDefaultLimit('maxColorAttachmentBytesPerSample'); + // The smallest attachment is 1 byte + // so make sure maxColorAttachments < maxColorAttachmentBytesPerSample + t.expect(defaultLimit <= minColorAttachmentBytesPerSample); + t.expect(maximumLimit <= adapter.limits.maxColorAttachmentBytesPerSample); +}); -g.test('createRenderBundle,at_over') - .desc(`Test using at and over ${limit} limit in createRenderBundle`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError(() => { - device.createRenderBundleEncoder({ - colorFormats: new Array(testValue).fill('r8unorm'), - }); - }, shouldError); - } - ); - }); - -g.test('validate,maxColorAttachmentBytesPerSample') - .desc(`Test ${limit} against maxColorAttachmentBytesPerSample`) - .fn(t => { - const { adapter, defaultLimit, adapterLimit: maximumLimit } = t; - const minColorAttachmentBytesPerSample = t.getDefaultLimit('maxColorAttachmentBytesPerSample'); - // The smallest attachment is 1 byte - // so make sure maxColorAttachments < maxColorAttachmentBytesPerSample - t.expect(defaultLimit <= minColorAttachmentBytesPerSample); - t.expect(maximumLimit <= adapter.limits.maxColorAttachmentBytesPerSample); - }); - -g.test('validate,kMaxColorAttachmentsToTest') - .desc( - ` +g.test('validate,kMaxColorAttachmentsToTest'). +desc( + ` Tests that kMaxColorAttachmentsToTest is large enough to test the limits of this device ` - ) - .fn(t => { - t.expect(t.adapter.limits.maxColorAttachments <= kMaxColorAttachmentsToTest); - }); +). +fn((t) => { + t.expect(t.adapter.limits.maxColorAttachments <= kMaxColorAttachmentsToTest); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeInvocationsPerWorkgroup.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeInvocationsPerWorkgroup.spec.js index e68ebf49a0a..6a00ba58053 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeInvocationsPerWorkgroup.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeInvocationsPerWorkgroup.spec.js @@ -1,6 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { + kMaximumLimitBaseParams, + + + makeLimitTestGroup } from +'./limit_utils.js'; /** * Given a 3 dimensional size, and a limit, compute @@ -52,7 +57,11 @@ function getClosestSizeUnderOrAtLimit(size, limit) { return closestSize; } -function getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit) { +function getDeviceLimitToRequest( +limitValueTest, +defaultLimit, +maximumLimit) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; @@ -67,12 +76,16 @@ function getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit) { } } -function getTestWorkgroupSize(t, testValueName, requestedLimit) { +function getTestWorkgroupSize( +t, +testValueName, +requestedLimit) +{ const maxDimensions = [ - t.getDefaultLimit('maxComputeWorkgroupSizeX'), - t.getDefaultLimit('maxComputeWorkgroupSizeY'), - t.getDefaultLimit('maxComputeWorkgroupSizeZ'), - ]; + t.getDefaultLimit('maxComputeWorkgroupSizeX'), + t.getDefaultLimit('maxComputeWorkgroupSizeY'), + t.getDefaultLimit('maxComputeWorkgroupSizeZ')]; + switch (testValueName) { case 'atLimit': @@ -83,53 +96,52 @@ function getTestWorkgroupSize(t, testValueName, requestedLimit) { } function getDeviceLimitToRequestAndValueToTest( - t, - limitValueTest, - testValueName, - defaultLimit, - maximumLimit -) { +t, +limitValueTest, +testValueName, +defaultLimit, +maximumLimit) +{ const requestedLimit = getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit); const workgroupSize = getTestWorkgroupSize(t, testValueName, requestedLimit); return { requestedLimit, - workgroupSize, + workgroupSize }; } const limit = 'maxComputeInvocationsPerWorkgroup'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createComputePipeline,at_over') - .desc(`Test using createComputePipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - const { defaultLimit, adapterLimit: maximumLimit } = t; +g.test('createComputePipeline,at_over'). +desc(`Test using createComputePipeline(Async) at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + const { defaultLimit, adapterLimit: maximumLimit } = t; - const { requestedLimit, workgroupSize } = getDeviceLimitToRequestAndValueToTest( - t, - limitTest, - testValueName, - defaultLimit, - maximumLimit - ); + const { requestedLimit, workgroupSize } = getDeviceLimitToRequestAndValueToTest( + t, + limitTest, + testValueName, + defaultLimit, + maximumLimit + ); + const testValue = workgroupSize.reduce((a, b) => a * b, 1); - const testValue = workgroupSize.reduce((a, b) => a * b, 1); + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ testValue, actualLimit, shouldError }) => { + const { module, code } = t.getModuleForWorkgroupSize(workgroupSize); - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ testValue, actualLimit, shouldError }) => { - const { module, code } = t.getModuleForWorkgroupSize(workgroupSize); - - await t.testCreatePipeline( - 'createComputePipeline', - async, - module, - shouldError, - `workgroupSize: [${workgroupSize}], size: ${testValue}, limit: ${actualLimit}\n${code}` - ); - } - ); - }); + await t.testCreatePipeline( + 'createComputePipeline', + async, + module, + shouldError, + `workgroupSize: [${workgroupSize}], size: ${testValue}, limit: ${actualLimit}\n${code}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeX.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeX.spec.js index 877e0cd7c50..7eaf1e749bf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeX.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeX.spec.js @@ -1,13 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxComputeWorkgroupSizeX'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxComputeWorkgroupSizeX'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createComputePipeline,at_over') - .desc(`Test using createComputePipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - await t.testMaxComputeWorkgroupSize(limitTest, testValueName, async, 'X'); - }); +g.test('createComputePipeline,at_over'). +desc(`Test using createComputePipeline(Async) at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + await t.testMaxComputeWorkgroupSize(limitTest, testValueName, async, 'X'); +}); + +g.test('validate,maxComputeInvocationsPerWorkgroup'). +desc(`Test that ${limit} <= maxComputeInvocationsPerWorkgroup`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxComputeInvocationsPerWorkgroup')); + t.expect(adapterLimit <= adapter.limits.maxComputeInvocationsPerWorkgroup); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeY.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeY.spec.js index b4dbd592ded..5a24d646c18 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeY.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeY.spec.js @@ -1,13 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxComputeWorkgroupSizeY'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxComputeWorkgroupSizeY'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createComputePipeline,at_over') - .desc(`Test using createComputePipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - await t.testMaxComputeWorkgroupSize(limitTest, testValueName, async, 'Y'); - }); +g.test('createComputePipeline,at_over'). +desc(`Test using createComputePipeline(Async) at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + await t.testMaxComputeWorkgroupSize(limitTest, testValueName, async, 'Y'); +}); + +g.test('validate,maxComputeInvocationsPerWorkgroup'). +desc(`Test that ${limit} <= maxComputeInvocationsPerWorkgroup`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxComputeInvocationsPerWorkgroup')); + t.expect(adapterLimit <= adapter.limits.maxComputeInvocationsPerWorkgroup); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeZ.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeZ.spec.js index b77ffb9d316..dbd035de109 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeZ.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupSizeZ.spec.js @@ -1,13 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxComputeWorkgroupSizeZ'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxComputeWorkgroupSizeZ'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createComputePipeline,at_over') - .desc(`Test using createComputePipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - await t.testMaxComputeWorkgroupSize(limitTest, testValueName, async, 'Z'); - }); +g.test('createComputePipeline,at_over'). +desc(`Test using createComputePipeline(Async) at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + await t.testMaxComputeWorkgroupSize(limitTest, testValueName, async, 'Z'); +}); + +g.test('validate,maxComputeInvocationsPerWorkgroup'). +desc(`Test that ${limit} <= maxComputeInvocationsPerWorkgroup`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxComputeInvocationsPerWorkgroup')); + t.expect(adapterLimit <= adapter.limits.maxComputeInvocationsPerWorkgroup); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupStorageSize.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupStorageSize.spec.js index c4f2a3c6c38..2034364a5f2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupStorageSize.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupStorageSize.spec.js @@ -1,10 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { keysOf } from '../../../../../common/util/data_tables.js'; -import { assert } from '../../../../../common/util/util.js'; -import { align, roundDown } from '../../../../util/math.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { keysOf } from '../../../../../common/util/data_tables.js';import { assert } from '../../../../../common/util/util.js';import { align, roundDown } from '../../../../util/math.js'; -import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +import { + + + kMaximumLimitBaseParams, + makeLimitTestGroup } from +'./limit_utils.js'; const limit = 'maxComputeWorkgroupStorageSize'; export const { g, description } = makeLimitTestGroup(limit); @@ -24,7 +27,7 @@ const wgslF16Types = { 'mat4x3': { alignOf: 8, sizeOf: 32, requireF16: true }, 'mat2x4': { alignOf: 8, sizeOf: 16, requireF16: true }, 'mat3x4': { alignOf: 8, sizeOf: 24, requireF16: true }, - 'mat4x4': { alignOf: 8, sizeOf: 32, requireF16: true }, + 'mat4x4': { alignOf: 8, sizeOf: 32, requireF16: true } }; const wgslBaseTypes = { @@ -56,7 +59,7 @@ const wgslBaseTypes = { S1: { alignOf: 16, sizeOf: 48, requireF16: false }, S2: { alignOf: 4, sizeOf: 16 * 7, requireF16: false }, - S3: { alignOf: 16, sizeOf: 32, requireF16: false }, + S3: { alignOf: 16, sizeOf: 32, requireF16: false } }; const wgslTypes = { ...wgslF16Types, ...wgslBaseTypes }; @@ -71,8 +74,8 @@ function getModuleForWorkgroupStorageSize(device, wgslType, size) { const extra = (size - units * unitSize) / kSmallestWorkgroupVarSize; const code = - (requireF16 ? 'enable f16;\n' : '') + - ` + (requireF16 ? 'enable f16;\n' : '') + + ` struct S1 { a: f32, b: vec4f, @@ -95,7 +98,11 @@ function getModuleForWorkgroupStorageSize(device, wgslType, size) { return { module: device.createShaderModule({ code }), code }; } -function getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit) { +function getDeviceLimitToRequest( +limitValueTest, +defaultLimit, +maximumLimit) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; @@ -120,55 +127,56 @@ function getTestValue(testValueName, requestedLimit) { } function getDeviceLimitToRequestAndValueToTest( - limitValueTest, - testValueName, - defaultLimit, - maximumLimit -) { +limitValueTest, +testValueName, +defaultLimit, +maximumLimit) +{ const requestedLimit = getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit); const testValue = getTestValue(testValueName, requestedLimit); return { requestedLimit, - testValue, + testValue }; } -g.test('createComputePipeline,at_over') - .desc(`Test using createComputePipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true]).combine('wgslType', kWGSLTypes)) - .fn(async t => { - const { limitTest, testValueName, async, wgslType } = t.params; - const { defaultLimit, adapterLimit: maximumLimit } = t; +g.test('createComputePipeline,at_over'). +desc(`Test using createComputePipeline(Async) at and over ${limit} limit`). +params( + kMaximumLimitBaseParams.combine('async', [false, true]).combine('wgslType', kWGSLTypes) +). +fn(async (t) => { + const { limitTest, testValueName, async, wgslType } = t.params; + const { defaultLimit, adapterLimit: maximumLimit } = t; - const hasF16 = t.adapter.features.has('shader-f16'); - if (!hasF16 && wgslType in wgslF16Types) { - return; - } + const hasF16 = t.adapter.features.has('shader-f16'); + if (!hasF16 && wgslType in wgslF16Types) { + return; + } - const features = hasF16 ? ['shader-f16'] : []; + const features = hasF16 ? ['shader-f16'] : []; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - maximumLimit - ); + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + maximumLimit + ); + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, actualLimit, shouldError }) => { + const { module, code } = getModuleForWorkgroupStorageSize(device, wgslType, testValue); - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, actualLimit, shouldError }) => { - const { module, code } = getModuleForWorkgroupStorageSize(device, wgslType, testValue); - - await t.testCreatePipeline( - 'createComputePipeline', - async, - module, - shouldError, - `size: ${testValue}, limit: ${actualLimit}\n${code}` - ); - }, - {}, - features - ); - }); + await t.testCreatePipeline( + 'createComputePipeline', + async, + module, + shouldError, + `size: ${testValue}, limit: ${actualLimit}\n${code}` + ); + }, + {}, + features + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupsPerDimension.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupsPerDimension.spec.js index f988ac77ee3..6c43c8da1cb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupsPerDimension.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxComputeWorkgroupsPerDimension.spec.js @@ -1,12 +1,19 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxComputeWorkgroupsPerDimension'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxComputeWorkgroupsPerDimension'; export const { g, description } = makeLimitTestGroup(limit); -const kCreateComputePipelineTypes = ['createComputePipeline', 'createComputePipelineAsync']; +const kCreateComputePipelineTypes = [ +'createComputePipeline', +'createComputePipelineAsync']; -async function createComputePipeline(device, descriptor, pipelineType) { + + +async function createComputePipeline( +device, +descriptor, +pipelineType) +{ switch (pipelineType) { case 'createComputePipeline': return device.createComputePipeline(descriptor); @@ -16,57 +23,75 @@ async function createComputePipeline(device, descriptor, pipelineType) { } // Note: dispatchWorkgroupsIndirect is not tested because it's not a validation error if that exceeds the limits -g.test('dispatchWorkgroups,at_over') - .desc(`Test using dispatchWorkgroups at and over ${limit} limit`) - .params( - kMaximumLimitBaseParams - .combine('pipelineType', kCreateComputePipelineTypes) - .combine('axis', [0, 1, 2]) - ) - .fn(async t => { - const { limitTest, testValueName, pipelineType, axis } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const counts = [1, 1, 1]; - counts[axis] = testValue; +g.test('dispatchWorkgroups,at_over'). +desc(`Test using dispatchWorkgroups at and over ${limit} limit`). +params( + kMaximumLimitBaseParams. + combine('pipelineType', kCreateComputePipelineTypes). + combine('axis', [0, 1, 2]) +). +fn(async (t) => { + const { limitTest, testValueName, pipelineType, axis } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const counts = [1, 1, 1]; + counts[axis] = testValue; - const buffer = device.createBuffer({ - size: 16, - usage: GPUBufferUsage.STORAGE, - }); + const buffer = device.createBuffer({ + size: 16, + usage: GPUBufferUsage.STORAGE + }); - const module = device.createShaderModule({ - code: ` + const module = device.createShaderModule({ + code: ` @compute @workgroup_size(1) fn main() { } - `, - }); + ` + }); - const pipeline = await createComputePipeline( - device, - { - layout: 'auto', - compute: { - module, - entryPoint: 'main', - }, - }, - pipelineType - ); + const pipeline = await createComputePipeline( + device, + { + layout: 'auto', + compute: { + module, + entryPoint: 'main' + } + }, + pipelineType + ); - const encoder = device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.dispatchWorkgroups(counts[0], counts[1], counts[2]); - pass.end(); + const encoder = device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.dispatchWorkgroups(counts[0], counts[1], counts[2]); + pass.end(); - await t.expectValidationError(() => { - encoder.finish(); - }, shouldError); + await t.expectValidationError(() => { + encoder.finish(); + }, shouldError); - buffer.destroy(); - } - ); - }); + buffer.destroy(); + } + ); +}); + +g.test('validate'). +desc( + `Test that ${limit} <= maxComputeWorkgroupSizeX x maxComputeWorkgroupSizeY x maxComputeWorkgroupSizeZ` +). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + const defaultMaxComputeWorkgroupSizeProduct = + t.getDefaultLimit('maxComputeWorkgroupSizeX') * + t.getDefaultLimit('maxComputeWorkgroupSizeY') * + t.getDefaultLimit('maxComputeWorkgroupSizeZ'); + const maxComputeWorkgroupSizeProduct = + adapter.limits.maxComputeWorkgroupSizeX * + adapter.limits.maxComputeWorkgroupSizeY * + adapter.limits.maxComputeWorkgroupSizeZ; + t.expect(defaultLimit <= defaultMaxComputeWorkgroupSizeProduct); + t.expect(adapterLimit <= maxComputeWorkgroupSizeProduct); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicStorageBuffersPerPipelineLayout.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicStorageBuffersPerPipelineLayout.spec.js index db8491c888c..ffd02e5905b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicStorageBuffersPerPipelineLayout.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicStorageBuffersPerPipelineLayout.spec.js @@ -1,40 +1,39 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range } from '../../../../../common/util/util.js'; -import { GPUConst } from '../../../../constants.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../../../../common/util/util.js';import { GPUConst } from '../../../../constants.js'; import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; const limit = 'maxDynamicStorageBuffersPerPipelineLayout'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBindGroupLayout,at_over') - .desc(`Test using createBindGroupLayout at and over ${limit} limit`) - .params( - kMaximumLimitBaseParams.combine('visibility', [ - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.FRAGMENT, - ]) +g.test('createBindGroupLayout,at_over'). +desc(`Test using createBindGroupLayout at and over ${limit} limit`). +params( + kMaximumLimitBaseParams.combine('visibility', [ + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.FRAGMENT] ) - .fn(async t => { - const { limitTest, testValueName, visibility } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - shouldError ||= testValue > t.device.limits.maxStorageBuffersPerShaderStage; - await t.expectValidationError(() => { - device.createBindGroupLayout({ - entries: range(testValue, i => ({ - binding: i, - visibility, - buffer: { - type: 'storage', - hasDynamicOffset: true, - }, - })), - }); - }, shouldError); - } - ); - }); +). +fn(async (t) => { + const { limitTest, testValueName, visibility } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + shouldError ||= testValue > t.device.limits.maxStorageBuffersPerShaderStage; + await t.expectValidationError(() => { + device.createBindGroupLayout({ + entries: range(testValue, (i) => ({ + binding: i, + visibility, + buffer: { + type: 'storage', + hasDynamicOffset: true + } + })) + }); + }, shouldError); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicUniformBuffersPerPipelineLayout.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicUniformBuffersPerPipelineLayout.spec.js index 546a3e1c955..dba8f547476 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicUniformBuffersPerPipelineLayout.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxDynamicUniformBuffersPerPipelineLayout.spec.js @@ -1,43 +1,42 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range } from '../../../../../common/util/util.js'; -import { GPUConst } from '../../../../constants.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../../../../common/util/util.js';import { GPUConst } from '../../../../constants.js'; import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; const limit = 'maxDynamicUniformBuffersPerPipelineLayout'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBindGroupLayout,at_over') - .desc(`Test using createBindGroupLayout at and over ${limit} limit`) - .params( - kMaximumLimitBaseParams.combine('visibility', [ - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, - ]) +g.test('createBindGroupLayout,at_over'). +desc(`Test using createBindGroupLayout at and over ${limit} limit`). +params( + kMaximumLimitBaseParams.combine('visibility', [ + GPUConst.ShaderStage.VERTEX, + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.VERTEX, + GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE | GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT] ) - .fn(async t => { - const { limitTest, testValueName, visibility } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - shouldError ||= testValue > t.device.limits.maxUniformBuffersPerShaderStage; - await t.expectValidationError(() => { - device.createBindGroupLayout({ - entries: range(testValue, i => ({ - binding: i, - visibility, - buffer: { - hasDynamicOffset: true, - }, - })), - }); - }, shouldError); - } - ); - }); +). +fn(async (t) => { + const { limitTest, testValueName, visibility } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + shouldError ||= testValue > t.device.limits.maxUniformBuffersPerShaderStage; + await t.expectValidationError(() => { + device.createBindGroupLayout({ + entries: range(testValue, (i) => ({ + binding: i, + visibility, + buffer: { + hasDynamicOffset: true + } + })) + }); + }, shouldError); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderComponents.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderComponents.spec.js index d156fc326c5..472630a7bf3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderComponents.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderComponents.spec.js @@ -1,41 +1,39 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, range } from '../../../../../common/util/util.js'; -import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../../../../common/util/util.js';import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; function getTypeForNumComponents(numComponents) { return numComponents > 1 ? `vec${numComponents}f` : 'f32'; } function getPipelineDescriptor( - device, - testValue, - pointList, - frontFacing, - sampleIndex, - sampleMaskIn, - sampleMaskOut -) { +device, +testValue, +pointList, +frontFacing, +sampleIndex, +sampleMaskIn, +sampleMaskOut) +{ const maxVertexShaderOutputComponents = testValue - (pointList ? 1 : 0); const maxFragmentShaderInputComponents = - testValue - (frontFacing ? 1 : 0) - (sampleIndex ? 1 : 0) - (sampleMaskIn ? 1 : 0); + testValue - (frontFacing ? 1 : 0) - (sampleIndex ? 1 : 0) - (sampleMaskIn ? 1 : 0); const maxInterStageVariables = device.limits.maxInterStageShaderVariables; const numComponents = Math.min(maxVertexShaderOutputComponents, maxFragmentShaderInputComponents); - assert(Math.ceil(numComponents / 4) <= maxInterStageVariables); const num4ComponentVaryings = Math.floor(numComponents / 4); const lastVaryingNumComponents = numComponents % 4; const varyings = ` - ${range(num4ComponentVaryings, i => `@location(${i}) v4_${i}: vec4f,`).join('\n')} + ${range(num4ComponentVaryings, (i) => `@location(${i}) v4_${i}: vec4f,`).join('\n')} ${ - lastVaryingNumComponents > 0 - ? `@location(${num4ComponentVaryings}) vx: ${getTypeForNumComponents( - lastVaryingNumComponents - )},` - : `` - } + lastVaryingNumComponents > 0 ? + `@location(${num4ComponentVaryings}) vx: ${getTypeForNumComponents( + lastVaryingNumComponents + )},` : + `` + } `; const code = ` @@ -43,7 +41,7 @@ function getPipelineDescriptor( // maxInterStageShaderComponents : ${device.limits.maxInterStageShaderComponents} // num components in vertex shader : ${numComponents}${pointList ? ' + point-list' : ''} // num components in fragment shader : ${numComponents}${frontFacing ? ' + front-facing' : ''}${ - sampleIndex ? ' + sample_index' : '' + sampleIndex ? ' + sample_index' : '' }${sampleMaskIn ? ' + sample_mask' : ''} // maxVertexShaderOutputComponents : ${maxVertexShaderOutputComponents} // maxFragmentShaderInputComponents : ${maxFragmentShaderInputComponents} @@ -79,21 +77,21 @@ function getPipelineDescriptor( const pipelineDescriptor = { layout: 'auto', primitive: { - topology: pointList ? 'point-list' : 'triangle-list', + topology: pointList ? 'point-list' : 'triangle-list' }, vertex: { module, - entryPoint: 'vs', + entryPoint: 'vs' }, fragment: { module, entryPoint: 'fs', targets: [ - { - format: 'rgba8unorm', - }, - ], - }, + { + format: 'rgba8unorm' + }] + + } }; return { pipelineDescriptor, code }; } @@ -101,48 +99,53 @@ function getPipelineDescriptor( const limit = 'maxInterStageShaderComponents'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('pointList', [false, true]) - .combine('frontFacing', [false, true]) - .combine('sampleIndex', [false, true]) - .combine('sampleMaskIn', [false, true]) - .combine('sampleMaskOut', [false, true]) - ) - .beforeAllSubcases(t => { - if (t.isCompatibility && (t.params.sampleMaskIn || t.params.sampleMaskOut)) { - t.skip('sample_mask not supported in compatibility mode'); - } - }) - .fn(async t => { - const { - limitTest, - testValueName, - async, - pointList, - frontFacing, - sampleIndex, - sampleMaskIn, - sampleMaskOut, - } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const { pipelineDescriptor, code } = getPipelineDescriptor( - device, - testValue, - pointList, - frontFacing, - sampleIndex, - sampleMaskIn, - sampleMaskOut - ); +g.test('createRenderPipeline,at_over'). +desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('pointList', [false, true]). + combine('frontFacing', [false, true]). + combine('sampleIndex', [false, true]). + combine('sampleMaskIn', [false, true]). + combine('sampleMaskOut', [false, true]) +). +beforeAllSubcases((t) => { + if (t.isCompatibility && (t.params.sampleMaskIn || t.params.sampleMaskOut)) { + t.skip('sample_mask not supported in compatibility mode'); + } +}). +fn(async (t) => { + const { + limitTest, + testValueName, + async, + pointList, + frontFacing, + sampleIndex, + sampleMaskIn, + sampleMaskOut + } = t.params; + // Request the largest value of maxInterStageShaderVariables to allow the test using as many + // inter-stage shader components as possible without being limited by + // maxInterStageShaderVariables. + const extraLimits = { maxInterStageShaderVariables: 'adapterLimit' }; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const { pipelineDescriptor, code } = getPipelineDescriptor( + device, + testValue, + pointList, + frontFacing, + sampleIndex, + sampleMaskIn, + sampleMaskOut + ); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError, code); - } - ); - }); + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError, code); + }, + extraLimits + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderVariables.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderVariables.spec.js index ccba23d513b..3fe1b4108d8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderVariables.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxInterStageShaderVariables.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -function getPipelineDescriptor(device, testValue) { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';function getPipelineDescriptor(device, testValue) { const code = ` struct VSOut { @builtin(position) p: vec4f, @@ -19,27 +18,27 @@ function getPipelineDescriptor(device, testValue) { layout: 'auto', vertex: { module, - entryPoint: 'vs', - }, + entryPoint: 'vs' + } }; } const limit = 'maxInterStageShaderVariables'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const lastIndex = testValue - 1; - const pipelineDescriptor = getPipelineDescriptor(device, lastIndex); +g.test('createRenderPipeline,at_over'). +desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const lastIndex = testValue - 1; + const pipelineDescriptor = getPipelineDescriptor(device, lastIndex); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); - } - ); - }); + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSampledTexturesPerShaderStage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSampledTexturesPerShaderStage.spec.js index 24c19427989..07d19ad5963 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSampledTexturesPerShaderStage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSampledTexturesPerShaderStage.spec.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range, reorder, kReorderOrderKeys } from '../../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range, reorder, + kReorderOrderKeys } from + +'../../../../../common/util/util.js'; import { kShaderStageCombinationsWithStage } from '../../../../capability_info.js'; import { @@ -9,129 +12,133 @@ import { kBindGroupTests, kBindingCombinations, getPipelineTypeForBindingCombination, - getPerStageWGSLForBindingCombination, -} from './limit_utils.js'; + getPerStageWGSLForBindingCombination } from +'./limit_utils.js'; const limit = 'maxSampledTexturesPerShaderStage'; export const { g, description } = makeLimitTestGroup(limit); -function createBindGroupLayout(device, visibility, order, numBindings) { +function createBindGroupLayout( +device, +visibility, +order, +numBindings) +{ return device.createBindGroupLayout({ entries: reorder( order, - range(numBindings, i => ({ + range(numBindings, (i) => ({ binding: i, visibility, - texture: {}, + texture: {} })) - ), + ) }); } -g.test('createBindGroupLayout,at_over') - .desc( - ` +g.test('createBindGroupLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createBindGroupLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', kShaderStageCombinationsWithStage) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError( - () => createBindGroupLayout(device, visibility, order, testValue), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', kShaderStageCombinationsWithStage). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError( + () => createBindGroupLayout(device, visibility, order, testValue), + shouldError + ); + } + ); +}); -g.test('createPipelineLayout,at_over') - .desc( - ` +g.test('createPipelineLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createPipelineLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', kShaderStageCombinationsWithStage) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const kNumGroups = 3; - const bindGroupLayouts = range(kNumGroups, i => { - const minInGroup = Math.floor(testValue / kNumGroups); - const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); - return createBindGroupLayout(device, visibility, order, numInGroup); - }); - await t.expectValidationError( - () => device.createPipelineLayout({ bindGroupLayouts }), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', kShaderStageCombinationsWithStage). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const kNumGroups = 3; + const bindGroupLayouts = range(kNumGroups, (i) => { + const minInGroup = Math.floor(testValue / kNumGroups); + const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); + return createBindGroupLayout(device, visibility, order, numInGroup); + }); + await t.expectValidationError( + () => device.createPipelineLayout({ bindGroupLayouts }), + shouldError + ); + } + ); +}); -g.test('createPipeline,at_over') - .desc( - ` +g.test('createPipeline,at_over'). +desc( + ` Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('bindingCombination', kBindingCombinations) - .combine('order', kReorderOrderKeys) - .combine('bindGroupTest', kBindGroupTests) - ) - .fn(async t => { - const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; - const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); +). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('bindingCombination', kBindingCombinations). + combine('order', kReorderOrderKeys). + combine('bindGroupTest', kBindGroupTests) +). +fn(async (t) => { + const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; + const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const code = getPerStageWGSLForBindingCombination( - bindingCombination, - order, - bindGroupTest, - (i, j) => `var u${j}_${i}: texture_2d`, - (i, j) => `_ = textureLoad(u${j}_${i}, vec2u(0), 0);`, - testValue - ); + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const code = getPerStageWGSLForBindingCombination( + bindingCombination, + order, + bindGroupTest, + (i, j) => `var u${j}_${i}: texture_2d`, + (i, j) => `_ = textureLoad(u${j}_${i}, vec2u(0), 0);`, + testValue + ); + const module = device.createShaderModule({ code }); - const module = device.createShaderModule({ code }); - - await t.testCreatePipeline( - pipelineType, - async, - module, - shouldError, - `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` - ); - } - ); - }); + await t.testCreatePipeline( + pipelineType, + async, + module, + shouldError, + `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSamplersPerShaderStage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSamplersPerShaderStage.spec.js index cc53aff55ab..c3bd3428ce9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSamplersPerShaderStage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxSamplersPerShaderStage.spec.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range, reorder, kReorderOrderKeys } from '../../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range, reorder, + kReorderOrderKeys } from + +'../../../../../common/util/util.js'; import { kShaderStageCombinationsWithStage } from '../../../../capability_info.js'; import { @@ -9,130 +12,134 @@ import { kBindGroupTests, kBindingCombinations, getPipelineTypeForBindingCombination, - getPerStageWGSLForBindingCombination, -} from './limit_utils.js'; + getPerStageWGSLForBindingCombination } from +'./limit_utils.js'; const limit = 'maxSamplersPerShaderStage'; export const { g, description } = makeLimitTestGroup(limit); -function createBindGroupLayout(device, visibility, order, numBindings) { +function createBindGroupLayout( +device, +visibility, +order, +numBindings) +{ return device.createBindGroupLayout({ entries: reorder( order, - range(numBindings, i => ({ + range(numBindings, (i) => ({ binding: i, visibility, - sampler: {}, + sampler: {} })) - ), + ) }); } -g.test('createBindGroupLayout,at_over') - .desc( - ` +g.test('createBindGroupLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createBindGroupLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', kShaderStageCombinationsWithStage) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError( - () => createBindGroupLayout(device, visibility, order, testValue), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', kShaderStageCombinationsWithStage). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError( + () => createBindGroupLayout(device, visibility, order, testValue), + shouldError + ); + } + ); +}); -g.test('createPipelineLayout,at_over') - .desc( - ` +g.test('createPipelineLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createPipelineLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', kShaderStageCombinationsWithStage) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const kNumGroups = 3; - const bindGroupLayouts = range(kNumGroups, i => { - const minInGroup = Math.floor(testValue / kNumGroups); - const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); - return createBindGroupLayout(device, visibility, order, numInGroup); - }); - await t.expectValidationError( - () => device.createPipelineLayout({ bindGroupLayouts }), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', kShaderStageCombinationsWithStage). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const kNumGroups = 3; + const bindGroupLayouts = range(kNumGroups, (i) => { + const minInGroup = Math.floor(testValue / kNumGroups); + const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); + return createBindGroupLayout(device, visibility, order, numInGroup); + }); + await t.expectValidationError( + () => device.createPipelineLayout({ bindGroupLayouts }), + shouldError + ); + } + ); +}); -g.test('createPipeline,at_over') - .desc( - ` +g.test('createPipeline,at_over'). +desc( + ` Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('bindingCombination', kBindingCombinations) - .combine('order', kReorderOrderKeys) - .combine('bindGroupTest', kBindGroupTests) - ) - .fn(async t => { - const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; - const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); +). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('bindingCombination', kBindingCombinations). + combine('order', kReorderOrderKeys). + combine('bindGroupTest', kBindGroupTests) +). +fn(async (t) => { + const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; + const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const code = getPerStageWGSLForBindingCombination( - bindingCombination, - order, - bindGroupTest, - (i, j) => `var u${j}_${i}: sampler`, - (i, j) => `_ = textureGather(0, tex, u${j}_${i}, vec2f(0));`, - testValue, - '@group(3) @binding(1) var tex: texture_2d;' - ); + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const code = getPerStageWGSLForBindingCombination( + bindingCombination, + order, + bindGroupTest, + (i, j) => `var u${j}_${i}: sampler`, + (i, j) => `_ = textureGather(0, tex, u${j}_${i}, vec2f(0));`, + testValue, + '@group(3) @binding(1) var tex: texture_2d;' + ); + const module = device.createShaderModule({ code }); - const module = device.createShaderModule({ code }); - - await t.testCreatePipeline( - pipelineType, - async, - module, - shouldError, - `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` - ); - } - ); - }); + await t.testCreatePipeline( + pipelineType, + async, + module, + shouldError, + `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBufferBindingSize.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBufferBindingSize.spec.js index b49ba5747c3..93052a8d725 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBufferBindingSize.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBufferBindingSize.spec.js @@ -1,10 +1,16 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { align, roundDown } from '../../../../util/math.js'; -import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { align, roundDown } from '../../../../util/math.js';import { + kMaximumLimitBaseParams, + makeLimitTestGroup } from + + + +'./limit_utils.js'; const kBufferParts = ['wholeBuffer', 'biggerBufferWithOffset']; + function getSizeAndOffsetForBufferPart(device, bufferPart, size) { const align = device.limits.minUniformBufferOffsetAlignment; switch (bufferPart) { @@ -20,7 +26,11 @@ const kStorageBufferRequiredSizeAlignment = 4; // We also need to update the maxBufferSize limit when testing. const kExtraLimits = { maxBufferSize: 'maxLimit' }; -function getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit) { +function getDeviceLimitToRequest( +limitValueTest, +defaultLimit, +maximumLimit) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; @@ -49,96 +59,103 @@ function getTestValue(testValueName, requestedLimit) { } function getDeviceLimitToRequestAndValueToTest( - limitValueTest, - testValueName, - defaultLimit, - maximumLimit -) { +limitValueTest, +testValueName, +defaultLimit, +maximumLimit) +{ const requestedLimit = getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit); return { requestedLimit, - testValue: getTestValue(testValueName, requestedLimit), + testValue: getTestValue(testValueName, requestedLimit) }; } const limit = 'maxStorageBufferBindingSize'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBindGroup,at_over') - .desc(`Test using createBindGroup at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('bufferPart', kBufferParts)) - .fn(async t => { - const { limitTest, testValueName, bufferPart } = t.params; - const { defaultLimit, adapterLimit: maximumLimit } = t; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - maximumLimit - ); +g.test('createBindGroup,at_over'). +desc(`Test using createBindGroup at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('bufferPart', kBufferParts)). +fn(async (t) => { + const { limitTest, testValueName, bufferPart } = t.params; + const { defaultLimit, adapterLimit: maximumLimit } = t; + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + maximumLimit + ); - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, shouldError }) => { - const bindGroupLayout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'storage' }, - }, - ], - }); + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, shouldError }) => { + const bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'storage' } + }] - const { size, offset } = getSizeAndOffsetForBufferPart(device, bufferPart, testValue); + }); - // If the size of the buffer exceeds the related but separate maxBufferSize limit, we can - // skip the validation since the allocation will fail with a validation error. - if (size > device.limits.maxBufferSize) { - return; - } + const { size, offset } = getSizeAndOffsetForBufferPart(device, bufferPart, testValue); - device.pushErrorScope('out-of-memory'); - const storageBuffer = t.trackForCleanup( - device.createBuffer({ - usage: GPUBufferUsage.STORAGE, - size, - }) + // If the size of the buffer exceeds the related but separate maxBufferSize limit, we can + // skip the validation since the allocation will fail with a validation error. + if (size > device.limits.maxBufferSize) { + return; + } + + device.pushErrorScope('out-of-memory'); + const storageBuffer = t.trackForCleanup( + device.createBuffer({ + usage: GPUBufferUsage.STORAGE, + size + }) + ); + const outOfMemoryError = await device.popErrorScope(); + + if (!outOfMemoryError) { + await t.expectValidationError( + () => { + device.createBindGroup({ + layout: bindGroupLayout, + entries: [ + { + binding: 0, + resource: { + buffer: storageBuffer, + offset, + size: testValue + } + }] + + }); + }, + shouldError, + `size: ${size}, offset: ${offset}, testValue: ${testValue}` ); + } + }, + kExtraLimits + ); +}); - const outOfMemoryError = await device.popErrorScope(); +g.test('validate'). +desc(`Test that ${limit} is a multiple of 4 bytes`). +fn((t) => { + const { defaultLimit, adapterLimit } = t; + t.expect(defaultLimit % 4 === 0); + t.expect(adapterLimit % 4 === 0); +}); - if (!outOfMemoryError) { - await t.expectValidationError( - () => { - device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: { - buffer: storageBuffer, - offset, - size: testValue, - }, - }, - ], - }); - }, - shouldError, - `size: ${size}, offset: ${offset}, testValue: ${testValue}` - ); - } - }, - kExtraLimits - ); - }); - -g.test('validate,maxBufferSize') - .desc(`Test that ${limit} <= maxBufferSize`) - .fn(t => { - const { adapter, defaultLimit, adapterLimit } = t; - t.expect(defaultLimit <= t.getDefaultLimit('maxBufferSize')); - t.expect(adapterLimit <= adapter.limits.maxBufferSize); - }); +g.test('validate,maxBufferSize'). +desc(`Test that ${limit} <= maxBufferSize`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxBufferSize')); + t.expect(adapterLimit <= adapter.limits.maxBufferSize); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBuffersPerShaderStage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBuffersPerShaderStage.spec.js index 866b920f83a..1c09dcfcfd8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBuffersPerShaderStage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageBuffersPerShaderStage.spec.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range, reorder, kReorderOrderKeys } from '../../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range, reorder, + kReorderOrderKeys } from + +'../../../../../common/util/util.js'; import { GPUConst } from '../../../../constants.js'; import { @@ -9,158 +12,163 @@ import { kBindGroupTests, kBindingCombinations, getPipelineTypeForBindingCombination, - getPerStageWGSLForBindingCombination, -} from './limit_utils.js'; + getPerStageWGSLForBindingCombination } from +'./limit_utils.js'; const limit = 'maxStorageBuffersPerShaderStage'; export const { g, description } = makeLimitTestGroup(limit); -function createBindGroupLayout(device, visibility, type, order, numBindings) { +function createBindGroupLayout( +device, +visibility, +type, +order, +numBindings) +{ return device.createBindGroupLayout({ entries: reorder( order, - range(numBindings, i => ({ + range(numBindings, (i) => ({ binding: i, visibility, - buffer: { type }, + buffer: { type } })) - ), + ) }); } -g.test('createBindGroupLayout,at_over') - .desc( - ` +g.test('createBindGroupLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createBindGroupLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', [ - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, - ]) - .combine('type', ['storage', 'read-only-storage']) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order, type } = t.params; +). +params( + kMaximumLimitBaseParams. + combine('visibility', [ + GPUConst.ShaderStage.VERTEX, + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE] + ). + combine('type', ['storage', 'read-only-storage']). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order, type } = t.params; - if (visibility & GPUConst.ShaderStage.VERTEX && type === 'storage') { - // vertex stage does not support storage buffers - return; + if (visibility & GPUConst.ShaderStage.VERTEX && type === 'storage') { + // vertex stage does not support storage buffers + return; + } + + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError(() => { + createBindGroupLayout(device, visibility, type, order, testValue); + }, shouldError); } + ); +}); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError(() => { - createBindGroupLayout(device, visibility, type, order, testValue); - }, shouldError); - } - ); - }); - -g.test('createPipelineLayout,at_over') - .desc( - ` +g.test('createPipelineLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createPipelineLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', [ - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, - ]) - .combine('type', ['storage', 'read-only-storage']) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order, type } = t.params; +). +params( + kMaximumLimitBaseParams. + combine('visibility', [ + GPUConst.ShaderStage.VERTEX, + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE] + ). + combine('type', ['storage', 'read-only-storage']). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order, type } = t.params; - if (visibility & GPUConst.ShaderStage.VERTEX && type === 'storage') { - // vertex stage does not support storage buffers - return; + if (visibility & GPUConst.ShaderStage.VERTEX && type === 'storage') { + // vertex stage does not support storage buffers + return; + } + + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const kNumGroups = 3; + const bindGroupLayouts = range(kNumGroups, (i) => { + const minInGroup = Math.floor(testValue / kNumGroups); + const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); + return createBindGroupLayout(device, visibility, type, order, numInGroup); + }); + await t.expectValidationError( + () => device.createPipelineLayout({ bindGroupLayouts }), + shouldError + ); } + ); +}); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const kNumGroups = 3; - const bindGroupLayouts = range(kNumGroups, i => { - const minInGroup = Math.floor(testValue / kNumGroups); - const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); - return createBindGroupLayout(device, visibility, type, order, numInGroup); - }); - await t.expectValidationError( - () => device.createPipelineLayout({ bindGroupLayouts }), - shouldError - ); - } - ); - }); - -g.test('createPipeline,at_over') - .desc( - ` +g.test('createPipeline,at_over'). +desc( + ` Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('bindingCombination', kBindingCombinations) - .combine('order', kReorderOrderKeys) - .combine('bindGroupTest', kBindGroupTests) - ) - .fn(async t => { - const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; - const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); +). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('bindingCombination', kBindingCombinations). + combine('order', kReorderOrderKeys). + combine('bindGroupTest', kBindGroupTests) +). +fn(async (t) => { + const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; + const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const code = getPerStageWGSLForBindingCombination( - bindingCombination, - order, - bindGroupTest, - (i, j) => `var u${j}_${i}: f32`, - (i, j) => `_ = u${j}_${i};`, - testValue - ); + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const code = getPerStageWGSLForBindingCombination( + bindingCombination, + order, + bindGroupTest, + (i, j) => `var u${j}_${i}: f32`, + (i, j) => `_ = u${j}_${i};`, + testValue + ); + const module = device.createShaderModule({ code }); - const module = device.createShaderModule({ code }); - - await t.testCreatePipeline( - pipelineType, - async, - module, - shouldError, - `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` - ); - } - ); - }); + await t.testCreatePipeline( + pipelineType, + async, + module, + shouldError, + `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageTexturesPerShaderStage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageTexturesPerShaderStage.spec.js index c3bef558630..5005ae35fe0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageTexturesPerShaderStage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxStorageTexturesPerShaderStage.spec.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range, reorder, kReorderOrderKeys } from '../../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range, reorder, + + kReorderOrderKeys } from +'../../../../../common/util/util.js'; import { GPUConst } from '../../../../constants.js'; import { @@ -8,141 +11,146 @@ import { makeLimitTestGroup, kBindGroupTests, getPerStageWGSLForBindingCombinationStorageTextures, - getPipelineTypeForBindingCombination, -} from './limit_utils.js'; + getPipelineTypeForBindingCombination } from + +'./limit_utils.js'; const limit = 'maxStorageTexturesPerShaderStage'; export const { g, description } = makeLimitTestGroup(limit); -function createBindGroupLayout(device, visibility, order, numBindings) { +function createBindGroupLayout( +device, +visibility, +order, +numBindings) +{ return device.createBindGroupLayout({ entries: reorder( order, - range(numBindings, i => ({ + range(numBindings, (i) => ({ binding: i, visibility, - storageTexture: { format: 'rgba8unorm' }, + storageTexture: { format: 'rgba8unorm' } })) - ), + ) }); } -g.test('createBindGroupLayout,at_over') - .desc( - ` +g.test('createBindGroupLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createBindGroupLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', [ - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, - ]) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError( - () => createBindGroupLayout(device, visibility, order, testValue), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', [ + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE] + ). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError( + () => createBindGroupLayout(device, visibility, order, testValue), + shouldError + ); + } + ); +}); -g.test('createPipelineLayout,at_over') - .desc( - ` +g.test('createPipelineLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createPipelineLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', [ - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, - ]) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const kNumGroups = 3; - const bindGroupLayouts = range(kNumGroups, i => { - const minInGroup = Math.floor(testValue / kNumGroups); - const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); - return createBindGroupLayout(device, visibility, order, numInGroup); - }); - await t.expectValidationError( - () => device.createPipelineLayout({ bindGroupLayouts }), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', [ + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE] + ). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const kNumGroups = 3; + const bindGroupLayouts = range(kNumGroups, (i) => { + const minInGroup = Math.floor(testValue / kNumGroups); + const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); + return createBindGroupLayout(device, visibility, order, numInGroup); + }); + await t.expectValidationError( + () => device.createPipelineLayout({ bindGroupLayouts }), + shouldError + ); + } + ); +}); -g.test('createPipeline,at_over') - .desc( - ` +g.test('createPipeline,at_over'). +desc( + ` Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('bindingCombination', ['fragment', 'compute']) - .combine('order', kReorderOrderKeys) - .combine('bindGroupTest', kBindGroupTests) - ) - .fn(async t => { - const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; - const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); +). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('bindingCombination', ['fragment', 'compute']). + combine('order', kReorderOrderKeys). + combine('bindGroupTest', kBindGroupTests) +). +fn(async (t) => { + const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; + const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - if (bindingCombination === 'fragment') { - return; - } - - const code = getPerStageWGSLForBindingCombinationStorageTextures( - bindingCombination, - order, - bindGroupTest, - (i, j) => `var u${j}_${i}: texture_storage_2d`, - (i, j) => `textureStore(u${j}_${i}, vec2u(0), vec4f(1));`, - testValue - ); - - const module = device.createShaderModule({ code }); - - await t.testCreatePipeline( - pipelineType, - async, - module, - shouldError, - `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` - ); + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + if (bindingCombination === 'fragment') { + return; } - ); - }); + + const code = getPerStageWGSLForBindingCombinationStorageTextures( + bindingCombination, + order, + bindGroupTest, + (i, j) => `var u${j}_${i}: texture_storage_2d`, + (i, j) => `textureStore(u${j}_${i}, vec2u(0), vec4f(1));`, + testValue + ); + const module = device.createShaderModule({ code }); + + await t.testCreatePipeline( + pipelineType, + async, + module, + shouldError, + `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureArrayLayers.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureArrayLayers.spec.js index 4ec58b16600..7a9cc1e2308 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureArrayLayers.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureArrayLayers.spec.js @@ -1,28 +1,27 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxTextureArrayLayers'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxTextureArrayLayers'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createTexture,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.testForValidationErrorWithPossibleOutOfMemoryError(() => { - const texture = device.createTexture({ - size: [1, 1, testValue], - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, - }); - if (!shouldError) { - texture.destroy(); - } - }, shouldError); - } - ); - }); +g.test('createTexture,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.testForValidationErrorWithPossibleOutOfMemoryError(() => { + const texture = device.createTexture({ + size: [1, 1, testValue], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING + }); + if (!shouldError) { + texture.destroy(); + } + }, shouldError); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension1D.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension1D.spec.js index a7f6ab02713..3d4608dde35 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension1D.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension1D.spec.js @@ -1,35 +1,34 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxTextureDimension1D'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxTextureDimension1D'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createTexture,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.testForValidationErrorWithPossibleOutOfMemoryError(() => { - const texture = device.createTexture({ - size: [testValue, 1, 1], - format: 'rgba8unorm', - dimension: '1d', - usage: GPUTextureUsage.TEXTURE_BINDING, - }); +g.test('createTexture,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.testForValidationErrorWithPossibleOutOfMemoryError(() => { + const texture = device.createTexture({ + size: [testValue, 1, 1], + format: 'rgba8unorm', + dimension: '1d', + usage: GPUTextureUsage.TEXTURE_BINDING + }); - // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed - // This 'if' is only here because of a bug in Chrome - // that generates an error calling destroy on an invalid texture. - // This doesn't affect the test but the 'if' should be removed - // once the Chrome bug is fixed. - if (!shouldError) { - texture.destroy(); - } - }, shouldError); - } - ); - }); + // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed + // This 'if' is only here because of a bug in Chrome + // that generates an error calling destroy on an invalid texture. + // This doesn't affect the test but the 'if' should be removed + // once the Chrome bug is fixed. + if (!shouldError) { + texture.destroy(); + } + }, shouldError); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension2D.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension2D.spec.js index 69313ca15df..5f3b3a4def2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension2D.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension2D.spec.js @@ -1,76 +1,126 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { getGPU } from '../../../../../common/util/navigator_gpu.js'; -import { kAllCanvasTypes, createCanvas } from '../../../../util/create_elements.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { getGPU } from '../../../../../common/util/navigator_gpu.js';import { kAllCanvasTypes, createCanvas } from '../../../../util/create_elements.js'; import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; const limit = 'maxTextureDimension2D'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createTexture,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, shouldError, testValue, actualLimit }) => { - for (let dimensionIndex = 0; dimensionIndex < 2; ++dimensionIndex) { - const size = [1, 1, 1]; - size[dimensionIndex] = testValue; +g.test('createTexture,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, shouldError, testValue, actualLimit }) => { + for (let dimensionIndex = 0; dimensionIndex < 2; ++dimensionIndex) { + const size = [1, 1, 1]; + size[dimensionIndex] = testValue; + + await t.testForValidationErrorWithPossibleOutOfMemoryError( + () => { + const texture = device.createTexture({ + size, + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING + }); + + // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed + // This 'if' is only here because of a bug in Chrome + // that generates an error calling destroy on an invalid texture. + // This doesn't affect the test but the 'if' should be removed + // once the Chrome bug is fixed. + if (!shouldError) { + texture.destroy(); + } + }, + shouldError, + `size: ${size}, actualLimit: ${actualLimit}` + ); + } + } + ); +}); + +g.test('configure,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('canvasType', kAllCanvasTypes)). +fn(async (t) => { + const { limitTest, testValueName, canvasType } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, shouldError, testValue, actualLimit }) => { + for (let dimensionIndex = 0; dimensionIndex < 2; ++dimensionIndex) { + const size = [1, 1]; + size[dimensionIndex] = testValue; + + // This should not fail, even if the size is too large but it might fail + // if we're in a worker and HTMLCanvasElement does not exist. + const canvas = createCanvas(t, canvasType, size[0], size[1]); + if (canvas) { + const context = canvas.getContext('webgpu'); + t.expect(!!context, 'should not fail to create context even if size is too large'); await t.testForValidationErrorWithPossibleOutOfMemoryError( () => { - const texture = device.createTexture({ - size, - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, + context.configure({ + device, + format: getGPU(t.rec).getPreferredCanvasFormat() }); - - // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed - // This 'if' is only here because of a bug in Chrome - // that generates an error calling destroy on an invalid texture. - // This doesn't affect the test but the 'if' should be removed - // once the Chrome bug is fixed. - if (!shouldError) { - texture.destroy(); - } }, shouldError, `size: ${size}, actualLimit: ${actualLimit}` ); } } - ); - }); + } + ); +}); -g.test('configure,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('canvasType', kAllCanvasTypes)) - .fn(async t => { - const { limitTest, testValueName, canvasType } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, shouldError, testValue, actualLimit }) => { - for (let dimensionIndex = 0; dimensionIndex < 2; ++dimensionIndex) { - const size = [1, 1]; - size[dimensionIndex] = testValue; +g.test('getCurrentTexture,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('canvasType', kAllCanvasTypes)). +fn(async (t) => { + const { limitTest, testValueName, canvasType } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, shouldError, testValue, actualLimit }) => { + for (let dimensionIndex = 0; dimensionIndex < 2; ++dimensionIndex) { + const size = [1, 1]; + size[dimensionIndex] = testValue; + + // Start with a small size so configure will succeed. + // This should not fail, even if the size is too large but it might fail + // if we're in a worker and HTMLCanvasElement does not exist. + const canvas = createCanvas(t, canvasType, 1, 1); + if (canvas) { + const context = canvas.getContext('webgpu'); + t.expect(!!context, 'should not fail to create context even if size is too large'); + + context.configure({ + device, + format: getGPU(t.rec).getPreferredCanvasFormat() + }); - // This should not fail, even if the size is too large but it might fail - // if we're in a worker and HTMLCanvasElement does not exist. - const canvas = createCanvas(t, canvasType, size[0], size[1]); if (canvas) { - const context = canvas.getContext('webgpu'); - t.expect(!!context, 'should not fail to create context even if size is too large'); - await t.testForValidationErrorWithPossibleOutOfMemoryError( () => { - context.configure({ - device, - format: getGPU(t.rec).getPreferredCanvasFormat(), - }); + canvas.width = size[0]; + canvas.height = size[1]; + const texture = context.getCurrentTexture(); + + // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed + // This 'if' is only here because of a bug in Chrome + // that generates an error calling destroy on an invalid texture. + // This doesn't affect the test but the 'if' should be removed + // once the Chrome bug is fixed. + if (!shouldError) { + texture.destroy(); + } }, shouldError, `size: ${size}, actualLimit: ${actualLimit}` @@ -78,57 +128,6 @@ g.test('configure,at_over') } } } - ); - }); - -g.test('getCurrentTexture,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('canvasType', kAllCanvasTypes)) - .fn(async t => { - const { limitTest, testValueName, canvasType } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, shouldError, testValue, actualLimit }) => { - for (let dimensionIndex = 0; dimensionIndex < 2; ++dimensionIndex) { - const size = [1, 1]; - size[dimensionIndex] = testValue; - - // Start with a small size so configure will succeed. - // This should not fail, even if the size is too large but it might fail - // if we're in a worker and HTMLCanvasElement does not exist. - const canvas = createCanvas(t, canvasType, 1, 1); - if (canvas) { - const context = canvas.getContext('webgpu'); - t.expect(!!context, 'should not fail to create context even if size is too large'); - - context.configure({ - device, - format: getGPU(t.rec).getPreferredCanvasFormat(), - }); - - if (canvas) { - await t.testForValidationErrorWithPossibleOutOfMemoryError( - () => { - canvas.width = size[0]; - canvas.height = size[1]; - const texture = context.getCurrentTexture(); - - // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed - // This 'if' is only here because of a bug in Chrome - // that generates an error calling destroy on an invalid texture. - // This doesn't affect the test but the 'if' should be removed - // once the Chrome bug is fixed. - if (!shouldError) { - texture.destroy(); - } - }, - shouldError, - `size: ${size}, actualLimit: ${actualLimit}` - ); - } - } - } - } - ); - }); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension3D.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension3D.spec.js index fa3f13ddf3a..74108cc85ed 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension3D.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxTextureDimension3D.spec.js @@ -1,40 +1,39 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const limit = 'maxTextureDimension3D'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const limit = 'maxTextureDimension3D'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createTexture,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, shouldError, testValue }) => { - for (let dimensionIndex = 0; dimensionIndex < 3; ++dimensionIndex) { - const size = [2, 2, 2]; - size[dimensionIndex] = testValue; +g.test('createTexture,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, shouldError, testValue }) => { + for (let dimensionIndex = 0; dimensionIndex < 3; ++dimensionIndex) { + const size = [2, 2, 2]; + size[dimensionIndex] = testValue; - await t.testForValidationErrorWithPossibleOutOfMemoryError(() => { - const texture = device.createTexture({ - size, - format: 'rgba8unorm', - dimension: '3d', - usage: GPUTextureUsage.TEXTURE_BINDING, - }); + await t.testForValidationErrorWithPossibleOutOfMemoryError(() => { + const texture = device.createTexture({ + size, + format: 'rgba8unorm', + dimension: '3d', + usage: GPUTextureUsage.TEXTURE_BINDING + }); - // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed - // This 'if' is only here because of a bug in Chrome - // that generates an error calling destroy on an invalid texture. - // This doesn't affect the test but the 'if' should be removed - // once the Chrome bug is fixed. - if (!shouldError) { - texture.destroy(); - } - }, shouldError); - } + // MAINTENANCE_TODO: Remove this 'if' once the bug in chrome is fixed + // This 'if' is only here because of a bug in Chrome + // that generates an error calling destroy on an invalid texture. + // This doesn't affect the test but the 'if' should be removed + // once the Chrome bug is fixed. + if (!shouldError) { + texture.destroy(); + } + }, shouldError); } - ); - }); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBufferBindingSize.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBufferBindingSize.spec.js index f8c2bfe9871..40b22ed60bb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBufferBindingSize.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBufferBindingSize.spec.js @@ -1,7 +1,7 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -const kBufferParts = ['wholeBuffer', 'biggerBufferWithOffset']; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';const kBufferParts = ['wholeBuffer', 'biggerBufferWithOffset']; + function getSizeAndOffsetForBufferPart(device, bufferPart, size) { const align = device.limits.minUniformBufferOffsetAlignment; @@ -19,73 +19,72 @@ export const { g, description } = makeLimitTestGroup(limit); // We also need to update the maxBufferSize limit when testing. const kExtraLimits = { maxBufferSize: 'maxLimit' }; -g.test('createBindGroup,at_over') - .desc(`Test using at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('bufferPart', kBufferParts)) - .fn(async t => { - const { limitTest, testValueName, bufferPart } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const bindGroupLayout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }); +g.test('createBindGroup,at_over'). +desc(`Test using at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('bufferPart', kBufferParts)). +fn(async (t) => { + const { limitTest, testValueName, bufferPart } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const bindGroupLayout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.VERTEX, + buffer: {} + }] - const { size, offset } = getSizeAndOffsetForBufferPart(device, bufferPart, testValue); + }); - // If the size of the buffer exceeds the related but separate maxBufferSize limit, we can - // skip the validation since the allocation will fail with a validation error. - if (size > device.limits.maxBufferSize) { - return; - } + const { size, offset } = getSizeAndOffsetForBufferPart(device, bufferPart, testValue); - device.pushErrorScope('out-of-memory'); - const uniformBuffer = t.trackForCleanup( - device.createBuffer({ - usage: GPUBufferUsage.UNIFORM, - size, - }) + // If the size of the buffer exceeds the related but separate maxBufferSize limit, we can + // skip the validation since the allocation will fail with a validation error. + if (size > device.limits.maxBufferSize) { + return; + } + + device.pushErrorScope('out-of-memory'); + const uniformBuffer = t.trackForCleanup( + device.createBuffer({ + usage: GPUBufferUsage.UNIFORM, + size + }) + ); + const outOfMemoryError = await device.popErrorScope(); + + if (!outOfMemoryError) { + await t.expectValidationError( + () => { + device.createBindGroup({ + layout: bindGroupLayout, + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + offset, + size: testValue + } + }] + + }); + }, + shouldError, + `size: ${size}, offset: ${offset}, testValue: ${testValue}` ); + } + }, + kExtraLimits + ); +}); - const outOfMemoryError = await device.popErrorScope(); - - if (!outOfMemoryError) { - await t.expectValidationError( - () => { - device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: { - buffer: uniformBuffer, - offset, - size: testValue, - }, - }, - ], - }); - }, - shouldError, - `size: ${size}, offset: ${offset}, testValue: ${testValue}` - ); - } - }, - kExtraLimits - ); - }); - -g.test('validate,maxBufferSize') - .desc(`Test that ${limit} <= maxBufferSize`) - .fn(t => { - const { adapter, defaultLimit, adapterLimit } = t; - t.expect(defaultLimit <= t.getDefaultLimit('maxBufferSize')); - t.expect(adapterLimit <= adapter.limits.maxBufferSize); - }); +g.test('validate,maxBufferSize'). +desc(`Test that ${limit} <= maxBufferSize`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxBufferSize')); + t.expect(adapterLimit <= adapter.limits.maxBufferSize); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBuffersPerShaderStage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBuffersPerShaderStage.spec.js index a676a05ad60..191493046a3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBuffersPerShaderStage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxUniformBuffersPerShaderStage.spec.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range, reorder, kReorderOrderKeys } from '../../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range, reorder, + kReorderOrderKeys } from + +'../../../../../common/util/util.js'; import { kShaderStageCombinationsWithStage } from '../../../../capability_info.js'; import { @@ -9,129 +12,133 @@ import { kBindGroupTests, kBindingCombinations, getPipelineTypeForBindingCombination, - getPerStageWGSLForBindingCombination, -} from './limit_utils.js'; + getPerStageWGSLForBindingCombination } from +'./limit_utils.js'; const limit = 'maxUniformBuffersPerShaderStage'; export const { g, description } = makeLimitTestGroup(limit); -function createBindGroupLayout(device, visibility, order, numBindings) { +function createBindGroupLayout( +device, +visibility, +order, +numBindings) +{ return device.createBindGroupLayout({ entries: reorder( order, - range(numBindings, i => ({ + range(numBindings, (i) => ({ binding: i, visibility, - buffer: {}, + buffer: {} })) - ), + ) }); } -g.test('createBindGroupLayout,at_over') - .desc( - ` +g.test('createBindGroupLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createBindGroupLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', kShaderStageCombinationsWithStage) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - await t.expectValidationError( - () => createBindGroupLayout(device, visibility, order, testValue), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', kShaderStageCombinationsWithStage). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + await t.expectValidationError( + () => createBindGroupLayout(device, visibility, order, testValue), + shouldError + ); + } + ); +}); -g.test('createPipelineLayout,at_over') - .desc( - ` +g.test('createPipelineLayout,at_over'). +desc( + ` Test using at and over ${limit} limit in createPipelineLayout Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('visibility', kShaderStageCombinationsWithStage) - .combine('order', kReorderOrderKeys) - ) - .fn(async t => { - const { limitTest, testValueName, visibility, order } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const kNumGroups = 3; - const bindGroupLayouts = range(kNumGroups, i => { - const minInGroup = Math.floor(testValue / kNumGroups); - const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); - return createBindGroupLayout(device, visibility, order, numInGroup); - }); - await t.expectValidationError( - () => device.createPipelineLayout({ bindGroupLayouts }), - shouldError - ); - } - ); - }); +). +params( + kMaximumLimitBaseParams. + combine('visibility', kShaderStageCombinationsWithStage). + combine('order', kReorderOrderKeys) +). +fn(async (t) => { + const { limitTest, testValueName, visibility, order } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const kNumGroups = 3; + const bindGroupLayouts = range(kNumGroups, (i) => { + const minInGroup = Math.floor(testValue / kNumGroups); + const numInGroup = i ? minInGroup : testValue - minInGroup * (kNumGroups - 1); + return createBindGroupLayout(device, visibility, order, numInGroup); + }); + await t.expectValidationError( + () => device.createPipelineLayout({ bindGroupLayouts }), + shouldError + ); + } + ); +}); -g.test('createPipeline,at_over') - .desc( - ` +g.test('createPipeline,at_over'). +desc( + ` Test using createRenderPipeline(Async) and createComputePipeline(Async) at and over ${limit} limit Note: We also test order to make sure the implementation isn't just looking at just the last entry. ` - ) - .params( - kMaximumLimitBaseParams - .combine('async', [false, true]) - .combine('bindingCombination', kBindingCombinations) - .combine('order', kReorderOrderKeys) - .combine('bindGroupTest', kBindGroupTests) - ) - .fn(async t => { - const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; - const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); +). +params( + kMaximumLimitBaseParams. + combine('async', [false, true]). + combine('bindingCombination', kBindingCombinations). + combine('order', kReorderOrderKeys). + combine('bindGroupTest', kBindGroupTests) +). +fn(async (t) => { + const { limitTest, testValueName, async, bindingCombination, order, bindGroupTest } = t.params; + const pipelineType = getPipelineTypeForBindingCombination(bindingCombination); - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, actualLimit, shouldError }) => { - const code = getPerStageWGSLForBindingCombination( - bindingCombination, - order, - bindGroupTest, - (i, j) => `var u${j}_${i}: f32`, - (i, j) => `_ = u${j}_${i};`, - testValue - ); + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, actualLimit, shouldError }) => { + const code = getPerStageWGSLForBindingCombination( + bindingCombination, + order, + bindGroupTest, + (i, j) => `var u${j}_${i}: f32`, + (i, j) => `_ = u${j}_${i};`, + testValue + ); + const module = device.createShaderModule({ code }); - const module = device.createShaderModule({ code }); - - await t.testCreatePipeline( - pipelineType, - async, - module, - shouldError, - `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` - ); - } - ); - }); + await t.testCreatePipeline( + pipelineType, + async, + module, + shouldError, + `actualLimit: ${actualLimit}, testValue: ${testValue}\n:${code}` + ); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexAttributes.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexAttributes.spec.js index 79a44956c15..8908742821c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexAttributes.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexAttributes.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; -function getPipelineDescriptor(device, lastIndex) { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js';function getPipelineDescriptor(device, lastIndex) { const code = ` @vertex fn vs(@location(${lastIndex}) v: vec4f) -> @builtin(position) vec4f { return v; @@ -14,31 +13,31 @@ function getPipelineDescriptor(device, lastIndex) { module, entryPoint: 'vs', buffers: [ - { - arrayStride: 32, - attributes: [{ shaderLocation: lastIndex, offset: 0, format: 'float32x4' }], - }, - ], - }, + { + arrayStride: 32, + attributes: [{ shaderLocation: lastIndex, offset: 0, format: 'float32x4' }] + }] + + } }; } const limit = 'maxVertexAttributes'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using createRenderPipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const lastIndex = testValue - 1; - const pipelineDescriptor = getPipelineDescriptor(device, lastIndex); +g.test('createRenderPipeline,at_over'). +desc(`Test using createRenderPipeline(Async) at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const lastIndex = testValue - 1; + const pipelineDescriptor = getPipelineDescriptor(device, lastIndex); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); - } - ); - }); + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); + } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBufferArrayStride.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBufferArrayStride.spec.js index a4688ac1acf..2879e4022d0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBufferArrayStride.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBufferArrayStride.spec.js @@ -1,7 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { roundDown } from '../../../../util/math.js'; -import { kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { roundDown } from '../../../../util/math.js';import { + kMaximumLimitBaseParams, + makeLimitTestGroup } from + + +'./limit_utils.js'; function getPipelineDescriptor(device, testValue) { const code = ` @@ -16,24 +20,28 @@ function getPipelineDescriptor(device, testValue) { module, entryPoint: 'vs', buffers: [ + { + arrayStride: testValue, + attributes: [ { - arrayStride: testValue, - attributes: [ - { - shaderLocation: 0, - offset: 0, - format: 'float32', - }, - ], - }, - ], - }, + shaderLocation: 0, + offset: 0, + format: 'float32' + }] + + }] + + } }; } const kMinAttributeStride = 4; -function getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit) { +function getDeviceLimitToRequest( +limitValueTest, +defaultLimit, +maximumLimit) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; @@ -44,7 +52,6 @@ function getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit) { defaultLimit, roundDown(Math.floor((defaultLimit + maximumLimit) / 2), kMinAttributeStride) ); - case 'atMaximum': return maximumLimit; case 'overMaximum': @@ -62,15 +69,15 @@ function getTestValue(testValueName, requestedLimit) { } function getDeviceLimitToRequestAndValueToTest( - limitValueTest, - testValueName, - defaultLimit, - maximumLimit -) { +limitValueTest, +testValueName, +defaultLimit, +maximumLimit) +{ const requestedLimit = getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit); return { requestedLimit, - testValue: getTestValue(testValueName, requestedLimit), + testValue: getTestValue(testValueName, requestedLimit) }; } @@ -81,26 +88,34 @@ of the arrayStride not being a multiple of 4 const limit = 'maxVertexBufferArrayStride'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using createRenderPipeline(Async) at and over ${limit} limit`) - .params(kMaximumLimitBaseParams.combine('async', [false, true])) - .fn(async t => { - const { limitTest, testValueName, async } = t.params; - const { defaultLimit, adapterLimit: maximumLimit } = t; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - maximumLimit - ); +g.test('createRenderPipeline,at_over'). +desc(`Test using createRenderPipeline(Async) at and over ${limit} limit`). +params(kMaximumLimitBaseParams.combine('async', [false, true])). +fn(async (t) => { + const { limitTest, testValueName, async } = t.params; + const { defaultLimit, adapterLimit: maximumLimit } = t; + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + maximumLimit + ); - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, shouldError }) => { - const pipelineDescriptor = getPipelineDescriptor(device, testValue); + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, shouldError }) => { + const pipelineDescriptor = getPipelineDescriptor(device, testValue); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); - } - ); - }); + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); + } + ); +}); + +g.test('validate'). +desc(`Test that ${limit} is a multiple of 4 bytes`). +fn((t) => { + const { defaultLimit, adapterLimit } = t; + t.expect(defaultLimit % 4 === 0); + t.expect(adapterLimit % 4 === 0); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBuffers.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBuffers.spec.js index 306f2c0523a..860c40687e8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBuffers.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/maxVertexBuffers.spec.js @@ -1,23 +1,27 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range } from '../../../../../common/util/util.js'; -import { kRenderEncoderTypes, kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../../../../common/util/util.js';import { kRenderEncoderTypes, kMaximumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; const kPipelineTypes = ['withoutLocations', 'withLocations']; -function getPipelineDescriptor(device, pipelineType, testValue) { + +function getPipelineDescriptor( +device, +pipelineType, +testValue) +{ const code = - pipelineType === 'withLocations' - ? ` + pipelineType === 'withLocations' ? + ` struct VSInput { - ${range(testValue, i => `@location(${i}) p${i}: f32,`).join('\n')} + ${range(testValue, (i) => `@location(${i}) p${i}: f32,`).join('\n')} } @vertex fn vs(v: VSInput) -> @builtin(position) vec4f { - let x = ${range(testValue, i => `v.p${i}`).join(' + ')}; + let x = ${range(testValue, (i) => `v.p${i}`).join(' + ')}; return vec4f(x, 0, 0, 1); } - ` - : ` + ` : + ` @vertex fn vs() -> @builtin(position) vec4f { return vec4f(0); } @@ -28,61 +32,69 @@ function getPipelineDescriptor(device, pipelineType, testValue) { vertex: { module, entryPoint: 'vs', - buffers: range(testValue, i => ({ + buffers: range(testValue, (i) => ({ arrayStride: 32, - attributes: [{ shaderLocation: i, offset: 0, format: 'float32' }], - })), - }, + attributes: [{ shaderLocation: i, offset: 0, format: 'float32' }] + })) + } }; } const limit = 'maxVertexBuffers'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createRenderPipeline,at_over') - .desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`) - .params( - kMaximumLimitBaseParams.combine('async', [false, true]).combine('pipelineType', kPipelineTypes) - ) - .fn(async t => { - const { limitTest, testValueName, async, pipelineType } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError }) => { - const pipelineDescriptor = getPipelineDescriptor(device, pipelineType, testValue); +g.test('createRenderPipeline,at_over'). +desc(`Test using at and over ${limit} limit in createRenderPipeline(Async)`). +params( + kMaximumLimitBaseParams.combine('async', [false, true]).combine('pipelineType', kPipelineTypes) +). +fn(async (t) => { + const { limitTest, testValueName, async, pipelineType } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError }) => { + const pipelineDescriptor = getPipelineDescriptor(device, pipelineType, testValue); - await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); - } - ); - }); + await t.testCreateRenderPipeline(pipelineDescriptor, async, shouldError); + } + ); +}); -g.test('setVertexBuffer,at_over') - .desc(`Test using at and over ${limit} limit in setVertexBuffer`) - .params(kMaximumLimitBaseParams.combine('encoderType', kRenderEncoderTypes)) - .fn(async t => { - const { limitTest, testValueName, encoderType } = t.params; - await t.testDeviceWithRequestedMaximumLimits( - limitTest, - testValueName, - async ({ device, testValue, shouldError, actualLimit }) => { - const lastIndex = testValue - 1; +g.test('setVertexBuffer,at_over'). +desc(`Test using at and over ${limit} limit in setVertexBuffer`). +params(kMaximumLimitBaseParams.combine('encoderType', kRenderEncoderTypes)). +fn(async (t) => { + const { limitTest, testValueName, encoderType } = t.params; + await t.testDeviceWithRequestedMaximumLimits( + limitTest, + testValueName, + async ({ device, testValue, shouldError, actualLimit }) => { + const lastIndex = testValue - 1; - const buffer = device.createBuffer({ - size: 16, - usage: GPUBufferUsage.VERTEX, - }); + const buffer = device.createBuffer({ + size: 16, + usage: GPUBufferUsage.VERTEX + }); - await t.testGPURenderCommandsMixin( - encoderType, - ({ mixin }) => { - mixin.setVertexBuffer(lastIndex, buffer); - }, - shouldError, - `lastIndex: ${lastIndex}, actualLimit: ${actualLimit}, shouldError: ${shouldError}` - ); + await t.testGPURenderCommandsMixin( + encoderType, + ({ mixin }) => { + mixin.setVertexBuffer(lastIndex, buffer); + }, + shouldError, + `lastIndex: ${lastIndex}, actualLimit: ${actualLimit}, shouldError: ${shouldError}` + ); - buffer.destroy(); - } - ); - }); + buffer.destroy(); + } + ); +}); + +g.test('validate,maxBindGroupsPlusVertexBuffers'). +desc(`Test that ${limit} <= maxBindGroupsPlusVertexBuffers`). +fn((t) => { + const { adapter, defaultLimit, adapterLimit } = t; + t.expect(defaultLimit <= t.getDefaultLimit('maxBindGroupsPlusVertexBuffers')); + t.expect(adapterLimit <= adapter.limits.maxBindGroupsPlusVertexBuffers); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minStorageBufferOffsetAlignment.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minStorageBufferOffsetAlignment.spec.js index cb5b9380848..5735818916e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minStorageBufferOffsetAlignment.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minStorageBufferOffsetAlignment.spec.js @@ -1,17 +1,25 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { GPUConst } from '../../../../constants.js'; -import { isPowerOfTwo } from '../../../../util/math.js'; -import { kMinimumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { GPUConst } from '../../../../constants.js';import { isPowerOfTwo } from '../../../../util/math.js'; +import { + kMinimumLimitBaseParams, + makeLimitTestGroup } from -function getDeviceLimitToRequest(limitValueTest, defaultLimit, minimumLimit) { + +'./limit_utils.js'; + +function getDeviceLimitToRequest( +limitValueTest, +defaultLimit, +minimumLimit) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; case 'overDefault': return 2 ** (Math.log2(defaultLimit) + 1); case 'betweenDefaultAndMinimum': - return 2 ** (((Math.log2(defaultLimit) + Math.log2(minimumLimit)) / 2) | 0); + return 2 ** ((Math.log2(defaultLimit) + Math.log2(minimumLimit)) / 2 | 0); case 'atMinimum': return minimumLimit; case 'underMinimum': @@ -29,147 +37,147 @@ function getTestValue(testValueName, requestedLimit) { } function getDeviceLimitToRequestAndValueToTest( - limitValueTest, - testValueName, - defaultLimit, - maximumLimit -) { +limitValueTest, +testValueName, +defaultLimit, +maximumLimit) +{ const requestedLimit = getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit); return { requestedLimit, - testValue: getTestValue(testValueName, requestedLimit), + testValue: getTestValue(testValueName, requestedLimit) }; } const limit = 'minStorageBufferOffsetAlignment'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBindGroup,at_over') - .desc(`Test using createBindGroup at and over ${limit} limit`) - .params(kMinimumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - // note: LimitTest.maximum is the adapter.limits[limit] value - const { defaultLimit, adapterLimit: minimumLimit } = t; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - minimumLimit - ); +g.test('createBindGroup,at_over'). +desc(`Test using createBindGroup at and over ${limit} limit`). +params(kMinimumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + // note: LimitTest.maximum is the adapter.limits[limit] value + const { defaultLimit, adapterLimit: minimumLimit } = t; + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + minimumLimit + ); - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, shouldError }) => { - const storageBuffer = t.trackForCleanup( - device.createBuffer({ - size: testValue * 2, - usage: GPUBufferUsage.STORAGE, - }) - ); - - const layout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'storage' }, - }, - ], - }); - - await t.expectValidationError(() => { - device.createBindGroup({ - layout, - entries: [ - { - binding: 0, - resource: { - buffer: storageBuffer, - offset: testValue, - }, - }, - ], - }); - }, shouldError); - } - ); - }); - -g.test('setBindGroup,at_over') - .desc(`Test using setBindGroup at and over ${limit} limit`) - .params(kMinimumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - // note: LimitTest.maximum is the adapter.limits[limit] value - const { defaultLimit, adapterLimit: minimumLimit } = t; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - minimumLimit - ); - - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, shouldError }) => { - const buffer = device.createBuffer({ + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, shouldError }) => { + const storageBuffer = t.trackForCleanup( + device.createBuffer({ size: testValue * 2, - usage: GPUBufferUsage.STORAGE, - }); + usage: GPUBufferUsage.STORAGE + }) + ); - const layout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUConst.ShaderStage.COMPUTE, - buffer: { - type: 'storage', - hasDynamicOffset: true, - }, - }, - ], - }); + const layout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'storage' } + }] - const bindGroup = device.createBindGroup({ + }); + + await t.expectValidationError(() => { + device.createBindGroup({ layout, entries: [ - { - binding: 0, - resource: { - buffer, - size: testValue / 2, - }, - }, - ], + { + binding: 0, + resource: { + buffer: storageBuffer, + offset: testValue + } + }] + }); + }, shouldError); + } + ); +}); - const encoder = device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setBindGroup(0, bindGroup, [testValue]); - pass.end(); +g.test('setBindGroup,at_over'). +desc(`Test using setBindGroup at and over ${limit} limit`). +params(kMinimumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + // note: LimitTest.maximum is the adapter.limits[limit] value + const { defaultLimit, adapterLimit: minimumLimit } = t; + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + minimumLimit + ); - await t.expectValidationError(() => { - encoder.finish(); - }, shouldError); + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, shouldError }) => { + const buffer = device.createBuffer({ + size: testValue * 2, + usage: GPUBufferUsage.STORAGE + }); - buffer.destroy(); - } - ); - }); + const layout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUConst.ShaderStage.COMPUTE, + buffer: { + type: 'storage', + hasDynamicOffset: true + } + }] -g.test('validate,powerOf2') - .desc('Verify that ${limit} is power of 2') - .fn(t => { - t.expect(isPowerOfTwo(t.defaultLimit)); - t.expect(isPowerOfTwo(t.adapterLimit)); - }); + }); -g.test('validate,greaterThanOrEqualTo32') - .desc('Verify that ${limit} is >= 32') - .fn(t => { - t.expect(t.defaultLimit >= 32); - t.expect(t.adapterLimit >= 32); - }); + const bindGroup = device.createBindGroup({ + layout, + entries: [ + { + binding: 0, + resource: { + buffer, + size: testValue / 2 + } + }] + + }); + + const encoder = device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setBindGroup(0, bindGroup, [testValue]); + pass.end(); + + await t.expectValidationError(() => { + encoder.finish(); + }, shouldError); + + buffer.destroy(); + } + ); +}); + +g.test('validate,powerOf2'). +desc('Verify that ${limit} is power of 2'). +fn((t) => { + t.expect(isPowerOfTwo(t.defaultLimit)); + t.expect(isPowerOfTwo(t.adapterLimit)); +}); + +g.test('validate,greaterThanOrEqualTo32'). +desc('Verify that ${limit} is >= 32'). +fn((t) => { + t.expect(t.defaultLimit >= 32); + t.expect(t.adapterLimit >= 32); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minUniformBufferOffsetAlignment.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minUniformBufferOffsetAlignment.spec.js index c5003d5c1a0..93d2b3eacf7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minUniformBufferOffsetAlignment.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/capability_checks/limits/minUniformBufferOffsetAlignment.spec.js @@ -1,10 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { GPUConst } from '../../../../constants.js'; -import { isPowerOfTwo } from '../../../../util/math.js'; -import { kMinimumLimitBaseParams, makeLimitTestGroup } from './limit_utils.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { GPUConst } from '../../../../constants.js';import { isPowerOfTwo } from '../../../../util/math.js'; +import { + kMinimumLimitBaseParams, + makeLimitTestGroup } from -function getDeviceLimitToRequest(limitValueTest, defaultLimit, minimumLimit) { + +'./limit_utils.js'; + +function getDeviceLimitToRequest( +limitValueTest, +defaultLimit, +minimumLimit) +{ switch (limitValueTest) { case 'atDefault': return defaultLimit; @@ -13,9 +21,8 @@ function getDeviceLimitToRequest(limitValueTest, defaultLimit, minimumLimit) { case 'betweenDefaultAndMinimum': return Math.min( minimumLimit, - 2 ** (((Math.log2(defaultLimit) + Math.log2(minimumLimit)) / 2) | 0) + 2 ** ((Math.log2(defaultLimit) + Math.log2(minimumLimit)) / 2 | 0) ); - case 'atMinimum': return minimumLimit; case 'underMinimum': @@ -33,147 +40,147 @@ function getTestValue(testValueName, requestedLimit) { } function getDeviceLimitToRequestAndValueToTest( - limitValueTest, - testValueName, - defaultLimit, - maximumLimit -) { +limitValueTest, +testValueName, +defaultLimit, +maximumLimit) +{ const requestedLimit = getDeviceLimitToRequest(limitValueTest, defaultLimit, maximumLimit); return { requestedLimit, - testValue: getTestValue(testValueName, requestedLimit), + testValue: getTestValue(testValueName, requestedLimit) }; } const limit = 'minUniformBufferOffsetAlignment'; export const { g, description } = makeLimitTestGroup(limit); -g.test('createBindGroup,at_over') - .desc(`Test using createBindGroup at and over ${limit} limit`) - .params(kMinimumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - // note: LimitTest.maximum is the adapter.limits[limit] value - const { defaultLimit, adapterLimit: minimumLimit } = t; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - minimumLimit - ); +g.test('createBindGroup,at_over'). +desc(`Test using createBindGroup at and over ${limit} limit`). +params(kMinimumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + // note: LimitTest.maximum is the adapter.limits[limit] value + const { defaultLimit, adapterLimit: minimumLimit } = t; + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + minimumLimit + ); - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, shouldError }) => { - const buffer = t.trackForCleanup( - device.createBuffer({ - size: testValue * 2, - usage: GPUBufferUsage.UNIFORM, - }) - ); - - const layout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: {}, - }, - ], - }); - - await t.expectValidationError(() => { - device.createBindGroup({ - layout, - entries: [ - { - binding: 0, - resource: { - buffer, - offset: testValue, - }, - }, - ], - }); - }, shouldError); - } - ); - }); - -g.test('setBindGroup,at_over') - .desc(`Test using setBindGroup at and over ${limit} limit`) - .params(kMinimumLimitBaseParams) - .fn(async t => { - const { limitTest, testValueName } = t.params; - // note: LimitTest.maximum is the adapter.limits[limit] value - const { defaultLimit, adapterLimit: minimumLimit } = t; - const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( - limitTest, - testValueName, - defaultLimit, - minimumLimit - ); - - await t.testDeviceWithSpecificLimits( - requestedLimit, - testValue, - async ({ device, testValue, shouldError }) => { - const buffer = device.createBuffer({ + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, shouldError }) => { + const buffer = t.trackForCleanup( + device.createBuffer({ size: testValue * 2, - usage: GPUBufferUsage.UNIFORM, - }); + usage: GPUBufferUsage.UNIFORM + }) + ); - const layout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUConst.ShaderStage.COMPUTE, - buffer: { - type: 'uniform', - hasDynamicOffset: true, - }, - }, - ], - }); + const layout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: {} + }] - const bindGroup = device.createBindGroup({ + }); + + await t.expectValidationError(() => { + device.createBindGroup({ layout, entries: [ - { - binding: 0, - resource: { - buffer, - size: testValue / 2, - }, - }, - ], + { + binding: 0, + resource: { + buffer, + offset: testValue + } + }] + }); + }, shouldError); + } + ); +}); - const encoder = device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setBindGroup(0, bindGroup, [testValue]); - pass.end(); +g.test('setBindGroup,at_over'). +desc(`Test using setBindGroup at and over ${limit} limit`). +params(kMinimumLimitBaseParams). +fn(async (t) => { + const { limitTest, testValueName } = t.params; + // note: LimitTest.maximum is the adapter.limits[limit] value + const { defaultLimit, adapterLimit: minimumLimit } = t; + const { requestedLimit, testValue } = getDeviceLimitToRequestAndValueToTest( + limitTest, + testValueName, + defaultLimit, + minimumLimit + ); - await t.expectValidationError(() => { - encoder.finish(); - }, shouldError); + await t.testDeviceWithSpecificLimits( + requestedLimit, + testValue, + async ({ device, testValue, shouldError }) => { + const buffer = device.createBuffer({ + size: testValue * 2, + usage: GPUBufferUsage.UNIFORM + }); - buffer.destroy(); - } - ); - }); + const layout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUConst.ShaderStage.COMPUTE, + buffer: { + type: 'uniform', + hasDynamicOffset: true + } + }] -g.test('validate,powerOf2') - .desc('Verify that ${limit} is power of 2') - .fn(t => { - t.expect(isPowerOfTwo(t.defaultLimit)); - t.expect(isPowerOfTwo(t.adapterLimit)); - }); + }); -g.test('validate,greaterThanOrEqualTo32') - .desc('Verify that ${limit} is >= 32') - .fn(t => { - t.expect(t.defaultLimit >= 32); - t.expect(t.adapterLimit >= 32); - }); + const bindGroup = device.createBindGroup({ + layout, + entries: [ + { + binding: 0, + resource: { + buffer, + size: testValue / 2 + } + }] + + }); + + const encoder = device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setBindGroup(0, bindGroup, [testValue]); + pass.end(); + + await t.expectValidationError(() => { + encoder.finish(); + }, shouldError); + + buffer.destroy(); + } + ); +}); + +g.test('validate,powerOf2'). +desc('Verify that ${limit} is power of 2'). +fn((t) => { + t.expect(isPowerOfTwo(t.defaultLimit)); + t.expect(isPowerOfTwo(t.adapterLimit)); +}); + +g.test('validate,greaterThanOrEqualTo32'). +desc('Verify that ${limit} is >= 32'). +fn((t) => { + t.expect(t.defaultLimit >= 32); + t.expect(t.adapterLimit >= 32); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/compute_pipeline.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/compute_pipeline.spec.js index 30f4abc0636..3d2c5a7641b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/compute_pipeline.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/compute_pipeline.spec.js @@ -1,297 +1,300 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` createComputePipeline and createComputePipelineAsync validation tests. Note: entry point matching tests are in shader_module/entry_point.spec.ts -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { kValue } from '../../util/constants.js'; import { getShaderWithEntryPoint } from '../../util/shader.js'; import { ValidationTest } from './validation_test.js'; class F extends ValidationTest { - getShaderModule(shaderStage = 'compute', entryPoint = 'main') { + getShaderModule( + shaderStage = 'compute', + entryPoint = 'main') + { return this.device.createShaderModule({ - code: getShaderWithEntryPoint(shaderStage, entryPoint), + code: getShaderWithEntryPoint(shaderStage, entryPoint) }); } } export const g = makeTestGroup(F); -g.test('basic') - .desc( - ` +g.test('basic'). +desc( + ` Control case for createComputePipeline and createComputePipelineAsync. Call the API with valid compute shader and matching valid entryPoint, making sure that the test function working well. ` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(t => { - const { isAsync } = t.params; - t.doCreateComputePipelineTest(isAsync, true, { - layout: 'auto', - compute: { module: t.getShaderModule('compute', 'main'), entryPoint: 'main' }, - }); +). +params((u) => u.combine('isAsync', [true, false])). +fn((t) => { + const { isAsync } = t.params; + t.doCreateComputePipelineTest(isAsync, true, { + layout: 'auto', + compute: { module: t.getShaderModule('compute', 'main'), entryPoint: 'main' } }); +}); -g.test('shader_module,invalid') - .desc( - ` +g.test('shader_module,invalid'). +desc( + ` Tests calling createComputePipeline(Async) with a invalid compute shader, and check that the APIs catch this error. ` - ) - .params(u => u.combine('isAsync', [true, false])) - .fn(t => { - const { isAsync } = t.params; - t.doCreateComputePipelineTest(isAsync, false, { - layout: 'auto', - compute: { - module: t.createInvalidShaderModule(), - entryPoint: 'main', - }, - }); +). +params((u) => u.combine('isAsync', [true, false])). +fn((t) => { + const { isAsync } = t.params; + t.doCreateComputePipelineTest(isAsync, false, { + layout: 'auto', + compute: { + module: t.createInvalidShaderModule(), + entryPoint: 'main' + } }); +}); -g.test('shader_module,compute') - .desc( - ` +g.test('shader_module,compute'). +desc( + ` Tests calling createComputePipeline(Async) with valid but different stage shader and matching entryPoint, and check that the APIs only accept compute shader. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combine('shaderModuleStage', ['compute', 'vertex', 'fragment']) - ) - .fn(t => { - const { isAsync, shaderModuleStage } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.getShaderModule(shaderModuleStage, 'main'), - entryPoint: 'main', - }, - }; - t.doCreateComputePipelineTest(isAsync, shaderModuleStage === 'compute', descriptor); +). +params((u) => +u // +.combine('isAsync', [true, false]). +combine('shaderModuleStage', ['compute', 'vertex', 'fragment']) +). +fn((t) => { + const { isAsync, shaderModuleStage } = t.params; + const descriptor = { + layout: 'auto', + compute: { + module: t.getShaderModule(shaderModuleStage, 'main'), + entryPoint: 'main' + } + }; + t.doCreateComputePipelineTest(isAsync, shaderModuleStage === 'compute', descriptor); +}); + +g.test('shader_module,device_mismatch'). +desc( + 'Tests createComputePipeline(Async) cannot be called with a shader module created from another device' +). +paramsSubcasesOnly((u) => u.combine('isAsync', [true, false]).combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { isAsync, mismatched } = t.params; + + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const module = sourceDevice.createShaderModule({ + code: '@compute @workgroup_size(1) fn main() {}' }); -g.test('shader_module,device_mismatch') - .desc( - 'Tests createComputePipeline(Async) cannot be called with a shader module created from another device' - ) - .paramsSubcasesOnly(u => u.combine('isAsync', [true, false]).combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { isAsync, mismatched } = t.params; + const descriptor = { + layout: 'auto', + compute: { + module, + entryPoint: 'main' + } + }; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + t.doCreateComputePipelineTest(isAsync, !mismatched, descriptor); +}); - const module = sourceDevice.createShaderModule({ - code: '@compute @workgroup_size(1) fn main() {}', - }); +g.test('pipeline_layout,device_mismatch'). +desc( + 'Tests createComputePipeline(Async) cannot be called with a pipeline layout created from another device' +). +paramsSubcasesOnly((u) => u.combine('isAsync', [true, false]).combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { isAsync, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const descriptor = { - layout: 'auto', - compute: { - module, - entryPoint: 'main', - }, - }; + const layout = sourceDevice.createPipelineLayout({ bindGroupLayouts: [] }); - t.doCreateComputePipelineTest(isAsync, !mismatched, descriptor); - }); + const descriptor = { + layout, + compute: { + module: t.getShaderModule('compute', 'main'), + entryPoint: 'main' + } + }; -g.test('pipeline_layout,device_mismatch') - .desc( - 'Tests createComputePipeline(Async) cannot be called with a pipeline layout created from another device' - ) - .paramsSubcasesOnly(u => u.combine('isAsync', [true, false]).combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { isAsync, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + t.doCreateComputePipelineTest(isAsync, !mismatched, descriptor); +}); - const layout = sourceDevice.createPipelineLayout({ bindGroupLayouts: [] }); - - const descriptor = { - layout, - compute: { - module: t.getShaderModule('compute', 'main'), - entryPoint: 'main', - }, - }; - - t.doCreateComputePipelineTest(isAsync, !mismatched, descriptor); - }); - -g.test('limits,workgroup_storage_size') - .desc( - ` +g.test('limits,workgroup_storage_size'). +desc( + ` Tests calling createComputePipeline(Async) validation for compute using <= device.limits.maxComputeWorkgroupStorageSize bytes of workgroup storage. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { type: 'vec4', _typeSize: 16 }, - { type: 'mat4x4', _typeSize: 64 }, - ]) - .beginSubcases() - .combine('countDeltaFromLimit', [0, 1]) - ) - .fn(t => { - const { isAsync, type, _typeSize, countDeltaFromLimit } = t.params; - const countAtLimit = Math.floor(t.device.limits.maxComputeWorkgroupStorageSize / _typeSize); - const count = countAtLimit + countDeltaFromLimit; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ type: 'vec4', _typeSize: 16 }, +{ type: 'mat4x4', _typeSize: 64 }] +). +beginSubcases(). +combine('countDeltaFromLimit', [0, 1]) +). +fn((t) => { + const { isAsync, type, _typeSize, countDeltaFromLimit } = t.params; + const countAtLimit = Math.floor(t.device.limits.maxComputeWorkgroupStorageSize / _typeSize); + const count = countAtLimit + countDeltaFromLimit; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` var data: array<${type}, ${count}>; @compute @workgroup_size(64) fn main () { _ = data; } - `, - }), - entryPoint: 'main', - }, - }; - t.doCreateComputePipelineTest(isAsync, count <= countAtLimit, descriptor); - }); + ` + }), + entryPoint: 'main' + } + }; + t.doCreateComputePipelineTest(isAsync, count <= countAtLimit, descriptor); +}); -g.test('limits,invocations_per_workgroup') - .desc( - ` +g.test('limits,invocations_per_workgroup'). +desc( + ` Tests calling createComputePipeline(Async) validation for compute using <= device.limits.maxComputeInvocationsPerWorkgroup per workgroup. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combine('size', [ - // Assume maxComputeWorkgroupSizeX/Y >= 129, maxComputeWorkgroupSizeZ >= 33 - [128, 1, 2], - [129, 1, 2], - [2, 128, 1], - [2, 129, 1], - [1, 8, 32], - [1, 8, 33], - ]) - ) - .fn(t => { - const { isAsync, size } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combine('size', [ +// Assume maxComputeWorkgroupSizeX/Y >= 129, maxComputeWorkgroupSizeZ >= 33 +[128, 1, 2], +[129, 1, 2], +[2, 128, 1], +[2, 129, 1], +[1, 8, 32], +[1, 8, 33]] +) +). +fn((t) => { + const { isAsync, size } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` @compute @workgroup_size(${size.join(',')}) fn main () { } - `, - }), - entryPoint: 'main', - }, - }; + ` + }), + entryPoint: 'main' + } + }; - t.doCreateComputePipelineTest( - isAsync, - size[0] * size[1] * size[2] <= t.device.limits.maxComputeInvocationsPerWorkgroup, - descriptor - ); - }); + t.doCreateComputePipelineTest( + isAsync, + size[0] * size[1] * size[2] <= t.device.limits.maxComputeInvocationsPerWorkgroup, + descriptor + ); +}); -g.test('limits,invocations_per_workgroup,each_component') - .desc( - ` +g.test('limits,invocations_per_workgroup,each_component'). +desc( + ` Tests calling createComputePipeline(Async) validation for compute workgroup_size attribute has each component no more than their limits. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combine('size', [ - // Assume maxComputeInvocationsPerWorkgroup >= 256 - [64], - [256, 1, 1], - [257, 1, 1], - [1, 256, 1], - [1, 257, 1], - [1, 1, 63], - [1, 1, 64], - [1, 1, 65], - ]) - ) - .fn(t => { - const { isAsync, size } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combine('size', [ +// Assume maxComputeInvocationsPerWorkgroup >= 256 +[64], +[256, 1, 1], +[257, 1, 1], +[1, 256, 1], +[1, 257, 1], +[1, 1, 63], +[1, 1, 64], +[1, 1, 65]] +) +). +fn((t) => { + const { isAsync, size } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` @compute @workgroup_size(${size.join(',')}) fn main () { } - `, - }), - entryPoint: 'main', - }, - }; + ` + }), + entryPoint: 'main' + } + }; - size[1] = size[1] ?? 1; - size[2] = size[2] ?? 1; + const workgroupX = size[0]; + const workgroupY = size[1] ?? 1; + const workgroupZ = size[2] ?? 1; - const _success = - size[0] <= t.device.limits.maxComputeWorkgroupSizeX && - size[1] <= t.device.limits.maxComputeWorkgroupSizeY && - size[2] <= t.device.limits.maxComputeWorkgroupSizeZ; - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); + const _success = + workgroupX <= t.device.limits.maxComputeWorkgroupSizeX && + workgroupY <= t.device.limits.maxComputeWorkgroupSizeY && + workgroupZ <= t.device.limits.maxComputeWorkgroupSizeZ; + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); -g.test('overrides,identifier') - .desc( - ` +g.test('overrides,identifier'). +desc( + ` Tests calling createComputePipeline(Async) validation for overridable constants identifiers. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { constants: {}, _success: true }, - { constants: { c0: 0 }, _success: true }, - { constants: { c0: 0, c1: 1 }, _success: true }, - { constants: { 'c0\0': 0 }, _success: false }, - { constants: { c9: 0 }, _success: false }, - { constants: { 1: 0 }, _success: true }, - { constants: { c3: 0 }, _success: false }, // pipeline constant id is specified for c3 - { constants: { 2: 0 }, _success: false }, - { constants: { 1000: 0 }, _success: true }, - { constants: { 9999: 0 }, _success: false }, - { constants: { 1000: 0, c2: 0 }, _success: false }, - { constants: { 数: 0 }, _success: true }, - { constants: { séquençage: 0 }, _success: false }, // test unicode is not normalized - ]) - ) - .fn(t => { - const { isAsync, constants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ constants: {}, _success: true }, +{ constants: { c0: 0 }, _success: true }, +{ constants: { c0: 0, c1: 1 }, _success: true }, +{ constants: { 'c0\0': 0 }, _success: false }, +{ constants: { c9: 0 }, _success: false }, +{ constants: { 1: 0 }, _success: true }, +{ constants: { c3: 0 }, _success: false }, // pipeline constant id is specified for c3 +{ constants: { 2: 0 }, _success: false }, +{ constants: { 1000: 0 }, _success: true }, +{ constants: { 9999: 0 }, _success: false }, +{ constants: { 1000: 0, c2: 0 }, _success: false }, +{ constants: { 数: 0 }, _success: true }, +{ constants: { séquençage: 0 }, _success: false } // test unicode is not normalized +]) +). +fn((t) => { + const { isAsync, constants, _success } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` override c0: bool = true; // type: bool override c1: u32 = 0u; // default override override 数: u32 = 0u; // non-ASCII @@ -304,40 +307,40 @@ Tests calling createComputePipeline(Async) validation for overridable constants _ = u32(c1); _ = u32(c2 + séquençage); _ = u32(c3 + 数); - }`, - }), - entryPoint: 'main', - constants, - }, - }; + }` + }), + entryPoint: 'main', + constants + } + }; - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); -g.test('overrides,uninitialized') - .desc( - ` +g.test('overrides,uninitialized'). +desc( + ` Tests calling createComputePipeline(Async) validation for uninitialized overridable constants. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { constants: {}, _success: false }, - { constants: { c0: 0, c2: 0, c8: 0 }, _success: false }, // c5 is missing - { constants: { c0: 0, c2: 0, c5: 0, c8: 0 }, _success: true }, - { constants: { c0: 0, c2: 0, c5: 0, c8: 0, c1: 0 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, constants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ constants: {}, _success: false }, +{ constants: { c0: 0, c2: 0, c8: 0 }, _success: false }, // c5 is missing +{ constants: { c0: 0, c2: 0, c5: 0, c8: 0 }, _success: true }, +{ constants: { c0: 0, c2: 0, c5: 0, c8: 0, c1: 0 }, _success: true }] +) +). +fn((t) => { + const { isAsync, constants, _success } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` override c0: bool; // type: bool override c1: bool = false; // default override override c2: f32; // type: float32 @@ -362,95 +365,95 @@ Tests calling createComputePipeline(Async) validation for uninitialized overrida _ = u32(c8); _ = u32(c9); _ = u32(c10); - }`, - }), - entryPoint: 'main', - constants, - }, - }; + }` + }), + entryPoint: 'main', + constants + } + }; - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); -g.test('overrides,value,type_error') - .desc( - ` +g.test('overrides,value,type_error'). +desc( + ` Tests calling createComputePipeline(Async) validation for constant values like inf, NaN will results in TypeError. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { constants: { cf: 1 }, _success: true }, // control - { constants: { cf: NaN }, _success: false }, - { constants: { cf: Number.POSITIVE_INFINITY }, _success: false }, - { constants: { cf: Number.NEGATIVE_INFINITY }, _success: false }, - ]) - ) - .fn(t => { - const { isAsync, constants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ constants: { cf: 1 }, _success: true }, // control +{ constants: { cf: NaN }, _success: false }, +{ constants: { cf: Number.POSITIVE_INFINITY }, _success: false }, +{ constants: { cf: Number.NEGATIVE_INFINITY }, _success: false }] +) +). +fn((t) => { + const { isAsync, constants, _success } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` override cf: f32 = 0.0; @compute @workgroup_size(1) fn main () { _ = cf; - }`, - }), - entryPoint: 'main', - constants, - }, - }; + }` + }), + entryPoint: 'main', + constants + } + }; - t.doCreateComputePipelineTest(isAsync, _success, descriptor, 'TypeError'); - }); + t.doCreateComputePipelineTest(isAsync, _success, descriptor, 'TypeError'); +}); -g.test('overrides,value,validation_error') - .desc( - ` +g.test('overrides,value,validation_error'). +desc( + ` Tests calling createComputePipeline(Async) validation for unrepresentable constant values in compute stage. TODO(#2060): test with last_castable_pipeline_override. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { constants: { cu: kValue.u32.min }, _success: true }, - { constants: { cu: kValue.u32.min - 1 }, _success: false }, - { constants: { cu: kValue.u32.max }, _success: true }, - { constants: { cu: kValue.u32.max + 1 }, _success: false }, - { constants: { ci: kValue.i32.negative.min }, _success: true }, - { constants: { ci: kValue.i32.negative.min - 1 }, _success: false }, - { constants: { ci: kValue.i32.positive.max }, _success: true }, - { constants: { ci: kValue.i32.positive.max + 1 }, _success: false }, - { constants: { cf: kValue.f32.negative.min }, _success: true }, - { - constants: { cf: kValue.f32.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { constants: { cf: kValue.f32.positive.max }, _success: true }, - { - constants: { cf: kValue.f32.positive.first_non_castable_pipeline_override }, - _success: false, - }, - // Conversion to boolean can't fail - { constants: { cb: Number.MAX_VALUE }, _success: true }, - { constants: { cb: kValue.i32.negative.min - 1 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, constants, _success } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ constants: { cu: kValue.u32.min }, _success: true }, +{ constants: { cu: kValue.u32.min - 1 }, _success: false }, +{ constants: { cu: kValue.u32.max }, _success: true }, +{ constants: { cu: kValue.u32.max + 1 }, _success: false }, +{ constants: { ci: kValue.i32.negative.min }, _success: true }, +{ constants: { ci: kValue.i32.negative.min - 1 }, _success: false }, +{ constants: { ci: kValue.i32.positive.max }, _success: true }, +{ constants: { ci: kValue.i32.positive.max + 1 }, _success: false }, +{ constants: { cf: kValue.f32.negative.min }, _success: true }, +{ + constants: { cf: kValue.f32.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ constants: { cf: kValue.f32.positive.max }, _success: true }, +{ + constants: { cf: kValue.f32.positive.first_non_castable_pipeline_override }, + _success: false +}, +// Conversion to boolean can't fail +{ constants: { cb: Number.MAX_VALUE }, _success: true }, +{ constants: { cb: kValue.i32.negative.min - 1 }, _success: true }] +) +). +fn((t) => { + const { isAsync, constants, _success } = t.params; + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` override cb: bool = false; override cu: u32 = 0u; override ci: i32 = 0; @@ -460,76 +463,76 @@ TODO(#2060): test with last_castable_pipeline_override. _ = cu; _ = ci; _ = cf; - }`, - }), - entryPoint: 'main', - constants, - }, - }; + }` + }), + entryPoint: 'main', + constants + } + }; - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); -g.test('overrides,value,validation_error,f16') - .desc( - ` +g.test('overrides,value,validation_error,f16'). +desc( + ` Tests calling createComputePipeline(Async) validation for unrepresentable f16 constant values in compute stage. TODO(#2060): Tighten the cases around the valid/invalid boundary once we have WGSL spec clarity on whether values like f16.positive.last_castable_pipeline_override would be valid. See issue. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { constants: { cf16: kValue.f16.negative.min }, _success: true }, - { - constants: { cf16: kValue.f16.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { constants: { cf16: kValue.f16.positive.max }, _success: true }, - { - constants: { cf16: kValue.f16.positive.first_non_castable_pipeline_override }, - _success: false, - }, - { constants: { cf16: kValue.f32.negative.min }, _success: false }, - { constants: { cf16: kValue.f32.positive.max }, _success: false }, - { - constants: { cf16: kValue.f32.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { - constants: { cf16: kValue.f32.positive.first_non_castable_pipeline_override }, - _success: false, - }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(t => { - const { isAsync, constants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ constants: { cf16: kValue.f16.negative.min }, _success: true }, +{ + constants: { cf16: kValue.f16.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ constants: { cf16: kValue.f16.positive.max }, _success: true }, +{ + constants: { cf16: kValue.f16.positive.first_non_castable_pipeline_override }, + _success: false +}, +{ constants: { cf16: kValue.f32.negative.min }, _success: false }, +{ constants: { cf16: kValue.f32.positive.max }, _success: false }, +{ + constants: { cf16: kValue.f32.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ + constants: { cf16: kValue.f32.positive.first_non_castable_pipeline_override }, + _success: false +}] +) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn((t) => { + const { isAsync, constants, _success } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` enable f16; override cf16: f16 = 0.0h; @compute @workgroup_size(1) fn main () { _ = cf16; - }`, - }), - entryPoint: 'main', - constants, - }, - }; + }` + }), + entryPoint: 'main', + constants + } + }; - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); const kOverridesWorkgroupSizeShaders = { u32: ` @@ -547,122 +550,122 @@ override z: i32 = 1; @compute @workgroup_size(x, y, z) fn main () { _ = 0u; } -`, +` }; -g.test('overrides,workgroup_size') - .desc( - ` +g.test('overrides,workgroup_size'). +desc( + ` Tests calling createComputePipeline(Async) validation for overridable constants used for workgroup size. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combine('type', ['u32', 'i32']) - .combineWithParams([ - { constants: {}, _success: true }, - { constants: { x: 0, y: 0, z: 0 }, _success: false }, - { constants: { x: 1, y: -1, z: 1 }, _success: false }, - { constants: { x: 1, y: 0, z: 0 }, _success: false }, - { constants: { x: 16, y: 1, z: 1 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, type, constants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combine('type', ['u32', 'i32']). +combineWithParams([ +{ constants: {}, _success: true }, +{ constants: { x: 0, y: 0, z: 0 }, _success: false }, +{ constants: { x: 1, y: -1, z: 1 }, _success: false }, +{ constants: { x: 1, y: 0, z: 0 }, _success: false }, +{ constants: { x: 16, y: 1, z: 1 }, _success: true }] +) +). +fn((t) => { + const { isAsync, type, constants, _success } = t.params; + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: kOverridesWorkgroupSizeShaders[type] + }), + entryPoint: 'main', + constants + } + }; + + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); + +g.test('overrides,workgroup_size,limits'). +desc( + ` +Tests calling createComputePipeline(Async) validation for overridable constants for workgroupSize exceeds device limits. +` +). +params((u) => +u // +.combine('isAsync', [true, false]). +combine('type', ['u32', 'i32']) +). +fn((t) => { + const { isAsync, type } = t.params; + + const limits = t.device.limits; + + const testFn = (x, y, z, _success) => { const descriptor = { layout: 'auto', compute: { module: t.device.createShaderModule({ - code: kOverridesWorkgroupSizeShaders[type], + code: kOverridesWorkgroupSizeShaders[type] }), entryPoint: 'main', - constants, - }, + constants: { + x, + y, + z + } + } }; t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); + }; -g.test('overrides,workgroup_size,limits') - .desc( - ` -Tests calling createComputePipeline(Async) validation for overridable constants for workgroupSize exceeds device limits. -` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combine('type', ['u32', 'i32']) - ) - .fn(t => { - const { isAsync, type } = t.params; + testFn(limits.maxComputeWorkgroupSizeX, 1, 1, true); + testFn(limits.maxComputeWorkgroupSizeX + 1, 1, 1, false); + testFn(1, limits.maxComputeWorkgroupSizeY, 1, true); + testFn(1, limits.maxComputeWorkgroupSizeY + 1, 1, false); + testFn(1, 1, limits.maxComputeWorkgroupSizeZ, true); + testFn(1, 1, limits.maxComputeWorkgroupSizeZ + 1, false); + testFn( + limits.maxComputeWorkgroupSizeX, + limits.maxComputeWorkgroupSizeY, + limits.maxComputeWorkgroupSizeZ, + limits.maxComputeWorkgroupSizeX * + limits.maxComputeWorkgroupSizeY * + limits.maxComputeWorkgroupSizeZ <= + limits.maxComputeInvocationsPerWorkgroup + ); +}); - const limits = t.device.limits; - - const testFn = (x, y, z, _success) => { - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: kOverridesWorkgroupSizeShaders[type], - }), - entryPoint: 'main', - constants: { - x, - y, - z, - }, - }, - }; - - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }; - - testFn(limits.maxComputeWorkgroupSizeX, 1, 1, true); - testFn(limits.maxComputeWorkgroupSizeX + 1, 1, 1, false); - testFn(1, limits.maxComputeWorkgroupSizeY, 1, true); - testFn(1, limits.maxComputeWorkgroupSizeY + 1, 1, false); - testFn(1, 1, limits.maxComputeWorkgroupSizeZ, true); - testFn(1, 1, limits.maxComputeWorkgroupSizeZ + 1, false); - testFn( - limits.maxComputeWorkgroupSizeX, - limits.maxComputeWorkgroupSizeY, - limits.maxComputeWorkgroupSizeZ, - limits.maxComputeWorkgroupSizeX * - limits.maxComputeWorkgroupSizeY * - limits.maxComputeWorkgroupSizeZ <= - limits.maxComputeInvocationsPerWorkgroup - ); - }); - -g.test('overrides,workgroup_size,limits,workgroup_storage_size') - .desc( - ` +g.test('overrides,workgroup_size,limits,workgroup_storage_size'). +desc( + ` Tests calling createComputePipeline(Async) validation for overridable constants for workgroupStorageSize exceeds device limits. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - ) - .fn(t => { - const { isAsync } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]) +). +fn((t) => { + const { isAsync } = t.params; - const limits = t.device.limits; + const limits = t.device.limits; - const kVec4Size = 16; - const maxVec4Count = limits.maxComputeWorkgroupStorageSize / kVec4Size; - const kMat4Size = 64; - const maxMat4Count = limits.maxComputeWorkgroupStorageSize / kMat4Size; + const kVec4Size = 16; + const maxVec4Count = limits.maxComputeWorkgroupStorageSize / kVec4Size; + const kMat4Size = 64; + const maxMat4Count = limits.maxComputeWorkgroupStorageSize / kMat4Size; - const testFn = (vec4Count, mat4Count, _success) => { - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: ` + const testFn = (vec4Count, mat4Count, _success) => { + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: ` override a: u32; override b: u32; ${vec4Count <= 0 ? '' : 'var vec4_data: array, a>;'} @@ -670,20 +673,20 @@ Tests calling createComputePipeline(Async) validation for overridable constants @compute @workgroup_size(1) fn main() { ${vec4Count <= 0 ? '' : '_ = vec4_data[0];'} ${mat4Count <= 0 ? '' : '_ = mat4_data[0];'} - }`, - }), - entryPoint: 'main', - constants: { - a: vec4Count, - b: mat4Count, - }, - }, - }; - - t.doCreateComputePipelineTest(isAsync, _success, descriptor); + }` + }), + entryPoint: 'main', + constants: { + a: vec4Count, + b: mat4Count + } + } }; - testFn(1, 1, true); - testFn(maxVec4Count + 1, 0, false); - testFn(0, maxMat4Count + 1, false); - }); + t.doCreateComputePipelineTest(isAsync, _success, descriptor); + }; + + testFn(1, 1, true); + testFn(maxVec4Count + 1, 0, false); + testFn(0, maxMat4Count + 1, false); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroup.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroup.spec.js index ba0ea041c23..283fe97fd24 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroup.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroup.spec.js @@ -1,14 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` createBindGroup validation tests. TODO: Ensure sure tests cover all createBindGroup validation rules. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert, makeValueTestVariant, unreachable } from '../../../common/util/util.js'; import { allBindingEntries, + bindingTypeInfo, bufferBindingEntries, bufferBindingTypeInfo, @@ -20,8 +20,8 @@ import { kTextureUsages, kTextureViewDimensions, sampledAndStorageBindingEntries, - texBindingTypeInfo, -} from '../../capability_info.js'; + texBindingTypeInfo } from +'../../capability_info.js'; import { GPUConst } from '../../constants.js'; import { kAllTextureFormats, kTextureFormatInfo } from '../../format_info.js'; import { kResourceStates } from '../../gpu_test.js'; @@ -35,586 +35,612 @@ function clone(descriptor) { export const g = makeTestGroup(ValidationTest); -const kStorageTextureFormats = kAllTextureFormats.filter(f => kTextureFormatInfo[f].color?.storage); +const kStorageTextureFormats = kAllTextureFormats.filter((f) => kTextureFormatInfo[f].color?.storage); -g.test('binding_count_mismatch') - .desc('Test that the number of entries must match the number of entries in the BindGroupLayout.') - .paramsSubcasesOnly(u => - u // - .combine('layoutEntryCount', [1, 2, 3]) - .combine('bindGroupEntryCount', [1, 2, 3]) - ) - .fn(t => { - const { layoutEntryCount, bindGroupEntryCount } = t.params; +g.test('binding_count_mismatch'). +desc('Test that the number of entries must match the number of entries in the BindGroupLayout.'). +paramsSubcasesOnly((u) => +u // +.combine('layoutEntryCount', [1, 2, 3]). +combine('bindGroupEntryCount', [1, 2, 3]) +). +fn((t) => { + const { layoutEntryCount, bindGroupEntryCount } = t.params; - const layoutEntries = []; - for (let i = 0; i < layoutEntryCount; ++i) { - layoutEntries.push({ - binding: i, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'storage' }, - }); - } - const bindGroupLayout = t.device.createBindGroupLayout({ entries: layoutEntries }); + const layoutEntries = []; + for (let i = 0; i < layoutEntryCount; ++i) { + layoutEntries.push({ + binding: i, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'storage' } + }); + } + const bindGroupLayout = t.device.createBindGroupLayout({ entries: layoutEntries }); - const entries = []; - for (let i = 0; i < bindGroupEntryCount; ++i) { - entries.push({ - binding: i, - resource: { buffer: t.getStorageBuffer() }, - }); - } + const entries = []; + for (let i = 0; i < bindGroupEntryCount; ++i) { + entries.push({ + binding: i, + resource: { buffer: t.getStorageBuffer() } + }); + } + + const shouldError = layoutEntryCount !== bindGroupEntryCount; + t.expectValidationError(() => { + t.device.createBindGroup({ + entries, + layout: bindGroupLayout + }); + }, shouldError); +}); + +g.test('binding_must_be_present_in_layout'). +desc( + 'Test that the binding slot for each entry matches a binding slot defined in the BindGroupLayout.' +). +paramsSubcasesOnly((u) => +u // +.combine('layoutBinding', [0, 1, 2]). +combine('binding', [0, 1, 2]) +). +fn((t) => { + const { layoutBinding, binding } = t.params; + + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { binding: layoutBinding, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }] - const shouldError = layoutEntryCount !== bindGroupEntryCount; - t.expectValidationError(() => { - t.device.createBindGroup({ - entries, - layout: bindGroupLayout, - }); - }, shouldError); }); -g.test('binding_must_be_present_in_layout') - .desc( - 'Test that the binding slot for each entry matches a binding slot defined in the BindGroupLayout.' - ) - .paramsSubcasesOnly(u => - u // - .combine('layoutBinding', [0, 1, 2]) - .combine('binding', [0, 1, 2]) - ) - .fn(t => { - const { layoutBinding, binding } = t.params; + const descriptor = { + entries: [{ binding, resource: { buffer: t.getStorageBuffer() } }], + layout: bindGroupLayout + }; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { binding: layoutBinding, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - ], - }); + const shouldError = layoutBinding !== binding; + t.expectValidationError(() => { + t.device.createBindGroup(descriptor); + }, shouldError); +}); - const descriptor = { - entries: [{ binding, resource: { buffer: t.getStorageBuffer() } }], - layout: bindGroupLayout, - }; +g.test('binding_must_contain_resource_defined_in_layout'). +desc( + 'Test that only compatible resource types specified in the BindGroupLayout are allowed for each entry.' +). +params((u) => +u // +.combine('resourceType', kBindableResources). +combine('entry', allBindingEntries(false)) +). +fn((t) => { + const { resourceType, entry } = t.params; + const info = bindingTypeInfo(entry); - const shouldError = layoutBinding !== binding; - t.expectValidationError(() => { - t.device.createBindGroup(descriptor); - }, shouldError); + const layout = t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, ...entry }] }); -g.test('binding_must_contain_resource_defined_in_layout') - .desc( - 'Test that only compatible resource types specified in the BindGroupLayout are allowed for each entry.' - ) - .paramsSubcasesOnly(u => - u // - .combine('resourceType', kBindableResources) - .combine('entry', allBindingEntries(false)) - ) - .fn(t => { - const { resourceType, entry } = t.params; - const info = bindingTypeInfo(entry); + const resource = t.getBindingResource(resourceType); - const layout = t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, ...entry }], - }); - - const resource = t.getBindingResource(resourceType); - - let resourceBindingIsCompatible; - switch (info.resource) { - // Either type of sampler may be bound to a filtering sampler binding. - case 'filtSamp': - resourceBindingIsCompatible = resourceType === 'filtSamp' || resourceType === 'nonFiltSamp'; - break; - // But only non-filtering samplers can be used with non-filtering sampler bindings. - case 'nonFiltSamp': - resourceBindingIsCompatible = resourceType === 'nonFiltSamp'; - break; + const IsStorageTextureResourceType = (resourceType) => { + switch (resourceType) { + case 'readonlyStorageTex': + case 'readwriteStorageTex': + case 'writeonlyStorageTex': + return true; default: - resourceBindingIsCompatible = info.resource === resourceType; - break; + return false; } + }; - t.expectValidationError(() => { - t.device.createBindGroup({ layout, entries: [{ binding: 0, resource }] }); - }, !resourceBindingIsCompatible); + let resourceBindingIsCompatible; + switch (info.resource) { + // Either type of sampler may be bound to a filtering sampler binding. + case 'filtSamp': + resourceBindingIsCompatible = resourceType === 'filtSamp' || resourceType === 'nonFiltSamp'; + break; + // But only non-filtering samplers can be used with non-filtering sampler bindings. + case 'nonFiltSamp': + resourceBindingIsCompatible = resourceType === 'nonFiltSamp'; + break; + case 'readonlyStorageTex': + case 'readwriteStorageTex': + case 'writeonlyStorageTex': + resourceBindingIsCompatible = IsStorageTextureResourceType(resourceType); + break; + default: + resourceBindingIsCompatible = info.resource === resourceType; + break; + } + t.expectValidationError(() => { + t.device.createBindGroup({ layout, entries: [{ binding: 0, resource }] }); + }, !resourceBindingIsCompatible); +}); + +g.test('texture_binding_must_have_correct_usage'). +desc('Tests that texture bindings must have the correct usage.'). +paramsSubcasesOnly((u) => +u // +.combine('entry', sampledAndStorageBindingEntries(false)). +combine('usage', kTextureUsages). +unless(({ entry, usage }) => { + const info = texBindingTypeInfo(entry); + // Can't create the texture for this (usage=STORAGE_BINDING and sampleCount=4), so skip. + return usage === GPUConst.TextureUsage.STORAGE_BINDING && info.resource === 'sampledTexMS'; +}) +). +fn((t) => { + const { entry, usage } = t.params; + const info = texBindingTypeInfo(entry); + + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, ...entry }] }); -g.test('texture_binding_must_have_correct_usage') - .desc('Tests that texture bindings must have the correct usage.') - .paramsSubcasesOnly(u => - u // - .combine('entry', sampledAndStorageBindingEntries(false)) - .combine('usage', kTextureUsages) - .unless(({ entry, usage }) => { - const info = texBindingTypeInfo(entry); - // Can't create the texture for this (usage=STORAGE_BINDING and sampleCount=4), so skip. - return usage === GPUConst.TextureUsage.STORAGE_BINDING && info.resource === 'sampledTexMS'; - }) - ) - .fn(t => { - const { entry, usage } = t.params; - const info = texBindingTypeInfo(entry); + // The `RENDER_ATTACHMENT` usage must be specified if sampleCount > 1 according to WebGPU SPEC. + const appliedUsage = + info.resource === 'sampledTexMS' ? usage | GPUConst.TextureUsage.RENDER_ATTACHMENT : usage; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, ...entry }], + const descriptor = { + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: 'r32float', + usage: appliedUsage, + sampleCount: info.resource === 'sampledTexMS' ? 4 : 1 + }; + const resource = t.device.createTexture(descriptor).createView(); + + const shouldError = (usage & info.usage) === 0; + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource }], + layout: bindGroupLayout }); + }, shouldError); +}); - // The `RENDER_ATTACHMENT` usage must be specified if sampleCount > 1 according to WebGPU SPEC. - const appliedUsage = - info.resource === 'sampledTexMS' ? usage | GPUConst.TextureUsage.RENDER_ATTACHMENT : usage; - - const descriptor = { - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: appliedUsage, - sampleCount: info.resource === 'sampledTexMS' ? 4 : 1, - }; - const resource = t.device.createTexture(descriptor).createView(); - - const shouldError = (usage & info.usage) === 0; - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource }], - layout: bindGroupLayout, - }); - }, shouldError); - }); - -g.test('texture_must_have_correct_component_type') - .desc( - ` +g.test('texture_must_have_correct_component_type'). +desc( + ` Tests that texture bindings must have a format that matches the sample type specified in the BindGroupLayout. - Tests a compatible format for every sample type - Tests an incompatible format for every sample type` - ) - .params(u => u.combine('sampleType', ['float', 'sint', 'uint'])) - .fn(t => { - const { sampleType } = t.params; +). +params((u) => u.combine('sampleType', ['float', 'sint', 'uint'])). +fn((t) => { + const { sampleType } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - texture: { sampleType }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + texture: { sampleType } + }] - let format; - if (sampleType === 'float') { - format = 'r8unorm'; - } else if (sampleType === 'sint') { - format = 'r8sint'; - } else if (sampleType === 'uint') { - format = 'r8uint'; - } else { - unreachable('Unexpected texture component type'); - } - - const goodDescriptor = { - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - // Control case - t.device.createBindGroup({ - entries: [ - { - binding: 0, - resource: t.device.createTexture(goodDescriptor).createView(), - }, - ], - - layout: bindGroupLayout, - }); - - function* mismatchedTextureFormats() { - if (sampleType !== 'float') { - yield 'r8unorm'; - } - if (sampleType !== 'sint') { - yield 'r8sint'; - } - if (sampleType !== 'uint') { - yield 'r8uint'; - } - } - - // Mismatched texture binding formats are not valid. - for (const mismatchedTextureFormat of mismatchedTextureFormats()) { - const badDescriptor = clone(goodDescriptor); - badDescriptor.format = mismatchedTextureFormat; - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: t.device.createTexture(badDescriptor).createView() }], - layout: bindGroupLayout, - }); - }); - } }); -g.test('texture_must_have_correct_dimension') - .desc( - ` + let format; + if (sampleType === 'float') { + format = 'r8unorm'; + } else if (sampleType === 'sint') { + format = 'r8sint'; + } else if (sampleType === 'uint') { + format = 'r8uint'; + } else { + unreachable('Unexpected texture component type'); + } + + const goodDescriptor = { + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + // Control case + t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: t.device.createTexture(goodDescriptor).createView() + }], + + layout: bindGroupLayout + }); + + function* mismatchedTextureFormats() { + if (sampleType !== 'float') { + yield 'r8unorm'; + } + if (sampleType !== 'sint') { + yield 'r8sint'; + } + if (sampleType !== 'uint') { + yield 'r8uint'; + } + } + + // Mismatched texture binding formats are not valid. + for (const mismatchedTextureFormat of mismatchedTextureFormats()) { + const badDescriptor = clone(goodDescriptor); + badDescriptor.format = mismatchedTextureFormat; + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: t.device.createTexture(badDescriptor).createView() }], + layout: bindGroupLayout + }); + }); + } +}); + +g.test('texture_must_have_correct_dimension'). +desc( + ` Test that bound texture views match the dimensions supplied in the BindGroupLayout - Test for every GPUTextureViewDimension - Test for both TEXTURE_BINDING and STORAGE_BINDING. ` - ) - .params(u => - u - .combine('usage', [ - GPUConst.TextureUsage.TEXTURE_BINDING, - GPUConst.TextureUsage.STORAGE_BINDING, - ]) - .combine('viewDimension', kTextureViewDimensions) - .unless( - p => - p.usage === GPUConst.TextureUsage.STORAGE_BINDING && - (p.viewDimension === 'cube' || p.viewDimension === 'cube-array') - ) - .beginSubcases() - .combine('dimension', kTextureViewDimensions) - ) - .fn(t => { - const { usage, viewDimension, dimension } = t.params; +). +params((u) => +u. +combine('usage', [ +GPUConst.TextureUsage.TEXTURE_BINDING, +GPUConst.TextureUsage.STORAGE_BINDING] +). +combine('viewDimension', kTextureViewDimensions). +unless( + (p) => + p.usage === GPUConst.TextureUsage.STORAGE_BINDING && ( + p.viewDimension === 'cube' || p.viewDimension === 'cube-array') +). +beginSubcases(). +combine('dimension', kTextureViewDimensions) +). +fn((t) => { + const { usage, viewDimension, dimension } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - usage === GPUTextureUsage.TEXTURE_BINDING - ? { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - texture: { viewDimension }, - } - : { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - storageTexture: { access: 'write-only', format: 'rgba8unorm', viewDimension }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + usage === GPUTextureUsage.TEXTURE_BINDING ? + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + texture: { viewDimension } + } : + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + storageTexture: { access: 'write-only', format: 'rgba8unorm', viewDimension } + }] - let height = 16; - let depthOrArrayLayers = 6; - if (dimension === '1d') { - height = 1; - depthOrArrayLayers = 1; - } - - const texture = t.device.createTexture({ - size: { width: 16, height, depthOrArrayLayers }, - format: 'rgba8unorm', - usage, - dimension: getTextureDimensionFromView(dimension), - }); - - t.skipIfTextureViewDimensionNotSupported(viewDimension, dimension); - - const shouldError = viewDimension !== dimension; - const textureView = texture.createView({ dimension }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: textureView }], - layout: bindGroupLayout, - }); - }, shouldError); }); -g.test('multisampled_validation') - .desc( - ` + let height = 16; + let depthOrArrayLayers = 6; + if (dimension === '1d') { + height = 1; + depthOrArrayLayers = 1; + } + + const texture = t.device.createTexture({ + size: { width: 16, height, depthOrArrayLayers }, + format: 'rgba8unorm', + usage, + dimension: getTextureDimensionFromView(dimension) + }); + + t.skipIfTextureViewDimensionNotSupported(viewDimension, dimension); + if (t.isCompatibility && texture.dimension === '2d') { + if (depthOrArrayLayers === 1) { + t.skipIf( + viewDimension !== '2d', + '1 layer 2d textures default to textureBindingViewDimension: "2d" in compat mode' + ); + } else { + t.skipIf( + viewDimension !== '2d-array', + '> 1 layer 2d textures default to textureBindingViewDimension "2d-array" in compat mode' + ); + } + } + + const shouldError = viewDimension !== dimension; + const textureView = texture.createView({ dimension }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: textureView }], + layout: bindGroupLayout + }); + }, shouldError); +}); + +g.test('multisampled_validation'). +desc( + ` Test that the sample count of the texture is greater than 1 if the BindGroup entry's multisampled is true. Otherwise, the texture's sampleCount should be 1. ` - ) - .params(u => - u // - .combine('multisampled', [true, false]) - .beginSubcases() - .combine('sampleCount', [1, 4]) - ) - .fn(t => { - const { multisampled, sampleCount } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - texture: { multisampled, sampleType: multisampled ? 'unfilterable-float' : undefined }, - }, - ], - }); +). +params((u) => +u // +.combine('multisampled', [true, false]). +beginSubcases(). +combine('sampleCount', [1, 4]) +). +fn((t) => { + const { multisampled, sampleCount } = t.params; + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + texture: { multisampled, sampleType: multisampled ? 'unfilterable-float' : undefined } + }] - const texture = t.device.createTexture({ - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount, - }); - - const isValid = (!multisampled && sampleCount === 1) || (multisampled && sampleCount > 1); - - const textureView = texture.createView(); - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: textureView }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('buffer_offset_and_size_for_bind_groups_match') - .desc( - ` + const texture = t.device.createTexture({ + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount + }); + + const isValid = !multisampled && sampleCount === 1 || multisampled && sampleCount > 1; + + const textureView = texture.createView(); + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: textureView }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('buffer_offset_and_size_for_bind_groups_match'). +desc( + ` Test that a buffer binding's [offset, offset + size) must be contained in the BindGroup entry's buffer. - Test for various offsets and sizes` - ) - .paramsSubcasesOnly([ - { offset: 0, size: 512, _success: true }, // offset 0 is valid - { offset: 256, size: 256, _success: true }, // offset 256 (aligned) is valid +). +paramsSubcasesOnly([ +{ offset: 0, size: 512, _success: true }, // offset 0 is valid +{ offset: 256, size: 256, _success: true }, // offset 256 (aligned) is valid - // Touching the end of the buffer - { offset: 0, size: 1024, _success: true }, - { offset: 0, size: undefined, _success: true }, - { offset: 256 * 3, size: 256, _success: true }, - { offset: 256 * 3, size: undefined, _success: true }, +// Touching the end of the buffer +{ offset: 0, size: 1024, _success: true }, +{ offset: 0, size: undefined, _success: true }, +{ offset: 256 * 3, size: 256, _success: true }, +{ offset: 256 * 3, size: undefined, _success: true }, - // Zero-sized bindings - { offset: 0, size: 0, _success: false }, - { offset: 256, size: 0, _success: false }, - { offset: 1024, size: 0, _success: false }, - { offset: 1024, size: undefined, _success: false }, +// Zero-sized bindings +{ offset: 0, size: 0, _success: false }, +{ offset: 256, size: 0, _success: false }, +{ offset: 1024, size: 0, _success: false }, +{ offset: 1024, size: undefined, _success: false }, - // Unaligned buffer offset is invalid - { offset: 1, size: 256, _success: false }, - { offset: 1, size: undefined, _success: false }, - { offset: 128, size: 256, _success: false }, - { offset: 255, size: 256, _success: false }, +// Unaligned buffer offset is invalid +{ offset: 1, size: 256, _success: false }, +{ offset: 1, size: undefined, _success: false }, +{ offset: 128, size: 256, _success: false }, +{ offset: 255, size: 256, _success: false }, - // Out-of-bounds - { offset: 256 * 5, size: 0, _success: false }, // offset is OOB - { offset: 0, size: 256 * 5, _success: false }, // size is OOB - { offset: 1024, size: 1, _success: false }, // offset+size is OOB - ]) - .fn(t => { - const { offset, size, _success } = t.params; +// Out-of-bounds +{ offset: 256 * 5, size: 0, _success: false }, // offset is OOB +{ offset: 0, size: 256 * 5, _success: false }, // size is OOB +{ offset: 1024, size: 1, _success: false } // offset+size is OOB +]). +fn((t) => { + const { offset, size, _success } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }], - }); - - const buffer = t.device.createBuffer({ - size: 1024, - usage: GPUBufferUsage.STORAGE, - }); - - const descriptor = { - entries: [ - { - binding: 0, - resource: { buffer, offset, size }, - }, - ], - - layout: bindGroupLayout, - }; - - if (_success) { - // Control case - t.device.createBindGroup(descriptor); - } else { - // Buffer offset and/or size don't match in bind groups. - t.expectValidationError(() => { - t.device.createBindGroup(descriptor); - }); - } + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }] }); -g.test('minBindingSize') - .desc('Tests that minBindingSize is correctly enforced.') - .paramsSubcasesOnly(u => - u // - .combine('minBindingSize', [undefined, 4, 8, 256]) - .expand('size', ({ minBindingSize }) => - minBindingSize !== undefined - ? [minBindingSize - 4, minBindingSize, minBindingSize + 4] - : [4, 256] - ) - ) - .fn(t => { - const { size, minBindingSize } = t.params; + const buffer = t.device.createBuffer({ + size: 1024, + usage: GPUBufferUsage.STORAGE + }); - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - buffer: { - type: 'storage', - minBindingSize, - }, - }, - ], - }); + const descriptor = { + entries: [ + { + binding: 0, + resource: { buffer, offset, size } + }], - const storageBuffer = t.device.createBuffer({ - size, - usage: GPUBufferUsage.STORAGE, - }); + layout: bindGroupLayout + }; + if (_success) { + // Control case + t.device.createBindGroup(descriptor); + } else { + // Buffer offset and/or size don't match in bind groups. t.expectValidationError(() => { + t.device.createBindGroup(descriptor); + }); + } +}); + +g.test('minBindingSize'). +desc('Tests that minBindingSize is correctly enforced.'). +paramsSubcasesOnly((u) => +u // +.combine('minBindingSize', [undefined, 4, 8, 256]). +expand('size', ({ minBindingSize }) => +minBindingSize !== undefined ? +[minBindingSize - 4, minBindingSize, minBindingSize + 4] : +[4, 256] +) +). +fn((t) => { + const { size, minBindingSize } = t.params; + + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + buffer: { + type: 'storage', + minBindingSize + } + }] + + }); + + const storageBuffer = t.device.createBuffer({ + size, + usage: GPUBufferUsage.STORAGE + }); + + t.expectValidationError( + () => { t.device.createBindGroup({ layout: bindGroupLayout, entries: [ - { - binding: 0, - resource: { - buffer: storageBuffer, - }, - }, - ], - }); - }, minBindingSize !== undefined && size < minBindingSize); - }); - -g.test('buffer,resource_state') - .desc('Test bind group creation with various buffer resource states') - .paramsSubcasesOnly(u => - u.combine('state', kResourceStates).combine('entry', bufferBindingEntries(true)) - ) - .fn(t => { - const { state, entry } = t.params; - - assert(entry.buffer !== undefined); - const info = bufferBindingTypeInfo(entry.buffer); - - const bgl = t.device.createBindGroupLayout({ - entries: [ - { - ...entry, - binding: 0, - visibility: info.validStages, - }, - ], - }); - - const buffer = t.createBufferWithState(state, { - usage: info.usage, - size: 4, - }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - layout: bgl, - entries: [ - { - binding: 0, - resource: { - buffer, - }, - }, - ], - }); - }, state === 'invalid'); - }); - -g.test('texture,resource_state') - .desc('Test bind group creation with various texture resource states') - .paramsSubcasesOnly(u => - u - .combine('state', kResourceStates) - .combine('entry', sampledAndStorageBindingEntries(true, 'rgba8unorm')) - ) - .fn(t => { - const { state, entry } = t.params; - const info = texBindingTypeInfo(entry); - - const bgl = t.device.createBindGroupLayout({ - entries: [ - { - ...entry, - binding: 0, - visibility: info.validStages, - }, - ], - }); - - // The `RENDER_ATTACHMENT` usage must be specified if sampleCount > 1 according to WebGPU SPEC. - const usage = entry.texture?.multisampled - ? info.usage | GPUConst.TextureUsage.RENDER_ATTACHMENT - : info.usage; - const texture = t.createTextureWithState(state, { - usage, - size: [1, 1], - format: 'rgba8unorm', - sampleCount: entry.texture?.multisampled ? 4 : 1, - }); - - let textureView; - t.expectValidationError(() => { - textureView = texture.createView(); - }, state === 'invalid'); - - t.expectValidationError(() => { - t.device.createBindGroup({ - layout: bgl, - entries: [ - { - binding: 0, - resource: textureView, - }, - ], - }); - }, state === 'invalid'); - }); - -g.test('bind_group_layout,device_mismatch') - .desc( - 'Tests createBindGroup cannot be called with a bind group layout created from another device' - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const mismatched = t.params.mismatched; - - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - - const bgl = sourceDevice.createBindGroupLayout({ - entries: [ { binding: 0, - visibility: GPUConst.ShaderStage.VERTEX, - buffer: {}, - }, - ], - }); + resource: { buffer: storageBuffer } + }] - t.expectValidationError(() => { - t.device.createBindGroup({ - layout: bgl, - entries: [ - { - binding: 0, - resource: { buffer: t.getUniformBuffer() }, - }, - ], }); - }, mismatched); + }, + minBindingSize !== undefined && size < minBindingSize + ); +}); + +g.test('buffer,resource_state'). +desc('Test bind group creation with various buffer resource states'). +paramsSubcasesOnly((u) => +u.combine('state', kResourceStates).combine('entry', bufferBindingEntries(true)) +). +fn((t) => { + const { state, entry } = t.params; + + assert(entry.buffer !== undefined); + const info = bufferBindingTypeInfo(entry.buffer); + + const bgl = t.device.createBindGroupLayout({ + entries: [ + { + ...entry, + binding: 0, + visibility: info.validStages + }] + }); -g.test('binding_resources,device_mismatch') - .desc( - ` + const buffer = t.createBufferWithState(state, { + usage: info.usage, + size: 4 + }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + layout: bgl, + entries: [ + { + binding: 0, + resource: { + buffer + } + }] + + }); + }, state === 'invalid'); +}); + +g.test('texture,resource_state'). +desc('Test bind group creation with various texture resource states'). +paramsSubcasesOnly((u) => +u.combine('state', kResourceStates).combine('entry', sampledAndStorageBindingEntries(true)) +). +fn((t) => { + const { state, entry } = t.params; + const info = texBindingTypeInfo(entry); + + const bgl = t.device.createBindGroupLayout({ + entries: [ + { + ...entry, + binding: 0, + visibility: info.validStages + }] + + }); + + // The `RENDER_ATTACHMENT` usage must be specified if sampleCount > 1 according to WebGPU SPEC. + const usage = entry.texture?.multisampled ? + info.usage | GPUConst.TextureUsage.RENDER_ATTACHMENT : + info.usage; + const format = entry.storageTexture !== undefined ? 'r32float' : 'rgba8unorm'; + const texture = t.createTextureWithState(state, { + usage, + size: [1, 1], + format, + sampleCount: entry.texture?.multisampled ? 4 : 1 + }); + + let textureView; + t.expectValidationError(() => { + textureView = texture.createView(); + }, state === 'invalid'); + + t.expectValidationError(() => { + t.device.createBindGroup({ + layout: bgl, + entries: [ + { + binding: 0, + resource: textureView + }] + + }); + }, state === 'invalid'); +}); + +g.test('bind_group_layout,device_mismatch'). +desc( + 'Tests createBindGroup cannot be called with a bind group layout created from another device' +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const mismatched = t.params.mismatched; + + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const bgl = sourceDevice.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUConst.ShaderStage.VERTEX, + buffer: {} + }] + + }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + layout: bgl, + entries: [ + { + binding: 0, + resource: { buffer: t.getUniformBuffer() } + }] + + }); + }, mismatched); +}); + +g.test('binding_resources,device_mismatch'). +desc( + ` Tests createBindGroup cannot be called with various resources created from another device Test with two resources to make sure all resources can be validated: - resource0 and resource1 from same device @@ -622,495 +648,498 @@ g.test('binding_resources,device_mismatch') TODO: test GPUExternalTexture as a resource ` - ) - .params(u => - u - .combine('entry', [ - { buffer: { type: 'storage' } }, - { sampler: { type: 'filtering' } }, - { texture: { multisampled: false } }, - { storageTexture: { access: 'write-only', format: 'rgba8unorm' } }, - ]) - .beginSubcases() - .combineWithParams([ - { resource0Mismatched: false, resource1Mismatched: false }, //control case - { resource0Mismatched: true, resource1Mismatched: false }, - { resource0Mismatched: false, resource1Mismatched: true }, - ]) - ) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { entry, resource0Mismatched, resource1Mismatched } = t.params; +). +params((u) => +u. +combine('entry', [ +{ buffer: { type: 'storage' } }, +{ sampler: { type: 'filtering' } }, +{ texture: { multisampled: false } }, +{ storageTexture: { access: 'write-only', format: 'r32float' } }, +{ storageTexture: { access: 'read-only', format: 'r32float' } }, +{ storageTexture: { access: 'read-write', format: 'r32float' } }] +). +beginSubcases(). +combineWithParams([ +{ resource0Mismatched: false, resource1Mismatched: false }, //control case +{ resource0Mismatched: true, resource1Mismatched: false }, +{ resource0Mismatched: false, resource1Mismatched: true }] +) +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { entry, resource0Mismatched, resource1Mismatched } = t.params; - const info = bindingTypeInfo(entry); + const info = bindingTypeInfo(entry); - const resource0 = resource0Mismatched - ? t.getDeviceMismatchedBindingResource(info.resource) - : t.getBindingResource(info.resource); - const resource1 = resource1Mismatched - ? t.getDeviceMismatchedBindingResource(info.resource) - : t.getBindingResource(info.resource); + const resource0 = resource0Mismatched ? + t.getDeviceMismatchedBindingResource(info.resource) : + t.getBindingResource(info.resource); + const resource1 = resource1Mismatched ? + t.getDeviceMismatchedBindingResource(info.resource) : + t.getBindingResource(info.resource); - const bgl = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: info.validStages, - ...entry, - }, - { - binding: 1, - visibility: info.validStages, - ...entry, - }, - ], - }); + const bgl = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: info.validStages, + ...entry + }, + { + binding: 1, + visibility: info.validStages, + ...entry + }] - t.expectValidationError(() => { - t.device.createBindGroup({ - layout: bgl, - entries: [ - { - binding: 0, - resource: resource0, - }, - { - binding: 1, - resource: resource1, - }, - ], - }); - }, resource0Mismatched || resource1Mismatched); }); -g.test('storage_texture,usage') - .desc( - ` + t.expectValidationError(() => { + t.device.createBindGroup({ + layout: bgl, + entries: [ + { + binding: 0, + resource: resource0 + }, + { + binding: 1, + resource: resource1 + }] + + }); + }, resource0Mismatched || resource1Mismatched); +}); + +g.test('storage_texture,usage'). +desc( + ` Test that the texture usage contains STORAGE_BINDING if the BindGroup entry defines storageTexture. ` - ) - .params(u => - u // - // If usage0 and usage1 are the same, the usage being test is a single usage. Otherwise, it's - // a combined usage. - .combine('usage0', kTextureUsages) - .combine('usage1', kTextureUsages) - ) - .fn(t => { - const { usage0, usage1 } = t.params; +). +params((u) => +u // +// If usage0 and usage1 are the same, the usage being test is a single usage. Otherwise, it's +// a combined usage. +.combine('usage0', kTextureUsages). +combine('usage1', kTextureUsages) +). +fn((t) => { + const { usage0, usage1 } = t.params; - const usage = usage0 | usage1; + const usage = usage0 | usage1; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - storageTexture: { access: 'write-only', format: 'rgba8unorm' }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + storageTexture: { access: 'write-only', format: 'rgba8unorm' } + }] - const texture = t.device.createTexture({ - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage, - }); - - const isValid = GPUTextureUsage.STORAGE_BINDING & usage; - - const textureView = texture.createView(); - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: textureView }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('storage_texture,mip_level_count') - .desc( - ` + const texture = t.device.createTexture({ + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage + }); + + const isValid = GPUTextureUsage.STORAGE_BINDING & usage; + + const textureView = texture.createView(); + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: textureView }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('storage_texture,mip_level_count'). +desc( + ` Test that the mip level count of the resource of the BindGroup entry as a descriptor is 1 if the BindGroup entry defines storageTexture. If the mip level count is not 1, a validation error should be generated. ` - ) - .params(u => - u // - .combine('baseMipLevel', [1, 2]) - .combine('mipLevelCount', [1, 2]) - ) - .fn(t => { - const { baseMipLevel, mipLevelCount } = t.params; +). +params((u) => +u // +.combine('baseMipLevel', [1, 2]). +combine('mipLevelCount', [1, 2]) +). +fn((t) => { + const { baseMipLevel, mipLevelCount } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - storageTexture: { access: 'write-only', format: 'rgba8unorm' }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + storageTexture: { access: 'write-only', format: 'rgba8unorm' } + }] - const MIP_LEVEL_COUNT = 4; - const texture = t.device.createTexture({ - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.STORAGE_BINDING, - mipLevelCount: MIP_LEVEL_COUNT, - }); - - const textureView = texture.createView({ baseMipLevel, mipLevelCount }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: textureView }], - layout: bindGroupLayout, - }); - }, mipLevelCount !== 1); }); -g.test('storage_texture,format') - .desc( - ` + const MIP_LEVEL_COUNT = 4; + const texture = t.device.createTexture({ + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.STORAGE_BINDING, + mipLevelCount: MIP_LEVEL_COUNT + }); + + const textureView = texture.createView({ baseMipLevel, mipLevelCount }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: textureView }], + layout: bindGroupLayout + }); + }, mipLevelCount !== 1); +}); + +g.test('storage_texture,format'). +desc( + ` Test that the format of the storage texture is equal to resource's descriptor format if the BindGroup entry defines storageTexture. ` - ) - .params(u => - u // - .combine('storageTextureFormat', kStorageTextureFormats) - .combine('resourceFormat', kStorageTextureFormats) - ) - .fn(t => { - const { storageTextureFormat, resourceFormat } = t.params; +). +params((u) => +u // +.combine('storageTextureFormat', kStorageTextureFormats). +combine('resourceFormat', kStorageTextureFormats) +). +beforeAllSubcases((t) => { + const { storageTextureFormat, resourceFormat } = t.params; + t.skipIfTextureFormatNotUsableAsStorageTexture(storageTextureFormat, resourceFormat); +}). +fn((t) => { + const { storageTextureFormat, resourceFormat } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - storageTexture: { access: 'write-only', format: storageTextureFormat }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + storageTexture: { access: 'write-only', format: storageTextureFormat } + }] - const texture = t.device.createTexture({ - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: resourceFormat, - usage: GPUTextureUsage.STORAGE_BINDING, - }); - - const isValid = storageTextureFormat === resourceFormat; - const textureView = texture.createView({ format: resourceFormat }); - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: textureView }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('buffer,usage') - .desc( - ` + const texture = t.device.createTexture({ + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: resourceFormat, + usage: GPUTextureUsage.STORAGE_BINDING + }); + + const isValid = storageTextureFormat === resourceFormat; + const textureView = texture.createView({ format: resourceFormat }); + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: textureView }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('buffer,usage'). +desc( + ` Test that the buffer usage contains 'UNIFORM' if the BindGroup entry defines buffer and it's type is 'uniform', and the buffer usage contains 'STORAGE' if the BindGroup entry's buffer type is 'storage'|read-only-storage'. ` - ) - .params(u => - u // - .combine('type', kBufferBindingTypes) - // If usage0 and usage1 are the same, the usage being test is a single usage. Otherwise, it's - // a combined usage. - .beginSubcases() - .combine('usage0', kBufferUsages) - .combine('usage1', kBufferUsages) - .unless( - ({ usage0, usage1 }) => - ((usage0 | usage1) & (GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.MAP_WRITE)) !== - 0 - ) - ) - .fn(t => { - const { type, usage0, usage1 } = t.params; +). +params((u) => +u // +.combine('type', kBufferBindingTypes) +// If usage0 and usage1 are the same, the usage being test is a single usage. Otherwise, it's +// a combined usage. +.beginSubcases(). +combine('usage0', kBufferUsages). +combine('usage1', kBufferUsages). +unless( + ({ usage0, usage1 }) => + ((usage0 | usage1) & (GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.MAP_WRITE)) !== + 0 +) +). +fn((t) => { + const { type, usage0, usage1 } = t.params; - const usage = usage0 | usage1; + const usage = usage0 | usage1; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type } + }] - const buffer = t.device.createBuffer({ - size: 4, - usage, - }); - - let isValid = false; - if (type === 'uniform') { - isValid = GPUBufferUsage.UNIFORM & usage ? true : false; - } else if (type === 'storage' || type === 'read-only-storage') { - isValid = GPUBufferUsage.STORAGE & usage ? true : false; - } - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: { buffer } }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('buffer,resource_offset') - .desc( - ` + const buffer = t.device.createBuffer({ + size: 4, + usage + }); + + let isValid = false; + if (type === 'uniform') { + isValid = GPUBufferUsage.UNIFORM & usage ? true : false; + } else if (type === 'storage' || type === 'read-only-storage') { + isValid = GPUBufferUsage.STORAGE & usage ? true : false; + } + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: { buffer } }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('buffer,resource_offset'). +desc( + ` Test that the resource.offset of the BindGroup entry is a multiple of limits. 'minUniformBufferOffsetAlignment|minStorageBufferOffsetAlignment' if the BindGroup entry defines buffer and the buffer type is 'uniform|storage|read-only-storage'. ` - ) - .params(u => - u // - .combine('type', kBufferBindingTypes) - .beginSubcases() - .combine('offsetAddMult', [ - { add: 0, mult: 0 }, - { add: 0, mult: 0.5 }, - { add: 0, mult: 1.5 }, - { add: 2, mult: 0 }, - ]) - ) - .fn(t => { - const { type, offsetAddMult } = t.params; - const minAlignment = - t.device.limits[ - type === 'uniform' ? 'minUniformBufferOffsetAlignment' : 'minStorageBufferOffsetAlignment' - ]; +). +params((u) => +u // +.combine('type', kBufferBindingTypes). +beginSubcases(). +combine('offsetAddMult', [ +{ add: 0, mult: 0 }, +{ add: 0, mult: 0.5 }, +{ add: 0, mult: 1.5 }, +{ add: 2, mult: 0 }] +) +). +fn((t) => { + const { type, offsetAddMult } = t.params; + const minAlignment = + t.device.limits[ + type === 'uniform' ? 'minUniformBufferOffsetAlignment' : 'minStorageBufferOffsetAlignment']; - const offset = makeValueTestVariant(minAlignment, offsetAddMult); + const offset = makeValueTestVariant(minAlignment, offsetAddMult); - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type } + }] - const usage = type === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE; - const isValid = offset % minAlignment === 0; - - const buffer = t.device.createBuffer({ - size: 1024, - usage, - }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: { buffer, offset } }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('buffer,resource_binding_size') - .desc( - ` + const usage = type === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE; + const isValid = offset % minAlignment === 0; + + const buffer = t.device.createBuffer({ + size: 1024, + usage + }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: { buffer, offset } }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('buffer,resource_binding_size'). +desc( + ` Test that the buffer binding size of the BindGroup entry is equal to or less than limits. 'maxUniformBufferBindingSize|maxStorageBufferBindingSize' if the BindGroup entry defines buffer and the buffer type is 'uniform|storage|read-only-storage'. ` - ) - .params(u => - u - .combine('type', kBufferBindingTypes) - .beginSubcases() - // Test a size of 1 (for uniform buffer) or 4 (for storage and read-only storage buffer) - // then values just within and just above the limit. - .combine('bindingSize', [ - { base: 1, limit: 0 }, - { base: 0, limit: 1 }, - { base: 1, limit: 1 }, - ]) - ) - .fn(t => { - const { - type, - bindingSize: { base, limit }, - } = t.params; - const mult = type === 'uniform' ? 1 : 4; - const maxBindingSize = - t.device.limits[ - type === 'uniform' ? 'maxUniformBufferBindingSize' : 'maxStorageBufferBindingSize' - ]; +). +params((u) => +u. +combine('type', kBufferBindingTypes). +beginSubcases() +// Test a size of 1 (for uniform buffer) or 4 (for storage and read-only storage buffer) +// then values just within and just above the limit. +.combine('bindingSize', [ +{ base: 1, limit: 0 }, +{ base: 0, limit: 1 }, +{ base: 1, limit: 1 }] +) +). +fn((t) => { + const { + type, + bindingSize: { base, limit } + } = t.params; + const mult = type === 'uniform' ? 1 : 4; + const maxBindingSize = + t.device.limits[ + type === 'uniform' ? 'maxUniformBufferBindingSize' : 'maxStorageBufferBindingSize']; - const bindingSize = base * mult + maxBindingSize * limit; + const bindingSize = base * mult + maxBindingSize * limit; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type } + }] - const usage = type === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE; - const isValid = bindingSize <= maxBindingSize; - - // MAINTENANCE_TODO: Allocating the max size seems likely to fail. Refactor test. - const buffer = t.device.createBuffer({ - size: maxBindingSize, - usage, - }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: { buffer, size: bindingSize } }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('buffer,effective_buffer_binding_size') - .desc( - ` + const usage = type === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE; + const isValid = bindingSize <= maxBindingSize; + + // MAINTENANCE_TODO: Allocating the max size seems likely to fail. Refactor test. + const buffer = t.device.createBuffer({ + size: maxBindingSize, + usage + }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: { buffer, size: bindingSize } }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('buffer,effective_buffer_binding_size'). +desc( + ` Test that the effective buffer binding size of the BindGroup entry must be a multiple of 4 if the buffer type is 'storage|read-only-storage', while there is no such restriction on uniform buffers. ` - ) - .params(u => - u - .combine('type', kBufferBindingTypes) - .beginSubcases() - .combine('offsetMult', [0, 1]) - .combine('bufferSizeAddition', [8, 10]) - .combine('bindingSize', [undefined, 2, 4, 6]) - ) - .fn(t => { - const { type, offsetMult, bufferSizeAddition, bindingSize } = t.params; - const minAlignment = - t.device.limits[ - type === 'uniform' ? 'minUniformBufferOffsetAlignment' : 'minStorageBufferOffsetAlignment' - ]; +). +params((u) => +u. +combine('type', kBufferBindingTypes). +beginSubcases(). +combine('offsetMult', [0, 1]). +combine('bufferSizeAddition', [8, 10]). +combine('bindingSize', [undefined, 2, 4, 6]) +). +fn((t) => { + const { type, offsetMult, bufferSizeAddition, bindingSize } = t.params; + const minAlignment = + t.device.limits[ + type === 'uniform' ? 'minUniformBufferOffsetAlignment' : 'minStorageBufferOffsetAlignment']; - const offset = minAlignment * offsetMult; - const bufferSize = minAlignment + bufferSizeAddition; + const offset = minAlignment * offsetMult; + const bufferSize = minAlignment + bufferSizeAddition; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type } + }] - const effectiveBindingSize = bindingSize ?? bufferSize - offset; - let usage, isValid; - if (type === 'uniform') { - usage = GPUBufferUsage.UNIFORM; - isValid = true; - } else { - usage = GPUBufferUsage.STORAGE; - isValid = effectiveBindingSize % 4 === 0; - } - - const buffer = t.device.createBuffer({ - size: bufferSize, - usage, - }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: { buffer, offset, size: bindingSize } }], - layout: bindGroupLayout, - }); - }, !isValid); }); -g.test('sampler,device_mismatch') - .desc(`Tests createBindGroup cannot be called with a sampler created from another device.`) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; + const effectiveBindingSize = bindingSize ?? bufferSize - offset; + let usage, isValid; + if (type === 'uniform') { + usage = GPUBufferUsage.UNIFORM; + isValid = true; + } else { + usage = GPUBufferUsage.STORAGE; + isValid = effectiveBindingSize % 4 === 0; + } - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - sampler: { type: 'filtering' }, - }, - ], - }); - - const sampler = sourceDevice.createSampler(); - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: sampler }], - layout: bindGroupLayout, - }); - }, mismatched); + const buffer = t.device.createBuffer({ + size: bufferSize, + usage }); -g.test('sampler,compare_function_with_binding_type') - .desc( - ` + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: { buffer, offset, size: bindingSize } }], + layout: bindGroupLayout + }); + }, !isValid); +}); + +g.test('sampler,device_mismatch'). +desc(`Tests createBindGroup cannot be called with a sampler created from another device.`). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + sampler: { type: 'filtering' } + }] + + }); + + const sampler = sourceDevice.createSampler(); + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: sampler }], + layout: bindGroupLayout + }); + }, mismatched); +}); + +g.test('sampler,compare_function_with_binding_type'). +desc( + ` Test that the sampler of the BindGroup has a 'compareFunction' value if the sampler type of the BindGroupLayout is 'comparison'. Other sampler types should not have 'compare' field in the descriptor of the sampler. ` - ) - .params(u => - u // - .combine('bgType', kSamplerBindingTypes) - .beginSubcases() - .combine('compareFunction', [undefined, ...kCompareFunctions]) - ) - .fn(t => { - const { bgType, compareFunction } = t.params; +). +params((u) => +u // +.combine('bgType', kSamplerBindingTypes). +beginSubcases(). +combine('compareFunction', [undefined, ...kCompareFunctions]) +). +fn((t) => { + const { bgType, compareFunction } = t.params; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - sampler: { type: bgType }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + sampler: { type: bgType } + }] - const isValid = - bgType === 'comparison' ? compareFunction !== undefined : compareFunction === undefined; - - const sampler = t.device.createSampler({ compare: compareFunction }); - - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: sampler }], - layout: bindGroupLayout, - }); - }, !isValid); }); + + const isValid = + bgType === 'comparison' ? compareFunction !== undefined : compareFunction === undefined; + + const sampler = t.device.createSampler({ compare: compareFunction }); + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: sampler }], + layout: bindGroupLayout + }); + }, !isValid); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroupLayout.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroupLayout.spec.js index 5c9994833ae..b5d98f8d44d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroupLayout.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createBindGroupLayout.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` createBindGroupLayout validation tests. TODO: make sure tests are complete. -`; -import { kUnitCaseParamsBuilder } from '../../../common/framework/params_builder.js'; +`;import { kUnitCaseParamsBuilder } from '../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; import { kShaderStages, @@ -16,8 +15,9 @@ import { allBindingEntries, bindingTypeInfo, bufferBindingTypeInfo, - kBufferBindingTypes, -} from '../../capability_info.js'; + kBufferBindingTypes } from + +'../../capability_info.js'; import { kAllTextureFormats, kTextureFormatInfo } from '../../format_info.js'; import { ValidationTest } from './validation_test.js'; @@ -28,240 +28,245 @@ function clone(descriptor) { export const g = makeTestGroup(ValidationTest); -g.test('duplicate_bindings') - .desc('Test that uniqueness of binding numbers across entries is enforced.') - .paramsSubcasesOnly([ - { bindings: [0, 1], _valid: true }, - { bindings: [0, 0], _valid: false }, - ]) - .fn(t => { - const { bindings, _valid } = t.params; - const entries = []; +g.test('duplicate_bindings'). +desc('Test that uniqueness of binding numbers across entries is enforced.'). +paramsSubcasesOnly([ +{ bindings: [0, 1], _valid: true }, +{ bindings: [0, 0], _valid: false }] +). +fn((t) => { + const { bindings, _valid } = t.params; + const entries = []; - for (const binding of bindings) { - entries.push({ - binding, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'storage' }, - }); - } + for (const binding of bindings) { + entries.push({ + binding, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'storage' } + }); + } - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries, - }); - }, !_valid); - }); + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries + }); + }, !_valid); +}); -g.test('maximum_binding_limit') - .desc( - ` +g.test('maximum_binding_limit'). +desc( + ` Test that a validation error is generated if the binding number exceeds the maximum binding limit. TODO: Need to also test with higher limits enabled on the device, once we have a way to do that. ` - ) - .paramsSubcasesOnly(u => - u.combine('bindingVariant', [1, 4, 8, 256, 'default', 'default-minus-one']) - ) - .fn(t => { - const { bindingVariant } = t.params; - const entries = []; +). +paramsSubcasesOnly((u) => +u.combine('bindingVariant', [1, 4, 8, 256, 'default', 'default-minus-one']) +). +fn((t) => { + const { bindingVariant } = t.params; + const entries = []; - const binding = - bindingVariant === 'default' - ? t.device.limits.maxBindingsPerBindGroup - : bindingVariant === 'default-minus-one' - ? t.device.limits.maxBindingsPerBindGroup - 1 - : bindingVariant; + const binding = + bindingVariant === 'default' ? + t.device.limits.maxBindingsPerBindGroup : + bindingVariant === 'default-minus-one' ? + t.device.limits.maxBindingsPerBindGroup - 1 : + bindingVariant; - entries.push({ - binding, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'storage' }, - }); - - const success = binding < t.device.limits.maxBindingsPerBindGroup; - - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries, - }); - }, !success); + entries.push({ + binding, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'storage' } }); -g.test('visibility') - .desc( - ` + const success = binding < t.device.limits.maxBindingsPerBindGroup; + + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries + }); + }, !success); +}); + +g.test('visibility'). +desc( + ` Test that only the appropriate combinations of visibilities are allowed for each resource type. - Test each possible combination of shader stage visibilities. - Test each type of bind group resource.` - ) - .params(u => - u - .combine('visibility', kShaderStageCombinations) - .beginSubcases() - .combine('entry', allBindingEntries(false)) - ) - .fn(t => { - const { visibility, entry } = t.params; - const info = bindingTypeInfo(entry); +). +params((u) => +u. +combine('visibility', kShaderStageCombinations). +beginSubcases(). +combine('entry', allBindingEntries(false)) +). +fn((t) => { + const { visibility, entry } = t.params; + const info = bindingTypeInfo(entry); - const success = (visibility & ~info.validStages) === 0; + const success = (visibility & ~info.validStages) === 0; - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility, ...entry }], - }); - }, !success); - }); + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility, ...entry }] + }); + }, !success); +}); -g.test('visibility,VERTEX_shader_stage_buffer_type') - .desc( - ` +g.test('visibility,VERTEX_shader_stage_buffer_type'). +desc( + ` Test that a validation error is generated if the buffer type is 'storage' when the visibility of the entry includes VERTEX. ` - ) - .params(u => - u // - .combine('shaderStage', kShaderStageCombinations) - .beginSubcases() - .combine('type', kBufferBindingTypes) - ) - .fn(t => { - const { shaderStage, type } = t.params; +). +params((u) => +u // +.combine('shaderStage', kShaderStageCombinations). +beginSubcases(). +combine('type', kBufferBindingTypes) +). +fn((t) => { + const { shaderStage, type } = t.params; - const success = !(type === 'storage' && shaderStage & GPUShaderStage.VERTEX); + const success = !(type === 'storage' && shaderStage & GPUShaderStage.VERTEX); - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: shaderStage, - buffer: { type }, - }, - ], - }); - }, !success); - }); + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: shaderStage, + buffer: { type } + }] -g.test('visibility,VERTEX_shader_stage_storage_texture_access') - .desc( - ` + }); + }, !success); +}); + +g.test('visibility,VERTEX_shader_stage_storage_texture_access'). +desc( + ` Test that a validation error is generated if the access value is 'write-only' when the visibility of the entry includes VERTEX. ` - ) - .params(u => - u // - .combine('shaderStage', kShaderStageCombinations) - .beginSubcases() - .combine('access', [undefined, ...kStorageTextureAccessValues]) - ) - .fn(t => { - const { shaderStage, access } = t.params; +). +params((u) => +u // +.combine('shaderStage', kShaderStageCombinations). +beginSubcases(). +combine('access', [undefined, ...kStorageTextureAccessValues]) +). +fn((t) => { + const { shaderStage, access } = t.params; - const success = !( - (access ?? 'write-only') === 'write-only' && shaderStage & GPUShaderStage.VERTEX - ); + const appliedAccess = access ?? 'write-only'; + const success = !( + // If visibility includes VERETX, storageTexture.access must be "read-only" + shaderStage & GPUShaderStage.VERTEX && appliedAccess !== 'read-only'); - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: shaderStage, - storageTexture: { access, format: 'rgba8unorm' }, - }, - ], - }); - }, !success); - }); -g.test('multisampled_validation') - .desc( - ` + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: shaderStage, + storageTexture: { access, format: 'r32uint' } + }] + + }); + }, !success); +}); + +g.test('multisampled_validation'). +desc( + ` Test that multisampling is only allowed if view dimensions is "2d" and the sampleType is not "float". ` - ) - .params(u => - u // - .combine('viewDimension', [undefined, ...kTextureViewDimensions]) - .beginSubcases() - .combine('sampleType', [undefined, ...kTextureSampleTypes]) - ) - .fn(t => { - const { viewDimension, sampleType } = t.params; +). +params((u) => +u // +.combine('viewDimension', [undefined, ...kTextureViewDimensions]). +beginSubcases(). +combine('sampleType', [undefined, ...kTextureSampleTypes]) +). +fn((t) => { + const { viewDimension, sampleType } = t.params; - const success = - (viewDimension === '2d' || viewDimension === undefined) && - (sampleType ?? 'float') !== 'float'; + const success = + (viewDimension === '2d' || viewDimension === undefined) && + (sampleType ?? 'float') !== 'float'; - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - texture: { multisampled: true, viewDimension, sampleType }, - }, - ], - }); - }, !success); - }); + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + texture: { multisampled: true, viewDimension, sampleType } + }] -g.test('max_dynamic_buffers') - .desc( - ` + }); + }, !success); +}); + +g.test('max_dynamic_buffers'). +desc( + ` Test that limits on the maximum number of dynamic buffers are enforced. - Test creation of a bind group layout using the maximum number of dynamic buffers works. - Test creation of a bind group layout using the maximum number of dynamic buffers + 1 fails. - TODO(#230): Update to enforce per-stage and per-pipeline-layout limits on BGLs as well.` - ) - .params(u => - u - .combine('type', kBufferBindingTypes) - .beginSubcases() - .combine('extraDynamicBuffers', [0, 1]) - .combine('staticBuffers', [0, 1]) - ) - .fn(t => { - const { type, extraDynamicBuffers, staticBuffers } = t.params; - const info = bufferBindingTypeInfo({ type }); +). +params((u) => +u. +combine('type', kBufferBindingTypes). +beginSubcases(). +combine('extraDynamicBuffers', [0, 1]). +combine('staticBuffers', [0, 1]) +). +fn((t) => { + const { type, extraDynamicBuffers, staticBuffers } = t.params; + const info = bufferBindingTypeInfo({ type }); - const limitName = info.perPipelineLimitClass.maxDynamicLimit; - const bufferCount = limitName ? t.getDefaultLimit(limitName) : 0; - const dynamicBufferCount = bufferCount + extraDynamicBuffers; - const perStageLimit = t.getDefaultLimit(info.perStageLimitClass.maxLimit); + const limitName = info.perPipelineLimitClass.maxDynamicLimit; + const bufferCount = limitName ? t.getDefaultLimit(limitName) : 0; + const dynamicBufferCount = bufferCount + extraDynamicBuffers; + const perStageLimit = t.getDefaultLimit(info.perStageLimitClass.maxLimit); - const entries = []; - for (let i = 0; i < dynamicBufferCount; i++) { - entries.push({ - binding: i, - visibility: GPUShaderStage.COMPUTE, - buffer: { type, hasDynamicOffset: true }, - }); - } + const entries = []; + for (let i = 0; i < dynamicBufferCount; i++) { + entries.push({ + binding: i, + visibility: GPUShaderStage.COMPUTE, + buffer: { type, hasDynamicOffset: true } + }); + } - for (let i = dynamicBufferCount; i < dynamicBufferCount + staticBuffers; i++) { - entries.push({ - binding: i, - visibility: GPUShaderStage.COMPUTE, - buffer: { type, hasDynamicOffset: false }, - }); - } + for (let i = dynamicBufferCount; i < dynamicBufferCount + staticBuffers; i++) { + entries.push({ + binding: i, + visibility: GPUShaderStage.COMPUTE, + buffer: { type, hasDynamicOffset: false } + }); + } - const descriptor = { - entries, - }; + const descriptor = { + entries + }; - t.expectValidationError(() => { + t.expectValidationError( + () => { t.device.createBindGroupLayout(descriptor); - }, extraDynamicBuffers > 0 || entries.length > perStageLimit); - }); + }, + extraDynamicBuffers > 0 || entries.length > perStageLimit + ); +}); /** * One bind group layout will be filled with kPerStageBindingLimit[...] of the type |type|. @@ -286,173 +291,183 @@ function* pickExtraBindingTypesForPerStage(entry, extraTypeSame) { } } -const kMaxResourcesCases = kUnitCaseParamsBuilder - .combine('maxedEntry', allBindingEntries(false)) - .beginSubcases() - .combine('maxedVisibility', kShaderStages) - .filter(p => (bindingTypeInfo(p.maxedEntry).validStages & p.maxedVisibility) !== 0) - .expand('extraEntry', p => [ - ...pickExtraBindingTypesForPerStage(p.maxedEntry, true), - ...pickExtraBindingTypesForPerStage(p.maxedEntry, false), - ]) - .combine('extraVisibility', kShaderStages) - .filter(p => (bindingTypeInfo(p.extraEntry).validStages & p.extraVisibility) !== 0); +const kMaxResourcesCases = kUnitCaseParamsBuilder. +combine('maxedEntry', allBindingEntries(false)). +beginSubcases(). +combine('maxedVisibility', kShaderStages). +filter((p) => (bindingTypeInfo(p.maxedEntry).validStages & p.maxedVisibility) !== 0). +expand('extraEntry', (p) => [ +...pickExtraBindingTypesForPerStage(p.maxedEntry, true), +...pickExtraBindingTypesForPerStage(p.maxedEntry, false)] +). +combine('extraVisibility', kShaderStages). +filter((p) => (bindingTypeInfo(p.extraEntry).validStages & p.extraVisibility) !== 0); // Should never fail unless limitInfo.maxBindingsPerBindGroup.default is exceeded, because the validation for // resources-of-type-per-stage is in pipeline layout creation. -g.test('max_resources_per_stage,in_bind_group_layout') - .desc( - ` +g.test('max_resources_per_stage,in_bind_group_layout'). +desc( + ` Test that the maximum number of bindings of a given type per-stage cannot be exceeded in a single bind group layout. - Test each binding type. - Test that creation of a bind group layout using the maximum number of bindings works. - Test that creation of a bind group layout using the maximum number of bindings + 1 fails. - TODO(#230): Update to enforce per-stage and per-pipeline-layout limits on BGLs as well.` - ) - .params(kMaxResourcesCases) - .fn(t => { - const { maxedEntry, extraEntry, maxedVisibility, extraVisibility } = t.params; - const maxedTypeInfo = bindingTypeInfo(maxedEntry); - const maxedCount = t.getDefaultLimit(maxedTypeInfo.perStageLimitClass.maxLimit); - const extraTypeInfo = bindingTypeInfo(extraEntry); +). +params(kMaxResourcesCases). +fn((t) => { + const { maxedEntry, extraEntry, maxedVisibility, extraVisibility } = t.params; + const maxedTypeInfo = bindingTypeInfo(maxedEntry); + const maxedCount = t.getDefaultLimit(maxedTypeInfo.perStageLimitClass.maxLimit); + const extraTypeInfo = bindingTypeInfo(extraEntry); - const maxResourceBindings = []; - for (let i = 0; i < maxedCount; i++) { - maxResourceBindings.push({ - binding: i, - visibility: maxedVisibility, - ...maxedEntry, - }); - } - - const goodDescriptor = { entries: maxResourceBindings }; - - // Control - t.device.createBindGroupLayout(goodDescriptor); - - // Add an entry counting towards the same limit. It should produce a validation error. - const newDescriptor = clone(goodDescriptor); - newDescriptor.entries.push({ - binding: maxedCount, - visibility: extraVisibility, - ...extraEntry, + const maxResourceBindings = []; + for (let i = 0; i < maxedCount; i++) { + maxResourceBindings.push({ + binding: i, + visibility: maxedVisibility, + ...maxedEntry }); + } - const newBindingCountsTowardSamePerStageLimit = - (maxedVisibility & extraVisibility) !== 0 && - maxedTypeInfo.perStageLimitClass.class === extraTypeInfo.perStageLimitClass.class; + const goodDescriptor = { entries: maxResourceBindings }; - t.expectValidationError(() => { - t.device.createBindGroupLayout(newDescriptor); - }, newBindingCountsTowardSamePerStageLimit); + // Control + t.device.createBindGroupLayout(goodDescriptor); + + // Add an entry counting towards the same limit. It should produce a validation error. + const newDescriptor = clone(goodDescriptor); + newDescriptor.entries.push({ + binding: maxedCount, + visibility: extraVisibility, + ...extraEntry }); + const newBindingCountsTowardSamePerStageLimit = + (maxedVisibility & extraVisibility) !== 0 && + maxedTypeInfo.perStageLimitClass.class === extraTypeInfo.perStageLimitClass.class; + + t.expectValidationError(() => { + t.device.createBindGroupLayout(newDescriptor); + }, newBindingCountsTowardSamePerStageLimit); +}); + // One pipeline layout can have a maximum number of each type of binding *per stage* (which is // different for each type). Test that the max works, then add one more binding of same-or-different // type and same-or-different visibility. -g.test('max_resources_per_stage,in_pipeline_layout') - .desc( - ` +g.test('max_resources_per_stage,in_pipeline_layout'). +desc( + ` Test that the maximum number of bindings of a given type per-stage cannot be exceeded across multiple bind group layouts when creating a pipeline layout. - Test each binding type. - Test that creation of a pipeline using the maximum number of bindings works. - Test that creation of a pipeline using the maximum number of bindings + 1 fails. ` - ) - .params(kMaxResourcesCases) - .fn(t => { - const { maxedEntry, extraEntry, maxedVisibility, extraVisibility } = t.params; - const maxedTypeInfo = bindingTypeInfo(maxedEntry); - const maxedCount = t.getDefaultLimit(maxedTypeInfo.perStageLimitClass.maxLimit); - const extraTypeInfo = bindingTypeInfo(extraEntry); +). +params(kMaxResourcesCases). +fn((t) => { + const { maxedEntry, extraEntry, maxedVisibility, extraVisibility } = t.params; + const maxedTypeInfo = bindingTypeInfo(maxedEntry); + const maxedCount = t.getDefaultLimit(maxedTypeInfo.perStageLimitClass.maxLimit); + const extraTypeInfo = bindingTypeInfo(extraEntry); - const maxResourceBindings = []; - for (let i = 0; i < maxedCount; i++) { - maxResourceBindings.push({ - binding: i, - visibility: maxedVisibility, - ...maxedEntry, - }); - } - - const goodLayout = t.device.createBindGroupLayout({ entries: maxResourceBindings }); - - // Control - t.device.createPipelineLayout({ bindGroupLayouts: [goodLayout] }); - - const extraLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: extraVisibility, - ...extraEntry, - }, - ], + const maxResourceBindings = []; + for (let i = 0; i < maxedCount; i++) { + maxResourceBindings.push({ + binding: i, + visibility: maxedVisibility, + ...maxedEntry }); + } - // Some binding types use the same limit, e.g. 'storage-buffer' and 'readonly-storage-buffer'. - const newBindingCountsTowardSamePerStageLimit = - (maxedVisibility & extraVisibility) !== 0 && - maxedTypeInfo.perStageLimitClass.class === extraTypeInfo.perStageLimitClass.class; + const goodLayout = t.device.createBindGroupLayout({ entries: maxResourceBindings }); + + // Control + t.device.createPipelineLayout({ bindGroupLayouts: [goodLayout] }); + + const extraLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: extraVisibility, + ...extraEntry + }] - t.expectValidationError(() => { - t.device.createPipelineLayout({ bindGroupLayouts: [goodLayout, extraLayout] }); - }, newBindingCountsTowardSamePerStageLimit); }); -g.test('storage_texture,layout_dimension') - .desc( - ` + // Some binding types use the same limit, e.g. 'storage-buffer' and 'readonly-storage-buffer'. + const newBindingCountsTowardSamePerStageLimit = + (maxedVisibility & extraVisibility) !== 0 && + maxedTypeInfo.perStageLimitClass.class === extraTypeInfo.perStageLimitClass.class; + + t.expectValidationError(() => { + t.device.createPipelineLayout({ bindGroupLayouts: [goodLayout, extraLayout] }); + }, newBindingCountsTowardSamePerStageLimit); +}); + +g.test('storage_texture,layout_dimension'). +desc( + ` Test that viewDimension is not cube or cube-array if storageTextureLayout is not undefined. ` - ) - .params(u => - u // - .combine('viewDimension', [undefined, ...kTextureViewDimensions]) - ) - .fn(t => { - const { viewDimension } = t.params; +). +params((u) => +u // +.combine('viewDimension', [undefined, ...kTextureViewDimensions]) +). +fn((t) => { + const { viewDimension } = t.params; - const success = viewDimension !== 'cube' && viewDimension !== `cube-array`; + const success = viewDimension !== 'cube' && viewDimension !== `cube-array`; - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - storageTexture: { format: 'rgba8unorm', viewDimension }, - }, - ], - }); - }, !success); - }); + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + storageTexture: { format: 'rgba8unorm', viewDimension } + }] -g.test('storage_texture,formats') - .desc( - ` - Test that a validation error is generated if the format doesn't support the storage usage. + }); + }, !success); +}); + +g.test('storage_texture,formats'). +desc( ` - ) - .params(u => u.combine('format', kAllTextureFormats)) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; + Test that a validation error is generated if the format doesn't support the storage usage. A + validation error is also generated if the format doesn't support the 'read-write' storage access + when the storage access is 'read-write'. + ` +). +params((u) => +u // +.combine('format', kAllTextureFormats) // +.combine('access', kStorageTextureAccessValues) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); + t.skipIfTextureFormatNotUsableAsStorageTexture(t.params.format); +}). +fn((t) => { + const { format, access } = t.params; + const info = kTextureFormatInfo[format]; - t.expectValidationError(() => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - storageTexture: { format }, - }, - ], - }); - }, !info.color?.storage); - }); + const success = + info.color?.storage && !(access === 'read-write' && !info.color?.readWriteStorage); + + t.expectValidationError(() => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + storageTexture: { format, access } + }] + + }); + }, !success); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createPipelineLayout.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createPipelineLayout.spec.js index 507d14c0d83..3d53eb703bc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createPipelineLayout.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createPipelineLayout.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` createPipelineLayout validation tests. TODO: review existing tests, write descriptions, and make sure tests are complete. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { bufferBindingTypeInfo, kBufferBindingTypes } from '../../capability_info.js'; import { ValidationTest } from './validation_test.js'; @@ -16,9 +15,9 @@ function clone(descriptor) { export const g = makeTestGroup(ValidationTest); -g.test('number_of_dynamic_buffers_exceeds_the_maximum_value') - .desc( - ` +g.test('number_of_dynamic_buffers_exceeds_the_maximum_value'). +desc( + ` Test that creating a pipeline layout fails with a validation error if the number of dynamic buffers exceeds the maximum value in the pipeline layout. - Test that creation of a pipeline using the maximum number of dynamic buffers added a dynamic @@ -26,140 +25,140 @@ g.test('number_of_dynamic_buffers_exceeds_the_maximum_value') TODO(#230): Update to enforce per-stage and per-pipeline-layout limits on BGLs as well. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('visibility', [0, 2, 4, 6]) - .combine('type', kBufferBindingTypes) - ) - .fn(t => { - const { type, visibility } = t.params; - const info = bufferBindingTypeInfo({ type }); - const { maxDynamicLimit } = info.perPipelineLimitClass; - const perStageLimit = t.getDefaultLimit(info.perStageLimitClass.maxLimit); - const maxDynamic = Math.min( - maxDynamicLimit ? t.getDefaultLimit(maxDynamicLimit) : 0, - perStageLimit - ); +). +paramsSubcasesOnly((u) => +u // +.combine('visibility', [0, 2, 4, 6]). +combine('type', kBufferBindingTypes) +). +fn((t) => { + const { type, visibility } = t.params; + const info = bufferBindingTypeInfo({ type }); + const { maxDynamicLimit } = info.perPipelineLimitClass; + const perStageLimit = t.getDefaultLimit(info.perStageLimitClass.maxLimit); + const maxDynamic = Math.min( + maxDynamicLimit ? t.getDefaultLimit(maxDynamicLimit) : 0, + perStageLimit + ); - const maxDynamicBufferBindings = []; - for (let binding = 0; binding < maxDynamic; binding++) { - maxDynamicBufferBindings.push({ - binding, - visibility, - buffer: { type, hasDynamicOffset: true }, - }); - } - - const maxDynamicBufferBindGroupLayout = t.device.createBindGroupLayout({ - entries: maxDynamicBufferBindings, + const maxDynamicBufferBindings = []; + for (let binding = 0; binding < maxDynamic; binding++) { + maxDynamicBufferBindings.push({ + binding, + visibility, + buffer: { type, hasDynamicOffset: true } }); + } - const goodDescriptor = { - entries: [{ binding: 0, visibility, buffer: { type, hasDynamicOffset: false } }], - }; - - if (perStageLimit > maxDynamic) { - const goodPipelineLayoutDescriptor = { - bindGroupLayouts: [ - maxDynamicBufferBindGroupLayout, - t.device.createBindGroupLayout(goodDescriptor), - ], - }; - - // Control case - t.device.createPipelineLayout(goodPipelineLayoutDescriptor); - } - - // Check dynamic buffers exceed maximum in pipeline layout. - const badDescriptor = clone(goodDescriptor); - badDescriptor.entries[0].buffer.hasDynamicOffset = true; - - const badPipelineLayoutDescriptor = { - bindGroupLayouts: [ - maxDynamicBufferBindGroupLayout, - t.device.createBindGroupLayout(badDescriptor), - ], - }; - - t.expectValidationError(() => { - t.device.createPipelineLayout(badPipelineLayoutDescriptor); - }); + const maxDynamicBufferBindGroupLayout = t.device.createBindGroupLayout({ + entries: maxDynamicBufferBindings }); -g.test('number_of_bind_group_layouts_exceeds_the_maximum_value') - .desc( - ` + const goodDescriptor = { + entries: [{ binding: 0, visibility, buffer: { type, hasDynamicOffset: false } }] + }; + + if (perStageLimit > maxDynamic) { + const goodPipelineLayoutDescriptor = { + bindGroupLayouts: [ + maxDynamicBufferBindGroupLayout, + t.device.createBindGroupLayout(goodDescriptor)] + + }; + + // Control case + t.device.createPipelineLayout(goodPipelineLayoutDescriptor); + } + + // Check dynamic buffers exceed maximum in pipeline layout. + const badDescriptor = clone(goodDescriptor); + badDescriptor.entries[0].buffer.hasDynamicOffset = true; + + const badPipelineLayoutDescriptor = { + bindGroupLayouts: [ + maxDynamicBufferBindGroupLayout, + t.device.createBindGroupLayout(badDescriptor)] + + }; + + t.expectValidationError(() => { + t.device.createPipelineLayout(badPipelineLayoutDescriptor); + }); +}); + +g.test('number_of_bind_group_layouts_exceeds_the_maximum_value'). +desc( + ` Test that creating a pipeline layout fails with a validation error if the number of bind group layouts exceeds the maximum value in the pipeline layout. - Test that creation of a pipeline using the maximum number of bind groups added a bind group fails. ` - ) - .fn(t => { - const bindGroupLayoutDescriptor = { - entries: [], - }; +). +fn((t) => { + const bindGroupLayoutDescriptor = { + entries: [] + }; - // 4 is the maximum number of bind group layouts. - const maxBindGroupLayouts = [1, 2, 3, 4].map(() => - t.device.createBindGroupLayout(bindGroupLayoutDescriptor) - ); + // 4 is the maximum number of bind group layouts. + const maxBindGroupLayouts = [1, 2, 3, 4].map(() => + t.device.createBindGroupLayout(bindGroupLayoutDescriptor) + ); - const goodPipelineLayoutDescriptor = { - bindGroupLayouts: maxBindGroupLayouts, - }; + const goodPipelineLayoutDescriptor = { + bindGroupLayouts: maxBindGroupLayouts + }; - // Control case - t.device.createPipelineLayout(goodPipelineLayoutDescriptor); + // Control case + t.device.createPipelineLayout(goodPipelineLayoutDescriptor); - // Check bind group layouts exceed maximum in pipeline layout. - const badPipelineLayoutDescriptor = { - bindGroupLayouts: [ - ...maxBindGroupLayouts, - t.device.createBindGroupLayout(bindGroupLayoutDescriptor), - ], - }; + // Check bind group layouts exceed maximum in pipeline layout. + const badPipelineLayoutDescriptor = { + bindGroupLayouts: [ + ...maxBindGroupLayouts, + t.device.createBindGroupLayout(bindGroupLayoutDescriptor)] - t.expectValidationError(() => { - t.device.createPipelineLayout(badPipelineLayoutDescriptor); - }); + }; + + t.expectValidationError(() => { + t.device.createPipelineLayout(badPipelineLayoutDescriptor); }); +}); -g.test('bind_group_layouts,device_mismatch') - .desc( - ` +g.test('bind_group_layouts,device_mismatch'). +desc( + ` Tests createPipelineLayout cannot be called with bind group layouts created from another device Test with two layouts to make sure all layouts can be validated: - layout0 and layout1 from same device - layout0 and layout1 from different device ` - ) - .paramsSubcasesOnly([ - { layout0Mismatched: false, layout1Mismatched: false }, // control case - { layout0Mismatched: true, layout1Mismatched: false }, - { layout0Mismatched: false, layout1Mismatched: true }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { layout0Mismatched, layout1Mismatched } = t.params; +). +paramsSubcasesOnly([ +{ layout0Mismatched: false, layout1Mismatched: false }, // control case +{ layout0Mismatched: true, layout1Mismatched: false }, +{ layout0Mismatched: false, layout1Mismatched: true }] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { layout0Mismatched, layout1Mismatched } = t.params; - const mismatched = layout0Mismatched || layout1Mismatched; + const mismatched = layout0Mismatched || layout1Mismatched; - const bglDescriptor = { - entries: [], - }; + const bglDescriptor = { + entries: [] + }; - const layout0 = layout0Mismatched - ? t.mismatchedDevice.createBindGroupLayout(bglDescriptor) - : t.device.createBindGroupLayout(bglDescriptor); - const layout1 = layout1Mismatched - ? t.mismatchedDevice.createBindGroupLayout(bglDescriptor) - : t.device.createBindGroupLayout(bglDescriptor); + const layout0 = layout0Mismatched ? + t.mismatchedDevice.createBindGroupLayout(bglDescriptor) : + t.device.createBindGroupLayout(bglDescriptor); + const layout1 = layout1Mismatched ? + t.mismatchedDevice.createBindGroupLayout(bglDescriptor) : + t.device.createBindGroupLayout(bglDescriptor); - t.expectValidationError(() => { - t.device.createPipelineLayout({ bindGroupLayouts: [layout0, layout1] }); - }, mismatched); - }); + t.expectValidationError(() => { + t.device.createPipelineLayout({ bindGroupLayouts: [layout0, layout1] }); + }, mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createSampler.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createSampler.spec.js index e49ca260fff..7e198d00e08 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createSampler.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createSampler.spec.js @@ -1,56 +1,68 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` createSampler validation tests. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { ValidationTest } from './validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('lodMinAndMaxClamp') - .desc('test different combinations of min and max clamp values') - .paramsSubcasesOnly(u => - u // - .combine('lodMinClamp', [-4e-30, -1, 0, 0.5, 1, 10, 4e30]) - .combine('lodMaxClamp', [-4e-30, -1, 0, 0.5, 1, 10, 4e30]) - ) - .fn(t => { - t.expectValidationError(() => { - t.device.createSampler({ - lodMinClamp: t.params.lodMinClamp, - lodMaxClamp: t.params.lodMaxClamp, - }); - }, t.params.lodMinClamp > t.params.lodMaxClamp || t.params.lodMinClamp < 0 || t.params.lodMaxClamp < 0); - }); +g.test('lodMinAndMaxClamp'). +desc('test different combinations of min and max clamp values'). +paramsSubcasesOnly((u) => +u // +.combine('lodMinClamp', [-4e-30, -1, 0, 0.5, 1, 10, 4e30]). +combine('lodMaxClamp', [-4e-30, -1, 0, 0.5, 1, 10, 4e30]) +). +fn((t) => { + const shouldError = + t.params.lodMinClamp > t.params.lodMaxClamp || + t.params.lodMinClamp < 0 || + t.params.lodMaxClamp < 0; + t.expectValidationError(() => { + t.device.createSampler({ + lodMinClamp: t.params.lodMinClamp, + lodMaxClamp: t.params.lodMaxClamp + }); + }, shouldError); +}); -g.test('maxAnisotropy') - .desc('test different maxAnisotropy values and combinations with min/mag/mipmapFilter') - .params(u => - u // - .beginSubcases() - .combineWithParams([ - ...u.combine('maxAnisotropy', [-1, undefined, 0, 1, 2, 4, 7, 16, 32, 33, 1024]), - { minFilter: 'nearest' }, - { magFilter: 'nearest' }, - { mipmapFilter: 'nearest' }, - ]) - ) - .fn(t => { - const { - maxAnisotropy = 1, - minFilter = 'linear', - magFilter = 'linear', - mipmapFilter = 'linear', - } = t.params; +g.test('maxAnisotropy'). +desc('test different maxAnisotropy values and combinations with min/mag/mipmapFilter'). +params((u) => +u // +.beginSubcases(). +combineWithParams([ +...u.combine('maxAnisotropy', [-1, undefined, 0, 1, 2, 4, 7, 16, 32, 33, 1024]), +{ minFilter: 'nearest' }, +{ magFilter: 'nearest' }, +{ mipmapFilter: 'nearest' }] +) +). +fn((t) => { + const { + maxAnisotropy = 1, + minFilter = 'linear', + magFilter = 'linear', + mipmapFilter = 'linear' + } = t.params; - t.expectValidationError(() => { - t.device.createSampler({ - minFilter, - magFilter, - mipmapFilter, - maxAnisotropy, - }); - }, maxAnisotropy < 1 || (maxAnisotropy > 1 && !(minFilter === 'linear' && magFilter === 'linear' && mipmapFilter === 'linear'))); - }); + + + + + + const shouldError = + maxAnisotropy < 1 || + maxAnisotropy > 1 && + !(minFilter === 'linear' && magFilter === 'linear' && mipmapFilter === 'linear'); + t.expectValidationError(() => { + t.device.createSampler({ + minFilter, + magFilter, + mipmapFilter, + maxAnisotropy + }); + }, shouldError); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createTexture.spec.js index b89f528d9a5..9f78c2e25ac 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createTexture.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `createTexture validation tests.`; -import { SkipTestCase } from '../../../common/framework/fixture.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `createTexture validation tests.`;import { SkipTestCase } from '../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert, makeValueTestVariant } from '../../../common/util/util.js'; import { kTextureDimensions, kTextureUsages } from '../../capability_info.js'; @@ -16,294 +15,298 @@ import { filterFormatsByFeature, viewCompatible, textureDimensionAndFormatCompatible, -} from '../../format_info.js'; + isTextureFormatUsableAsStorageFormat } from +'../../format_info.js'; import { maxMipLevelCount } from '../../util/texture/base.js'; import { ValidationTest } from './validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('zero_size_and_usage') - .desc( - `Test texture creation with zero or nonzero size of +g.test('zero_size_and_usage'). +desc( + `Test texture creation with zero or nonzero size of width, height, depthOrArrayLayers and mipLevelCount, usage for every dimension, and representative formats. ` - ) - .params(u => - u - .combine('dimension', [undefined, ...kTextureDimensions]) - .combine('format', ['rgba8unorm', 'rgb10a2unorm', 'bc1-rgba-unorm', 'depth24plus-stencil8']) - .beginSubcases() - .combine('zeroArgument', [ - 'none', - 'width', - 'height', - 'depthOrArrayLayers', - 'mipLevelCount', - 'usage', - ]) +). +params((u) => +u. +combine('dimension', [undefined, ...kTextureDimensions]). +combine('format', [ +'rgba8unorm', +'rgb10a2unorm', +'bc1-rgba-unorm', +'depth24plus-stencil8'] +). +beginSubcases(). +combine('zeroArgument', [ +'none', +'width', +'height', +'depthOrArrayLayers', +'mipLevelCount', +'usage'] +) +// Filter out incompatible dimension type and format combinations. +.filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, zeroArgument, format } = t.params; + const info = kTextureFormatInfo[format]; - // Filter out incompatible dimension type and format combinations. - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, zeroArgument, format } = t.params; - const info = kTextureFormatInfo[format]; + const size = [info.blockWidth, info.blockHeight, 1]; + let mipLevelCount = 1; + let usage = GPUTextureUsage.TEXTURE_BINDING; - const size = [info.blockWidth, info.blockHeight, 1]; - let mipLevelCount = 1; - let usage = GPUTextureUsage.TEXTURE_BINDING; + switch (zeroArgument) { + case 'width': + size[0] = 0; + break; + case 'height': + size[1] = 0; + break; + case 'depthOrArrayLayers': + size[2] = 0; + break; + case 'mipLevelCount': + mipLevelCount = 0; + break; + case 'usage': + usage = 0; + break; + default: + break; + } - switch (zeroArgument) { - case 'width': - size[0] = 0; - break; - case 'height': - size[1] = 0; - break; - case 'depthOrArrayLayers': - size[2] = 0; - break; - case 'mipLevelCount': - mipLevelCount = 0; - break; - case 'usage': - usage = 0; - break; - default: - break; - } + const descriptor = { + size, + mipLevelCount, + dimension, + format, + usage + }; - const descriptor = { - size, - mipLevelCount, - dimension, - format, - usage, - }; + const success = zeroArgument === 'none'; - const success = zeroArgument === 'none'; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('dimension_type_and_format_compatibility') - .desc( - `Test every dimension type on every format. Note that compressed formats and depth/stencil formats are not valid for 1D/3D dimension types.` - ) - .params(u => - u.combine('dimension', [undefined, ...kTextureDimensions]).combine('format', kTextureFormats) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format } = t.params; - const info = kTextureFormatInfo[format]; - - const descriptor = { - size: [info.blockWidth, info.blockHeight, 1], - dimension, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !textureDimensionAndFormatCompatible(dimension, format)); - }); - -g.test('mipLevelCount,format') - .desc( - `Test texture creation with no mipmap chain, partial mipmap chain, full mipmap chain, out-of-bounds mipmap chain - for every format with different texture dimension types.` - ) - .params(u => - u - .combine('dimension', [undefined, ...kTextureDimensions]) - .combine('format', kTextureFormats) - .beginSubcases() - .combine('mipLevelCount', [1, 2, 3, 6, 7]) - // Filter out incompatible dimension type and format combinations. - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .combine('largestDimension', [0, 1, 2]) - .unless(({ dimension, largestDimension }) => dimension === '1d' && largestDimension > 0) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format, mipLevelCount, largestDimension } = t.params; - const info = kTextureFormatInfo[format]; - - // Compute dimensions such that the dimensions are in range [17, 32] and aligned with the - // format block size so that there will be exactly 6 mip levels. - const kTargetMipLevelCount = 5; - const kTargetLargeSize = (1 << kTargetMipLevelCount) - 1; - const largeSize = [ - Math.floor(kTargetLargeSize / info.blockWidth) * info.blockWidth, - Math.floor(kTargetLargeSize / info.blockHeight) * info.blockHeight, - kTargetLargeSize, - ]; - - assert(17 <= largeSize[0] && largeSize[0] <= 32); - assert(17 <= largeSize[1] && largeSize[1] <= 32); - - // Note that compressed formats are not valid for 1D. They have already been filtered out for 1D - // in this test. So there is no dilemma about size.width equals 1 vs - // size.width % info.blockHeight equals 0 for 1D compressed formats. - const size = [info.blockWidth, info.blockHeight, 1]; - size[largestDimension] = largeSize[largestDimension]; - - const descriptor = { - size, - mipLevelCount, - dimension, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - const success = mipLevelCount <= maxMipLevelCount(descriptor); - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('mipLevelCount,bound_check') - .desc( - `Test mip level count bound check upon different texture size and different texture dimension types. - The cases below test: 1) there must be no mip levels after a 1 level (1D texture), or 1x1 level (2D texture), or 1x1x1 level (3D texture), 2) array layers are not mip-mapped, 3) power-of-two, non-power-of-two, and non-square sizes.` - ) - .params(u => - u // - .combine('format', ['rgba8unorm', 'bc1-rgba-unorm']) - .beginSubcases() - .combineWithParams([ - { size: [32, 32] }, // Mip level sizes: 32x32, 16x16, 8x8, 4x4, 2x2, 1x1 - { size: [31, 32] }, // Mip level sizes: 31x32, 15x16, 7x8, 3x4, 1x2, 1x1 - { size: [28, 32] }, // Mip level sizes: 28x32, 14x16, 7x8, 3x4, 1x2, 1x1 - { size: [32, 31] }, // Mip level sizes: 32x31, 16x15, 8x7, 4x3, 2x1, 1x1 - { size: [32, 28] }, // Mip level sizes: 32x28, 16x14, 8x7, 4x3, 2x1, 1x1 - { size: [31, 31] }, // Mip level sizes: 31x31, 15x15, 7x7, 3x3, 1x1 - { size: [32], dimension: '1d' }, // Mip level sizes: 32, 16, 8, 4, 2, 1 - { size: [31], dimension: '1d' }, // Mip level sizes: 31, 15, 7, 3, 1 - { size: [32, 32, 32], dimension: '3d' }, // Mip level sizes: 32x32x32, 16x16x16, 8x8x8, 4x4x4, 2x2x2, 1x1x1 - { size: [32, 31, 31], dimension: '3d' }, // Mip level sizes: 32x31x31, 16x15x15, 8x7x7, 4x3x3, 2x1x1, 1x1x1 - { size: [31, 32, 31], dimension: '3d' }, // Mip level sizes: 31x32x31, 15x16x15, 7x8x7, 3x4x3, 1x2x1, 1x1x1 - { size: [31, 31, 32], dimension: '3d' }, // Mip level sizes: 31x31x32, 15x15x16, 7x7x8, 3x3x4, 1x1x2, 1x1x1 - { size: [31, 31, 31], dimension: '3d' }, // Mip level sizes: 31x31x31, 15x15x15, 7x7x7, 3x3x3, 1x1x1 - { size: [32, 8] }, // Mip levels: 32x8, 16x4, 8x2, 4x1, 2x1, 1x1 - { size: [32, 32, 64] }, // Mip levels: 32x32x64, 16x16x64, 8x8x64, 4x4x64, 2x2x64, 1x1x64 - { size: [32, 32, 64], dimension: '3d' }, // Mip levels: 32x32x64, 16x16x32, 8x8x16, 4x4x8, 2x2x4, 1x1x2, 1x1x1 - ]) - .unless( - ({ format, size, dimension }) => - format === 'bc1-rgba-unorm' && - (dimension === '1d' || - dimension === '3d' || - size[0] % kTextureFormatInfo[format].blockWidth !== 0 || - size[1] % kTextureFormatInfo[format].blockHeight !== 0) - ) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { format, size, dimension } = t.params; - - const descriptor = { - size, - mipLevelCount: 0, - dimension, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - const mipLevelCount = maxMipLevelCount(descriptor); - descriptor.mipLevelCount = mipLevelCount; + t.expectValidationError(() => { t.device.createTexture(descriptor); + }, !success); +}); - descriptor.mipLevelCount = mipLevelCount + 1; - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }); +g.test('dimension_type_and_format_compatibility'). +desc( + `Test every dimension type on every format. Note that compressed formats and depth/stencil formats are not valid for 1D/3D dimension types.` +). +params((u) => +u.combine('dimension', [undefined, ...kTextureDimensions]).combine('format', kTextureFormats) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format } = t.params; + const info = kTextureFormatInfo[format]; + + const descriptor = { + size: [info.blockWidth, info.blockHeight, 1], + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !textureDimensionAndFormatCompatible(dimension, format)); +}); + +g.test('mipLevelCount,format'). +desc( + `Test texture creation with no mipmap chain, partial mipmap chain, full mipmap chain, out-of-bounds mipmap chain + for every format with different texture dimension types.` +). +params((u) => +u. +combine('dimension', [undefined, ...kTextureDimensions]). +combine('format', kTextureFormats). +beginSubcases(). +combine('mipLevelCount', [1, 2, 3, 6, 7]) +// Filter out incompatible dimension type and format combinations. +.filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +combine('largestDimension', [0, 1, 2]). +unless(({ dimension, largestDimension }) => dimension === '1d' && largestDimension > 0) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format, mipLevelCount, largestDimension } = t.params; + const info = kTextureFormatInfo[format]; + + // Compute dimensions such that the dimensions are in range [17, 32] and aligned with the + // format block size so that there will be exactly 6 mip levels. + const kTargetMipLevelCount = 5; + const kTargetLargeSize = (1 << kTargetMipLevelCount) - 1; + const largeSize = [ + Math.floor(kTargetLargeSize / info.blockWidth) * info.blockWidth, + Math.floor(kTargetLargeSize / info.blockHeight) * info.blockHeight, + kTargetLargeSize]; + + assert(17 <= largeSize[0] && largeSize[0] <= 32); + assert(17 <= largeSize[1] && largeSize[1] <= 32); + + // Note that compressed formats are not valid for 1D. They have already been filtered out for 1D + // in this test. So there is no dilemma about size.width equals 1 vs + // size.width % info.blockHeight equals 0 for 1D compressed formats. + const size = [info.blockWidth, info.blockHeight, 1]; + size[largestDimension] = largeSize[largestDimension]; + + const descriptor = { + size, + mipLevelCount, + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const success = mipLevelCount <= maxMipLevelCount(descriptor); + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('mipLevelCount,bound_check'). +desc( + `Test mip level count bound check upon different texture size and different texture dimension types. + The cases below test: 1) there must be no mip levels after a 1 level (1D texture), or 1x1 level (2D texture), or 1x1x1 level (3D texture), 2) array layers are not mip-mapped, 3) power-of-two, non-power-of-two, and non-square sizes.` +). +params((u) => +u // +.combine('format', ['rgba8unorm', 'bc1-rgba-unorm']). +beginSubcases(). +combineWithParams([ +{ size: [32, 32] }, // Mip level sizes: 32x32, 16x16, 8x8, 4x4, 2x2, 1x1 +{ size: [31, 32] }, // Mip level sizes: 31x32, 15x16, 7x8, 3x4, 1x2, 1x1 +{ size: [28, 32] }, // Mip level sizes: 28x32, 14x16, 7x8, 3x4, 1x2, 1x1 +{ size: [32, 31] }, // Mip level sizes: 32x31, 16x15, 8x7, 4x3, 2x1, 1x1 +{ size: [32, 28] }, // Mip level sizes: 32x28, 16x14, 8x7, 4x3, 2x1, 1x1 +{ size: [31, 31] }, // Mip level sizes: 31x31, 15x15, 7x7, 3x3, 1x1 +{ size: [32], dimension: '1d' }, // Mip level sizes: 32, 16, 8, 4, 2, 1 +{ size: [31], dimension: '1d' }, // Mip level sizes: 31, 15, 7, 3, 1 +{ size: [32, 32, 32], dimension: '3d' }, // Mip level sizes: 32x32x32, 16x16x16, 8x8x8, 4x4x4, 2x2x2, 1x1x1 +{ size: [32, 31, 31], dimension: '3d' }, // Mip level sizes: 32x31x31, 16x15x15, 8x7x7, 4x3x3, 2x1x1, 1x1x1 +{ size: [31, 32, 31], dimension: '3d' }, // Mip level sizes: 31x32x31, 15x16x15, 7x8x7, 3x4x3, 1x2x1, 1x1x1 +{ size: [31, 31, 32], dimension: '3d' }, // Mip level sizes: 31x31x32, 15x15x16, 7x7x8, 3x3x4, 1x1x2, 1x1x1 +{ size: [31, 31, 31], dimension: '3d' }, // Mip level sizes: 31x31x31, 15x15x15, 7x7x7, 3x3x3, 1x1x1 +{ size: [32, 8] }, // Mip levels: 32x8, 16x4, 8x2, 4x1, 2x1, 1x1 +{ size: [32, 32, 64] }, // Mip levels: 32x32x64, 16x16x64, 8x8x64, 4x4x64, 2x2x64, 1x1x64 +{ size: [32, 32, 64], dimension: '3d' } // Mip levels: 32x32x64, 16x16x32, 8x8x16, 4x4x8, 2x2x4, 1x1x2, 1x1x1 +]). +unless( + ({ format, size, dimension }) => + format === 'bc1-rgba-unorm' && ( + dimension === '1d' || + dimension === '3d' || + size[0] % kTextureFormatInfo[format].blockWidth !== 0 || + size[1] % kTextureFormatInfo[format].blockHeight !== 0) +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, size, dimension } = t.params; + + const descriptor = { + size, + mipLevelCount: 0, + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const mipLevelCount = maxMipLevelCount(descriptor); + descriptor.mipLevelCount = mipLevelCount; + t.device.createTexture(descriptor); + + descriptor.mipLevelCount = mipLevelCount + 1; + t.expectValidationError(() => { + t.device.createTexture(descriptor); }); +}); -g.test('mipLevelCount,bound_check,bigger_than_integer_bit_width') - .desc(`Test mip level count bound check when mipLevelCount is bigger than integer bit width`) - .fn(t => { - const descriptor = { - size: [32, 32], - mipLevelCount: 100, - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, - }; +g.test('mipLevelCount,bound_check,bigger_than_integer_bit_width'). +desc(`Test mip level count bound check when mipLevelCount is bigger than integer bit width`). +fn((t) => { + const descriptor = { + size: [32, 32], + mipLevelCount: 100, + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING + }; - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }); + t.expectValidationError(() => { + t.device.createTexture(descriptor); }); +}); -g.test('sampleCount,various_sampleCount_with_all_formats') - .desc( - `Test texture creation with various (valid or invalid) sample count and all formats. Note that 1D and 3D textures can't support multisample.` - ) - .params(u => - u - .combine('dimension', [undefined, '2d']) - .combine('format', kTextureFormats) - .beginSubcases() - .combine('sampleCount', [0, 1, 2, 4, 8, 16, 32, 256]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, sampleCount, format } = t.params; - const info = kTextureFormatInfo[format]; +g.test('sampleCount,various_sampleCount_with_all_formats'). +desc( + `Test texture creation with various (valid or invalid) sample count and all formats. Note that 1D and 3D textures can't support multisample.` +). +params((u) => +u. +combine('dimension', [undefined, '2d']). +combine('format', kTextureFormats). +beginSubcases(). +combine('sampleCount', [0, 1, 2, 4, 8, 16, 32, 256]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, sampleCount, format } = t.params; + const info = kTextureFormatInfo[format]; - const usage = - sampleCount > 1 - ? GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT - : GPUTextureUsage.TEXTURE_BINDING; - const descriptor = { - size: [32 * info.blockWidth, 32 * info.blockHeight, 1], - sampleCount, - dimension, - format, - usage, - }; + const usage = + sampleCount > 1 ? + GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT : + GPUTextureUsage.TEXTURE_BINDING; + const descriptor = { + size: [32 * info.blockWidth, 32 * info.blockHeight, 1], + sampleCount, + dimension, + format, + usage + }; - const success = sampleCount === 1 || (sampleCount === 4 && info.multisample && info.renderable); + const success = sampleCount === 1 || sampleCount === 4 && info.multisample && info.renderable; - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); -g.test('sampleCount,valid_sampleCount_with_other_parameter_varies') - .desc( - `Test texture creation with valid sample count when dimensions, arrayLayerCount, mipLevelCount, +g.test('sampleCount,valid_sampleCount_with_other_parameter_varies'). +desc( + `Test texture creation with valid sample count when dimensions, arrayLayerCount, mipLevelCount, format, and usage varies. Texture can be single sample (sampleCount is 1) or multi-sample (sampleCount is 4). Multisample texture requires that 1) its dimension is 2d or undefined, @@ -311,938 +314,828 @@ g.test('sampleCount,valid_sampleCount_with_other_parameter_varies') 3) its mipLevelCount and arrayLayerCount are 1, 4) its usage doesn't include STORAGE_BINDING, 5) its usage includes RENDER_ATTACHMENT.` - ) - .params(u => - u - .combine('dimension', [undefined, ...kTextureDimensions]) - .combine('format', kTextureFormats) - .beginSubcases() - .combine('sampleCount', [1, 4]) - .combine('arrayLayerCount', [1, 2]) - .unless( - ({ dimension, arrayLayerCount }) => - arrayLayerCount === 2 && dimension !== '2d' && dimension !== undefined - ) - .combine('mipLevelCount', [1, 2]) - .expand('usage', p => { - const usageSet = new Set(); - for (const usage0 of kTextureUsages) { - for (const usage1 of kTextureUsages) { - usageSet.add(usage0 | usage1); - } - } - return usageSet; - }) - // Filter out incompatible dimension type and format combinations. - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .unless(({ usage, format, mipLevelCount, dimension }) => { - const info = kTextureFormatInfo[format]; - return ( - ((usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && - (!info.colorRender || dimension !== '2d')) || - ((usage & GPUConst.TextureUsage.STORAGE_BINDING) !== 0 && !info.color?.storage) || - (mipLevelCount !== 1 && dimension === '1d') - ); - }) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, sampleCount, format, mipLevelCount, arrayLayerCount, usage } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('dimension', [undefined, ...kTextureDimensions]). +combine('format', kTextureFormats). +beginSubcases(). +combine('sampleCount', [1, 4]). +combine('arrayLayerCount', [1, 2]). +unless( + ({ dimension, arrayLayerCount }) => + arrayLayerCount === 2 && dimension !== '2d' && dimension !== undefined +). +combine('mipLevelCount', [1, 2]). +expand('usage', () => { + const usageSet = new Set(); + for (const usage0 of kTextureUsages) { + for (const usage1 of kTextureUsages) { + usageSet.add(usage0 | usage1); + } + } + return usageSet; +}) +// Filter out incompatible dimension type and format combinations. +.filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +unless(({ usage, format, mipLevelCount, dimension }) => { + const info = kTextureFormatInfo[format]; + return ( + (usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && ( + !info.colorRender || dimension !== '2d') || + (usage & GPUConst.TextureUsage.STORAGE_BINDING) !== 0 && !info.color?.storage || + mipLevelCount !== 1 && dimension === '1d'); - const size = - dimension === '1d' - ? [32 * blockWidth, 1 * blockHeight, 1] - : dimension === '2d' || dimension === undefined - ? [32 * blockWidth, 32 * blockHeight, arrayLayerCount] - : [32 * blockWidth, 32 * blockHeight, 32]; - const descriptor = { - size, - mipLevelCount, - sampleCount, - dimension, - format, - usage, - }; +}) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, sampleCount, format, mipLevelCount, arrayLayerCount, usage } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - const success = - sampleCount === 1 || - (sampleCount === 4 && - (dimension === '2d' || dimension === undefined) && - kTextureFormatInfo[format].multisample && - mipLevelCount === 1 && - arrayLayerCount === 1 && - (usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && - (usage & GPUConst.TextureUsage.STORAGE_BINDING) === 0); + const size = + dimension === '1d' ? + [32 * blockWidth, 1 * blockHeight, 1] : + dimension === '2d' || dimension === undefined ? + [32 * blockWidth, 32 * blockHeight, arrayLayerCount] : + [32 * blockWidth, 32 * blockHeight, 32]; + const descriptor = { + size, + mipLevelCount, + sampleCount, + dimension, + format, + usage + }; - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); + const satisfyWithStorageUsageRequirement = + (usage & GPUConst.TextureUsage.STORAGE_BINDING) === 0 || + isTextureFormatUsableAsStorageFormat(format, t.isCompatibility); -g.test('sample_count,1d_2d_array_3d') - .desc(`Test that you can not create 1d, 2d_array, and 3d multisampled textures`) - .params(u => - u.combineWithParams([ - { dimension: '2d', size: [4, 4, 1], shouldError: false }, - { dimension: '1d', size: [4, 1, 1], shouldError: true }, - { dimension: '2d', size: [4, 4, 4], shouldError: true }, - { dimension: '2d', size: [4, 4, 6], shouldError: true }, - { dimension: '3d', size: [4, 4, 4], shouldError: true }, - ]) - ) - .fn(t => { - const { dimension, size, shouldError } = t.params; - - t.expectValidationError(() => { - t.device.createTexture({ - size, - dimension, - sampleCount: 4, - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT, - }); - }, shouldError); - }); - -g.test('texture_size,default_value_and_smallest_size,uncompressed_format') - .desc( - `Test default values for height and depthOrArrayLayers for every dimension type and every uncompressed format. - It also tests smallest size (lower bound) for every dimension type and every uncompressed format, while other texture_size tests are testing the upper bound.` - ) - .params(u => - u - .combine('dimension', [undefined, ...kTextureDimensions]) - .combine('format', kUncompressedTextureFormats) - .beginSubcases() - .combine('size', [[1], [1, 1], [1, 1, 1]]) - // Filter out incompatible dimension type and format combinations. - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format, size } = t.params; - - const descriptor = { - size, - dimension, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; + const success = + sampleCount === 1 && satisfyWithStorageUsageRequirement || + sampleCount === 4 && ( + dimension === '2d' || dimension === undefined) && + kTextureFormatInfo[format].multisample && + mipLevelCount === 1 && + arrayLayerCount === 1 && + (usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && + (usage & GPUConst.TextureUsage.STORAGE_BINDING) === 0; + t.expectValidationError(() => { t.device.createTexture(descriptor); - }); + }, !success); +}); -g.test('texture_size,default_value_and_smallest_size,compressed_format') - .desc( - `Test default values for height and depthOrArrayLayers for every dimension type and every compressed format. +g.test('sample_count,1d_2d_array_3d'). +desc(`Test that you can not create 1d, 2d_array, and 3d multisampled textures`). +params((u) => +u.combineWithParams([ +{ dimension: '2d', size: [4, 4, 1], shouldError: false }, +{ dimension: '1d', size: [4, 1, 1], shouldError: true }, +{ dimension: '2d', size: [4, 4, 4], shouldError: true }, +{ dimension: '2d', size: [4, 4, 6], shouldError: true }, +{ dimension: '3d', size: [4, 4, 4], shouldError: true }] +) +). +fn((t) => { + const { dimension, size, shouldError } = t.params; + + t.expectValidationError(() => { + t.device.createTexture({ + size, + dimension, + sampleCount: 4, + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT + }); + }, shouldError); +}); + +g.test('texture_size,default_value_and_smallest_size,uncompressed_format'). +desc( + `Test default values for height and depthOrArrayLayers for every dimension type and every uncompressed format. + It also tests smallest size (lower bound) for every dimension type and every uncompressed format, while other texture_size tests are testing the upper bound.` +). +params((u) => +u. +combine('dimension', [undefined, ...kTextureDimensions]). +combine('format', kUncompressedTextureFormats). +beginSubcases(). +combine('size', [[1], [1, 1], [1, 1, 1]]) +// Filter out incompatible dimension type and format combinations. +.filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format, size } = t.params; + + const descriptor = { + size, + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + t.device.createTexture(descriptor); +}); + +g.test('texture_size,default_value_and_smallest_size,compressed_format'). +desc( + `Test default values for height and depthOrArrayLayers for every dimension type and every compressed format. It also tests smallest size (lower bound) for every dimension type and every compressed format, while other texture_size tests are testing the upper bound.` - ) - .params(u => - u - // Compressed formats are invalid for 1D and 3D. - .combine('dimension', [undefined, '2d']) - .combine('format', kCompressedTextureFormats) - .beginSubcases() - .expandWithParams(p => { - const { blockWidth, blockHeight } = kTextureFormatInfo[p.format]; - return [ - { size: [1], _success: false }, - { size: [blockWidth], _success: false }, - { size: [1, 1], _success: false }, - { size: [blockWidth, blockHeight], _success: true }, - { size: [1, 1, 1], _success: false }, - { size: [blockWidth, blockHeight, 1], _success: true }, - ]; - }) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format, size, _success } = t.params; +). +params((u) => +u +// Compressed formats are invalid for 1D and 3D. +.combine('dimension', [undefined, '2d']). +combine('format', kCompressedTextureFormats). +beginSubcases(). +expandWithParams((p) => { + const { blockWidth, blockHeight } = kTextureFormatInfo[p.format]; + return [ + { size: [1], _success: false }, + { size: [blockWidth], _success: false }, + { size: [1, 1], _success: false }, + { size: [blockWidth, blockHeight], _success: true }, + { size: [1, 1, 1], _success: false }, + { size: [blockWidth, blockHeight, 1], _success: true }]; - const descriptor = { - size, - dimension, +}) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format, size, _success } = t.params; + + const descriptor = { + size, + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !_success); +}); + +g.test('texture_size,1d_texture'). +desc(`Test texture size requirement for 1D texture`). +params((u) => +u // +// Compressed and depth-stencil textures are invalid for 1D. +.combine('format', kRegularTextureFormats). +beginSubcases(). +combine('widthVariant', [ +{ mult: 1, add: -1 }, +{ mult: 1, add: 0 }, +{ mult: 1, add: 1 }] +). +combine('height', [1, 2]). +combine('depthOrArrayLayers', [1, 2]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, widthVariant, height, depthOrArrayLayers } = t.params; + const width = t.makeLimitVariant('maxTextureDimension1D', widthVariant); + + const descriptor = { + size: [width, height, depthOrArrayLayers], + dimension: '1d', + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const success = + width <= t.device.limits.maxTextureDimension1D && height === 1 && depthOrArrayLayers === 1; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('texture_size,2d_texture,uncompressed_format'). +desc(`Test texture size requirement for 2D texture with uncompressed format.`). +params((u) => +u. +combine('dimension', [undefined, '2d']). +combine('format', kUncompressedTextureFormats). +combine( + 'sizeVariant', + [ + // Test the bound of width + [{ mult: 1, add: -1 }, { mult: 0, add: 1 }, { mult: 0, add: 1 }], + [{ mult: 1, add: 0 }, { mult: 0, add: 1 }, { mult: 0, add: 1 }], + [{ mult: 1, add: 1 }, { mult: 0, add: 1 }, { mult: 0, add: 1 }], + // Test the bound of height + [{ mult: 0, add: 1 }, { mult: 1, add: -1 }, { mult: 0, add: 1 }], + [{ mult: 0, add: 1 }, { mult: 1, add: 0 }, { mult: 0, add: 1 }], + [{ mult: 0, add: 1 }, { mult: 1, add: 1 }, { mult: 0, add: 1 }], + // Test the bound of array layers + [{ mult: 0, add: 1 }, { mult: 0, add: 1 }, { mult: 1, add: -1 }], + [{ mult: 0, add: 1 }, { mult: 0, add: 1 }, { mult: 1, add: 0 }], + [{ mult: 0, add: 1 }, { mult: 0, add: 1 }, { mult: 1, add: 1 }]] + +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format, sizeVariant } = t.params; + const size = [ + t.device.limits.maxTextureDimension2D, + t.device.limits.maxTextureDimension2D, + t.device.limits.maxTextureArrayLayers]. + map((limit, ndx) => makeValueTestVariant(limit, sizeVariant[ndx])); + + const descriptor = { + size, + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const success = + size[0] <= t.device.limits.maxTextureDimension2D && + size[1] <= t.device.limits.maxTextureDimension2D && + size[2] <= t.device.limits.maxTextureArrayLayers; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('texture_size,2d_texture,compressed_format'). +desc(`Test texture size requirement for 2D texture with compressed format.`). +params((u) => +u. +combine('dimension', [undefined, '2d']). +combine('format', kCompressedTextureFormats). +expand('sizeVariant', (p) => { + const { blockWidth, blockHeight } = kTextureFormatInfo[p.format]; + return [ + // Test the bound of width + [ + { mult: 1, add: -1 }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: -blockWidth }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: -blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: 0 }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: 0 }, + { mult: 0, add: blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: 1 }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 0, add: 1 }], + + // Test the bound of height + [ + { mult: 0, add: 1 }, + { mult: 1, add: -1 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: -blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 1, add: -blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: 0 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 1, add: 0 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: +1 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: +blockWidth }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 1, add: +blockHeight }, + { mult: 0, add: 1 }], + + // Test the bound of array layers + [ + { mult: 0, add: 1 }, + { mult: 0, add: 1 }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: blockHeight }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: 1 }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: blockHeight }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: 1 }, + { mult: 1, add: +1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 1, add: +1 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: blockHeight }, + { mult: 1, add: +1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 1, add: +1 }]]; + + +}) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format, sizeVariant } = t.params; + const info = kTextureFormatInfo[format]; + const size = [ + t.device.limits.maxTextureDimension2D, + t.device.limits.maxTextureDimension2D, + t.device.limits.maxTextureArrayLayers]. + map((limit, ndx) => makeValueTestVariant(limit, sizeVariant[ndx])); + + const descriptor = { + size, + dimension, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const success = + size[0] % info.blockWidth === 0 && + size[1] % info.blockHeight === 0 && + size[0] <= t.device.limits.maxTextureDimension2D && + size[1] <= t.device.limits.maxTextureDimension2D && + size[2] <= t.device.limits.maxTextureArrayLayers; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('texture_size,3d_texture,uncompressed_format'). +desc( + `Test texture size requirement for 3D texture with uncompressed format. Note that depth/stencil formats are invalid for 3D textures, so we only test regular formats.` +). +params((u) => +u // +.combine('format', kRegularTextureFormats). +beginSubcases(). +combine( + 'sizeVariant', + [ + // Test the bound of width + [{ mult: 1, add: -1 }, { mult: 0, add: 1 }, { mult: 0, add: 1 }], + [{ mult: 1, add: 0 }, { mult: 0, add: 1 }, { mult: 0, add: 1 }], + [{ mult: 1, add: +1 }, { mult: 0, add: 1 }, { mult: 0, add: 1 }], + // Test the bound of height + [{ mult: 0, add: 1 }, { mult: 1, add: -1 }, { mult: 0, add: 1 }], + [{ mult: 0, add: 1 }, { mult: 1, add: 0 }, { mult: 0, add: 1 }], + [{ mult: 0, add: 1 }, { mult: 1, add: +1 }, { mult: 0, add: 1 }], + // Test the bound of depth + [{ mult: 0, add: 1 }, { mult: 0, add: 1 }, { mult: 1, add: -1 }], + [{ mult: 0, add: 1 }, { mult: 0, add: 1 }, { mult: 1, add: 0 }], + [{ mult: 0, add: 1 }, { mult: 0, add: 1 }, { mult: 1, add: +1 }]] + +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, sizeVariant } = t.params; + const maxTextureDimension3D = t.device.limits.maxTextureDimension3D; + const size = sizeVariant.map((variant) => t.makeLimitVariant('maxTextureDimension3D', variant)); + + const descriptor = { + size, + dimension: '3d', + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const success = + size[0] <= maxTextureDimension3D && + size[1] <= maxTextureDimension3D && + size[2] <= maxTextureDimension3D; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('texture_size,3d_texture,compressed_format'). +desc(`Test texture size requirement for 3D texture with compressed format.`). +params((u) => +u // +.combine('format', kCompressedTextureFormats). +beginSubcases(). +expand('sizeVariant', (p) => { + const { blockWidth, blockHeight } = kTextureFormatInfo[p.format]; + return [ + // Test the bound of width + [ + { mult: 1, add: -1 }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: -blockWidth }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: -blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: 0 }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: 0 }, + { mult: 0, add: blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: +1 }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: +blockWidth }, + { mult: 0, add: 1 }, + { mult: 0, add: 1 }], + + [ + { mult: 1, add: +blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 0, add: 1 }], + + // Test the bound of height + [ + { mult: 0, add: 1 }, + { mult: 1, add: -1 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: -blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 1, add: -blockHeight }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: 0 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 1, add: 0 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: +1 }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: 1 }, + { mult: 1, add: +blockWidth }, + { mult: 0, add: 1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 1, add: +blockHeight }, + { mult: 0, add: 1 }], + + // Test the bound of depth + [ + { mult: 0, add: 1 }, + { mult: 0, add: 1 }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: blockHeight }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 1, add: -1 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: 1 }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: blockHeight }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 1, add: 0 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: 1 }, + { mult: 1, add: +1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: 1 }, + { mult: 1, add: +1 }], + + [ + { mult: 0, add: 1 }, + { mult: 0, add: blockHeight }, + { mult: 1, add: +1 }], + + [ + { mult: 0, add: blockWidth }, + { mult: 0, add: blockHeight }, + { mult: 1, add: +1 }]]; + + +}) +). +beforeAllSubcases((t) => { + // Compressed formats are not supported in 3D in WebGPU v1 because they are complicated but not very useful for now. + throw new SkipTestCase('Compressed 3D texture is not supported'); + + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, sizeVariant } = t.params; + const info = kTextureFormatInfo[format]; + + const maxTextureDimension3D = t.device.limits.maxTextureDimension3D; + const size = sizeVariant.map((variant) => t.makeLimitVariant('maxTextureDimension3D', variant)); + + assert( + maxTextureDimension3D % info.blockWidth === 0 && + maxTextureDimension3D % info.blockHeight === 0 + ); + + const descriptor = { + size, + dimension: '3d', + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + + const success = + size[0] % info.blockWidth === 0 && + size[1] % info.blockHeight === 0 && + size[0] <= maxTextureDimension3D && + size[1] <= maxTextureDimension3D && + size[2] <= maxTextureDimension3D; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('texture_usage'). +desc( + `Test texture usage (single usage or combined usages) for every texture format and every dimension type` +). +params((u) => +u. +combine('dimension', [undefined, ...kTextureDimensions]). +combine('format', kTextureFormats). +beginSubcases() +// If usage0 and usage1 are the same, then the usage being test is a single usage. Otherwise, it is a combined usage. +.combine('usage0', kTextureUsages). +combine('usage1', kTextureUsages) +// Filter out incompatible dimension type and format combinations. +.filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { dimension, format, usage0, usage1 } = t.params; + const info = kTextureFormatInfo[format]; + + const size = [info.blockWidth, info.blockHeight, 1]; + const usage = usage0 | usage1; + const descriptor = { + size, + dimension, + format, + usage + }; + + let success = true; + const appliedDimension = dimension ?? '2d'; + // Note that we unconditionally test copy usages for all formats. We don't check copySrc/copyDst in kTextureFormatInfo in capability_info.js + // if (!info.copySrc && (usage & GPUTextureUsage.COPY_SRC) !== 0) success = false; + // if (!info.copyDst && (usage & GPUTextureUsage.COPY_DST) !== 0) success = false; + if ( + (usage & GPUTextureUsage.STORAGE_BINDING) !== 0 && + !isTextureFormatUsableAsStorageFormat(format, t.isCompatibility)) + + success = false; + if ( + (!info.renderable || appliedDimension !== '2d' && appliedDimension !== '3d') && + (usage & GPUTextureUsage.RENDER_ATTACHMENT) !== 0) + + success = false; + + t.expectValidationError(() => { + t.device.createTexture(descriptor); + }, !success); +}); + +g.test('viewFormats'). +desc( + `Test creating a texture with viewFormats list for all {texture format}x{view format}. Only compatible view formats should be valid.` +). +params((u) => +u. +combine('formatFeature', kFeaturesForFormats). +combine('viewFormatFeature', kFeaturesForFormats). +beginSubcases(). +expand('format', ({ formatFeature }) => +filterFormatsByFeature(formatFeature, kTextureFormats) +). +expand('viewFormat', ({ viewFormatFeature }) => +filterFormatsByFeature(viewFormatFeature, kTextureFormats) +) +). +beforeAllSubcases((t) => { + const { formatFeature, viewFormatFeature } = t.params; + t.selectDeviceOrSkipTestCase([formatFeature, viewFormatFeature]); +}). +fn((t) => { + const { format, viewFormat } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + + t.skipIfTextureFormatNotSupported(format, viewFormat); + + const compatible = t.isCompatibility ? + viewFormat === format : + viewCompatible(format, viewFormat); + + // Test the viewFormat in the list. + t.expectValidationError(() => { + t.device.createTexture({ format, + size: [blockWidth, blockHeight], usage: GPUTextureUsage.TEXTURE_BINDING, - }; + viewFormats: [viewFormat] + }); + }, !compatible); - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !_success); - }); - -g.test('texture_size,1d_texture') - .desc(`Test texture size requirement for 1D texture`) - .params(u => - u // - // Compressed and depth-stencil textures are invalid for 1D. - .combine('format', kRegularTextureFormats) - .beginSubcases() - .combine('widthVariant', [ - { mult: 1, add: -1 }, - { mult: 1, add: 0 }, - { mult: 1, add: 1 }, - ]) - .combine('height', [1, 2]) - .combine('depthOrArrayLayers', [1, 2]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { format, widthVariant, height, depthOrArrayLayers } = t.params; - const width = t.makeLimitVariant('maxTextureDimension1D', widthVariant); - - const descriptor = { - size: [width, height, depthOrArrayLayers], - dimension: '1d', + // Test the viewFormat and the texture format in the list. + t.expectValidationError(() => { + t.device.createTexture({ format, + size: [blockWidth, blockHeight], usage: GPUTextureUsage.TEXTURE_BINDING, - }; + viewFormats: [viewFormat, format] + }); + }, !compatible); - const success = - width <= t.device.limits.maxTextureDimension1D && height === 1 && depthOrArrayLayers === 1; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('texture_size,2d_texture,uncompressed_format') - .desc(`Test texture size requirement for 2D texture with uncompressed format.`) - .params(u => - u - .combine('dimension', [undefined, '2d']) - .combine('format', kUncompressedTextureFormats) - .combine('sizeVariant', [ - // Test the bound of width - [ - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 1, add: 1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - // Test the bound of height - [ - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 1, add: 1 }, - { mult: 0, add: 1 }, - ], - // Test the bound of array layers - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: 1 }, - ], - ]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format, sizeVariant } = t.params; - const size = [ - t.device.limits.maxTextureDimension2D, - t.device.limits.maxTextureDimension2D, - t.device.limits.maxTextureArrayLayers, - ].map((limit, ndx) => makeValueTestVariant(limit, sizeVariant[ndx])); - - const descriptor = { - size, - dimension, + // Test the viewFormat multiple times in the list. + t.expectValidationError(() => { + t.device.createTexture({ format, + size: [blockWidth, blockHeight], usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - const success = - size[0] <= t.device.limits.maxTextureDimension2D && - size[1] <= t.device.limits.maxTextureDimension2D && - size[2] <= t.device.limits.maxTextureArrayLayers; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('texture_size,2d_texture,compressed_format') - .desc(`Test texture size requirement for 2D texture with compressed format.`) - .params(u => - u - .combine('dimension', [undefined, '2d']) - .combine('format', kCompressedTextureFormats) - .expand('sizeVariant', p => { - const { blockWidth, blockHeight } = kTextureFormatInfo[p.format]; - return [ - // Test the bound of width - [ - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: -blockWidth }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: -blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: 0 }, - { mult: 0, add: blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: 1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 0, add: 1 }, - ], - - // Test the bound of height - [ - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: -blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 1, add: -blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: +blockWidth }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 1, add: +blockHeight }, - { mult: 0, add: 1 }, - ], - - // Test the bound of array layers - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: blockHeight }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: blockHeight }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: blockHeight }, - { mult: 1, add: +1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 1, add: +1 }, - ], - ]; - }) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format, sizeVariant } = t.params; - const info = kTextureFormatInfo[format]; - const size = [ - t.device.limits.maxTextureDimension2D, - t.device.limits.maxTextureDimension2D, - t.device.limits.maxTextureArrayLayers, - ].map((limit, ndx) => makeValueTestVariant(limit, sizeVariant[ndx])); - - const descriptor = { - size, - dimension, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - const success = - size[0] % info.blockWidth === 0 && - size[1] % info.blockHeight === 0 && - size[0] <= t.device.limits.maxTextureDimension2D && - size[1] <= t.device.limits.maxTextureDimension2D && - size[2] <= t.device.limits.maxTextureArrayLayers; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('texture_size,3d_texture,uncompressed_format') - .desc( - `Test texture size requirement for 3D texture with uncompressed format. Note that depth/stencil formats are invalid for 3D textures, so we only test regular formats.` - ) - .params(u => - u // - .combine('format', kRegularTextureFormats) - .beginSubcases() - .combine('sizeVariant', [ - // Test the bound of width - [ - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 1, add: +1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - // Test the bound of height - [ - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - { mult: 0, add: 1 }, - ], - // Test the bound of depth - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - ], - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - ], - ]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { format, sizeVariant } = t.params; - const maxTextureDimension3D = t.device.limits.maxTextureDimension3D; - const size = sizeVariant.map(variant => t.makeLimitVariant('maxTextureDimension3D', variant)); - - const descriptor = { - size, - dimension: '3d', - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - const success = - size[0] <= maxTextureDimension3D && - size[1] <= maxTextureDimension3D && - size[2] <= maxTextureDimension3D; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('texture_size,3d_texture,compressed_format') - .desc(`Test texture size requirement for 3D texture with compressed format.`) - .params(u => - u // - .combine('format', kCompressedTextureFormats) - .beginSubcases() - .expand('sizeVariant', p => { - const { blockWidth, blockHeight } = kTextureFormatInfo[p.format]; - return [ - // Test the bound of width - [ - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: -blockWidth }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: -blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: 0 }, - { mult: 0, add: blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: +1 }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: +blockWidth }, - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 1, add: +blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 0, add: 1 }, - ], - - // Test the bound of height - [ - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: -blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 1, add: -blockHeight }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 1, add: 0 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 1, add: +blockWidth }, - { mult: 0, add: 1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 1, add: +blockHeight }, - { mult: 0, add: 1 }, - ], - - // Test the bound of depth - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: blockHeight }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 1, add: -1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: blockHeight }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 1, add: 0 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: 1 }, - { mult: 1, add: +1 }, - ], - - [ - { mult: 0, add: 1 }, - { mult: 0, add: blockHeight }, - { mult: 1, add: +1 }, - ], - - [ - { mult: 0, add: blockWidth }, - { mult: 0, add: blockHeight }, - { mult: 1, add: +1 }, - ], - ]; - }) - ) - .beforeAllSubcases(t => { - // Compressed formats are not supported in 3D in WebGPU v1 because they are complicated but not very useful for now. - throw new SkipTestCase('Compressed 3D texture is not supported'); - - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { format, sizeVariant } = t.params; - const info = kTextureFormatInfo[format]; - - const maxTextureDimension3D = t.device.limits.maxTextureDimension3D; - const size = sizeVariant.map(variant => t.makeLimitVariant('maxTextureDimension3D', variant)); - - assert( - maxTextureDimension3D % info.blockWidth === 0 && - maxTextureDimension3D % info.blockHeight === 0 - ); - - const descriptor = { - size, - dimension: '3d', - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - - const success = - size[0] % info.blockWidth === 0 && - size[1] % info.blockHeight === 0 && - size[0] <= maxTextureDimension3D && - size[1] <= maxTextureDimension3D && - size[2] <= maxTextureDimension3D; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('texture_usage') - .desc( - `Test texture usage (single usage or combined usages) for every texture format and every dimension type` - ) - .params(u => - u - .combine('dimension', [undefined, ...kTextureDimensions]) - .combine('format', kTextureFormats) - .beginSubcases() - // If usage0 and usage1 are the same, then the usage being test is a single usage. Otherwise, it is a combined usage. - .combine('usage0', kTextureUsages) - .combine('usage1', kTextureUsages) - // Filter out incompatible dimension type and format combinations. - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { dimension, format, usage0, usage1 } = t.params; - const info = kTextureFormatInfo[format]; - - const size = [info.blockWidth, info.blockHeight, 1]; - const usage = usage0 | usage1; - const descriptor = { - size, - dimension, - format, - usage, - }; - - let success = true; - const appliedDimension = dimension ?? '2d'; - // Note that we unconditionally test copy usages for all formats. We don't check copySrc/copyDst in kTextureFormatInfo in capability_info.js - // if (!info.copySrc && (usage & GPUTextureUsage.COPY_SRC) !== 0) success = false; - // if (!info.copyDst && (usage & GPUTextureUsage.COPY_DST) !== 0) success = false; - if (!info.color?.storage && (usage & GPUTextureUsage.STORAGE_BINDING) !== 0) success = false; - if ( - (!info.renderable || appliedDimension !== '2d') && - (usage & GPUTextureUsage.RENDER_ATTACHMENT) !== 0 - ) - success = false; - - t.expectValidationError(() => { - t.device.createTexture(descriptor); - }, !success); - }); - -g.test('viewFormats') - .desc( - `Test creating a texture with viewFormats list for all {texture format}x{view format}. Only compatible view formats should be valid.` - ) - .params(u => - u - .combine('formatFeature', kFeaturesForFormats) - .combine('viewFormatFeature', kFeaturesForFormats) - .beginSubcases() - .expand('format', ({ formatFeature }) => - filterFormatsByFeature(formatFeature, kTextureFormats) - ) - .expand('viewFormat', ({ viewFormatFeature }) => - filterFormatsByFeature(viewFormatFeature, kTextureFormats) - ) - ) - .beforeAllSubcases(t => { - const { formatFeature, viewFormatFeature } = t.params; - t.selectDeviceOrSkipTestCase([formatFeature, viewFormatFeature]); - }) - .fn(t => { - const { format, viewFormat } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - - t.skipIfTextureFormatNotSupported(format, viewFormat); - - const compatible = viewCompatible(format, viewFormat); - - // Test the viewFormat in the list. - t.expectValidationError(() => { - t.device.createTexture({ - format, - size: [blockWidth, blockHeight], - usage: GPUTextureUsage.TEXTURE_BINDING, - viewFormats: [viewFormat], - }); - }, !compatible); - - // Test the viewFormat and the texture format in the list. - t.expectValidationError(() => { - t.device.createTexture({ - format, - size: [blockWidth, blockHeight], - usage: GPUTextureUsage.TEXTURE_BINDING, - viewFormats: [viewFormat, format], - }); - }, !compatible); - - // Test the viewFormat multiple times in the list. - t.expectValidationError(() => { - t.device.createTexture({ - format, - size: [blockWidth, blockHeight], - usage: GPUTextureUsage.TEXTURE_BINDING, - viewFormats: [viewFormat, viewFormat], - }); - }, !compatible); - }); + viewFormats: [viewFormat, viewFormat] + }); + }, !compatible); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createView.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createView.spec.js index 5341b2a17fe..ed7831fae6e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createView.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/createView.spec.js @@ -1,27 +1,26 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `createView validation tests.`; -import { kUnitCaseParamsBuilder } from '../../../common/framework/params_builder.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `createView validation tests.`;import { kUnitCaseParamsBuilder } from '../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; import { unreachable } from '../../../common/util/util.js'; import { kTextureAspects, kTextureDimensions, - kTextureViewDimensions, -} from '../../capability_info.js'; + kTextureViewDimensions } from +'../../capability_info.js'; import { kTextureFormatInfo, kTextureFormats, kFeaturesForFormats, filterFormatsByFeature, - viewCompatible, -} from '../../format_info.js'; + viewCompatible } from +'../../format_info.js'; import { kResourceStates } from '../../gpu_test.js'; import { getTextureDimensionFromView, reifyTextureViewDescriptor, - viewDimensionsForTextureDimension, -} from '../../util/texture/base.js'; + viewDimensionsForTextureDimension } from +'../../util/texture/base.js'; import { reifyExtent3D } from '../../util/unions.js'; import { ValidationTest } from './validation_test.js'; @@ -30,132 +29,134 @@ export const g = makeTestGroup(ValidationTest); const kLevels = 6; -g.test('format') - .desc( - `Views must have the view format compatible with the base texture, for all {texture format}x{view format}.` - ) - .params(u => - u - .combine('textureFormatFeature', kFeaturesForFormats) - .combine('viewFormatFeature', kFeaturesForFormats) - .beginSubcases() - .expand('textureFormat', ({ textureFormatFeature }) => - filterFormatsByFeature(textureFormatFeature, kTextureFormats) - ) - .expand('viewFormat', ({ viewFormatFeature }) => - filterFormatsByFeature(viewFormatFeature, [undefined, ...kTextureFormats]) - ) - .combine('useViewFormatList', [false, true]) - ) - .beforeAllSubcases(t => { - const { textureFormatFeature, viewFormatFeature } = t.params; - t.selectDeviceOrSkipTestCase([textureFormatFeature, viewFormatFeature]); - }) - .fn(t => { - const { textureFormat, viewFormat, useViewFormatList } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[textureFormat]; +g.test('format'). +desc( + `Views must have the view format compatible with the base texture, for all {texture format}x{view format}.` +). +params((u) => +u. +combine('textureFormatFeature', kFeaturesForFormats). +combine('viewFormatFeature', kFeaturesForFormats). +beginSubcases(). +expand('textureFormat', ({ textureFormatFeature }) => +filterFormatsByFeature(textureFormatFeature, kTextureFormats) +). +expand('viewFormat', ({ viewFormatFeature }) => +filterFormatsByFeature(viewFormatFeature, [undefined, ...kTextureFormats]) +). +combine('useViewFormatList', [false, true]) +). +beforeAllSubcases((t) => { + const { textureFormatFeature, viewFormatFeature } = t.params; + t.selectDeviceOrSkipTestCase([textureFormatFeature, viewFormatFeature]); +}). +fn((t) => { + const { textureFormat, viewFormat, useViewFormatList } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[textureFormat]; - t.skipIfTextureFormatNotSupported(textureFormat, viewFormat); + t.skipIfTextureFormatNotSupported(textureFormat, viewFormat); + // Compatibility mode does not support format reinterpretation. + t.skipIf(t.isCompatibility && viewFormat !== undefined && viewFormat !== textureFormat); - const compatible = viewFormat === undefined || viewCompatible(textureFormat, viewFormat); + const compatible = viewFormat === undefined || viewCompatible(textureFormat, viewFormat); - const texture = t.device.createTexture({ - format: textureFormat, - size: [blockWidth, blockHeight], - usage: GPUTextureUsage.TEXTURE_BINDING, + const texture = t.device.createTexture({ + format: textureFormat, + size: [blockWidth, blockHeight], + usage: GPUTextureUsage.TEXTURE_BINDING, - // This is a test of createView, not createTexture. Don't pass viewFormats here that - // are not compatible, as that is tested in createTexture.spec.ts. - viewFormats: - useViewFormatList && compatible && viewFormat !== undefined ? [viewFormat] : undefined, - }); - - // Successful if there is no view format, no reinterpretation was required, or the formats are compatible - // and is was specified in the viewFormats list. - const success = - viewFormat === undefined || viewFormat === textureFormat || (compatible && useViewFormatList); - t.expectValidationError(() => { - texture.createView({ format: viewFormat }); - }, !success); + // This is a test of createView, not createTexture. Don't pass viewFormats here that + // are not compatible, as that is tested in createTexture.spec.ts. + viewFormats: + useViewFormatList && compatible && viewFormat !== undefined ? [viewFormat] : undefined }); -g.test('dimension') - .desc( - `For all {texture dimension}, {view dimension}, test that they must be compatible: + // Successful if there is no view format, no reinterpretation was required, or the formats are compatible + // and is was specified in the viewFormats list. + const success = + viewFormat === undefined || viewFormat === textureFormat || compatible && useViewFormatList; + t.expectValidationError(() => { + texture.createView({ format: viewFormat }); + }, !success); +}); + +g.test('dimension'). +desc( + `For all {texture dimension}, {view dimension}, test that they must be compatible: - 1d -> 1d - 2d -> 2d, 2d-array, cube, or cube-array - 3d -> 3d` - ) - .params(u => - u - .combine('textureDimension', kTextureDimensions) - .combine('viewDimension', [...kTextureViewDimensions, undefined]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureViewDimensionNotSupported(t.params.viewDimension); - }) - .fn(t => { - const { textureDimension, viewDimension } = t.params; +). +params((u) => +u. +combine('textureDimension', kTextureDimensions). +combine('viewDimension', [...kTextureViewDimensions, undefined]) +). +beforeAllSubcases((t) => { + t.skipIfTextureViewDimensionNotSupported(t.params.viewDimension); +}). +fn((t) => { + const { textureDimension, viewDimension } = t.params; - const size = textureDimension === '1d' ? [4] : [4, 4, 6]; - const textureDescriptor = { - format: 'rgba8unorm', - dimension: textureDimension, - size, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - const texture = t.device.createTexture(textureDescriptor); + const size = textureDimension === '1d' ? [4] : [4, 4, 6]; + const textureDescriptor = { + format: 'rgba8unorm', + dimension: textureDimension, + size, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + const texture = t.device.createTexture(textureDescriptor); - const view = { dimension: viewDimension }; - const reified = reifyTextureViewDescriptor(textureDescriptor, view); + const view = { dimension: viewDimension }; + const reified = reifyTextureViewDescriptor(textureDescriptor, view); - const success = getTextureDimensionFromView(reified.dimension) === textureDimension; - t.expectValidationError(() => { - texture.createView(view); - }, !success); - }); + const success = getTextureDimensionFromView(reified.dimension) === textureDimension; + t.expectValidationError(() => { + texture.createView(view); + }, !success); +}); -g.test('aspect') - .desc( - `For every {format}x{aspect}, test that the view aspect must exist in the format: +g.test('aspect'). +desc( + `For every {format}x{aspect}, test that the view aspect must exist in the format: - "all" is allowed for any format - "depth-only" is allowed only for depth and depth-stencil formats - "stencil-only" is allowed only for stencil and depth-stencil formats` - ) - .params(u => - u // - .combine('format', kTextureFormats) - .combine('aspect', kTextureAspects) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(format); - }) - .fn(t => { - const { format, aspect } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u // +.combine('format', kTextureFormats). +combine('aspect', kTextureAspects) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(format); +}). +fn((t) => { + const { format, aspect } = t.params; + const info = kTextureFormatInfo[format]; - const texture = t.device.createTexture({ - format, - size: [info.blockWidth, info.blockHeight, 1], - usage: GPUTextureUsage.TEXTURE_BINDING, - }); - - const success = - aspect === 'all' || - (aspect === 'depth-only' && info.depth) || - (aspect === 'stencil-only' && info.stencil); - t.expectValidationError(() => { - texture.createView({ aspect }); - }, !success); + const texture = t.device.createTexture({ + format, + size: [info.blockWidth, info.blockHeight, 1], + usage: GPUTextureUsage.TEXTURE_BINDING }); -const kTextureAndViewDimensions = kUnitCaseParamsBuilder - .combine('textureDimension', kTextureDimensions) - .expand('viewDimension', p => [ - undefined, - ...viewDimensionsForTextureDimension(p.textureDimension), - ]); + const success = + aspect === 'all' || + aspect === 'depth-only' && info.depth || + aspect === 'stencil-only' && info.stencil; + t.expectValidationError(() => { + texture.createView({ aspect }); + }, !success); +}); + +const kTextureAndViewDimensions = kUnitCaseParamsBuilder. +combine('textureDimension', kTextureDimensions). +expand('viewDimension', (p) => [ +undefined, +...viewDimensionsForTextureDimension(p.textureDimension)] +); function validateCreateViewLayersLevels(tex, view) { const textureLevels = tex.mipLevelCount ?? 1; @@ -163,12 +164,12 @@ function validateCreateViewLayersLevels(tex, view) { const reified = reifyTextureViewDescriptor(tex, view); let success = - reified.mipLevelCount > 0 && - reified.baseMipLevel < textureLevels && - reified.baseMipLevel + reified.mipLevelCount <= textureLevels && - reified.arrayLayerCount > 0 && - reified.baseArrayLayer < textureLayers && - reified.baseArrayLayer + reified.arrayLayerCount <= textureLayers; + reified.mipLevelCount > 0 && + reified.baseMipLevel < textureLevels && + reified.baseMipLevel + reified.mipLevelCount <= textureLevels && + reified.arrayLayerCount > 0 && + reified.baseArrayLayer < textureLayers && + reified.baseArrayLayer + reified.arrayLayerCount <= textureLayers; if (reified.dimension === '1d' || reified.dimension === '2d' || reified.dimension === '3d') { success &&= reified.arrayLayerCount === 1; } else if (reified.dimension === 'cube') { @@ -179,9 +180,9 @@ function validateCreateViewLayersLevels(tex, view) { return success; } -g.test('array_layers') - .desc( - `For each texture dimension {1d,2d,3d}, for each possible view dimension for that texture +g.test('array_layers'). +desc( + `For each texture dimension {1d,2d,3d}, for each possible view dimension for that texture dimension (or undefined, which defaults to the texture dimension), test validation of layer counts: - 1d, 2d, and 3d must have exactly 1 layer @@ -190,157 +191,152 @@ g.test('array_layers') - cube-array must have a positive multiple of 6 layers - Defaulting of baseArrayLayer and arrayLayerCount - baseArrayLayer+arrayLayerCount must be within the texture` - ) - .params(u => - kTextureAndViewDimensions - .beginSubcases() - .expand('textureLayers', ({ textureDimension: d }) => (d === '2d' ? [1, 6, 18] : [1])) - .combine('textureLevels', [1, kLevels]) - .unless(p => p.textureDimension === '1d' && p.textureLevels !== 1) - .expand( - 'baseArrayLayer', - ({ textureLayers: l }) => new Set([undefined, 0, 1, 5, 6, 7, l - 1, l, l + 1]) - ) - .expand('arrayLayerCount', function* ({ textureLayers: l, baseArrayLayer = 0 }) { - yield undefined; - for (const lastArrayLayer of new Set([0, 1, 5, 6, 7, l - 1, l, l + 1])) { - if (baseArrayLayer <= lastArrayLayer) yield lastArrayLayer - baseArrayLayer; - } - }) - ) - .fn(t => { - const { - textureDimension, - viewDimension, - textureLayers, - textureLevels, - baseArrayLayer, - arrayLayerCount, - } = t.params; +). +params( + kTextureAndViewDimensions. + beginSubcases(). + expand('textureLayers', ({ textureDimension: d }) => d === '2d' ? [1, 6, 18] : [1]). + combine('textureLevels', [1, kLevels]). + unless((p) => p.textureDimension === '1d' && p.textureLevels !== 1). + expand( + 'baseArrayLayer', + ({ textureLayers: l }) => new Set([undefined, 0, 1, 5, 6, 7, l - 1, l, l + 1]) + ). + expand('arrayLayerCount', function* ({ textureLayers: l, baseArrayLayer = 0 }) { + yield undefined; + for (const lastArrayLayer of new Set([0, 1, 5, 6, 7, l - 1, l, l + 1])) { + if (baseArrayLayer <= lastArrayLayer) yield lastArrayLayer - baseArrayLayer; + } + }) +). +fn((t) => { + const { + textureDimension, + viewDimension, + textureLayers, + textureLevels, + baseArrayLayer, + arrayLayerCount + } = t.params; - t.skipIfTextureViewDimensionNotSupported(viewDimension); + t.skipIfTextureViewDimensionNotSupported(viewDimension); - const kWidth = 1 << (kLevels - 1); // 32 - const textureDescriptor = { - format: 'rgba8unorm', - dimension: textureDimension, - size: - textureDimension === '1d' - ? [kWidth] - : textureDimension === '2d' - ? [kWidth, kWidth, textureLayers] - : textureDimension === '3d' - ? [kWidth, kWidth, kWidth] - : unreachable(), - mipLevelCount: textureLevels, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; + const kWidth = 1 << kLevels - 1; // 32 + const textureDescriptor = { + format: 'rgba8unorm', + dimension: textureDimension, + size: + textureDimension === '1d' ? + [kWidth] : + textureDimension === '2d' ? + [kWidth, kWidth, textureLayers] : + textureDimension === '3d' ? + [kWidth, kWidth, kWidth] : + unreachable(), + mipLevelCount: textureLevels, + usage: GPUTextureUsage.TEXTURE_BINDING + }; - const viewDescriptor = { dimension: viewDimension, baseArrayLayer, arrayLayerCount }; - const success = validateCreateViewLayersLevels(textureDescriptor, viewDescriptor); + const viewDescriptor = { dimension: viewDimension, baseArrayLayer, arrayLayerCount }; + const success = validateCreateViewLayersLevels(textureDescriptor, viewDescriptor); - const texture = t.device.createTexture(textureDescriptor); - t.expectValidationError(() => { - texture.createView(viewDescriptor); - }, !success); - }); + const texture = t.device.createTexture(textureDescriptor); + t.expectValidationError(() => { + texture.createView(viewDescriptor); + }, !success); +}); -g.test('mip_levels') - .desc( - `Views must have at least one level, and must be within the level of the base texture. +g.test('mip_levels'). +desc( + `Views must have at least one level, and must be within the level of the base texture. - mipLevelCount=0 at various baseMipLevel values - Cases where baseMipLevel+mipLevelCount goes past the end of the texture - Cases with baseMipLevel or mipLevelCount undefined (compares against reference defaulting impl) ` - ) - .params(u => - kTextureAndViewDimensions - .beginSubcases() - .combine('textureLevels', [1, kLevels - 2, kLevels]) - .unless(p => p.textureDimension === '1d' && p.textureLevels !== 1) - .expand( - 'baseMipLevel', - ({ textureLevels: l }) => new Set([undefined, 0, 1, 5, 6, 7, l - 1, l, l + 1]) - ) - .expand('mipLevelCount', function* ({ textureLevels: l, baseMipLevel = 0 }) { - yield undefined; - for (const lastMipLevel of new Set([0, 1, 5, 6, 7, l - 1, l, l + 1])) { - if (baseMipLevel <= lastMipLevel) yield lastMipLevel - baseMipLevel; - } - }) - ) - .fn(t => { - const { - textureDimension, - viewDimension, - textureLevels, - baseMipLevel, - mipLevelCount, - } = t.params; +). +params( + kTextureAndViewDimensions. + beginSubcases(). + combine('textureLevels', [1, kLevels - 2, kLevels]). + unless((p) => p.textureDimension === '1d' && p.textureLevels !== 1). + expand( + 'baseMipLevel', + ({ textureLevels: l }) => new Set([undefined, 0, 1, 5, 6, 7, l - 1, l, l + 1]) + ). + expand('mipLevelCount', function* ({ textureLevels: l, baseMipLevel = 0 }) { + yield undefined; + for (const lastMipLevel of new Set([0, 1, 5, 6, 7, l - 1, l, l + 1])) { + if (baseMipLevel <= lastMipLevel) yield lastMipLevel - baseMipLevel; + } + }) +). +fn((t) => { + const { textureDimension, viewDimension, textureLevels, baseMipLevel, mipLevelCount } = + t.params; - t.skipIfTextureViewDimensionNotSupported(viewDimension); + t.skipIfTextureViewDimensionNotSupported(viewDimension); - const textureDescriptor = { - format: 'rgba8unorm', - dimension: textureDimension, - size: - textureDimension === '1d' ? [32] : textureDimension === '3d' ? [32, 32, 32] : [32, 32, 18], - mipLevelCount: textureLevels, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; + const textureDescriptor = { + format: 'rgba8unorm', + dimension: textureDimension, + size: + textureDimension === '1d' ? [32] : textureDimension === '3d' ? [32, 32, 32] : [32, 32, 18], + mipLevelCount: textureLevels, + usage: GPUTextureUsage.TEXTURE_BINDING + }; - const viewDescriptor = { dimension: viewDimension, baseMipLevel, mipLevelCount }; - const success = validateCreateViewLayersLevels(textureDescriptor, viewDescriptor); + const viewDescriptor = { dimension: viewDimension, baseMipLevel, mipLevelCount }; + const success = validateCreateViewLayersLevels(textureDescriptor, viewDescriptor); - const texture = t.device.createTexture(textureDescriptor); - t.debug(`${mipLevelCount} ${success}`); - t.expectValidationError(() => { - texture.createView(viewDescriptor); - }, !success); - }); + const texture = t.device.createTexture(textureDescriptor); + t.debug(`${mipLevelCount} ${success}`); + t.expectValidationError(() => { + texture.createView(viewDescriptor); + }, !success); +}); -g.test('cube_faces_square') - .desc( - `Test that the X/Y dimensions of cube and cube array textures must be square. +g.test('cube_faces_square'). +desc( + `Test that the X/Y dimensions of cube and cube array textures must be square. - {2d (control case), cube, cube-array}` - ) - .params(u => - u // - .combine('dimension', ['2d', 'cube', 'cube-array']) - .combine('size', [ - [4, 4, 6], - [5, 5, 6], - [4, 5, 6], - [4, 8, 6], - [8, 4, 6], - ]) - ) - .fn(t => { - const { dimension, size } = t.params; +). +params((u) => +u // +.combine('dimension', ['2d', 'cube', 'cube-array']). +combine('size', [ +[4, 4, 6], +[5, 5, 6], +[4, 5, 6], +[4, 8, 6], +[8, 4, 6]] +) +). +fn((t) => { + const { dimension, size } = t.params; - t.skipIfTextureViewDimensionNotSupported(dimension); + t.skipIfTextureViewDimensionNotSupported(dimension); - const texture = t.device.createTexture({ - format: 'rgba8unorm', - size, - usage: GPUTextureUsage.TEXTURE_BINDING, - }); - - const success = dimension === '2d' || size[0] === size[1]; - t.expectValidationError(() => { - texture.createView({ dimension }); - }, !success); + const texture = t.device.createTexture({ + format: 'rgba8unorm', + size, + usage: GPUTextureUsage.TEXTURE_BINDING }); -g.test('texture_state') - .desc(`createView should fail if the texture is invalid (but succeed if it is destroyed)`) - .paramsSubcasesOnly(u => u.combine('state', kResourceStates)) - .fn(t => { - const { state } = t.params; - const texture = t.createTextureWithState(state); + const success = dimension === '2d' || size[0] === size[1]; + t.expectValidationError(() => { + texture.createView({ dimension }); + }, !success); +}); - t.expectValidationError(() => { - texture.createView(); - }, state === 'invalid'); - }); +g.test('texture_state'). +desc(`createView should fail if the texture is invalid (but succeed if it is destroyed)`). +paramsSubcasesOnly((u) => u.combine('state', kResourceStates)). +fn((t) => { + const { state } = t.params; + const texture = t.createTextureWithState(state); + + t.expectValidationError(() => { + texture.createView(); + }, state === 'invalid'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/debugMarker.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/debugMarker.spec.js index f6e247b66b9..c042630d6bf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/debugMarker.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/debugMarker.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test validation of pushDebugGroup, popDebugGroup, and insertDebugMarker. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { ValidationTest } from './validation_test.js'; @@ -12,88 +11,88 @@ class F extends ValidationTest { const attachmentTexture = this.device.createTexture({ format: 'rgba8unorm', size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); this.trackForCleanup(attachmentTexture); return commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: attachmentTexture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: attachmentTexture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); } } export const g = makeTestGroup(F); -g.test('push_pop_call_count_unbalance,command_encoder') - .desc( - ` +g.test('push_pop_call_count_unbalance,command_encoder'). +desc( + ` Test that a validation error is generated if {push,pop} debug group call count is not paired. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('pushCount', [1, 2, 3]) - .combine('popCount', [1, 2, 3]) - ) - .fn(t => { - const { pushCount, popCount } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('pushCount', [1, 2, 3]). +combine('popCount', [1, 2, 3]) +). +fn((t) => { + const { pushCount, popCount } = t.params; - const encoder = t.device.createCommandEncoder(); + const encoder = t.device.createCommandEncoder(); - for (let i = 0; i < pushCount; ++i) { - encoder.pushDebugGroup('EventStart'); - } + for (let i = 0; i < pushCount; ++i) { + encoder.pushDebugGroup('EventStart'); + } - encoder.insertDebugMarker('Marker'); + encoder.insertDebugMarker('Marker'); - for (let i = 0; i < popCount; ++i) { - encoder.popDebugGroup(); - } + for (let i = 0; i < popCount; ++i) { + encoder.popDebugGroup(); + } - t.expectValidationError(() => { - encoder.finish(); - }, pushCount !== popCount); - }); + t.expectValidationError(() => { + encoder.finish(); + }, pushCount !== popCount); +}); -g.test('push_pop_call_count_unbalance,render_compute_pass') - .desc( - ` +g.test('push_pop_call_count_unbalance,render_compute_pass'). +desc( + ` Test that a validation error is generated if {push,pop} debug group call count is not paired in ComputePassEncoder and RenderPassEncoder. ` - ) - .params(u => - u // - .combine('passType', ['compute', 'render']) - .beginSubcases() - .combine('pushCount', [1, 2, 3]) - .combine('popCount', [1, 2, 3]) - ) - .fn(t => { - const { passType, pushCount, popCount } = t.params; +). +params((u) => +u // +.combine('passType', ['compute', 'render']). +beginSubcases(). +combine('pushCount', [1, 2, 3]). +combine('popCount', [1, 2, 3]) +). +fn((t) => { + const { passType, pushCount, popCount } = t.params; - const encoder = t.device.createCommandEncoder(); + const encoder = t.device.createCommandEncoder(); - const pass = passType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder); + const pass = passType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder); - for (let i = 0; i < pushCount; ++i) { - pass.pushDebugGroup('EventStart'); - } + for (let i = 0; i < pushCount; ++i) { + pass.pushDebugGroup('EventStart'); + } - pass.insertDebugMarker('Marker'); + pass.insertDebugMarker('Marker'); - for (let i = 0; i < popCount; ++i) { - pass.popDebugGroup(); - } + for (let i = 0; i < popCount; ++i) { + pass.popDebugGroup(); + } - t.expectValidationError(() => { - pass.end(); - encoder.finish(); - }, pushCount !== popCount); - }); + t.expectValidationError(() => { + pass.end(); + encoder.finish(); + }, pushCount !== popCount); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginComputePass.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginComputePass.spec.js index 662b130bda6..6ba98492918 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginComputePass.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginComputePass.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for validation in beginComputePass and GPUComputePassDescriptor as its optional descriptor. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kQueryTypes } from '../../../capability_info.js'; import { ValidationTest } from '../validation_test.js'; @@ -21,128 +20,128 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('timestampWrites,query_set_type') - .desc( - ` +g.test('timestampWrites,query_set_type'). +desc( + ` Test that all entries of the timestampWrites must have type 'timestamp'. If all query types are not 'timestamp' in GPUComputePassDescriptor, a validation error should be generated. ` - ) - .params(u => - u // - .combine('queryType', kQueryTypes) - ) - .beforeAllSubcases(t => { - t.selectDeviceForQueryTypeOrSkipTestCase(['timestamp', t.params.queryType]); - }) - .fn(t => { - const { queryType } = t.params; +). +params((u) => +u // +.combine('queryType', kQueryTypes) +). +beforeAllSubcases((t) => { + t.selectDeviceForQueryTypeOrSkipTestCase(['timestamp', t.params.queryType]); +}). +fn((t) => { + const { queryType } = t.params; - const isValid = queryType === 'timestamp'; + const isValid = queryType === 'timestamp'; - const timestampWrites = { - querySet: t.device.createQuerySet({ type: queryType, count: 2 }), - beginningOfPassWriteIndex: 0, - endOfPassWriteIndex: 1, - }; + const timestampWrites = { + querySet: t.device.createQuerySet({ type: queryType, count: 2 }), + beginningOfPassWriteIndex: 0, + endOfPassWriteIndex: 1 + }; - const descriptor = { - timestampWrites, - }; + const descriptor = { + timestampWrites + }; - t.tryComputePass(isValid, descriptor); + t.tryComputePass(isValid, descriptor); +}); + +g.test('timestampWrites,invalid_query_set'). +desc(`Tests that timestampWrite that has an invalid query set generates a validation error.`). +params((u) => u.combine('querySetState', ['valid', 'invalid'])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase(['timestamp-query']); +}). +fn((t) => { + const { querySetState } = t.params; + + const querySet = t.createQuerySetWithState(querySetState, { + type: 'timestamp', + count: 1 }); -g.test('timestampWrites,invalid_query_set') - .desc(`Tests that timestampWrite that has an invalid query set generates a validation error.`) - .params(u => u.combine('querySetState', ['valid', 'invalid'])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase(['timestamp-query']); - }) - .fn(t => { - const { querySetState } = t.params; + const timestampWrites = { + querySet, + beginningOfPassWriteIndex: 0 + }; - const querySet = t.createQuerySetWithState(querySetState, { - type: 'timestamp', - count: 1, - }); + const descriptor = { + timestampWrites + }; - const timestampWrites = { - querySet, - beginningOfPassWriteIndex: 0, - }; + t.tryComputePass(querySetState === 'valid', descriptor); +}); - const descriptor = { - timestampWrites, - }; - - t.tryComputePass(querySetState === 'valid', descriptor); - }); - -g.test('timestampWrites,query_index') - .desc( - `Test that querySet.count should be greater than timestampWrite.queryIndex, and that the +g.test('timestampWrites,query_index'). +desc( + `Test that querySet.count should be greater than timestampWrite.queryIndex, and that the query indexes are unique.` - ) - .paramsSubcasesOnly(u => - u // - .combine('beginningOfPassWriteIndex', [undefined, 0, 1, 2, 3]) - .combine('endOfPassWriteIndex', [undefined, 0, 1, 2, 3]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase(['timestamp-query']); - }) - .fn(t => { - const { beginningOfPassWriteIndex, endOfPassWriteIndex } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('beginningOfPassWriteIndex', [undefined, 0, 1, 2, 3]). +combine('endOfPassWriteIndex', [undefined, 0, 1, 2, 3]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase(['timestamp-query']); +}). +fn((t) => { + const { beginningOfPassWriteIndex, endOfPassWriteIndex } = t.params; - const querySetCount = 2; + const querySetCount = 2; - const timestampWrites = { - querySet: t.device.createQuerySet({ type: 'timestamp', count: querySetCount }), - beginningOfPassWriteIndex, - endOfPassWriteIndex, - }; + const timestampWrites = { + querySet: t.device.createQuerySet({ type: 'timestamp', count: querySetCount }), + beginningOfPassWriteIndex, + endOfPassWriteIndex + }; - const isValid = - beginningOfPassWriteIndex !== endOfPassWriteIndex && - (beginningOfPassWriteIndex === undefined || beginningOfPassWriteIndex < querySetCount) && - (endOfPassWriteIndex === undefined || endOfPassWriteIndex < querySetCount); + const isValid = + beginningOfPassWriteIndex !== endOfPassWriteIndex && ( + beginningOfPassWriteIndex === undefined || beginningOfPassWriteIndex < querySetCount) && ( + endOfPassWriteIndex === undefined || endOfPassWriteIndex < querySetCount); - const descriptor = { - timestampWrites, - }; + const descriptor = { + timestampWrites + }; - t.tryComputePass(isValid, descriptor); - }); + t.tryComputePass(isValid, descriptor); +}); -g.test('timestamp_query_set,device_mismatch') - .desc( - ` +g.test('timestamp_query_set,device_mismatch'). +desc( + ` Tests beginComputePass cannot be called with a timestamp query set created from another device. ` - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase(['timestamp-query']); - t.selectMismatchedDeviceOrSkipTestCase('timestamp-query'); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase(['timestamp-query']); + t.selectMismatchedDeviceOrSkipTestCase('timestamp-query'); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const timestampQuerySet = sourceDevice.createQuerySet({ - type: 'timestamp', - count: 1, - }); - - const timestampWrites = { - querySet: timestampQuerySet, - beginningOfPassWriteIndex: 0, - }; - - const descriptor = { - timestampWrites, - }; - - t.tryComputePass(!mismatched, descriptor); + const timestampQuerySet = sourceDevice.createQuerySet({ + type: 'timestamp', + count: 1 }); + + const timestampWrites = { + querySet: timestampQuerySet, + beginningOfPassWriteIndex: 0 + }; + + const descriptor = { + timestampWrites + }; + + t.tryComputePass(!mismatched, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginRenderPass.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginRenderPass.spec.js index 9f0bd59e6b8..8003268d991 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginRenderPass.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/beginRenderPass.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Note: render pass 'occlusionQuerySet' validation is tested in queries/general.spec.ts TODO: Check that depth-stencil attachment views must encompass all aspects. @@ -21,197 +21,195 @@ Notes: > - {all possible {depth, stencil} load ops, load values {in range, negative, too large}} > - all possible {depth, stencil} store ops > - depthReadOnly {t,f}, stencilReadOnly {t,f} -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('color_attachments,device_mismatch') - .desc( - ` +g.test('color_attachments,device_mismatch'). +desc( + ` Tests beginRenderPass cannot be called with color attachments whose texture view or resolve target is created from another device The 'view' and 'resolveTarget' are: - created from same device in ColorAttachment0 and ColorAttachment1 - created from different device in ColorAttachment0 and ColorAttachment1 - created from same device in ColorAttachment0, but from different device in ColorAttachment1 ` - ) - .paramsSubcasesOnly([ +). +paramsSubcasesOnly([ +{ + view0Mismatched: false, + target0Mismatched: false, + view1Mismatched: false, + target1Mismatched: false +}, // control case +{ + view0Mismatched: false, + target0Mismatched: true, + view1Mismatched: false, + target1Mismatched: true +}, +{ + view0Mismatched: true, + target0Mismatched: false, + view1Mismatched: true, + target1Mismatched: false +}, +{ + view0Mismatched: false, + target0Mismatched: false, + view1Mismatched: false, + target1Mismatched: true +}] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { view0Mismatched, target0Mismatched, view1Mismatched, target1Mismatched } = t.params; + const mismatched = view0Mismatched || target0Mismatched || view1Mismatched || target1Mismatched; + + const view0Texture = view0Mismatched ? + t.getDeviceMismatchedRenderTexture(4) : + t.getRenderTexture(4); + const target0Texture = target0Mismatched ? + t.getDeviceMismatchedRenderTexture() : + t.getRenderTexture(); + const view1Texture = view1Mismatched ? + t.getDeviceMismatchedRenderTexture(4) : + t.getRenderTexture(4); + const target1Texture = target1Mismatched ? + t.getDeviceMismatchedRenderTexture() : + t.getRenderTexture(); + + const encoder = t.createEncoder('non-pass'); + const pass = encoder.encoder.beginRenderPass({ + colorAttachments: [ { - view0Mismatched: false, - target0Mismatched: false, - view1Mismatched: false, - target1Mismatched: false, - }, // control case - { - view0Mismatched: false, - target0Mismatched: true, - view1Mismatched: false, - target1Mismatched: true, + view: view0Texture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store', + resolveTarget: target0Texture.createView() }, { - view0Mismatched: true, - target0Mismatched: false, - view1Mismatched: true, - target1Mismatched: false, - }, - { - view0Mismatched: false, - target0Mismatched: false, - view1Mismatched: false, - target1Mismatched: true, - }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { view0Mismatched, target0Mismatched, view1Mismatched, target1Mismatched } = t.params; - const mismatched = view0Mismatched || target0Mismatched || view1Mismatched || target1Mismatched; + view: view1Texture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store', + resolveTarget: target1Texture.createView() + }] - const view0Texture = view0Mismatched - ? t.getDeviceMismatchedRenderTexture(4) - : t.getRenderTexture(4); - const target0Texture = target0Mismatched - ? t.getDeviceMismatchedRenderTexture() - : t.getRenderTexture(); - const view1Texture = view1Mismatched - ? t.getDeviceMismatchedRenderTexture(4) - : t.getRenderTexture(4); - const target1Texture = target1Mismatched - ? t.getDeviceMismatchedRenderTexture() - : t.getRenderTexture(); - - const encoder = t.createEncoder('non-pass'); - const pass = encoder.encoder.beginRenderPass({ - colorAttachments: [ - { - view: view0Texture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - resolveTarget: target0Texture.createView(), - }, - { - view: view1Texture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - resolveTarget: target1Texture.createView(), - }, - ], - }); - pass.end(); - - encoder.validateFinish(!mismatched); }); + pass.end(); -g.test('depth_stencil_attachment,device_mismatch') - .desc( - 'Tests beginRenderPass cannot be called with a depth stencil attachment whose texture view is created from another device' - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; + encoder.validateFinish(!mismatched); +}); - const descriptor = { - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'depth24plus-stencil8', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }; +g.test('depth_stencil_attachment,device_mismatch'). +desc( + 'Tests beginRenderPass cannot be called with a depth stencil attachment whose texture view is created from another device' +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; - const depthStencilTexture = mismatched - ? t.getDeviceMismatchedTexture(descriptor) - : t.device.createTexture(descriptor); + const descriptor = { + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'depth24plus-stencil8', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }; - const encoder = t.createEncoder('non-pass'); - const pass = encoder.encoder.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment: { - view: depthStencilTexture.createView(), - depthClearValue: 0, - depthLoadOp: 'clear', - depthStoreOp: 'store', - stencilClearValue: 0, - stencilLoadOp: 'clear', - stencilStoreOp: 'store', - }, - }); - pass.end(); + const depthStencilTexture = mismatched ? + t.getDeviceMismatchedTexture(descriptor) : + t.device.createTexture(descriptor); - encoder.validateFinish(!mismatched); + const encoder = t.createEncoder('non-pass'); + const pass = encoder.encoder.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment: { + view: depthStencilTexture.createView(), + depthClearValue: 0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + stencilClearValue: 0, + stencilLoadOp: 'clear', + stencilStoreOp: 'store' + } }); + pass.end(); -g.test('occlusion_query_set,device_mismatch') - .desc( - 'Tests beginRenderPass cannot be called with an occlusion query set created from another device' - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + encoder.validateFinish(!mismatched); +}); - const occlusionQuerySet = sourceDevice.createQuerySet({ - type: 'occlusion', - count: 1, - }); - t.trackForCleanup(occlusionQuerySet); +g.test('occlusion_query_set,device_mismatch'). +desc( + 'Tests beginRenderPass cannot be called with an occlusion query set created from another device' +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const encoder = t.createEncoder('render pass', { occlusionQuerySet }); - encoder.validateFinish(!mismatched); + const occlusionQuerySet = sourceDevice.createQuerySet({ + type: 'occlusion', + count: 1 }); + t.trackForCleanup(occlusionQuerySet); -g.test('timestamp_query_set,device_mismatch') - .desc( - ` + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + encoder.validateFinish(!mismatched); +}); + +g.test('timestamp_query_set,device_mismatch'). +desc( + ` Tests beginRenderPass cannot be called with a timestamp query set created from another device. ` - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase(['timestamp-query']); - t.selectMismatchedDeviceOrSkipTestCase('timestamp-query'); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase(['timestamp-query']); + t.selectMismatchedDeviceOrSkipTestCase('timestamp-query'); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const timestampQuerySet = sourceDevice.createQuerySet({ - type: 'timestamp', - count: 1, - }); - - const timestampWrites = { - querySet: timestampQuerySet, - beginningOfPassWriteIndex: 0, - }; - - const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const encoder = t.createEncoder('non-pass'); - const pass = encoder.encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorTexture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - - timestampWrites, - }); - pass.end(); - - encoder.validateFinish(!mismatched); + const timestampQuerySet = sourceDevice.createQuerySet({ + type: 'timestamp', + count: 1 }); + + const timestampWrites = { + querySet: timestampQuerySet, + beginningOfPassWriteIndex: 0 + }; + + const colorTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }); + + const encoder = t.createEncoder('non-pass'); + const pass = encoder.encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorTexture.createView(), + loadOp: 'load', + storeOp: 'store' + }], + + timestampWrites + }); + pass.end(); + + encoder.validateFinish(!mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/clearBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/clearBuffer.spec.js index c788d2a0de9..839a82741bf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/clearBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/clearBuffer.spec.js @@ -1,16 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` API validation tests for clearBuffer. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kBufferUsages } from '../../../../capability_info.js'; import { kResourceStates } from '../../../../gpu_test.js'; import { kMaxSafeMultipleOf8 } from '../../../../util/math.js'; import { ValidationTest } from '../../validation_test.js'; class F extends ValidationTest { - TestClearBuffer(options) { + TestClearBuffer(options) + + + + + { const { buffer, offset, size, isSuccess } = options; const commandEncoder = this.device.createCommandEncoder(); @@ -24,219 +28,219 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('buffer_state') - .desc(`Test that clearing an invalid or destroyed buffer fails.`) - .params(u => u.combine('bufferState', kResourceStates)) - .fn(t => { - const { bufferState } = t.params; +g.test('buffer_state'). +desc(`Test that clearing an invalid or destroyed buffer fails.`). +params((u) => u.combine('bufferState', kResourceStates)). +fn((t) => { + const { bufferState } = t.params; - const buffer = t.createBufferWithState(bufferState, { - size: 8, - usage: GPUBufferUsage.COPY_DST, - }); - - const commandEncoder = t.device.createCommandEncoder(); - commandEncoder.clearBuffer(buffer, 0, 8); - - if (bufferState === 'invalid') { - t.expectValidationError(() => { - commandEncoder.finish(); - }); - } else { - const cmd = commandEncoder.finish(); - t.expectValidationError(() => { - t.device.queue.submit([cmd]); - }, bufferState === 'destroyed'); - } + const buffer = t.createBufferWithState(bufferState, { + size: 8, + usage: GPUBufferUsage.COPY_DST }); -g.test('buffer,device_mismatch') - .desc(`Tests clearBuffer cannot be called with buffer created from another device.`) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const size = 8; + const commandEncoder = t.device.createCommandEncoder(); + commandEncoder.clearBuffer(buffer, 0, 8); - const buffer = sourceDevice.createBuffer({ - size, - usage: GPUBufferUsage.COPY_DST, + if (bufferState === 'invalid') { + t.expectValidationError(() => { + commandEncoder.finish(); }); - t.trackForCleanup(buffer); + } else { + const cmd = commandEncoder.finish(); + t.expectValidationError(() => { + t.device.queue.submit([cmd]); + }, bufferState === 'destroyed'); + } +}); - t.TestClearBuffer({ - buffer, - offset: 0, - size, - isSuccess: !mismatched, - }); +g.test('buffer,device_mismatch'). +desc(`Tests clearBuffer cannot be called with buffer created from another device.`). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const size = 8; + + const buffer = sourceDevice.createBuffer({ + size, + usage: GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(buffer); + + t.TestClearBuffer({ + buffer, + offset: 0, + size, + isSuccess: !mismatched + }); +}); + +g.test('default_args'). +desc(`Test that calling clearBuffer with a default offset and size is valid.`). +paramsSubcasesOnly([ +{ offset: undefined, size: undefined }, +{ offset: 4, size: undefined }, +{ offset: undefined, size: 8 }] +). +fn((t) => { + const { offset, size } = t.params; + + const buffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('default_args') - .desc(`Test that calling clearBuffer with a default offset and size is valid.`) - .paramsSubcasesOnly([ - { offset: undefined, size: undefined }, - { offset: 4, size: undefined }, - { offset: undefined, size: 8 }, - ]) - .fn(t => { - const { offset, size } = t.params; + t.TestClearBuffer({ + buffer, + offset, + size, + isSuccess: true + }); +}); - const buffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); +g.test('buffer_usage'). +desc(`Test that only buffers with COPY_DST usage are valid to use with copyBuffers.`). +paramsSubcasesOnly((u) => +u // +.combine('usage', kBufferUsages) +). +fn((t) => { + const { usage } = t.params; - t.TestClearBuffer({ - buffer, - offset, - size, - isSuccess: true, - }); + const buffer = t.device.createBuffer({ + size: 16, + usage }); -g.test('buffer_usage') - .desc(`Test that only buffers with COPY_DST usage are valid to use with copyBuffers.`) - .paramsSubcasesOnly(u => - u // - .combine('usage', kBufferUsages) - ) - .fn(t => { - const { usage } = t.params; - - const buffer = t.device.createBuffer({ - size: 16, - usage, - }); - - t.TestClearBuffer({ - buffer, - offset: 0, - size: 16, - isSuccess: usage === GPUBufferUsage.COPY_DST, - }); + t.TestClearBuffer({ + buffer, + offset: 0, + size: 16, + isSuccess: usage === GPUBufferUsage.COPY_DST }); +}); -g.test('size_alignment') - .desc( - ` +g.test('size_alignment'). +desc( + ` Test that the clear size must be 4 byte aligned. - Test size is not a multiple of 4. - Test size is 0. - Test size overflows the buffer size. - Test size is omitted. ` - ) - .paramsSubcasesOnly([ - { size: 0, _isSuccess: true }, - { size: 2, _isSuccess: false }, - { size: 4, _isSuccess: true }, - { size: 5, _isSuccess: false }, - { size: 8, _isSuccess: true }, - { size: 20, _isSuccess: false }, - { size: undefined, _isSuccess: true }, - ]) - .fn(t => { - const { size, _isSuccess: isSuccess } = t.params; +). +paramsSubcasesOnly([ +{ size: 0, _isSuccess: true }, +{ size: 2, _isSuccess: false }, +{ size: 4, _isSuccess: true }, +{ size: 5, _isSuccess: false }, +{ size: 8, _isSuccess: true }, +{ size: 20, _isSuccess: false }, +{ size: undefined, _isSuccess: true }] +). +fn((t) => { + const { size, _isSuccess: isSuccess } = t.params; - const buffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); - - t.TestClearBuffer({ - buffer, - offset: 0, - size, - isSuccess, - }); + const buffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('offset_alignment') - .desc( - ` + t.TestClearBuffer({ + buffer, + offset: 0, + size, + isSuccess + }); +}); + +g.test('offset_alignment'). +desc( + ` Test that the clear offsets must be 4 byte aligned. - Test offset is not a multiple of 4. - Test offset is larger than the buffer size. - Test offset is omitted. ` - ) - .paramsSubcasesOnly([ - { offset: 0, _isSuccess: true }, - { offset: 2, _isSuccess: false }, - { offset: 4, _isSuccess: true }, - { offset: 5, _isSuccess: false }, - { offset: 8, _isSuccess: true }, - { offset: 20, _isSuccess: false }, - { offset: undefined, _isSuccess: true }, - ]) - .fn(t => { - const { offset, _isSuccess: isSuccess } = t.params; +). +paramsSubcasesOnly([ +{ offset: 0, _isSuccess: true }, +{ offset: 2, _isSuccess: false }, +{ offset: 4, _isSuccess: true }, +{ offset: 5, _isSuccess: false }, +{ offset: 8, _isSuccess: true }, +{ offset: 20, _isSuccess: false }, +{ offset: undefined, _isSuccess: true }] +). +fn((t) => { + const { offset, _isSuccess: isSuccess } = t.params; - const buffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); - - t.TestClearBuffer({ - buffer, - offset, - size: 8, - isSuccess, - }); + const buffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('overflow') - .desc(`Test that clears which may cause arithmetic overflows are invalid.`) - .paramsSubcasesOnly([ - { offset: 0, size: kMaxSafeMultipleOf8 }, - { offset: 16, size: kMaxSafeMultipleOf8 }, - { offset: kMaxSafeMultipleOf8, size: 16 }, - { offset: kMaxSafeMultipleOf8, size: kMaxSafeMultipleOf8 }, - ]) - .fn(t => { - const { offset, size } = t.params; + t.TestClearBuffer({ + buffer, + offset, + size: 8, + isSuccess + }); +}); - const buffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); +g.test('overflow'). +desc(`Test that clears which may cause arithmetic overflows are invalid.`). +paramsSubcasesOnly([ +{ offset: 0, size: kMaxSafeMultipleOf8 }, +{ offset: 16, size: kMaxSafeMultipleOf8 }, +{ offset: kMaxSafeMultipleOf8, size: 16 }, +{ offset: kMaxSafeMultipleOf8, size: kMaxSafeMultipleOf8 }] +). +fn((t) => { + const { offset, size } = t.params; - t.TestClearBuffer({ - buffer, - offset, - size, - isSuccess: false, - }); + const buffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('out_of_bounds') - .desc(`Test that clears which exceed the buffer bounds are invalid.`) - .paramsSubcasesOnly([ - { offset: 0, size: 32, _isSuccess: true }, - { offset: 0, size: 36 }, - { offset: 32, size: 0, _isSuccess: true }, - { offset: 32, size: 4 }, - { offset: 36, size: 4 }, - { offset: 36, size: 0 }, - { offset: 20, size: 16 }, - { offset: 20, size: 12, _isSuccess: true }, - ]) - .fn(t => { - const { offset, size, _isSuccess = false } = t.params; - - const buffer = t.device.createBuffer({ - size: 32, - usage: GPUBufferUsage.COPY_DST, - }); - - t.TestClearBuffer({ - buffer, - offset, - size, - isSuccess: _isSuccess, - }); + t.TestClearBuffer({ + buffer, + offset, + size, + isSuccess: false }); +}); + +g.test('out_of_bounds'). +desc(`Test that clears which exceed the buffer bounds are invalid.`). +paramsSubcasesOnly([ +{ offset: 0, size: 32, _isSuccess: true }, +{ offset: 0, size: 36 }, +{ offset: 32, size: 0, _isSuccess: true }, +{ offset: 32, size: 4 }, +{ offset: 36, size: 4 }, +{ offset: 36, size: 0 }, +{ offset: 20, size: 16 }, +{ offset: 20, size: 12, _isSuccess: true }] +). +fn((t) => { + const { offset, size, _isSuccess = false } = t.params; + + const buffer = t.device.createBuffer({ + size: 32, + usage: GPUBufferUsage.COPY_DST + }); + + t.TestClearBuffer({ + buffer, + offset, + size, + isSuccess: _isSuccess + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/compute_pass.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/compute_pass.spec.js index 6ee13bd622f..d810e8757a8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/compute_pass.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/compute_pass.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` API validation test for compute pass Does **not** test usage scopes (resource_usages/) or programmable pass stuff (programmable_pass). -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { makeValueTestVariant } from '../../../../../common/util/util.js'; import { kBufferUsages } from '../../../../capability_info.js'; import { GPUConst } from '../../../../constants.js'; @@ -24,7 +23,7 @@ class F extends ValidationTest { createIndirectBuffer(state, data) { const descriptor = { size: data.byteLength, - usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST }; if (state === 'invalid') { @@ -49,50 +48,50 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('set_pipeline') - .desc( - ` +g.test('set_pipeline'). +desc( + ` setPipeline should generate an error iff using an 'invalid' pipeline. ` - ) - .params(u => u.beginSubcases().combine('state', ['valid', 'invalid'])) - .fn(t => { - const { state } = t.params; - const pipeline = t.createComputePipeline(state); +). +params((u) => u.beginSubcases().combine('state', ['valid', 'invalid'])). +fn((t) => { + const { state } = t.params; + const pipeline = t.createComputePipeline(state); - const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - validateFinishAndSubmitGivenState(state); + const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + validateFinishAndSubmitGivenState(state); +}); + +g.test('pipeline,device_mismatch'). +desc('Tests setPipeline cannot be called with a compute pipeline created from another device'). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const pipeline = sourceDevice.createComputePipeline({ + layout: 'auto', + compute: { + module: sourceDevice.createShaderModule({ + code: '@compute @workgroup_size(1) fn main() {}' + }), + entryPoint: 'main' + } }); -g.test('pipeline,device_mismatch') - .desc('Tests setPipeline cannot be called with a compute pipeline created from another device') - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const { encoder, validateFinish } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + validateFinish(!mismatched); +}); - const pipeline = sourceDevice.createComputePipeline({ - layout: 'auto', - compute: { - module: sourceDevice.createShaderModule({ - code: '@compute @workgroup_size(1) fn main() {}', - }), - entryPoint: 'main', - }, - }); - - const { encoder, validateFinish } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - validateFinish(!mismatched); - }); - -g.test('dispatch_sizes') - .desc( - `Test 'direct' and 'indirect' dispatch with various sizes. +g.test('dispatch_sizes'). +desc( + `Test 'direct' and 'indirect' dispatch with various sizes. Only direct dispatches can produce validation errors. Workgroup sizes: @@ -101,55 +100,55 @@ g.test('dispatch_sizes') TODO: Verify that the invalid cases don't execute any invocations at all. ` - ) - .params(u => - u - .combine('dispatchType', ['direct', 'indirect']) - .combine('largeDimValueVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 1, add: 1 }, - { mult: 0, add: 0x7fff_ffff }, - { mult: 0, add: 0xffff_ffff }, - ]) - .beginSubcases() - .combine('largeDimIndex', [0, 1, 2]) - .combine('smallDimValue', [0, 1]) - ) - .fn(t => { - const { dispatchType, largeDimIndex, smallDimValue, largeDimValueVariant } = t.params; - const maxDispatch = t.device.limits.maxComputeWorkgroupsPerDimension; - const largeDimValue = makeValueTestVariant(maxDispatch, largeDimValueVariant); +). +params((u) => +u. +combine('dispatchType', ['direct', 'indirect']). +combine('largeDimValueVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: 0 }, +{ mult: 1, add: 1 }, +{ mult: 0, add: 0x7fff_ffff }, +{ mult: 0, add: 0xffff_ffff }] +). +beginSubcases(). +combine('largeDimIndex', [0, 1, 2]). +combine('smallDimValue', [0, 1]) +). +fn((t) => { + const { dispatchType, largeDimIndex, smallDimValue, largeDimValueVariant } = t.params; + const maxDispatch = t.device.limits.maxComputeWorkgroupsPerDimension; + const largeDimValue = makeValueTestVariant(maxDispatch, largeDimValueVariant); - const pipeline = t.createNoOpComputePipeline(); + const pipeline = t.createNoOpComputePipeline(); - const workSizes = [smallDimValue, smallDimValue, smallDimValue]; - workSizes[largeDimIndex] = largeDimValue; + const workSizes = [smallDimValue, smallDimValue, smallDimValue]; + workSizes[largeDimIndex] = largeDimValue; - const { encoder, validateFinishAndSubmit } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - if (dispatchType === 'direct') { - const [x, y, z] = workSizes; - encoder.dispatchWorkgroups(x, y, z); - } else if (dispatchType === 'indirect') { - encoder.dispatchWorkgroupsIndirect( - t.createIndirectBuffer('valid', new Uint32Array(workSizes)), - 0 - ); - } + const { encoder, validateFinishAndSubmit } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + if (dispatchType === 'direct') { + const [x, y, z] = workSizes; + encoder.dispatchWorkgroups(x, y, z); + } else if (dispatchType === 'indirect') { + encoder.dispatchWorkgroupsIndirect( + t.createIndirectBuffer('valid', new Uint32Array(workSizes)), + 0 + ); + } - const shouldError = - dispatchType === 'direct' && - (workSizes[0] > maxDispatch || workSizes[1] > maxDispatch || workSizes[2] > maxDispatch); + const shouldError = + dispatchType === 'direct' && ( + workSizes[0] > maxDispatch || workSizes[1] > maxDispatch || workSizes[2] > maxDispatch); - validateFinishAndSubmit(!shouldError, true); - }); + validateFinishAndSubmit(!shouldError, true); +}); const kBufferData = new Uint32Array(6).fill(1); -g.test('indirect_dispatch_buffer_state') - .desc( - ` +g.test('indirect_dispatch_buffer_state'). +desc( + ` Test dispatchWorkgroupsIndirect validation by submitting various dispatches with a no-op pipeline and an indirectBuffer with 6 elements. - indirectBuffer: {'valid', 'invalid', 'destroyed'} @@ -158,103 +157,103 @@ and an indirectBuffer with 6 elements. - invalid, non-multiple of 4 - invalid, the last element is outside the buffer ` - ) - .paramsSubcasesOnly(u => - u // - .combine('state', kResourceStates) - .combine('offset', [ - // valid (for 'valid' buffers) - 0, - Uint32Array.BYTES_PER_ELEMENT, - kBufferData.byteLength - 3 * Uint32Array.BYTES_PER_ELEMENT, - // invalid, non-multiple of 4 offset - 1, - // invalid, last element outside buffer - kBufferData.byteLength - 2 * Uint32Array.BYTES_PER_ELEMENT, - ]) - ) - .fn(t => { - const { state, offset } = t.params; - const pipeline = t.createNoOpComputePipeline(); - const buffer = t.createIndirectBuffer(state, kBufferData); +). +paramsSubcasesOnly((u) => +u // +.combine('state', kResourceStates). +combine('offset', [ +// valid (for 'valid' buffers) +0, +Uint32Array.BYTES_PER_ELEMENT, +kBufferData.byteLength - 3 * Uint32Array.BYTES_PER_ELEMENT, +// invalid, non-multiple of 4 offset +1, +// invalid, last element outside buffer +kBufferData.byteLength - 2 * Uint32Array.BYTES_PER_ELEMENT] +) +). +fn((t) => { + const { state, offset } = t.params; + const pipeline = t.createNoOpComputePipeline(); + const buffer = t.createIndirectBuffer(state, kBufferData); - const { encoder, validateFinishAndSubmit } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - encoder.dispatchWorkgroupsIndirect(buffer, offset); + const { encoder, validateFinishAndSubmit } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + encoder.dispatchWorkgroupsIndirect(buffer, offset); - const finishShouldError = - state === 'invalid' || - offset % 4 !== 0 || - offset + 3 * Uint32Array.BYTES_PER_ELEMENT > kBufferData.byteLength; - validateFinishAndSubmit(!finishShouldError, state !== 'destroyed'); + const finishShouldError = + state === 'invalid' || + offset % 4 !== 0 || + offset + 3 * Uint32Array.BYTES_PER_ELEMENT > kBufferData.byteLength; + validateFinishAndSubmit(!finishShouldError, state !== 'destroyed'); +}); + +g.test('indirect_dispatch_buffer,device_mismatch'). +desc( + `Tests dispatchWorkgroupsIndirect cannot be called with an indirect buffer created from another device` +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + + const pipeline = t.createNoOpComputePipeline(); + + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const buffer = sourceDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.INDIRECT }); + t.trackForCleanup(buffer); -g.test('indirect_dispatch_buffer,device_mismatch') - .desc( - `Tests dispatchWorkgroupsIndirect cannot be called with an indirect buffer created from another device` - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; + const { encoder, validateFinish } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + encoder.dispatchWorkgroupsIndirect(buffer, 0); + validateFinish(!mismatched); +}); - const pipeline = t.createNoOpComputePipeline(); - - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - - const buffer = sourceDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.INDIRECT, - }); - t.trackForCleanup(buffer); - - const { encoder, validateFinish } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - encoder.dispatchWorkgroupsIndirect(buffer, 0); - validateFinish(!mismatched); - }); - -g.test('indirect_dispatch_buffer,usage') - .desc( - ` +g.test('indirect_dispatch_buffer,usage'). +desc( + ` Tests dispatchWorkgroupsIndirect generates a validation error if the buffer usage does not contain INDIRECT usage. ` - ) - .paramsSubcasesOnly(u => - u - // If bufferUsage0 and bufferUsage1 are the same, the usage being test is a single usage. - // Otherwise, it's a combined usage. - .combine('bufferUsage0', kBufferUsages) - .combine('bufferUsage1', kBufferUsages) - .unless( - ({ bufferUsage0, bufferUsage1 }) => - ((bufferUsage0 | bufferUsage1) & - (GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.MAP_WRITE)) !== - 0 - ) - ) - .fn(t => { - const { bufferUsage0, bufferUsage1 } = t.params; +). +paramsSubcasesOnly((u) => +u +// If bufferUsage0 and bufferUsage1 are the same, the usage being test is a single usage. +// Otherwise, it's a combined usage. +.combine('bufferUsage0', kBufferUsages). +combine('bufferUsage1', kBufferUsages). +unless( + ({ bufferUsage0, bufferUsage1 }) => + ((bufferUsage0 | bufferUsage1) & ( + GPUConst.BufferUsage.MAP_READ | GPUConst.BufferUsage.MAP_WRITE)) !== + 0 +) +). +fn((t) => { + const { bufferUsage0, bufferUsage1 } = t.params; - const bufferUsage = bufferUsage0 | bufferUsage1; + const bufferUsage = bufferUsage0 | bufferUsage1; - const layout = t.device.createPipelineLayout({ bindGroupLayouts: [] }); - const pipeline = t.createNoOpComputePipeline(layout); + const layout = t.device.createPipelineLayout({ bindGroupLayouts: [] }); + const pipeline = t.createNoOpComputePipeline(layout); - const buffer = t.device.createBuffer({ - size: 16, - usage: bufferUsage, - }); - t.trackForCleanup(buffer); - - const success = (GPUBufferUsage.INDIRECT & bufferUsage) !== 0; - - const { encoder, validateFinish } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - - encoder.dispatchWorkgroupsIndirect(buffer, 0); - validateFinish(success); + const buffer = t.device.createBuffer({ + size: 16, + usage: bufferUsage }); + t.trackForCleanup(buffer); + + const success = (GPUBufferUsage.INDIRECT & bufferUsage) !== 0; + + const { encoder, validateFinish } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + + encoder.dispatchWorkgroupsIndirect(buffer, 0); + validateFinish(success); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyBufferToBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyBufferToBuffer.spec.js index cdd01163874..a7aa2b5b791 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyBufferToBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyBufferToBuffer.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyBufferToBuffer tests. Test Plan: @@ -23,15 +23,21 @@ Test Plan: - (sourceOffset + copySize) > size of source buffer - (destinationOffset + copySize) > size of destination buffer * Source buffer and destination buffer are the same buffer -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kBufferUsages } from '../../../../capability_info.js'; import { kResourceStates } from '../../../../gpu_test.js'; import { kMaxSafeMultipleOf8 } from '../../../../util/math.js'; import { ValidationTest } from '../../validation_test.js'; class F extends ValidationTest { - TestCopyBufferToBuffer(options) { + TestCopyBufferToBuffer(options) + + + + + + + { const { srcBuffer, srcOffset, dstBuffer, dstOffset, copySize, expectation } = options; const commandEncoder = this.device.createCommandEncoder(); @@ -52,269 +58,269 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('buffer_state') - .params(u => - u // - .combine('srcBufferState', kResourceStates) - .combine('dstBufferState', kResourceStates) - ) - .fn(t => { - const { srcBufferState, dstBufferState } = t.params; - const srcBuffer = t.createBufferWithState(srcBufferState, { - size: 16, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - const dstBuffer = t.createBufferWithState(dstBufferState, { - size: 16, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - const shouldFinishError = srcBufferState === 'invalid' || dstBufferState === 'invalid'; - const shouldSubmitSuccess = srcBufferState === 'valid' && dstBufferState === 'valid'; - const expectation = shouldSubmitSuccess - ? 'Success' - : shouldFinishError - ? 'FinishError' - : 'SubmitError'; - - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset: 0, - dstBuffer, - dstOffset: 0, - copySize: 8, - expectation, - }); +g.test('buffer_state'). +params((u) => +u // +.combine('srcBufferState', kResourceStates). +combine('dstBufferState', kResourceStates) +). +fn((t) => { + const { srcBufferState, dstBufferState } = t.params; + const srcBuffer = t.createBufferWithState(srcBufferState, { + size: 16, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + const dstBuffer = t.createBufferWithState(dstBufferState, { + size: 16, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); -g.test('buffer,device_mismatch') - .desc( - 'Tests copyBufferToBuffer cannot be called with src buffer or dst buffer created from another device' - ) - .paramsSubcasesOnly([ - { srcMismatched: false, dstMismatched: false }, // control case - { srcMismatched: true, dstMismatched: false }, - { srcMismatched: false, dstMismatched: true }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { srcMismatched, dstMismatched } = t.params; + const shouldFinishError = srcBufferState === 'invalid' || dstBufferState === 'invalid'; + const shouldSubmitSuccess = srcBufferState === 'valid' && dstBufferState === 'valid'; + const expectation = shouldSubmitSuccess ? + 'Success' : + shouldFinishError ? + 'FinishError' : + 'SubmitError'; - const srcBufferDevice = srcMismatched ? t.mismatchedDevice : t.device; - const srcBuffer = srcBufferDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(srcBuffer); + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset: 0, + dstBuffer, + dstOffset: 0, + copySize: 8, + expectation + }); +}); - const dstBufferDevice = dstMismatched ? t.mismatchedDevice : t.device; - const dstBuffer = dstBufferDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(dstBuffer); +g.test('buffer,device_mismatch'). +desc( + 'Tests copyBufferToBuffer cannot be called with src buffer or dst buffer created from another device' +). +paramsSubcasesOnly([ +{ srcMismatched: false, dstMismatched: false }, // control case +{ srcMismatched: true, dstMismatched: false }, +{ srcMismatched: false, dstMismatched: true }] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { srcMismatched, dstMismatched } = t.params; - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset: 0, - dstBuffer, - dstOffset: 0, - copySize: 8, - expectation: srcMismatched || dstMismatched ? 'FinishError' : 'Success', - }); + const srcBufferDevice = srcMismatched ? t.mismatchedDevice : t.device; + const srcBuffer = srcBufferDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(srcBuffer); + + const dstBufferDevice = dstMismatched ? t.mismatchedDevice : t.device; + const dstBuffer = dstBufferDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(dstBuffer); + + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset: 0, + dstBuffer, + dstOffset: 0, + copySize: 8, + expectation: srcMismatched || dstMismatched ? 'FinishError' : 'Success' + }); +}); + +g.test('buffer_usage'). +paramsSubcasesOnly((u) => +u // +.combine('srcUsage', kBufferUsages). +combine('dstUsage', kBufferUsages) +). +fn((t) => { + const { srcUsage, dstUsage } = t.params; + + const srcBuffer = t.device.createBuffer({ + size: 16, + usage: srcUsage + }); + const dstBuffer = t.device.createBuffer({ + size: 16, + usage: dstUsage }); -g.test('buffer_usage') - .paramsSubcasesOnly(u => - u // - .combine('srcUsage', kBufferUsages) - .combine('dstUsage', kBufferUsages) - ) - .fn(t => { - const { srcUsage, dstUsage } = t.params; + const isSuccess = srcUsage === GPUBufferUsage.COPY_SRC && dstUsage === GPUBufferUsage.COPY_DST; + const expectation = isSuccess ? 'Success' : 'FinishError'; - const srcBuffer = t.device.createBuffer({ - size: 16, - usage: srcUsage, - }); - const dstBuffer = t.device.createBuffer({ - size: 16, - usage: dstUsage, - }); + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset: 0, + dstBuffer, + dstOffset: 0, + copySize: 8, + expectation + }); +}); - const isSuccess = srcUsage === GPUBufferUsage.COPY_SRC && dstUsage === GPUBufferUsage.COPY_DST; - const expectation = isSuccess ? 'Success' : 'FinishError'; +g.test('copy_size_alignment'). +paramsSubcasesOnly([ +{ copySize: 0, _isSuccess: true }, +{ copySize: 2, _isSuccess: false }, +{ copySize: 4, _isSuccess: true }, +{ copySize: 5, _isSuccess: false }, +{ copySize: 8, _isSuccess: true }] +). +fn((t) => { + const { copySize, _isSuccess: isSuccess } = t.params; - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset: 0, - dstBuffer, - dstOffset: 0, - copySize: 8, - expectation, - }); + const srcBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC + }); + const dstBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('copy_size_alignment') - .paramsSubcasesOnly([ - { copySize: 0, _isSuccess: true }, - { copySize: 2, _isSuccess: false }, - { copySize: 4, _isSuccess: true }, - { copySize: 5, _isSuccess: false }, - { copySize: 8, _isSuccess: true }, - ]) - .fn(t => { - const { copySize, _isSuccess: isSuccess } = t.params; + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset: 0, + dstBuffer, + dstOffset: 0, + copySize, + expectation: isSuccess ? 'Success' : 'FinishError' + }); +}); - const srcBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC, - }); - const dstBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); +g.test('copy_offset_alignment'). +paramsSubcasesOnly([ +{ srcOffset: 0, dstOffset: 0, _isSuccess: true }, +{ srcOffset: 2, dstOffset: 0, _isSuccess: false }, +{ srcOffset: 4, dstOffset: 0, _isSuccess: true }, +{ srcOffset: 5, dstOffset: 0, _isSuccess: false }, +{ srcOffset: 8, dstOffset: 0, _isSuccess: true }, +{ srcOffset: 0, dstOffset: 2, _isSuccess: false }, +{ srcOffset: 0, dstOffset: 4, _isSuccess: true }, +{ srcOffset: 0, dstOffset: 5, _isSuccess: false }, +{ srcOffset: 0, dstOffset: 8, _isSuccess: true }, +{ srcOffset: 4, dstOffset: 4, _isSuccess: true }] +). +fn((t) => { + const { srcOffset, dstOffset, _isSuccess: isSuccess } = t.params; - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset: 0, - dstBuffer, - dstOffset: 0, - copySize, - expectation: isSuccess ? 'Success' : 'FinishError', - }); + const srcBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC + }); + const dstBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('copy_offset_alignment') - .paramsSubcasesOnly([ - { srcOffset: 0, dstOffset: 0, _isSuccess: true }, - { srcOffset: 2, dstOffset: 0, _isSuccess: false }, - { srcOffset: 4, dstOffset: 0, _isSuccess: true }, - { srcOffset: 5, dstOffset: 0, _isSuccess: false }, - { srcOffset: 8, dstOffset: 0, _isSuccess: true }, - { srcOffset: 0, dstOffset: 2, _isSuccess: false }, - { srcOffset: 0, dstOffset: 4, _isSuccess: true }, - { srcOffset: 0, dstOffset: 5, _isSuccess: false }, - { srcOffset: 0, dstOffset: 8, _isSuccess: true }, - { srcOffset: 4, dstOffset: 4, _isSuccess: true }, - ]) - .fn(t => { - const { srcOffset, dstOffset, _isSuccess: isSuccess } = t.params; + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset, + dstBuffer, + dstOffset, + copySize: 8, + expectation: isSuccess ? 'Success' : 'FinishError' + }); +}); - const srcBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC, - }); - const dstBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); +g.test('copy_overflow'). +paramsSubcasesOnly([ +{ srcOffset: 0, dstOffset: 0, copySize: kMaxSafeMultipleOf8 }, +{ srcOffset: 16, dstOffset: 0, copySize: kMaxSafeMultipleOf8 }, +{ srcOffset: 0, dstOffset: 16, copySize: kMaxSafeMultipleOf8 }, +{ srcOffset: kMaxSafeMultipleOf8, dstOffset: 0, copySize: 16 }, +{ srcOffset: 0, dstOffset: kMaxSafeMultipleOf8, copySize: 16 }, +{ srcOffset: kMaxSafeMultipleOf8, dstOffset: 0, copySize: kMaxSafeMultipleOf8 }, +{ srcOffset: 0, dstOffset: kMaxSafeMultipleOf8, copySize: kMaxSafeMultipleOf8 }, +{ + srcOffset: kMaxSafeMultipleOf8, + dstOffset: kMaxSafeMultipleOf8, + copySize: kMaxSafeMultipleOf8 +}] +). +fn((t) => { + const { srcOffset, dstOffset, copySize } = t.params; - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset, - dstBuffer, - dstOffset, - copySize: 8, - expectation: isSuccess ? 'Success' : 'FinishError', - }); + const srcBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC + }); + const dstBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); -g.test('copy_overflow') - .paramsSubcasesOnly([ - { srcOffset: 0, dstOffset: 0, copySize: kMaxSafeMultipleOf8 }, - { srcOffset: 16, dstOffset: 0, copySize: kMaxSafeMultipleOf8 }, - { srcOffset: 0, dstOffset: 16, copySize: kMaxSafeMultipleOf8 }, - { srcOffset: kMaxSafeMultipleOf8, dstOffset: 0, copySize: 16 }, - { srcOffset: 0, dstOffset: kMaxSafeMultipleOf8, copySize: 16 }, - { srcOffset: kMaxSafeMultipleOf8, dstOffset: 0, copySize: kMaxSafeMultipleOf8 }, - { srcOffset: 0, dstOffset: kMaxSafeMultipleOf8, copySize: kMaxSafeMultipleOf8 }, - { - srcOffset: kMaxSafeMultipleOf8, - dstOffset: kMaxSafeMultipleOf8, - copySize: kMaxSafeMultipleOf8, - }, - ]) - .fn(t => { - const { srcOffset, dstOffset, copySize } = t.params; + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset, + dstBuffer, + dstOffset, + copySize, + expectation: 'FinishError' + }); +}); - const srcBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC, - }); - const dstBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); +g.test('copy_out_of_bounds'). +paramsSubcasesOnly([ +{ srcOffset: 0, dstOffset: 0, copySize: 32, _isSuccess: true }, +{ srcOffset: 0, dstOffset: 0, copySize: 36 }, +{ srcOffset: 36, dstOffset: 0, copySize: 4 }, +{ srcOffset: 0, dstOffset: 36, copySize: 4 }, +{ srcOffset: 36, dstOffset: 0, copySize: 0 }, +{ srcOffset: 0, dstOffset: 36, copySize: 0 }, +{ srcOffset: 20, dstOffset: 0, copySize: 16 }, +{ srcOffset: 20, dstOffset: 0, copySize: 12, _isSuccess: true }, +{ srcOffset: 0, dstOffset: 20, copySize: 16 }, +{ srcOffset: 0, dstOffset: 20, copySize: 12, _isSuccess: true }] +). +fn((t) => { + const { srcOffset, dstOffset, copySize, _isSuccess = false } = t.params; - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset, - dstBuffer, - dstOffset, - copySize, - expectation: 'FinishError', - }); + const srcBuffer = t.device.createBuffer({ + size: 32, + usage: GPUBufferUsage.COPY_SRC + }); + const dstBuffer = t.device.createBuffer({ + size: 32, + usage: GPUBufferUsage.COPY_DST }); -g.test('copy_out_of_bounds') - .paramsSubcasesOnly([ - { srcOffset: 0, dstOffset: 0, copySize: 32, _isSuccess: true }, - { srcOffset: 0, dstOffset: 0, copySize: 36 }, - { srcOffset: 36, dstOffset: 0, copySize: 4 }, - { srcOffset: 0, dstOffset: 36, copySize: 4 }, - { srcOffset: 36, dstOffset: 0, copySize: 0 }, - { srcOffset: 0, dstOffset: 36, copySize: 0 }, - { srcOffset: 20, dstOffset: 0, copySize: 16 }, - { srcOffset: 20, dstOffset: 0, copySize: 12, _isSuccess: true }, - { srcOffset: 0, dstOffset: 20, copySize: 16 }, - { srcOffset: 0, dstOffset: 20, copySize: 12, _isSuccess: true }, - ]) - .fn(t => { - const { srcOffset, dstOffset, copySize, _isSuccess = false } = t.params; + t.TestCopyBufferToBuffer({ + srcBuffer, + srcOffset, + dstBuffer, + dstOffset, + copySize, + expectation: _isSuccess ? 'Success' : 'FinishError' + }); +}); - const srcBuffer = t.device.createBuffer({ - size: 32, - usage: GPUBufferUsage.COPY_SRC, - }); - const dstBuffer = t.device.createBuffer({ - size: 32, - usage: GPUBufferUsage.COPY_DST, - }); +g.test('copy_within_same_buffer'). +paramsSubcasesOnly([ +{ srcOffset: 0, dstOffset: 8, copySize: 4 }, +{ srcOffset: 8, dstOffset: 0, copySize: 4 }, +{ srcOffset: 0, dstOffset: 4, copySize: 8 }, +{ srcOffset: 4, dstOffset: 0, copySize: 8 }] +). +fn((t) => { + const { srcOffset, dstOffset, copySize } = t.params; - t.TestCopyBufferToBuffer({ - srcBuffer, - srcOffset, - dstBuffer, - dstOffset, - copySize, - expectation: _isSuccess ? 'Success' : 'FinishError', - }); + const buffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); -g.test('copy_within_same_buffer') - .paramsSubcasesOnly([ - { srcOffset: 0, dstOffset: 8, copySize: 4 }, - { srcOffset: 8, dstOffset: 0, copySize: 4 }, - { srcOffset: 0, dstOffset: 4, copySize: 8 }, - { srcOffset: 4, dstOffset: 0, copySize: 8 }, - ]) - .fn(t => { - const { srcOffset, dstOffset, copySize } = t.params; - - const buffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - t.TestCopyBufferToBuffer({ - srcBuffer: buffer, - srcOffset, - dstBuffer: buffer, - dstOffset, - copySize, - expectation: 'FinishError', - }); + t.TestCopyBufferToBuffer({ + srcBuffer: buffer, + srcOffset, + dstBuffer: buffer, + dstOffset, + copySize, + expectation: 'FinishError' }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyTextureToTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyTextureToTexture.spec.js index 2cd97907bcc..00bf4e83d81 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyTextureToTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/copyTextureToTexture.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyTextureToTexture tests. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kTextureUsages, kTextureDimensions } from '../../../../capability_info.js'; import { kTextureFormatInfo, @@ -12,14 +11,19 @@ import { kDepthStencilFormats, kFeaturesForFormats, filterFormatsByFeature, - textureDimensionAndFormatCompatible, -} from '../../../../format_info.js'; + textureDimensionAndFormatCompatible } from +'../../../../format_info.js'; import { kResourceStates } from '../../../../gpu_test.js'; import { align, lcm } from '../../../../util/math.js'; import { ValidationTest } from '../../validation_test.js'; class F extends ValidationTest { - TestCopyTextureToTexture(source, destination, copySize, expectation) { + TestCopyTextureToTexture( + source, + destination, + copySize, + expectation) + { const commandEncoder = this.device.createCommandEncoder(); commandEncoder.copyTextureToTexture(source, destination, copySize); @@ -35,7 +39,12 @@ class F extends ValidationTest { } } - GetPhysicalSubresourceSize(dimension, textureSize, format, mipLevel) { + GetPhysicalSubresourceSize( + dimension, + textureSize, + format, + mipLevel) + { const virtualWidthAtLevel = Math.max(textureSize.width >> mipLevel, 1); const virtualHeightAtLevel = Math.max(textureSize.height >> mipLevel, 1); const physicalWidthAtLevel = align(virtualWidthAtLevel, kTextureFormatInfo[format].blockWidth); @@ -51,13 +60,13 @@ class F extends ValidationTest { return { width: physicalWidthAtLevel, height: physicalHeightAtLevel, - depthOrArrayLayers: textureSize.depthOrArrayLayers, + depthOrArrayLayers: textureSize.depthOrArrayLayers }; case '3d': return { width: physicalWidthAtLevel, height: physicalHeightAtLevel, - depthOrArrayLayers: Math.max(textureSize.depthOrArrayLayers >> mipLevel, 1), + depthOrArrayLayers: Math.max(textureSize.depthOrArrayLayers >> mipLevel, 1) }; } } @@ -65,333 +74,336 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('copy_with_invalid_or_destroyed_texture') - .desc('Test copyTextureToTexture is an error when one of the textures is invalid or destroyed.') - .paramsSubcasesOnly(u => - u // - .combine('srcState', kResourceStates) - .combine('dstState', kResourceStates) - ) - .fn(t => { - const { srcState, dstState } = t.params; +g.test('copy_with_invalid_or_destroyed_texture'). +desc('Test copyTextureToTexture is an error when one of the textures is invalid or destroyed.'). +paramsSubcasesOnly((u) => +u // +.combine('srcState', kResourceStates). +combine('dstState', kResourceStates) +). +fn((t) => { + const { srcState, dstState } = t.params; - const textureDesc = { - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }; + const textureDesc = { + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }; - const srcTexture = t.createTextureWithState(srcState, textureDesc); - const dstTexture = t.createTextureWithState(dstState, textureDesc); + const srcTexture = t.createTextureWithState(srcState, textureDesc); + const dstTexture = t.createTextureWithState(dstState, textureDesc); - const isSubmitSuccess = srcState === 'valid' && dstState === 'valid'; - const isFinishSuccess = srcState !== 'invalid' && dstState !== 'invalid'; - const expectation = isFinishSuccess - ? isSubmitSuccess - ? 'Success' - : 'SubmitError' - : 'FinishError'; + const isSubmitSuccess = srcState === 'valid' && dstState === 'valid'; + const isFinishSuccess = srcState !== 'invalid' && dstState !== 'invalid'; + const expectation = isFinishSuccess ? + isSubmitSuccess ? + 'Success' : + 'SubmitError' : + 'FinishError'; - t.TestCopyTextureToTexture( - { texture: srcTexture }, - { texture: dstTexture }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - expectation - ); + t.TestCopyTextureToTexture( + { texture: srcTexture }, + { texture: dstTexture }, + { width: 1, height: 1, depthOrArrayLayers: 1 }, + expectation + ); +}); + +g.test('texture,device_mismatch'). +desc( + 'Tests copyTextureToTexture cannot be called with src texture or dst texture created from another device.' +). +paramsSubcasesOnly([ +{ srcMismatched: false, dstMismatched: false }, // control case +{ srcMismatched: true, dstMismatched: false }, +{ srcMismatched: false, dstMismatched: true }] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { srcMismatched, dstMismatched } = t.params; + + const size = { width: 4, height: 4, depthOrArrayLayers: 1 }; + const format = 'rgba8unorm'; + + const srcTextureDevice = srcMismatched ? t.mismatchedDevice : t.device; + const srcTexture = srcTextureDevice.createTexture({ + size, + format, + usage: GPUTextureUsage.COPY_SRC }); + t.trackForCleanup(srcTexture); -g.test('texture,device_mismatch') - .desc( - 'Tests copyTextureToTexture cannot be called with src texture or dst texture created from another device.' - ) - .paramsSubcasesOnly([ - { srcMismatched: false, dstMismatched: false }, // control case - { srcMismatched: true, dstMismatched: false }, - { srcMismatched: false, dstMismatched: true }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { srcMismatched, dstMismatched } = t.params; - - const size = { width: 4, height: 4, depthOrArrayLayers: 1 }; - const format = 'rgba8unorm'; - - const srcTextureDevice = srcMismatched ? t.mismatchedDevice : t.device; - const srcTexture = srcTextureDevice.createTexture({ - size, - format, - usage: GPUTextureUsage.COPY_SRC, - }); - t.trackForCleanup(srcTexture); - - const dstTextureDevice = dstMismatched ? t.mismatchedDevice : t.device; - const dstTexture = dstTextureDevice.createTexture({ - size, - format, - usage: GPUTextureUsage.COPY_DST, - }); - t.trackForCleanup(dstTexture); - - t.TestCopyTextureToTexture( - { texture: srcTexture }, - { texture: dstTexture }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - srcMismatched || dstMismatched ? 'FinishError' : 'Success' - ); + const dstTextureDevice = dstMismatched ? t.mismatchedDevice : t.device; + const dstTexture = dstTextureDevice.createTexture({ + size, + format, + usage: GPUTextureUsage.COPY_DST }); + t.trackForCleanup(dstTexture); -g.test('mipmap_level') - .desc( - ` + t.TestCopyTextureToTexture( + { texture: srcTexture }, + { texture: dstTexture }, + { width: 1, height: 1, depthOrArrayLayers: 1 }, + srcMismatched || dstMismatched ? 'FinishError' : 'Success' + ); +}); + +g.test('mipmap_level'). +desc( + ` Test copyTextureToTexture must specify mipLevels that are in range. - for various dimensions - for various mip level count in the texture - for various copy target mip level (in range and not in range) ` - ) - .params(u => - u // - .combine('dimension', kTextureDimensions) - .beginSubcases() - .combineWithParams([ - { srcLevelCount: 1, dstLevelCount: 1, srcCopyLevel: 0, dstCopyLevel: 0 }, - { srcLevelCount: 1, dstLevelCount: 1, srcCopyLevel: 1, dstCopyLevel: 0 }, - { srcLevelCount: 1, dstLevelCount: 1, srcCopyLevel: 0, dstCopyLevel: 1 }, - { srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 0, dstCopyLevel: 0 }, - { srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 2, dstCopyLevel: 0 }, - { srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 3, dstCopyLevel: 0 }, - { srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 0, dstCopyLevel: 2 }, - { srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 0, dstCopyLevel: 3 }, - ]) - .unless(p => p.dimension === '1d' && (p.srcLevelCount !== 1 || p.dstLevelCount !== 1)) - ) - .fn(t => { - const { srcLevelCount, dstLevelCount, srcCopyLevel, dstCopyLevel, dimension } = t.params; +). +params((u) => +u // +.combine('dimension', kTextureDimensions). +beginSubcases(). +combineWithParams([ +{ srcLevelCount: 1, dstLevelCount: 1, srcCopyLevel: 0, dstCopyLevel: 0 }, +{ srcLevelCount: 1, dstLevelCount: 1, srcCopyLevel: 1, dstCopyLevel: 0 }, +{ srcLevelCount: 1, dstLevelCount: 1, srcCopyLevel: 0, dstCopyLevel: 1 }, +{ srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 0, dstCopyLevel: 0 }, +{ srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 2, dstCopyLevel: 0 }, +{ srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 3, dstCopyLevel: 0 }, +{ srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 0, dstCopyLevel: 2 }, +{ srcLevelCount: 3, dstLevelCount: 3, srcCopyLevel: 0, dstCopyLevel: 3 }] +). +unless((p) => p.dimension === '1d' && (p.srcLevelCount !== 1 || p.dstLevelCount !== 1)) +). - const srcTexture = t.device.createTexture({ - size: { width: 32, height: 1, depthOrArrayLayers: 1 }, - dimension, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC, - mipLevelCount: srcLevelCount, - }); - const dstTexture = t.device.createTexture({ - size: { width: 32, height: 1, depthOrArrayLayers: 1 }, - dimension, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST, - mipLevelCount: dstLevelCount, - }); +fn((t) => { + const { srcLevelCount, dstLevelCount, srcCopyLevel, dstCopyLevel, dimension } = t.params; - const isSuccess = srcCopyLevel < srcLevelCount && dstCopyLevel < dstLevelCount; - t.TestCopyTextureToTexture( - { texture: srcTexture, mipLevel: srcCopyLevel }, - { texture: dstTexture, mipLevel: dstCopyLevel }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - isSuccess ? 'Success' : 'FinishError' - ); + const srcTexture = t.device.createTexture({ + size: { width: 32, height: 1, depthOrArrayLayers: 1 }, + dimension, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC, + mipLevelCount: srcLevelCount + }); + const dstTexture = t.device.createTexture({ + size: { width: 32, height: 1, depthOrArrayLayers: 1 }, + dimension, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST, + mipLevelCount: dstLevelCount }); -g.test('texture_usage') - .desc( - ` + const isSuccess = srcCopyLevel < srcLevelCount && dstCopyLevel < dstLevelCount; + t.TestCopyTextureToTexture( + { texture: srcTexture, mipLevel: srcCopyLevel }, + { texture: dstTexture, mipLevel: dstCopyLevel }, + { width: 1, height: 1, depthOrArrayLayers: 1 }, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('texture_usage'). +desc( + ` Test that copyTextureToTexture source/destination need COPY_SRC/COPY_DST usages. - for all possible source texture usages - for all possible destination texture usages ` - ) - .paramsSubcasesOnly(u => - u // - .combine('srcUsage', kTextureUsages) - .combine('dstUsage', kTextureUsages) - ) - .fn(t => { - const { srcUsage, dstUsage } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('srcUsage', kTextureUsages). +combine('dstUsage', kTextureUsages) +). +fn((t) => { + const { srcUsage, dstUsage } = t.params; - const srcTexture = t.device.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: srcUsage, - }); - const dstTexture = t.device.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: dstUsage, - }); - - const isSuccess = - srcUsage === GPUTextureUsage.COPY_SRC && dstUsage === GPUTextureUsage.COPY_DST; - - t.TestCopyTextureToTexture( - { texture: srcTexture }, - { texture: dstTexture }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - isSuccess ? 'Success' : 'FinishError' - ); + const srcTexture = t.device.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: srcUsage + }); + const dstTexture = t.device.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: dstUsage }); -g.test('sample_count') - .desc( - ` + const isSuccess = + srcUsage === GPUTextureUsage.COPY_SRC && dstUsage === GPUTextureUsage.COPY_DST; + + t.TestCopyTextureToTexture( + { texture: srcTexture }, + { texture: dstTexture }, + { width: 1, height: 1, depthOrArrayLayers: 1 }, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('sample_count'). +desc( + ` Test that textures in copyTextureToTexture must have the same sample count. - for various source texture sample count - for various destination texture sample count ` - ) - .paramsSubcasesOnly(u => - u // - .combine('srcSampleCount', [1, 4]) - .combine('dstSampleCount', [1, 4]) - ) - .fn(t => { - const { srcSampleCount, dstSampleCount } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('srcSampleCount', [1, 4]). +combine('dstSampleCount', [1, 4]) +). +fn((t) => { + const { srcSampleCount, dstSampleCount } = t.params; - const srcTexture = t.device.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: srcSampleCount, - }); - const dstTexture = t.device.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: dstSampleCount, - }); - - const isSuccess = srcSampleCount === dstSampleCount; - t.TestCopyTextureToTexture( - { texture: srcTexture }, - { texture: dstTexture }, - { width: 4, height: 4, depthOrArrayLayers: 1 }, - isSuccess ? 'Success' : 'FinishError' - ); + const srcTexture = t.device.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: srcSampleCount + }); + const dstTexture = t.device.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: dstSampleCount }); -g.test('multisampled_copy_restrictions') - .desc( - ` + const isSuccess = srcSampleCount === dstSampleCount; + t.TestCopyTextureToTexture( + { texture: srcTexture }, + { texture: dstTexture }, + { width: 4, height: 4, depthOrArrayLayers: 1 }, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('multisampled_copy_restrictions'). +desc( + ` Test that copyTextureToTexture of multisampled texture must copy a whole subresource to a whole subresource. - for various origin for the source and destination of the copies. Note: this is only tested for 2D textures as it is the only dimension compatible with multisampling. TODO: Check the source and destination constraints separately. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('srcCopyOrigin', [ - { x: 0, y: 0, z: 0 }, - { x: 1, y: 0, z: 0 }, - { x: 0, y: 1, z: 0 }, - { x: 1, y: 1, z: 0 }, - ]) - .combine('dstCopyOrigin', [ - { x: 0, y: 0, z: 0 }, - { x: 1, y: 0, z: 0 }, - { x: 0, y: 1, z: 0 }, - { x: 1, y: 1, z: 0 }, - ]) - .expand('copyWidth', p => [32 - Math.max(p.srcCopyOrigin.x, p.dstCopyOrigin.x), 16]) - .expand('copyHeight', p => [16 - Math.max(p.srcCopyOrigin.y, p.dstCopyOrigin.y), 8]) - ) - .fn(t => { - const { srcCopyOrigin, dstCopyOrigin, copyWidth, copyHeight } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('srcCopyOrigin', [ +{ x: 0, y: 0, z: 0 }, +{ x: 1, y: 0, z: 0 }, +{ x: 0, y: 1, z: 0 }, +{ x: 1, y: 1, z: 0 }] +). +combine('dstCopyOrigin', [ +{ x: 0, y: 0, z: 0 }, +{ x: 1, y: 0, z: 0 }, +{ x: 0, y: 1, z: 0 }, +{ x: 1, y: 1, z: 0 }] +). +expand('copyWidth', (p) => [32 - Math.max(p.srcCopyOrigin.x, p.dstCopyOrigin.x), 16]). +expand('copyHeight', (p) => [16 - Math.max(p.srcCopyOrigin.y, p.dstCopyOrigin.y), 8]) +). +fn((t) => { + const { srcCopyOrigin, dstCopyOrigin, copyWidth, copyHeight } = t.params; - const kWidth = 32; - const kHeight = 16; + const kWidth = 32; + const kHeight = 16; - // Currently we don't support multisampled 2D array textures and the mipmap level count of the - // multisampled textures must be 1. - const srcTexture = t.device.createTexture({ - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: 4, - }); - const dstTexture = t.device.createTexture({ - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: 4, - }); - - const isSuccess = copyWidth === kWidth && copyHeight === kHeight; - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: srcCopyOrigin }, - { texture: dstTexture, origin: dstCopyOrigin }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 }, - isSuccess ? 'Success' : 'FinishError' - ); + // Currently we don't support multisampled 2D array textures and the mipmap level count of the + // multisampled textures must be 1. + const srcTexture = t.device.createTexture({ + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: 4 + }); + const dstTexture = t.device.createTexture({ + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount: 4 }); -g.test('texture_format_compatibility') - .desc( - ` + const isSuccess = copyWidth === kWidth && copyHeight === kHeight; + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: srcCopyOrigin }, + { texture: dstTexture, origin: dstCopyOrigin }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 }, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('texture_format_compatibility'). +desc( + ` Test the formats of textures in copyTextureToTexture must be copy-compatible. - for all source texture formats - for all destination texture formats ` - ) - .params(u => - u - .combine('srcFormatFeature', kFeaturesForFormats) - .combine('dstFormatFeature', kFeaturesForFormats) - .beginSubcases() - .expand('srcFormat', ({ srcFormatFeature }) => - filterFormatsByFeature(srcFormatFeature, kTextureFormats) - ) - .expand('dstFormat', ({ dstFormatFeature }) => - filterFormatsByFeature(dstFormatFeature, kTextureFormats) - ) - ) - .beforeAllSubcases(t => { - const { srcFormatFeature, dstFormatFeature } = t.params; - t.selectDeviceOrSkipTestCase([srcFormatFeature, dstFormatFeature]); - }) - .fn(t => { - const { srcFormat, dstFormat } = t.params; - const srcFormatInfo = kTextureFormatInfo[srcFormat]; - const dstFormatInfo = kTextureFormatInfo[dstFormat]; +). +params((u) => +u. +combine('srcFormatFeature', kFeaturesForFormats). +combine('dstFormatFeature', kFeaturesForFormats). +beginSubcases(). +expand('srcFormat', ({ srcFormatFeature }) => +filterFormatsByFeature(srcFormatFeature, kTextureFormats) +). +expand('dstFormat', ({ dstFormatFeature }) => +filterFormatsByFeature(dstFormatFeature, kTextureFormats) +) +). +beforeAllSubcases((t) => { + const { srcFormatFeature, dstFormatFeature } = t.params; + t.selectDeviceOrSkipTestCase([srcFormatFeature, dstFormatFeature]); +}). +fn((t) => { + const { srcFormat, dstFormat } = t.params; - t.skipIfTextureFormatNotSupported(srcFormat, dstFormat); + t.skipIfTextureFormatNotSupported(srcFormat, dstFormat); + t.skipIfCopyTextureToTextureNotSupportedForFormat(srcFormat, dstFormat); - const textureSize = { - width: lcm(srcFormatInfo.blockWidth, dstFormatInfo.blockWidth), - height: lcm(srcFormatInfo.blockHeight, dstFormatInfo.blockHeight), - depthOrArrayLayers: 1, - }; + const srcFormatInfo = kTextureFormatInfo[srcFormat]; + const dstFormatInfo = kTextureFormatInfo[dstFormat]; - const srcTexture = t.device.createTexture({ - size: textureSize, - format: srcFormat, - usage: GPUTextureUsage.COPY_SRC, - }); + const textureSize = { + width: lcm(srcFormatInfo.blockWidth, dstFormatInfo.blockWidth), + height: lcm(srcFormatInfo.blockHeight, dstFormatInfo.blockHeight), + depthOrArrayLayers: 1 + }; - const dstTexture = t.device.createTexture({ - size: textureSize, - format: dstFormat, - usage: GPUTextureUsage.COPY_DST, - }); - - // Allow copy between compatible format textures. - const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat ?? srcFormat; - const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat ?? dstFormat; - const isSuccess = srcBaseFormat === dstBaseFormat; - - t.TestCopyTextureToTexture( - { texture: srcTexture }, - { texture: dstTexture }, - textureSize, - isSuccess ? 'Success' : 'FinishError' - ); + const srcTexture = t.device.createTexture({ + size: textureSize, + format: srcFormat, + usage: GPUTextureUsage.COPY_SRC }); -g.test('depth_stencil_copy_restrictions') - .desc( - ` + const dstTexture = t.device.createTexture({ + size: textureSize, + format: dstFormat, + usage: GPUTextureUsage.COPY_DST + }); + + // Allow copy between compatible format textures. + const srcBaseFormat = kTextureFormatInfo[srcFormat].baseFormat ?? srcFormat; + const dstBaseFormat = kTextureFormatInfo[dstFormat].baseFormat ?? dstFormat; + const isSuccess = srcBaseFormat === dstBaseFormat; + + t.TestCopyTextureToTexture( + { texture: srcTexture }, + { texture: dstTexture }, + textureSize, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('depth_stencil_copy_restrictions'). +desc( + ` Test that depth textures subresources must be entirely copied in copyTextureToTexture - for various depth-stencil formats - for various copy origin and size offsets @@ -400,346 +412,336 @@ Test that depth textures subresources must be entirely copied in copyTextureToTe Note: this is only tested for 2D textures as it is the only dimension compatible with depth-stencil. ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .beginSubcases() - .combine('copyBoxOffsets', [ - { x: 0, y: 0, width: 0, height: 0 }, - { x: 1, y: 0, width: 0, height: 0 }, - { x: 0, y: 1, width: 0, height: 0 }, - { x: 0, y: 0, width: -1, height: 0 }, - { x: 0, y: 0, width: 0, height: -1 }, - ]) - .combine('srcTextureSize', [ - { width: 64, height: 64, depthOrArrayLayers: 1 }, - { width: 64, height: 32, depthOrArrayLayers: 1 }, - { width: 32, height: 32, depthOrArrayLayers: 1 }, - ]) - .combine('dstTextureSize', [ - { width: 64, height: 64, depthOrArrayLayers: 1 }, - { width: 64, height: 32, depthOrArrayLayers: 1 }, - { width: 32, height: 32, depthOrArrayLayers: 1 }, - ]) - .combine('srcCopyLevel', [1, 2]) - .combine('dstCopyLevel', [0, 1]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(t => { - const { - format, - copyBoxOffsets, - srcTextureSize, - dstTextureSize, - srcCopyLevel, - dstCopyLevel, - } = t.params; - const kMipLevelCount = 3; +). +params((u) => +u. +combine('format', kDepthStencilFormats). +beginSubcases(). +combine('copyBoxOffsets', [ +{ x: 0, y: 0, width: 0, height: 0 }, +{ x: 1, y: 0, width: 0, height: 0 }, +{ x: 0, y: 1, width: 0, height: 0 }, +{ x: 0, y: 0, width: -1, height: 0 }, +{ x: 0, y: 0, width: 0, height: -1 }] +). +combine('srcTextureSize', [ +{ width: 64, height: 64, depthOrArrayLayers: 1 }, +{ width: 64, height: 32, depthOrArrayLayers: 1 }, +{ width: 32, height: 32, depthOrArrayLayers: 1 }] +). +combine('dstTextureSize', [ +{ width: 64, height: 64, depthOrArrayLayers: 1 }, +{ width: 64, height: 32, depthOrArrayLayers: 1 }, +{ width: 32, height: 32, depthOrArrayLayers: 1 }] +). +combine('srcCopyLevel', [1, 2]). +combine('dstCopyLevel', [0, 1]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn((t) => { + const { format, copyBoxOffsets, srcTextureSize, dstTextureSize, srcCopyLevel, dstCopyLevel } = + t.params; + const kMipLevelCount = 3; - const srcTexture = t.device.createTexture({ - size: { width: srcTextureSize.width, height: srcTextureSize.height, depthOrArrayLayers: 1 }, - format, - mipLevelCount: kMipLevelCount, - usage: GPUTextureUsage.COPY_SRC, - }); - const dstTexture = t.device.createTexture({ - size: { width: dstTextureSize.width, height: dstTextureSize.height, depthOrArrayLayers: 1 }, - format, - mipLevelCount: kMipLevelCount, - usage: GPUTextureUsage.COPY_DST, - }); - - const srcSizeAtLevel = t.GetPhysicalSubresourceSize('2d', srcTextureSize, format, srcCopyLevel); - const dstSizeAtLevel = t.GetPhysicalSubresourceSize('2d', dstTextureSize, format, dstCopyLevel); - - const copyOrigin = { x: copyBoxOffsets.x, y: copyBoxOffsets.y, z: 0 }; - - const copyWidth = - Math.min(srcSizeAtLevel.width, dstSizeAtLevel.width) + copyBoxOffsets.width - copyOrigin.x; - const copyHeight = - Math.min(srcSizeAtLevel.height, dstSizeAtLevel.height) + copyBoxOffsets.height - copyOrigin.y; - - // Depth/stencil copies must copy whole subresources. - const isSuccess = - copyOrigin.x === 0 && - copyOrigin.y === 0 && - copyWidth === srcSizeAtLevel.width && - copyHeight === srcSizeAtLevel.height && - copyWidth === dstSizeAtLevel.width && - copyHeight === dstSizeAtLevel.height; - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: srcCopyLevel }, - { texture: dstTexture, origin: copyOrigin, mipLevel: dstCopyLevel }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 }, - isSuccess ? 'Success' : 'FinishError' - ); - - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: copyOrigin, mipLevel: srcCopyLevel }, - { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: dstCopyLevel }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 }, - isSuccess ? 'Success' : 'FinishError' - ); + const srcTexture = t.device.createTexture({ + size: { width: srcTextureSize.width, height: srcTextureSize.height, depthOrArrayLayers: 1 }, + format, + mipLevelCount: kMipLevelCount, + usage: GPUTextureUsage.COPY_SRC + }); + const dstTexture = t.device.createTexture({ + size: { width: dstTextureSize.width, height: dstTextureSize.height, depthOrArrayLayers: 1 }, + format, + mipLevelCount: kMipLevelCount, + usage: GPUTextureUsage.COPY_DST }); -g.test('copy_ranges') - .desc( - ` + const srcSizeAtLevel = t.GetPhysicalSubresourceSize('2d', srcTextureSize, format, srcCopyLevel); + const dstSizeAtLevel = t.GetPhysicalSubresourceSize('2d', dstTextureSize, format, dstCopyLevel); + + const copyOrigin = { x: copyBoxOffsets.x, y: copyBoxOffsets.y, z: 0 }; + + const copyWidth = + Math.min(srcSizeAtLevel.width, dstSizeAtLevel.width) + copyBoxOffsets.width - copyOrigin.x; + const copyHeight = + Math.min(srcSizeAtLevel.height, dstSizeAtLevel.height) + copyBoxOffsets.height - copyOrigin.y; + + // Depth/stencil copies must copy whole subresources. + const isSuccess = + copyOrigin.x === 0 && + copyOrigin.y === 0 && + copyWidth === srcSizeAtLevel.width && + copyHeight === srcSizeAtLevel.height && + copyWidth === dstSizeAtLevel.width && + copyHeight === dstSizeAtLevel.height; + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: srcCopyLevel }, + { texture: dstTexture, origin: copyOrigin, mipLevel: dstCopyLevel }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 }, + isSuccess ? 'Success' : 'FinishError' + ); + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: copyOrigin, mipLevel: srcCopyLevel }, + { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: dstCopyLevel }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: 1 }, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('copy_ranges'). +desc( + ` Test that copyTextureToTexture copy boxes must be in range of the subresource. - for various dimensions - for various offsets to a full copy for the copy origin/size - for various copy mip levels ` - ) - .params(u => - u - .combine('dimension', kTextureDimensions) - //.beginSubcases() - .combine('copyBoxOffsets', [ - { x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 1, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 1, y: 0, z: 0, width: -1, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 1, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 1, z: 0, width: 0, height: -1, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 1, width: 0, height: 1, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 2, width: 0, height: 1, depthOrArrayLayers: 0 }, - { x: 0, y: 0, z: 0, width: 1, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: 0, height: 1, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: 1 }, - { x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: 0 }, - { x: 0, y: 0, z: 1, width: 0, height: 0, depthOrArrayLayers: -1 }, - { x: 0, y: 0, z: 2, width: 0, height: 0, depthOrArrayLayers: -1 }, - ]) - .unless( - p => - p.dimension === '1d' && - (p.copyBoxOffsets.y !== 0 || - p.copyBoxOffsets.z !== 0 || - p.copyBoxOffsets.height !== 0 || - p.copyBoxOffsets.depthOrArrayLayers !== 0) - ) - .combine('srcCopyLevel', [0, 1, 3]) - .combine('dstCopyLevel', [0, 1, 3]) - .unless(p => p.dimension === '1d' && (p.srcCopyLevel !== 0 || p.dstCopyLevel !== 0)) - ) - .fn(t => { - const { dimension, copyBoxOffsets, srcCopyLevel, dstCopyLevel } = t.params; +). +params((u) => +u. +combine('dimension', kTextureDimensions) +//.beginSubcases() +.combine('copyBoxOffsets', [ +{ x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 1, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 1, y: 0, z: 0, width: -1, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 1, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 1, z: 0, width: 0, height: -1, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 1, width: 0, height: 1, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 2, width: 0, height: 1, depthOrArrayLayers: 0 }, +{ x: 0, y: 0, z: 0, width: 1, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: 0, height: 1, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: 1 }, +{ x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: 0 }, +{ x: 0, y: 0, z: 1, width: 0, height: 0, depthOrArrayLayers: -1 }, +{ x: 0, y: 0, z: 2, width: 0, height: 0, depthOrArrayLayers: -1 }] +). +unless( + (p) => + p.dimension === '1d' && ( + p.copyBoxOffsets.y !== 0 || + p.copyBoxOffsets.z !== 0 || + p.copyBoxOffsets.height !== 0 || + p.copyBoxOffsets.depthOrArrayLayers !== 0) +). +combine('srcCopyLevel', [0, 1, 3]). +combine('dstCopyLevel', [0, 1, 3]). +unless((p) => p.dimension === '1d' && (p.srcCopyLevel !== 0 || p.dstCopyLevel !== 0)) +). +fn((t) => { + const { dimension, copyBoxOffsets, srcCopyLevel, dstCopyLevel } = t.params; - const textureSize = { width: 16, height: 8, depthOrArrayLayers: 3 }; - let mipLevelCount = 4; - if (dimension === '1d') { - mipLevelCount = 1; - textureSize.height = 1; - textureSize.depthOrArrayLayers = 1; - } - const kFormat = 'rgba8unorm'; + const textureSize = { width: 16, height: 8, depthOrArrayLayers: 3 }; + let mipLevelCount = 4; + if (dimension === '1d') { + mipLevelCount = 1; + textureSize.height = 1; + textureSize.depthOrArrayLayers = 1; + } + const kFormat = 'rgba8unorm'; - const srcTexture = t.device.createTexture({ - size: textureSize, - format: kFormat, - dimension, - mipLevelCount, - usage: GPUTextureUsage.COPY_SRC, - }); - const dstTexture = t.device.createTexture({ - size: textureSize, - format: kFormat, - dimension, - mipLevelCount, - usage: GPUTextureUsage.COPY_DST, - }); - - const srcSizeAtLevel = t.GetPhysicalSubresourceSize( - dimension, - textureSize, - kFormat, - srcCopyLevel - ); - - const dstSizeAtLevel = t.GetPhysicalSubresourceSize( - dimension, - textureSize, - kFormat, - dstCopyLevel - ); - - const copyOrigin = { x: copyBoxOffsets.x, y: copyBoxOffsets.y, z: copyBoxOffsets.z }; - - const copyWidth = Math.max( - Math.min(srcSizeAtLevel.width, dstSizeAtLevel.width) + copyBoxOffsets.width - copyOrigin.x, - 0 - ); - - const copyHeight = Math.max( - Math.min(srcSizeAtLevel.height, dstSizeAtLevel.height) + copyBoxOffsets.height - copyOrigin.y, - 0 - ); - - const copyDepth = - textureSize.depthOrArrayLayers + copyBoxOffsets.depthOrArrayLayers - copyOrigin.z; - - { - let isSuccess = - copyWidth <= srcSizeAtLevel.width && - copyHeight <= srcSizeAtLevel.height && - copyOrigin.x + copyWidth <= dstSizeAtLevel.width && - copyOrigin.y + copyHeight <= dstSizeAtLevel.height; - - if (dimension === '3d') { - isSuccess = - isSuccess && - copyDepth <= srcSizeAtLevel.depthOrArrayLayers && - copyOrigin.z + copyDepth <= dstSizeAtLevel.depthOrArrayLayers; - } else { - isSuccess = - isSuccess && - copyDepth <= textureSize.depthOrArrayLayers && - copyOrigin.z + copyDepth <= textureSize.depthOrArrayLayers; - } - - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: srcCopyLevel }, - { texture: dstTexture, origin: copyOrigin, mipLevel: dstCopyLevel }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, - isSuccess ? 'Success' : 'FinishError' - ); - } - - { - let isSuccess = - copyOrigin.x + copyWidth <= srcSizeAtLevel.width && - copyOrigin.y + copyHeight <= srcSizeAtLevel.height && - copyWidth <= dstSizeAtLevel.width && - copyHeight <= dstSizeAtLevel.height; - - if (dimension === '3d') { - isSuccess = - isSuccess && - copyDepth <= dstSizeAtLevel.depthOrArrayLayers && - copyOrigin.z + copyDepth <= srcSizeAtLevel.depthOrArrayLayers; - } else { - isSuccess = - isSuccess && - copyDepth <= textureSize.depthOrArrayLayers && - copyOrigin.z + copyDepth <= textureSize.depthOrArrayLayers; - } - - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: copyOrigin, mipLevel: srcCopyLevel }, - { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: dstCopyLevel }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, - isSuccess ? 'Success' : 'FinishError' - ); - } + const srcTexture = t.device.createTexture({ + size: textureSize, + format: kFormat, + dimension, + mipLevelCount, + usage: GPUTextureUsage.COPY_SRC + }); + const dstTexture = t.device.createTexture({ + size: textureSize, + format: kFormat, + dimension, + mipLevelCount, + usage: GPUTextureUsage.COPY_DST }); -g.test('copy_within_same_texture') - .desc( - ` + const srcSizeAtLevel = t.GetPhysicalSubresourceSize( + dimension, + textureSize, + kFormat, + srcCopyLevel + ); + const dstSizeAtLevel = t.GetPhysicalSubresourceSize( + dimension, + textureSize, + kFormat, + dstCopyLevel + ); + + const copyOrigin = { x: copyBoxOffsets.x, y: copyBoxOffsets.y, z: copyBoxOffsets.z }; + + const copyWidth = Math.max( + Math.min(srcSizeAtLevel.width, dstSizeAtLevel.width) + copyBoxOffsets.width - copyOrigin.x, + 0 + ); + const copyHeight = Math.max( + Math.min(srcSizeAtLevel.height, dstSizeAtLevel.height) + copyBoxOffsets.height - copyOrigin.y, + 0 + ); + const copyDepth = + textureSize.depthOrArrayLayers + copyBoxOffsets.depthOrArrayLayers - copyOrigin.z; + + { + let isSuccess = + copyWidth <= srcSizeAtLevel.width && + copyHeight <= srcSizeAtLevel.height && + copyOrigin.x + copyWidth <= dstSizeAtLevel.width && + copyOrigin.y + copyHeight <= dstSizeAtLevel.height; + + if (dimension === '3d') { + isSuccess = + isSuccess && + copyDepth <= srcSizeAtLevel.depthOrArrayLayers && + copyOrigin.z + copyDepth <= dstSizeAtLevel.depthOrArrayLayers; + } else { + isSuccess = + isSuccess && + copyDepth <= textureSize.depthOrArrayLayers && + copyOrigin.z + copyDepth <= textureSize.depthOrArrayLayers; + } + + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: srcCopyLevel }, + { texture: dstTexture, origin: copyOrigin, mipLevel: dstCopyLevel }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, + isSuccess ? 'Success' : 'FinishError' + ); + } + + { + let isSuccess = + copyOrigin.x + copyWidth <= srcSizeAtLevel.width && + copyOrigin.y + copyHeight <= srcSizeAtLevel.height && + copyWidth <= dstSizeAtLevel.width && + copyHeight <= dstSizeAtLevel.height; + + if (dimension === '3d') { + isSuccess = + isSuccess && + copyDepth <= dstSizeAtLevel.depthOrArrayLayers && + copyOrigin.z + copyDepth <= srcSizeAtLevel.depthOrArrayLayers; + } else { + isSuccess = + isSuccess && + copyDepth <= textureSize.depthOrArrayLayers && + copyOrigin.z + copyDepth <= textureSize.depthOrArrayLayers; + } + + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: copyOrigin, mipLevel: srcCopyLevel }, + { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: dstCopyLevel }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, + isSuccess ? 'Success' : 'FinishError' + ); + } +}); + +g.test('copy_within_same_texture'). +desc( + ` Test that it is an error to use copyTextureToTexture from one subresource to itself. - for various starting source/destination array layers. - for various copy sizes in number of array layers TODO: Extend to check the copy is allowed between different mip levels. TODO: Extend to 1D and 3D textures.` - ) - .paramsSubcasesOnly(u => - u // - .combine('srcCopyOriginZ', [0, 2, 4]) - .combine('dstCopyOriginZ', [0, 2, 4]) - .combine('copyExtentDepth', [1, 2, 3]) - ) - .fn(t => { - const { srcCopyOriginZ, dstCopyOriginZ, copyExtentDepth } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('srcCopyOriginZ', [0, 2, 4]). +combine('dstCopyOriginZ', [0, 2, 4]). +combine('copyExtentDepth', [1, 2, 3]) +). +fn((t) => { + const { srcCopyOriginZ, dstCopyOriginZ, copyExtentDepth } = t.params; - const kArrayLayerCount = 7; + const kArrayLayerCount = 7; - const testTexture = t.device.createTexture({ - size: { width: 16, height: 16, depthOrArrayLayers: kArrayLayerCount }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const isSuccess = - Math.min(srcCopyOriginZ, dstCopyOriginZ) + copyExtentDepth <= - Math.max(srcCopyOriginZ, dstCopyOriginZ); - t.TestCopyTextureToTexture( - { texture: testTexture, origin: { x: 0, y: 0, z: srcCopyOriginZ } }, - { texture: testTexture, origin: { x: 0, y: 0, z: dstCopyOriginZ } }, - { width: 16, height: 16, depthOrArrayLayers: copyExtentDepth }, - isSuccess ? 'Success' : 'FinishError' - ); + const testTexture = t.device.createTexture({ + size: { width: 16, height: 16, depthOrArrayLayers: kArrayLayerCount }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('copy_aspects') - .desc( - ` + const isSuccess = + Math.min(srcCopyOriginZ, dstCopyOriginZ) + copyExtentDepth <= + Math.max(srcCopyOriginZ, dstCopyOriginZ); + t.TestCopyTextureToTexture( + { texture: testTexture, origin: { x: 0, y: 0, z: srcCopyOriginZ } }, + { texture: testTexture, origin: { x: 0, y: 0, z: dstCopyOriginZ } }, + { width: 16, height: 16, depthOrArrayLayers: copyExtentDepth }, + isSuccess ? 'Success' : 'FinishError' + ); +}); + +g.test('copy_aspects'). +desc( + ` Test the validations on the member 'aspect' of GPUImageCopyTexture in CopyTextureToTexture(). - for all the color and depth-stencil formats: the texture copy aspects must be both 'all'. - for all the depth-only formats: the texture copy aspects must be either 'all' or 'depth-only'. - for all the stencil-only formats: the texture copy aspects must be either 'all' or 'stencil-only'. ` - ) - .params(u => - u - .combine('format', ['rgba8unorm', ...kDepthStencilFormats]) - .beginSubcases() - .combine('sourceAspect', ['all', 'depth-only', 'stencil-only']) - .combine('destinationAspect', ['all', 'depth-only', 'stencil-only']) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(t => { - const { format, sourceAspect, destinationAspect } = t.params; +). +params((u) => +u. +combine('format', ['rgba8unorm', ...kDepthStencilFormats]). +beginSubcases(). +combine('sourceAspect', ['all', 'depth-only', 'stencil-only']). +combine('destinationAspect', ['all', 'depth-only', 'stencil-only']) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn((t) => { + const { format, sourceAspect, destinationAspect } = t.params; - const kTextureSize = { width: 16, height: 8, depthOrArrayLayers: 1 }; + const kTextureSize = { width: 16, height: 8, depthOrArrayLayers: 1 }; - const srcTexture = t.device.createTexture({ - size: kTextureSize, - format, - usage: GPUTextureUsage.COPY_SRC, - }); - const dstTexture = t.device.createTexture({ - size: kTextureSize, - format, - usage: GPUTextureUsage.COPY_DST, - }); - - // MAINTENANCE_TODO: get the valid aspects from capability_info.ts. - const kValidAspectsForFormat = { - rgba8unorm: ['all'], - - // kUnsizedDepthStencilFormats - depth24plus: ['all', 'depth-only'], - 'depth24plus-stencil8': ['all'], - 'depth32float-stencil8': ['all'], - - // kSizedDepthStencilFormats - depth32float: ['all', 'depth-only'], - stencil8: ['all', 'stencil-only'], - depth16unorm: ['all', 'depth-only'], - }; - - const isSourceAspectValid = kValidAspectsForFormat[format].includes(sourceAspect); - const isDestinationAspectValid = kValidAspectsForFormat[format].includes(destinationAspect); - - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, aspect: sourceAspect }, - { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, aspect: destinationAspect }, - kTextureSize, - isSourceAspectValid && isDestinationAspectValid ? 'Success' : 'FinishError' - ); + const srcTexture = t.device.createTexture({ + size: kTextureSize, + format, + usage: GPUTextureUsage.COPY_SRC + }); + const dstTexture = t.device.createTexture({ + size: kTextureSize, + format, + usage: GPUTextureUsage.COPY_DST }); -g.test('copy_ranges_with_compressed_texture_formats') - .desc( - ` + // MAINTENANCE_TODO: get the valid aspects from capability_info.ts. + const kValidAspectsForFormat = { + rgba8unorm: ['all'], + + // kUnsizedDepthStencilFormats + depth24plus: ['all', 'depth-only'], + 'depth24plus-stencil8': ['all'], + 'depth32float-stencil8': ['all'], + + // kSizedDepthStencilFormats + depth32float: ['all', 'depth-only'], + stencil8: ['all', 'stencil-only'], + depth16unorm: ['all', 'depth-only'] + }; + + const isSourceAspectValid = kValidAspectsForFormat[format].includes(sourceAspect); + const isDestinationAspectValid = kValidAspectsForFormat[format].includes(destinationAspect); + + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, aspect: sourceAspect }, + { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, aspect: destinationAspect }, + kTextureSize, + isSourceAspectValid && isDestinationAspectValid ? 'Success' : 'FinishError' + ); +}); + +g.test('copy_ranges_with_compressed_texture_formats'). +desc( + ` Test that copyTextureToTexture copy boxes must be in range of the subresource and aligned to the block size - for various dimensions - for various offsets to a full copy for the copy origin/size @@ -747,129 +749,126 @@ Test that copyTextureToTexture copy boxes must be in range of the subresource an TODO: Express the offsets in "block size" so as to be able to test non-4x4 compressed formats ` - ) - .params(u => - u - .combine('format', kCompressedTextureFormats) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('copyBoxOffsets', [ - { x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 1, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 4, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: -1, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: -4, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 1, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 4, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: 0, height: -1, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: 0, height: -4, depthOrArrayLayers: -2 }, - { x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: 0 }, - { x: 0, y: 0, z: 1, width: 0, height: 0, depthOrArrayLayers: -1 }, - ]) - .combine('srcCopyLevel', [0, 1, 2]) - .combine('dstCopyLevel', [0, 1, 2]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - t.skipIfCopyTextureToTextureNotSupportedForFormat(format); - }) - .fn(t => { - const { format, dimension, copyBoxOffsets, srcCopyLevel, dstCopyLevel } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('format', kCompressedTextureFormats). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('copyBoxOffsets', [ +{ x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 1, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 4, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: -1, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: -4, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 1, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 4, z: 0, width: 0, height: 0, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: 0, height: -1, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: 0, height: -4, depthOrArrayLayers: -2 }, +{ x: 0, y: 0, z: 0, width: 0, height: 0, depthOrArrayLayers: 0 }, +{ x: 0, y: 0, z: 1, width: 0, height: 0, depthOrArrayLayers: -1 }] +). +combine('srcCopyLevel', [0, 1, 2]). +combine('dstCopyLevel', [0, 1, 2]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); + t.skipIfCopyTextureToTextureNotSupportedForFormat(format); +}). +fn((t) => { + const { format, dimension, copyBoxOffsets, srcCopyLevel, dstCopyLevel } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - const kTextureSize = { - width: 15 * blockWidth, - height: 12 * blockHeight, - depthOrArrayLayers: 3, - }; - const kMipLevelCount = 4; + const kTextureSize = { + width: 15 * blockWidth, + height: 12 * blockHeight, + depthOrArrayLayers: 3 + }; + const kMipLevelCount = 4; - const srcTexture = t.device.createTexture({ - size: kTextureSize, - format, - dimension, - mipLevelCount: kMipLevelCount, - usage: GPUTextureUsage.COPY_SRC, - }); - const dstTexture = t.device.createTexture({ - size: kTextureSize, - format, - dimension, - mipLevelCount: kMipLevelCount, - usage: GPUTextureUsage.COPY_DST, - }); - - const srcSizeAtLevel = t.GetPhysicalSubresourceSize( - dimension, - kTextureSize, - format, - srcCopyLevel - ); - - const dstSizeAtLevel = t.GetPhysicalSubresourceSize( - dimension, - kTextureSize, - format, - dstCopyLevel - ); - - const copyOrigin = { x: copyBoxOffsets.x, y: copyBoxOffsets.y, z: copyBoxOffsets.z }; - - const copyWidth = Math.max( - Math.min(srcSizeAtLevel.width, dstSizeAtLevel.width) + copyBoxOffsets.width - copyOrigin.x, - 0 - ); - - const copyHeight = Math.max( - Math.min(srcSizeAtLevel.height, dstSizeAtLevel.height) + copyBoxOffsets.height - copyOrigin.y, - 0 - ); - - const copyDepth = - kTextureSize.depthOrArrayLayers + copyBoxOffsets.depthOrArrayLayers - copyOrigin.z; - - const texelBlockWidth = kTextureFormatInfo[format].blockWidth; - const texelBlockHeight = kTextureFormatInfo[format].blockHeight; - - const isSuccessForCompressedFormats = - copyOrigin.x % texelBlockWidth === 0 && - copyOrigin.y % texelBlockHeight === 0 && - copyWidth % texelBlockWidth === 0 && - copyHeight % texelBlockHeight === 0; - - { - const isSuccess = - isSuccessForCompressedFormats && - copyWidth <= srcSizeAtLevel.width && - copyHeight <= srcSizeAtLevel.height && - copyOrigin.x + copyWidth <= dstSizeAtLevel.width && - copyOrigin.y + copyHeight <= dstSizeAtLevel.height && - copyOrigin.z + copyDepth <= kTextureSize.depthOrArrayLayers; - - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: srcCopyLevel }, - { texture: dstTexture, origin: copyOrigin, mipLevel: dstCopyLevel }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, - isSuccess ? 'Success' : 'FinishError' - ); - } - - { - const isSuccess = - isSuccessForCompressedFormats && - copyOrigin.x + copyWidth <= srcSizeAtLevel.width && - copyOrigin.y + copyHeight <= srcSizeAtLevel.height && - copyWidth <= dstSizeAtLevel.width && - copyHeight <= dstSizeAtLevel.height && - copyOrigin.z + copyDepth <= kTextureSize.depthOrArrayLayers; - - t.TestCopyTextureToTexture( - { texture: srcTexture, origin: copyOrigin, mipLevel: srcCopyLevel }, - { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: dstCopyLevel }, - { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, - isSuccess ? 'Success' : 'FinishError' - ); - } + const srcTexture = t.device.createTexture({ + size: kTextureSize, + format, + dimension, + mipLevelCount: kMipLevelCount, + usage: GPUTextureUsage.COPY_SRC }); + const dstTexture = t.device.createTexture({ + size: kTextureSize, + format, + dimension, + mipLevelCount: kMipLevelCount, + usage: GPUTextureUsage.COPY_DST + }); + + const srcSizeAtLevel = t.GetPhysicalSubresourceSize( + dimension, + kTextureSize, + format, + srcCopyLevel + ); + const dstSizeAtLevel = t.GetPhysicalSubresourceSize( + dimension, + kTextureSize, + format, + dstCopyLevel + ); + + const copyOrigin = { x: copyBoxOffsets.x, y: copyBoxOffsets.y, z: copyBoxOffsets.z }; + + const copyWidth = Math.max( + Math.min(srcSizeAtLevel.width, dstSizeAtLevel.width) + copyBoxOffsets.width - copyOrigin.x, + 0 + ); + const copyHeight = Math.max( + Math.min(srcSizeAtLevel.height, dstSizeAtLevel.height) + copyBoxOffsets.height - copyOrigin.y, + 0 + ); + const copyDepth = + kTextureSize.depthOrArrayLayers + copyBoxOffsets.depthOrArrayLayers - copyOrigin.z; + + const texelBlockWidth = kTextureFormatInfo[format].blockWidth; + const texelBlockHeight = kTextureFormatInfo[format].blockHeight; + + const isSuccessForCompressedFormats = + copyOrigin.x % texelBlockWidth === 0 && + copyOrigin.y % texelBlockHeight === 0 && + copyWidth % texelBlockWidth === 0 && + copyHeight % texelBlockHeight === 0; + + { + const isSuccess = + isSuccessForCompressedFormats && + copyWidth <= srcSizeAtLevel.width && + copyHeight <= srcSizeAtLevel.height && + copyOrigin.x + copyWidth <= dstSizeAtLevel.width && + copyOrigin.y + copyHeight <= dstSizeAtLevel.height && + copyOrigin.z + copyDepth <= kTextureSize.depthOrArrayLayers; + + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: srcCopyLevel }, + { texture: dstTexture, origin: copyOrigin, mipLevel: dstCopyLevel }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, + isSuccess ? 'Success' : 'FinishError' + ); + } + + { + const isSuccess = + isSuccessForCompressedFormats && + copyOrigin.x + copyWidth <= srcSizeAtLevel.width && + copyOrigin.y + copyHeight <= srcSizeAtLevel.height && + copyWidth <= dstSizeAtLevel.width && + copyHeight <= dstSizeAtLevel.height && + copyOrigin.z + copyDepth <= kTextureSize.depthOrArrayLayers; + + t.TestCopyTextureToTexture( + { texture: srcTexture, origin: copyOrigin, mipLevel: srcCopyLevel }, + { texture: dstTexture, origin: { x: 0, y: 0, z: 0 }, mipLevel: dstCopyLevel }, + { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }, + isSuccess ? 'Success' : 'FinishError' + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/debug.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/debug.spec.js index f923b68d8df..98dcdf2dc0e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/debug.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/debug.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` API validation test for debug groups and markers Test Coverage: @@ -13,55 +13,54 @@ Test Coverage: - Test inserting a debug marker with empty and non-empty strings. - Test strings with \0 in them. - Test non-ASCII strings. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kEncoderTypes } from '../../../../util/command_buffer_maker.js'; import { ValidationTest } from '../../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('debug_group_balanced') - .params(u => - u - .combine('encoderType', kEncoderTypes) - .beginSubcases() - .combine('pushCount', [0, 1, 2]) - .combine('popCount', [0, 1, 2]) - ) - .fn(t => { - const { encoder, validateFinishAndSubmit } = t.createEncoder(t.params.encoderType); - for (let i = 0; i < t.params.pushCount; ++i) { - encoder.pushDebugGroup(`${i}`); - } - for (let i = 0; i < t.params.popCount; ++i) { - encoder.popDebugGroup(); - } - validateFinishAndSubmit(t.params.pushCount === t.params.popCount, true); - }); - -g.test('debug_group') - .params(u => - u // - .combine('encoderType', kEncoderTypes) - .beginSubcases() - .combine('label', ['', 'group', 'null\0in\0group\0label', '\0null at beginning', '🌞👆']) - ) - .fn(t => { - const { encoder, validateFinishAndSubmit } = t.createEncoder(t.params.encoderType); - encoder.pushDebugGroup(t.params.label); +g.test('debug_group_balanced'). +params((u) => +u. +combine('encoderType', kEncoderTypes). +beginSubcases(). +combine('pushCount', [0, 1, 2]). +combine('popCount', [0, 1, 2]) +). +fn((t) => { + const { encoder, validateFinishAndSubmit } = t.createEncoder(t.params.encoderType); + for (let i = 0; i < t.params.pushCount; ++i) { + encoder.pushDebugGroup(`${i}`); + } + for (let i = 0; i < t.params.popCount; ++i) { encoder.popDebugGroup(); - validateFinishAndSubmit(true, true); - }); + } + validateFinishAndSubmit(t.params.pushCount === t.params.popCount, true); +}); -g.test('debug_marker') - .params(u => - u // - .combine('encoderType', kEncoderTypes) - .beginSubcases() - .combine('label', ['', 'marker', 'null\0in\0marker', '\0null at beginning', '🌞👆']) - ) - .fn(t => { - const { encoder, validateFinishAndSubmit } = t.createEncoder(t.params.encoderType); - encoder.insertDebugMarker(t.params.label); - validateFinishAndSubmit(true, true); - }); +g.test('debug_group'). +params((u) => +u // +.combine('encoderType', kEncoderTypes). +beginSubcases(). +combine('label', ['', 'group', 'null\0in\0group\0label', '\0null at beginning', '🌞👆']) +). +fn((t) => { + const { encoder, validateFinishAndSubmit } = t.createEncoder(t.params.encoderType); + encoder.pushDebugGroup(t.params.label); + encoder.popDebugGroup(); + validateFinishAndSubmit(true, true); +}); + +g.test('debug_marker'). +params((u) => +u // +.combine('encoderType', kEncoderTypes). +beginSubcases(). +combine('label', ['', 'marker', 'null\0in\0marker', '\0null at beginning', '🌞👆']) +). +fn((t) => { + const { encoder, validateFinishAndSubmit } = t.createEncoder(t.params.encoderType); + encoder.insertDebugMarker(t.params.label); + validateFinishAndSubmit(true, true); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/index_access.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/index_access.spec.js index 1aa7ff1c12d..744c7e20de8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/index_access.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/index_access.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for indexed draws accessing the index buffer. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../validation_test.js'; class F extends ValidationTest { @@ -19,24 +18,24 @@ class F extends ValidationTest { code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, primitive: { topology: 'triangle-strip', - stripIndexFormat: 'uint32', - }, + stripIndexFormat: 'uint32' + } }); } @@ -44,30 +43,30 @@ class F extends ValidationTest { const colorAttachment = this.device.createTexture({ format: 'rgba8unorm', size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); return encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: colorAttachment.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); } drawIndexed( - indexBuffer, - indexCount, - instanceCount, - firstIndex, - baseVertex, - firstInstance, - isSuccess - ) { + indexBuffer, + indexCount, + instanceCount, + firstIndex, + baseVertex, + firstInstance, + isSuccess) + { const pipeline = this.createRenderPipeline(); const encoder = this.device.createCommandEncoder(); @@ -89,9 +88,9 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('out_of_bounds') - .desc( - `Test drawing with out of bound index access to make sure encoder validation catch the +g.test('out_of_bounds'). +desc( + `Test drawing with out of bound index access to make sure encoder validation catch the following indexCount and firstIndex OOB conditions - either is within bound but indexCount + firstIndex is out of bound - only firstIndex is out of bound @@ -102,62 +101,62 @@ g.test('out_of_bounds') - max uint32 indexCount and small firstIndex - max uint32 firstIndex and small indexCount Together with normal and large instanceCount` - ) - .params( - u => - u - .combineWithParams([ - { indexCount: 6, firstIndex: 0 }, // draw all 6 out of 6 index - { indexCount: 5, firstIndex: 1 }, // draw the last 5 out of 6 index - { indexCount: 1, firstIndex: 5 }, // draw the last 1 out of 6 index - { indexCount: 0, firstIndex: 6 }, // firstIndex point to the one after last, but (indexCount + firstIndex) * stride <= bufferSize, valid - { indexCount: 0, firstIndex: 7 }, // (indexCount + firstIndex) * stride > bufferSize, invalid - { indexCount: 7, firstIndex: 0 }, // only indexCount out of bound - { indexCount: 6, firstIndex: 1 }, // indexCount + firstIndex out of bound - { indexCount: 1, firstIndex: 6 }, // indexCount valid, but (indexCount + firstIndex) out of bound - { indexCount: 6, firstIndex: 10000 }, // firstIndex much larger than the bound - { indexCount: 10000, firstIndex: 0 }, // indexCount much larger than the bound - { indexCount: 0xffffffff, firstIndex: 0xffffffff }, // max uint32 value - { indexCount: 0xffffffff, firstIndex: 2 }, // max uint32 indexCount and small firstIndex - { indexCount: 2, firstIndex: 0xffffffff }, // small indexCount and max uint32 firstIndex - ]) - .combine('instanceCount', [1, 10000]) // normal and large instanceCount - ) - .fn(t => { - const { indexCount, firstIndex, instanceCount } = t.params; +). +params( + (u) => + u. + combineWithParams([ + { indexCount: 6, firstIndex: 0 }, // draw all 6 out of 6 index + { indexCount: 5, firstIndex: 1 }, // draw the last 5 out of 6 index + { indexCount: 1, firstIndex: 5 }, // draw the last 1 out of 6 index + { indexCount: 0, firstIndex: 6 }, // firstIndex point to the one after last, but (indexCount + firstIndex) * stride <= bufferSize, valid + { indexCount: 0, firstIndex: 7 }, // (indexCount + firstIndex) * stride > bufferSize, invalid + { indexCount: 7, firstIndex: 0 }, // only indexCount out of bound + { indexCount: 6, firstIndex: 1 }, // indexCount + firstIndex out of bound + { indexCount: 1, firstIndex: 6 }, // indexCount valid, but (indexCount + firstIndex) out of bound + { indexCount: 6, firstIndex: 10000 }, // firstIndex much larger than the bound + { indexCount: 10000, firstIndex: 0 }, // indexCount much larger than the bound + { indexCount: 0xffffffff, firstIndex: 0xffffffff }, // max uint32 value + { indexCount: 0xffffffff, firstIndex: 2 }, // max uint32 indexCount and small firstIndex + { indexCount: 2, firstIndex: 0xffffffff } // small indexCount and max uint32 firstIndex + ]). + combine('instanceCount', [1, 10000]) // normal and large instanceCount +). +fn((t) => { + const { indexCount, firstIndex, instanceCount } = t.params; - const indexBuffer = t.createIndexBuffer([0, 1, 2, 3, 1, 2]); - const isSuccess = indexCount + firstIndex <= 6; + const indexBuffer = t.createIndexBuffer([0, 1, 2, 3, 1, 2]); + const isSuccess = indexCount + firstIndex <= 6; - t.drawIndexed(indexBuffer, indexCount, instanceCount, firstIndex, 0, 0, isSuccess); - }); + t.drawIndexed(indexBuffer, indexCount, instanceCount, firstIndex, 0, 0, isSuccess); +}); -g.test('out_of_bounds_zero_sized_index_buffer') - .desc( - `Test drawing with an empty index buffer to make sure the encoder validation catch the +g.test('out_of_bounds_zero_sized_index_buffer'). +desc( + `Test drawing with an empty index buffer to make sure the encoder validation catch the following indexCount and firstIndex conditions - indexCount + firstIndex is out of bound - indexCount is 0 but firstIndex is out of bound - only indexCount is out of bound - both are 0s (not out of bound) but index buffer size is 0 Together with normal and large instanceCount` - ) - .params( - u => - u - .combineWithParams([ - { indexCount: 3, firstIndex: 1 }, // indexCount + firstIndex out of bound - { indexCount: 0, firstIndex: 1 }, // indexCount is 0 but firstIndex out of bound - { indexCount: 3, firstIndex: 0 }, // only indexCount out of bound - { indexCount: 0, firstIndex: 0 }, // just zeros, valid - ]) - .combine('instanceCount', [1, 10000]) // normal and large instanceCount - ) - .fn(t => { - const { indexCount, firstIndex, instanceCount } = t.params; +). +params( + (u) => + u. + combineWithParams([ + { indexCount: 3, firstIndex: 1 }, // indexCount + firstIndex out of bound + { indexCount: 0, firstIndex: 1 }, // indexCount is 0 but firstIndex out of bound + { indexCount: 3, firstIndex: 0 }, // only indexCount out of bound + { indexCount: 0, firstIndex: 0 } // just zeros, valid + ]). + combine('instanceCount', [1, 10000]) // normal and large instanceCount +). +fn((t) => { + const { indexCount, firstIndex, instanceCount } = t.params; - const indexBuffer = t.createIndexBuffer([]); - const isSuccess = indexCount + firstIndex <= 0; + const indexBuffer = t.createIndexBuffer([]); + const isSuccess = indexCount + firstIndex <= 0; - t.drawIndexed(indexBuffer, indexCount, instanceCount, firstIndex, 0, 0, isSuccess); - }); + t.drawIndexed(indexBuffer, indexCount, instanceCount, firstIndex, 0, 0, isSuccess); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/draw.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/draw.spec.js index 2b8542b7c72..823a327118f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/draw.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/draw.spec.js @@ -1,72 +1,112 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Here we test the validation for draw functions, mainly the buffer access validation. All four types of draw calls are tested, and test that validation errors do / don't occur for certain call type and parameters as expect. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { kVertexFormatInfo } from '../../../../../capability_info.js'; import { ValidationTest } from '../../../validation_test.js'; -function callDrawIndexed(test, encoder, drawType, param) { + + + + + + + + + + + + + + + + + + + + +function callDrawIndexed( +test, +encoder, +drawType, +param) +{ switch (drawType) { - case 'drawIndexed': { - encoder.drawIndexed( + case 'drawIndexed':{ + encoder.drawIndexed( + param.indexCount, + param.instanceCount ?? 1, + param.firstIndex ?? 0, + param.baseVertex ?? 0, + param.firstInstance ?? 0 + ); + break; + } + case 'drawIndexedIndirect':{ + const indirectArray = new Int32Array([ param.indexCount, param.instanceCount ?? 1, param.firstIndex ?? 0, param.baseVertex ?? 0, - param.firstInstance ?? 0 - ); - - break; - } - case 'drawIndexedIndirect': { - const indirectArray = new Int32Array([ - param.indexCount, - param.instanceCount ?? 1, - param.firstIndex ?? 0, - param.baseVertex ?? 0, - param.firstInstance ?? 0, - ]); - - const indirectBuffer = test.makeBufferWithContents(indirectArray, GPUBufferUsage.INDIRECT); - encoder.drawIndexedIndirect(indirectBuffer, 0); - break; - } + param.firstInstance ?? 0] + ); + const indirectBuffer = test.makeBufferWithContents(indirectArray, GPUBufferUsage.INDIRECT); + encoder.drawIndexedIndirect(indirectBuffer, 0); + break; + } } } -function callDraw(test, encoder, drawType, param) { + + + + + + +function callDraw( +test, +encoder, +drawType, +param) +{ switch (drawType) { - case 'draw': { - encoder.draw( + case 'draw':{ + encoder.draw( + param.vertexCount, + param.instanceCount ?? 1, + param.firstVertex ?? 0, + param.firstInstance ?? 0 + ); + break; + } + case 'drawIndirect':{ + const indirectArray = new Int32Array([ param.vertexCount, param.instanceCount ?? 1, param.firstVertex ?? 0, - param.firstInstance ?? 0 - ); - - break; - } - case 'drawIndirect': { - const indirectArray = new Int32Array([ - param.vertexCount, - param.instanceCount ?? 1, - param.firstVertex ?? 0, - param.firstInstance ?? 0, - ]); - - const indirectBuffer = test.makeBufferWithContents(indirectArray, GPUBufferUsage.INDIRECT); - encoder.drawIndirect(indirectBuffer, 0); - break; - } + param.firstInstance ?? 0] + ); + const indirectBuffer = test.makeBufferWithContents(indirectArray, GPUBufferUsage.INDIRECT); + encoder.drawIndirect(indirectBuffer, 0); + break; + } } } -function makeTestPipeline(test, buffers) { +function makeTestPipeline( +test, +buffers) + + + + + + +{ const bufferLayouts = []; for (const b of buffers) { bufferLayouts[b.slot] = b; @@ -76,54 +116,54 @@ function makeTestPipeline(test, buffers) { layout: 'auto', vertex: { module: test.device.createShaderModule({ - code: test.getNoOpShaderCode('VERTEX'), + code: test.getNoOpShaderCode('VERTEX') }), entryPoint: 'main', - buffers: bufferLayouts, + buffers: bufferLayouts }, fragment: { module: test.device.createShaderModule({ - code: test.getNoOpShaderCode('FRAGMENT'), + code: test.getNoOpShaderCode('FRAGMENT') }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], + targets: [{ format: 'rgba8unorm', writeMask: 0 }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); } function makeTestPipelineWithVertexAndInstanceBuffer( - test, - arrayStride, - attributeFormat, - attributeOffset = 0 -) { +test, +arrayStride, +attributeFormat, +attributeOffset = 0) +{ const vertexBufferLayouts = [ + { + slot: 1, + stepMode: 'vertex', + arrayStride, + attributes: [ { - slot: 1, - stepMode: 'vertex', - arrayStride, - attributes: [ - { - shaderLocation: 2, - format: attributeFormat, - offset: attributeOffset, - }, - ], - }, + shaderLocation: 2, + format: attributeFormat, + offset: attributeOffset + }] + + }, + { + slot: 7, + stepMode: 'instance', + arrayStride, + attributes: [ { - slot: 7, - stepMode: 'instance', - arrayStride, - attributes: [ - { - shaderLocation: 6, - format: attributeFormat, - offset: attributeOffset, - }, - ], - }, - ]; + shaderLocation: 6, + format: attributeFormat, + offset: attributeOffset + }] + + }]; + return makeTestPipeline(test, vertexBufferLayouts); } @@ -131,13 +171,13 @@ function makeTestPipelineWithVertexAndInstanceBuffer( // Default parameters for all kind of draw call, arbitrary non-zero values that is not very large. const kDefaultParameterForDraw = { instanceCount: 100, - firstInstance: 100, + firstInstance: 100 }; // Default parameters for non-indexed draw, arbitrary non-zero values that is not very large. const kDefaultParameterForNonIndexedDraw = { vertexCount: 100, - firstVertex: 100, + firstVertex: 100 }; // Default parameters for indexed draw call and required index buffer, arbitrary non-zero values @@ -147,109 +187,109 @@ const kDefaultParameterForIndexedDraw = { firstIndex: 100, baseVertex: 100, indexFormat: 'uint16', - indexBufferSize: 2 * 200, // exact required bound size for index buffer + indexBufferSize: 2 * 200 // exact required bound size for index buffer }; export const g = makeTestGroup(ValidationTest); -g.test(`unused_buffer_bound`) - .desc( - ` +g.test(`unused_buffer_bound`). +desc( + ` In this test we test that a small buffer bound to unused buffer slot won't cause validation error. - All draw commands, - An unused {index , vertex} buffer with uselessly small range is bound (immediately before draw call) ` - ) - .params(u => - u // - .combine('smallIndexBuffer', [false, true]) - .combine('smallVertexBuffer', [false, true]) - .combine('smallInstanceBuffer', [false, true]) - .beginSubcases() - .combine('drawType', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']) - .unless( - // Always provide index buffer of enough size if it is used by indexed draw - p => - p.smallIndexBuffer && - (p.drawType === 'drawIndexed' || p.drawType === 'drawIndexedIndirect') - ) - .combine('bufferOffset', [0, 4]) - .combine('boundSize', [0, 1]) - ) - .fn(t => { - const { - smallIndexBuffer, - smallVertexBuffer, - smallInstanceBuffer, - drawType, - bufferOffset, - boundSize, - } = t.params; - const renderPipeline = t.createNoOpRenderPipeline(); - const bufferSize = bufferOffset + boundSize; - const smallBuffer = t.createBufferWithState('valid', { - size: bufferSize, - usage: GPUBufferUsage.INDEX | GPUBufferUsage.VERTEX, - }); - - // An index buffer of enough size, used if smallIndexBuffer === false - const { indexFormat, indexBufferSize } = kDefaultParameterForIndexedDraw; - const indexBuffer = t.createBufferWithState('valid', { - size: indexBufferSize, - usage: GPUBufferUsage.INDEX, - }); - - for (const encoderType of ['render bundle', 'render pass']) { - for (const setPipelineBeforeBuffer of [false, true]) { - const commandBufferMaker = t.createEncoder(encoderType); - const renderEncoder = commandBufferMaker.encoder; - - if (setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - - if (drawType === 'drawIndexed' || drawType === 'drawIndexedIndirect') { - // Always use large enough index buffer for indexed draw. Index buffer OOB validation is - // tested in index_buffer_OOB. - renderEncoder.setIndexBuffer(indexBuffer, indexFormat, 0, indexBufferSize); - } else if (smallIndexBuffer) { - renderEncoder.setIndexBuffer(smallBuffer, indexFormat, bufferOffset, boundSize); - } - if (smallVertexBuffer) { - renderEncoder.setVertexBuffer(1, smallBuffer, bufferOffset, boundSize); - } - if (smallInstanceBuffer) { - renderEncoder.setVertexBuffer(7, smallBuffer, bufferOffset, boundSize); - } - - if (!setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - - if (drawType === 'draw' || drawType === 'drawIndirect') { - const drawParam = { - ...kDefaultParameterForDraw, - ...kDefaultParameterForNonIndexedDraw, - }; - callDraw(t, renderEncoder, drawType, drawParam); - } else { - const drawParam = { - ...kDefaultParameterForDraw, - ...kDefaultParameterForIndexedDraw, - }; - callDrawIndexed(t, renderEncoder, drawType, drawParam); - } - - // Binding a unused small index/vertex buffer will never cause validation error. - commandBufferMaker.validateFinishAndSubmit(true, true); - } - } +). +params((u) => +u // +.combine('smallIndexBuffer', [false, true]). +combine('smallVertexBuffer', [false, true]). +combine('smallInstanceBuffer', [false, true]). +beginSubcases(). +combine('drawType', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']). +unless( + // Always provide index buffer of enough size if it is used by indexed draw + (p) => + p.smallIndexBuffer && ( + p.drawType === 'drawIndexed' || p.drawType === 'drawIndexedIndirect') +). +combine('bufferOffset', [0, 4]). +combine('boundSize', [0, 1]) +). +fn((t) => { + const { + smallIndexBuffer, + smallVertexBuffer, + smallInstanceBuffer, + drawType, + bufferOffset, + boundSize + } = t.params; + const renderPipeline = t.createNoOpRenderPipeline(); + const bufferSize = bufferOffset + boundSize; + const smallBuffer = t.createBufferWithState('valid', { + size: bufferSize, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.VERTEX }); -g.test(`index_buffer_OOB`) - .desc( - ` + // An index buffer of enough size, used if smallIndexBuffer === false + const { indexFormat, indexBufferSize } = kDefaultParameterForIndexedDraw; + const indexBuffer = t.createBufferWithState('valid', { + size: indexBufferSize, + usage: GPUBufferUsage.INDEX + }); + + for (const encoderType of ['render bundle', 'render pass']) { + for (const setPipelineBeforeBuffer of [false, true]) { + const commandBufferMaker = t.createEncoder(encoderType); + const renderEncoder = commandBufferMaker.encoder; + + if (setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + + if (drawType === 'drawIndexed' || drawType === 'drawIndexedIndirect') { + // Always use large enough index buffer for indexed draw. Index buffer OOB validation is + // tested in index_buffer_OOB. + renderEncoder.setIndexBuffer(indexBuffer, indexFormat, 0, indexBufferSize); + } else if (smallIndexBuffer) { + renderEncoder.setIndexBuffer(smallBuffer, indexFormat, bufferOffset, boundSize); + } + if (smallVertexBuffer) { + renderEncoder.setVertexBuffer(1, smallBuffer, bufferOffset, boundSize); + } + if (smallInstanceBuffer) { + renderEncoder.setVertexBuffer(7, smallBuffer, bufferOffset, boundSize); + } + + if (!setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + + if (drawType === 'draw' || drawType === 'drawIndirect') { + const drawParam = { + ...kDefaultParameterForDraw, + ...kDefaultParameterForNonIndexedDraw + }; + callDraw(t, renderEncoder, drawType, drawParam); + } else { + const drawParam = { + ...kDefaultParameterForDraw, + ...kDefaultParameterForIndexedDraw + }; + callDrawIndexed(t, renderEncoder, drawType, drawParam); + } + + // Binding a unused small index/vertex buffer will never cause validation error. + commandBufferMaker.validateFinishAndSubmit(true, true); + } + } +}); + +g.test(`index_buffer_OOB`). +desc( + ` In this test we test that index buffer OOB is caught as a validation error in drawIndexed, but not in drawIndexedIndirect as it is GPU-validated. - Issue an indexed draw call, with the following index buffer states, for {all index formats}: @@ -257,70 +297,65 @@ drawIndexedIndirect as it is GPU-validated. - range is too small but GPUBuffer is still large enough - range and GPUBuffer are both too small ` - ) - .params(u => - u - .combine('bufferSizeInElements', [10, 100]) - // Binding size is always no larger than buffer size, make sure that setIndexBuffer succeed - .combine('bindingSizeInElements', [10]) - .combine('drawIndexCount', [10, 11]) - .combine('drawType', ['drawIndexed', 'drawIndexedIndirect']) - .beginSubcases() - .combine('indexFormat', ['uint16', 'uint32']) - ) - .fn(t => { - const { - indexFormat, - bindingSizeInElements, - bufferSizeInElements, - drawIndexCount, - drawType, - } = t.params; +). +params((u) => +u. +combine('bufferSizeInElements', [10, 100]) +// Binding size is always no larger than buffer size, make sure that setIndexBuffer succeed +.combine('bindingSizeInElements', [10]). +combine('drawIndexCount', [10, 11]). +combine('drawType', ['drawIndexed', 'drawIndexedIndirect']). +beginSubcases(). +combine('indexFormat', ['uint16', 'uint32']) +). +fn((t) => { + const { indexFormat, bindingSizeInElements, bufferSizeInElements, drawIndexCount, drawType } = + t.params; - const indexElementSize = indexFormat === 'uint16' ? 2 : 4; - const bindingSize = bindingSizeInElements * indexElementSize; - const bufferSize = bufferSizeInElements * indexElementSize; + const indexElementSize = indexFormat === 'uint16' ? 2 : 4; + const bindingSize = bindingSizeInElements * indexElementSize; + const bufferSize = bufferSizeInElements * indexElementSize; - const desc = { - size: bufferSize, - usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST, - }; - const indexBuffer = t.createBufferWithState('valid', desc); + const desc = { + size: bufferSize, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST + }; + const indexBuffer = t.createBufferWithState('valid', desc); - const drawCallParam = { - indexCount: drawIndexCount, - }; + const drawCallParam = { + indexCount: drawIndexCount + }; - // Encoder finish will succeed if no index buffer access OOB when calling drawIndexed, - // and always succeed when calling drawIndexedIndirect. - const isFinishSuccess = - drawIndexCount <= bindingSizeInElements || drawType === 'drawIndexedIndirect'; + // Encoder finish will succeed if no index buffer access OOB when calling drawIndexed, + // and always succeed when calling drawIndexedIndirect. + const isFinishSuccess = + drawIndexCount <= bindingSizeInElements || drawType === 'drawIndexedIndirect'; - const renderPipeline = t.createNoOpRenderPipeline(); + const renderPipeline = t.createNoOpRenderPipeline(); - for (const encoderType of ['render bundle', 'render pass']) { - for (const setPipelineBeforeBuffer of [false, true]) { - const commandBufferMaker = t.createEncoder(encoderType); - const renderEncoder = commandBufferMaker.encoder; + for (const encoderType of ['render bundle', 'render pass']) { + for (const setPipelineBeforeBuffer of [false, true]) { + const commandBufferMaker = t.createEncoder(encoderType); + const renderEncoder = commandBufferMaker.encoder; - if (setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - renderEncoder.setIndexBuffer(indexBuffer, indexFormat, 0, bindingSize); - if (!setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - - callDrawIndexed(t, renderEncoder, drawType, drawCallParam); - - commandBufferMaker.validateFinishAndSubmit(isFinishSuccess, true); + if (setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + renderEncoder.setIndexBuffer(indexBuffer, indexFormat, 0, bindingSize); + if (!setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); } - } - }); -g.test(`vertex_buffer_OOB`) - .desc( - ` + callDrawIndexed(t, renderEncoder, drawType, drawCallParam); + + commandBufferMaker.validateFinishAndSubmit(isFinishSuccess, true); + } + } +}); + +g.test(`vertex_buffer_OOB`). +desc( + ` In this test we test the vertex buffer OOB validation in draw calls. Specifically, only vertex step mode buffer OOB in draw and instance step mode buffer OOB in draw and drawIndexed are CPU-validated. Other cases are handled by robust access and no validation error occurs. @@ -359,344 +394,361 @@ binding offset and binding size) for all buffers, covering both (bound size == r (bound size == required size - 1), and (bound size == 0), and test that draw and drawIndexed will success/error as expected. Such set of buffer parameters should include cases like weird offset values. ` - ) - .params(u => - u - // type of draw call - .combine('type', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']) - // the state of vertex step mode vertex buffer bound size - .combine('VBSize', ['zero', 'exile', 'enough']) - // the state of instance step mode vertex buffer bound size - .combine('IBSize', ['zero', 'exile', 'enough']) - // should the vertex stride count be zero - .combine('VStride0', [false, true]) - // should the instance stride count be zero - .combine('IStride0', [false, true]) - // the state of array stride - .combine('AStride', ['zero', 'exact', 'oversize']) - // the factor for offset of attributes in vertex layout - .combine('offset', [0, 1, 2, 7]) // the offset of attribute will be factor * MIN(4, sizeof(vertexFormat)) - .beginSubcases() - .combine('setBufferOffset', [0, 200]) // must be a multiple of 4 - .combine('attributeFormat', ['snorm8x2', 'float32', 'float16x4']) - .combine('vertexCount', [0, 1, 10000]) - .combine('firstVertex', [0, 10000]) - .filter(p => p.VStride0 === (p.firstVertex + p.vertexCount === 0)) - .combine('instanceCount', [0, 1, 10000]) - .combine('firstInstance', [0, 10000]) - .filter(p => p.IStride0 === (p.firstInstance + p.instanceCount === 0)) - .unless(p => p.vertexCount === 10000 && p.instanceCount === 10000) - ) - .fn(t => { - const { - type: drawType, - VBSize: boundVertexBufferSizeState, - IBSize: boundInstanceBufferSizeState, - VStride0: zeroVertexStrideCount, - IStride0: zeroInstanceStrideCount, - AStride: arrayStrideState, - offset: attributeOffsetFactor, - setBufferOffset, - attributeFormat, - vertexCount, - instanceCount, - firstVertex, - firstInstance, - } = t.params; +). +params((u) => +u +// type of draw call +.combine('type', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']) +// VBSize: the state of vertex step mode vertex buffer bound size +// IBSize: the state of instance step mode vertex buffer bound size +.combineWithParams([ +{ VBSize: 'exact', IBSize: 'exact' }, +{ VBSize: 'zero', IBSize: 'exact' }, +{ VBSize: 'oneTooSmall', IBSize: 'exact' }, +{ VBSize: 'exact', IBSize: 'zero' }, +{ VBSize: 'exact', IBSize: 'oneTooSmall' }] +) +// the state of array stride +.combine('AStride', ['zero', 'exact', 'oversize']). +beginSubcases() +// should the vertex stride count be zero +.combine('VStride0', [false, true]) +// should the instance stride count be zero +.combine('IStride0', [false, true]) +// the factor for offset of attributes in vertex layout +.combine('offset', [0, 1, 2, 7]) // the offset of attribute will be factor * MIN(4, sizeof(vertexFormat)) +.combine('setBufferOffset', [200]) // must be a multiple of 4 +.combine('attributeFormat', ['snorm8x2', 'float32', 'float16x4']). +expandWithParams((p) => +p.VStride0 ? +[{ firstVertex: 0, vertexCount: 0 }] : +[ +{ firstVertex: 0, vertexCount: 1 }, +{ firstVertex: 0, vertexCount: 10000 }, +{ firstVertex: 10000, vertexCount: 0 }, +{ firstVertex: 10000, vertexCount: 10000 }] - const attributeFormatInfo = kVertexFormatInfo[attributeFormat]; - const formatSize = attributeFormatInfo.bytesPerComponent * attributeFormatInfo.componentCount; - const attributeOffset = attributeOffsetFactor * Math.min(4, formatSize); - const lastStride = attributeOffset + formatSize; - let arrayStride = 0; - if (arrayStrideState !== 'zero') { - arrayStride = lastStride; - if (arrayStrideState === 'oversize') { - // Add an arbitrary number to array stride to make it larger than required by attributes - arrayStride = arrayStride + 20; - } - arrayStride = arrayStride + (-arrayStride & 3); // Make sure arrayStride is a multiple of 4 +). +expandWithParams((p) => +p.IStride0 ? +[{ firstInstance: 0, instanceCount: 0 }] : +[ +{ firstInstance: 0, instanceCount: 1 }, +{ firstInstance: 0, instanceCount: 10000 }, +{ firstInstance: 10000, instanceCount: 0 }, +{ firstInstance: 10000, instanceCount: 10000 }] + +). +unless((p) => p.vertexCount === 10000 && p.instanceCount === 10000) +). +fn((t) => { + const { + type: drawType, + VBSize: boundVertexBufferSizeState, + IBSize: boundInstanceBufferSizeState, + VStride0: zeroVertexStrideCount, + IStride0: zeroInstanceStrideCount, + AStride: arrayStrideState, + offset: attributeOffsetFactor, + setBufferOffset, + attributeFormat, + vertexCount, + instanceCount, + firstVertex, + firstInstance + } = t.params; + + const attributeFormatInfo = kVertexFormatInfo[attributeFormat]; + const formatSize = attributeFormatInfo.byteSize; + const attributeOffset = attributeOffsetFactor * Math.min(4, formatSize); + const lastStride = attributeOffset + formatSize; + let arrayStride = 0; + if (arrayStrideState !== 'zero') { + arrayStride = lastStride; + if (arrayStrideState === 'oversize') { + // Add an arbitrary number to array stride to make it larger than required by attributes + arrayStride = arrayStride + 20; } + arrayStride = arrayStride + (-arrayStride & 3); // Make sure arrayStride is a multiple of 4 + } - const calcSetBufferSize = (boundBufferSizeState, strideCount) => { - let requiredBufferSize; - if (strideCount > 0) { - requiredBufferSize = arrayStride * (strideCount - 1) + lastStride; - } else { - // Spec do not validate bounded buffer size if strideCount == 0. - requiredBufferSize = lastStride; - } - let setBufferSize; - switch (boundBufferSizeState) { - case 'zero': { + const calcSetBufferSize = ( + boundBufferSizeState, + strideCount) => + { + let requiredBufferSize; + if (strideCount > 0) { + requiredBufferSize = arrayStride * (strideCount - 1) + lastStride; + } else { + // Spec do not validate bounded buffer size if strideCount == 0. + requiredBufferSize = lastStride; + } + let setBufferSize; + switch (boundBufferSizeState) { + case 'zero':{ setBufferSize = 0; break; } - case 'exile': { + case 'oneTooSmall':{ setBufferSize = requiredBufferSize - 1; break; } - case 'enough': { + case 'exact':{ setBufferSize = requiredBufferSize; break; } - } - - return setBufferSize; - }; - - const strideCountForVertexBuffer = firstVertex + vertexCount; - const setVertexBufferSize = calcSetBufferSize( - boundVertexBufferSizeState, - strideCountForVertexBuffer - ); - - const vertexBufferSize = setBufferOffset + setVertexBufferSize; - const strideCountForInstanceBuffer = firstInstance + instanceCount; - const setInstanceBufferSize = calcSetBufferSize( - boundInstanceBufferSizeState, - strideCountForInstanceBuffer - ); - - const instanceBufferSize = setBufferOffset + setInstanceBufferSize; - - const vertexBuffer = t.createBufferWithState('valid', { - size: vertexBufferSize, - usage: GPUBufferUsage.VERTEX, - }); - const instanceBuffer = t.createBufferWithState('valid', { - size: instanceBufferSize, - usage: GPUBufferUsage.VERTEX, - }); - - const renderPipeline = makeTestPipelineWithVertexAndInstanceBuffer( - t, - arrayStride, - attributeFormat, - attributeOffset - ); - - for (const encoderType of ['render bundle', 'render pass']) { - for (const setPipelineBeforeBuffer of [false, true]) { - const commandBufferMaker = t.createEncoder(encoderType); - const renderEncoder = commandBufferMaker.encoder; - - if (setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - renderEncoder.setVertexBuffer(1, vertexBuffer, setBufferOffset, setVertexBufferSize); - renderEncoder.setVertexBuffer(7, instanceBuffer, setBufferOffset, setInstanceBufferSize); - if (!setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - - if (drawType === 'draw' || drawType === 'drawIndirect') { - const drawParam = { - vertexCount, - instanceCount, - firstVertex, - firstInstance, - }; - - callDraw(t, renderEncoder, drawType, drawParam); - } else { - const { - indexFormat, - indexCount, - firstIndex, - indexBufferSize, - } = kDefaultParameterForIndexedDraw; - - const desc = { - size: indexBufferSize, - usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST, - }; - const indexBuffer = t.createBufferWithState('valid', desc); - - const drawParam = { - indexCount, - instanceCount, - firstIndex, - baseVertex: firstVertex, - firstInstance, - }; - - renderEncoder.setIndexBuffer(indexBuffer, indexFormat, 0, indexBufferSize); - callDrawIndexed(t, renderEncoder, drawType, drawParam); - } - - const isVertexBufferOOB = - boundVertexBufferSizeState !== 'enough' && - drawType === 'draw' && // drawIndirect, drawIndexed, and drawIndexedIndirect do not validate vertex step mode buffer - !zeroVertexStrideCount; // vertex step mode buffer never OOB if stride count = 0 - const isInstanceBufferOOB = - boundInstanceBufferSizeState !== 'enough' && - (drawType === 'draw' || drawType === 'drawIndexed') && // drawIndirect and drawIndexedIndirect do not validate instance step mode buffer - !zeroInstanceStrideCount; // vertex step mode buffer never OOB if stride count = 0 - const isFinishSuccess = !isVertexBufferOOB && !isInstanceBufferOOB; - - commandBufferMaker.validateFinishAndSubmit(isFinishSuccess, true); - } } + return setBufferSize; + }; + + const strideCountForVertexBuffer = firstVertex + vertexCount; + const setVertexBufferSize = calcSetBufferSize( + boundVertexBufferSizeState, + strideCountForVertexBuffer + ); + const vertexBufferSize = setBufferOffset + setVertexBufferSize; + const strideCountForInstanceBuffer = firstInstance + instanceCount; + const setInstanceBufferSize = calcSetBufferSize( + boundInstanceBufferSizeState, + strideCountForInstanceBuffer + ); + const instanceBufferSize = setBufferOffset + setInstanceBufferSize; + + const vertexBuffer = t.createBufferWithState('valid', { + size: vertexBufferSize, + usage: GPUBufferUsage.VERTEX + }); + const instanceBuffer = t.createBufferWithState('valid', { + size: instanceBufferSize, + usage: GPUBufferUsage.VERTEX }); -g.test(`buffer_binding_overlap`) - .desc( - ` + const renderPipeline = makeTestPipelineWithVertexAndInstanceBuffer( + t, + arrayStride, + attributeFormat, + attributeOffset + ); + + for (const encoderType of ['render bundle', 'render pass']) { + for (const setPipelineBeforeBuffer of [false, true]) { + const commandBufferMaker = t.createEncoder(encoderType); + const renderEncoder = commandBufferMaker.encoder; + + if (setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + renderEncoder.setVertexBuffer(1, vertexBuffer, setBufferOffset, setVertexBufferSize); + renderEncoder.setVertexBuffer(7, instanceBuffer, setBufferOffset, setInstanceBufferSize); + if (!setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + + if (drawType === 'draw' || drawType === 'drawIndirect') { + const drawParam = { + vertexCount, + instanceCount, + firstVertex, + firstInstance + }; + + callDraw(t, renderEncoder, drawType, drawParam); + } else { + const { indexFormat, indexCount, firstIndex, indexBufferSize } = + kDefaultParameterForIndexedDraw; + + const desc = { + size: indexBufferSize, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST + }; + const indexBuffer = t.createBufferWithState('valid', desc); + + const drawParam = { + indexCount, + instanceCount, + firstIndex, + baseVertex: firstVertex, + firstInstance + }; + + renderEncoder.setIndexBuffer(indexBuffer, indexFormat, 0, indexBufferSize); + callDrawIndexed(t, renderEncoder, drawType, drawParam); + } + + const isVertexBufferOOB = + boundVertexBufferSizeState !== 'exact' && + drawType === 'draw' && // drawIndirect, drawIndexed, and drawIndexedIndirect do not validate vertex step mode buffer + !zeroVertexStrideCount; // vertex step mode buffer never OOB if stride count = 0 + const isInstanceBufferOOB = + boundInstanceBufferSizeState !== 'exact' && ( + drawType === 'draw' || drawType === 'drawIndexed') && // drawIndirect and drawIndexedIndirect do not validate instance step mode buffer + !zeroInstanceStrideCount; // vertex step mode buffer never OOB if stride count = 0 + const isFinishSuccess = !isVertexBufferOOB && !isInstanceBufferOOB; + + commandBufferMaker.validateFinishAndSubmit(isFinishSuccess, true); + } + } +}); + +g.test(`buffer_binding_overlap`). +desc( + ` In this test we test that binding one GPU buffer to multiple vertex buffer slot or both vertex buffer slot and index buffer will cause no validation error, with completely/partial overlap. - x= all draw types + + TODO: The "Factor" parameters don't necessarily guarantee that we test all configurations + of buffers overlapping or not. This test should be refactored to test specific overlap cases, + and have fewer total parameterizations. + See https://github.com/gpuweb/cts/pull/3122#discussion_r1378623214 ` - ) - .params(u => - u // - .combine('drawType', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']) - .beginSubcases() - .combine('vertexBoundOffestFactor', [0, 0.5, 1, 1.5, 2]) - .combine('instanceBoundOffestFactor', [0, 0.5, 1, 1.5, 2]) - .combine('indexBoundOffestFactor', [0, 0.5, 1, 1.5, 2]) - .combine('arrayStrideState', ['zero', 'exact', 'oversize']) - ) - .fn(t => { - const { - drawType, - vertexBoundOffestFactor, - instanceBoundOffestFactor, - indexBoundOffestFactor, - arrayStrideState, - } = t.params; +). +params((u) => +u // +.combine('drawType', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']). +beginSubcases(). +combine('vertexBoundOffestFactor', [0, 0.5, 1, 1.5, 2]). +combine('instanceBoundOffestFactor', [0, 0.5, 1, 1.5, 2]). +combine('indexBoundOffestFactor', [0, 0.5, 1, 1.5, 2]). +combine('arrayStrideState', ['zero', 'exact', 'oversize']) +). +fn((t) => { + const { + drawType, + vertexBoundOffestFactor, + instanceBoundOffestFactor, + indexBoundOffestFactor, + arrayStrideState + } = t.params; - // Compute the array stride for vertex step mode and instance step mode attribute - const attributeFormat = 'float32x4'; - const attributeFormatInfo = kVertexFormatInfo[attributeFormat]; - const formatSize = attributeFormatInfo.bytesPerComponent * attributeFormatInfo.componentCount; - const attributeOffset = 0; - const lastStride = attributeOffset + formatSize; - let arrayStride = 0; - if (arrayStrideState !== 'zero') { - arrayStride = lastStride; - if (arrayStrideState === 'oversize') { - // Add an arbitrary number to array stride - arrayStride = arrayStride + 20; - } - arrayStride = arrayStride + (-arrayStride & 3); // Make sure arrayStride is a multiple of 4 + // Compute the array stride for vertex step mode and instance step mode attribute + const attributeFormat = 'float32x4'; + const attributeFormatInfo = kVertexFormatInfo[attributeFormat]; + const formatSize = attributeFormatInfo.byteSize; + const attributeOffset = 0; + const lastStride = attributeOffset + formatSize; + let arrayStride = 0; + if (arrayStrideState !== 'zero') { + arrayStride = lastStride; + if (arrayStrideState === 'oversize') { + // Add an arbitrary number to array stride + arrayStride = arrayStride + 20; } + arrayStride = arrayStride + (-arrayStride & 3); // Make sure arrayStride is a multiple of 4 + } - const calcAttributeBufferSize = strideCount => { - let requiredBufferSize; - if (strideCount > 0) { - requiredBufferSize = arrayStride * (strideCount - 1) + lastStride; - } else { - // Spec do not validate bounded buffer size if strideCount == 0. - requiredBufferSize = lastStride; - } - return requiredBufferSize; - }; - - const calcSetBufferOffset = (requiredSetBufferSize, offsetFactor) => { - const offset = Math.ceil(requiredSetBufferSize * offsetFactor); - const alignedOffset = offset + (-offset & 3); // Make sure offset is a multiple of 4 - return alignedOffset; - }; - - // Compute required bound range for all vertex and index buffer to ensure the shared GPU buffer - // has enough size. - const { vertexCount, firstVertex } = kDefaultParameterForNonIndexedDraw; - const strideCountForVertexBuffer = firstVertex + vertexCount; - const setVertexBufferSize = calcAttributeBufferSize(strideCountForVertexBuffer); - const setVertexBufferOffset = calcSetBufferOffset(setVertexBufferSize, vertexBoundOffestFactor); - let requiredBufferSize = setVertexBufferOffset + setVertexBufferSize; - - const { instanceCount, firstInstance } = kDefaultParameterForDraw; - const strideCountForInstanceBuffer = firstInstance + instanceCount; - const setInstanceBufferSize = calcAttributeBufferSize(strideCountForInstanceBuffer); - const setInstanceBufferOffset = calcSetBufferOffset( - setInstanceBufferSize, - instanceBoundOffestFactor - ); - - requiredBufferSize = Math.max( - requiredBufferSize, - setInstanceBufferOffset + setInstanceBufferSize - ); - - const { indexBufferSize: setIndexBufferSize, indexFormat } = kDefaultParameterForIndexedDraw; - const setIndexBufferOffset = calcSetBufferOffset(setIndexBufferSize, indexBoundOffestFactor); - requiredBufferSize = Math.max(requiredBufferSize, setIndexBufferOffset + setIndexBufferSize); - - // Create the shared GPU buffer with both vertetx and index usage - const sharedBuffer = t.createBufferWithState('valid', { - size: requiredBufferSize, - usage: GPUBufferUsage.VERTEX | GPUBufferUsage.INDEX, - }); - - const renderPipeline = makeTestPipelineWithVertexAndInstanceBuffer( - t, - arrayStride, - attributeFormat - ); - - for (const encoderType of ['render bundle', 'render pass']) { - for (const setPipelineBeforeBuffer of [false, true]) { - const commandBufferMaker = t.createEncoder(encoderType); - const renderEncoder = commandBufferMaker.encoder; - - if (setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - renderEncoder.setVertexBuffer(1, sharedBuffer, setVertexBufferOffset, setVertexBufferSize); - renderEncoder.setVertexBuffer( - 7, - sharedBuffer, - setInstanceBufferOffset, - setInstanceBufferSize - ); - - renderEncoder.setIndexBuffer( - sharedBuffer, - indexFormat, - setIndexBufferOffset, - setIndexBufferSize - ); - - if (!setPipelineBeforeBuffer) { - renderEncoder.setPipeline(renderPipeline); - } - - if (drawType === 'draw' || drawType === 'drawIndirect') { - const drawParam = { - ...kDefaultParameterForDraw, - ...kDefaultParameterForNonIndexedDraw, - }; - callDraw(t, renderEncoder, drawType, drawParam); - } else { - const drawParam = { - ...kDefaultParameterForDraw, - ...kDefaultParameterForIndexedDraw, - }; - callDrawIndexed(t, renderEncoder, drawType, drawParam); - } - - // Since all bound buffer are of enough size, draw call should always succeed. - commandBufferMaker.validateFinishAndSubmit(true, true); - } + const calcAttributeBufferSize = (strideCount) => { + let requiredBufferSize; + if (strideCount > 0) { + requiredBufferSize = arrayStride * (strideCount - 1) + lastStride; + } else { + // Spec do not validate bounded buffer size if strideCount == 0. + requiredBufferSize = lastStride; } + return requiredBufferSize; + }; + + const calcSetBufferOffset = (requiredSetBufferSize, offsetFactor) => { + const offset = Math.ceil(requiredSetBufferSize * offsetFactor); + const alignedOffset = offset + (-offset & 3); // Make sure offset is a multiple of 4 + return alignedOffset; + }; + + // Compute required bound range for all vertex and index buffer to ensure the shared GPU buffer + // has enough size. + const { vertexCount, firstVertex } = kDefaultParameterForNonIndexedDraw; + const strideCountForVertexBuffer = firstVertex + vertexCount; + const setVertexBufferSize = calcAttributeBufferSize(strideCountForVertexBuffer); + const setVertexBufferOffset = calcSetBufferOffset(setVertexBufferSize, vertexBoundOffestFactor); + let requiredBufferSize = setVertexBufferOffset + setVertexBufferSize; + + const { instanceCount, firstInstance } = kDefaultParameterForDraw; + const strideCountForInstanceBuffer = firstInstance + instanceCount; + const setInstanceBufferSize = calcAttributeBufferSize(strideCountForInstanceBuffer); + const setInstanceBufferOffset = calcSetBufferOffset( + setInstanceBufferSize, + instanceBoundOffestFactor + ); + requiredBufferSize = Math.max( + requiredBufferSize, + setInstanceBufferOffset + setInstanceBufferSize + ); + + const { indexBufferSize: setIndexBufferSize, indexFormat } = kDefaultParameterForIndexedDraw; + const setIndexBufferOffset = calcSetBufferOffset(setIndexBufferSize, indexBoundOffestFactor); + requiredBufferSize = Math.max(requiredBufferSize, setIndexBufferOffset + setIndexBufferSize); + + // Create the shared GPU buffer with both vertetx and index usage + const sharedBuffer = t.createBufferWithState('valid', { + size: requiredBufferSize, + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.INDEX }); -g.test(`last_buffer_setting_take_account`) - .desc( - ` + const renderPipeline = makeTestPipelineWithVertexAndInstanceBuffer( + t, + arrayStride, + attributeFormat + ); + + for (const encoderType of ['render bundle', 'render pass']) { + for (const setPipelineBeforeBuffer of [false, true]) { + const commandBufferMaker = t.createEncoder(encoderType); + const renderEncoder = commandBufferMaker.encoder; + + if (setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + renderEncoder.setVertexBuffer(1, sharedBuffer, setVertexBufferOffset, setVertexBufferSize); + renderEncoder.setVertexBuffer( + 7, + sharedBuffer, + setInstanceBufferOffset, + setInstanceBufferSize + ); + renderEncoder.setIndexBuffer( + sharedBuffer, + indexFormat, + setIndexBufferOffset, + setIndexBufferSize + ); + if (!setPipelineBeforeBuffer) { + renderEncoder.setPipeline(renderPipeline); + } + + if (drawType === 'draw' || drawType === 'drawIndirect') { + const drawParam = { + ...kDefaultParameterForDraw, + ...kDefaultParameterForNonIndexedDraw + }; + callDraw(t, renderEncoder, drawType, drawParam); + } else { + const drawParam = { + ...kDefaultParameterForDraw, + ...kDefaultParameterForIndexedDraw + }; + callDrawIndexed(t, renderEncoder, drawType, drawParam); + } + + // Since all bound buffer are of enough size, draw call should always succeed. + commandBufferMaker.validateFinishAndSubmit(true, true); + } + } +}); + +g.test(`last_buffer_setting_take_account`). +desc( + ` In this test we test that only the last setting for a buffer slot take account. - All (non/indexed, in/direct) draw commands - setPl, setVB, setIB, draw, {setPl,setVB,setIB,nothing (control)}, then a larger draw that wouldn't have been valid before that ` - ) - .unimplemented(); +). +unimplemented(); -g.test(`max_draw_count`) - .desc( - ` +g.test(`max_draw_count`). +desc( + ` In this test we test that draw count which exceeds GPURenderPassDescriptor.maxDrawCount causes validation error on GPUCommandEncoder.finish(). The test sets specified maxDrawCount, @@ -707,121 +759,119 @@ and checks whether GPUCommandEncoder.finish() causes a validation error. - x= several different draw counts - x= several different maxDrawCounts ` - ) - .params(u => - u - .combine('bundleFirstHalf', [false, true]) - .combine('bundleSecondHalf', [false, true]) - .combine('maxDrawCount', [0, 1, 4, 16]) - .beginSubcases() - .expand('drawCount', p => new Set([0, p.maxDrawCount, p.maxDrawCount + 1])) - ) - .fn(t => { - const { bundleFirstHalf, bundleSecondHalf, maxDrawCount, drawCount } = t.params; +). +params((u) => +u. +combine('bundleFirstHalf', [false, true]). +combine('bundleSecondHalf', [false, true]). +combine('maxDrawCount', [0, 1, 4, 16]). +beginSubcases(). +expand('drawCount', (p) => new Set([0, p.maxDrawCount, p.maxDrawCount + 1])) +). +fn((t) => { + const { bundleFirstHalf, bundleSecondHalf, maxDrawCount, drawCount } = t.params; - const colorFormat = 'rgba8unorm'; - const colorTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: colorFormat, - mipLevelCount: 1, - sampleCount: 1, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }); + const colorFormat = 'rgba8unorm'; + const colorTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: colorFormat, + mipLevelCount: 1, + sampleCount: 1, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(); } - `, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() {}`, - }), - entryPoint: 'main', - targets: [{ format: colorFormat, writeMask: 0 }], - }, - }); - - const indexBuffer = t.makeBufferWithContents(new Uint16Array([0, 0, 0]), GPUBufferUsage.INDEX); - const indirectBuffer = t.makeBufferWithContents( - new Uint32Array([3, 1, 0, 0]), - GPUBufferUsage.INDIRECT - ); - - const indexedIndirectBuffer = t.makeBufferWithContents( - new Uint32Array([3, 1, 0, 0, 0]), - GPUBufferUsage.INDIRECT - ); - - const commandEncoder = t.device.createCommandEncoder(); - const renderPassEncoder = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: colorTexture.createView(), - loadOp: 'clear', - storeOp: 'store', - }, - ], - - maxDrawCount, - }); - - const firstHalfEncoder = bundleFirstHalf - ? t.device.createRenderBundleEncoder({ - colorFormats: [colorFormat], - }) - : renderPassEncoder; - - const secondHalfEncoder = bundleSecondHalf - ? t.device.createRenderBundleEncoder({ - colorFormats: [colorFormat], - }) - : renderPassEncoder; - - firstHalfEncoder.setPipeline(pipeline); - firstHalfEncoder.setIndexBuffer(indexBuffer, 'uint16'); - secondHalfEncoder.setPipeline(pipeline); - secondHalfEncoder.setIndexBuffer(indexBuffer, 'uint16'); - - const halfDrawCount = Math.floor(drawCount / 2); - for (let i = 0; i < drawCount; i++) { - const encoder = i < halfDrawCount ? firstHalfEncoder : secondHalfEncoder; - if (i % 4 === 0) { - encoder.draw(3); - } - if (i % 4 === 1) { - encoder.drawIndexed(3); - } - if (i % 4 === 2) { - encoder.drawIndirect(indirectBuffer, 0); - } - if (i % 4 === 3) { - encoder.drawIndexedIndirect(indexedIndirectBuffer, 0); - } + ` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() {}` + }), + entryPoint: 'main', + targets: [{ format: colorFormat, writeMask: 0 }] } - - const bundles = []; - if (bundleFirstHalf) { - bundles.push(firstHalfEncoder.finish()); - } - if (bundleSecondHalf) { - bundles.push(secondHalfEncoder.finish()); - } - - if (bundles.length > 0) { - renderPassEncoder.executeBundles(bundles); - } - - renderPassEncoder.end(); - - t.expectValidationError(() => { - commandEncoder.finish(); - }, drawCount > maxDrawCount); }); + + const indexBuffer = t.makeBufferWithContents(new Uint16Array([0, 0, 0]), GPUBufferUsage.INDEX); + const indirectBuffer = t.makeBufferWithContents( + new Uint32Array([3, 1, 0, 0]), + GPUBufferUsage.INDIRECT + ); + const indexedIndirectBuffer = t.makeBufferWithContents( + new Uint32Array([3, 1, 0, 0, 0]), + GPUBufferUsage.INDIRECT + ); + + const commandEncoder = t.device.createCommandEncoder(); + const renderPassEncoder = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: colorTexture.createView(), + loadOp: 'clear', + storeOp: 'store' + }], + + maxDrawCount + }); + + const firstHalfEncoder = bundleFirstHalf ? + t.device.createRenderBundleEncoder({ + colorFormats: [colorFormat] + }) : + renderPassEncoder; + + const secondHalfEncoder = bundleSecondHalf ? + t.device.createRenderBundleEncoder({ + colorFormats: [colorFormat] + }) : + renderPassEncoder; + + firstHalfEncoder.setPipeline(pipeline); + firstHalfEncoder.setIndexBuffer(indexBuffer, 'uint16'); + secondHalfEncoder.setPipeline(pipeline); + secondHalfEncoder.setIndexBuffer(indexBuffer, 'uint16'); + + const halfDrawCount = Math.floor(drawCount / 2); + for (let i = 0; i < drawCount; i++) { + const encoder = i < halfDrawCount ? firstHalfEncoder : secondHalfEncoder; + if (i % 4 === 0) { + encoder.draw(3); + } + if (i % 4 === 1) { + encoder.drawIndexed(3); + } + if (i % 4 === 2) { + encoder.drawIndirect(indirectBuffer, 0); + } + if (i % 4 === 3) { + encoder.drawIndexedIndirect(indexedIndirectBuffer, 0); + } + } + + const bundles = []; + if (bundleFirstHalf) { + bundles.push(firstHalfEncoder.finish()); + } + if (bundleSecondHalf) { + bundles.push(secondHalfEncoder.finish()); + } + + if (bundles.length > 0) { + renderPassEncoder.executeBundles(bundles); + } + + renderPassEncoder.end(); + + t.expectValidationError(() => { + commandEncoder.finish(); + }, drawCount > maxDrawCount); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/dynamic_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/dynamic_state.spec.js index 690c3313a3e..048f33029aa 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/dynamic_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/dynamic_state.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` API validation tests for dynamic state commands (setViewport/ScissorRect/BlendColor...). TODO: ensure existing tests cover these notes. Note many of these may be operation tests instead. @@ -22,27 +22,46 @@ TODO: ensure existing tests cover these notes. Note many of these may be operati > - setStencilReference > - {0, max} > - used with a simple pipeline that {does, doesn't} use it -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../../validation_test.js'; + + + + + + + + + + + + + + + + class F extends ValidationTest { - testViewportCall(success, v, attachmentSize = { width: 1, height: 1, depthOrArrayLayers: 1 }) { + testViewportCall( + success, + v, + attachmentSize = { width: 1, height: 1, depthOrArrayLayers: 1 }) + { const attachment = this.device.createTexture({ format: 'rgba8unorm', size: attachmentSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: attachment.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: attachment.createView(), + loadOp: 'load', + storeOp: 'store' + }] + }); pass.setViewport(v.x, v.y, v.w, v.h, v.minDepth, v.maxDepth); pass.end(); @@ -52,22 +71,26 @@ class F extends ValidationTest { }, !success); } - testScissorCall(success, s, attachmentSize = { width: 1, height: 1, depthOrArrayLayers: 1 }) { + testScissorCall( + success, + s, + attachmentSize = { width: 1, height: 1, depthOrArrayLayers: 1 }) + { const attachment = this.device.createTexture({ format: 'rgba8unorm', size: attachmentSize, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: attachment.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: attachment.createView(), + loadOp: 'load', + storeOp: 'store' + }] + }); if (success === 'type-error') { this.shouldThrow('TypeError', () => { @@ -87,18 +110,18 @@ class F extends ValidationTest { const attachment = this.device.createTexture({ format: 'rgba8unorm', size: [1, 1, 1], - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: attachment.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: attachment.createView(), + loadOp: 'load', + storeOp: 'store' + }] + }); return { encoder, pass }; @@ -107,190 +130,190 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('setViewport,x_y_width_height_nonnegative') - .desc( - `Test that the parameters of setViewport to define the box must be non-negative. +g.test('setViewport,x_y_width_height_nonnegative'). +desc( + `Test that the parameters of setViewport to define the box must be non-negative. TODO Test -0 (it should be valid) but can't be tested because the harness complains about duplicate parameters. TODO Test the first value smaller than -0` - ) - .paramsSubcasesOnly([ - // Control case: everything to 0 is ok, covers the empty viewport case. - { x: 0, y: 0, w: 0, h: 0 }, +). +paramsSubcasesOnly([ +// Control case: everything to 0 is ok, covers the empty viewport case. +{ x: 0, y: 0, w: 0, h: 0 }, - // Test -1 - { x: -1, y: 0, w: 0, h: 0 }, - { x: 0, y: -1, w: 0, h: 0 }, - { x: 0, y: 0, w: -1, h: 0 }, - { x: 0, y: 0, w: 0, h: -1 }, - ]) - .fn(t => { - const { x, y, w, h } = t.params; - const success = x >= 0 && y >= 0 && w >= 0 && h >= 0; - t.testViewportCall(success, { x, y, w, h, minDepth: 0, maxDepth: 1 }); - }); +// Test -1 +{ x: -1, y: 0, w: 0, h: 0 }, +{ x: 0, y: -1, w: 0, h: 0 }, +{ x: 0, y: 0, w: -1, h: 0 }, +{ x: 0, y: 0, w: 0, h: -1 }] +). +fn((t) => { + const { x, y, w, h } = t.params; + const success = x >= 0 && y >= 0 && w >= 0 && h >= 0; + t.testViewportCall(success, { x, y, w, h, minDepth: 0, maxDepth: 1 }); +}); -g.test('setViewport,xy_rect_contained_in_attachment') - .desc( - 'Test that the rectangle defined by x, y, width, height must be contained in the attachments' - ) - .paramsSubcasesOnly(u => - u - .combineWithParams([ - { attachmentWidth: 3, attachmentHeight: 5 }, - { attachmentWidth: 5, attachmentHeight: 3 }, - { attachmentWidth: 1024, attachmentHeight: 1 }, - { attachmentWidth: 1, attachmentHeight: 1024 }, - ]) - .combineWithParams([ - // Control case: a full viewport is valid. - { dx: 0, dy: 0, dw: 0, dh: 0 }, +g.test('setViewport,xy_rect_contained_in_attachment'). +desc( + 'Test that the rectangle defined by x, y, width, height must be contained in the attachments' +). +paramsSubcasesOnly((u) => +u. +combineWithParams([ +{ attachmentWidth: 3, attachmentHeight: 5 }, +{ attachmentWidth: 5, attachmentHeight: 3 }, +{ attachmentWidth: 1024, attachmentHeight: 1 }, +{ attachmentWidth: 1, attachmentHeight: 1024 }] +). +combineWithParams([ +// Control case: a full viewport is valid. +{ dx: 0, dy: 0, dw: 0, dh: 0 }, - // Other valid cases with a partial viewport. - { dx: 1, dy: 0, dw: -1, dh: 0 }, - { dx: 0, dy: 1, dw: 0, dh: -1 }, - { dx: 0, dy: 0, dw: -1, dh: 0 }, - { dx: 0, dy: 0, dw: 0, dh: -1 }, +// Other valid cases with a partial viewport. +{ dx: 1, dy: 0, dw: -1, dh: 0 }, +{ dx: 0, dy: 1, dw: 0, dh: -1 }, +{ dx: 0, dy: 0, dw: -1, dh: 0 }, +{ dx: 0, dy: 0, dw: 0, dh: -1 }, - // Test with a small value that causes the viewport to go outside the attachment. - { dx: 1, dy: 0, dw: 0, dh: 0 }, - { dx: 0, dy: 1, dw: 0, dh: 0 }, - { dx: 0, dy: 0, dw: 1, dh: 0 }, - { dx: 0, dy: 0, dw: 0, dh: 1 }, - ]) - ) - .fn(t => { - const { attachmentWidth, attachmentHeight, dx, dy, dw, dh } = t.params; - const x = dx; - const y = dy; - const w = attachmentWidth + dw; - const h = attachmentWidth + dh; +// Test with a small value that causes the viewport to go outside the attachment. +{ dx: 1, dy: 0, dw: 0, dh: 0 }, +{ dx: 0, dy: 1, dw: 0, dh: 0 }, +{ dx: 0, dy: 0, dw: 1, dh: 0 }, +{ dx: 0, dy: 0, dw: 0, dh: 1 }] +) +). +fn((t) => { + const { attachmentWidth, attachmentHeight, dx, dy, dw, dh } = t.params; + const x = dx; + const y = dy; + const w = attachmentWidth + dw; + const h = attachmentWidth + dh; - const success = x + w <= attachmentWidth && y + h <= attachmentHeight; - t.testViewportCall( - success, - { x, y, w, h, minDepth: 0, maxDepth: 1 }, - { width: attachmentWidth, height: attachmentHeight, depthOrArrayLayers: 1 } - ); - }); + const success = x + w <= attachmentWidth && y + h <= attachmentHeight; + t.testViewportCall( + success, + { x, y, w, h, minDepth: 0, maxDepth: 1 }, + { width: attachmentWidth, height: attachmentHeight, depthOrArrayLayers: 1 } + ); +}); -g.test('setViewport,depth_rangeAndOrder') - .desc('Test that 0 <= minDepth <= maxDepth <= 1') - .paramsSubcasesOnly([ - // Success cases - { minDepth: 0, maxDepth: 1 }, - { minDepth: -0, maxDepth: -0 }, - { minDepth: 1, maxDepth: 1 }, - { minDepth: 0.3, maxDepth: 0.7 }, - { minDepth: 0.7, maxDepth: 0.7 }, - { minDepth: 0.3, maxDepth: 0.3 }, +g.test('setViewport,depth_rangeAndOrder'). +desc('Test that 0 <= minDepth <= maxDepth <= 1'). +paramsSubcasesOnly([ +// Success cases +{ minDepth: 0, maxDepth: 1 }, +{ minDepth: -0, maxDepth: -0 }, +{ minDepth: 1, maxDepth: 1 }, +{ minDepth: 0.3, maxDepth: 0.7 }, +{ minDepth: 0.7, maxDepth: 0.7 }, +{ minDepth: 0.3, maxDepth: 0.3 }, - // Invalid cases - { minDepth: -0.1, maxDepth: 1 }, - { minDepth: 0, maxDepth: 1.1 }, - { minDepth: 0.5, maxDepth: 0.49999 }, - ]) - .fn(t => { - const { minDepth, maxDepth } = t.params; - const success = - 0 <= minDepth && minDepth <= 1 && 0 <= maxDepth && maxDepth <= 1 && minDepth <= maxDepth; - t.testViewportCall(success, { x: 0, y: 0, w: 1, h: 1, minDepth, maxDepth }); - }); +// Invalid cases +{ minDepth: -0.1, maxDepth: 1 }, +{ minDepth: 0, maxDepth: 1.1 }, +{ minDepth: 0.5, maxDepth: 0.49999 }] +). +fn((t) => { + const { minDepth, maxDepth } = t.params; + const success = + 0 <= minDepth && minDepth <= 1 && 0 <= maxDepth && maxDepth <= 1 && minDepth <= maxDepth; + t.testViewportCall(success, { x: 0, y: 0, w: 1, h: 1, minDepth, maxDepth }); +}); -g.test('setScissorRect,x_y_width_height_nonnegative') - .desc( - `Test that the parameters of setScissorRect to define the box must be non-negative or a TypeError is thrown. +g.test('setScissorRect,x_y_width_height_nonnegative'). +desc( + `Test that the parameters of setScissorRect to define the box must be non-negative or a TypeError is thrown. TODO Test -0 (it should be valid) but can't be tested because the harness complains about duplicate parameters. TODO Test the first value smaller than -0` - ) - .paramsSubcasesOnly([ - // Control case: everything to 0 is ok, covers the empty scissor case. - { x: 0, y: 0, w: 0, h: 0 }, +). +paramsSubcasesOnly([ +// Control case: everything to 0 is ok, covers the empty scissor case. +{ x: 0, y: 0, w: 0, h: 0 }, - // Test -1 - { x: -1, y: 0, w: 0, h: 0 }, - { x: 0, y: -1, w: 0, h: 0 }, - { x: 0, y: 0, w: -1, h: 0 }, - { x: 0, y: 0, w: 0, h: -1 }, - ]) - .fn(t => { - const { x, y, w, h } = t.params; - const success = x >= 0 && y >= 0 && w >= 0 && h >= 0; - t.testScissorCall(success ? true : 'type-error', { x, y, w, h }); - }); +// Test -1 +{ x: -1, y: 0, w: 0, h: 0 }, +{ x: 0, y: -1, w: 0, h: 0 }, +{ x: 0, y: 0, w: -1, h: 0 }, +{ x: 0, y: 0, w: 0, h: -1 }] +). +fn((t) => { + const { x, y, w, h } = t.params; + const success = x >= 0 && y >= 0 && w >= 0 && h >= 0; + t.testScissorCall(success ? true : 'type-error', { x, y, w, h }); +}); -g.test('setScissorRect,xy_rect_contained_in_attachment') - .desc( - 'Test that the rectangle defined by x, y, width, height must be contained in the attachments' - ) - .paramsSubcasesOnly(u => - u - .combineWithParams([ - { attachmentWidth: 3, attachmentHeight: 5 }, - { attachmentWidth: 5, attachmentHeight: 3 }, - { attachmentWidth: 1024, attachmentHeight: 1 }, - { attachmentWidth: 1, attachmentHeight: 1024 }, - ]) - .combineWithParams([ - // Control case: a full scissor is valid. - { dx: 0, dy: 0, dw: 0, dh: 0 }, +g.test('setScissorRect,xy_rect_contained_in_attachment'). +desc( + 'Test that the rectangle defined by x, y, width, height must be contained in the attachments' +). +paramsSubcasesOnly((u) => +u. +combineWithParams([ +{ attachmentWidth: 3, attachmentHeight: 5 }, +{ attachmentWidth: 5, attachmentHeight: 3 }, +{ attachmentWidth: 1024, attachmentHeight: 1 }, +{ attachmentWidth: 1, attachmentHeight: 1024 }] +). +combineWithParams([ +// Control case: a full scissor is valid. +{ dx: 0, dy: 0, dw: 0, dh: 0 }, - // Other valid cases with a partial scissor. - { dx: 1, dy: 0, dw: -1, dh: 0 }, - { dx: 0, dy: 1, dw: 0, dh: -1 }, - { dx: 0, dy: 0, dw: -1, dh: 0 }, - { dx: 0, dy: 0, dw: 0, dh: -1 }, +// Other valid cases with a partial scissor. +{ dx: 1, dy: 0, dw: -1, dh: 0 }, +{ dx: 0, dy: 1, dw: 0, dh: -1 }, +{ dx: 0, dy: 0, dw: -1, dh: 0 }, +{ dx: 0, dy: 0, dw: 0, dh: -1 }, - // Test with a small value that causes the scissor to go outside the attachment. - { dx: 1, dy: 0, dw: 0, dh: 0 }, - { dx: 0, dy: 1, dw: 0, dh: 0 }, - { dx: 0, dy: 0, dw: 1, dh: 0 }, - { dx: 0, dy: 0, dw: 0, dh: 1 }, - ]) - ) - .fn(t => { - const { attachmentWidth, attachmentHeight, dx, dy, dw, dh } = t.params; - const x = dx; - const y = dy; - const w = attachmentWidth + dw; - const h = attachmentWidth + dh; +// Test with a small value that causes the scissor to go outside the attachment. +{ dx: 1, dy: 0, dw: 0, dh: 0 }, +{ dx: 0, dy: 1, dw: 0, dh: 0 }, +{ dx: 0, dy: 0, dw: 1, dh: 0 }, +{ dx: 0, dy: 0, dw: 0, dh: 1 }] +) +). +fn((t) => { + const { attachmentWidth, attachmentHeight, dx, dy, dw, dh } = t.params; + const x = dx; + const y = dy; + const w = attachmentWidth + dw; + const h = attachmentWidth + dh; - const success = x + w <= attachmentWidth && y + h <= attachmentHeight; - t.testScissorCall( - success, - { x, y, w, h }, - { width: attachmentWidth, height: attachmentHeight, depthOrArrayLayers: 1 } - ); - }); + const success = x + w <= attachmentWidth && y + h <= attachmentHeight; + t.testScissorCall( + success, + { x, y, w, h }, + { width: attachmentWidth, height: attachmentHeight, depthOrArrayLayers: 1 } + ); +}); -g.test('setBlendConstant') - .desc('Test that almost any color value is valid for setBlendConstant') - .paramsSubcasesOnly([ - { r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, - { r: -1.0, g: -1.0, b: -1.0, a: -1.0 }, - { r: Number.MAX_SAFE_INTEGER, g: Number.MIN_SAFE_INTEGER, b: -0, a: 100000 }, - ]) - .fn(t => { - const { r, g, b, a } = t.params; - const encoders = t.createDummyRenderPassEncoder(); - encoders.pass.setBlendConstant({ r, g, b, a }); - encoders.pass.end(); - encoders.encoder.finish(); - }); +g.test('setBlendConstant'). +desc('Test that almost any color value is valid for setBlendConstant'). +paramsSubcasesOnly([ +{ r: 1.0, g: 1.0, b: 1.0, a: 1.0 }, +{ r: -1.0, g: -1.0, b: -1.0, a: -1.0 }, +{ r: Number.MAX_SAFE_INTEGER, g: Number.MIN_SAFE_INTEGER, b: -0, a: 100000 }] +). +fn((t) => { + const { r, g, b, a } = t.params; + const encoders = t.createDummyRenderPassEncoder(); + encoders.pass.setBlendConstant({ r, g, b, a }); + encoders.pass.end(); + encoders.encoder.finish(); +}); -g.test('setStencilReference') - .desc('Test that almost any stencil reference value is valid for setStencilReference') - .paramsSubcasesOnly([ - { value: 1 }, // - { value: 0 }, - { value: 1000 }, - { value: 0xffffffff }, - ]) - .fn(t => { - const { value } = t.params; - const encoders = t.createDummyRenderPassEncoder(); - encoders.pass.setStencilReference(value); - encoders.pass.end(); - encoders.encoder.finish(); - }); +g.test('setStencilReference'). +desc('Test that almost any stencil reference value is valid for setStencilReference'). +paramsSubcasesOnly([ +{ value: 1 }, // +{ value: 0 }, +{ value: 1000 }, +{ value: 0xffffffff }] +). +fn((t) => { + const { value } = t.params; + const encoders = t.createDummyRenderPassEncoder(); + encoders.pass.setStencilReference(value); + encoders.pass.end(); + encoders.encoder.finish(); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/indirect_draw.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/indirect_draw.spec.js index 2e65bb9555f..476f2ba73ac 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/indirect_draw.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/indirect_draw.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for drawIndirect/drawIndexedIndirect on render pass and render bundle. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUConst } from '../../../../../constants.js'; import { kResourceStates } from '../../../../../gpu_test.js'; import { ValidationTest } from '../../../validation_test.js'; @@ -16,135 +15,135 @@ class F extends ValidationTest { makeIndexBuffer() { return this.device.createBuffer({ size: 16, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX }); } } export const g = makeTestGroup(F); -g.test('indirect_buffer_state') - .desc( - ` +g.test('indirect_buffer_state'). +desc( + ` Tests indirect buffer must be valid. ` - ) - .paramsSubcasesOnly(kIndirectDrawTestParams.combine('state', kResourceStates)) - .fn(t => { - const { encoderType, indexed, state } = t.params; - const pipeline = t.createNoOpRenderPipeline(); - const indirectBuffer = t.createBufferWithState(state, { - size: 256, - usage: GPUBufferUsage.INDIRECT, - }); - - const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - if (indexed) { - const indexBuffer = t.makeIndexBuffer(); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - encoder.drawIndexedIndirect(indirectBuffer, 0); - } else { - encoder.drawIndirect(indirectBuffer, 0); - } - - validateFinishAndSubmitGivenState(state); +). +paramsSubcasesOnly(kIndirectDrawTestParams.combine('state', kResourceStates)). +fn((t) => { + const { encoderType, indexed, state } = t.params; + const pipeline = t.createNoOpRenderPipeline(); + const indirectBuffer = t.createBufferWithState(state, { + size: 256, + usage: GPUBufferUsage.INDIRECT }); -g.test('indirect_buffer,device_mismatch') - .desc( - 'Tests draw(Indexed)Indirect cannot be called with an indirect buffer created from another device' - ) - .paramsSubcasesOnly(kIndirectDrawTestParams.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { encoderType, indexed, mismatched } = t.params; + const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + if (indexed) { + const indexBuffer = t.makeIndexBuffer(); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + encoder.drawIndexedIndirect(indirectBuffer, 0); + } else { + encoder.drawIndirect(indirectBuffer, 0); + } - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + validateFinishAndSubmitGivenState(state); +}); - const indirectBuffer = sourceDevice.createBuffer({ - size: 256, - usage: GPUBufferUsage.INDIRECT, - }); - t.trackForCleanup(indirectBuffer); +g.test('indirect_buffer,device_mismatch'). +desc( + 'Tests draw(Indexed)Indirect cannot be called with an indirect buffer created from another device' +). +paramsSubcasesOnly(kIndirectDrawTestParams.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { encoderType, indexed, mismatched } = t.params; - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(t.createNoOpRenderPipeline()); + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - if (indexed) { - encoder.setIndexBuffer(t.makeIndexBuffer(), 'uint32'); - encoder.drawIndexedIndirect(indirectBuffer, 0); - } else { - encoder.drawIndirect(indirectBuffer, 0); - } - validateFinish(!mismatched); + const indirectBuffer = sourceDevice.createBuffer({ + size: 256, + usage: GPUBufferUsage.INDIRECT }); + t.trackForCleanup(indirectBuffer); -g.test('indirect_buffer_usage') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(t.createNoOpRenderPipeline()); + + if (indexed) { + encoder.setIndexBuffer(t.makeIndexBuffer(), 'uint32'); + encoder.drawIndexedIndirect(indirectBuffer, 0); + } else { + encoder.drawIndirect(indirectBuffer, 0); + } + validateFinish(!mismatched); +}); + +g.test('indirect_buffer_usage'). +desc( + ` Tests indirect buffer must have 'Indirect' usage. ` +). +paramsSubcasesOnly( + kIndirectDrawTestParams.combine('usage', [ + GPUConst.BufferUsage.INDIRECT, // control case + GPUConst.BufferUsage.COPY_DST, + GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.INDIRECT] ) - .paramsSubcasesOnly( - kIndirectDrawTestParams.combine('usage', [ - GPUConst.BufferUsage.INDIRECT, // control case - GPUConst.BufferUsage.COPY_DST, - GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.INDIRECT, - ]) - ) - .fn(t => { - const { encoderType, indexed, usage } = t.params; - const indirectBuffer = t.device.createBuffer({ - size: 256, - usage, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(t.createNoOpRenderPipeline()); - if (indexed) { - const indexBuffer = t.makeIndexBuffer(); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - encoder.drawIndexedIndirect(indirectBuffer, 0); - } else { - encoder.drawIndirect(indirectBuffer, 0); - } - validateFinish((usage & GPUBufferUsage.INDIRECT) !== 0); +). +fn((t) => { + const { encoderType, indexed, usage } = t.params; + const indirectBuffer = t.device.createBuffer({ + size: 256, + usage }); -g.test('indirect_offset_alignment') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(t.createNoOpRenderPipeline()); + if (indexed) { + const indexBuffer = t.makeIndexBuffer(); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + encoder.drawIndexedIndirect(indirectBuffer, 0); + } else { + encoder.drawIndirect(indirectBuffer, 0); + } + validateFinish((usage & GPUBufferUsage.INDIRECT) !== 0); +}); + +g.test('indirect_offset_alignment'). +desc( + ` Tests indirect offset must be a multiple of 4. ` - ) - .paramsSubcasesOnly(kIndirectDrawTestParams.combine('indirectOffset', [0, 2, 4])) - .fn(t => { - const { encoderType, indexed, indirectOffset } = t.params; - const pipeline = t.createNoOpRenderPipeline(); - const indirectBuffer = t.device.createBuffer({ - size: 256, - usage: GPUBufferUsage.INDIRECT, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - if (indexed) { - const indexBuffer = t.makeIndexBuffer(); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - encoder.drawIndexedIndirect(indirectBuffer, indirectOffset); - } else { - encoder.drawIndirect(indirectBuffer, indirectOffset); - } - - validateFinish(indirectOffset % 4 === 0); +). +paramsSubcasesOnly(kIndirectDrawTestParams.combine('indirectOffset', [0, 2, 4])). +fn((t) => { + const { encoderType, indexed, indirectOffset } = t.params; + const pipeline = t.createNoOpRenderPipeline(); + const indirectBuffer = t.device.createBuffer({ + size: 256, + usage: GPUBufferUsage.INDIRECT }); -g.test('indirect_offset_oob') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + if (indexed) { + const indexBuffer = t.makeIndexBuffer(); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + encoder.drawIndexedIndirect(indirectBuffer, indirectOffset); + } else { + encoder.drawIndirect(indirectBuffer, indirectOffset); + } + + validateFinish(indirectOffset % 4 === 0); +}); + +g.test('indirect_offset_oob'). +desc( + ` Tests indirect draw calls with various indirect offsets and buffer sizes. - (offset, b.size) is - (0, 0) @@ -161,43 +160,43 @@ Tests indirect draw calls with various indirect offsets and buffer sizes. - min size = indirect draw parameters size - x =(drawIndirect, drawIndexedIndirect) ` - ) - .paramsSubcasesOnly( - kIndirectDrawTestParams.expandWithParams(p => { - const indirectParamsSize = p.indexed ? 20 : 16; - return [ - { indirectOffset: 0, bufferSize: 0, _valid: false }, - { indirectOffset: 0, bufferSize: indirectParamsSize, _valid: true }, - { indirectOffset: 0, bufferSize: indirectParamsSize + 1, _valid: true }, - { indirectOffset: 0, bufferSize: indirectParamsSize - 1, _valid: false }, - { indirectOffset: 0, bufferSize: indirectParamsSize - 4, _valid: false }, - { indirectOffset: 4, bufferSize: indirectParamsSize + 4, _valid: true }, - { indirectOffset: 4, bufferSize: indirectParamsSize + 3, _valid: false }, - { indirectOffset: 2, bufferSize: indirectParamsSize + 4, _valid: false }, - { indirectOffset: 3, bufferSize: indirectParamsSize + 4, _valid: false }, - { indirectOffset: 5, bufferSize: indirectParamsSize + 4, _valid: false }, - { indirectOffset: indirectParamsSize, bufferSize: indirectParamsSize, _valid: false }, - { indirectOffset: indirectParamsSize + 4, bufferSize: indirectParamsSize, _valid: false }, - ]; - }) - ) - .fn(t => { - const { encoderType, indexed, indirectOffset, bufferSize, _valid } = t.params; - const pipeline = t.createNoOpRenderPipeline(); - const indirectBuffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.INDIRECT, - }); +). +paramsSubcasesOnly( + kIndirectDrawTestParams.expandWithParams((p) => { + const indirectParamsSize = p.indexed ? 20 : 16; + return [ + { indirectOffset: 0, bufferSize: 0, _valid: false }, + { indirectOffset: 0, bufferSize: indirectParamsSize, _valid: true }, + { indirectOffset: 0, bufferSize: indirectParamsSize + 1, _valid: true }, + { indirectOffset: 0, bufferSize: indirectParamsSize - 1, _valid: false }, + { indirectOffset: 0, bufferSize: indirectParamsSize - 4, _valid: false }, + { indirectOffset: 4, bufferSize: indirectParamsSize + 4, _valid: true }, + { indirectOffset: 4, bufferSize: indirectParamsSize + 3, _valid: false }, + { indirectOffset: 2, bufferSize: indirectParamsSize + 4, _valid: false }, + { indirectOffset: 3, bufferSize: indirectParamsSize + 4, _valid: false }, + { indirectOffset: 5, bufferSize: indirectParamsSize + 4, _valid: false }, + { indirectOffset: indirectParamsSize, bufferSize: indirectParamsSize, _valid: false }, + { indirectOffset: indirectParamsSize + 4, bufferSize: indirectParamsSize, _valid: false }]; - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - if (indexed) { - const indexBuffer = t.makeIndexBuffer(); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - encoder.drawIndexedIndirect(indirectBuffer, indirectOffset); - } else { - encoder.drawIndirect(indirectBuffer, indirectOffset); - } - - validateFinish(_valid); + }) +). +fn((t) => { + const { encoderType, indexed, indirectOffset, bufferSize, _valid } = t.params; + const pipeline = t.createNoOpRenderPipeline(); + const indirectBuffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.INDIRECT }); + + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + if (indexed) { + const indexBuffer = t.makeIndexBuffer(); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + encoder.drawIndexedIndirect(indirectBuffer, indirectOffset); + } else { + encoder.drawIndirect(indirectBuffer, indirectOffset); + } + + validateFinish(_valid); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/render.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/render.js index ce8cae256e8..bec9355dda8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/render.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/render.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kUnitCaseParamsBuilder } from '../../../../../../common/framework/params_builder.js'; -import { kRenderEncodeTypes } from '../../../../../util/command_buffer_maker.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kUnitCaseParamsBuilder } from '../../../../../../common/framework/params_builder.js';import { kRenderEncodeTypes } from '../../../../../util/command_buffer_maker.js'; export const kRenderEncodeTypeParams = kUnitCaseParamsBuilder.combine( 'encoderType', kRenderEncodeTypes @@ -9,22 +8,22 @@ export const kRenderEncodeTypeParams = kUnitCaseParamsBuilder.combine( export function buildBufferOffsetAndSizeOOBTestParams(minAlignment, bufferSize) { return kRenderEncodeTypeParams.combineWithParams([ - // Explicit size - { offset: 0, size: 0, _valid: true }, - { offset: 0, size: 1, _valid: true }, - { offset: 0, size: 4, _valid: true }, - { offset: 0, size: 5, _valid: true }, - { offset: 0, size: bufferSize, _valid: true }, - { offset: 0, size: bufferSize + 4, _valid: false }, - { offset: minAlignment, size: bufferSize, _valid: false }, - { offset: minAlignment, size: bufferSize - minAlignment, _valid: true }, - { offset: bufferSize - minAlignment, size: minAlignment, _valid: true }, - { offset: bufferSize, size: 1, _valid: false }, - // Implicit size: buffer.size - offset - { offset: 0, size: undefined, _valid: true }, - { offset: minAlignment, size: undefined, _valid: true }, - { offset: bufferSize - minAlignment, size: undefined, _valid: true }, - { offset: bufferSize, size: undefined, _valid: true }, - { offset: bufferSize + minAlignment, size: undefined, _valid: false }, - ]); -} + // Explicit size + { offset: 0, size: 0, _valid: true }, + { offset: 0, size: 1, _valid: true }, + { offset: 0, size: 4, _valid: true }, + { offset: 0, size: 5, _valid: true }, + { offset: 0, size: bufferSize, _valid: true }, + { offset: 0, size: bufferSize + 4, _valid: false }, + { offset: minAlignment, size: bufferSize, _valid: false }, + { offset: minAlignment, size: bufferSize - minAlignment, _valid: true }, + { offset: bufferSize - minAlignment, size: minAlignment, _valid: true }, + { offset: bufferSize, size: 1, _valid: false }, + // Implicit size: buffer.size - offset + { offset: 0, size: undefined, _valid: true }, + { offset: minAlignment, size: undefined, _valid: true }, + { offset: bufferSize - minAlignment, size: undefined, _valid: true }, + { offset: bufferSize, size: undefined, _valid: true }, + { offset: bufferSize + minAlignment, size: undefined, _valid: false }] + ); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setIndexBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setIndexBuffer.spec.js index 4bcef962416..03eea8fce80 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setIndexBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setIndexBuffer.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for setIndexBuffer on render pass and render bundle. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUConst } from '../../../../../constants.js'; import { kResourceStates } from '../../../../../gpu_test.js'; import { ValidationTest } from '../../../validation_test.js'; @@ -12,112 +11,114 @@ import { kRenderEncodeTypeParams, buildBufferOffsetAndSizeOOBTestParams } from ' export const g = makeTestGroup(ValidationTest); -g.test('index_buffer_state') - .desc( - ` +g.test('index_buffer_state'). +desc( + ` Tests index buffer must be valid. ` - ) - .paramsSubcasesOnly(kRenderEncodeTypeParams.combine('state', kResourceStates)) - .fn(t => { - const { encoderType, state } = t.params; - const indexBuffer = t.createBufferWithState(state, { - size: 16, - usage: GPUBufferUsage.INDEX, - }); - - const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder(encoderType); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - validateFinishAndSubmitGivenState(state); +). +paramsSubcasesOnly(kRenderEncodeTypeParams.combine('state', kResourceStates)). +fn((t) => { + const { encoderType, state } = t.params; + const indexBuffer = t.createBufferWithState(state, { + size: 16, + usage: GPUBufferUsage.INDEX }); -g.test('index_buffer,device_mismatch') - .desc('Tests setIndexBuffer cannot be called with an index buffer created from another device') - .paramsSubcasesOnly(kRenderEncodeTypeParams.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { encoderType, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder(encoderType); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + validateFinishAndSubmitGivenState(state); +}); - const indexBuffer = sourceDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.INDEX, - }); - t.trackForCleanup(indexBuffer); +g.test('index_buffer,device_mismatch'). +desc('Tests setIndexBuffer cannot be called with an index buffer created from another device'). +paramsSubcasesOnly(kRenderEncodeTypeParams.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { encoderType, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - validateFinish(!mismatched); + const indexBuffer = sourceDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.INDEX }); + t.trackForCleanup(indexBuffer); -g.test('index_buffer_usage') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + validateFinish(!mismatched); +}); + +g.test('index_buffer_usage'). +desc( + ` Tests index buffer must have 'Index' usage. ` +). +paramsSubcasesOnly( + kRenderEncodeTypeParams.combine('usage', [ + GPUConst.BufferUsage.INDEX, // control case + GPUConst.BufferUsage.COPY_DST, + GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.INDEX] ) - .paramsSubcasesOnly( - kRenderEncodeTypeParams.combine('usage', [ - GPUConst.BufferUsage.INDEX, // control case - GPUConst.BufferUsage.COPY_DST, - GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.INDEX, - ]) - ) - .fn(t => { - const { encoderType, usage } = t.params; - const indexBuffer = t.device.createBuffer({ - size: 16, - usage, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setIndexBuffer(indexBuffer, 'uint32'); - validateFinish((usage & GPUBufferUsage.INDEX) !== 0); +). +fn((t) => { + const { encoderType, usage } = t.params; + const indexBuffer = t.device.createBuffer({ + size: 16, + usage }); -g.test('offset_alignment') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setIndexBuffer(indexBuffer, 'uint32'); + validateFinish((usage & GPUBufferUsage.INDEX) !== 0); +}); + +g.test('offset_alignment'). +desc( + ` Tests offset must be a multiple of index format’s byte size. ` - ) - .paramsSubcasesOnly( - kRenderEncodeTypeParams.combine('indexFormat', ['uint16', 'uint32']).expand('offset', p => { - return p.indexFormat === 'uint16' ? [0, 1, 2] : [0, 2, 4]; - }) - ) - .fn(t => { - const { encoderType, indexFormat, offset } = t.params; - const indexBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.INDEX, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setIndexBuffer(indexBuffer, indexFormat, offset); - - const alignment = - indexFormat === 'uint16' ? Uint16Array.BYTES_PER_ELEMENT : Uint32Array.BYTES_PER_ELEMENT; - validateFinish(offset % alignment === 0); +). +paramsSubcasesOnly( + kRenderEncodeTypeParams. + combine('indexFormat', ['uint16', 'uint32']). + expand('offset', (p) => { + return p.indexFormat === 'uint16' ? [0, 1, 2] : [0, 2, 4]; + }) +). +fn((t) => { + const { encoderType, indexFormat, offset } = t.params; + const indexBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.INDEX }); -g.test('offset_and_size_oob') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setIndexBuffer(indexBuffer, indexFormat, offset); + + const alignment = + indexFormat === 'uint16' ? Uint16Array.BYTES_PER_ELEMENT : Uint32Array.BYTES_PER_ELEMENT; + validateFinish(offset % alignment === 0); +}); + +g.test('offset_and_size_oob'). +desc( + ` Tests offset and size cannot be larger than index buffer size. ` - ) - .paramsSubcasesOnly(buildBufferOffsetAndSizeOOBTestParams(4, 256)) - .fn(t => { - const { encoderType, offset, size, _valid } = t.params; - const indexBuffer = t.device.createBuffer({ - size: 256, - usage: GPUBufferUsage.INDEX, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setIndexBuffer(indexBuffer, 'uint32', offset, size); - validateFinish(_valid); +). +paramsSubcasesOnly(buildBufferOffsetAndSizeOOBTestParams(4, 256)). +fn((t) => { + const { encoderType, offset, size, _valid } = t.params; + const indexBuffer = t.device.createBuffer({ + size: 256, + usage: GPUBufferUsage.INDEX }); + + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setIndexBuffer(indexBuffer, 'uint32', offset, size); + validateFinish(_valid); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setPipeline.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setPipeline.spec.js index 1604195b14f..9f1efd9734c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setPipeline.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setPipeline.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for setPipeline on render pass and render bundle. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { kRenderEncodeTypes } from '../../../../../util/command_buffer_maker.js'; import { ValidationTest } from '../../../validation_test.js'; @@ -11,53 +10,53 @@ import { kRenderEncodeTypeParams } from './render.js'; export const g = makeTestGroup(ValidationTest); -g.test('invalid_pipeline') - .desc( - ` +g.test('invalid_pipeline'). +desc( + ` Tests setPipeline should generate an error iff using an 'invalid' pipeline. ` - ) - .paramsSubcasesOnly(u => - u.combine('encoderType', kRenderEncodeTypes).combine('state', ['valid', 'invalid']) - ) - .fn(t => { - const { encoderType, state } = t.params; - const pipeline = t.createRenderPipelineWithState(state); +). +paramsSubcasesOnly((u) => +u.combine('encoderType', kRenderEncodeTypes).combine('state', ['valid', 'invalid']) +). +fn((t) => { + const { encoderType, state } = t.params; + const pipeline = t.createRenderPipelineWithState(state); - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - validateFinish(state !== 'invalid'); + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + validateFinish(state !== 'invalid'); +}); + +g.test('pipeline,device_mismatch'). +desc('Tests setPipeline cannot be called with a render pipeline created from another device'). +paramsSubcasesOnly(kRenderEncodeTypeParams.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { encoderType, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const pipeline = sourceDevice.createRenderPipeline({ + layout: 'auto', + vertex: { + module: sourceDevice.createShaderModule({ + code: `@vertex fn main() -> @builtin(position) vec4 { return vec4(); }` + }), + entryPoint: 'main' + }, + fragment: { + module: sourceDevice.createShaderModule({ + code: '@fragment fn main() {}' + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm', writeMask: 0 }] + }, + primitive: { topology: 'triangle-list' } }); -g.test('pipeline,device_mismatch') - .desc('Tests setPipeline cannot be called with a render pipeline created from another device') - .paramsSubcasesOnly(kRenderEncodeTypeParams.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { encoderType, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - - const pipeline = sourceDevice.createRenderPipeline({ - layout: 'auto', - vertex: { - module: sourceDevice.createShaderModule({ - code: `@vertex fn main() -> @builtin(position) vec4 { return vec4(); }`, - }), - entryPoint: 'main', - }, - fragment: { - module: sourceDevice.createShaderModule({ - code: '@fragment fn main() {}', - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, - primitive: { topology: 'triangle-list' }, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - validateFinish(!mismatched); - }); + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + validateFinish(!mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setVertexBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setVertexBuffer.spec.js index 7d4151e956a..b5cc30706b7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setVertexBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/setVertexBuffer.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for setVertexBuffer on render pass and render bundle. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { makeValueTestVariant } from '../../../../../../common/util/util.js'; import { GPUConst } from '../../../../../constants.js'; import { kResourceStates } from '../../../../../gpu_test.js'; @@ -13,133 +12,133 @@ import { kRenderEncodeTypeParams, buildBufferOffsetAndSizeOOBTestParams } from ' export const g = makeTestGroup(ValidationTest); -g.test('slot') - .desc( - ` +g.test('slot'). +desc( + ` Tests slot must be less than the maxVertexBuffers in device limits. ` +). +paramsSubcasesOnly( + kRenderEncodeTypeParams.combine('slotVariant', [ + { mult: 0, add: 0 }, + { mult: 1, add: -1 }, + { mult: 1, add: 0 }] ) - .paramsSubcasesOnly( - kRenderEncodeTypeParams.combine('slotVariant', [ - { mult: 0, add: 0 }, - { mult: 1, add: -1 }, - { mult: 1, add: 0 }, - ]) - ) - .fn(t => { - const { encoderType, slotVariant } = t.params; - const maxVertexBuffers = t.device.limits.maxVertexBuffers; - const slot = makeValueTestVariant(maxVertexBuffers, slotVariant); +). +fn((t) => { + const { encoderType, slotVariant } = t.params; + const maxVertexBuffers = t.device.limits.maxVertexBuffers; + const slot = makeValueTestVariant(maxVertexBuffers, slotVariant); - const vertexBuffer = t.createBufferWithState('valid', { - size: 16, - usage: GPUBufferUsage.VERTEX, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setVertexBuffer(slot, vertexBuffer); - validateFinish(slot < maxVertexBuffers); + const vertexBuffer = t.createBufferWithState('valid', { + size: 16, + usage: GPUBufferUsage.VERTEX }); -g.test('vertex_buffer_state') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setVertexBuffer(slot, vertexBuffer); + validateFinish(slot < maxVertexBuffers); +}); + +g.test('vertex_buffer_state'). +desc( + ` Tests vertex buffer must be valid. ` - ) - .paramsSubcasesOnly(kRenderEncodeTypeParams.combine('state', kResourceStates)) - .fn(t => { - const { encoderType, state } = t.params; - const vertexBuffer = t.createBufferWithState(state, { - size: 16, - usage: GPUBufferUsage.VERTEX, - }); - - const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder(encoderType); - encoder.setVertexBuffer(0, vertexBuffer); - validateFinishAndSubmitGivenState(state); +). +paramsSubcasesOnly(kRenderEncodeTypeParams.combine('state', kResourceStates)). +fn((t) => { + const { encoderType, state } = t.params; + const vertexBuffer = t.createBufferWithState(state, { + size: 16, + usage: GPUBufferUsage.VERTEX }); -g.test('vertex_buffer,device_mismatch') - .desc('Tests setVertexBuffer cannot be called with a vertex buffer created from another device') - .paramsSubcasesOnly(kRenderEncodeTypeParams.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { encoderType, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const { encoder, validateFinishAndSubmitGivenState } = t.createEncoder(encoderType); + encoder.setVertexBuffer(0, vertexBuffer); + validateFinishAndSubmitGivenState(state); +}); - const vertexBuffer = sourceDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.VERTEX, - }); - t.trackForCleanup(vertexBuffer); +g.test('vertex_buffer,device_mismatch'). +desc('Tests setVertexBuffer cannot be called with a vertex buffer created from another device'). +paramsSubcasesOnly(kRenderEncodeTypeParams.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { encoderType, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setVertexBuffer(0, vertexBuffer); - validateFinish(!mismatched); + const vertexBuffer = sourceDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.VERTEX }); + t.trackForCleanup(vertexBuffer); -g.test('vertex_buffer_usage') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setVertexBuffer(0, vertexBuffer); + validateFinish(!mismatched); +}); + +g.test('vertex_buffer_usage'). +desc( + ` Tests vertex buffer must have 'Vertex' usage. ` +). +paramsSubcasesOnly( + kRenderEncodeTypeParams.combine('usage', [ + GPUConst.BufferUsage.VERTEX, // control case + GPUConst.BufferUsage.COPY_DST, + GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.VERTEX] ) - .paramsSubcasesOnly( - kRenderEncodeTypeParams.combine('usage', [ - GPUConst.BufferUsage.VERTEX, // control case - GPUConst.BufferUsage.COPY_DST, - GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.VERTEX, - ]) - ) - .fn(t => { - const { encoderType, usage } = t.params; - const vertexBuffer = t.device.createBuffer({ - size: 16, - usage, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setVertexBuffer(0, vertexBuffer); - validateFinish((usage & GPUBufferUsage.VERTEX) !== 0); +). +fn((t) => { + const { encoderType, usage } = t.params; + const vertexBuffer = t.device.createBuffer({ + size: 16, + usage }); -g.test('offset_alignment') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setVertexBuffer(0, vertexBuffer); + validateFinish((usage & GPUBufferUsage.VERTEX) !== 0); +}); + +g.test('offset_alignment'). +desc( + ` Tests offset must be a multiple of 4. ` - ) - .paramsSubcasesOnly(kRenderEncodeTypeParams.combine('offset', [0, 2, 4])) - .fn(t => { - const { encoderType, offset } = t.params; - const vertexBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.VERTEX, - }); - - const { encoder, validateFinish: finish } = t.createEncoder(encoderType); - encoder.setVertexBuffer(0, vertexBuffer, offset); - finish(offset % 4 === 0); +). +paramsSubcasesOnly(kRenderEncodeTypeParams.combine('offset', [0, 2, 4])). +fn((t) => { + const { encoderType, offset } = t.params; + const vertexBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.VERTEX }); -g.test('offset_and_size_oob') - .desc( - ` + const { encoder, validateFinish: finish } = t.createEncoder(encoderType); + encoder.setVertexBuffer(0, vertexBuffer, offset); + finish(offset % 4 === 0); +}); + +g.test('offset_and_size_oob'). +desc( + ` Tests offset and size cannot be larger than vertex buffer size. ` - ) - .paramsSubcasesOnly(buildBufferOffsetAndSizeOOBTestParams(4, 256)) - .fn(t => { - const { encoderType, offset, size, _valid } = t.params; - const vertexBuffer = t.device.createBuffer({ - size: 256, - usage: GPUBufferUsage.VERTEX, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setVertexBuffer(0, vertexBuffer, offset, size); - validateFinish(_valid); +). +paramsSubcasesOnly(buildBufferOffsetAndSizeOOBTestParams(4, 256)). +fn((t) => { + const { encoderType, offset, size, _valid } = t.params; + const vertexBuffer = t.device.createBuffer({ + size: 256, + usage: GPUBufferUsage.VERTEX }); + + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setVertexBuffer(0, vertexBuffer, offset, size); + validateFinish(_valid); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/state_tracking.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/state_tracking.spec.js index f560a5693f1..8d1e0184e7b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/state_tracking.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render/state_tracking.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for setVertexBuffer/setIndexBuffer state (not validation). See also operation tests. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { range } from '../../../../../../common/util/util.js'; import { ValidationTest } from '../../../validation_test.js'; @@ -11,7 +10,7 @@ class F extends ValidationTest { getVertexBuffer() { return this.device.createBuffer({ size: 256, - usage: GPUBufferUsage.VERTEX, + usage: GPUBufferUsage.VERTEX }); } @@ -22,36 +21,36 @@ class F extends ValidationTest { module: this.device.createShaderModule({ code: ` struct Inputs { - ${range(bufferCount, i => `\n@location(${i}) a_position${i} : vec3,`).join('')} + ${range(bufferCount, (i) => `\n@location(${i}) a_position${i} : vec3,`).join('')} }; @vertex fn main(input : Inputs ) -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', buffers: [ - { - arrayStride: 3 * 4, - attributes: range(bufferCount, i => ({ - format: 'float32x3', - offset: 0, - shaderLocation: i, - })), - }, - ], + { + arrayStride: 3 * 4, + attributes: range(bufferCount, (i) => ({ + format: 'float32x3', + offset: 0, + shaderLocation: i + })) + }] + }, fragment: { module: this.device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); } @@ -59,46 +58,46 @@ class F extends ValidationTest { const attachmentTexture = this.device.createTexture({ format: 'rgba8unorm', size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); return commandEncoder.beginRenderPass({ colorAttachments: [ - { - view: attachmentTexture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: attachmentTexture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); } } export const g = makeTestGroup(F); -g.test(`all_needed_vertex_buffer_should_be_bound`) - .desc( - ` +g.test(`all_needed_vertex_buffer_should_be_bound`). +desc( + ` In this test we test that any missing vertex buffer for a used slot will cause validation errors when drawing. - All (non/indexed, in/direct) draw commands - A needed vertex buffer is not bound - Was bound in another render pass but not the current one ` - ) - .unimplemented(); +). +unimplemented(); -g.test(`all_needed_index_buffer_should_be_bound`) - .desc( - ` +g.test(`all_needed_index_buffer_should_be_bound`). +desc( + ` In this test we test that missing index buffer for a used slot will cause validation errors when drawing. - All indexed in/direct draw commands - No index buffer is bound ` - ) - .unimplemented(); +). +unimplemented(); -g.test('vertex_buffers_inherit_from_previous_pipeline').fn(t => { +g.test('vertex_buffers_inherit_from_previous_pipeline').fn((t) => { const pipeline1 = t.createRenderPipeline(1); const pipeline2 = t.createRenderPipeline(2); @@ -133,7 +132,7 @@ g.test('vertex_buffers_inherit_from_previous_pipeline').fn(t => { } }); -g.test('vertex_buffers_do_not_inherit_between_render_passes').fn(t => { +g.test('vertex_buffers_do_not_inherit_between_render_passes').fn((t) => { const pipeline1 = t.createRenderPipeline(1); const pipeline2 = t.createRenderPipeline(2); @@ -182,4 +181,4 @@ g.test('vertex_buffers_do_not_inherit_between_render_passes').fn(t => { commandEncoder.finish(); }); } -}); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render_pass.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render_pass.spec.js index 52e2a755141..5374001bfb1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render_pass.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/render_pass.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for render pass encoding. Does **not** test usage scopes (resource_usages/), GPUProgrammablePassEncoder (programmable_pass), dynamic state (dynamic_render_state.spec.ts), or GPURenderEncoderBase (render.spec.ts). @@ -8,8 +8,7 @@ dynamic state (dynamic_render_state.spec.ts), or GPURenderEncoderBase (render.sp TODO: - executeBundles: - with {zero, one, multiple} bundles where {zero, one} of them are invalid objects -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../validation_test.js'; -export const g = makeTestGroup(ValidationTest); +export const g = makeTestGroup(ValidationTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/setBindGroup.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/setBindGroup.spec.js index a9bd6fa2e8a..bbf30240d12 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/setBindGroup.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/cmds/setBindGroup.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` setBindGroup validation tests. TODO: merge these notes and implement. @@ -10,15 +10,17 @@ TODO: merge these notes and implement. > - x= {compute pass, render pass} > - {null, compatible, incompatible} current pipeline (should have no effect without draw/dispatch) > - setBindGroup in different orders (e.g. 0,1,2 vs 2,0,1) -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { makeValueTestVariant, range, unreachable } from '../../../../../common/util/util.js'; import { kBufferBindingTypes, - kMinDynamicBufferOffsetAlignment, -} from '../../../../capability_info.js'; + kMinDynamicBufferOffsetAlignment } from +'../../../../capability_info.js'; import { kResourceStates } from '../../../../gpu_test.js'; -import { kProgrammableEncoderTypes } from '../../../../util/command_buffer_maker.js'; +import { + kProgrammableEncoderTypes } from + +'../../../../util/command_buffer_maker.js'; import { ValidationTest } from '../../validation_test.js'; class F extends ValidationTest { @@ -34,22 +36,25 @@ class F extends ValidationTest { } } - createBindingResourceWithState(resourceType, state) { + createBindingResourceWithState( + resourceType, + state) + { switch (resourceType) { - case 'texture': { - const texture = this.createTextureWithState('valid'); - const view = texture.createView(); - if (state === 'destroyed') { - texture.destroy(); + case 'texture':{ + const texture = this.createTextureWithState('valid'); + const view = texture.createView(); + if (state === 'destroyed') { + texture.destroy(); + } + return view; } - return view; - } case 'buffer': return { buffer: this.createBufferWithState(state, { size: 4, - usage: GPUBufferUsage.STORAGE, - }), + usage: GPUBufferUsage.STORAGE + }) }; default: unreachable('unknown resource type'); @@ -60,28 +65,33 @@ class F extends ValidationTest { * If state is 'invalid', creates an invalid bind group with valid resources. * If state is 'destroyed', creates a valid bind group with destroyed resources. */ - createBindGroup(state, resourceType, encoderType, indices) { + createBindGroup( + state, + resourceType, + encoderType, + indices) + { if (state === 'invalid') { this.device.pushErrorScope('validation'); indices = new Array(indices.length + 1).fill(0); } const layout = this.device.createBindGroupLayout({ - entries: indices.map(binding => ({ + entries: indices.map((binding) => ({ binding, visibility: this.encoderTypeToStageFlag(encoderType), - ...(resourceType === 'buffer' ? { buffer: { type: 'storage' } } : { texture: {} }), - })), + ...(resourceType === 'buffer' ? { buffer: { type: 'storage' } } : { texture: {} }) + })) }); const bindGroup = this.device.createBindGroup({ layout, - entries: indices.map(binding => ({ + entries: indices.map((binding) => ({ binding, resource: this.createBindingResourceWithState( resourceType, state === 'destroyed' ? state : 'valid' - ), - })), + ) + })) }); if (state === 'invalid') { @@ -93,334 +103,333 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('state_and_binding_index') - .desc('Tests that setBindGroup correctly handles {valid, invalid, destroyed} bindGroups.') - .params(u => - u - .combine('encoderType', kProgrammableEncoderTypes) - .combine('state', kResourceStates) - .combine('resourceType', ['buffer', 'texture']) - ) - .fn(t => { - const { encoderType, state, resourceType } = t.params; - const maxBindGroups = t.device.limits.maxBindGroups; +g.test('state_and_binding_index'). +desc('Tests that setBindGroup correctly handles {valid, invalid, destroyed} bindGroups.'). +params((u) => +u. +combine('encoderType', kProgrammableEncoderTypes). +combine('state', kResourceStates). +combine('resourceType', ['buffer', 'texture']) +). +fn((t) => { + const { encoderType, state, resourceType } = t.params; + const maxBindGroups = t.device.limits.maxBindGroups; - function runTest(index) { - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); - encoder.setBindGroup(index, t.createBindGroup(state, resourceType, encoderType, [index])); + function runTest(index) { + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType); + encoder.setBindGroup(index, t.createBindGroup(state, resourceType, encoderType, [index])); - validateFinishAndSubmit(state !== 'invalid' && index < maxBindGroups, state !== 'destroyed'); - } + validateFinishAndSubmit(state !== 'invalid' && index < maxBindGroups, state !== 'destroyed'); + } - // MAINTENANCE_TODO: move to subcases() once we can query the device limits - for (const index of [1, maxBindGroups - 1, maxBindGroups]) { - t.debug(`test bind group index ${index}`); - runTest(index); - } - }); + // MAINTENANCE_TODO: move to subcases() once we can query the device limits + for (const index of [1, maxBindGroups - 1, maxBindGroups]) { + t.debug(`test bind group index ${index}`); + runTest(index); + } +}); -g.test('bind_group,device_mismatch') - .desc( - ` +g.test('bind_group,device_mismatch'). +desc( + ` Tests setBindGroup cannot be called with a bind group created from another device - x= setBindGroup {sequence overload, Uint32Array overload} ` - ) - .params(u => - u - .combine('encoderType', kProgrammableEncoderTypes) - .beginSubcases() - .combine('useU32Array', [true, false]) - .combine('mismatched', [true, false]) - ) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { encoderType, useU32Array, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; +). +params((u) => +u. +combine('encoderType', kProgrammableEncoderTypes). +beginSubcases(). +combine('useU32Array', [true, false]). +combine('mismatched', [true, false]) +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { encoderType, useU32Array, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const buffer = sourceDevice.createBuffer({ - size: 4, - usage: GPUBufferUsage.STORAGE, - }); - - const layout = sourceDevice.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: t.encoderTypeToStageFlag(encoderType), - buffer: { type: 'storage', hasDynamicOffset: useU32Array }, - }, - ], - }); - - const bindGroup = sourceDevice.createBindGroup({ - layout, - entries: [ - { - binding: 0, - resource: { buffer }, - }, - ], - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - if (useU32Array) { - encoder.setBindGroup(0, bindGroup, new Uint32Array([0]), 0, 1); - } else { - encoder.setBindGroup(0, bindGroup); - } - validateFinish(!mismatched); + const buffer = sourceDevice.createBuffer({ + size: 4, + usage: GPUBufferUsage.STORAGE }); -g.test('dynamic_offsets_passed_but_not_expected') - .desc('Tests that setBindGroup correctly errors on unexpected dynamicOffsets.') - .params(u => u.combine('encoderType', kProgrammableEncoderTypes)) - .fn(t => { - const { encoderType } = t.params; - const bindGroup = t.createBindGroup('valid', 'buffer', encoderType, []); - const dynamicOffsets = [0]; + const layout = sourceDevice.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: t.encoderTypeToStageFlag(encoderType), + buffer: { type: 'storage', hasDynamicOffset: useU32Array } + }] - const { encoder, validateFinish } = t.createEncoder(encoderType); + }); + + const bindGroup = sourceDevice.createBindGroup({ + layout, + entries: [ + { + binding: 0, + resource: { buffer } + }] + + }); + + const { encoder, validateFinish } = t.createEncoder(encoderType); + if (useU32Array) { + encoder.setBindGroup(0, bindGroup, new Uint32Array([0]), 0, 1); + } else { + encoder.setBindGroup(0, bindGroup); + } + validateFinish(!mismatched); +}); + +g.test('dynamic_offsets_passed_but_not_expected'). +desc('Tests that setBindGroup correctly errors on unexpected dynamicOffsets.'). +params((u) => u.combine('encoderType', kProgrammableEncoderTypes)). +fn((t) => { + const { encoderType } = t.params; + const bindGroup = t.createBindGroup('valid', 'buffer', encoderType, []); + const dynamicOffsets = [0]; + + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setBindGroup(0, bindGroup, dynamicOffsets); + validateFinish(false); +}); + +g.test('dynamic_offsets_match_expectations_in_pass_encoder'). +desc('Tests that given dynamicOffsets match the specified bindGroup.'). +params((u) => +u. +combine('encoderType', kProgrammableEncoderTypes). +combineWithParams([ +{ dynamicOffsets: [256, 0], _success: true }, // Dynamic offsets aligned +{ dynamicOffsets: [1, 2], _success: false }, // Dynamic offsets not aligned + +// Wrong number of dynamic offsets +{ dynamicOffsets: [256, 0, 0], _success: false }, +{ dynamicOffsets: [256], _success: false }, +{ dynamicOffsets: [], _success: false }, + +// Dynamic uniform buffer out of bounds because of binding size +{ dynamicOffsets: [512, 0], _success: false }, +{ dynamicOffsets: [1024, 0], _success: false }, +{ dynamicOffsets: [0xffffffff, 0], _success: false }, + +// Dynamic storage buffer out of bounds because of binding size +{ dynamicOffsets: [0, 512], _success: false }, +{ dynamicOffsets: [0, 1024], _success: false }, +{ dynamicOffsets: [0, 0xffffffff], _success: false }] +). +combine('useU32array', [false, true]) +). +fn((t) => { + const kBindingSize = 12; + + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, + buffer: { + type: 'uniform', + hasDynamicOffset: true + } + }, + { + binding: 1, + visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, + buffer: { + type: 'storage', + hasDynamicOffset: true + } + }] + + }); + + const uniformBuffer = t.device.createBuffer({ + size: 2 * kMinDynamicBufferOffsetAlignment + 8, + usage: GPUBufferUsage.UNIFORM + }); + + const storageBuffer = t.device.createBuffer({ + size: 2 * kMinDynamicBufferOffsetAlignment + 8, + usage: GPUBufferUsage.STORAGE + }); + + const bindGroup = t.device.createBindGroup({ + layout: bindGroupLayout, + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer, + size: kBindingSize + } + }, + { + binding: 1, + resource: { + buffer: storageBuffer, + size: kBindingSize + } + }] + + }); + + const { encoderType, dynamicOffsets, useU32array, _success } = t.params; + + const { encoder, validateFinish } = t.createEncoder(encoderType); + if (useU32array) { + encoder.setBindGroup(0, bindGroup, new Uint32Array(dynamicOffsets), 0, dynamicOffsets.length); + } else { encoder.setBindGroup(0, bindGroup, dynamicOffsets); - validateFinish(false); + } + validateFinish(_success); +}); + +g.test('u32array_start_and_length'). +desc('Tests that dynamicOffsetsData(Start|Length) apply to the given Uint32Array.'). +paramsSubcasesOnly([ +// dynamicOffsetsDataLength > offsets.length +{ + offsets: [0], + dynamicOffsetsDataStart: 0, + dynamicOffsetsDataLength: 2, + _success: false +}, +// dynamicOffsetsDataStart + dynamicOffsetsDataLength > offsets.length +{ + offsets: [0], + dynamicOffsetsDataStart: 1, + dynamicOffsetsDataLength: 1, + _success: false +}, +{ + offsets: [0, 0], + dynamicOffsetsDataStart: 1, + dynamicOffsetsDataLength: 1, + _success: true +}, +{ + offsets: [0, 0, 0], + dynamicOffsetsDataStart: 1, + dynamicOffsetsDataLength: 1, + _success: true +}, +{ + offsets: [0, 0], + dynamicOffsetsDataStart: 0, + dynamicOffsetsDataLength: 2, + _success: true +}] +). +fn((t) => { + const { offsets, dynamicOffsetsDataStart, dynamicOffsetsDataLength, _success } = t.params; + const kBindingSize = 8; + + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: range(dynamicOffsetsDataLength, (i) => ({ + binding: i, + visibility: GPUShaderStage.FRAGMENT, + buffer: { + type: 'storage', + hasDynamicOffset: true + } + })) }); -g.test('dynamic_offsets_match_expectations_in_pass_encoder') - .desc('Tests that given dynamicOffsets match the specified bindGroup.') - .params(u => - u - .combine('encoderType', kProgrammableEncoderTypes) - .combineWithParams([ - { dynamicOffsets: [256, 0], _success: true }, // Dynamic offsets aligned - { dynamicOffsets: [1, 2], _success: false }, // Dynamic offsets not aligned - - // Wrong number of dynamic offsets - { dynamicOffsets: [256, 0, 0], _success: false }, - { dynamicOffsets: [256], _success: false }, - { dynamicOffsets: [], _success: false }, - - // Dynamic uniform buffer out of bounds because of binding size - { dynamicOffsets: [512, 0], _success: false }, - { dynamicOffsets: [1024, 0], _success: false }, - { dynamicOffsets: [0xffffffff, 0], _success: false }, - - // Dynamic storage buffer out of bounds because of binding size - { dynamicOffsets: [0, 512], _success: false }, - { dynamicOffsets: [0, 1024], _success: false }, - { dynamicOffsets: [0, 0xffffffff], _success: false }, - ]) - .combine('useU32array', [false, true]) - ) - .fn(t => { - const kBindingSize = 12; - - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, - buffer: { - type: 'uniform', - hasDynamicOffset: true, - }, - }, - { - binding: 1, - visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, - buffer: { - type: 'storage', - hasDynamicOffset: true, - }, - }, - ], - }); - - const uniformBuffer = t.device.createBuffer({ - size: 2 * kMinDynamicBufferOffsetAlignment + 8, - usage: GPUBufferUsage.UNIFORM, - }); - - const storageBuffer = t.device.createBuffer({ - size: 2 * kMinDynamicBufferOffsetAlignment + 8, - usage: GPUBufferUsage.STORAGE, - }); - - const bindGroup = t.device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: { - buffer: uniformBuffer, - size: kBindingSize, - }, - }, - { - binding: 1, - resource: { - buffer: storageBuffer, - size: kBindingSize, - }, - }, - ], - }); - - const { encoderType, dynamicOffsets, useU32array, _success } = t.params; - - const { encoder, validateFinish } = t.createEncoder(encoderType); - if (useU32array) { - encoder.setBindGroup(0, bindGroup, new Uint32Array(dynamicOffsets), 0, dynamicOffsets.length); - } else { - encoder.setBindGroup(0, bindGroup, dynamicOffsets); - } - validateFinish(_success); - }); - -g.test('u32array_start_and_length') - .desc('Tests that dynamicOffsetsData(Start|Length) apply to the given Uint32Array.') - .paramsSubcasesOnly([ - // dynamicOffsetsDataLength > offsets.length - { - offsets: [0], - dynamicOffsetsDataStart: 0, - dynamicOffsetsDataLength: 2, - _success: false, - }, - // dynamicOffsetsDataStart + dynamicOffsetsDataLength > offsets.length - { - offsets: [0], - dynamicOffsetsDataStart: 1, - dynamicOffsetsDataLength: 1, - _success: false, - }, - { - offsets: [0, 0], - dynamicOffsetsDataStart: 1, - dynamicOffsetsDataLength: 1, - _success: true, - }, - { - offsets: [0, 0, 0], - dynamicOffsetsDataStart: 1, - dynamicOffsetsDataLength: 1, - _success: true, - }, - { - offsets: [0, 0], - dynamicOffsetsDataStart: 0, - dynamicOffsetsDataLength: 2, - _success: true, - }, - ]) - .fn(t => { - const { offsets, dynamicOffsetsDataStart, dynamicOffsetsDataLength, _success } = t.params; - const kBindingSize = 8; - - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: range(dynamicOffsetsDataLength, i => ({ - binding: i, - visibility: GPUShaderStage.FRAGMENT, - buffer: { - type: 'storage', - hasDynamicOffset: true, - }, - })), - }); - - const bindGroup = t.device.createBindGroup({ - layout: bindGroupLayout, - entries: range(dynamicOffsetsDataLength, i => ({ - binding: i, - resource: { - buffer: t.createBufferWithState('valid', { - size: kBindingSize, - usage: GPUBufferUsage.STORAGE, - }), + const bindGroup = t.device.createBindGroup({ + layout: bindGroupLayout, + entries: range(dynamicOffsetsDataLength, (i) => ({ + binding: i, + resource: { + buffer: t.createBufferWithState('valid', { size: kBindingSize, - }, - })), - }); - - const { encoder, validateFinish } = t.createEncoder('render pass'); - - const doSetBindGroup = () => { - encoder.setBindGroup( - 0, - bindGroup, - new Uint32Array(offsets), - dynamicOffsetsDataStart, - dynamicOffsetsDataLength - ); - }; - - if (_success) { - doSetBindGroup(); - } else { - t.shouldThrow('RangeError', doSetBindGroup); - } - - // RangeError in setBindGroup does not cause the encoder to become invalid. - validateFinish(true); + usage: GPUBufferUsage.STORAGE + }), + size: kBindingSize + } + })) }); -g.test('buffer_dynamic_offsets') - .desc( - ` + const { encoder, validateFinish } = t.createEncoder('render pass'); + + const doSetBindGroup = () => { + encoder.setBindGroup( + 0, + bindGroup, + new Uint32Array(offsets), + dynamicOffsetsDataStart, + dynamicOffsetsDataLength + ); + }; + + if (_success) { + doSetBindGroup(); + } else { + t.shouldThrow('RangeError', doSetBindGroup); + } + + // RangeError in setBindGroup does not cause the encoder to become invalid. + validateFinish(true); +}); + +g.test('buffer_dynamic_offsets'). +desc( + ` Test that the dynamic offsets of the BufferLayout is a multiple of 'minUniformBufferOffsetAlignment|minStorageBufferOffsetAlignment' if the BindGroup entry defines buffer and the buffer type is 'uniform|storage|read-only-storage'. ` - ) - .params(u => - u // - .combine('type', kBufferBindingTypes) - .combine('encoderType', kProgrammableEncoderTypes) - .beginSubcases() - .combine('dynamicOffsetVariant', [ - { mult: 1, add: 0 }, - { mult: 0.5, add: 0 }, - { mult: 1.5, add: 0 }, - { mult: 2, add: 0 }, - { mult: 1, add: 2 }, - ]) - ) - .fn(t => { - const { type, dynamicOffsetVariant, encoderType } = t.params; - const kBindingSize = 12; +). +params((u) => +u // +.combine('type', kBufferBindingTypes). +combine('encoderType', kProgrammableEncoderTypes). +beginSubcases(). +combine('dynamicOffsetVariant', [ +{ mult: 1, add: 0 }, +{ mult: 0.5, add: 0 }, +{ mult: 1.5, add: 0 }, +{ mult: 2, add: 0 }, +{ mult: 1, add: 2 }] +) +). +fn((t) => { + const { type, dynamicOffsetVariant, encoderType } = t.params; + const kBindingSize = 12; - const minAlignment = - t.device.limits[ - type === 'uniform' ? 'minUniformBufferOffsetAlignment' : 'minStorageBufferOffsetAlignment' - ]; + const minAlignment = + t.device.limits[ + type === 'uniform' ? 'minUniformBufferOffsetAlignment' : 'minStorageBufferOffsetAlignment']; - const dynamicOffset = makeValueTestVariant(minAlignment, dynamicOffsetVariant); + const dynamicOffset = makeValueTestVariant(minAlignment, dynamicOffsetVariant); - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type, hasDynamicOffset: true }, - }, - ], - }); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type, hasDynamicOffset: true } + }] - const usage = type === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE; - const isValid = dynamicOffset % minAlignment === 0; - - const buffer = t.device.createBuffer({ - size: 3 * kMinDynamicBufferOffsetAlignment, - usage, - }); - - const bindGroup = t.device.createBindGroup({ - entries: [{ binding: 0, resource: { buffer, size: kBindingSize } }], - layout: bindGroupLayout, - }); - - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setBindGroup(0, bindGroup, [dynamicOffset]); - validateFinish(isValid); }); + + const usage = type === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE; + const isValid = dynamicOffset % minAlignment === 0; + + const buffer = t.device.createBuffer({ + size: 3 * kMinDynamicBufferOffsetAlignment, + usage + }); + + const bindGroup = t.device.createBindGroup({ + entries: [{ binding: 0, resource: { buffer, size: kBindingSize } }], + layout: bindGroupLayout + }); + + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setBindGroup(0, bindGroup, [dynamicOffset]); + validateFinish(isValid); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/createRenderBundleEncoder.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/createRenderBundleEncoder.spec.js index 8849619ffef..a22353bc049 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/createRenderBundleEncoder.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/createRenderBundleEncoder.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` createRenderBundleEncoder validation tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { range } from '../../../../common/util/util.js'; import { kMaxColorAttachmentsToTest } from '../../../capability_info.js'; import { @@ -11,238 +10,212 @@ import { kAllTextureFormats, kDepthStencilFormats, kTextureFormatInfo, - kRenderableColorTextureFormats, -} from '../../../format_info.js'; + kRenderableColorTextureFormats } from +'../../../format_info.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('attachment_state,limits,maxColorAttachments') - .desc(`Tests that attachment state must have <= device.limits.maxColorAttachments.`) - .params(u => - u.beginSubcases().combine( - 'colorFormatCount', - range(kMaxColorAttachmentsToTest, i => i + 1) - ) - ) - .fn(t => { - const { colorFormatCount } = t.params; - const maxColorAttachments = t.device.limits.maxColorAttachments; - t.skipIf( - colorFormatCount > maxColorAttachments, - `${colorFormatCount} > maxColorAttachments: ${maxColorAttachments}` - ); +g.test('attachment_state,limits,maxColorAttachments'). +desc(`Tests that attachment state must have <= device.limits.maxColorAttachments.`). +params((u) => +u.beginSubcases().combine( + 'colorFormatCount', + range(kMaxColorAttachmentsToTest, (i) => i + 1) +) +). +fn((t) => { + const { colorFormatCount } = t.params; + const maxColorAttachments = t.device.limits.maxColorAttachments; + t.skipIf( + colorFormatCount > maxColorAttachments, + `${colorFormatCount} > maxColorAttachments: ${maxColorAttachments}` + ); + t.expectValidationError(() => { + t.device.createRenderBundleEncoder({ + colorFormats: Array(colorFormatCount).fill('r8unorm') + }); + }, colorFormatCount > t.device.limits.maxColorAttachments); +}); - t.expectValidationError(() => { - t.device.createRenderBundleEncoder({ - colorFormats: Array(colorFormatCount).fill('r8unorm'), - }); - }, colorFormatCount > t.device.limits.maxColorAttachments); - }); - -g.test('attachment_state,limits,maxColorAttachmentBytesPerSample,aligned') - .desc( - ` +g.test('attachment_state,limits,maxColorAttachmentBytesPerSample,aligned'). +desc( + ` Tests that the total color attachment bytes per sample <= device.limits.maxColorAttachmentBytesPerSample when using the same format (aligned) for multiple attachments. ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .beginSubcases() - .combine( - 'colorFormatCount', - range(kMaxColorAttachmentsToTest, i => i + 1) - ) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(t => { - const { format, colorFormatCount } = t.params; - const maxColorAttachments = t.device.limits.maxColorAttachments; - t.skipIf( - colorFormatCount > maxColorAttachments, - `${colorFormatCount} > maxColorAttachments: ${maxColorAttachments}` - ); +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +beginSubcases(). +combine( + 'colorFormatCount', + range(kMaxColorAttachmentsToTest, (i) => i + 1) +) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn((t) => { + const { format, colorFormatCount } = t.params; + const maxColorAttachments = t.device.limits.maxColorAttachments; + t.skipIf( + colorFormatCount > maxColorAttachments, + `${colorFormatCount} > maxColorAttachments: ${maxColorAttachments}` + ); + const info = kTextureFormatInfo[format]; + const shouldError = + !info.colorRender || + info.colorRender.byteCost * colorFormatCount > + t.device.limits.maxColorAttachmentBytesPerSample; - const info = kTextureFormatInfo[format]; - const shouldError = - !info.colorRender || - info.colorRender.byteCost * colorFormatCount > - t.device.limits.maxColorAttachmentBytesPerSample; + t.expectValidationError(() => { + t.device.createRenderBundleEncoder({ + colorFormats: Array(colorFormatCount).fill(format) + }); + }, shouldError); +}); - t.expectValidationError(() => { - t.device.createRenderBundleEncoder({ - colorFormats: Array(colorFormatCount).fill(format), - }); - }, shouldError); - }); - -g.test('attachment_state,limits,maxColorAttachmentBytesPerSample,unaligned') - .desc( - ` +g.test('attachment_state,limits,maxColorAttachmentBytesPerSample,unaligned'). +desc( + ` Tests that the total color attachment bytes per sample <= device.limits.maxColorAttachmentBytesPerSample when using various sets of (potentially) unaligned formats. ` - ) - .params(u => - u.combineWithParams([ - // Alignment causes the first 1 byte R8Unorm to become 4 bytes. So even though - // 1+4+8+16+1 < 32, the 4 byte alignment requirement of R32Float makes the first R8Unorm - // become 4 and 4+4+8+16+1 > 32. Re-ordering this so the R8Unorm's are at the end, however - // is allowed: 4+8+16+1+1 < 32. - { - formats: ['r8unorm', 'r32float', 'rgba8unorm', 'rgba32float', 'r8unorm'], - }, - { - formats: ['r32float', 'rgba8unorm', 'rgba32float', 'r8unorm', 'r8unorm'], - }, - ]) - ) - .fn(t => { - const { formats } = t.params; +). +params((u) => +u.combineWithParams([ +// Alignment causes the first 1 byte R8Unorm to become 4 bytes. So even though +// 1+4+8+16+1 < 32, the 4 byte alignment requirement of R32Float makes the first R8Unorm +// become 4 and 4+4+8+16+1 > 32. Re-ordering this so the R8Unorm's are at the end, however +// is allowed: 4+8+16+1+1 < 32. +{ + formats: [ + 'r8unorm', + 'r32float', + 'rgba8unorm', + 'rgba32float', + 'r8unorm'] - t.skipIf( - formats.length > t.device.limits.maxColorAttachments, - `numColorAttachments: ${formats.length} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` - ); +}, +{ + formats: [ + 'r32float', + 'rgba8unorm', + 'rgba32float', + 'r8unorm', + 'r8unorm'] - const shouldError = - computeBytesPerSampleFromFormats(formats) > t.device.limits.maxColorAttachmentBytesPerSample; +}] +) +). +fn((t) => { + const { formats } = t.params; - t.expectValidationError(() => { - t.device.createRenderBundleEncoder({ - colorFormats: formats, - }); - }, shouldError); - }); + t.skipIf( + formats.length > t.device.limits.maxColorAttachments, + `numColorAttachments: ${formats.length} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` + ); -g.test('attachment_state,empty_color_formats') - .desc(`Tests that if no colorFormats are given, a depthStencilFormat must be specified.`) - .params(u => u.beginSubcases().combine('depthStencilFormat', [undefined, 'depth24plus-stencil8'])) - .fn(t => { - const { depthStencilFormat } = t.params; - t.expectValidationError(() => { - t.device.createRenderBundleEncoder({ - colorFormats: [], - depthStencilFormat, - }); - }, depthStencilFormat === undefined); - }); + const shouldError = + computeBytesPerSampleFromFormats(formats) > t.device.limits.maxColorAttachmentBytesPerSample; -g.test('valid_texture_formats') - .desc( - ` + t.expectValidationError(() => { + t.device.createRenderBundleEncoder({ + colorFormats: formats + }); + }, shouldError); +}); + +g.test('attachment_state,empty_color_formats'). +desc(`Tests that if no colorFormats are given, a depthStencilFormat must be specified.`). +params((u) => +u.beginSubcases().combine('depthStencilFormat', [undefined, 'depth24plus-stencil8']) +). +fn((t) => { + const { depthStencilFormat } = t.params; + t.expectValidationError(() => { + t.device.createRenderBundleEncoder({ + colorFormats: [], + depthStencilFormat + }); + }, depthStencilFormat === undefined); +}); + +g.test('valid_texture_formats'). +desc( + ` Tests that createRenderBundleEncoder only accepts valid formats for its attachments. - colorFormats - depthStencilFormat ` - ) - .params(u => - u // - .combine('format', kAllTextureFormats) - .beginSubcases() - .combine('attachment', ['color', 'depthStencil']) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(format); - }) - .fn(t => { - const { format, attachment } = t.params; +). +params((u) => +u // +.combine('format', kAllTextureFormats). +beginSubcases(). +combine('attachment', ['color', 'depthStencil']) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(format); +}). +fn((t) => { + const { format, attachment } = t.params; - const colorRenderable = kTextureFormatInfo[format].colorRender; + const colorRenderable = kTextureFormatInfo[format].colorRender; - const depthStencil = kTextureFormatInfo[format].depth || kTextureFormatInfo[format].stencil; + const depthStencil = kTextureFormatInfo[format].depth || kTextureFormatInfo[format].stencil; - switch (attachment) { - case 'color': { + switch (attachment) { + case 'color':{ t.expectValidationError(() => { t.device.createRenderBundleEncoder({ - colorFormats: [format], + colorFormats: [format] }); }, !colorRenderable); break; } - case 'depthStencil': { + case 'depthStencil':{ t.expectValidationError(() => { t.device.createRenderBundleEncoder({ colorFormats: [], - depthStencilFormat: format, + depthStencilFormat: format }); }, !depthStencil); break; } - } - }); - -g.test('depth_stencil_readonly') - .desc( - ` - Tests that createRenderBundleEncoder validation of depthReadOnly and stencilReadOnly - - With depth-only formats - - With stencil-only formats - - With depth-stencil-combined formats - ` - ) - .params(u => - u // - .combine('depthStencilFormat', kDepthStencilFormats) - .beginSubcases() - .combine('depthReadOnly', [false, true]) - .combine('stencilReadOnly', [false, true]) - ) - .beforeAllSubcases(t => { - const { depthStencilFormat } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(depthStencilFormat); - }) - .fn(t => { - const { depthStencilFormat, depthReadOnly, stencilReadOnly } = t.params; - - let shouldError = false; - if ( - kTextureFormatInfo[depthStencilFormat].depth && - kTextureFormatInfo[depthStencilFormat].stencil && - depthReadOnly !== stencilReadOnly - ) { - shouldError = true; - } - - t.expectValidationError(() => { - t.device.createRenderBundleEncoder({ - colorFormats: [], - depthStencilFormat, - depthReadOnly, - stencilReadOnly, - }); - }, shouldError); - }); - -g.test('depth_stencil_readonly_with_undefined_depth') - .desc( - ` - Tests that createRenderBundleEncoder validation of depthReadOnly and stencilReadOnly is ignored - if there is no depthStencilFormat set. - ` - ) - .params(u => - u // - .beginSubcases() - .combine('depthReadOnly', [false, true]) - .combine('stencilReadOnly', [false, true]) - ) - .fn(t => { - const { depthReadOnly, stencilReadOnly } = t.params; - - t.device.createRenderBundleEncoder({ - colorFormats: ['bgra8unorm'], - depthReadOnly, - stencilReadOnly, - }); + } +}); + +g.test('depth_stencil_readonly'). +desc( + ` + Test that allow combinations of depth-stencil format, depthReadOnly and stencilReadOnly are allowed. + ` +). +params((u) => +u // +.combine('depthStencilFormat', kDepthStencilFormats). +beginSubcases(). +combine('depthReadOnly', [false, true]). +combine('stencilReadOnly', [false, true]) +). +beforeAllSubcases((t) => { + const { depthStencilFormat } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(depthStencilFormat); +}). +fn((t) => { + const { depthStencilFormat, depthReadOnly, stencilReadOnly } = t.params; + t.device.createRenderBundleEncoder({ + colorFormats: [], + depthStencilFormat, + depthReadOnly, + stencilReadOnly }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_open_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_open_state.spec.js index 71741b63c96..b635fe1594d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_open_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_open_state.spec.js @@ -1,10 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests to all commands of GPUCommandEncoder, GPUComputePassEncoder, and GPURenderPassEncoder when the encoder is not finished. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { unreachable } from '../../../../common/util/util.js'; import { ValidationTest } from '../validation_test.js'; @@ -21,45 +20,50 @@ class F extends ValidationTest { @vertex fn main() -> @builtin(position) vec4 { return vec4(); } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ - code: `@fragment fn main() {}`, + code: `@fragment fn main() {}` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, + targets: [{ format: 'rgba8unorm', writeMask: 0 }] + } }); } createBindGroupForTest() { return this.device.createBindGroup({ entries: [ - { - binding: 0, - resource: this.device.createSampler(), - }, - ], + { + binding: 0, + resource: this.device.createSampler() + }], layout: this.device.createBindGroupLayout({ entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - sampler: { type: 'filtering' }, - }, - ], - }), + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + sampler: { type: 'filtering' } + }] + + }) }); } } export const g = makeTestGroup(F); -const kEncoderCommandInfo = { +// MAINTENANCE_TODO: Remove writeTimestamp from here once it's (hopefully) added back to the spec. + + + +const kEncoderCommandInfo = + +{ beginComputePass: {}, beginRenderPass: {}, clearBuffer: {}, @@ -71,11 +75,14 @@ const kEncoderCommandInfo = { popDebugGroup: {}, pushDebugGroup: {}, writeTimestamp: {}, - resolveQuerySet: {}, + resolveQuerySet: {} }; const kEncoderCommands = keysOf(kEncoderCommandInfo); -const kRenderPassEncoderCommandInfo = { + +const kRenderPassEncoderCommandInfo = + +{ draw: {}, drawIndexed: {}, drawIndexedIndirect: {}, @@ -93,11 +100,17 @@ const kRenderPassEncoderCommandInfo = { executeBundles: {}, pushDebugGroup: {}, popDebugGroup: {}, - insertDebugMarker: {}, + insertDebugMarker: {} }; const kRenderPassEncoderCommands = keysOf(kRenderPassEncoderCommandInfo); -const kRenderBundleEncoderCommandInfo = { + + + + +const kRenderBundleEncoderCommandInfo = + +{ draw: {}, drawIndexed: {}, drawIndexedIndirect: {}, @@ -108,465 +121,475 @@ const kRenderBundleEncoderCommandInfo = { setVertexBuffer: {}, pushDebugGroup: {}, popDebugGroup: {}, - insertDebugMarker: {}, + insertDebugMarker: {} }; const kRenderBundleEncoderCommands = keysOf(kRenderBundleEncoderCommandInfo); // MAINTENANCE_TODO: remove the deprecated 'dispatch' and 'dispatchIndirect' here once they're // removed from `@webgpu/types`. -const kComputePassEncoderCommandInfo = { + + + +const kComputePassEncoderCommandInfo = + +{ setBindGroup: {}, setPipeline: {}, dispatchWorkgroups: {}, dispatchWorkgroupsIndirect: {}, pushDebugGroup: {}, popDebugGroup: {}, - insertDebugMarker: {}, + insertDebugMarker: {} }; const kComputePassEncoderCommands = keysOf(kComputePassEncoderCommandInfo); -g.test('non_pass_commands') - .desc( - ` +g.test('non_pass_commands'). +desc( + ` Test that functions of GPUCommandEncoder generate a validation error if the encoder is already finished. + + TODO: writeTimestamp is removed from the spec so it's skipped if it TypeErrors. ` - ) - .params(u => - u - .combine('command', kEncoderCommands) - .beginSubcases() - .combine('finishBeforeCommand', [false, true]) - ) - .beforeAllSubcases(t => { - switch (t.params.command) { - case 'writeTimestamp': - t.selectDeviceOrSkipTestCase('timestamp-query'); - break; - } - }) - .fn(t => { - const { command, finishBeforeCommand } = t.params; +). +params((u) => +u. +combine('command', kEncoderCommands). +beginSubcases(). +combine('finishBeforeCommand', [false, true]) +). +beforeAllSubcases((t) => { + switch (t.params.command) { + case 'writeTimestamp': + t.selectDeviceOrSkipTestCase('timestamp-query'); + break; + } +}). +fn((t) => { + const { command, finishBeforeCommand } = t.params; - const srcBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - const dstBuffer = t.device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.QUERY_RESOLVE, - }); - - const textureSize = { width: 1, height: 1 }; - const textureFormat = 'rgba8unorm'; - const srcTexture = t.device.createTexture({ - size: textureSize, - format: textureFormat, - usage: GPUTextureUsage.COPY_SRC, - }); - const dstTexture = t.device.createTexture({ - size: textureSize, - format: textureFormat, - usage: GPUTextureUsage.COPY_DST, - }); - - const querySet = t.device.createQuerySet({ - type: command === 'writeTimestamp' ? 'timestamp' : 'occlusion', - count: 1, - }); - - const encoder = t.device.createCommandEncoder(); - - if (finishBeforeCommand) encoder.finish(); - - t.expectValidationError(() => { - switch (command) { - case 'beginComputePass': - { - encoder.beginComputePass(); - } - break; - case 'beginRenderPass': - { - encoder.beginRenderPass({ colorAttachments: [] }); - } - break; - case 'clearBuffer': - { - encoder.clearBuffer(dstBuffer, 0, 16); - } - break; - case 'copyBufferToBuffer': - { - encoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, 0); - } - break; - case 'copyBufferToTexture': - { - encoder.copyBufferToTexture( - { buffer: srcBuffer }, - { texture: dstTexture }, - textureSize - ); - } - break; - case 'copyTextureToBuffer': - { - encoder.copyTextureToBuffer( - { texture: srcTexture }, - { buffer: dstBuffer }, - textureSize - ); - } - break; - case 'copyTextureToTexture': - { - encoder.copyTextureToTexture( - { texture: srcTexture }, - { texture: dstTexture }, - textureSize - ); - } - break; - case 'insertDebugMarker': - { - encoder.insertDebugMarker('marker'); - } - break; - case 'pushDebugGroup': - { - encoder.pushDebugGroup('group'); - } - break; - case 'popDebugGroup': - { - encoder.popDebugGroup(); - } - break; - case 'writeTimestamp': - { - encoder.writeTimestamp(querySet, 0); - } - break; - case 'resolveQuerySet': - { - encoder.resolveQuerySet(querySet, 0, 1, dstBuffer, 0); - } - break; - default: - unreachable(); - } - }, finishBeforeCommand); + const srcBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); + const dstBuffer = t.device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.QUERY_RESOLVE }); -g.test('render_pass_commands') - .desc( - ` + const textureSize = { width: 1, height: 1 }; + const textureFormat = 'rgba8unorm'; + const srcTexture = t.device.createTexture({ + size: textureSize, + format: textureFormat, + usage: GPUTextureUsage.COPY_SRC + }); + const dstTexture = t.device.createTexture({ + size: textureSize, + format: textureFormat, + usage: GPUTextureUsage.COPY_DST + }); + + const querySet = t.device.createQuerySet({ + type: command === 'writeTimestamp' ? 'timestamp' : 'occlusion', + count: 1 + }); + + const encoder = t.device.createCommandEncoder(); + + if (finishBeforeCommand) encoder.finish(); + + t.expectValidationError(() => { + switch (command) { + case 'beginComputePass': + { + encoder.beginComputePass(); + } + break; + case 'beginRenderPass': + { + encoder.beginRenderPass({ colorAttachments: [] }); + } + break; + case 'clearBuffer': + { + encoder.clearBuffer(dstBuffer, 0, 16); + } + break; + case 'copyBufferToBuffer': + { + encoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, 0); + } + break; + case 'copyBufferToTexture': + { + encoder.copyBufferToTexture( + { buffer: srcBuffer }, + { texture: dstTexture }, + textureSize + ); + } + break; + case 'copyTextureToBuffer': + { + encoder.copyTextureToBuffer( + { texture: srcTexture }, + { buffer: dstBuffer }, + textureSize + ); + } + break; + case 'copyTextureToTexture': + { + encoder.copyTextureToTexture( + { texture: srcTexture }, + { texture: dstTexture }, + textureSize + ); + } + break; + case 'insertDebugMarker': + { + encoder.insertDebugMarker('marker'); + } + break; + case 'pushDebugGroup': + { + encoder.pushDebugGroup('group'); + } + break; + case 'popDebugGroup': + { + encoder.popDebugGroup(); + } + break; + case 'writeTimestamp': + try { + + encoder.writeTimestamp(querySet, 0); + } catch (ex) { + t.skipIf(ex instanceof TypeError, 'writeTimestamp is actually not available'); + } + break; + case 'resolveQuerySet': + { + encoder.resolveQuerySet(querySet, 0, 1, dstBuffer, 0); + } + break; + default: + unreachable(); + } + }, finishBeforeCommand); +}); + +g.test('render_pass_commands'). +desc( + ` Test that functions of GPURenderPassEncoder generate a validation error if the encoder or the pass is already finished. - TODO: Consider testing: nothing before command, end before command, end+finish before command. ` - ) - .params(u => - u - .combine('command', kRenderPassEncoderCommands) - .beginSubcases() - .combine('finishBeforeCommand', [false, true]) - ) - .fn(t => { - const { command, finishBeforeCommand } = t.params; +). +params((u) => +u. +combine('command', kRenderPassEncoderCommands). +beginSubcases(). +combine('finishBeforeCommand', [false, true]) +). +fn((t) => { + const { command, finishBeforeCommand } = t.params; - const querySet = t.device.createQuerySet({ type: 'occlusion', count: 1 }); - const encoder = t.device.createCommandEncoder(); - const renderPass = beginRenderPassWithQuerySet(t, encoder, querySet); + const querySet = t.device.createQuerySet({ type: 'occlusion', count: 1 }); + const encoder = t.device.createCommandEncoder(); + const renderPass = beginRenderPassWithQuerySet(t, encoder, querySet); - const buffer = t.device.createBuffer({ - size: 12, - usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.VERTEX, - }); - - const pipeline = t.createRenderPipelineForTest(); - - const bindGroup = t.createBindGroupForTest(); - - if (finishBeforeCommand) { - renderPass.end(); - encoder.finish(); - } - - t.expectValidationError(() => { - switch (command) { - case 'draw': - { - renderPass.draw(1); - } - break; - case 'drawIndexed': - { - renderPass.drawIndexed(1); - } - break; - case 'drawIndirect': - { - renderPass.drawIndirect(buffer, 1); - } - break; - case 'setIndexBuffer': - { - renderPass.setIndexBuffer(buffer, 'uint32'); - } - break; - case 'drawIndexedIndirect': - { - renderPass.drawIndexedIndirect(buffer, 0); - } - break; - case 'setBindGroup': - { - renderPass.setBindGroup(0, bindGroup); - } - break; - case 'setVertexBuffer': - { - renderPass.setVertexBuffer(1, buffer); - } - break; - case 'setPipeline': - { - renderPass.setPipeline(pipeline); - } - break; - case 'setViewport': - { - const kNumTestPoints = 8; - const kViewportMinDepth = 0; - const kViewportMaxDepth = 1; - renderPass.setViewport(0, 0, kNumTestPoints, 0, kViewportMinDepth, kViewportMaxDepth); - } - break; - case 'setScissorRect': - { - renderPass.setScissorRect(0, 0, 0, 0); - } - break; - case 'setBlendConstant': - { - renderPass.setBlendConstant({ r: 1.0, g: 1.0, b: 1.0, a: 1.0 }); - } - break; - case 'setStencilReference': - { - renderPass.setStencilReference(0); - } - break; - case 'beginOcclusionQuery': - { - renderPass.beginOcclusionQuery(0); - } - break; - case 'endOcclusionQuery': - { - renderPass.endOcclusionQuery(); - } - break; - case 'executeBundles': - { - renderPass.executeBundles([]); - } - break; - case 'pushDebugGroup': - { - encoder.pushDebugGroup('group'); - } - break; - case 'popDebugGroup': - { - encoder.popDebugGroup(); - } - break; - case 'insertDebugMarker': - { - encoder.insertDebugMarker('marker'); - } - break; - default: - unreachable(); - } - }, finishBeforeCommand); + const buffer = t.device.createBuffer({ + size: 12, + usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.VERTEX }); -g.test('render_bundle_commands') - .desc( - ` + const pipeline = t.createRenderPipelineForTest(); + + const bindGroup = t.createBindGroupForTest(); + + if (finishBeforeCommand) { + renderPass.end(); + encoder.finish(); + } + + t.expectValidationError(() => { + switch (command) { + case 'draw': + { + renderPass.draw(1); + } + break; + case 'drawIndexed': + { + renderPass.drawIndexed(1); + } + break; + case 'drawIndirect': + { + renderPass.drawIndirect(buffer, 1); + } + break; + case 'setIndexBuffer': + { + renderPass.setIndexBuffer(buffer, 'uint32'); + } + break; + case 'drawIndexedIndirect': + { + renderPass.drawIndexedIndirect(buffer, 0); + } + break; + case 'setBindGroup': + { + renderPass.setBindGroup(0, bindGroup); + } + break; + case 'setVertexBuffer': + { + renderPass.setVertexBuffer(1, buffer); + } + break; + case 'setPipeline': + { + renderPass.setPipeline(pipeline); + } + break; + case 'setViewport': + { + const kNumTestPoints = 8; + const kViewportMinDepth = 0; + const kViewportMaxDepth = 1; + renderPass.setViewport(0, 0, kNumTestPoints, 0, kViewportMinDepth, kViewportMaxDepth); + } + break; + case 'setScissorRect': + { + renderPass.setScissorRect(0, 0, 0, 0); + } + break; + case 'setBlendConstant': + { + renderPass.setBlendConstant({ r: 1.0, g: 1.0, b: 1.0, a: 1.0 }); + } + break; + case 'setStencilReference': + { + renderPass.setStencilReference(0); + } + break; + case 'beginOcclusionQuery': + { + renderPass.beginOcclusionQuery(0); + } + break; + case 'endOcclusionQuery': + { + renderPass.endOcclusionQuery(); + } + break; + case 'executeBundles': + { + renderPass.executeBundles([]); + } + break; + case 'pushDebugGroup': + { + encoder.pushDebugGroup('group'); + } + break; + case 'popDebugGroup': + { + encoder.popDebugGroup(); + } + break; + case 'insertDebugMarker': + { + encoder.insertDebugMarker('marker'); + } + break; + default: + unreachable(); + } + }, finishBeforeCommand); +}); + +g.test('render_bundle_commands'). +desc( + ` Test that functions of GPURenderBundleEncoder generate a validation error if the encoder or the pass is already finished. ` - ) - .params(u => - u - .combine('command', kRenderBundleEncoderCommands) - .beginSubcases() - .combine('finishBeforeCommand', [false, true]) - ) - .fn(t => { - const { command, finishBeforeCommand } = t.params; +). +params((u) => +u. +combine('command', kRenderBundleEncoderCommands). +beginSubcases(). +combine('finishBeforeCommand', [false, true]) +). +fn((t) => { + const { command, finishBeforeCommand } = t.params; - const buffer = t.device.createBuffer({ - size: 12, - usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.VERTEX, - }); - - const pipeline = t.createRenderPipelineForTest(); - - const bindGroup = t.createBindGroupForTest(); - - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }); - - if (finishBeforeCommand) { - bundleEncoder.finish(); - } - - t.expectValidationError(() => { - switch (command) { - case 'draw': - { - bundleEncoder.draw(1); - } - break; - case 'drawIndexed': - { - bundleEncoder.drawIndexed(1); - } - break; - case 'drawIndexedIndirect': - { - bundleEncoder.drawIndexedIndirect(buffer, 0); - } - break; - case 'drawIndirect': - { - bundleEncoder.drawIndirect(buffer, 1); - } - break; - case 'setPipeline': - { - bundleEncoder.setPipeline(pipeline); - } - break; - case 'setBindGroup': - { - bundleEncoder.setBindGroup(0, bindGroup); - } - break; - case 'setIndexBuffer': - { - bundleEncoder.setIndexBuffer(buffer, 'uint32'); - } - break; - case 'setVertexBuffer': - { - bundleEncoder.setVertexBuffer(1, buffer); - } - break; - case 'pushDebugGroup': - { - bundleEncoder.pushDebugGroup('group'); - } - break; - case 'popDebugGroup': - { - bundleEncoder.popDebugGroup(); - } - break; - case 'insertDebugMarker': - { - bundleEncoder.insertDebugMarker('marker'); - } - break; - default: - unreachable(); - } - }, finishBeforeCommand); + const buffer = t.device.createBuffer({ + size: 12, + usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.VERTEX }); -g.test('compute_pass_commands') - .desc( - ` + const pipeline = t.createRenderPipelineForTest(); + + const bindGroup = t.createBindGroupForTest(); + + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'] + }); + + if (finishBeforeCommand) { + bundleEncoder.finish(); + } + + t.expectValidationError(() => { + switch (command) { + case 'draw': + { + bundleEncoder.draw(1); + } + break; + case 'drawIndexed': + { + bundleEncoder.drawIndexed(1); + } + break; + case 'drawIndexedIndirect': + { + bundleEncoder.drawIndexedIndirect(buffer, 0); + } + break; + case 'drawIndirect': + { + bundleEncoder.drawIndirect(buffer, 1); + } + break; + case 'setPipeline': + { + bundleEncoder.setPipeline(pipeline); + } + break; + case 'setBindGroup': + { + bundleEncoder.setBindGroup(0, bindGroup); + } + break; + case 'setIndexBuffer': + { + bundleEncoder.setIndexBuffer(buffer, 'uint32'); + } + break; + case 'setVertexBuffer': + { + bundleEncoder.setVertexBuffer(1, buffer); + } + break; + case 'pushDebugGroup': + { + bundleEncoder.pushDebugGroup('group'); + } + break; + case 'popDebugGroup': + { + bundleEncoder.popDebugGroup(); + } + break; + case 'insertDebugMarker': + { + bundleEncoder.insertDebugMarker('marker'); + } + break; + default: + unreachable(); + } + }, finishBeforeCommand); +}); + +g.test('compute_pass_commands'). +desc( + ` Test that functions of GPUComputePassEncoder generate a validation error if the encoder or the pass is already finished. - TODO: Consider testing: nothing before command, end before command, end+finish before command. ` - ) - .params(u => - u - .combine('command', kComputePassEncoderCommands) - .beginSubcases() - .combine('finishBeforeCommand', [false, true]) - ) - .fn(t => { - const { command, finishBeforeCommand } = t.params; +). +params((u) => +u. +combine('command', kComputePassEncoderCommands). +beginSubcases(). +combine('finishBeforeCommand', [false, true]) +). +fn((t) => { + const { command, finishBeforeCommand } = t.params; - const encoder = t.device.createCommandEncoder(); - const computePass = encoder.beginComputePass(); + const encoder = t.device.createCommandEncoder(); + const computePass = encoder.beginComputePass(); - const indirectBuffer = t.device.createBuffer({ - size: 12, - usage: GPUBufferUsage.INDIRECT, - }); - - const computePipeline = t.createNoOpComputePipeline(); - - const bindGroup = t.createBindGroupForTest(); - - if (finishBeforeCommand) { - computePass.end(); - encoder.finish(); - } - - t.expectValidationError(() => { - switch (command) { - case 'setBindGroup': - { - computePass.setBindGroup(0, bindGroup); - } - break; - case 'setPipeline': - { - computePass.setPipeline(computePipeline); - } - break; - case 'dispatchWorkgroups': - { - computePass.dispatchWorkgroups(0); - } - break; - case 'dispatchWorkgroupsIndirect': - { - computePass.dispatchWorkgroupsIndirect(indirectBuffer, 0); - } - break; - case 'pushDebugGroup': - { - computePass.pushDebugGroup('group'); - } - break; - case 'popDebugGroup': - { - computePass.popDebugGroup(); - } - break; - case 'insertDebugMarker': - { - computePass.insertDebugMarker('marker'); - } - break; - default: - unreachable(); - } - }, finishBeforeCommand); + const indirectBuffer = t.device.createBuffer({ + size: 12, + usage: GPUBufferUsage.INDIRECT }); + + const computePipeline = t.createNoOpComputePipeline(); + + const bindGroup = t.createBindGroupForTest(); + + if (finishBeforeCommand) { + computePass.end(); + encoder.finish(); + } + + t.expectValidationError(() => { + switch (command) { + case 'setBindGroup': + { + computePass.setBindGroup(0, bindGroup); + } + break; + case 'setPipeline': + { + computePass.setPipeline(computePipeline); + } + break; + case 'dispatchWorkgroups': + { + computePass.dispatchWorkgroups(0); + } + break; + case 'dispatchWorkgroupsIndirect': + { + computePass.dispatchWorkgroupsIndirect(indirectBuffer, 0); + } + break; + case 'pushDebugGroup': + { + computePass.pushDebugGroup('group'); + } + break; + case 'popDebugGroup': + { + computePass.popDebugGroup(); + } + break; + case 'insertDebugMarker': + { + computePass.insertDebugMarker('marker'); + } + break; + default: + unreachable(); + } + }, finishBeforeCommand); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_state.spec.js index fe0333ac21b..eec8feb8f3b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/encoder_state.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: - createCommandEncoder - non-pass command, or beginPass, during {render, compute} pass @@ -16,8 +16,7 @@ TODO: - } - should make whole encoder invalid - ? -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { objectEquals } from '../../../../common/util/util.js'; import { ValidationTest } from '../validation_test.js'; @@ -25,13 +24,13 @@ class F extends ValidationTest { beginRenderPass(commandEncoder, view) { return commandEncoder.beginRenderPass({ colorAttachments: [ - { - view, - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view, + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); } @@ -39,7 +38,7 @@ class F extends ValidationTest { const texture = this.device.createTexture({ format: 'rgba8unorm', size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.RENDER_ATTACHMENT }); this.trackForCleanup(texture); return texture.createView(); @@ -48,204 +47,204 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('pass_end_invalid_order') - .desc( - ` +g.test('pass_end_invalid_order'). +desc( + ` Test that beginning a {compute,render} pass before ending the previous {compute,render} pass causes an error. ` - ) - .params(u => - u - .combine('pass0Type', ['compute', 'render']) - .combine('pass1Type', ['compute', 'render']) - .beginSubcases() - .combine('firstPassEnd', [true, false]) - .combine('endPasses', [[], [0], [1], [0, 1], [1, 0]]) - // Don't end the first pass multiple times (that generates a validation error but doesn't invalidate the encoder) - .unless(p => p.firstPassEnd && p.endPasses.includes(0)) - ) - .fn(t => { - const { pass0Type, pass1Type, firstPassEnd, endPasses } = t.params; +). +params((u) => +u. +combine('pass0Type', ['compute', 'render']). +combine('pass1Type', ['compute', 'render']). +beginSubcases(). +combine('firstPassEnd', [true, false]). +combine('endPasses', [[], [0], [1], [0, 1], [1, 0]]) +// Don't end the first pass multiple times (that generates a validation error but doesn't invalidate the encoder) +.unless((p) => p.firstPassEnd && p.endPasses.includes(0)) +). +fn((t) => { + const { pass0Type, pass1Type, firstPassEnd, endPasses } = t.params; - const view = t.createAttachmentTextureView(); - const encoder = t.device.createCommandEncoder(); + const view = t.createAttachmentTextureView(); + const encoder = t.device.createCommandEncoder(); - const firstPass = - pass0Type === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); + const firstPass = + pass0Type === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); - if (firstPassEnd) firstPass.end(); + if (firstPassEnd) firstPass.end(); - // Begin a second pass before ending the previous pass. - const secondPass = - pass1Type === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); + // Begin a second pass before ending the previous pass. + const secondPass = + pass1Type === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); - const passes = [firstPass, secondPass]; - for (const index of endPasses) { - passes[index].end(); - } + const passes = [firstPass, secondPass]; + for (const index of endPasses) { + passes[index].end(); + } - // If {endPasses} is '[1]' and {firstPass} ends, it's a control case. - const valid = firstPassEnd && objectEquals(endPasses, [1]); + // If {endPasses} is '[1]' and {firstPass} ends, it's a control case. + const valid = firstPassEnd && objectEquals(endPasses, [1]); - t.expectValidationError(() => { - encoder.finish(); - }, !valid); - }); + t.expectValidationError(() => { + encoder.finish(); + }, !valid); +}); -g.test('call_after_successful_finish') - .desc(`Test that encoding command after a successful finish generates a validation error.`) - .params(u => - u - .combine('callCmd', ['beginComputePass', 'beginRenderPass', 'insertDebugMarker']) - .beginSubcases() - .combine('prePassType', ['compute', 'render', 'no-op']) - .combine('IsEncoderFinished', [false, true]) - ) - .fn(t => { - const { prePassType, IsEncoderFinished, callCmd } = t.params; +g.test('call_after_successful_finish'). +desc(`Test that encoding command after a successful finish generates a validation error.`). +params((u) => +u. +combine('callCmd', ['beginComputePass', 'beginRenderPass', 'insertDebugMarker']). +beginSubcases(). +combine('prePassType', ['compute', 'render', 'no-op']). +combine('IsEncoderFinished', [false, true]) +). +fn((t) => { + const { prePassType, IsEncoderFinished, callCmd } = t.params; - const view = t.createAttachmentTextureView(); - const encoder = t.device.createCommandEncoder(); - - if (prePassType !== 'no-op') { - const pass = - prePassType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); - pass.end(); - } - - if (IsEncoderFinished) { - encoder.finish(); - } - - switch (callCmd) { - case 'beginComputePass': - { - let pass; - t.expectValidationError(() => { - pass = encoder.beginComputePass(); - }, IsEncoderFinished); - t.expectValidationError(() => { - pass.end(); - }, IsEncoderFinished); - } - break; - case 'beginRenderPass': - { - let pass; - t.expectValidationError(() => { - pass = t.beginRenderPass(encoder, view); - }, IsEncoderFinished); - t.expectValidationError(() => { - pass.end(); - }, IsEncoderFinished); - } - break; - case 'insertDebugMarker': - t.expectValidationError(() => { - encoder.insertDebugMarker(''); - }, IsEncoderFinished); - break; - } - - if (!IsEncoderFinished) { - encoder.finish(); - } - }); - -g.test('pass_end_none') - .desc( - ` - Test that ending a {compute,render} pass without ending the passes generates a validation error. - ` - ) - .paramsSubcasesOnly(u => u.combine('passType', ['compute', 'render']).combine('endCount', [0, 1])) - .fn(t => { - const { passType, endCount } = t.params; - - const view = t.createAttachmentTextureView(); - const encoder = t.device.createCommandEncoder(); + const view = t.createAttachmentTextureView(); + const encoder = t.device.createCommandEncoder(); + if (prePassType !== 'no-op') { const pass = - passType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); - - for (let i = 0; i < endCount; ++i) { - pass.end(); - } - - t.expectValidationError(() => { - encoder.finish(); - }, endCount === 0); - }); - -g.test('pass_end_twice,basic') - .desc( - 'Test that ending a {compute,render} pass twice generates a validation error. The parent encoder (command encoder) can be either locked or open.' - ) - .paramsSubcasesOnly(u => - u // - .combine('passType', ['compute', 'render']) - // Simply end twice, the parent encoder is open at that time. If the second pass end is in the middle of another pass, the parent encoder is locked. It should generate a validation error in either situation. - .combine('endTwice', [false, true]) - .combine('secondEndInAnotherPass', [false, 'compute', 'render']) - .filter(p => p.endTwice || !p.secondEndInAnotherPass) - ) - .fn(t => { - const { passType, endTwice, secondEndInAnotherPass } = t.params; - - const view = t.createAttachmentTextureView(); - const encoder = t.device.createCommandEncoder(); - - const pass = - passType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); - + prePassType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); pass.end(); + } - if (secondEndInAnotherPass) { - const pass1 = - secondEndInAnotherPass === 'compute' - ? encoder.beginComputePass() - : t.beginRenderPass(encoder, view); + if (IsEncoderFinished) { + encoder.finish(); + } - t.expectValidationError(() => { - pass.end(); - }); - - pass1.end(); - } else { - if (endTwice) { + switch (callCmd) { + case 'beginComputePass': + { + let pass; + t.expectValidationError(() => { + pass = encoder.beginComputePass(); + }, IsEncoderFinished); t.expectValidationError(() => { pass.end(); - }); + }, IsEncoderFinished); } - } + break; + case 'beginRenderPass': + { + let pass; + t.expectValidationError(() => { + pass = t.beginRenderPass(encoder, view); + }, IsEncoderFinished); + t.expectValidationError(() => { + pass.end(); + }, IsEncoderFinished); + } + break; + case 'insertDebugMarker': + t.expectValidationError(() => { + encoder.insertDebugMarker(''); + }, IsEncoderFinished); + break; + } + if (!IsEncoderFinished) { encoder.finish(); - }); + } +}); -g.test('pass_end_twice,render_pass_invalid') - .desc( - 'Test that ending a render pass twice generates a validation error even if the pass is invalid.' - ) - .paramsSubcasesOnly(u => u.combine('endTwice', [false, true])) - .fn(t => { - const { endTwice } = t.params; +g.test('pass_end_none'). +desc( + ` + Test that ending a {compute,render} pass without ending the passes generates a validation error. + ` +). +paramsSubcasesOnly((u) => u.combine('passType', ['compute', 'render']).combine('endCount', [0, 1])). +fn((t) => { + const { passType, endCount } = t.params; - const encoder = t.device.createCommandEncoder(); - // Pass encoder creation will fail because both color and depth/stencil attachments are empty. - const pass = encoder.beginRenderPass({ - colorAttachments: [], + const view = t.createAttachmentTextureView(); + const encoder = t.device.createCommandEncoder(); + + const pass = + passType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); + + for (let i = 0; i < endCount; ++i) { + pass.end(); + } + + t.expectValidationError(() => { + encoder.finish(); + }, endCount === 0); +}); + +g.test('pass_end_twice,basic'). +desc( + 'Test that ending a {compute,render} pass twice generates a validation error. The parent encoder (command encoder) can be either locked or open.' +). +paramsSubcasesOnly((u) => +u // +.combine('passType', ['compute', 'render']) +// Simply end twice, the parent encoder is open at that time. If the second pass end is in the middle of another pass, the parent encoder is locked. It should generate a validation error in either situation. +.combine('endTwice', [false, true]). +combine('secondEndInAnotherPass', [false, 'compute', 'render']). +filter((p) => p.endTwice || !p.secondEndInAnotherPass) +). +fn((t) => { + const { passType, endTwice, secondEndInAnotherPass } = t.params; + + const view = t.createAttachmentTextureView(); + const encoder = t.device.createCommandEncoder(); + + const pass = + passType === 'compute' ? encoder.beginComputePass() : t.beginRenderPass(encoder, view); + + pass.end(); + + if (secondEndInAnotherPass) { + const pass1 = + secondEndInAnotherPass === 'compute' ? + encoder.beginComputePass() : + t.beginRenderPass(encoder, view); + + t.expectValidationError(() => { + pass.end(); }); - pass.end(); - + pass1.end(); + } else { if (endTwice) { t.expectValidationError(() => { pass.end(); }); } + } - t.expectValidationError(() => { - encoder.finish(); - }); + encoder.finish(); +}); + +g.test('pass_end_twice,render_pass_invalid'). +desc( + 'Test that ending a render pass twice generates a validation error even if the pass is invalid.' +). +paramsSubcasesOnly((u) => u.combine('endTwice', [false, true])). +fn((t) => { + const { endTwice } = t.params; + + const encoder = t.device.createCommandEncoder(); + // Pass encoder creation will fail because both color and depth/stencil attachments are empty. + const pass = encoder.beginRenderPass({ + colorAttachments: [] }); + + pass.end(); + + if (endTwice) { + t.expectValidationError(() => { + pass.end(); + }); + } + + t.expectValidationError(() => { + encoder.finish(); + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js index 80528d666e4..b468feda508 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: - test compatibility between bind groups and pipelines - the binding resource in bindGroups[i].layout is "group-equivalent" (value-equal) to pipelineLayout.bgls[i]. @@ -11,41 +11,54 @@ TODO: TODO: subsume existing test, rewrite fixture as needed. TODO: Add externalTexture to kResourceTypes [1] -`; -import { kUnitCaseParamsBuilder } from '../../../../../common/framework/params_builder.js'; +`;import { kUnitCaseParamsBuilder } from '../../../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { memcpy, unreachable } from '../../../../../common/util/util.js'; import { kSamplerBindingTypes, kShaderStageCombinations, - kBufferBindingTypes, -} from '../../../../capability_info.js'; + kBufferBindingTypes } from + +'../../../../capability_info.js'; import { GPUConst } from '../../../../constants.js'; -import { kProgrammableEncoderTypes } from '../../../../util/command_buffer_maker.js'; +import { + + kProgrammableEncoderTypes } from +'../../../../util/command_buffer_maker.js'; import { ValidationTest } from '../../validation_test.js'; const kComputeCmds = ['dispatch', 'dispatchIndirect']; const kRenderCmds = ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']; + // Test resource type compatibility in pipeline and bind group // [1]: Need to add externalTexture -const kResourceTypes = ['uniformBuf', 'filtSamp', 'sampledTex', 'storageTex']; +const kResourceTypes = [ +'uniformBuf', +'filtSamp', +'sampledTex', +'readonlyStorageTex', +'writeonlyStorageTex', +'readwriteStorageTex']; -function getTestCmds(encoderType) { + +function getTestCmds( +encoderType) +{ return encoderType === 'compute pass' ? kComputeCmds : kRenderCmds; } -const kCompatTestParams = kUnitCaseParamsBuilder - .combine('encoderType', kProgrammableEncoderTypes) - .expand('call', p => getTestCmds(p.encoderType)) - .combine('callWithZero', [true, false]); +const kCompatTestParams = kUnitCaseParamsBuilder. +combine('encoderType', kProgrammableEncoderTypes). +expand('call', (p) => getTestCmds(p.encoderType)). +combine('callWithZero', [true, false]); class F extends ValidationTest { getIndexBuffer() { return this.device.createBuffer({ size: 8 * Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX }); } @@ -53,7 +66,7 @@ class F extends ValidationTest { const buffer = this.device.createBuffer({ mappedAtCreation: true, size: indirectParams.length * Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST }); memcpy({ src: new Uint32Array(indirectParams) }, { dst: buffer.getMappedRange() }); buffer.unmap(); @@ -64,11 +77,23 @@ class F extends ValidationTest { if (entry.buffer !== undefined) return 'uniformBuf'; if (entry.sampler !== undefined) return 'filtSamp'; if (entry.texture !== undefined) return 'sampledTex'; - if (entry.storageTexture !== undefined) return 'storageTex'; + if (entry.storageTexture !== undefined) { + switch (entry.storageTexture.access) { + case undefined: + case 'write-only': + return 'writeonlyStorageTex'; + case 'read-only': + return 'readonlyStorageTex'; + case 'read-write': + return 'readwriteStorageTex'; + } + } unreachable(); } - createRenderPipelineWithLayout(bindGroups) { + createRenderPipelineWithLayout( + bindGroups) + { const shader = ` @vertex fn vs_main() -> @builtin(position) vec4 { return vec4(1.0, 1.0, 0.0, 1.0); @@ -81,23 +106,25 @@ class F extends ValidationTest { const module = this.device.createShaderModule({ code: shader }); const pipeline = this.device.createRenderPipeline({ layout: this.device.createPipelineLayout({ - bindGroupLayouts: bindGroups.map(entries => this.device.createBindGroupLayout({ entries })), + bindGroupLayouts: bindGroups.map((entries) => this.device.createBindGroupLayout({ entries })) }), vertex: { module, - entryPoint: 'vs_main', + entryPoint: 'vs_main' }, fragment: { module, entryPoint: 'fs_main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); return pipeline; } - createComputePipelineWithLayout(bindGroups) { + createComputePipelineWithLayout( + bindGroups) + { const shader = ` @compute @workgroup_size(1) fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { @@ -107,12 +134,12 @@ class F extends ValidationTest { const module = this.device.createShaderModule({ code: shader }); const pipeline = this.device.createComputePipeline({ layout: this.device.createPipelineLayout({ - bindGroupLayouts: bindGroups.map(entries => this.device.createBindGroupLayout({ entries })), + bindGroupLayouts: bindGroups.map((entries) => this.device.createBindGroupLayout({ entries })) }), compute: { module, - entryPoint: 'main', - }, + entryPoint: 'main' + } }); return pipeline; } @@ -123,13 +150,13 @@ class F extends ValidationTest { const resource = this.getBindingResource(this.getBindingResourceType(entry)); bgEntries.push({ binding: entry.binding, - resource, + resource }); } return this.device.createBindGroup({ entries: bgEntries, - layout: this.device.createBindGroupLayout({ entries: bglEntries }), + layout: this.device.createBindGroupLayout({ entries: bglEntries }) }); } @@ -147,7 +174,11 @@ class F extends ValidationTest { } } - doRender(pass, call, callWithZero) { + doRender( + pass, + call, + callWithZero) + { const vertexCount = callWithZero ? 0 : 3; switch (call) { case 'draw': @@ -169,10 +200,14 @@ class F extends ValidationTest { } } - createBindGroupLayoutEntry(encoderType, resourceType, useU32Array) { + createBindGroupLayoutEntry( + encoderType, + resourceType, + useU32Array) + { const entry = { binding: 0, - visibility: encoderType === 'compute pass' ? GPUShaderStage.COMPUTE : GPUShaderStage.FRAGMENT, + visibility: encoderType === 'compute pass' ? GPUShaderStage.COMPUTE : GPUShaderStage.FRAGMENT }; switch (resourceType) { @@ -185,15 +220,29 @@ class F extends ValidationTest { case 'sampledTex': entry.texture = {}; // default sampleType: float break; - case 'storageTex': - entry.storageTexture = { access: 'write-only', format: 'rgba8unorm' }; + case 'readonlyStorageTex': + entry.storageTexture = { access: 'read-only', format: 'r32float' }; + break; + case 'writeonlyStorageTex': + entry.storageTexture = { access: 'write-only', format: 'r32float' }; + break; + case 'readwriteStorageTex': + entry.storageTexture = { access: 'read-write', format: 'r32float' }; break; } return entry; } - runTest(encoderType, pipeline, bindGroups, dynamicOffsets, call, callWithZero, success) { + runTest( + encoderType, + pipeline, + bindGroups, + dynamicOffsets, + call, + callWithZero, + success) + { const { encoder, validateFinish } = this.createEncoder(encoderType); if (encoder instanceof GPUComputePassEncoder) { @@ -232,526 +281,515 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('bind_groups_and_pipeline_layout_mismatch') - .desc( - ` +g.test('bind_groups_and_pipeline_layout_mismatch'). +desc( + ` Tests the bind groups must match the requirements of the pipeline layout. - bind groups required by the pipeline layout are required. - bind groups unused by the pipeline layout can be set or not. ` - ) - .params( - kCompatTestParams - .beginSubcases() - .combineWithParams([ - { setBindGroup0: true, setBindGroup1: true, setUnusedBindGroup2: true, _success: true }, - { setBindGroup0: true, setBindGroup1: true, setUnusedBindGroup2: false, _success: true }, - { setBindGroup0: true, setBindGroup1: false, setUnusedBindGroup2: true, _success: false }, - { setBindGroup0: false, setBindGroup1: true, setUnusedBindGroup2: true, _success: false }, - { setBindGroup0: false, setBindGroup1: false, setUnusedBindGroup2: false, _success: false }, - ]) - .combine('useU32Array', [false, true]) - ) - .fn(t => { - const { - encoderType, - call, - callWithZero, - setBindGroup0, - setBindGroup1, - setUnusedBindGroup2, - _success, - useU32Array, - } = t.params; - const visibility = - encoderType === 'compute pass' ? GPUShaderStage.COMPUTE : GPUShaderStage.VERTEX; +). +params( + kCompatTestParams. + beginSubcases(). + combineWithParams([ + { setBindGroup0: true, setBindGroup1: true, setUnusedBindGroup2: true, _success: true }, + { setBindGroup0: true, setBindGroup1: true, setUnusedBindGroup2: false, _success: true }, + { setBindGroup0: true, setBindGroup1: false, setUnusedBindGroup2: true, _success: false }, + { setBindGroup0: false, setBindGroup1: true, setUnusedBindGroup2: true, _success: false }, + { setBindGroup0: false, setBindGroup1: false, setUnusedBindGroup2: false, _success: false }] + ). + combine('useU32Array', [false, true]) +). +fn((t) => { + const { + encoderType, + call, + callWithZero, + setBindGroup0, + setBindGroup1, + setUnusedBindGroup2, + _success, + useU32Array + } = t.params; + const visibility = + encoderType === 'compute pass' ? GPUShaderStage.COMPUTE : GPUShaderStage.VERTEX; - const bindGroupLayouts = [ - // bind group layout 0 - [ - { - binding: 0, - visibility, - buffer: { hasDynamicOffset: useU32Array }, // default type: uniform - }, - ], + const bindGroupLayouts = [ + // bind group layout 0 + [ + { + binding: 0, + visibility, + buffer: { hasDynamicOffset: useU32Array } // default type: uniform + }], - // bind group layout 1 - [ - { - binding: 0, - visibility, - buffer: { hasDynamicOffset: useU32Array }, // default type: uniform - }, - ], - ]; + // bind group layout 1 + [ + { + binding: 0, + visibility, + buffer: { hasDynamicOffset: useU32Array } // default type: uniform + }]]; - // Create required bind groups - const bindGroup0 = setBindGroup0 ? t.createBindGroupWithLayout(bindGroupLayouts[0]) : undefined; - const bindGroup1 = setBindGroup1 ? t.createBindGroupWithLayout(bindGroupLayouts[1]) : undefined; - const unusedBindGroup2 = setUnusedBindGroup2 - ? t.createBindGroupWithLayout(bindGroupLayouts[1]) - : undefined; - // Create fixed pipeline - const pipeline = - encoderType === 'compute pass' - ? t.createComputePipelineWithLayout(bindGroupLayouts) - : t.createRenderPipelineWithLayout(bindGroupLayouts); - const dynamicOffsets = useU32Array ? [0] : undefined; + // Create required bind groups + const bindGroup0 = setBindGroup0 ? t.createBindGroupWithLayout(bindGroupLayouts[0]) : undefined; + const bindGroup1 = setBindGroup1 ? t.createBindGroupWithLayout(bindGroupLayouts[1]) : undefined; + const unusedBindGroup2 = setUnusedBindGroup2 ? + t.createBindGroupWithLayout(bindGroupLayouts[1]) : + undefined; - // Test without the dispatch/draw (should always be valid) - t.runTest( - encoderType, - pipeline, - [bindGroup0, bindGroup1, unusedBindGroup2], - dynamicOffsets, - undefined, - false, - true - ); + // Create fixed pipeline + const pipeline = + encoderType === 'compute pass' ? + t.createComputePipelineWithLayout(bindGroupLayouts) : + t.createRenderPipelineWithLayout(bindGroupLayouts); - // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. - t.runTest( - encoderType, - pipeline, - [bindGroup0, bindGroup1, unusedBindGroup2], - dynamicOffsets, - call, - callWithZero, - _success - ); - }); + const dynamicOffsets = useU32Array ? [0] : undefined; -g.test('buffer_binding,render_pipeline') - .desc( - ` + // Test without the dispatch/draw (should always be valid) + t.runTest( + encoderType, + pipeline, + [bindGroup0, bindGroup1, unusedBindGroup2], + dynamicOffsets, + undefined, + false, + true + ); + + // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. + t.runTest( + encoderType, + pipeline, + [bindGroup0, bindGroup1, unusedBindGroup2], + dynamicOffsets, + call, + callWithZero, + _success + ); +}); + +g.test('buffer_binding,render_pipeline'). +desc( + ` The GPUBufferBindingLayout bindings configure should be exactly same in PipelineLayout and bindgroup. - TODO: test more draw functions, e.g. indirect - TODO: test more visibilities, e.g. vertex - TODO: bind group should be created with different layout ` - ) - .params(u => u.combine('type', kBufferBindingTypes)) - .fn(t => { - const { type } = t.params; +). +params((u) => u.combine('type', kBufferBindingTypes)). +fn((t) => { + const { type } = t.params; - // Create fixed bindGroup - const uniformBuffer = t.getUniformBuffer(); + // Create fixed bindGroup + const uniformBuffer = t.getUniformBuffer(); - const bindGroup = t.device.createBindGroup({ + const bindGroup = t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: { + buffer: uniformBuffer + } + }], + + layout: t.device.createBindGroupLayout({ entries: [ - { - binding: 0, - resource: { - buffer: uniformBuffer, - }, - }, - ], + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + buffer: {} // default type: uniform + }] - layout: t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - buffer: {}, // default type: uniform - }, - ], - }), - }); - - // Create pipeline with different layouts - const pipeline = t.createRenderPipelineWithLayout([ - [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - buffer: { - type, - }, - }, - ], - ]); - - const { encoder, validateFinish } = t.createEncoder('render pass'); - encoder.setPipeline(pipeline); - encoder.setBindGroup(0, bindGroup); - encoder.draw(3); - - validateFinish(type === undefined || type === 'uniform'); + }) }); -g.test('sampler_binding,render_pipeline') - .desc( - ` + // Create pipeline with different layouts + const pipeline = t.createRenderPipelineWithLayout([ + [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + buffer: { + type + } + }]] + + ); + + const { encoder, validateFinish } = t.createEncoder('render pass'); + encoder.setPipeline(pipeline); + encoder.setBindGroup(0, bindGroup); + encoder.draw(3); + + validateFinish(type === undefined || type === 'uniform'); +}); + +g.test('sampler_binding,render_pipeline'). +desc( + ` The GPUSamplerBindingLayout bindings configure should be exactly same in PipelineLayout and bindgroup. - TODO: test more draw functions, e.g. indirect - TODO: test more visibilities, e.g. vertex ` - ) - .params(u => - u // - .combine('bglType', kSamplerBindingTypes) - .combine('bgType', kSamplerBindingTypes) - ) - .fn(t => { - const { bglType, bgType } = t.params; - const bindGroup = t.device.createBindGroup({ +). +params((u) => +u // +.combine('bglType', kSamplerBindingTypes). +combine('bgType', kSamplerBindingTypes) +). +fn((t) => { + const { bglType, bgType } = t.params; + const bindGroup = t.device.createBindGroup({ + entries: [ + { + binding: 0, + resource: + bgType === 'comparison' ? + t.device.createSampler({ compare: 'always' }) : + t.device.createSampler() + }], + + layout: t.device.createBindGroupLayout({ entries: [ - { - binding: 0, - resource: - bgType === 'comparison' - ? t.device.createSampler({ compare: 'always' }) - : t.device.createSampler(), - }, - ], - - layout: t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - sampler: { type: bgType }, - }, - ], - }), - }); - - // Create pipeline with different layouts - const pipeline = t.createRenderPipelineWithLayout([ - [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - sampler: { - type: bglType, - }, - }, - ], - ]); - - const { encoder, validateFinish } = t.createEncoder('render pass'); - encoder.setPipeline(pipeline); - encoder.setBindGroup(0, bindGroup); - encoder.draw(3); - - validateFinish(bglType === bgType); - }); - -g.test('bgl_binding_mismatch') - .desc( - 'Tests the binding number must exist or not exist in both bindGroups[i].layout and pipelineLayout.bgls[i]' - ) - .params( - kCompatTestParams - .beginSubcases() - .combineWithParams([ - { bgBindings: [0, 1, 2], plBindings: [0, 1, 2], _success: true }, - { bgBindings: [0, 1, 2], plBindings: [0, 1, 3], _success: false }, - { bgBindings: [0, 2], plBindings: [0, 2], _success: true }, - { bgBindings: [0, 2], plBindings: [2, 0], _success: true }, - { bgBindings: [0, 1, 2], plBindings: [0, 1], _success: false }, - { bgBindings: [0, 1], plBindings: [0, 1, 2], _success: false }, - ]) - .combine('useU32Array', [false, true]) - ) - .fn(t => { - const { - encoderType, - call, - callWithZero, - bgBindings, - plBindings, - _success, - useU32Array, - } = t.params; - const visibility = - encoderType === 'compute pass' ? GPUShaderStage.COMPUTE : GPUShaderStage.VERTEX; - - const bglEntries = []; - for (const binding of bgBindings) { - bglEntries.push({ - binding, - visibility, - buffer: { hasDynamicOffset: useU32Array }, // default type: uniform - }); - } - const bindGroup = t.createBindGroupWithLayout(bglEntries); - - const plEntries = [[]]; - for (const binding of plBindings) { - plEntries[0].push({ - binding, - visibility, - buffer: { hasDynamicOffset: useU32Array }, // default type: uniform - }); - } - const pipeline = - encoderType === 'compute pass' - ? t.createComputePipelineWithLayout(plEntries) - : t.createRenderPipelineWithLayout(plEntries); - - const dynamicOffsets = useU32Array ? new Array(bgBindings.length).fill(0) : undefined; - - // Test without the dispatch/draw (should always be valid) - t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, undefined, false, true); - - // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. - t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, call, callWithZero, _success); - }); - -g.test('bgl_visibility_mismatch') - .desc('Tests the visibility in bindGroups[i].layout and pipelineLayout.bgls[i] must be matched') - .params( - kCompatTestParams - .beginSubcases() - .combine('bgVisibility', kShaderStageCombinations) - .expand('plVisibility', p => - p.encoderType === 'compute pass' - ? [GPUConst.ShaderStage.COMPUTE] - : [ - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT, - ] - ) - .combine('useU32Array', [false, true]) - ) - .fn(t => { - const { encoderType, call, callWithZero, bgVisibility, plVisibility, useU32Array } = t.params; - - const bglEntries = [ { binding: 0, - visibility: bgVisibility, - buffer: { hasDynamicOffset: useU32Array }, // default type: uniform - }, - ]; + visibility: GPUShaderStage.FRAGMENT, + sampler: { type: bgType } + }] - const bindGroup = t.createBindGroupWithLayout(bglEntries); - - const plEntries = [ - [ - { - binding: 0, - visibility: plVisibility, - buffer: { hasDynamicOffset: useU32Array }, // default type: uniform - }, - ], - ]; - - const pipeline = - encoderType === 'compute pass' - ? t.createComputePipelineWithLayout(plEntries) - : t.createRenderPipelineWithLayout(plEntries); - - const dynamicOffsets = useU32Array ? [0] : undefined; - - // Test without the dispatch/draw (should always be valid) - t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, undefined, false, true); - - // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. - t.runTest( - encoderType, - pipeline, - [bindGroup], - dynamicOffsets, - call, - callWithZero, - bgVisibility === plVisibility - ); + }) }); -g.test('bgl_resource_type_mismatch') - .desc( - ` + // Create pipeline with different layouts + const pipeline = t.createRenderPipelineWithLayout([ + [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + sampler: { + type: bglType + } + }]] + + ); + + const { encoder, validateFinish } = t.createEncoder('render pass'); + encoder.setPipeline(pipeline); + encoder.setBindGroup(0, bindGroup); + encoder.draw(3); + + validateFinish(bglType === bgType); +}); + +g.test('bgl_binding_mismatch'). +desc( + 'Tests the binding number must exist or not exist in both bindGroups[i].layout and pipelineLayout.bgls[i]' +). +params( + kCompatTestParams. + beginSubcases(). + combineWithParams([ + { bgBindings: [0, 1, 2], plBindings: [0, 1, 2], _success: true }, + { bgBindings: [0, 1, 2], plBindings: [0, 1, 3], _success: false }, + { bgBindings: [0, 2], plBindings: [0, 2], _success: true }, + { bgBindings: [0, 2], plBindings: [2, 0], _success: true }, + { bgBindings: [0, 1, 2], plBindings: [0, 1], _success: false }, + { bgBindings: [0, 1], plBindings: [0, 1, 2], _success: false }] + ). + combine('useU32Array', [false, true]) +). +fn((t) => { + const { encoderType, call, callWithZero, bgBindings, plBindings, _success, useU32Array } = + t.params; + const visibility = + encoderType === 'compute pass' ? GPUShaderStage.COMPUTE : GPUShaderStage.VERTEX; + + const bglEntries = []; + for (const binding of bgBindings) { + bglEntries.push({ + binding, + visibility, + buffer: { hasDynamicOffset: useU32Array } // default type: uniform + }); + } + const bindGroup = t.createBindGroupWithLayout(bglEntries); + + const plEntries = [[]]; + for (const binding of plBindings) { + plEntries[0].push({ + binding, + visibility, + buffer: { hasDynamicOffset: useU32Array } // default type: uniform + }); + } + const pipeline = + encoderType === 'compute pass' ? + t.createComputePipelineWithLayout(plEntries) : + t.createRenderPipelineWithLayout(plEntries); + + const dynamicOffsets = useU32Array ? new Array(bgBindings.length).fill(0) : undefined; + + // Test without the dispatch/draw (should always be valid) + t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, undefined, false, true); + + // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. + t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, call, callWithZero, _success); +}); + +g.test('bgl_visibility_mismatch'). +desc('Tests the visibility in bindGroups[i].layout and pipelineLayout.bgls[i] must be matched'). +params( + kCompatTestParams. + beginSubcases(). + combine('bgVisibility', kShaderStageCombinations). + expand('plVisibility', (p) => + p.encoderType === 'compute pass' ? + [GPUConst.ShaderStage.COMPUTE] : + [ + GPUConst.ShaderStage.VERTEX, + GPUConst.ShaderStage.FRAGMENT, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT] + + ). + combine('useU32Array', [false, true]) +). +fn((t) => { + const { encoderType, call, callWithZero, bgVisibility, plVisibility, useU32Array } = t.params; + + const bglEntries = [ + { + binding: 0, + visibility: bgVisibility, + buffer: { hasDynamicOffset: useU32Array } // default type: uniform + }]; + + const bindGroup = t.createBindGroupWithLayout(bglEntries); + + const plEntries = [ + [ + { + binding: 0, + visibility: plVisibility, + buffer: { hasDynamicOffset: useU32Array } // default type: uniform + }]]; + + + const pipeline = + encoderType === 'compute pass' ? + t.createComputePipelineWithLayout(plEntries) : + t.createRenderPipelineWithLayout(plEntries); + + const dynamicOffsets = useU32Array ? [0] : undefined; + + // Test without the dispatch/draw (should always be valid) + t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, undefined, false, true); + + // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. + t.runTest( + encoderType, + pipeline, + [bindGroup], + dynamicOffsets, + call, + callWithZero, + bgVisibility === plVisibility + ); +}); + +g.test('bgl_resource_type_mismatch'). +desc( + ` Tests the binding resource type in bindGroups[i].layout and pipelineLayout.bgls[i] must be matched - TODO: Test externalTexture ` - ) - .params( - kCompatTestParams - .beginSubcases() - .combine('bgResourceType', kResourceTypes) - .combine('plResourceType', kResourceTypes) - .expand('useU32Array', p => (p.bgResourceType === 'uniformBuf' ? [true, false] : [false])) - ) - .fn(t => { - const { - encoderType, - call, - callWithZero, - bgResourceType, - plResourceType, - useU32Array, - } = t.params; +). +params( + kCompatTestParams. + beginSubcases(). + combine('bgResourceType', kResourceTypes). + combine('plResourceType', kResourceTypes). + expand('useU32Array', (p) => p.bgResourceType === 'uniformBuf' ? [true, false] : [false]) +). +fn((t) => { + const { encoderType, call, callWithZero, bgResourceType, plResourceType, useU32Array } = + t.params; - const bglEntries = [t.createBindGroupLayoutEntry(encoderType, bgResourceType, useU32Array)]; + const bglEntries = [ + t.createBindGroupLayoutEntry(encoderType, bgResourceType, useU32Array)]; - const bindGroup = t.createBindGroupWithLayout(bglEntries); + const bindGroup = t.createBindGroupWithLayout(bglEntries); - const plEntries = [[t.createBindGroupLayoutEntry(encoderType, plResourceType, useU32Array)]]; + const plEntries = [ + [t.createBindGroupLayoutEntry(encoderType, plResourceType, useU32Array)]]; - const pipeline = - encoderType === 'compute pass' - ? t.createComputePipelineWithLayout(plEntries) - : t.createRenderPipelineWithLayout(plEntries); + const pipeline = + encoderType === 'compute pass' ? + t.createComputePipelineWithLayout(plEntries) : + t.createRenderPipelineWithLayout(plEntries); - const dynamicOffsets = useU32Array ? [0] : undefined; + const dynamicOffsets = useU32Array ? [0] : undefined; - // Test without the dispatch/draw (should always be valid) - t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, undefined, false, true); + // Test without the dispatch/draw (should always be valid) + t.runTest(encoderType, pipeline, [bindGroup], dynamicOffsets, undefined, false, true); - // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. - t.runTest( - encoderType, - pipeline, - [bindGroup], - dynamicOffsets, - call, - callWithZero, - bgResourceType === plResourceType - ); - }); + // Test with the dispatch/draw, to make sure the validation happens in dispatch/draw. + t.runTest( + encoderType, + pipeline, + [bindGroup], + dynamicOffsets, + call, + callWithZero, + bgResourceType === plResourceType + ); +}); -g.test('empty_bind_group_layouts_requires_empty_bind_groups,compute_pass') - .desc( - ` +g.test('empty_bind_group_layouts_requires_empty_bind_groups,compute_pass'). +desc( + ` Test that a compute pipeline with empty bind groups layouts requires empty bind groups to be set. ` - ) - .params(u => - u - .combine('bindGroupLayoutEntryCount', [3, 4]) - .combine('computeCommand', ['dispatchIndirect', 'dispatch']) - ) - .fn(t => { - const { bindGroupLayoutEntryCount, computeCommand } = t.params; +). +params((u) => +u. +combine('bindGroupLayoutEntryCount', [3, 4]). +combine('computeCommand', ['dispatchIndirect', 'dispatch']) +). +fn((t) => { + const { bindGroupLayoutEntryCount, computeCommand } = t.params; - const emptyBGLCount = 4; - const emptyBGL = t.device.createBindGroupLayout({ entries: [] }); - const emptyBGLs = []; - for (let i = 0; i < emptyBGLCount; i++) { - emptyBGLs.push(emptyBGL); - } + const emptyBGLCount = 4; + const emptyBGL = t.device.createBindGroupLayout({ entries: [] }); + const emptyBGLs = []; + for (let i = 0; i < emptyBGLCount; i++) { + emptyBGLs.push(emptyBGL); + } - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: emptyBGLs, - }); - - const pipeline = t.device.createComputePipeline({ - layout: pipelineLayout, - compute: { - module: t.device.createShaderModule({ - code: '@compute @workgroup_size(1) fn main() {}', - }), - entryPoint: 'main', - }, - }); - - const emptyBindGroup = t.device.createBindGroup({ - layout: emptyBGL, - entries: [], - }); - - const encoder = t.device.createCommandEncoder(); - const computePass = encoder.beginComputePass(); - computePass.setPipeline(pipeline); - for (let i = 0; i < bindGroupLayoutEntryCount; i++) { - computePass.setBindGroup(i, emptyBindGroup); - } - - t.doCompute(computePass, computeCommand, true); - computePass.end(); - - const success = bindGroupLayoutEntryCount === emptyBGLCount; - - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: emptyBGLs }); -g.test('empty_bind_group_layouts_requires_empty_bind_groups,render_pass') - .desc( - ` + const pipeline = t.device.createComputePipeline({ + layout: pipelineLayout, + compute: { + module: t.device.createShaderModule({ + code: '@compute @workgroup_size(1) fn main() {}' + }), + entryPoint: 'main' + } + }); + + const emptyBindGroup = t.device.createBindGroup({ + layout: emptyBGL, + entries: [] + }); + + const encoder = t.device.createCommandEncoder(); + const computePass = encoder.beginComputePass(); + computePass.setPipeline(pipeline); + for (let i = 0; i < bindGroupLayoutEntryCount; i++) { + computePass.setBindGroup(i, emptyBindGroup); + } + + t.doCompute(computePass, computeCommand, true); + computePass.end(); + + const success = bindGroupLayoutEntryCount === emptyBGLCount; + + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('empty_bind_group_layouts_requires_empty_bind_groups,render_pass'). +desc( + ` Test that a render pipeline with empty bind groups layouts requires empty bind groups to be set. ` - ) - .params(u => - u - .combine('bindGroupLayoutEntryCount', [3, 4]) - .combine('renderCommand', ['draw', 'drawIndexed', 'drawIndirect', 'drawIndexedIndirect']) - ) - .fn(t => { - const { bindGroupLayoutEntryCount, renderCommand } = t.params; +). +params((u) => +u. +combine('bindGroupLayoutEntryCount', [3, 4]). +combine('renderCommand', [ +'draw', +'drawIndexed', +'drawIndirect', +'drawIndexedIndirect'] +) +). +fn((t) => { + const { bindGroupLayoutEntryCount, renderCommand } = t.params; - const emptyBGLCount = 4; - const emptyBGL = t.device.createBindGroupLayout({ entries: [] }); - const emptyBGLs = []; - for (let i = 0; i < emptyBGLCount; i++) { - emptyBGLs.push(emptyBGL); - } + const emptyBGLCount = 4; + const emptyBGL = t.device.createBindGroupLayout({ entries: [] }); + const emptyBGLs = []; + for (let i = 0; i < emptyBGLCount; i++) { + emptyBGLs.push(emptyBGL); + } - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: emptyBGLs, - }); - - const colorFormat = 'rgba8unorm'; - const pipeline = t.device.createRenderPipeline({ - layout: pipelineLayout, - vertex: { - module: t.device.createShaderModule({ - code: `@vertex fn main() -> @builtin(position) vec4 { return vec4(); }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() {}`, - }), - entryPoint: 'main', - targets: [{ format: colorFormat, writeMask: 0 }], - }, - }); - - const emptyBindGroup = t.device.createBindGroup({ - layout: emptyBGL, - entries: [], - }); - - const encoder = t.device.createCommandEncoder(); - - const attachmentTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: attachmentTexture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - - renderPass.setPipeline(pipeline); - for (let i = 0; i < bindGroupLayoutEntryCount; i++) { - renderPass.setBindGroup(i, emptyBindGroup); - } - t.doRender(renderPass, renderCommand, true); - renderPass.end(); - - const success = bindGroupLayoutEntryCount === emptyBGLCount; - - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: emptyBGLs }); + + const colorFormat = 'rgba8unorm'; + const pipeline = t.device.createRenderPipeline({ + layout: pipelineLayout, + vertex: { + module: t.device.createShaderModule({ + code: `@vertex fn main() -> @builtin(position) vec4 { return vec4(); }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() {}` + }), + entryPoint: 'main', + targets: [{ format: colorFormat, writeMask: 0 }] + } + }); + + const emptyBindGroup = t.device.createBindGroup({ + layout: emptyBGL, + entries: [] + }); + + const encoder = t.device.createCommandEncoder(); + + const attachmentTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }); + + const renderPass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: attachmentTexture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + + renderPass.setPipeline(pipeline); + for (let i = 0; i < bindGroupLayoutEntryCount; i++) { + renderPass.setBindGroup(i, emptyBindGroup); + } + t.doRender(renderPass, renderCommand, true); + renderPass.end(); + + const success = bindGroupLayoutEntryCount === emptyBGLCount; + + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/begin_end.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/begin_end.spec.js index 040b2790a18..0fd90049d19 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/begin_end.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/begin_end.spec.js @@ -1,163 +1,117 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation for encoding begin/endable queries. - -TODO: pipeline statistics queries are removed from core; consider moving tests to another suite. -TODO: tests for pipeline statistics queries: -- balance: { - - begin 0, end 1 - - begin 1, end 0 - - begin 1, end 1 - - begin 2, end 2 - - } - - x= { - - render pass + pipeline statistics - - compute pass + pipeline statistics - - } -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../validation_test.js'; import { beginRenderPassWithQuerySet, createQuerySetWithType } from './common.js'; export const g = makeTestGroup(ValidationTest); -g.test('occlusion_query,begin_end_balance') - .desc( - ` +g.test('occlusion_query,begin_end_balance'). +desc( + ` Tests that begin/end occlusion queries mismatch on render pass: - begin n queries, then end m queries, for various n and m. ` - ) - .paramsSubcasesOnly([ - { begin: 0, end: 1 }, - { begin: 1, end: 0 }, - { begin: 1, end: 1 }, // control case - { begin: 1, end: 2 }, - { begin: 2, end: 1 }, - ]) - .fn(t => { - const { begin, end } = t.params; +). +paramsSubcasesOnly([ +{ begin: 0, end: 1 }, +{ begin: 1, end: 0 }, +{ begin: 1, end: 1 }, // control case +{ begin: 1, end: 2 }, +{ begin: 2, end: 1 }] +). +fn((t) => { + const { begin, end } = t.params; - const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); + const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); - const encoder = t.createEncoder('render pass', { occlusionQuerySet }); - for (let i = 0; i < begin; i++) { - encoder.encoder.beginOcclusionQuery(i); - } - for (let j = 0; j < end; j++) { - encoder.encoder.endOcclusionQuery(); - } - encoder.validateFinishAndSubmit(begin === end, true); - }); + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + for (let i = 0; i < begin; i++) { + encoder.encoder.beginOcclusionQuery(i); + } + for (let j = 0; j < end; j++) { + encoder.encoder.endOcclusionQuery(); + } + encoder.validateFinishAndSubmit(begin === end, true); +}); -g.test('occlusion_query,begin_end_invalid_nesting') - .desc( - ` +g.test('occlusion_query,begin_end_invalid_nesting'). +desc( + ` Tests the invalid nesting of begin/end occlusion queries: - begin index 0, end, begin index 0, end (control case) - begin index 0, begin index 0, end, end - begin index 0, begin index 1, end, end ` - ) - .paramsSubcasesOnly([ - { calls: [0, 'end', 1, 'end'], _valid: true }, // control case - { calls: [0, 0, 'end', 'end'], _valid: false }, - { calls: [0, 1, 'end', 'end'], _valid: false }, - ]) - .fn(t => { - const { calls, _valid } = t.params; +). +paramsSubcasesOnly([ +{ calls: [0, 'end', 1, 'end'], _valid: true }, // control case +{ calls: [0, 0, 'end', 'end'], _valid: false }, +{ calls: [0, 1, 'end', 'end'], _valid: false }] +). +fn((t) => { + const { calls, _valid } = t.params; - const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); + const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); - const encoder = t.createEncoder('render pass', { occlusionQuerySet }); - for (const i of calls) { - if (i !== 'end') { - encoder.encoder.beginOcclusionQuery(i); - } else { - encoder.encoder.endOcclusionQuery(); - } + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + for (const i of calls) { + if (i !== 'end') { + encoder.encoder.beginOcclusionQuery(i); + } else { + encoder.encoder.endOcclusionQuery(); } - encoder.validateFinishAndSubmit(_valid, true); - }); + } + encoder.validateFinishAndSubmit(_valid, true); +}); -g.test('occlusion_query,disjoint_queries_with_same_query_index') - .desc( - ` +g.test('occlusion_query,disjoint_queries_with_same_query_index'). +desc( + ` Tests that two disjoint occlusion queries cannot be begun with same query index on same render pass: - begin index 0, end, begin index 0, end - call on {same (invalid), different (control case)} render pass ` - ) - .paramsSubcasesOnly(u => u.combine('isOnSameRenderPass', [false, true])) - .fn(t => { - const querySet = createQuerySetWithType(t, 'occlusion', 1); +). +paramsSubcasesOnly((u) => u.combine('isOnSameRenderPass', [false, true])). +fn((t) => { + const querySet = createQuerySetWithType(t, 'occlusion', 1); - const encoder = t.device.createCommandEncoder(); - const pass = beginRenderPassWithQuerySet(t, encoder, querySet); + const encoder = t.device.createCommandEncoder(); + const pass = beginRenderPassWithQuerySet(t, encoder, querySet); + pass.beginOcclusionQuery(0); + pass.endOcclusionQuery(); + + if (t.params.isOnSameRenderPass) { pass.beginOcclusionQuery(0); pass.endOcclusionQuery(); + pass.end(); + } else { + pass.end(); + const otherPass = beginRenderPassWithQuerySet(t, encoder, querySet); + otherPass.beginOcclusionQuery(0); + otherPass.endOcclusionQuery(); + otherPass.end(); + } - if (t.params.isOnSameRenderPass) { - pass.beginOcclusionQuery(0); - pass.endOcclusionQuery(); - pass.end(); - } else { - pass.end(); - const otherPass = beginRenderPassWithQuerySet(t, encoder, querySet); - otherPass.beginOcclusionQuery(0); - otherPass.endOcclusionQuery(); - otherPass.end(); - } + t.expectValidationError(() => { + encoder.finish(); + }, t.params.isOnSameRenderPass); +}); - t.expectValidationError(() => { - encoder.finish(); - }, t.params.isOnSameRenderPass); - }); - -g.test('nesting') - .desc( - ` -Tests that whether it's allowed to nest various types of queries: -- call {occlusion, pipeline-statistics, timestamp} query in same type or other type. +g.test('nesting'). +desc( ` - ) - .paramsSubcasesOnly([ - { begin: 'occlusion', nest: 'timestamp', end: 'occlusion', _valid: true }, - { begin: 'occlusion', nest: 'occlusion', end: 'occlusion', _valid: false }, - { begin: 'occlusion', nest: 'pipeline-statistics', end: 'occlusion', _valid: true }, - { - begin: 'occlusion', - nest: 'pipeline-statistics', - end: 'pipeline-statistics', - _valid: true, - }, - { - begin: 'pipeline-statistics', - nest: 'timestamp', - end: 'pipeline-statistics', - _valid: true, - }, - { - begin: 'pipeline-statistics', - nest: 'pipeline-statistics', - end: 'pipeline-statistics', - _valid: false, - }, - { - begin: 'pipeline-statistics', - nest: 'occlusion', - end: 'pipeline-statistics', - _valid: true, - }, - { begin: 'pipeline-statistics', nest: 'occlusion', end: 'occlusion', _valid: true }, - { begin: 'timestamp', nest: 'occlusion', end: 'occlusion', _valid: true }, - { - begin: 'timestamp', - nest: 'pipeline-statistics', - end: 'pipeline-statistics', - _valid: true, - }, - ]) - .unimplemented(); +Tests that whether it's allowed to nest various types of queries: +- call {occlusion, timestamp} query in same type or other type. + ` +). +paramsSubcasesOnly([ +{ begin: 'occlusion', nest: 'timestamp', end: 'occlusion', _valid: true }, +{ begin: 'occlusion', nest: 'occlusion', end: 'occlusion', _valid: false }, +{ begin: 'timestamp', nest: 'occlusion', end: 'occlusion', _valid: true }] +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/common.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/common.js index 4284b2a318d..bd14a510243 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/common.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/common.js @@ -1,30 +1,37 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export function createQuerySetWithType(t, type, count) { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export function createQuerySetWithType( +t, +type, +count) +{ return t.device.createQuerySet({ type, - count, + count }); } -export function beginRenderPassWithQuerySet(t, encoder, querySet) { - const view = t.device - .createTexture({ - format: 'rgba8unorm', - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - .createView(); +export function beginRenderPassWithQuerySet( +t, +encoder, +querySet) +{ + const view = t.device. + createTexture({ + format: 'rgba8unorm', + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }). + createView(); return encoder.beginRenderPass({ colorAttachments: [ - { - view, - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view, + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }], - occlusionQuerySet: querySet, + occlusionQuerySet: querySet }); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/general.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/general.spec.js index bb5722d4f06..984da884301 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/general.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/general.spec.js @@ -1,14 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` -TODO: pipeline statistics queries are removed from core; consider moving tests to another suite. -TODO: -- Start a pipeline statistics query in all possible encoders: - - queryIndex {in, out of} range for GPUQuerySet - - GPUQuerySet {valid, invalid, device mismatched} - - x ={render pass, compute pass} encoder -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Validation for encoding queries. +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kQueryTypes } from '../../../../capability_info.js'; import { ValidationTest } from '../../validation_test.js'; @@ -16,143 +10,167 @@ import { createQuerySetWithType } from './common.js'; export const g = makeTestGroup(ValidationTest); -g.test('occlusion_query,query_type') - .desc( - ` +g.test('occlusion_query,query_type'). +desc( + ` Tests that set occlusion query set with all types in render pass descriptor: -- type {occlusion (control case), pipeline statistics, timestamp} +- type {occlusion (control case), timestamp} - {undefined} for occlusion query set in render pass descriptor ` - ) - .params(u => u.combine('type', [undefined, ...kQueryTypes])) - .beforeAllSubcases(t => { - const { type } = t.params; - if (type) { - t.selectDeviceForQueryTypeOrSkipTestCase(type); - } - }) - .fn(t => { - const type = t.params.type; - const querySet = type === undefined ? undefined : createQuerySetWithType(t, type, 1); +). +params((u) => u.combine('type', [undefined, ...kQueryTypes])). +beforeAllSubcases((t) => { + const { type } = t.params; + if (type) { + t.selectDeviceForQueryTypeOrSkipTestCase(type); + } +}). +fn((t) => { + const type = t.params.type; + const querySet = type === undefined ? undefined : createQuerySetWithType(t, type, 1); - const encoder = t.createEncoder('render pass', { occlusionQuerySet: querySet }); - encoder.encoder.beginOcclusionQuery(0); - encoder.encoder.endOcclusionQuery(); - encoder.validateFinish(type === 'occlusion'); - }); + const encoder = t.createEncoder('render pass', { occlusionQuerySet: querySet }); + encoder.encoder.beginOcclusionQuery(0); + encoder.encoder.endOcclusionQuery(); + encoder.validateFinish(type === 'occlusion'); +}); -g.test('occlusion_query,invalid_query_set') - .desc( - ` +g.test('occlusion_query,invalid_query_set'). +desc( + ` Tests that begin occlusion query with a invalid query set that failed during creation. ` - ) - .paramsSubcasesOnly(u => u.combine('querySetState', ['valid', 'invalid'])) - .fn(t => { - const occlusionQuerySet = t.createQuerySetWithState(t.params.querySetState); +). +paramsSubcasesOnly((u) => u.combine('querySetState', ['valid', 'invalid'])). +fn((t) => { + const occlusionQuerySet = t.createQuerySetWithState(t.params.querySetState); - const encoder = t.createEncoder('render pass', { occlusionQuerySet }); - encoder.encoder.beginOcclusionQuery(0); - encoder.encoder.endOcclusionQuery(); - encoder.validateFinishAndSubmitGivenState(t.params.querySetState); - }); + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + encoder.encoder.beginOcclusionQuery(0); + encoder.encoder.endOcclusionQuery(); + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); +}); -g.test('occlusion_query,query_index') - .desc( - ` +g.test('occlusion_query,query_index'). +desc( + ` Tests that begin occlusion query with query index: - queryIndex {in, out of} range for GPUQuerySet ` - ) - .paramsSubcasesOnly(u => u.combine('queryIndex', [0, 2])) - .fn(t => { - const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); +). +paramsSubcasesOnly((u) => u.combine('queryIndex', [0, 2])). +fn((t) => { + const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); - const encoder = t.createEncoder('render pass', { occlusionQuerySet }); - encoder.encoder.beginOcclusionQuery(t.params.queryIndex); - encoder.encoder.endOcclusionQuery(); - encoder.validateFinish(t.params.queryIndex < 2); - }); + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + encoder.encoder.beginOcclusionQuery(t.params.queryIndex); + encoder.encoder.endOcclusionQuery(); + encoder.validateFinish(t.params.queryIndex < 2); +}); -g.test('timestamp_query,query_type_and_index') - .desc( - ` +g.test('writeTimestamp,query_type_and_index'). +desc( + ` Tests that write timestamp to all types of query set on all possible encoders: -- type {occlusion, pipeline statistics, timestamp} +- type {occlusion, timestamp} - queryIndex {in, out of} range for GPUQuerySet - x= {non-pass} encoder - ` - ) - .params(u => - u - .combine('type', kQueryTypes) - .beginSubcases() - .expand('queryIndex', p => (p.type === 'timestamp' ? [0, 2] : [0])) - ) - .beforeAllSubcases(t => { - const { type } = t.params; - // writeTimestamp is only available for devices that enable the 'timestamp-query' feature. - const queryTypes = ['timestamp']; - if (type !== 'timestamp') { - queryTypes.push(type); - } +TODO: writeTimestamp is removed from the spec so it's skipped if it TypeErrors. +` +). +params((u) => +u. +combine('type', kQueryTypes). +beginSubcases(). +expand('queryIndex', (p) => p.type === 'timestamp' ? [0, 2] : [0]) +). +beforeAllSubcases((t) => { + const { type } = t.params; - t.selectDeviceForQueryTypeOrSkipTestCase(queryTypes); - }) - .fn(t => { - const { type, queryIndex } = t.params; + // writeTimestamp is only available for devices that enable the 'timestamp-query' feature. + const queryTypes = ['timestamp']; + if (type !== 'timestamp') { + queryTypes.push(type); + } - const count = 2; - const querySet = createQuerySetWithType(t, type, count); + t.selectDeviceForQueryTypeOrSkipTestCase(queryTypes); +}). +fn((t) => { + const { type, queryIndex } = t.params; + + const count = 2; + const querySet = createQuerySetWithType(t, type, count); + + const encoder = t.createEncoder('non-pass'); + try { - const encoder = t.createEncoder('non-pass'); encoder.encoder.writeTimestamp(querySet, queryIndex); - encoder.validateFinish(type === 'timestamp' && queryIndex < count); - }); + } catch (ex) { + t.skipIf(ex instanceof TypeError, 'writeTimestamp is actually not available'); + } + encoder.validateFinish(type === 'timestamp' && queryIndex < count); +}); -g.test('timestamp_query,invalid_query_set') - .desc( - ` +g.test('writeTimestamp,invalid_query_set'). +desc( + ` Tests that write timestamp to a invalid query set that failed during creation: - x= {non-pass} encoder + +TODO: writeTimestamp is removed from the spec so it's skipped if it TypeErrors. +` +). +paramsSubcasesOnly((u) => u.combine('querySetState', ['valid', 'invalid'])). +beforeAllSubcases((t) => { + t.selectDeviceForQueryTypeOrSkipTestCase('timestamp'); +}). +fn((t) => { + const { querySetState } = t.params; + + const querySet = t.createQuerySetWithState(querySetState, { + type: 'timestamp', + count: 2 + }); + + const encoder = t.createEncoder('non-pass'); + try { + + encoder.encoder.writeTimestamp(querySet, 0); + } catch (ex) { + t.skipIf(ex instanceof TypeError, 'writeTimestamp is actually not available'); + } + encoder.validateFinish(querySetState !== 'invalid'); +}); + +g.test('writeTimestamp,device_mismatch'). +desc( + `Tests writeTimestamp cannot be called with a query set created from another device + + TODO: writeTimestamp is removed from the spec so it's skipped if it TypeErrors. ` - ) - .paramsSubcasesOnly(u => u.combine('querySetState', ['valid', 'invalid'])) - .beforeAllSubcases(t => { - t.selectDeviceForQueryTypeOrSkipTestCase('timestamp'); - }) - .fn(t => { - const { querySetState } = t.params; +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectDeviceForQueryTypeOrSkipTestCase('timestamp'); + t.selectMismatchedDeviceOrSkipTestCase('timestamp-query'); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const querySet = t.createQuerySetWithState(querySetState, { - type: 'timestamp', - count: 2, - }); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.writeTimestamp(querySet, 0); - encoder.validateFinish(querySetState !== 'invalid'); + const querySet = sourceDevice.createQuerySet({ + type: 'timestamp', + count: 2 }); + t.trackForCleanup(querySet); -g.test('timestamp_query,device_mismatch') - .desc('Tests writeTimestamp cannot be called with a query set created from another device') - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectDeviceForQueryTypeOrSkipTestCase('timestamp'); - t.selectMismatchedDeviceOrSkipTestCase('timestamp-query'); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const encoder = t.createEncoder('non-pass'); + try { - const querySet = sourceDevice.createQuerySet({ - type: 'timestamp', - count: 2, - }); - t.trackForCleanup(querySet); - - const encoder = t.createEncoder('non-pass'); encoder.encoder.writeTimestamp(querySet, 0); - encoder.validateFinish(!mismatched); - }); + } catch (ex) { + t.skipIf(ex instanceof TypeError, 'writeTimestamp is actually not available'); + } + encoder.validateFinish(!mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/pipeline_statistics.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/pipeline_statistics.spec.js deleted file mode 100644 index 394c2beb0b4..00000000000 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/pipeline_statistics.spec.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` -Validation for encoding pipeline statistics queries. -Excludes query begin/end balance and nesting (begin_end.spec.ts) -and querySet/queryIndex (general.spec.ts). - -TODO: pipeline statistics queries are removed from core; consider moving tests to another suite. -TODO: -- Test pipelineStatistics with {undefined, empty, duplicated, full (control case)} values -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; -import { ValidationTest } from '../../validation_test.js'; - -export const g = makeTestGroup(ValidationTest); diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/resolveQuerySet.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/resolveQuerySet.spec.js index 54b1b0e1124..d0b19e4e04f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/resolveQuerySet.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/queries/resolveQuerySet.spec.js @@ -1,10 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for resolveQuerySet. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; -import { GPUConst } from '../../../../constants.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js';import { GPUConst } from '../../../../constants.js'; import { kResourceStates } from '../../../../gpu_test.js'; import { ValidationTest } from '../../validation_test.js'; @@ -12,172 +10,172 @@ export const g = makeTestGroup(ValidationTest); export const kQueryCount = 2; -g.test('queryset_and_destination_buffer_state') - .desc( - ` +g.test('queryset_and_destination_buffer_state'). +desc( + ` Tests that resolve query set must be with valid query set and destination buffer. - {invalid, destroyed} GPUQuerySet results in validation error. - {invalid, destroyed} destination buffer results in validation error. ` - ) - .params(u => - u // - .combine('querySetState', kResourceStates) - .combine('destinationState', kResourceStates) - ) - .fn(t => { - const { querySetState, destinationState } = t.params; +). +params((u) => +u // +.combine('querySetState', kResourceStates). +combine('destinationState', kResourceStates) +). +fn((t) => { + const { querySetState, destinationState } = t.params; - const shouldBeValid = querySetState !== 'invalid' && destinationState !== 'invalid'; - const shouldSubmitSuccess = querySetState === 'valid' && destinationState === 'valid'; + const shouldBeValid = querySetState !== 'invalid' && destinationState !== 'invalid'; + const shouldSubmitSuccess = querySetState === 'valid' && destinationState === 'valid'; - const querySet = t.createQuerySetWithState(querySetState); + const querySet = t.createQuerySetWithState(querySetState); - const destination = t.createBufferWithState(destinationState, { - size: kQueryCount * 8, - usage: GPUBufferUsage.QUERY_RESOLVE, - }); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, 0, 1, destination, 0); - encoder.validateFinishAndSubmit(shouldBeValid, shouldSubmitSuccess); + const destination = t.createBufferWithState(destinationState, { + size: kQueryCount * 8, + usage: GPUBufferUsage.QUERY_RESOLVE }); -g.test('first_query_and_query_count') - .desc( - ` + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, 0, 1, destination, 0); + encoder.validateFinishAndSubmit(shouldBeValid, shouldSubmitSuccess); +}); + +g.test('first_query_and_query_count'). +desc( + ` Tests that resolve query set with invalid firstQuery and queryCount: - firstQuery and/or queryCount out of range ` - ) - .paramsSubcasesOnly([ - { firstQuery: 0, queryCount: kQueryCount }, // control case - { firstQuery: 0, queryCount: kQueryCount + 1 }, - { firstQuery: 1, queryCount: kQueryCount }, - { firstQuery: kQueryCount, queryCount: 1 }, - ]) - .fn(t => { - const { firstQuery, queryCount } = t.params; +). +paramsSubcasesOnly([ +{ firstQuery: 0, queryCount: kQueryCount }, // control case +{ firstQuery: 0, queryCount: kQueryCount + 1 }, +{ firstQuery: 1, queryCount: kQueryCount }, +{ firstQuery: kQueryCount, queryCount: 1 }] +). +fn((t) => { + const { firstQuery, queryCount } = t.params; - const querySet = t.device.createQuerySet({ type: 'occlusion', count: kQueryCount }); - const destination = t.device.createBuffer({ - size: kQueryCount * 8, - usage: GPUBufferUsage.QUERY_RESOLVE, - }); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, firstQuery, queryCount, destination, 0); - encoder.validateFinish(firstQuery + queryCount <= kQueryCount); + const querySet = t.device.createQuerySet({ type: 'occlusion', count: kQueryCount }); + const destination = t.device.createBuffer({ + size: kQueryCount * 8, + usage: GPUBufferUsage.QUERY_RESOLVE }); -g.test('destination_buffer_usage') - .desc( - ` + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, firstQuery, queryCount, destination, 0); + encoder.validateFinish(firstQuery + queryCount <= kQueryCount); +}); + +g.test('destination_buffer_usage'). +desc( + ` Tests that resolve query set with invalid destinationBuffer: - Buffer usage {with, without} QUERY_RESOLVE ` - ) - .paramsSubcasesOnly(u => - u // - .combine('bufferUsage', [ - GPUConst.BufferUsage.STORAGE, - GPUConst.BufferUsage.QUERY_RESOLVE, // control case - ]) - ) - .fn(t => { - const querySet = t.device.createQuerySet({ type: 'occlusion', count: kQueryCount }); - const destination = t.device.createBuffer({ - size: kQueryCount * 8, - usage: t.params.bufferUsage, - }); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, 0, kQueryCount, destination, 0); - encoder.validateFinish(t.params.bufferUsage === GPUConst.BufferUsage.QUERY_RESOLVE); +). +paramsSubcasesOnly((u) => +u // +.combine('bufferUsage', [ +GPUConst.BufferUsage.STORAGE, +GPUConst.BufferUsage.QUERY_RESOLVE // control case +]) +). +fn((t) => { + const querySet = t.device.createQuerySet({ type: 'occlusion', count: kQueryCount }); + const destination = t.device.createBuffer({ + size: kQueryCount * 8, + usage: t.params.bufferUsage }); -g.test('destination_offset_alignment') - .desc( - ` + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, 0, kQueryCount, destination, 0); + encoder.validateFinish(t.params.bufferUsage === GPUConst.BufferUsage.QUERY_RESOLVE); +}); + +g.test('destination_offset_alignment'). +desc( + ` Tests that resolve query set with invalid destinationOffset: - destinationOffset is not a multiple of 256 ` - ) - .paramsSubcasesOnly(u => u.combine('destinationOffset', [0, 128, 256, 384])) - .fn(t => { - const { destinationOffset } = t.params; - const querySet = t.device.createQuerySet({ type: 'occlusion', count: kQueryCount }); - const destination = t.device.createBuffer({ - size: 512, - usage: GPUBufferUsage.QUERY_RESOLVE, - }); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, 0, kQueryCount, destination, destinationOffset); - encoder.validateFinish(destinationOffset % 256 === 0); +). +paramsSubcasesOnly((u) => u.combine('destinationOffset', [0, 128, 256, 384])). +fn((t) => { + const { destinationOffset } = t.params; + const querySet = t.device.createQuerySet({ type: 'occlusion', count: kQueryCount }); + const destination = t.device.createBuffer({ + size: 512, + usage: GPUBufferUsage.QUERY_RESOLVE }); -g.test('resolve_buffer_oob') - .desc( - ` + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, 0, kQueryCount, destination, destinationOffset); + encoder.validateFinish(destinationOffset % 256 === 0); +}); + +g.test('resolve_buffer_oob'). +desc( + ` Tests that resolve query set with the size oob: - The size of destinationBuffer - destinationOffset < queryCount * 8 ` - ) - .paramsSubcasesOnly(u => - u.combineWithParams([ - { queryCount: 2, bufferSize: 16, destinationOffset: 0, _success: true }, - { queryCount: 3, bufferSize: 16, destinationOffset: 0, _success: false }, - { queryCount: 2, bufferSize: 16, destinationOffset: 256, _success: false }, - { queryCount: 2, bufferSize: 272, destinationOffset: 256, _success: true }, - { queryCount: 2, bufferSize: 264, destinationOffset: 256, _success: false }, - ]) - ) - .fn(t => { - const { queryCount, bufferSize, destinationOffset, _success } = t.params; - const querySet = t.device.createQuerySet({ type: 'occlusion', count: queryCount }); - const destination = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.QUERY_RESOLVE, - }); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, 0, queryCount, destination, destinationOffset); - encoder.validateFinish(_success); +). +paramsSubcasesOnly((u) => +u.combineWithParams([ +{ queryCount: 2, bufferSize: 16, destinationOffset: 0, _success: true }, +{ queryCount: 3, bufferSize: 16, destinationOffset: 0, _success: false }, +{ queryCount: 2, bufferSize: 16, destinationOffset: 256, _success: false }, +{ queryCount: 2, bufferSize: 272, destinationOffset: 256, _success: true }, +{ queryCount: 2, bufferSize: 264, destinationOffset: 256, _success: false }] +) +). +fn((t) => { + const { queryCount, bufferSize, destinationOffset, _success } = t.params; + const querySet = t.device.createQuerySet({ type: 'occlusion', count: queryCount }); + const destination = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.QUERY_RESOLVE }); -g.test('query_set_buffer,device_mismatch') - .desc( - 'Tests resolveQuerySet cannot be called with a query set or destination buffer created from another device' - ) - .paramsSubcasesOnly([ - { querySetMismatched: false, bufferMismatched: false }, // control case - { querySetMismatched: true, bufferMismatched: false }, - { querySetMismatched: false, bufferMismatched: true }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { querySetMismatched, bufferMismatched } = t.params; + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, 0, queryCount, destination, destinationOffset); + encoder.validateFinish(_success); +}); - const kQueryCount = 1; +g.test('query_set_buffer,device_mismatch'). +desc( + 'Tests resolveQuerySet cannot be called with a query set or destination buffer created from another device' +). +paramsSubcasesOnly([ +{ querySetMismatched: false, bufferMismatched: false }, // control case +{ querySetMismatched: true, bufferMismatched: false }, +{ querySetMismatched: false, bufferMismatched: true }] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { querySetMismatched, bufferMismatched } = t.params; - const querySetDevice = querySetMismatched ? t.mismatchedDevice : t.device; - const querySet = querySetDevice.createQuerySet({ - type: 'occlusion', - count: kQueryCount, - }); - t.trackForCleanup(querySet); + const kQueryCount = 1; - const bufferDevice = bufferMismatched ? t.mismatchedDevice : t.device; - const buffer = bufferDevice.createBuffer({ - size: kQueryCount * 8, - usage: GPUBufferUsage.QUERY_RESOLVE, - }); - t.trackForCleanup(buffer); - - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, 0, kQueryCount, buffer, 0); - encoder.validateFinish(!(querySetMismatched || bufferMismatched)); + const querySetDevice = querySetMismatched ? t.mismatchedDevice : t.device; + const querySet = querySetDevice.createQuerySet({ + type: 'occlusion', + count: kQueryCount }); + t.trackForCleanup(querySet); + + const bufferDevice = bufferMismatched ? t.mismatchedDevice : t.device; + const buffer = bufferDevice.createBuffer({ + size: kQueryCount * 8, + usage: GPUBufferUsage.QUERY_RESOLVE + }); + t.trackForCleanup(buffer); + + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, 0, kQueryCount, buffer, 0); + encoder.validateFinish(!(querySetMismatched || bufferMismatched)); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/render_bundle.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/render_bundle.spec.js index 45b75ae45a8..bb752533a9c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/render_bundle.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/encoding/render_bundle.spec.js @@ -1,259 +1,246 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests execution of render bundles. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { kDepthStencilFormats, kTextureFormatInfo } from '../../../format_info.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { kDepthStencilFormats } from '../../../format_info.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('empty_bundle_list') - .desc( - ` +g.test('empty_bundle_list'). +desc( + ` Test that it is valid to execute an empty list of render bundles ` - ) - .fn(t => { - const encoder = t.createEncoder('render pass'); - encoder.encoder.executeBundles([]); - encoder.validateFinish(true); - }); +). +fn((t) => { + const encoder = t.createEncoder('render pass'); + encoder.encoder.executeBundles([]); + encoder.validateFinish(true); +}); -g.test('device_mismatch') - .desc( - ` +g.test('device_mismatch'). +desc( + ` Tests executeBundles cannot be called with render bundles created from another device Test with two bundles to make sure all bundles can be validated: - bundle0 and bundle1 from same device - bundle0 and bundle1 from different device ` - ) - .paramsSubcasesOnly([ - { bundle0Mismatched: false, bundle1Mismatched: false }, // control case - { bundle0Mismatched: true, bundle1Mismatched: false }, - { bundle0Mismatched: false, bundle1Mismatched: true }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { bundle0Mismatched, bundle1Mismatched } = t.params; +). +paramsSubcasesOnly([ +{ bundle0Mismatched: false, bundle1Mismatched: false }, // control case +{ bundle0Mismatched: true, bundle1Mismatched: false }, +{ bundle0Mismatched: false, bundle1Mismatched: true }] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { bundle0Mismatched, bundle1Mismatched } = t.params; - const descriptor = { - colorFormats: ['rgba8unorm'], - }; + const descriptor = { + colorFormats: ['rgba8unorm'] + }; - const bundle0Device = bundle0Mismatched ? t.mismatchedDevice : t.device; - const bundle0 = bundle0Device.createRenderBundleEncoder(descriptor).finish(); + const bundle0Device = bundle0Mismatched ? t.mismatchedDevice : t.device; + const bundle0 = bundle0Device.createRenderBundleEncoder(descriptor).finish(); - const bundle1Device = bundle1Mismatched ? t.mismatchedDevice : t.device; - const bundle1 = bundle1Device.createRenderBundleEncoder(descriptor).finish(); + const bundle1Device = bundle1Mismatched ? t.mismatchedDevice : t.device; + const bundle1 = bundle1Device.createRenderBundleEncoder(descriptor).finish(); - const encoder = t.createEncoder('render pass'); - encoder.encoder.executeBundles([bundle0, bundle1]); + const encoder = t.createEncoder('render pass'); + encoder.encoder.executeBundles([bundle0, bundle1]); - encoder.validateFinish(!(bundle0Mismatched || bundle1Mismatched)); - }); + encoder.validateFinish(!(bundle0Mismatched || bundle1Mismatched)); +}); -g.test('color_formats_mismatch') - .desc( - ` +g.test('color_formats_mismatch'). +desc( + ` Tests executeBundles cannot be called with render bundles that do match the colorFormats of the render pass. This includes: - formats don't match - formats match but are in a different order - formats match but there is a different count ` - ) - .params(u => - u.combineWithParams([ - { - bundleFormats: ['bgra8unorm', 'rg8unorm'], - passFormats: ['bgra8unorm', 'rg8unorm'], - _compatible: true, - }, // control case - { - bundleFormats: ['bgra8unorm', 'rg8unorm'], - passFormats: ['bgra8unorm', 'bgra8unorm'], - _compatible: false, - }, - { - bundleFormats: ['bgra8unorm', 'rg8unorm'], - passFormats: ['rg8unorm', 'bgra8unorm'], - _compatible: false, - }, - { - bundleFormats: ['bgra8unorm', 'rg8unorm', 'rgba8unorm'], - passFormats: ['rg8unorm', 'bgra8unorm'], - _compatible: false, - }, - { - bundleFormats: ['bgra8unorm', 'rg8unorm'], - passFormats: ['rg8unorm', 'bgra8unorm', 'rgba8unorm'], - _compatible: false, - }, - ]) - ) - .fn(t => { - const { bundleFormats, passFormats, _compatible } = t.params; +). +params((u) => +u.combineWithParams([ +{ + bundleFormats: ['bgra8unorm', 'rg8unorm'], + passFormats: ['bgra8unorm', 'rg8unorm'], + _compatible: true +}, // control case +{ + bundleFormats: ['bgra8unorm', 'rg8unorm'], + passFormats: ['bgra8unorm', 'bgra8unorm'], + _compatible: false +}, +{ + bundleFormats: ['bgra8unorm', 'rg8unorm'], + passFormats: ['rg8unorm', 'bgra8unorm'], + _compatible: false +}, +{ + bundleFormats: ['bgra8unorm', 'rg8unorm', 'rgba8unorm'], + passFormats: ['rg8unorm', 'bgra8unorm'], + _compatible: false +}, +{ + bundleFormats: ['bgra8unorm', 'rg8unorm'], + passFormats: ['rg8unorm', 'bgra8unorm', 'rgba8unorm'], + _compatible: false +}] +) +). +fn((t) => { + const { bundleFormats, passFormats, _compatible } = t.params; - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: bundleFormats, - }); - const bundle = bundleEncoder.finish(); - - const encoder = t.createEncoder('render pass', { - attachmentInfo: { - colorFormats: passFormats, - }, - }); - encoder.encoder.executeBundles([bundle]); - - encoder.validateFinish(_compatible); + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: bundleFormats }); + const bundle = bundleEncoder.finish(); -g.test('depth_stencil_formats_mismatch') - .desc( - ` + const encoder = t.createEncoder('render pass', { + attachmentInfo: { + colorFormats: passFormats + } + }); + encoder.encoder.executeBundles([bundle]); + + encoder.validateFinish(_compatible); +}); + +g.test('depth_stencil_formats_mismatch'). +desc( + ` Tests executeBundles cannot be called with render bundles that do match the depthStencil of the render pass. This includes: - formats don't match - formats have matching depth or stencil aspects, but other aspects are missing ` - ) - .params(u => - u.combineWithParams([ - { bundleFormat: 'depth24plus', passFormat: 'depth24plus' }, // control case - { bundleFormat: 'depth24plus', passFormat: 'depth16unorm' }, - { bundleFormat: 'depth24plus', passFormat: 'depth24plus-stencil8' }, - { bundleFormat: 'stencil8', passFormat: 'depth24plus-stencil8' }, - ]) - ) - .beforeAllSubcases(t => { - const { bundleFormat, passFormat } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase([bundleFormat, passFormat]); - }) - .fn(t => { - const { bundleFormat, passFormat } = t.params; - const compatible = bundleFormat === passFormat; +). +params((u) => +u.combineWithParams([ +{ bundleFormat: 'depth24plus', passFormat: 'depth24plus' }, // control case +{ bundleFormat: 'depth24plus', passFormat: 'depth16unorm' }, +{ bundleFormat: 'depth24plus', passFormat: 'depth24plus-stencil8' }, +{ bundleFormat: 'stencil8', passFormat: 'depth24plus-stencil8' }] +) +). +beforeAllSubcases((t) => { + const { bundleFormat, passFormat } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase([bundleFormat, passFormat]); +}). +fn((t) => { + const { bundleFormat, passFormat } = t.params; + const compatible = bundleFormat === passFormat; - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: [], - depthStencilFormat: bundleFormat, - }); - const bundle = bundleEncoder.finish(); - - const encoder = t.createEncoder('render pass', { - attachmentInfo: { - colorFormats: [], - depthStencilFormat: passFormat, - }, - }); - encoder.encoder.executeBundles([bundle]); - - encoder.validateFinish(compatible); + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: [], + depthStencilFormat: bundleFormat }); + const bundle = bundleEncoder.finish(); -g.test('depth_stencil_readonly_mismatch') - .desc( - ` + const encoder = t.createEncoder('render pass', { + attachmentInfo: { + colorFormats: [], + depthStencilFormat: passFormat + } + }); + encoder.encoder.executeBundles([bundle]); + + encoder.validateFinish(compatible); +}); + +g.test('depth_stencil_readonly_mismatch'). +desc( + ` Tests executeBundles cannot be called with render bundles that do match the depthStencil readonly state of the render pass. ` - ) - .params(u => - u - .combine('depthStencilFormat', kDepthStencilFormats) - .beginSubcases() - .combine('bundleDepthReadOnly', [false, true]) - .combine('bundleStencilReadOnly', [false, true]) - .combine('passDepthReadOnly', [false, true]) - .combine('passStencilReadOnly', [false, true]) - .filter(p => { - // For combined depth/stencil formats the depth and stencil read only state must match - // in order to create a valid render bundle or render pass. - const depthStencilInfo = kTextureFormatInfo[p.depthStencilFormat]; - if (depthStencilInfo.depth && depthStencilInfo.stencil) { - return ( - p.passDepthReadOnly === p.passStencilReadOnly && - p.bundleDepthReadOnly === p.bundleStencilReadOnly - ); - } - return true; - }) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.depthStencilFormat); - }) - .fn(t => { - const { - depthStencilFormat, - bundleDepthReadOnly, - bundleStencilReadOnly, - passDepthReadOnly, - passStencilReadOnly, - } = t.params; +). +params((u) => +u. +combine('depthStencilFormat', kDepthStencilFormats). +beginSubcases(). +combine('bundleDepthReadOnly', [false, true]). +combine('bundleStencilReadOnly', [false, true]). +combine('passDepthReadOnly', [false, true]). +combine('passStencilReadOnly', [false, true]) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.depthStencilFormat); +}). +fn((t) => { + const { + depthStencilFormat, + bundleDepthReadOnly, + bundleStencilReadOnly, + passDepthReadOnly, + passStencilReadOnly + } = t.params; - const compatible = - (!passDepthReadOnly || bundleDepthReadOnly === passDepthReadOnly) && - (!passStencilReadOnly || bundleStencilReadOnly === passStencilReadOnly); + const compatible = + (!passDepthReadOnly || bundleDepthReadOnly === passDepthReadOnly) && ( + !passStencilReadOnly || bundleStencilReadOnly === passStencilReadOnly); - const bundleEncoder = t.device.createRenderBundleEncoder({ + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: [], + depthStencilFormat, + depthReadOnly: bundleDepthReadOnly, + stencilReadOnly: bundleStencilReadOnly + }); + const bundle = bundleEncoder.finish(); + + const encoder = t.createEncoder('render pass', { + attachmentInfo: { colorFormats: [], depthStencilFormat, - depthReadOnly: bundleDepthReadOnly, - stencilReadOnly: bundleStencilReadOnly, - }); - const bundle = bundleEncoder.finish(); - - const encoder = t.createEncoder('render pass', { - attachmentInfo: { - colorFormats: [], - depthStencilFormat, - depthReadOnly: passDepthReadOnly, - stencilReadOnly: passStencilReadOnly, - }, - }); - encoder.encoder.executeBundles([bundle]); - - encoder.validateFinish(compatible); + depthReadOnly: passDepthReadOnly, + stencilReadOnly: passStencilReadOnly + } }); + encoder.encoder.executeBundles([bundle]); -g.test('sample_count_mismatch') - .desc( - ` + encoder.validateFinish(compatible); +}); + +g.test('sample_count_mismatch'). +desc( + ` Tests executeBundles cannot be called with render bundles that do match the sampleCount of the render pass. ` - ) - .params(u => - u.combineWithParams([ - { bundleSamples: 1, passSamples: 1 }, // control case - { bundleSamples: 4, passSamples: 4 }, // control case - { bundleFormat: 4, passFormat: 1 }, - { bundleFormat: 1, passFormat: 4 }, - ]) - ) - .fn(t => { - const { bundleSamples, passSamples } = t.params; +). +params((u) => +u.combineWithParams([ +{ bundleSamples: 1, passSamples: 1 }, // control case +{ bundleSamples: 4, passSamples: 4 }, // control case +{ bundleFormat: 4, passFormat: 1 }, +{ bundleFormat: 1, passFormat: 4 }] +) +). +fn((t) => { + const { bundleSamples, passSamples } = t.params; - const compatible = bundleSamples === passSamples; + const compatible = bundleSamples === passSamples; - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['bgra8unorm'], - sampleCount: bundleSamples, - }); - const bundle = bundleEncoder.finish(); - - const encoder = t.createEncoder('render pass', { - attachmentInfo: { - colorFormats: ['bgra8unorm'], - sampleCount: passSamples, - }, - }); - encoder.encoder.executeBundles([bundle]); - - encoder.validateFinish(compatible); + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['bgra8unorm'], + sampleCount: bundleSamples }); + const bundle = bundleEncoder.finish(); + + const encoder = t.createEncoder('render pass', { + attachmentInfo: { + colorFormats: ['bgra8unorm'], + sampleCount: passSamples + } + }); + encoder.encoder.executeBundles([bundle]); + + encoder.validateFinish(compatible); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/error_scope.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/error_scope.spec.js index 8f9278d92e3..cd0fbb4767d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/error_scope.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/error_scope.spec.js @@ -1,14 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Error scope validation tests. Note these must create their own device, not use GPUTest (that one already has error scopes on it). TODO: (POSTV1) Test error scopes of different threads and make sure they go to the right place. TODO: (POSTV1) Test that unhandled errors go the right device, and nowhere if the device was dropped. -`; -import { Fixture } from '../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; import { getGPU } from '../../../common/util/navigator_gpu.js'; import { assert, raceWithRejectOnTimeout } from '../../../common/util/util.js'; @@ -27,7 +26,16 @@ class ErrorScopeTests extends Fixture { const gpu = getGPU(this.rec); const adapter = await gpu.requestAdapter(); assert(adapter !== null); - const device = await adapter.requestDevice(); + + // We need to max out the adapter limits related to texture dimensions to more reliably cause an + // OOM error when asked for it, so set that on the device now. + const device = this.trackForCleanup( + await adapter.requestDevice({ + requiredLimits: { + maxTextureDimension2D: adapter.limits.maxTextureDimension2D + } + }) + ); assert(device !== null); this._device = device; } @@ -44,26 +52,23 @@ class ErrorScopeTests extends Fixture { format: 'rgba32float', usage: GPUTextureUsage.COPY_DST, size: [ - this.device.limits.maxTextureDimension2D, - this.device.limits.maxTextureDimension2D, - this.device.limits.maxTextureArrayLayers, - ], + this.device.limits.maxTextureDimension2D, + this.device.limits.maxTextureDimension2D, + this.device.limits.maxTextureArrayLayers] + }) ); - break; case 'validation': // Generating a validation error by passing in an invalid usage when creating a buffer. this.trackForCleanup( this.device.createBuffer({ size: 1024, - usage: 0xffff, // Invalid GPUBufferUsage + usage: 0xffff // Invalid GPUBufferUsage }) ); - break; } - // MAINTENANCE_TODO: This is a workaround for Chromium not flushing. Remove when not needed. this.device.queue.submit([]); } @@ -87,8 +92,8 @@ class ErrorScopeTests extends Fixture { // MAINTENANCE_TODO: Make arbitrary timeout value a test runner variable const TIMEOUT_IN_MS = 1000; - const promise = new Promise(resolve => { - const eventListener = event => { + const promise = new Promise((resolve) => { + const eventListener = (event) => { this.debug(`Got uncaptured error event with ${event.error}`); resolve(event); }; @@ -109,187 +114,187 @@ class ErrorScopeTests extends Fixture { export const g = makeTestGroup(ErrorScopeTests); -g.test('simple') - .desc( - ` +g.test('simple'). +desc( + ` Tests that error scopes catches their expected errors, firing an uncaptured error event otherwise. - Same error and error filter (popErrorScope should return the error) - Different error from filter (uncaptured error should result) ` - ) - .params(u => - u.combine('errorType', kGeneratableErrorScopeFilters).combine('errorFilter', kErrorScopeFilters) - ) - .fn(async t => { - const { errorType, errorFilter } = t.params; - t.device.pushErrorScope(errorFilter); +). +params((u) => +u.combine('errorType', kGeneratableErrorScopeFilters).combine('errorFilter', kErrorScopeFilters) +). +fn(async (t) => { + const { errorType, errorFilter } = t.params; + t.device.pushErrorScope(errorFilter); - if (errorType !== errorFilter) { - // Different error case - const uncapturedErrorEvent = await t.expectUncapturedError(() => { - t.generateError(errorType); - }); - t.expect(t.isInstanceOfError(errorType, uncapturedErrorEvent.error)); - - const error = await t.device.popErrorScope(); - t.expect(error === null); - } else { - // Same error as filter + if (errorType !== errorFilter) { + // Different error case + const uncapturedErrorEvent = await t.expectUncapturedError(() => { t.generateError(errorType); - const error = await t.device.popErrorScope(); - t.expect(t.isInstanceOfError(errorType, error)); - } - }); + }); + t.expect(t.isInstanceOfError(errorType, uncapturedErrorEvent.error)); -g.test('empty') - .desc( - ` + const error = await t.device.popErrorScope(); + t.expect(error === null); + } else { + // Same error as filter + t.generateError(errorType); + const error = await t.device.popErrorScope(); + t.expect(t.isInstanceOfError(errorType, error)); + } +}); + +g.test('empty'). +desc( + ` Tests that popping an empty error scope stack should reject. ` - ) - .fn(t => { - const promise = t.device.popErrorScope(); - t.shouldReject('OperationError', promise); - }); +). +fn((t) => { + const promise = t.device.popErrorScope(); + t.shouldReject('OperationError', promise, { allowMissingStack: true }); +}); -g.test('parent_scope') - .desc( - ` +g.test('parent_scope'). +desc( + ` Tests that an error bubbles to the correct parent scope. - Different error types as the parent scope - Different depths of non-capturing filters for the generated error ` - ) - .params(u => - u - .combine('errorFilter', kGeneratableErrorScopeFilters) - .combine('stackDepth', [1, 10, 100, 1000]) - ) - .fn(async t => { - const { errorFilter, stackDepth } = t.params; - t.device.pushErrorScope(errorFilter); +). +params((u) => +u. +combine('errorFilter', kGeneratableErrorScopeFilters). +combine('stackDepth', [1, 10, 100, 1000]) +). +fn(async (t) => { + const { errorFilter, stackDepth } = t.params; + t.device.pushErrorScope(errorFilter); - // Push a bunch of error filters onto the stack (none that match errorFilter) - const unmatchedFilters = kErrorScopeFilters.filter(filter => { - return filter !== errorFilter; - }); - for (let i = 0; i < stackDepth; i++) { - t.device.pushErrorScope(unmatchedFilters[i % unmatchedFilters.length]); - } - - // Cause the error and then pop all the unrelated filters. - t.generateError(errorFilter); - const promises = []; - for (let i = 0; i < stackDepth; i++) { - promises.push(t.device.popErrorScope()); - } - const errors = await Promise.all(promises); - t.expect(errors.every(e => e === null)); - - // Finally the actual error should have been caught by the parent scope. - const error = await t.device.popErrorScope(); - t.expect(t.isInstanceOfError(errorFilter, error)); + // Push a bunch of error filters onto the stack (none that match errorFilter) + const unmatchedFilters = kErrorScopeFilters.filter((filter) => { + return filter !== errorFilter; }); + for (let i = 0; i < stackDepth; i++) { + t.device.pushErrorScope(unmatchedFilters[i % unmatchedFilters.length]); + } -g.test('current_scope') - .desc( - ` + // Cause the error and then pop all the unrelated filters. + t.generateError(errorFilter); + const promises = []; + for (let i = 0; i < stackDepth; i++) { + promises.push(t.device.popErrorScope()); + } + const errors = await Promise.all(promises); + t.expect(errors.every((e) => e === null)); + + // Finally the actual error should have been caught by the parent scope. + const error = await t.device.popErrorScope(); + t.expect(t.isInstanceOfError(errorFilter, error)); +}); + +g.test('current_scope'). +desc( + ` Tests that an error does not bubbles to parent scopes when local scope matches. - Different error types as the current scope - Different depths of non-capturing filters for the generated error ` - ) - .params(u => - u - .combine('errorFilter', kGeneratableErrorScopeFilters) - .combine('stackDepth', [1, 10, 100, 1000, 100000]) - ) - .fn(async t => { - const { errorFilter, stackDepth } = t.params; +). +params((u) => +u. +combine('errorFilter', kGeneratableErrorScopeFilters). +combine('stackDepth', [1, 10, 100, 1000, 100000]) +). +fn(async (t) => { + const { errorFilter, stackDepth } = t.params; - // Push a bunch of error filters onto the stack - for (let i = 0; i < stackDepth; i++) { - t.device.pushErrorScope(kErrorScopeFilters[i % kErrorScopeFilters.length]); - } + // Push a bunch of error filters onto the stack + for (let i = 0; i < stackDepth; i++) { + t.device.pushErrorScope(kErrorScopeFilters[i % kErrorScopeFilters.length]); + } - // Current scope should catch the error immediately. - t.device.pushErrorScope(errorFilter); - t.generateError(errorFilter); - const error = await t.device.popErrorScope(); - t.expect(t.isInstanceOfError(errorFilter, error)); + // Current scope should catch the error immediately. + t.device.pushErrorScope(errorFilter); + t.generateError(errorFilter); + const error = await t.device.popErrorScope(); + t.expect(t.isInstanceOfError(errorFilter, error)); - // Remaining scopes shouldn't catch anything. - const promises = []; - for (let i = 0; i < stackDepth; i++) { - promises.push(t.device.popErrorScope()); - } - const errors = await Promise.all(promises); - t.expect(errors.every(e => e === null)); - }); + // Remaining scopes shouldn't catch anything. + const promises = []; + for (let i = 0; i < stackDepth; i++) { + promises.push(t.device.popErrorScope()); + } + const errors = await Promise.all(promises); + t.expect(errors.every((e) => e === null)); +}); -g.test('balanced_siblings') - .desc( - ` +g.test('balanced_siblings'). +desc( + ` Tests that sibling error scopes need to be balanced. - Different error types as the current scope - Different number of sibling errors ` - ) - .params(u => - u.combine('errorFilter', kErrorScopeFilters).combine('numErrors', [1, 10, 100, 1000]) - ) - .fn(async t => { - const { errorFilter, numErrors } = t.params; +). +params((u) => +u.combine('errorFilter', kErrorScopeFilters).combine('numErrors', [1, 10, 100, 1000]) +). +fn(async (t) => { + const { errorFilter, numErrors } = t.params; - const promises = []; - for (let i = 0; i < numErrors; i++) { - t.device.pushErrorScope(errorFilter); - promises.push(t.device.popErrorScope()); - } + const promises = []; + for (let i = 0; i < numErrors; i++) { + t.device.pushErrorScope(errorFilter); + promises.push(t.device.popErrorScope()); + } - { - // Trying to pop an additional non-existing scope should reject. - const promise = t.device.popErrorScope(); - t.shouldReject('OperationError', promise); - } + { + // Trying to pop an additional non-existing scope should reject. + const promise = t.device.popErrorScope(); + t.shouldReject('OperationError', promise, { allowMissingStack: true }); + } - const errors = await Promise.all(promises); - t.expect(errors.every(e => e === null)); - }); + const errors = await Promise.all(promises); + t.expect(errors.every((e) => e === null)); +}); -g.test('balanced_nesting') - .desc( - ` +g.test('balanced_nesting'). +desc( + ` Tests that nested error scopes need to be balanced. - Different error types as the current scope - Different number of nested errors ` - ) - .params(u => - u.combine('errorFilter', kErrorScopeFilters).combine('numErrors', [1, 10, 100, 1000]) - ) - .fn(async t => { - const { errorFilter, numErrors } = t.params; +). +params((u) => +u.combine('errorFilter', kErrorScopeFilters).combine('numErrors', [1, 10, 100, 1000]) +). +fn(async (t) => { + const { errorFilter, numErrors } = t.params; - for (let i = 0; i < numErrors; i++) { - t.device.pushErrorScope(errorFilter); - } + for (let i = 0; i < numErrors; i++) { + t.device.pushErrorScope(errorFilter); + } - const promises = []; - for (let i = 0; i < numErrors; i++) { - promises.push(t.device.popErrorScope()); - } - const errors = await Promise.all(promises); - t.expect(errors.every(e => e === null)); + const promises = []; + for (let i = 0; i < numErrors; i++) { + promises.push(t.device.popErrorScope()); + } + const errors = await Promise.all(promises); + t.expect(errors.every((e) => e === null)); - { - // Trying to pop an additional non-existing scope should reject. - const promise = t.device.popErrorScope(); - t.shouldReject('OperationError', promise); - } - }); + { + // Trying to pop an additional non-existing scope should reject. + const promise = t.device.popErrorScope(); + t.shouldReject('OperationError', promise, { allowMissingStack: true }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/getBindGroupLayout.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/getBindGroupLayout.spec.js index 96b5675b176..f6a4addbe3c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/getBindGroupLayout.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/getBindGroupLayout.spec.js @@ -1,202 +1,201 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` getBindGroupLayout validation tests. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert } from '../../../common/util/util.js'; import { ValidationTest } from './validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('index_range,explicit_layout') - .desc( - ` +g.test('index_range,explicit_layout'). +desc( + ` Test that a validation error is generated if the index exceeds the size of the bind group layouts using a pipeline with an explicit layout. ` - ) - .params(u => u.combine('index', [0, 1, 2, 3, 4, 5])) - .fn(t => { - const { index } = t.params; +). +params((u) => u.combine('index', [0, 1, 2, 3, 4, 5])). +fn((t) => { + const { index } = t.params; - const pipelineBindGroupLayouts = t.device.createBindGroupLayout({ - entries: [], - }); + const pipelineBindGroupLayouts = t.device.createBindGroupLayout({ + entries: [] + }); - const kBindGroupLayoutsSizeInPipelineLayout = 1; - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [pipelineBindGroupLayouts], - }); + const kBindGroupLayoutsSizeInPipelineLayout = 1; + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: [pipelineBindGroupLayouts] + }); - const pipeline = t.device.createRenderPipeline({ - layout: pipelineLayout, - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipeline = t.device.createRenderPipeline({ + layout: pipelineLayout, + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main()-> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); - - const shouldError = index >= kBindGroupLayoutsSizeInPipelineLayout; - - t.expectValidationError(() => { - pipeline.getBindGroupLayout(index); - }, shouldError); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); -g.test('index_range,auto_layout') - .desc( - ` + const shouldError = index >= kBindGroupLayoutsSizeInPipelineLayout; + + t.expectValidationError(() => { + pipeline.getBindGroupLayout(index); + }, shouldError); +}); + +g.test('index_range,auto_layout'). +desc( + ` Test that a validation error is generated if the index exceeds the size of the bind group layouts using a pipeline with an auto layout. ` - ) - .params(u => u.combine('index', [0, 1, 2, 3, 4, 5])) - .fn(t => { - const { index } = t.params; +). +params((u) => u.combine('index', [0, 1, 2, 3, 4, 5])). +fn((t) => { + const { index } = t.params; - const kBindGroupLayoutsSizeInPipelineLayout = 1; + const kBindGroupLayoutsSizeInPipelineLayout = 1; - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main()-> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @group(0) @binding(0) var binding: f32; @fragment fn main() -> @location(0) vec4 { _ = binding; return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); - - const shouldError = index >= kBindGroupLayoutsSizeInPipelineLayout; - - t.expectValidationError(() => { - pipeline.getBindGroupLayout(index); - }, shouldError); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); -g.test('unique_js_object,auto_layout') - .desc( - ` + const shouldError = index >= kBindGroupLayoutsSizeInPipelineLayout; + + t.expectValidationError(() => { + pipeline.getBindGroupLayout(index); + }, shouldError); +}); + +g.test('unique_js_object,auto_layout'). +desc( + ` Test that getBindGroupLayout returns a new JavaScript object for each call. ` - ) - .fn(t => { - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` +). +fn((t) => { + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main()-> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @group(0) @binding(0) var binding: f32; @fragment fn main() -> @location(0) vec4 { _ = binding; return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); - - const kIndex = 0; - const bgl1 = pipeline.getBindGroupLayout(kIndex); - bgl1.extra = 42; - const bgl2 = pipeline.getBindGroupLayout(kIndex); - - assert(bgl1 !== bgl2, 'objects are not the same object'); - assert(bgl2.extra === undefined, 'objects do not retain expando properties'); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); -g.test('unique_js_object,explicit_layout') - .desc( - ` + const kIndex = 0; + const bgl1 = pipeline.getBindGroupLayout(kIndex); + bgl1.extra = 42; + const bgl2 = pipeline.getBindGroupLayout(kIndex); + + assert(bgl1 !== bgl2, 'objects are not the same object'); + assert(bgl2.extra === undefined, 'objects do not retain expando properties'); +}); + +g.test('unique_js_object,explicit_layout'). +desc( + ` Test that getBindGroupLayout returns a new JavaScript object for each call. ` - ) - .fn(t => { - const pipelineBindGroupLayouts = t.device.createBindGroupLayout({ - entries: [], - }); +). +fn((t) => { + const pipelineBindGroupLayouts = t.device.createBindGroupLayout({ + entries: [] + }); - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [pipelineBindGroupLayouts], - }); + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: [pipelineBindGroupLayouts] + }); - const pipeline = t.device.createRenderPipeline({ - layout: pipelineLayout, - vertex: { - module: t.device.createShaderModule({ - code: ` + const pipeline = t.device.createRenderPipeline({ + layout: pipelineLayout, + vertex: { + module: t.device.createShaderModule({ + code: ` @vertex fn main()-> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` + }` + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); - - const kIndex = 0; - const bgl1 = pipeline.getBindGroupLayout(kIndex); - bgl1.extra = 42; - const bgl2 = pipeline.getBindGroupLayout(kIndex); - - assert(bgl1 !== bgl2, 'objects are not the same object'); - assert(bgl2.extra === undefined, 'objects do not retain expando properties'); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); + + const kIndex = 0; + const bgl1 = pipeline.getBindGroupLayout(kIndex); + bgl1.extra = 42; + const bgl2 = pipeline.getBindGroupLayout(kIndex); + + assert(bgl1 !== bgl2, 'objects are not the same object'); + assert(bgl2.extra === undefined, 'objects do not retain expando properties'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/gpu_external_texture_expiration.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/gpu_external_texture_expiration.spec.js index 39f26111baf..4afd9662600 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/gpu_external_texture_expiration.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/gpu_external_texture_expiration.spec.js @@ -1,17 +1,16 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` GPUExternalTexture expiration mechanism validation tests. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert } from '../../../common/util/util.js'; import { getVideoElement, startPlayingAndWaitForVideo, getVideoFrameFromVideoElement, waitForNextFrame, - waitForNextTask, -} from '../../web_platform/util.js'; + waitForNextTask } from +'../../web_platform/util.js'; import { ValidationTest } from './validation_test.js'; @@ -24,17 +23,17 @@ class GPUExternalTextureExpireTest extends ValidationTest { const colorAttachment = this.device.createTexture({ format: kFormat, size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const passDescriptor = { colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: [0, 0, 0, 1], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: colorAttachment.createView(), + clearValue: [0, 0, 0, 1], + loadOp: 'clear', + storeOp: 'store' + }] + }; const commandEncoder = this.device.createCommandEncoder(); @@ -57,270 +56,277 @@ class GPUExternalTextureExpireTest extends ValidationTest { getDefaultBindGroupLayout() { return this.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, externalTexture: {} }], + entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, externalTexture: {} }] }); } } export const g = makeTestGroup(GPUExternalTextureExpireTest); -g.test('import_multiple_times_in_same_task_scope') - .desc( - ` +g.test('import_multiple_times_in_same_task_scope'). +desc( + ` Tests that GPUExternalTexture is valid after been imported in the task. Tests that in the same task scope, import twice on the same video source may return the same GPUExternalTexture and bindGroup doesn't need to be updated. ` - ) - .params(u => - u // - .combine('sourceType', ['VideoElement', 'VideoFrame']) - ) - .fn(async t => { - const sourceType = t.params.sourceType; - const videoElement = t.getDefaultVideoElementAndCheck(); +). +params((u) => +u // +.combine('sourceType', ['VideoElement', 'VideoFrame']) +). +fn(async (t) => { + const sourceType = t.params.sourceType; + const videoElement = t.getDefaultVideoElementAndCheck(); - let bindGroup; - let externalTexture; - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; - externalTexture = t.device.importExternalTexture({ - source: source, - }); + let bindGroup; + let externalTexture; + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = + sourceType === 'VideoFrame' ? + await getVideoFrameFromVideoElement(t, videoElement) : + videoElement; + externalTexture = t.device.importExternalTexture({ + source: source + }); + + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] + }); + + t.submitCommandBuffer(bindGroup, true); + + // Import again in the same task scope should return same object. + const mayBeTheSameExternalTexture = t.device.importExternalTexture({ + + source: source + }); + + if (externalTexture === mayBeTheSameExternalTexture) { + t.submitCommandBuffer(bindGroup, true); + } else { bindGroup = t.device.createBindGroup({ layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], + entries: [{ binding: 0, resource: externalTexture }] }); t.submitCommandBuffer(bindGroup, true); - - // Import again in the same task scope should return same object. - const mayBeTheSameExternalTexture = t.device.importExternalTexture({ - source: source, - }); - - if (externalTexture === mayBeTheSameExternalTexture) { - t.submitCommandBuffer(bindGroup, true); - } else { - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - - t.submitCommandBuffer(bindGroup, true); - } - }); + } }); +}); -g.test('import_and_use_in_different_microtask') - .desc( - ` +g.test('import_and_use_in_different_microtask'). +desc( + ` Tests that in the same task scope, imported GPUExternalTexture is valid in different microtasks. ` - ) - .params(u => - u // - .combine('sourceType', ['VideoElement', 'VideoFrame']) - ) - .fn(async t => { - const sourceType = t.params.sourceType; - const videoElement = t.getDefaultVideoElementAndCheck(); +). +params((u) => +u // +.combine('sourceType', ['VideoElement', 'VideoFrame']) +). +fn(async (t) => { + const sourceType = t.params.sourceType; + const videoElement = t.getDefaultVideoElementAndCheck(); - let bindGroup; - let externalTexture; - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; + let bindGroup; + let externalTexture; + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = + sourceType === 'VideoFrame' ? + await getVideoFrameFromVideoElement(t, videoElement) : + videoElement; - // Import GPUExternalTexture - queueMicrotask(() => { - externalTexture = t.device.importExternalTexture({ - source: source, - }); - }); + // Import GPUExternalTexture + queueMicrotask(() => { + externalTexture = t.device.importExternalTexture({ - // Submit GPUExternalTexture - queueMicrotask(() => { - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - t.submitCommandBuffer(bindGroup, true); + source: source }); }); - }); -g.test('import_and_use_in_different_task') - .desc( - ` + // Submit GPUExternalTexture + queueMicrotask(() => { + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] + }); + t.submitCommandBuffer(bindGroup, true); + }); + }); +}); + +g.test('import_and_use_in_different_task'). +desc( + ` Tests that in the different task scope, previous imported GPUExternalTexture should be expired if it is imported from HTMLVideoElment. GPUExternalTexture imported from WebCodec VideoFrame is not expired. ` - ) - .params(u => - u // - .combine('sourceType', ['VideoElement', 'VideoFrame']) - ) - .fn(async t => { - const sourceType = t.params.sourceType; - const videoElement = t.getDefaultVideoElementAndCheck(); +). +params((u) => +u // +.combine('sourceType', ['VideoElement', 'VideoFrame']) +). +fn(async (t) => { + const sourceType = t.params.sourceType; + const videoElement = t.getDefaultVideoElementAndCheck(); - let bindGroup; - let externalTexture; - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; - externalTexture = t.device.importExternalTexture({ - source: source, - }); + let bindGroup; + let externalTexture; + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = + sourceType === 'VideoFrame' ? + await getVideoFrameFromVideoElement(t, videoElement) : + videoElement; + externalTexture = t.device.importExternalTexture({ - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - - t.submitCommandBuffer(bindGroup, true); + source: source }); - await waitForNextTask(() => { - // Enter in another task scope. For GPUExternalTexture imported from WebCodec, - // it shouldn't be expired because VideoFrame is not 'closed'. - // For GPUExternalTexutre imported from HTMLVideoElement, it should be expired. - t.submitCommandBuffer(bindGroup, sourceType === 'VideoFrame' ? true : false); + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] }); + + t.submitCommandBuffer(bindGroup, true); }); -g.test('use_import_to_refresh') - .desc( - ` + await waitForNextTask(() => { + // Enter in another task scope. For GPUExternalTexture imported from WebCodec, + // it shouldn't be expired because VideoFrame is not 'closed'. + // For GPUExternalTexutre imported from HTMLVideoElement, it should be expired. + t.submitCommandBuffer(bindGroup, sourceType === 'VideoFrame' ? true : false); + }); +}); + +g.test('use_import_to_refresh'). +desc( + ` Tests that in the different task scope, imported GPUExternalTexture again on the same HTMLVideoElement should return active GPUExternalTexture. ` - ) - .fn(async t => { - const videoElement = t.getDefaultVideoElementAndCheck(); +). +fn(async (t) => { + const videoElement = t.getDefaultVideoElementAndCheck(); - let bindGroup; - let externalTexture; - let source; - await startPlayingAndWaitForVideo(videoElement, () => { - source = videoElement; - externalTexture = t.device.importExternalTexture({ - source: source, - }); + let bindGroup; + let externalTexture; + let source; + await startPlayingAndWaitForVideo(videoElement, () => { + source = videoElement; + externalTexture = t.device.importExternalTexture({ - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - - t.submitCommandBuffer(bindGroup, true); + source: source }); - await waitForNextTask(() => { - const mayBeTheSameExternalTexture = t.device.importExternalTexture({ - source: source, - }); - - if (externalTexture === mayBeTheSameExternalTexture) { - // ImportExternalTexture should refresh expired GPUExternalTexture. - t.submitCommandBuffer(bindGroup, true); - } else { - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - t.submitCommandBuffer(bindGroup, true); - } + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] }); + + t.submitCommandBuffer(bindGroup, true); }); -g.test('webcodec_video_frame_close_expire_immediately') - .desc( - ` + await waitForNextTask(() => { + const mayBeTheSameExternalTexture = t.device.importExternalTexture({ + + source: source + }); + + if (externalTexture === mayBeTheSameExternalTexture) { + // ImportExternalTexture should refresh expired GPUExternalTexture. + t.submitCommandBuffer(bindGroup, true); + } else { + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] + }); + t.submitCommandBuffer(bindGroup, true); + } + }); +}); + +g.test('webcodec_video_frame_close_expire_immediately'). +desc( + ` Tests that in the same task scope, imported GPUExternalTexture should be expired immediately if webcodec VideoFrame.close() is called. ` - ) - .fn(async t => { - const videoElement = t.getDefaultVideoElementAndCheck(); +). +fn(async (t) => { + const videoElement = t.getDefaultVideoElementAndCheck(); - let bindGroup; - let externalTexture; - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = await getVideoFrameFromVideoElement(t, videoElement); - externalTexture = t.device.importExternalTexture({ - source: source, - }); + let bindGroup; + let externalTexture; + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = await getVideoFrameFromVideoElement(t, videoElement); + externalTexture = t.device.importExternalTexture({ - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - - t.submitCommandBuffer(bindGroup, true); - - source.close(); - - t.submitCommandBuffer(bindGroup, false); + source: source }); - }); -g.test('import_from_different_video_frame') - .desc( - ` + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] + }); + + t.submitCommandBuffer(bindGroup, true); + + source.close(); + + t.submitCommandBuffer(bindGroup, false); + }); +}); + +g.test('import_from_different_video_frame'). +desc( + ` Tests that imported GPUExternalTexture from different video frame should return different GPUExternalTexture objects. If the frames are from the same HTMLVideoElement source, GPUExternalTexture with old frame should be expired and not been refreshed again. ` - ) - .fn(async t => { - const videoElement = t.getDefaultVideoElementAndCheck(); +). +fn(async (t) => { + const videoElement = t.getDefaultVideoElementAndCheck(); - let bindGroup; - let externalTexture; - await startPlayingAndWaitForVideo(videoElement, () => { - externalTexture = t.device.importExternalTexture({ - source: videoElement, - }); - - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: externalTexture }], - }); - - t.submitCommandBuffer(bindGroup, true); + let bindGroup; + let externalTexture; + await startPlayingAndWaitForVideo(videoElement, () => { + externalTexture = t.device.importExternalTexture({ + source: videoElement }); - // Update new video frame. - await waitForNextFrame(videoElement, () => { - // Import again for the new video frame. - const newValidExternalTexture = t.device.importExternalTexture({ - source: videoElement, - }); - assert(externalTexture !== newValidExternalTexture); - - // VideoFrame is updated. GPUExternalTexture imported from old frame should be expired and - // cannot be refreshed again. - // Using the GPUExternalTexture should result in an error. - t.submitCommandBuffer(bindGroup, false); - - // Update bindGroup with updated GPUExternalTexture should work. - bindGroup = t.device.createBindGroup({ - layout: t.getDefaultBindGroupLayout(), - entries: [{ binding: 0, resource: newValidExternalTexture }], - }); - t.submitCommandBuffer(bindGroup, true); + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: externalTexture }] }); + + t.submitCommandBuffer(bindGroup, true); }); + + // Update new video frame. + await waitForNextFrame(videoElement, () => { + // Import again for the new video frame. + const newValidExternalTexture = t.device.importExternalTexture({ + source: videoElement + }); + assert(externalTexture !== newValidExternalTexture); + + // VideoFrame is updated. GPUExternalTexture imported from old frame should be expired and + // cannot be refreshed again. + // Using the GPUExternalTexture should result in an error. + t.submitCommandBuffer(bindGroup, false); + + // Update bindGroup with updated GPUExternalTexture should work. + bindGroup = t.device.createBindGroup({ + layout: t.getDefaultBindGroupLayout(), + entries: [{ binding: 0, resource: newValidExternalTexture }] + }); + t.submitCommandBuffer(bindGroup, true); + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_related.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_related.spec.js index 9cd4f423aac..d22e39eecba 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_related.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_related.spec.js @@ -1,14 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for buffer related parameters for buffer <-> texture copies`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for buffer related parameters for buffer <-> texture copies`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kTextureDimensions } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; import { kSizedTextureFormats, kTextureFormatInfo, - textureDimensionAndFormatCompatible, -} from '../../../format_info.js'; + textureDimensionAndFormatCompatible } from +'../../../format_info.js'; import { kResourceStates } from '../../../gpu_test.js'; import { kImageCopyTypes } from '../../../util/texture/layout.js'; @@ -16,136 +15,136 @@ import { ImageCopyTest, formatCopyableWithMethod } from './image_copy.js'; export const g = makeTestGroup(ImageCopyTest); -g.test('buffer_state') - .desc( - ` +g.test('buffer_state'). +desc( + ` Test that the buffer must be valid and not destroyed. - for all buffer <-> texture copy methods - for various buffer states ` - ) - .params(u => - u // - // B2B copy validations are at api,validation,encoding,cmds,copyBufferToBuffer.spec.ts - .combine('method', ['CopyB2T', 'CopyT2B']) - .combine('state', kResourceStates) - ) - .fn(t => { - const { method, state } = t.params; +). +params((u) => +u // +// B2B copy validations are at api,validation,encoding,cmds,copyBufferToBuffer.spec.ts +.combine('method', ['CopyB2T', 'CopyT2B']). +combine('state', kResourceStates) +). +fn((t) => { + const { method, state } = t.params; - // A valid buffer. - const buffer = t.createBufferWithState(state, { - size: 16, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - // Invalid buffer will fail finish, and destroyed buffer will fail submit - const submit = state !== 'invalid'; - const success = state === 'valid'; - - const texture = t.device.createTexture({ - size: { width: 2, height: 2, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - t.testBuffer( - buffer, - texture, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 16, method, success, submit } - ); + // A valid buffer. + const buffer = t.createBufferWithState(state, { + size: 16, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); -g.test('buffer,device_mismatch') - .desc('Tests the image copies cannot be called with a buffer created from another device') - .paramsSubcasesOnly(u => - u.combine('method', ['CopyB2T', 'CopyT2B']).combine('mismatched', [true, false]) - ) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { method, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + // Invalid buffer will fail finish, and destroyed buffer will fail submit + const submit = state !== 'invalid'; + const success = state === 'valid'; - const buffer = sourceDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(buffer); - - const texture = t.device.createTexture({ - size: { width: 2, height: 2, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const success = !mismatched; - - // Expect success in both finish and submit, or validation error in finish - t.testBuffer( - buffer, - texture, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 16, method, success, submit: success } - ); + const texture = t.device.createTexture({ + size: { width: 2, height: 2, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('usage') - .desc( - ` + t.testBuffer( + buffer, + texture, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 16, method, success, submit } + ); +}); + +g.test('buffer,device_mismatch'). +desc('Tests the image copies cannot be called with a buffer created from another device'). +paramsSubcasesOnly((u) => +u.combine('method', ['CopyB2T', 'CopyT2B']).combine('mismatched', [true, false]) +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { method, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const buffer = sourceDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(buffer); + + const texture = t.device.createTexture({ + size: { width: 2, height: 2, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); + + const success = !mismatched; + + // Expect success in both finish and submit, or validation error in finish + t.testBuffer( + buffer, + texture, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 16, method, success, submit: success } + ); +}); + +g.test('usage'). +desc( + ` Test the buffer must have the appropriate COPY_SRC/COPY_DST usage. TODO update such that it tests - for all buffer source usages - for all buffer destination usages ` - ) - .params(u => - u - // B2B copy validations are at api,validation,encoding,cmds,copyBufferToBuffer.spec.ts - .combine('method', ['CopyB2T', 'CopyT2B']) - .beginSubcases() - .combine('usage', [ - GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.UNIFORM, - GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.UNIFORM, - GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.COPY_DST, - ]) - ) - .fn(t => { - const { method, usage } = t.params; +). +params((u) => +u +// B2B copy validations are at api,validation,encoding,cmds,copyBufferToBuffer.spec.ts +.combine('method', ['CopyB2T', 'CopyT2B']). +beginSubcases(). +combine('usage', [ +GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.UNIFORM, +GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.UNIFORM, +GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.COPY_DST] +) +). +fn((t) => { + const { method, usage } = t.params; - const buffer = t.device.createBuffer({ - size: 16, - usage, - }); - - const success = - method === 'CopyB2T' - ? (usage & GPUBufferUsage.COPY_SRC) !== 0 - : (usage & GPUBufferUsage.COPY_DST) !== 0; - - const texture = t.device.createTexture({ - size: { width: 2, height: 2, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - // Expect success in both finish and submit, or validation error in finish - t.testBuffer( - buffer, - texture, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 16, method, success, submit: success } - ); + const buffer = t.device.createBuffer({ + size: 16, + usage }); -g.test('bytes_per_row_alignment') - .desc( - ` + const success = + method === 'CopyB2T' ? + (usage & GPUBufferUsage.COPY_SRC) !== 0 : + (usage & GPUBufferUsage.COPY_DST) !== 0; + + const texture = t.device.createTexture({ + size: { width: 2, height: 2, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); + + // Expect success in both finish and submit, or validation error in finish + t.testBuffer( + buffer, + texture, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 16, method, success, submit: success } + ); +}); + +g.test('bytes_per_row_alignment'). +desc( + ` Test that bytesPerRow must be a multiple of 256 for CopyB2T and CopyT2B if it is required. - for all copy methods between linear data and textures - for all texture dimensions @@ -153,81 +152,75 @@ Test that bytesPerRow must be a multiple of 256 for CopyB2T and CopyT2B if it is - for various bytesPerRow aligned to 256 or not - for various number of blocks rows copied ` - ) - .params(u => - u // - .combine('method', kImageCopyTypes) - .combine('format', kSizedTextureFormats) - .filter(formatCopyableWithMethod) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('bytesPerRow', [undefined, 0, 1, 255, 256, 257, 512]) - .combine('copyHeightInBlocks', [0, 1, 2, 3]) - .expand('_textureHeightInBlocks', p => [ - p.copyHeightInBlocks === 0 ? 1 : p.copyHeightInBlocks, - ]) - .unless(p => p.dimension === '1d' && p.copyHeightInBlocks > 1) - // Depth/stencil format copies must copy the whole subresource. - .unless(p => { - const info = kTextureFormatInfo[p.format]; - return ( - (!!info.depth || !!info.stencil) && p.copyHeightInBlocks !== p._textureHeightInBlocks - ); - }) - // bytesPerRow must be specified and it must be equal or greater than the bytes size of each row if we are copying multiple rows. - // Note that we are copying one single block on each row in this test. - .filter( - ({ format, bytesPerRow, copyHeightInBlocks }) => - (bytesPerRow === undefined && copyHeightInBlocks <= 1) || - (bytesPerRow !== undefined && bytesPerRow >= kTextureFormatInfo[format].bytesPerBlock) - ) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - method, - dimension, - format, - bytesPerRow, - copyHeightInBlocks, - _textureHeightInBlocks, - } = t.params; +). +params((u) => +u // +.combine('method', kImageCopyTypes). +combine('format', kSizedTextureFormats). +filter(formatCopyableWithMethod). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('bytesPerRow', [undefined, 0, 1, 255, 256, 257, 512]). +combine('copyHeightInBlocks', [0, 1, 2, 3]). +expand('_textureHeightInBlocks', (p) => [ +p.copyHeightInBlocks === 0 ? 1 : p.copyHeightInBlocks] +). +unless((p) => p.dimension === '1d' && p.copyHeightInBlocks > 1) +// Depth/stencil format copies must copy the whole subresource. +.unless((p) => { + const info = kTextureFormatInfo[p.format]; + return ( + (!!info.depth || !!info.stencil) && p.copyHeightInBlocks !== p._textureHeightInBlocks); - const info = kTextureFormatInfo[format]; +}) +// bytesPerRow must be specified and it must be equal or greater than the bytes size of each row if we are copying multiple rows. +// Note that we are copying one single block on each row in this test. +.filter( + ({ format, bytesPerRow, copyHeightInBlocks }) => + bytesPerRow === undefined && copyHeightInBlocks <= 1 || + bytesPerRow !== undefined && bytesPerRow >= kTextureFormatInfo[format].bytesPerBlock +) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { method, dimension, format, bytesPerRow, copyHeightInBlocks, _textureHeightInBlocks } = + t.params; - const buffer = t.device.createBuffer({ - size: 512 * 8 * 16, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); + const info = kTextureFormatInfo[format]; - let success = false; - // writeTexture doesn't require bytesPerRow to be 256-byte aligned. - if (method === 'WriteTexture') success = true; - // If the copy height <= 1, bytesPerRow is not required. - if (copyHeightInBlocks <= 1 && bytesPerRow === undefined) success = true; - // If bytesPerRow > 0 and it is a multiple of 256, it will succeed if other parameters are valid. - if (bytesPerRow !== undefined && bytesPerRow > 0 && bytesPerRow % 256 === 0) success = true; - - const size = [info.blockWidth, _textureHeightInBlocks * info.blockHeight, 1]; - const texture = t.device.createTexture({ - size, - dimension, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const copySize = [info.blockWidth, copyHeightInBlocks * info.blockHeight, 1]; - - // Expect success in both finish and submit, or validation error in finish - t.testBuffer(buffer, texture, { bytesPerRow }, copySize, { - dataSize: 512 * 8 * 16, - method, - success, - submit: success, - }); + const buffer = t.device.createBuffer({ + size: 512 * 8 * 16, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); + + let success = false; + // writeTexture doesn't require bytesPerRow to be 256-byte aligned. + if (method === 'WriteTexture') success = true; + // If the copy height <= 1, bytesPerRow is not required. + if (copyHeightInBlocks <= 1 && bytesPerRow === undefined) success = true; + // If bytesPerRow > 0 and it is a multiple of 256, it will succeed if other parameters are valid. + if (bytesPerRow !== undefined && bytesPerRow > 0 && bytesPerRow % 256 === 0) success = true; + + const size = [info.blockWidth, _textureHeightInBlocks * info.blockHeight, 1]; + const texture = t.device.createTexture({ + size, + dimension, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); + + const copySize = [info.blockWidth, copyHeightInBlocks * info.blockHeight, 1]; + + // Expect success in both finish and submit, or validation error in finish + t.testBuffer(buffer, texture, { bytesPerRow }, copySize, { + dataSize: 512 * 8 * 16, + method, + success, + submit: success + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_texture_copies.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_texture_copies.spec.js index be77f994a09..9ea44a36d45 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_texture_copies.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/buffer_texture_copies.spec.js @@ -1,36 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyTextureToBuffer and copyBufferToTexture validation tests not covered by the general image_copy tests, or by destroyed,*. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert, unreachable } from '../../../../common/util/util.js'; import { kBufferUsages, kTextureUsages } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; import { kDepthStencilFormats, depthStencilBufferTextureCopySupported, - depthStencilFormatAspectSize, -} from '../../../format_info.js'; + depthStencilFormatAspectSize } from +'../../../format_info.js'; import { align } from '../../../util/math.js'; import { kBufferCopyAlignment, kBytesPerRowAlignment } from '../../../util/texture/layout.js'; import { ValidationTest } from '../validation_test.js'; class ImageCopyTest extends ValidationTest { - testCopyBufferToTexture(source, destination, copySize, isSuccess) { + testCopyBufferToTexture( + source, + destination, + copySize, + isSuccess) + { const { encoder, validateFinishAndSubmit } = this.createEncoder('non-pass'); encoder.copyBufferToTexture(source, destination, copySize); validateFinishAndSubmit(isSuccess, true); } - testCopyTextureToBuffer(source, destination, copySize, isSuccess) { + testCopyTextureToBuffer( + source, + destination, + copySize, + isSuccess) + { const { encoder, validateFinishAndSubmit } = this.createEncoder('non-pass'); encoder.copyTextureToBuffer(source, destination, copySize); validateFinishAndSubmit(isSuccess, true); } - testWriteTexture(destination, uploadData, dataLayout, copySize, isSuccess) { + testWriteTexture( + destination, + uploadData, + dataLayout, + copySize, + isSuccess) + { this.expectGPUError( 'validation', () => this.queue.writeTexture(destination, uploadData, dataLayout, copySize), @@ -41,60 +56,60 @@ class ImageCopyTest extends ValidationTest { export const g = makeTestGroup(ImageCopyTest); -g.test('depth_stencil_format,copy_usage_and_aspect') - .desc( - ` +g.test('depth_stencil_format,copy_usage_and_aspect'). +desc( + ` Validate the combination of usage and aspect of each depth stencil format in copyBufferToTexture, copyTextureToBuffer and writeTexture. See https://gpuweb.github.io/gpuweb/#depth-formats for more details. ` - ) - .params(u => - u // - .combine('format', kDepthStencilFormats) - .beginSubcases() - .combine('aspect', ['all', 'depth-only', 'stencil-only']) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(format); - }) - .fn(t => { - const { format, aspect } = t.params; +). +params((u) => +u // +.combine('format', kDepthStencilFormats). +beginSubcases(). +combine('aspect', ['all', 'depth-only', 'stencil-only']) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(format); +}). +fn((t) => { + const { format, aspect } = t.params; - const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; - const texture = t.device.createTexture({ - size: textureSize, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const uploadBufferSize = 32; - const buffer = t.device.createBuffer({ - size: uploadBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - { - const success = depthStencilBufferTextureCopySupported('CopyB2T', format, aspect); - t.testCopyBufferToTexture({ buffer }, { texture, aspect }, textureSize, success); - } - - { - const success = depthStencilBufferTextureCopySupported('CopyT2B', format, aspect); - t.testCopyTextureToBuffer({ texture, aspect }, { buffer }, textureSize, success); - } - - { - const success = depthStencilBufferTextureCopySupported('WriteTexture', format, aspect); - const uploadData = new Uint8Array(uploadBufferSize); - t.testWriteTexture({ texture, aspect }, uploadData, {}, textureSize, success); - } + const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; + const texture = t.device.createTexture({ + size: textureSize, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('depth_stencil_format,copy_buffer_size') - .desc( - ` + const uploadBufferSize = 32; + const buffer = t.device.createBuffer({ + size: uploadBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + { + const success = depthStencilBufferTextureCopySupported('CopyB2T', format, aspect); + t.testCopyBufferToTexture({ buffer }, { texture, aspect }, textureSize, success); + } + + { + const success = depthStencilBufferTextureCopySupported('CopyT2B', format, aspect); + t.testCopyTextureToBuffer({ texture, aspect }, { buffer }, textureSize, success); + } + + { + const success = depthStencilBufferTextureCopySupported('WriteTexture', format, aspect); + const uploadData = new Uint8Array(uploadBufferSize); + t.testWriteTexture({ texture, aspect }, uploadData, {}, textureSize, success); + } +}); + +g.test('depth_stencil_format,copy_buffer_size'). +desc( + ` Validate the minimum buffer size for each depth stencil format in copyBufferToTexture, copyTextureToBuffer and writeTexture. @@ -104,337 +119,335 @@ g.test('depth_stencil_format,copy_buffer_size') - if the copy fails with a validation error when the buffer size is less than the minimum required buffer size. ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .combine('aspect', ['depth-only', 'stencil-only']) - .combine('copyType', ['CopyB2T', 'CopyT2B', 'WriteTexture']) - .filter(param => - depthStencilBufferTextureCopySupported(param.copyType, param.format, param.aspect) - ) - .beginSubcases() - .combine('copySize', [ - { width: 8, height: 1, depthOrArrayLayers: 1 }, - { width: 4, height: 4, depthOrArrayLayers: 1 }, - { width: 4, height: 4, depthOrArrayLayers: 3 }, - ]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(format); - }) - .fn(t => { - const { format, aspect, copyType, copySize } = t.params; +). +params((u) => +u. +combine('format', kDepthStencilFormats). +combine('aspect', ['depth-only', 'stencil-only']). +combine('copyType', ['CopyB2T', 'CopyT2B', 'WriteTexture']). +filter((param) => +depthStencilBufferTextureCopySupported(param.copyType, param.format, param.aspect) +). +beginSubcases(). +combine('copySize', [ +{ width: 8, height: 1, depthOrArrayLayers: 1 }, +{ width: 4, height: 4, depthOrArrayLayers: 1 }, +{ width: 4, height: 4, depthOrArrayLayers: 3 }] +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(format); +}). +fn((t) => { + const { format, aspect, copyType, copySize } = t.params; - const texture = t.device.createTexture({ - size: copySize, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const texelAspectSize = depthStencilFormatAspectSize(format, aspect); - assert(texelAspectSize > 0); - - const bytesPerRowAlignment = copyType === 'WriteTexture' ? 1 : kBytesPerRowAlignment; - const bytesPerRow = align(texelAspectSize * copySize.width, bytesPerRowAlignment); - const rowsPerImage = copySize.height; - const minimumBufferSize = - bytesPerRow * (rowsPerImage * copySize.depthOrArrayLayers - 1) + - align(texelAspectSize * copySize.width, kBufferCopyAlignment); - assert(minimumBufferSize > kBufferCopyAlignment); - - const bigEnoughBuffer = t.device.createBuffer({ - size: minimumBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - const smallerBuffer = t.device.createBuffer({ - size: minimumBufferSize - kBufferCopyAlignment, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - if (copyType === 'CopyB2T') { - t.testCopyBufferToTexture( - { buffer: bigEnoughBuffer, bytesPerRow, rowsPerImage }, - { texture, aspect }, - copySize, - true - ); - - t.testCopyBufferToTexture( - { buffer: smallerBuffer, bytesPerRow, rowsPerImage }, - { texture, aspect }, - copySize, - false - ); - } else if (copyType === 'CopyT2B') { - t.testCopyTextureToBuffer( - { texture, aspect }, - { buffer: bigEnoughBuffer, bytesPerRow, rowsPerImage }, - copySize, - true - ); - - t.testCopyTextureToBuffer( - { texture, aspect }, - { buffer: smallerBuffer, bytesPerRow, rowsPerImage }, - copySize, - false - ); - } else if (copyType === 'WriteTexture') { - const enoughUploadData = new Uint8Array(minimumBufferSize); - const smallerUploadData = new Uint8Array(minimumBufferSize - kBufferCopyAlignment); - t.testWriteTexture( - { texture, aspect }, - enoughUploadData, - { - bytesPerRow, - rowsPerImage, - }, - copySize, - true - ); - - t.testWriteTexture( - { texture, aspect }, - smallerUploadData, - { - bytesPerRow, - rowsPerImage, - }, - copySize, - false - ); - } else { - unreachable(); - } + const texture = t.device.createTexture({ + size: copySize, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('depth_stencil_format,copy_buffer_offset') - .desc( - ` + const texelAspectSize = depthStencilFormatAspectSize(format, aspect); + assert(texelAspectSize > 0); + + const bytesPerRowAlignment = copyType === 'WriteTexture' ? 1 : kBytesPerRowAlignment; + const bytesPerRow = align(texelAspectSize * copySize.width, bytesPerRowAlignment); + const rowsPerImage = copySize.height; + const minimumBufferSize = + bytesPerRow * (rowsPerImage * copySize.depthOrArrayLayers - 1) + + align(texelAspectSize * copySize.width, kBufferCopyAlignment); + assert(minimumBufferSize > kBufferCopyAlignment); + + const bigEnoughBuffer = t.device.createBuffer({ + size: minimumBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + const smallerBuffer = t.device.createBuffer({ + size: minimumBufferSize - kBufferCopyAlignment, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + if (copyType === 'CopyB2T') { + t.testCopyBufferToTexture( + { buffer: bigEnoughBuffer, bytesPerRow, rowsPerImage }, + { texture, aspect }, + copySize, + true + ); + t.testCopyBufferToTexture( + { buffer: smallerBuffer, bytesPerRow, rowsPerImage }, + { texture, aspect }, + copySize, + false + ); + } else if (copyType === 'CopyT2B') { + t.testCopyTextureToBuffer( + { texture, aspect }, + { buffer: bigEnoughBuffer, bytesPerRow, rowsPerImage }, + copySize, + true + ); + t.testCopyTextureToBuffer( + { texture, aspect }, + { buffer: smallerBuffer, bytesPerRow, rowsPerImage }, + copySize, + false + ); + } else if (copyType === 'WriteTexture') { + const enoughUploadData = new Uint8Array(minimumBufferSize); + const smallerUploadData = new Uint8Array(minimumBufferSize - kBufferCopyAlignment); + t.testWriteTexture( + { texture, aspect }, + enoughUploadData, + { + bytesPerRow, + rowsPerImage + }, + copySize, + true + ); + + t.testWriteTexture( + { texture, aspect }, + smallerUploadData, + { + bytesPerRow, + rowsPerImage + }, + copySize, + false + ); + } else { + unreachable(); + } +}); + +g.test('depth_stencil_format,copy_buffer_offset'). +desc( + ` Validate for every depth stencil formats the buffer offset must be a multiple of 4 in copyBufferToTexture() and copyTextureToBuffer(), but the offset in writeTexture() doesn't always need to be a multiple of 4. ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .combine('aspect', ['depth-only', 'stencil-only']) - .combine('copyType', ['CopyB2T', 'CopyT2B', 'WriteTexture']) - .filter(param => - depthStencilBufferTextureCopySupported(param.copyType, param.format, param.aspect) - ) - .beginSubcases() - .combine('offset', [1, 2, 4, 6, 8]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceForTextureFormatOrSkipTestCase(format); - }) - .fn(t => { - const { format, aspect, copyType, offset } = t.params; +). +params((u) => +u. +combine('format', kDepthStencilFormats). +combine('aspect', ['depth-only', 'stencil-only']). +combine('copyType', ['CopyB2T', 'CopyT2B', 'WriteTexture']). +filter((param) => +depthStencilBufferTextureCopySupported(param.copyType, param.format, param.aspect) +). +beginSubcases(). +combine('offset', [1, 2, 4, 6, 8]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceForTextureFormatOrSkipTestCase(format); +}). +fn((t) => { + const { format, aspect, copyType, offset } = t.params; - const textureSize = { width: 4, height: 4, depthOrArrayLayers: 1 }; + const textureSize = { width: 4, height: 4, depthOrArrayLayers: 1 }; - const texture = t.device.createTexture({ - size: textureSize, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const texelAspectSize = depthStencilFormatAspectSize(format, aspect); - assert(texelAspectSize > 0); - - const bytesPerRowAlignment = copyType === 'WriteTexture' ? 1 : kBytesPerRowAlignment; - const bytesPerRow = align(texelAspectSize * textureSize.width, bytesPerRowAlignment); - const rowsPerImage = textureSize.height; - const minimumBufferSize = - bytesPerRow * (rowsPerImage * textureSize.depthOrArrayLayers - 1) + - align(texelAspectSize * textureSize.width, kBufferCopyAlignment); - assert(minimumBufferSize > kBufferCopyAlignment); - - const buffer = t.device.createBuffer({ - size: align(minimumBufferSize + offset, kBufferCopyAlignment), - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - const isSuccess = copyType === 'WriteTexture' ? true : offset % 4 === 0; - - if (copyType === 'CopyB2T') { - t.testCopyBufferToTexture( - { buffer, offset, bytesPerRow, rowsPerImage }, - { texture, aspect }, - textureSize, - isSuccess - ); - } else if (copyType === 'CopyT2B') { - t.testCopyTextureToBuffer( - { texture, aspect }, - { buffer, offset, bytesPerRow, rowsPerImage }, - textureSize, - isSuccess - ); - } else if (copyType === 'WriteTexture') { - const uploadData = new Uint8Array(minimumBufferSize + offset); - t.testWriteTexture( - { texture, aspect }, - uploadData, - { - offset, - bytesPerRow, - rowsPerImage, - }, - textureSize, - isSuccess - ); - } else { - unreachable(); - } + const texture = t.device.createTexture({ + size: textureSize, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('sample_count') - .desc( - ` + const texelAspectSize = depthStencilFormatAspectSize(format, aspect); + assert(texelAspectSize > 0); + + const bytesPerRowAlignment = copyType === 'WriteTexture' ? 1 : kBytesPerRowAlignment; + const bytesPerRow = align(texelAspectSize * textureSize.width, bytesPerRowAlignment); + const rowsPerImage = textureSize.height; + const minimumBufferSize = + bytesPerRow * (rowsPerImage * textureSize.depthOrArrayLayers - 1) + + align(texelAspectSize * textureSize.width, kBufferCopyAlignment); + assert(minimumBufferSize > kBufferCopyAlignment); + + const buffer = t.device.createBuffer({ + size: align(minimumBufferSize + offset, kBufferCopyAlignment), + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + const isSuccess = copyType === 'WriteTexture' ? true : offset % 4 === 0; + + if (copyType === 'CopyB2T') { + t.testCopyBufferToTexture( + { buffer, offset, bytesPerRow, rowsPerImage }, + { texture, aspect }, + textureSize, + isSuccess + ); + } else if (copyType === 'CopyT2B') { + t.testCopyTextureToBuffer( + { texture, aspect }, + { buffer, offset, bytesPerRow, rowsPerImage }, + textureSize, + isSuccess + ); + } else if (copyType === 'WriteTexture') { + const uploadData = new Uint8Array(minimumBufferSize + offset); + t.testWriteTexture( + { texture, aspect }, + uploadData, + { + offset, + bytesPerRow, + rowsPerImage + }, + textureSize, + isSuccess + ); + } else { + unreachable(); + } +}); + +g.test('sample_count'). +desc( + ` Test that the texture sample count. Check that a validation error is generated if sample count is not 1. ` - ) - .params(u => - u // - // writeTexture is handled by writeTexture.spec.ts. - .combine('copyType', ['CopyB2T', 'CopyT2B']) - .beginSubcases() - .combine('sampleCount', [1, 4]) - ) - .fn(t => { - const { sampleCount, copyType } = t.params; +). +params((u) => +u // +// writeTexture is handled by writeTexture.spec.ts. +.combine('copyType', ['CopyB2T', 'CopyT2B']). +beginSubcases(). +combine('sampleCount', [1, 4]) +). +fn((t) => { + const { sampleCount, copyType } = t.params; - let usage = GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST; - // WebGPU SPEC requires multisampled textures must have RENDER_ATTACHMENT usage. - if (sampleCount > 1) { - usage |= GPUTextureUsage.RENDER_ATTACHMENT; - } - const texture = t.device.createTexture({ - size: { width: 16, height: 16 }, - sampleCount, - format: 'bgra8unorm', - usage, - }); - - const uploadBufferSize = 32; - const buffer = t.device.createBuffer({ - size: uploadBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - - const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; - - const isSuccess = sampleCount === 1; - - if (copyType === 'CopyB2T') { - t.testCopyBufferToTexture({ buffer }, { texture }, textureSize, isSuccess); - } else if (copyType === 'CopyT2B') { - t.testCopyTextureToBuffer({ texture }, { buffer }, textureSize, isSuccess); - } + let usage = GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST; + // WebGPU SPEC requires multisampled textures must have RENDER_ATTACHMENT usage. + if (sampleCount > 1) { + usage |= GPUTextureUsage.RENDER_ATTACHMENT; + } + const texture = t.device.createTexture({ + size: { width: 16, height: 16 }, + sampleCount, + format: 'bgra8unorm', + usage }); + const uploadBufferSize = 32; + const buffer = t.device.createBuffer({ + size: uploadBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST + }); + + const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; + + const isSuccess = sampleCount === 1; + + if (copyType === 'CopyB2T') { + t.testCopyBufferToTexture({ buffer }, { texture }, textureSize, isSuccess); + } else if (copyType === 'CopyT2B') { + t.testCopyTextureToBuffer({ texture }, { buffer }, textureSize, isSuccess); + } +}); + const kRequiredTextureUsage = { CopyT2B: GPUConst.TextureUsage.COPY_SRC, - CopyB2T: GPUConst.TextureUsage.COPY_DST, + CopyB2T: GPUConst.TextureUsage.COPY_DST }; const kRequiredBufferUsage = { CopyB2T: GPUConst.BufferUsage.COPY_SRC, - CopyT2B: GPUConst.BufferUsage.COPY_DST, + CopyT2B: GPUConst.BufferUsage.COPY_DST }; -g.test('texture_buffer_usages') - .desc( - ` +g.test('texture_buffer_usages'). +desc( + ` Tests calling copyTextureToBuffer or copyBufferToTexture with the texture and the buffer missed COPY_SRC, COPY_DST usage respectively. - texture and buffer {with, without} COPY_SRC and COPY_DST usage. ` - ) - .params(u => - u // - .combine('copyType', ['CopyB2T', 'CopyT2B']) - .beginSubcases() - .combine('textureUsage', kTextureUsages) - .expand('_textureUsageValid', p => [p.textureUsage === kRequiredTextureUsage[p.copyType]]) - .combine('bufferUsage', kBufferUsages) - .expand('_bufferUsageValid', p => [p.bufferUsage === kRequiredBufferUsage[p.copyType]]) - .filter(p => p._textureUsageValid || p._bufferUsageValid) - ) - .fn(t => { - const { copyType, textureUsage, _textureUsageValid, bufferUsage, _bufferUsageValid } = t.params; +). +params((u) => +u // +.combine('copyType', ['CopyB2T', 'CopyT2B']). +beginSubcases(). +combine('textureUsage', kTextureUsages). +expand('_textureUsageValid', (p) => [p.textureUsage === kRequiredTextureUsage[p.copyType]]). +combine('bufferUsage', kBufferUsages). +expand('_bufferUsageValid', (p) => [p.bufferUsage === kRequiredBufferUsage[p.copyType]]). +filter((p) => p._textureUsageValid || p._bufferUsageValid) +). +fn((t) => { + const { copyType, textureUsage, _textureUsageValid, bufferUsage, _bufferUsageValid } = t.params; - const texture = t.device.createTexture({ - size: { width: 16, height: 16 }, - format: 'rgba8unorm', - usage: textureUsage, - }); - - const uploadBufferSize = 32; - const buffer = t.device.createBuffer({ - size: uploadBufferSize, - usage: bufferUsage, - }); - - const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; - - const isSuccess = _textureUsageValid && _bufferUsageValid; - if (copyType === 'CopyB2T') { - t.testCopyBufferToTexture({ buffer }, { texture }, textureSize, isSuccess); - } else if (copyType === 'CopyT2B') { - t.testCopyTextureToBuffer({ texture }, { buffer }, textureSize, isSuccess); - } + const texture = t.device.createTexture({ + size: { width: 16, height: 16 }, + format: 'rgba8unorm', + usage: textureUsage }); -g.test('device_mismatch') - .desc( - ` + const uploadBufferSize = 32; + const buffer = t.device.createBuffer({ + size: uploadBufferSize, + usage: bufferUsage + }); + + const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; + + const isSuccess = _textureUsageValid && _bufferUsageValid; + if (copyType === 'CopyB2T') { + t.testCopyBufferToTexture({ buffer }, { texture }, textureSize, isSuccess); + } else if (copyType === 'CopyT2B') { + t.testCopyTextureToBuffer({ texture }, { buffer }, textureSize, isSuccess); + } +}); + +g.test('device_mismatch'). +desc( + ` Tests copyBufferToTexture and copyTextureToBuffer cannot be called with a buffer or a texture created from another device. ` - ) - .params(u => - u // - .combine('copyType', ['CopyB2T', 'CopyT2B']) - .beginSubcases() - .combineWithParams([ - { bufMismatched: false, texMismatched: false }, // control case - { bufMismatched: true, texMismatched: false }, - { bufMismatched: false, texMismatched: true }, - ]) - ) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { copyType, bufMismatched, texMismatched } = t.params; +). +params((u) => +u // +.combine('copyType', ['CopyB2T', 'CopyT2B']). +beginSubcases(). +combineWithParams([ +{ bufMismatched: false, texMismatched: false }, // control case +{ bufMismatched: true, texMismatched: false }, +{ bufMismatched: false, texMismatched: true }] +) +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { copyType, bufMismatched, texMismatched } = t.params; - const uploadBufferSize = 32; - const buffer = (bufMismatched ? t.mismatchedDevice : t.device).createBuffer({ - size: uploadBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(buffer); - - const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; - const texture = (texMismatched ? t.mismatchedDevice : t.device).createTexture({ - size: textureSize, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - t.trackForCleanup(texture); - - const isValid = !bufMismatched && !texMismatched; - - if (copyType === 'CopyB2T') { - t.testCopyBufferToTexture({ buffer }, { texture }, textureSize, isValid); - } else if (copyType === 'CopyT2B') { - t.testCopyTextureToBuffer({ texture }, { buffer }, textureSize, isValid); - } + const uploadBufferSize = 32; + const buffer = (bufMismatched ? t.mismatchedDevice : t.device).createBuffer({ + size: uploadBufferSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); + t.trackForCleanup(buffer); + + const textureSize = { width: 1, height: 1, depthOrArrayLayers: 1 }; + const texture = (texMismatched ? t.mismatchedDevice : t.device).createTexture({ + size: textureSize, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST + }); + t.trackForCleanup(texture); + + const isValid = !bufMismatched && !texMismatched; + + if (copyType === 'CopyB2T') { + t.testCopyBufferToTexture({ buffer }, { texture }, textureSize, isValid); + } else if (copyType === 'CopyT2B') { + t.testCopyTextureToBuffer({ texture }, { buffer }, textureSize, isValid); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/image_copy.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/image_copy.js index 0e2167c1b15..3cffa6b3ce0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/image_copy.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/image_copy.js @@ -1,77 +1,94 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { - depthStencilFormatCopyableAspects, +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { depthStencilFormatCopyableAspects, + kTextureFormatInfo, - isCompressedTextureFormat, -} from '../../../format_info.js'; + isCompressedTextureFormat } from +'../../../format_info.js'; import { align } from '../../../util/math.js'; import { ValidationTest } from '../validation_test.js'; export class ImageCopyTest extends ValidationTest { - testRun(textureCopyView, textureDataLayout, size, { method, dataSize, success, submit = false }) { + testRun( + textureCopyView, + textureDataLayout, + size, + { + method, + dataSize, + success, + submit = false + + + + + + + + }) + { switch (method) { - case 'WriteTexture': { - const data = new Uint8Array(dataSize); + case 'WriteTexture':{ + const data = new Uint8Array(dataSize); - this.expectValidationError(() => { - this.device.queue.writeTexture(textureCopyView, data, textureDataLayout, size); - }, !success); - - break; - } - case 'CopyB2T': { - const buffer = this.device.createBuffer({ - size: dataSize, - usage: GPUBufferUsage.COPY_SRC, - }); - this.trackForCleanup(buffer); - - const encoder = this.device.createCommandEncoder(); - encoder.copyBufferToTexture({ buffer, ...textureDataLayout }, textureCopyView, size); - - if (submit) { - const cmd = encoder.finish(); this.expectValidationError(() => { - this.device.queue.submit([cmd]); - }, !success); - } else { - this.expectValidationError(() => { - encoder.finish(); + this.device.queue.writeTexture(textureCopyView, data, textureDataLayout, size); }, !success); + + break; } + case 'CopyB2T':{ + const buffer = this.device.createBuffer({ + size: dataSize, + usage: GPUBufferUsage.COPY_SRC + }); + this.trackForCleanup(buffer); - break; - } - case 'CopyT2B': { - if (this.isCompatibility && isCompressedTextureFormat(textureCopyView.texture.format)) { - this.skip( - 'copyTextureToBuffer is not supported for compressed texture formats in compatibility mode.' - ); + const encoder = this.device.createCommandEncoder(); + encoder.copyBufferToTexture({ buffer, ...textureDataLayout }, textureCopyView, size); + + if (submit) { + const cmd = encoder.finish(); + this.expectValidationError(() => { + this.device.queue.submit([cmd]); + }, !success); + } else { + this.expectValidationError(() => { + encoder.finish(); + }, !success); + } + + break; } - const buffer = this.device.createBuffer({ - size: dataSize, - usage: GPUBufferUsage.COPY_DST, - }); - this.trackForCleanup(buffer); + case 'CopyT2B':{ + if (this.isCompatibility && isCompressedTextureFormat(textureCopyView.texture.format)) { + this.skip( + 'copyTextureToBuffer is not supported for compressed texture formats in compatibility mode.' + ); + } + const buffer = this.device.createBuffer({ + size: dataSize, + usage: GPUBufferUsage.COPY_DST + }); + this.trackForCleanup(buffer); - const encoder = this.device.createCommandEncoder(); - encoder.copyTextureToBuffer(textureCopyView, { buffer, ...textureDataLayout }, size); + const encoder = this.device.createCommandEncoder(); + encoder.copyTextureToBuffer(textureCopyView, { buffer, ...textureDataLayout }, size); - if (submit) { - const cmd = encoder.finish(); - this.expectValidationError(() => { - this.device.queue.submit([cmd]); - }, !success); - } else { - this.expectValidationError(() => { - encoder.finish(); - }, !success); + if (submit) { + const cmd = encoder.finish(); + this.expectValidationError(() => { + this.device.queue.submit([cmd]); + }, !success); + } else { + this.expectValidationError(() => { + encoder.finish(); + }, !success); + } + + break; } - - break; - } } } @@ -81,79 +98,91 @@ export class ImageCopyTest extends ValidationTest { * should be possible. */ createAlignedTexture( - format, - size = { - width: 1, - height: 1, - depthOrArrayLayers: 1, - }, - origin = { x: 0, y: 0, z: 0 }, - dimension = '2d' - ) { + format, + size = { + width: 1, + height: 1, + depthOrArrayLayers: 1 + }, + origin = { x: 0, y: 0, z: 0 }, + dimension = '2d') + { const info = kTextureFormatInfo[format]; const alignedSize = { width: align(Math.max(1, size.width + origin.x), info.blockWidth), height: align(Math.max(1, size.height + origin.y), info.blockHeight), - depthOrArrayLayers: Math.max(1, size.depthOrArrayLayers + origin.z), + depthOrArrayLayers: Math.max(1, size.depthOrArrayLayers + origin.z) }; return this.device.createTexture({ size: alignedSize, dimension, format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); } testBuffer( - buffer, - texture, - textureDataLayout, - size, - { method, dataSize, success, submit = true } - ) { + buffer, + texture, + textureDataLayout, + size, + { + method, + dataSize, + success, + submit = true + + + + + + + + }) + { switch (method) { - case 'WriteTexture': { - const data = new Uint8Array(dataSize); + case 'WriteTexture':{ + const data = new Uint8Array(dataSize); - this.expectValidationError(() => { - this.device.queue.writeTexture({ texture }, data, textureDataLayout, size); - }, !success); + this.expectValidationError(() => { + this.device.queue.writeTexture({ texture }, data, textureDataLayout, size); + }, !success); - break; - } - case 'CopyB2T': { - const { encoder, validateFinish, validateFinishAndSubmit } = this.createEncoder('non-pass'); - encoder.copyBufferToTexture({ buffer, ...textureDataLayout }, { texture }, size); - - if (submit) { - // validation error is expected to come from the submit and encoding should succeed - validateFinishAndSubmit(true, success); - } else { - // validation error is expected to come from the encoding - validateFinish(success); + break; } + case 'CopyB2T':{ + const { encoder, validateFinish, validateFinishAndSubmit } = this.createEncoder('non-pass'); + encoder.copyBufferToTexture({ buffer, ...textureDataLayout }, { texture }, size); - break; - } - case 'CopyT2B': { - if (this.isCompatibility && isCompressedTextureFormat(texture.format)) { - this.skip( - 'copyTextureToBuffer is not supported for compressed texture formats in compatibility mode.' - ); + if (submit) { + // validation error is expected to come from the submit and encoding should succeed + validateFinishAndSubmit(true, success); + } else { + // validation error is expected to come from the encoding + validateFinish(success); + } + + break; } - const { encoder, validateFinish, validateFinishAndSubmit } = this.createEncoder('non-pass'); - encoder.copyTextureToBuffer({ texture }, { buffer, ...textureDataLayout }, size); + case 'CopyT2B':{ + if (this.isCompatibility && isCompressedTextureFormat(texture.format)) { + this.skip( + 'copyTextureToBuffer is not supported for compressed texture formats in compatibility mode.' + ); + } + const { encoder, validateFinish, validateFinishAndSubmit } = this.createEncoder('non-pass'); + encoder.copyTextureToBuffer({ texture }, { buffer, ...textureDataLayout }, size); - if (submit) { - // validation error is expected to come from the submit and encoding should succeed - validateFinishAndSubmit(true, success); - } else { - // validation error is expected to come from the encoding - validateFinish(success); + if (submit) { + // validation error is expected to come from the submit and encoding should succeed + validateFinishAndSubmit(true, success); + } else { + // validation error is expected to come from the encoding + validateFinish(success); + } + + break; } - - break; - } } } } @@ -168,6 +197,18 @@ function valuesToTestDivisibilityBy(number) { return values; } + + + + + + + + + + + + // This is a helper function used for expanding test parameters for offset alignment, by spec export function texelBlockAlignmentTestExpanderForOffset({ format }) { const info = kTextureFormatInfo[format]; @@ -184,7 +225,10 @@ export function texelBlockAlignmentTestExpanderForRowsPerImage({ format }) { } // This is a helper function used for expanding test parameters for texel block alignment tests on origin and size -export function texelBlockAlignmentTestExpanderForValueToCoordinate({ format, coordinateToTest }) { +export function texelBlockAlignmentTestExpanderForValueToCoordinate({ + format, + coordinateToTest +}) { switch (coordinateToTest) { case 'x': case 'width': @@ -204,8 +248,10 @@ export function texelBlockAlignmentTestExpanderForValueToCoordinate({ format, co export function formatCopyableWithMethod({ format, method }) { const info = kTextureFormatInfo[format]; if (info.depth || info.stencil) { - const supportedAspects = depthStencilFormatCopyableAspects(method, format); - + const supportedAspects = depthStencilFormatCopyableAspects( + method, + format + ); return supportedAspects.length > 0; } if (method === 'CopyT2B') { @@ -216,12 +262,17 @@ export function formatCopyableWithMethod({ format, method }) { } // This is a helper function used for filtering test parameters -export function getACopyableAspectWithMethod({ format, method }) { +export function getACopyableAspectWithMethod({ + format, + method +}) { const info = kTextureFormatInfo[format]; if (info.depth || info.stencil) { - const supportedAspects = depthStencilFormatCopyableAspects(method, format); - + const supportedAspects = depthStencilFormatCopyableAspects( + method, + format + ); return supportedAspects[0]; } return 'all'; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/layout_related.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/layout_related.spec.js index 4f0e2810cc3..8246aebf289 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/layout_related.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/layout_related.spec.js @@ -1,36 +1,35 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for the linear data layout of linear data <-> texture copies +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for the linear data layout of linear data <-> texture copies -TODO check if the tests need to be updated to support aspects of depth-stencil textures`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +TODO check if the tests need to be updated to support aspects of depth-stencil textures`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert } from '../../../../common/util/util.js'; import { kTextureDimensions } from '../../../capability_info.js'; import { kTextureFormatInfo, kSizedTextureFormats, - textureDimensionAndFormatCompatible, -} from '../../../format_info.js'; + textureDimensionAndFormatCompatible } from +'../../../format_info.js'; import { align } from '../../../util/math.js'; import { bytesInACompleteRow, dataBytesForCopyOrOverestimate, dataBytesForCopyOrFail, - kImageCopyTypes, -} from '../../../util/texture/layout.js'; + kImageCopyTypes } from +'../../../util/texture/layout.js'; import { ImageCopyTest, texelBlockAlignmentTestExpanderForOffset, texelBlockAlignmentTestExpanderForRowsPerImage, - formatCopyableWithMethod, -} from './image_copy.js'; + formatCopyableWithMethod } from +'./image_copy.js'; export const g = makeTestGroup(ImageCopyTest); -g.test('bound_on_rows_per_image') - .desc( - ` +g.test('bound_on_rows_per_image'). +desc( + ` Test that rowsPerImage must be at least the copy height (if defined). - for various copy methods - for all texture dimensions @@ -38,92 +37,92 @@ Test that rowsPerImage must be at least the copy height (if defined). - for various copy heights - for various copy depths ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combineWithParams([ - { dimension: '1d', size: [4, 1, 1] }, - { dimension: '2d', size: [4, 4, 1] }, - { dimension: '2d', size: [4, 4, 3] }, - { dimension: '3d', size: [4, 4, 3] }, - ]) - .beginSubcases() - .combine('rowsPerImage', [undefined, 0, 1, 2, 1024]) - .combine('copyHeightInBlocks', [0, 1, 2]) - .combine('copyDepth', [1, 3]) - .unless(p => p.dimension === '1d' && p.copyHeightInBlocks !== 1) - .unless(p => p.copyDepth > p.size[2]) - ) - .fn(t => { - const { rowsPerImage, copyHeightInBlocks, copyDepth, dimension, size, method } = t.params; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combineWithParams([ +{ dimension: '1d', size: [4, 1, 1] }, +{ dimension: '2d', size: [4, 4, 1] }, +{ dimension: '2d', size: [4, 4, 3] }, +{ dimension: '3d', size: [4, 4, 3] }] +). +beginSubcases(). +combine('rowsPerImage', [undefined, 0, 1, 2, 1024]). +combine('copyHeightInBlocks', [0, 1, 2]). +combine('copyDepth', [1, 3]). +unless((p) => p.dimension === '1d' && p.copyHeightInBlocks !== 1). +unless((p) => p.copyDepth > p.size[2]) +). +fn((t) => { + const { rowsPerImage, copyHeightInBlocks, copyDepth, dimension, size, method } = t.params; - const format = 'rgba8unorm'; - const copyHeight = copyHeightInBlocks * kTextureFormatInfo[format].blockHeight; + const format = 'rgba8unorm'; + const copyHeight = copyHeightInBlocks * kTextureFormatInfo[format].blockHeight; - const texture = t.device.createTexture({ - size, - dimension, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const layout = { bytesPerRow: 1024, rowsPerImage }; - const copySize = { width: 0, height: copyHeight, depthOrArrayLayers: copyDepth }; - const { minDataSizeOrOverestimate, copyValid } = dataBytesForCopyOrOverestimate({ - layout, - format, - copySize, - method, - }); - - t.testRun({ texture }, layout, copySize, { - dataSize: minDataSizeOrOverestimate, - method, - success: copyValid, - }); + const texture = t.device.createTexture({ + size, + dimension, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('copy_end_overflows_u64') - .desc( - ` + const layout = { bytesPerRow: 1024, rowsPerImage }; + const copySize = { width: 0, height: copyHeight, depthOrArrayLayers: copyDepth }; + const { minDataSizeOrOverestimate, copyValid } = dataBytesForCopyOrOverestimate({ + layout, + format, + copySize, + method + }); + + t.testRun({ texture }, layout, copySize, { + dataSize: minDataSizeOrOverestimate, + method, + success: copyValid + }); +}); + +g.test('copy_end_overflows_u64'). +desc( + ` Test an error is produced when offset+requiredBytesInCopy overflows GPUSize64. - for various copy methods ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .beginSubcases() - .combineWithParams([ - { bytesPerRow: 2 ** 31, rowsPerImage: 2 ** 31, depthOrArrayLayers: 1, _success: true }, // success case - { bytesPerRow: 2 ** 31, rowsPerImage: 2 ** 31, depthOrArrayLayers: 16, _success: false }, // bytesPerRow * rowsPerImage * (depthOrArrayLayers - 1) overflows. - ]) - ) - .fn(t => { - const { method, bytesPerRow, rowsPerImage, depthOrArrayLayers, _success } = t.params; +). +params((u) => +u. +combine('method', kImageCopyTypes). +beginSubcases(). +combineWithParams([ +{ bytesPerRow: 2 ** 31, rowsPerImage: 2 ** 31, depthOrArrayLayers: 1, _success: true }, // success case +{ bytesPerRow: 2 ** 31, rowsPerImage: 2 ** 31, depthOrArrayLayers: 16, _success: false } // bytesPerRow * rowsPerImage * (depthOrArrayLayers - 1) overflows. +]) +). +fn((t) => { + const { method, bytesPerRow, rowsPerImage, depthOrArrayLayers, _success } = t.params; - const texture = t.device.createTexture({ - size: [1, 1, depthOrArrayLayers], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - t.testRun( - { texture }, - { bytesPerRow, rowsPerImage }, - { width: 1, height: 1, depthOrArrayLayers }, - { - dataSize: 10000, - method, - success: _success, - } - ); + const texture = t.device.createTexture({ + size: [1, 1, depthOrArrayLayers], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('required_bytes_in_copy') - .desc( - ` + t.testRun( + { texture }, + { bytesPerRow, rowsPerImage }, + { width: 1, height: 1, depthOrArrayLayers }, + { + dataSize: 10000, + method, + success: _success + } + ); +}); + +g.test('required_bytes_in_copy'). +desc( + ` Test the computation of requiredBytesInCopy by computing the minimum data size for the copy and checking success/error at the boundary. - for various copy methods - for all formats @@ -132,202 +131,202 @@ Test the computation of requiredBytesInCopy by computing the minimum data size f - for various copy sizes - for various offsets in the linear data ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combine('format', kSizedTextureFormats) - .filter(formatCopyableWithMethod) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combineWithParams([ - { bytesPerRowPadding: 0, rowsPerImagePaddingInBlocks: 0 }, // no padding - { bytesPerRowPadding: 0, rowsPerImagePaddingInBlocks: 6 }, // rowsPerImage padding - { bytesPerRowPadding: 6, rowsPerImagePaddingInBlocks: 0 }, // bytesPerRow padding - { bytesPerRowPadding: 15, rowsPerImagePaddingInBlocks: 17 }, // both paddings - ]) - .combineWithParams([ - { copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 5, _offsetMultiplier: 0 }, // standard copy - { copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 3, _offsetMultiplier: 11 }, // standard copy, offset > 0 - { copyWidthInBlocks: 256, copyHeightInBlocks: 3, copyDepth: 2, _offsetMultiplier: 0 }, // copyWidth is 256-aligned - { copyWidthInBlocks: 0, copyHeightInBlocks: 4, copyDepth: 5, _offsetMultiplier: 0 }, // empty copy because of width - { copyWidthInBlocks: 3, copyHeightInBlocks: 0, copyDepth: 5, _offsetMultiplier: 0 }, // empty copy because of height - { copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 0, _offsetMultiplier: 13 }, // empty copy because of depth, offset > 0 - { copyWidthInBlocks: 1, copyHeightInBlocks: 4, copyDepth: 5, _offsetMultiplier: 0 }, // copyWidth = 1 - { copyWidthInBlocks: 3, copyHeightInBlocks: 1, copyDepth: 5, _offsetMultiplier: 15 }, // copyHeight = 1, offset > 0 - { copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 1, _offsetMultiplier: 0 }, // copyDepth = 1 - { copyWidthInBlocks: 7, copyHeightInBlocks: 1, copyDepth: 1, _offsetMultiplier: 0 }, // copyHeight = 1 and copyDepth = 1 - ]) - // The test texture size will be rounded up from the copy size to the next valid texture size. - // If the format is a depth/stencil format, its copy size must equal to subresource's size. - // So filter out depth/stencil cases where the rounded-up texture size would be different from the copy size. - .filter(({ format, copyWidthInBlocks, copyHeightInBlocks, copyDepth }) => { - const info = kTextureFormatInfo[format]; - return ( - (!info.depth && !info.stencil) || - (copyWidthInBlocks > 0 && copyHeightInBlocks > 0 && copyDepth > 0) - ); - }) - .unless(p => p.dimension === '1d' && (p.copyHeightInBlocks > 1 || p.copyDepth > 1)) - .expand('offset', p => { - const info = kTextureFormatInfo[p.format]; - if (info.depth || info.stencil) { - return [p._offsetMultiplier * 4]; - } - return [p._offsetMultiplier * info.color.bytes]; - }) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - offset, - bytesPerRowPadding, - rowsPerImagePaddingInBlocks, - copyWidthInBlocks, - copyHeightInBlocks, - copyDepth, - format, - dimension, - method, - } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combine('format', kSizedTextureFormats). +filter(formatCopyableWithMethod). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combineWithParams([ +{ bytesPerRowPadding: 0, rowsPerImagePaddingInBlocks: 0 }, // no padding +{ bytesPerRowPadding: 0, rowsPerImagePaddingInBlocks: 6 }, // rowsPerImage padding +{ bytesPerRowPadding: 6, rowsPerImagePaddingInBlocks: 0 }, // bytesPerRow padding +{ bytesPerRowPadding: 15, rowsPerImagePaddingInBlocks: 17 } // both paddings +]). +combineWithParams([ +{ copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 5, _offsetMultiplier: 0 }, // standard copy +{ copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 3, _offsetMultiplier: 11 }, // standard copy, offset > 0 +{ copyWidthInBlocks: 256, copyHeightInBlocks: 3, copyDepth: 2, _offsetMultiplier: 0 }, // copyWidth is 256-aligned +{ copyWidthInBlocks: 0, copyHeightInBlocks: 4, copyDepth: 5, _offsetMultiplier: 0 }, // empty copy because of width +{ copyWidthInBlocks: 3, copyHeightInBlocks: 0, copyDepth: 5, _offsetMultiplier: 0 }, // empty copy because of height +{ copyWidthInBlocks: 3, copyHeightInBlocks: 4, copyDepth: 0, _offsetMultiplier: 13 }, // empty copy because of depth, offset > 0 +{ copyWidthInBlocks: 1, copyHeightInBlocks: 4, copyDepth: 5, _offsetMultiplier: 0 }, // copyWidth = 1 +{ copyWidthInBlocks: 3, copyHeightInBlocks: 1, copyDepth: 5, _offsetMultiplier: 15 }, // copyHeight = 1, offset > 0 +{ copyWidthInBlocks: 5, copyHeightInBlocks: 4, copyDepth: 1, _offsetMultiplier: 0 }, // copyDepth = 1 +{ copyWidthInBlocks: 7, copyHeightInBlocks: 1, copyDepth: 1, _offsetMultiplier: 0 } // copyHeight = 1 and copyDepth = 1 +]) +// The test texture size will be rounded up from the copy size to the next valid texture size. +// If the format is a depth/stencil format, its copy size must equal to subresource's size. +// So filter out depth/stencil cases where the rounded-up texture size would be different from the copy size. +.filter(({ format, copyWidthInBlocks, copyHeightInBlocks, copyDepth }) => { + const info = kTextureFormatInfo[format]; + return ( + !info.depth && !info.stencil || + copyWidthInBlocks > 0 && copyHeightInBlocks > 0 && copyDepth > 0); - // In the CopyB2T and CopyT2B cases we need to have bytesPerRow 256-aligned, - // to make this happen we align the bytesInACompleteRow value and multiply - // bytesPerRowPadding by 256. - const bytesPerRowAlignment = method === 'WriteTexture' ? 1 : 256; - const copyWidth = copyWidthInBlocks * info.blockWidth; - const copyHeight = copyHeightInBlocks * info.blockHeight; - const rowsPerImage = copyHeight + rowsPerImagePaddingInBlocks * info.blockHeight; - const bytesPerRow = - align(bytesInACompleteRow(copyWidth, format), bytesPerRowAlignment) + - bytesPerRowPadding * bytesPerRowAlignment; - const copySize = { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }; +}). +unless((p) => p.dimension === '1d' && (p.copyHeightInBlocks > 1 || p.copyDepth > 1)). +expand('offset', (p) => { + const info = kTextureFormatInfo[p.format]; + if (info.depth || info.stencil) { + return [p._offsetMultiplier * 4]; + } + return [p._offsetMultiplier * info.color.bytes]; +}) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + offset, + bytesPerRowPadding, + rowsPerImagePaddingInBlocks, + copyWidthInBlocks, + copyHeightInBlocks, + copyDepth, + format, + dimension, + method + } = t.params; + const info = kTextureFormatInfo[format]; - const layout = { offset, bytesPerRow, rowsPerImage }; - const minDataSize = dataBytesForCopyOrFail({ layout, format, copySize, method }); + // In the CopyB2T and CopyT2B cases we need to have bytesPerRow 256-aligned, + // to make this happen we align the bytesInACompleteRow value and multiply + // bytesPerRowPadding by 256. + const bytesPerRowAlignment = method === 'WriteTexture' ? 1 : 256; + const copyWidth = copyWidthInBlocks * info.blockWidth; + const copyHeight = copyHeightInBlocks * info.blockHeight; + const rowsPerImage = copyHeight + rowsPerImagePaddingInBlocks * info.blockHeight; + const bytesPerRow = + align(bytesInACompleteRow(copyWidth, format), bytesPerRowAlignment) + + bytesPerRowPadding * bytesPerRowAlignment; + const copySize = { width: copyWidth, height: copyHeight, depthOrArrayLayers: copyDepth }; - const texture = t.createAlignedTexture(format, copySize, undefined, dimension); + const layout = { offset, bytesPerRow, rowsPerImage }; + const minDataSize = dataBytesForCopyOrFail({ layout, format, copySize, method }); - t.testRun({ texture }, layout, copySize, { - dataSize: minDataSize, - method, - success: true, - }); + const texture = t.createAlignedTexture(format, copySize, undefined, dimension); - if (minDataSize > 0) { - t.testRun({ texture }, layout, copySize, { - dataSize: minDataSize - 1, - method, - success: false, - }); - } + t.testRun({ texture }, layout, copySize, { + dataSize: minDataSize, + method, + success: true }); -g.test('rows_per_image_alignment') - .desc( - ` + if (minDataSize > 0) { + t.testRun({ texture }, layout, copySize, { + dataSize: minDataSize - 1, + method, + success: false + }); + } +}); + +g.test('rows_per_image_alignment'). +desc( + ` Test that rowsPerImage has no alignment constraints. - for various copy methods - for all sized format - for all dimensions - for various rowsPerImage ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combine('format', kSizedTextureFormats) - .filter(formatCopyableWithMethod) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .expand('rowsPerImage', texelBlockAlignmentTestExpanderForRowsPerImage) - // Copy height is info.blockHeight, so rowsPerImage must be equal or greater than it. - .filter(({ rowsPerImage, format }) => rowsPerImage >= kTextureFormatInfo[format].blockHeight) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { rowsPerImage, format, method } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combine('format', kSizedTextureFormats). +filter(formatCopyableWithMethod). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +expand('rowsPerImage', texelBlockAlignmentTestExpanderForRowsPerImage) +// Copy height is info.blockHeight, so rowsPerImage must be equal or greater than it. +.filter(({ rowsPerImage, format }) => rowsPerImage >= kTextureFormatInfo[format].blockHeight) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { rowsPerImage, format, method } = t.params; + const info = kTextureFormatInfo[format]; - const size = { width: info.blockWidth, height: info.blockHeight, depthOrArrayLayers: 1 }; - const texture = t.device.createTexture({ - size, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - t.testRun({ texture }, { bytesPerRow: 256, rowsPerImage }, size, { - dataSize: info.bytesPerBlock, - method, - success: true, - }); + const size = { width: info.blockWidth, height: info.blockHeight, depthOrArrayLayers: 1 }; + const texture = t.device.createTexture({ + size, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('offset_alignment') - .desc( - ` + t.testRun({ texture }, { bytesPerRow: 256, rowsPerImage }, size, { + dataSize: info.bytesPerBlock, + method, + success: true + }); +}); + +g.test('offset_alignment'). +desc( + ` Test the alignment requirement on the linear data offset (block size, or 4 for depth-stencil). - for various copy methods - for all sized formats - for all dimensions - for various linear data offsets ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combine('format', kSizedTextureFormats) - .filter(formatCopyableWithMethod) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .expand('offset', texelBlockAlignmentTestExpanderForOffset) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { format, offset, method } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combine('format', kSizedTextureFormats). +filter(formatCopyableWithMethod). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +expand('offset', texelBlockAlignmentTestExpanderForOffset) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format, offset, method } = t.params; + const info = kTextureFormatInfo[format]; - const size = { width: info.blockWidth, height: info.blockHeight, depthOrArrayLayers: 1 }; - const texture = t.device.createTexture({ - size, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - let success = false; - if (method === 'WriteTexture') success = true; - if (info.depth || info.stencil) { - if (offset % 4 === 0) success = true; - } else { - if (offset % info.color.bytes === 0) success = true; - } - - t.testRun({ texture }, { offset, bytesPerRow: 256 }, size, { - dataSize: offset + info.bytesPerBlock, - method, - success, - }); + const size = { width: info.blockWidth, height: info.blockHeight, depthOrArrayLayers: 1 }; + const texture = t.device.createTexture({ + size, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('bound_on_bytes_per_row') - .desc( - ` + let success = false; + if (method === 'WriteTexture') success = true; + if (info.depth || info.stencil) { + if (offset % 4 === 0) success = true; + } else { + if (offset % info.color.bytes === 0) success = true; + } + + t.testRun({ texture }, { offset, bytesPerRow: 256 }, size, { + dataSize: offset + info.bytesPerBlock, + method, + success + }); +}); + +g.test('bound_on_bytes_per_row'). +desc( + ` Test that bytesPerRow, if specified must be big enough for a full copy row. - for various copy methods - for all sized formats @@ -336,149 +335,149 @@ Test that bytesPerRow, if specified must be big enough for a full copy row. - for various copy depths - for various combinations of bytesPerRow and copy width. ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combine('format', kSizedTextureFormats) - .filter(formatCopyableWithMethod) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('copyHeightInBlocks', [1, 2]) - .combine('copyDepth', [1, 2]) - .unless(p => p.dimension === '1d' && (p.copyHeightInBlocks > 1 || p.copyDepth > 1)) - .expandWithParams(p => { - const info = kTextureFormatInfo[p.format]; - // We currently have a built-in assumption that for all formats, 128 % bytesPerBlock === 0. - // This assumption ensures that all division below results in integers. - assert(128 % info.bytesPerBlock === 0); - return [ - // Copying exact fit with aligned bytesPerRow should work. - { - bytesPerRow: 256, - widthInBlocks: 256 / info.bytesPerBlock, - copyWidthInBlocks: 256 / info.bytesPerBlock, - _success: true, - }, - // Copying into smaller texture when padding in bytesPerRow is enough should work unless - // it is a depth/stencil typed format. - { - bytesPerRow: 256, - widthInBlocks: 256 / info.bytesPerBlock, - copyWidthInBlocks: 256 / info.bytesPerBlock - 1, - _success: !(info.stencil || info.depth), - }, - // Unaligned bytesPerRow should not work unless the method is 'WriteTexture'. - { - bytesPerRow: 128, - widthInBlocks: 128 / info.bytesPerBlock, - copyWidthInBlocks: 128 / info.bytesPerBlock, - _success: p.method === 'WriteTexture', - }, - { - bytesPerRow: 384, - widthInBlocks: 384 / info.bytesPerBlock, - copyWidthInBlocks: 384 / info.bytesPerBlock, - _success: p.method === 'WriteTexture', - }, - // When bytesPerRow is smaller than bytesInLastRow copying should fail. - { - bytesPerRow: 256, - widthInBlocks: (2 * 256) / info.bytesPerBlock, - copyWidthInBlocks: (2 * 256) / info.bytesPerBlock, - _success: false, - }, - // When copyHeightInBlocks > 1, bytesPerRow must be specified. - { - bytesPerRow: undefined, - widthInBlocks: 256 / info.bytesPerBlock, - copyWidthInBlocks: 256 / info.bytesPerBlock, - _success: !(p.copyHeightInBlocks > 1 || p.copyDepth > 1), - }, - ]; - }) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - method, - format, - bytesPerRow, - widthInBlocks, - copyWidthInBlocks, - copyHeightInBlocks, - copyDepth, - _success, - } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combine('format', kSizedTextureFormats). +filter(formatCopyableWithMethod). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('copyHeightInBlocks', [1, 2]). +combine('copyDepth', [1, 2]). +unless((p) => p.dimension === '1d' && (p.copyHeightInBlocks > 1 || p.copyDepth > 1)). +expandWithParams((p) => { + const info = kTextureFormatInfo[p.format]; + // We currently have a built-in assumption that for all formats, 128 % bytesPerBlock === 0. + // This assumption ensures that all division below results in integers. + assert(128 % info.bytesPerBlock === 0); + return [ + // Copying exact fit with aligned bytesPerRow should work. + { + bytesPerRow: 256, + widthInBlocks: 256 / info.bytesPerBlock, + copyWidthInBlocks: 256 / info.bytesPerBlock, + _success: true + }, + // Copying into smaller texture when padding in bytesPerRow is enough should work unless + // it is a depth/stencil typed format. + { + bytesPerRow: 256, + widthInBlocks: 256 / info.bytesPerBlock, + copyWidthInBlocks: 256 / info.bytesPerBlock - 1, + _success: !(info.stencil || info.depth) + }, + // Unaligned bytesPerRow should not work unless the method is 'WriteTexture'. + { + bytesPerRow: 128, + widthInBlocks: 128 / info.bytesPerBlock, + copyWidthInBlocks: 128 / info.bytesPerBlock, + _success: p.method === 'WriteTexture' + }, + { + bytesPerRow: 384, + widthInBlocks: 384 / info.bytesPerBlock, + copyWidthInBlocks: 384 / info.bytesPerBlock, + _success: p.method === 'WriteTexture' + }, + // When bytesPerRow is smaller than bytesInLastRow copying should fail. + { + bytesPerRow: 256, + widthInBlocks: 2 * 256 / info.bytesPerBlock, + copyWidthInBlocks: 2 * 256 / info.bytesPerBlock, + _success: false + }, + // When copyHeightInBlocks > 1, bytesPerRow must be specified. + { + bytesPerRow: undefined, + widthInBlocks: 256 / info.bytesPerBlock, + copyWidthInBlocks: 256 / info.bytesPerBlock, + _success: !(p.copyHeightInBlocks > 1 || p.copyDepth > 1) + }]; - // We create an aligned texture using the widthInBlocks which may be different from the - // copyWidthInBlocks. This allows us to test scenarios where the two may be different. - const texture = t.createAlignedTexture(format, { - width: widthInBlocks * info.blockWidth, - height: copyHeightInBlocks * info.blockHeight, - depthOrArrayLayers: copyDepth, - }); +}) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + method, + format, + bytesPerRow, + widthInBlocks, + copyWidthInBlocks, + copyHeightInBlocks, + copyDepth, + _success + } = t.params; + const info = kTextureFormatInfo[format]; - const layout = { bytesPerRow, rowsPerImage: copyHeightInBlocks }; - const copySize = { - width: copyWidthInBlocks * info.blockWidth, - height: copyHeightInBlocks * info.blockHeight, - depthOrArrayLayers: copyDepth, - }; - const { minDataSizeOrOverestimate } = dataBytesForCopyOrOverestimate({ - layout, - format, - copySize, - method, - }); - - t.testRun({ texture }, layout, copySize, { - dataSize: minDataSizeOrOverestimate, - method, - success: _success, - }); + // We create an aligned texture using the widthInBlocks which may be different from the + // copyWidthInBlocks. This allows us to test scenarios where the two may be different. + const texture = t.createAlignedTexture(format, { + width: widthInBlocks * info.blockWidth, + height: copyHeightInBlocks * info.blockHeight, + depthOrArrayLayers: copyDepth }); -g.test('bound_on_offset') - .desc( - ` + const layout = { bytesPerRow, rowsPerImage: copyHeightInBlocks }; + const copySize = { + width: copyWidthInBlocks * info.blockWidth, + height: copyHeightInBlocks * info.blockHeight, + depthOrArrayLayers: copyDepth + }; + const { minDataSizeOrOverestimate } = dataBytesForCopyOrOverestimate({ + layout, + format, + copySize, + method + }); + + t.testRun({ texture }, layout, copySize, { + dataSize: minDataSizeOrOverestimate, + method, + success: _success + }); +}); + +g.test('bound_on_offset'). +desc( + ` Test that the offset cannot be larger than the linear data size (even for an empty copy). - for various offsets and data sizes ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .beginSubcases() - .combine('offsetInBlocks', [0, 1, 2]) - .combine('dataSizeInBlocks', [0, 1, 2]) - ) - .fn(t => { - const { offsetInBlocks, dataSizeInBlocks, method } = t.params; +). +params((u) => +u. +combine('method', kImageCopyTypes). +beginSubcases(). +combine('offsetInBlocks', [0, 1, 2]). +combine('dataSizeInBlocks', [0, 1, 2]) +). +fn((t) => { + const { offsetInBlocks, dataSizeInBlocks, method } = t.params; - const format = 'rgba8unorm'; - const info = kTextureFormatInfo[format]; - const offset = offsetInBlocks * info.color.bytes; - const dataSize = dataSizeInBlocks * info.color.bytes; + const format = 'rgba8unorm'; + const info = kTextureFormatInfo[format]; + const offset = offsetInBlocks * info.color.bytes; + const dataSize = dataSizeInBlocks * info.color.bytes; - const texture = t.device.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const success = offset <= dataSize; - - t.testRun( - { texture }, - { offset, bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize, method, success } - ); + const texture = t.device.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); + + const success = offset <= dataSize; + + t.testRun( + { texture }, + { offset, bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize, method, success } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/texture_related.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/texture_related.spec.js index 99365a1c582..7b535935c3c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/texture_related.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/image_copy/texture_related.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Texture related validation tests for B2T copy and T2B copy and writeTexture.`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Texture related validation tests for B2T copy and T2B copy and writeTexture.`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert } from '../../../../common/util/util.js'; import { kTextureDimensions, kTextureUsages } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; @@ -9,8 +8,8 @@ import { kColorTextureFormats, kSizedTextureFormats, kTextureFormatInfo, - textureDimensionAndFormatCompatible, -} from '../../../format_info.js'; + textureDimensionAndFormatCompatible } from +'../../../format_info.js'; import { kResourceStates } from '../../../gpu_test.js'; import { align } from '../../../util/math.js'; import { virtualMipSize } from '../../../util/texture/base.js'; @@ -20,219 +19,219 @@ import { ImageCopyTest, texelBlockAlignmentTestExpanderForValueToCoordinate, formatCopyableWithMethod, - getACopyableAspectWithMethod, -} from './image_copy.js'; + getACopyableAspectWithMethod } from +'./image_copy.js'; export const g = makeTestGroup(ImageCopyTest); -g.test('valid') - .desc( - ` +g.test('valid'). +desc( + ` Test that the texture must be valid and not destroyed. - for all copy methods - for all texture states - for various dimensions ` - ) - .params(u => - u // - .combine('method', kImageCopyTypes) - .combine('textureState', kResourceStates) - .combineWithParams([ - { dimension: '1d', size: [4, 1, 1] }, - { dimension: '2d', size: [4, 4, 1] }, - { dimension: '2d', size: [4, 4, 3] }, - { dimension: '3d', size: [4, 4, 3] }, - ]) - ) - .fn(t => { - const { method, textureState, size, dimension } = t.params; +). +params((u) => +u // +.combine('method', kImageCopyTypes). +combine('textureState', kResourceStates). +combineWithParams([ +{ dimension: '1d', size: [4, 1, 1] }, +{ dimension: '2d', size: [4, 4, 1] }, +{ dimension: '2d', size: [4, 4, 3] }, +{ dimension: '3d', size: [4, 4, 3] }] +) +). +fn((t) => { + const { method, textureState, size, dimension } = t.params; - const texture = t.createTextureWithState(textureState, { - size, - dimension, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const success = textureState === 'valid'; - const submit = textureState !== 'invalid'; - - t.testRun( - { texture }, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 1, method, success, submit } - ); + const texture = t.createTextureWithState(textureState, { + size, + dimension, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('texture,device_mismatch') - .desc('Tests the image copies cannot be called with a texture created from another device') - .paramsSubcasesOnly(u => - u.combine('method', kImageCopyTypes).combine('mismatched', [true, false]) - ) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { method, mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const success = textureState === 'valid'; + const submit = textureState !== 'invalid'; - const texture = sourceDevice.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); + t.testRun( + { texture }, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 1, method, success, submit } + ); +}); - t.testRun( - { texture }, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 1, method, success: !mismatched } - ); +g.test('texture,device_mismatch'). +desc('Tests the image copies cannot be called with a texture created from another device'). +paramsSubcasesOnly((u) => +u.combine('method', kImageCopyTypes).combine('mismatched', [true, false]) +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { method, mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const texture = sourceDevice.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('usage') - .desc( - ` + t.testRun( + { texture }, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 1, method, success: !mismatched } + ); +}); + +g.test('usage'). +desc( + ` The texture must have the appropriate COPY_SRC/COPY_DST usage. - for various copy methods - for various dimensions - for various usages ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combineWithParams([ - { dimension: '1d', size: [4, 1, 1] }, - { dimension: '2d', size: [4, 4, 1] }, - { dimension: '2d', size: [4, 4, 3] }, - { dimension: '3d', size: [4, 4, 3] }, - ]) - .beginSubcases() - // If usage0 and usage1 are the same, the usage being test is a single usage. Otherwise, it's - // a combined usage. - .combine('usage0', kTextureUsages) - .combine('usage1', kTextureUsages) - // RENDER_ATTACHMENT is not valid with 1d and 3d textures. - .unless( - ({ usage0, usage1, dimension }) => - ((usage0 | usage1) & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && - (dimension === '1d' || dimension === '3d') - ) - ) - .fn(t => { - const { usage0, usage1, method, size, dimension } = t.params; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combineWithParams([ +{ dimension: '1d', size: [4, 1, 1] }, +{ dimension: '2d', size: [4, 4, 1] }, +{ dimension: '2d', size: [4, 4, 3] }, +{ dimension: '3d', size: [4, 4, 3] }] +). +beginSubcases() +// If usage0 and usage1 are the same, the usage being test is a single usage. Otherwise, it's +// a combined usage. +.combine('usage0', kTextureUsages). +combine('usage1', kTextureUsages) +// RENDER_ATTACHMENT is not valid with 1d and 3d textures. +.unless( + ({ usage0, usage1, dimension }) => + ((usage0 | usage1) & GPUConst.TextureUsage.RENDER_ATTACHMENT) !== 0 && ( + dimension === '1d' || dimension === '3d') +) +). +fn((t) => { + const { usage0, usage1, method, size, dimension } = t.params; - const usage = usage0 | usage1; - const texture = t.device.createTexture({ - size, - dimension, - format: 'rgba8unorm', - usage, - }); - - const success = - method === 'CopyT2B' - ? (usage & GPUTextureUsage.COPY_SRC) !== 0 - : (usage & GPUTextureUsage.COPY_DST) !== 0; - - t.testRun( - { texture }, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 1, method, success } - ); + const usage = usage0 | usage1; + const texture = t.device.createTexture({ + size, + dimension, + format: 'rgba8unorm', + usage }); -g.test('sample_count') - .desc( - ` + const success = + method === 'CopyT2B' ? + (usage & GPUTextureUsage.COPY_SRC) !== 0 : + (usage & GPUTextureUsage.COPY_DST) !== 0; + + t.testRun( + { texture }, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 1, method, success } + ); +}); + +g.test('sample_count'). +desc( + ` Test that multisampled textures cannot be copied. - for various copy methods - multisampled or not Note: we don't test 1D, 2D array and 3D textures because multisample is not supported them. ` - ) - .params(u => - u // - .combine('method', kImageCopyTypes) - .beginSubcases() - .combine('sampleCount', [1, 4]) - ) - .fn(t => { - const { sampleCount, method } = t.params; +). +params((u) => +u // +.combine('method', kImageCopyTypes). +beginSubcases(). +combine('sampleCount', [1, 4]) +). +fn((t) => { + const { sampleCount, method } = t.params; - const texture = t.device.createTexture({ - size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - sampleCount, - format: 'rgba8unorm', - usage: - GPUTextureUsage.COPY_SRC | - GPUTextureUsage.COPY_DST | - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const success = sampleCount === 1; - - t.testRun( - { texture }, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 1, method, success } - ); + const texture = t.device.createTexture({ + size: { width: 4, height: 4, depthOrArrayLayers: 1 }, + sampleCount, + format: 'rgba8unorm', + usage: + GPUTextureUsage.COPY_SRC | + GPUTextureUsage.COPY_DST | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('mip_level') - .desc( - ` + const success = sampleCount === 1; + + t.testRun( + { texture }, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 1, method, success } + ); +}); + +g.test('mip_level'). +desc( + ` Test that the mipLevel of the copy must be in range of the texture. - for various copy methods - for various dimensions - for several mipLevelCounts - for several target/source mipLevels` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combineWithParams([ - { dimension: '1d', size: [32, 1, 1] }, - { dimension: '2d', size: [32, 32, 1] }, - { dimension: '2d', size: [32, 32, 3] }, - { dimension: '3d', size: [32, 32, 3] }, - ]) - .beginSubcases() - .combine('mipLevelCount', [1, 3, 5]) - .unless(p => p.dimension === '1d' && p.mipLevelCount !== 1) - .combine('mipLevel', [0, 1, 3, 4]) - ) - .fn(t => { - const { mipLevelCount, mipLevel, method, size, dimension } = t.params; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combineWithParams([ +{ dimension: '1d', size: [32, 1, 1] }, +{ dimension: '2d', size: [32, 32, 1] }, +{ dimension: '2d', size: [32, 32, 3] }, +{ dimension: '3d', size: [32, 32, 3] }] +). +beginSubcases(). +combine('mipLevelCount', [1, 3, 5]). +unless((p) => p.dimension === '1d' && p.mipLevelCount !== 1). +combine('mipLevel', [0, 1, 3, 4]) +). +fn((t) => { + const { mipLevelCount, mipLevel, method, size, dimension } = t.params; - const texture = t.device.createTexture({ - size, - dimension, - mipLevelCount, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - const success = mipLevel < mipLevelCount; - - t.testRun( - { texture, mipLevel }, - { bytesPerRow: 0 }, - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { dataSize: 1, method, success } - ); + const texture = t.device.createTexture({ + size, + dimension, + mipLevelCount, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('format') - .desc( - ` + const success = mipLevel < mipLevelCount; + + t.testRun( + { texture, mipLevel }, + { bytesPerRow: 0 }, + { width: 0, height: 0, depthOrArrayLayers: 0 }, + { dataSize: 1, method, success } + ); +}); + +g.test('format'). +desc( + ` Test the copy must be a full subresource if the texture's format is depth/stencil format. - for various copy methods - for various dimensions @@ -240,166 +239,159 @@ Test the copy must be a full subresource if the texture's format is depth/stenci - for a couple target/source mipLevels - for some modifier (or not) for the full copy size ` - ) - .params(u => - u // - .combine('method', kImageCopyTypes) - .combineWithParams([ - { depthOrArrayLayers: 1, dimension: '1d' }, - { depthOrArrayLayers: 1, dimension: '2d' }, - { depthOrArrayLayers: 3, dimension: '2d' }, - { depthOrArrayLayers: 32, dimension: '3d' }, - ]) - .combine('format', kSizedTextureFormats) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .filter(formatCopyableWithMethod) - .beginSubcases() - .combine('mipLevel', [0, 2]) - .unless(p => p.dimension === '1d' && p.mipLevel !== 0) - .combine('copyWidthModifier', [0, -1]) - .combine('copyHeightModifier', [0, -1]) - // If the texture has multiple depth/array slices and it is not a 3D texture, which means it is an array texture, - // depthModifier is not needed upon the third dimension. Because different layers are different subresources in - // an array texture. Whether it is a full copy or non-full copy doesn't make sense across different subresources. - // However, different depth slices on the same mip level are within the same subresource for a 3d texture. So we - // need to examine depth dimension via copyDepthModifier to determine whether it is a full copy for a 3D texture. - .expand('copyDepthModifier', ({ dimension: d }) => (d === '3d' ? [0, -1] : [0])) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - method, - depthOrArrayLayers, - dimension, - format, - mipLevel, - copyWidthModifier, - copyHeightModifier, - copyDepthModifier, - } = t.params; +). +params((u) => +u // +.combine('method', kImageCopyTypes). +combineWithParams([ +{ depthOrArrayLayers: 1, dimension: '1d' }, +{ depthOrArrayLayers: 1, dimension: '2d' }, +{ depthOrArrayLayers: 3, dimension: '2d' }, +{ depthOrArrayLayers: 32, dimension: '3d' }] +). +combine('format', kSizedTextureFormats). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +filter(formatCopyableWithMethod). +beginSubcases(). +combine('mipLevel', [0, 2]). +unless((p) => p.dimension === '1d' && p.mipLevel !== 0). +combine('copyWidthModifier', [0, -1]). +combine('copyHeightModifier', [0, -1]) +// If the texture has multiple depth/array slices and it is not a 3D texture, which means it is an array texture, +// depthModifier is not needed upon the third dimension. Because different layers are different subresources in +// an array texture. Whether it is a full copy or non-full copy doesn't make sense across different subresources. +// However, different depth slices on the same mip level are within the same subresource for a 3d texture. So we +// need to examine depth dimension via copyDepthModifier to determine whether it is a full copy for a 3D texture. +.expand('copyDepthModifier', ({ dimension: d }) => d === '3d' ? [0, -1] : [0]) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + method, + depthOrArrayLayers, + dimension, + format, + mipLevel, + copyWidthModifier, + copyHeightModifier, + copyDepthModifier + } = t.params; - const info = kTextureFormatInfo[format]; - const size = { width: 32 * info.blockWidth, height: 32 * info.blockHeight, depthOrArrayLayers }; - if (dimension === '1d') { - size.height = 1; - } + const info = kTextureFormatInfo[format]; + const size = { width: 32 * info.blockWidth, height: 32 * info.blockHeight, depthOrArrayLayers }; + if (dimension === '1d') { + size.height = 1; + } - const texture = t.device.createTexture({ - size, - dimension, - format, - mipLevelCount: dimension === '1d' ? 1 : 5, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - let success = true; - if ( - (info.depth || info.stencil) && - (copyWidthModifier !== 0 || copyHeightModifier !== 0 || copyDepthModifier !== 0) - ) { - success = false; - } - - const levelSize = virtualMipSize( - dimension, - [size.width, size.height, size.depthOrArrayLayers], - mipLevel - ); - - const copySize = [ - levelSize[0] + copyWidthModifier * info.blockWidth, - levelSize[1] + copyHeightModifier * info.blockHeight, - // Note that compressed format is not supported for 3D textures yet, so there is no info.blockDepth. - levelSize[2] + copyDepthModifier, - ]; - - t.testRun( - { texture, mipLevel, aspect: getACopyableAspectWithMethod({ format, method }) }, - { bytesPerRow: 512, rowsPerImage: 32 }, - copySize, - { - dataSize: 512 * 32 * 32, - method, - success, - } - ); + const texture = t.device.createTexture({ + size, + dimension, + format, + mipLevelCount: dimension === '1d' ? 1 : 5, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); -g.test('origin_alignment') - .desc( - ` + let success = true; + if ( + (info.depth || info.stencil) && ( + copyWidthModifier !== 0 || copyHeightModifier !== 0 || copyDepthModifier !== 0)) + { + success = false; + } + + const levelSize = virtualMipSize( + dimension, + [size.width, size.height, size.depthOrArrayLayers], + mipLevel + ); + const copySize = [ + levelSize[0] + copyWidthModifier * info.blockWidth, + levelSize[1] + copyHeightModifier * info.blockHeight, + // Note that compressed format is not supported for 3D textures yet, so there is no info.blockDepth. + levelSize[2] + copyDepthModifier]; + + + t.testRun( + { texture, mipLevel, aspect: getACopyableAspectWithMethod({ format, method }) }, + { bytesPerRow: 512, rowsPerImage: 32 }, + copySize, + { + dataSize: 512 * 32 * 32, + method, + success + } + ); +}); + +g.test('origin_alignment'). +desc( + ` Test that the texture copy origin must be aligned to the format's block size. - for various copy methods - for all color formats (depth stencil formats require a full copy) - for X, Y and Z coordinates - for various values for that coordinate depending on the block size ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - // No need to test depth/stencil formats because its copy origin must be [0, 0, 0], which is already aligned with block size. - .combine('format', kColorTextureFormats) - .filter(formatCopyableWithMethod) - .combineWithParams([ - { depthOrArrayLayers: 1, dimension: '1d' }, - { depthOrArrayLayers: 1, dimension: '2d' }, - { depthOrArrayLayers: 3, dimension: '2d' }, - { depthOrArrayLayers: 3, dimension: '3d' }, - ]) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('coordinateToTest', ['x', 'y', 'z']) - .unless(p => p.dimension === '1d' && p.coordinateToTest !== 'x') - .expand('valueToCoordinate', texelBlockAlignmentTestExpanderForValueToCoordinate) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { - valueToCoordinate, - coordinateToTest, - format, - method, - depthOrArrayLayers, - dimension, - } = t.params; - const info = kTextureFormatInfo[format]; - const size = { width: 0, height: 0, depthOrArrayLayers }; - const origin = { x: 0, y: 0, z: 0 }; - let success = true; +). +params((u) => +u. +combine('method', kImageCopyTypes) +// No need to test depth/stencil formats because its copy origin must be [0, 0, 0], which is already aligned with block size. +.combine('format', kColorTextureFormats). +filter(formatCopyableWithMethod). +combineWithParams([ +{ depthOrArrayLayers: 1, dimension: '1d' }, +{ depthOrArrayLayers: 1, dimension: '2d' }, +{ depthOrArrayLayers: 3, dimension: '2d' }, +{ depthOrArrayLayers: 3, dimension: '3d' }] +). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('coordinateToTest', ['x', 'y', 'z']). +unless((p) => p.dimension === '1d' && p.coordinateToTest !== 'x'). +expand('valueToCoordinate', texelBlockAlignmentTestExpanderForValueToCoordinate) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { valueToCoordinate, coordinateToTest, format, method, depthOrArrayLayers, dimension } = + t.params; + const info = kTextureFormatInfo[format]; + const size = { width: 0, height: 0, depthOrArrayLayers }; + const origin = { x: 0, y: 0, z: 0 }; + let success = true; - origin[coordinateToTest] = valueToCoordinate; - switch (coordinateToTest) { - case 'x': { + origin[coordinateToTest] = valueToCoordinate; + switch (coordinateToTest) { + case 'x':{ success = origin.x % info.blockWidth === 0; break; } - case 'y': { + case 'y':{ success = origin.y % info.blockHeight === 0; break; } - } + } - const texture = t.createAlignedTexture(format, size, origin, dimension); + const texture = t.createAlignedTexture(format, size, origin, dimension); - t.testRun({ texture, origin }, { bytesPerRow: 0, rowsPerImage: 0 }, size, { - dataSize: 1, - method, - success, - }); + t.testRun({ texture, origin }, { bytesPerRow: 0, rowsPerImage: 0 }, size, { + dataSize: 1, + method, + success }); +}); -g.test('size_alignment') - .desc( - ` +g.test('size_alignment'). +desc( + ` Test that the copy size must be aligned to the texture's format's block size. - for various copy methods - for all formats (depth-stencil formats require a full copy) @@ -407,62 +399,61 @@ Test that the copy size must be aligned to the texture's format's block size. - for the size's parameters to test (width / height / depth) - for various values for that copy size parameters, depending on the block size ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - // No need to test depth/stencil formats because its copy size must be subresource's size, which is already aligned with block size. - .combine('format', kColorTextureFormats) - .filter(formatCopyableWithMethod) - .combine('dimension', kTextureDimensions) - .filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)) - .beginSubcases() - .combine('coordinateToTest', ['width', 'height', 'depthOrArrayLayers']) - .unless(p => p.dimension === '1d' && p.coordinateToTest !== 'width') - .expand('valueToCoordinate', texelBlockAlignmentTestExpanderForValueToCoordinate) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { valueToCoordinate, coordinateToTest, dimension, format, method } = t.params; - const info = kTextureFormatInfo[format]; - const size = { width: 0, height: 0, depthOrArrayLayers: 0 }; - const origin = { x: 0, y: 0, z: 0 }; - let success = true; +). +params((u) => +u. +combine('method', kImageCopyTypes) +// No need to test depth/stencil formats because its copy size must be subresource's size, which is already aligned with block size. +.combine('format', kColorTextureFormats). +filter(formatCopyableWithMethod). +combine('dimension', kTextureDimensions). +filter(({ dimension, format }) => textureDimensionAndFormatCompatible(dimension, format)). +beginSubcases(). +combine('coordinateToTest', ['width', 'height', 'depthOrArrayLayers']). +unless((p) => p.dimension === '1d' && p.coordinateToTest !== 'width'). +expand('valueToCoordinate', texelBlockAlignmentTestExpanderForValueToCoordinate) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { valueToCoordinate, coordinateToTest, dimension, format, method } = t.params; + const info = kTextureFormatInfo[format]; + const size = { width: 0, height: 0, depthOrArrayLayers: 0 }; + const origin = { x: 0, y: 0, z: 0 }; + let success = true; - size[coordinateToTest] = valueToCoordinate; - switch (coordinateToTest) { - case 'width': { + size[coordinateToTest] = valueToCoordinate; + switch (coordinateToTest) { + case 'width':{ success = size.width % info.blockWidth === 0; break; } - case 'height': { + case 'height':{ success = size.height % info.blockHeight === 0; break; } - } + } - const texture = t.createAlignedTexture(format, size, origin, dimension); + const texture = t.createAlignedTexture(format, size, origin, dimension); - const bytesPerRow = align( - Math.max(1, Math.ceil(size.width / info.blockWidth)) * info.bytesPerBlock, - 256 - ); - - const rowsPerImage = Math.ceil(size.height / info.blockHeight); - t.testRun({ texture, origin }, { bytesPerRow, rowsPerImage }, size, { - dataSize: 1, - method, - success, - }); + const bytesPerRow = align( + Math.max(1, Math.ceil(size.width / info.blockWidth)) * info.bytesPerBlock, + 256 + ); + const rowsPerImage = Math.ceil(size.height / info.blockHeight); + t.testRun({ texture, origin }, { bytesPerRow, rowsPerImage }, size, { + dataSize: 1, + method, + success }); +}); -g.test('copy_rectangle') - .desc( - ` +g.test('copy_rectangle'). +desc( + ` Test that the max corner of the copy rectangle (origin+copySize) must be inside the texture. - for various copy methods - for all dimensions @@ -470,74 +461,74 @@ Test that the max corner of the copy rectangle (origin+copySize) must be inside - for various origin and copy size values (and texture sizes) - for various mip levels ` - ) - .params(u => - u - .combine('method', kImageCopyTypes) - .combine('dimension', kTextureDimensions) - .beginSubcases() - .combine('originValue', [7, 8]) - .combine('copySizeValue', [7, 8]) - .combine('textureSizeValue', [14, 15]) - .combine('mipLevel', [0, 2]) - .combine('coordinateToTest', [0, 1, 2]) - .unless(p => p.dimension === '1d' && (p.coordinateToTest !== 0 || p.mipLevel !== 0)) - ) - .fn(t => { - const { - originValue, - copySizeValue, - textureSizeValue, - mipLevel, - coordinateToTest, - method, - dimension, - } = t.params; - const format = 'rgba8unorm'; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('method', kImageCopyTypes). +combine('dimension', kTextureDimensions). +beginSubcases(). +combine('originValue', [7, 8]). +combine('copySizeValue', [7, 8]). +combine('textureSizeValue', [14, 15]). +combine('mipLevel', [0, 2]). +combine('coordinateToTest', [0, 1, 2]). +unless((p) => p.dimension === '1d' && (p.coordinateToTest !== 0 || p.mipLevel !== 0)) +). +fn((t) => { + const { + originValue, + copySizeValue, + textureSizeValue, + mipLevel, + coordinateToTest, + method, + dimension + } = t.params; + const format = 'rgba8unorm'; + const info = kTextureFormatInfo[format]; - const origin = [0, 0, 0]; - const copySize = [0, 0, 0]; - const textureSize = { width: 16 << mipLevel, height: 16 << mipLevel, depthOrArrayLayers: 16 }; - if (dimension === '1d') { - textureSize.height = 1; - textureSize.depthOrArrayLayers = 1; - } - const success = originValue + copySizeValue <= textureSizeValue; + const origin = [0, 0, 0]; + const copySize = [0, 0, 0]; + const textureSize = { width: 16 << mipLevel, height: 16 << mipLevel, depthOrArrayLayers: 16 }; + if (dimension === '1d') { + textureSize.height = 1; + textureSize.depthOrArrayLayers = 1; + } + const success = originValue + copySizeValue <= textureSizeValue; - origin[coordinateToTest] = originValue; - copySize[coordinateToTest] = copySizeValue; - switch (coordinateToTest) { - case 0: { + origin[coordinateToTest] = originValue; + copySize[coordinateToTest] = copySizeValue; + switch (coordinateToTest) { + case 0:{ textureSize.width = textureSizeValue << mipLevel; break; } - case 1: { + case 1:{ textureSize.height = textureSizeValue << mipLevel; break; } - case 2: { + case 2:{ textureSize.depthOrArrayLayers = - dimension === '3d' ? textureSizeValue << mipLevel : textureSizeValue; + dimension === '3d' ? textureSizeValue << mipLevel : textureSizeValue; break; } - } + } - const texture = t.device.createTexture({ - size: textureSize, - dimension, - mipLevelCount: dimension === '1d' ? 1 : 3, - format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, - }); - - assert(copySize[0] % info.blockWidth === 0); - const bytesPerRow = align(copySize[0] / info.blockWidth, 256); - assert(copySize[1] % info.blockHeight === 0); - const rowsPerImage = copySize[1] / info.blockHeight; - t.testRun({ texture, origin, mipLevel }, { bytesPerRow, rowsPerImage }, copySize, { - dataSize: 1, - method, - success, - }); + const texture = t.device.createTexture({ + size: textureSize, + dimension, + mipLevelCount: dimension === '1d' ? 1 : 3, + format, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST }); + + assert(copySize[0] % info.blockWidth === 0); + const bytesPerRow = align(copySize[0] / info.blockWidth, 256); + assert(copySize[1] % info.blockHeight === 0); + const rowsPerImage = copySize[1] / info.blockHeight; + t.testRun({ texture, origin, mipLevel }, { bytesPerRow, rowsPerImage }, copySize, { + dataSize: 1, + method, + success + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/layout_shader_compat.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/layout_shader_compat.spec.js index 376d30f3ff3..f579b416d14 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/layout_shader_compat.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/layout_shader_compat.spec.js @@ -1,15 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` TODO: - interface matching between pipeline layout and shader - x= {compute, vertex, fragment, vertex+fragment}, visibilities - x= bind group index values, binding index values, multiple bindings - x= types of bindings - x= {equal, superset, subset} -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { ValidationTest } from './validation_test.js'; -export const g = makeTestGroup(ValidationTest); +export const g = makeTestGroup(ValidationTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/create.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/create.spec.js index 762f1880040..283b92abecd 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/create.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/create.spec.js @@ -1,35 +1,34 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for validation in createQuerySet. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kQueryTypes, kMaxQueryCount } from '../../../capability_info.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('count') - .desc( - ` +g.test('count'). +desc( + ` Tests that create query set with the count for all query types: - count {<, =, >} kMaxQueryCount - x= {occlusion, timestamp} query ` - ) - .params(u => - u - .combine('type', kQueryTypes) - .beginSubcases() - .combine('count', [0, kMaxQueryCount, kMaxQueryCount + 1]) - ) - .beforeAllSubcases(t => { - t.selectDeviceForQueryTypeOrSkipTestCase(t.params.type); - }) - .fn(t => { - const { type, count } = t.params; +). +params((u) => +u. +combine('type', kQueryTypes). +beginSubcases(). +combine('count', [0, kMaxQueryCount, kMaxQueryCount + 1]) +). +beforeAllSubcases((t) => { + t.selectDeviceForQueryTypeOrSkipTestCase(t.params.type); +}). +fn((t) => { + const { type, count } = t.params; - t.expectValidationError(() => { - t.device.createQuerySet({ type, count }); - }, count > kMaxQueryCount); - }); + t.expectValidationError(() => { + t.device.createQuerySet({ type, count }); + }, count > kMaxQueryCount); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/destroy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/destroy.spec.js index 197d36e7227..58e8b03d47a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/destroy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/query_set/destroy.spec.js @@ -1,34 +1,33 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Destroying a query set more than once is allowed. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('twice').fn(t => { +g.test('twice').fn((t) => { const qset = t.device.createQuerySet({ type: 'occlusion', count: 1 }); qset.destroy(); qset.destroy(); }); -g.test('invalid_queryset') - .desc('Test that invalid querysets may be destroyed without generating validation errors.') - .fn(async t => { - t.device.pushErrorScope('validation'); +g.test('invalid_queryset'). +desc('Test that invalid querysets may be destroyed without generating validation errors.'). +fn(async (t) => { + t.device.pushErrorScope('validation'); - const invalidQuerySet = t.device.createQuerySet({ - type: 'occlusion', - count: 4097, // 4096 is the limit - }); - - // Expect error because it's invalid. - const error = await t.device.popErrorScope(); - t.expect(!!error); - - // This line should not generate an error - invalidQuerySet.destroy(); + const invalidQuerySet = t.device.createQuerySet({ + type: 'occlusion', + count: 4097 // 4096 is the limit }); + + // Expect error because it's invalid. + const error = await t.device.popErrorScope(); + t.expect(!!error); + + // This line should not generate an error + invalidQuerySet.destroy(); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/buffer_mapped.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/buffer_mapped.spec.js index b7a1b8284b5..1647ebd351a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/buffer_mapped.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/buffer_mapped.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for the map-state of mappable buffers used in submitted command buffers. Tests every operation that has a dependency on a buffer @@ -19,8 +19,7 @@ Test those operations against buffers in the following states: Also tests every order of operations combination of mapping operations and command recording operations to ensure the mapping state is only considered when a command buffer is submitted. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ValidationTest } from '../validation_test.js'; class F extends ValidationTest { @@ -28,7 +27,7 @@ class F extends ValidationTest { const bufferDesc = { size: 8, usage, - mappedAtCreation: false, + mappedAtCreation: false }; const mapMode = usage & GPUBufferUsage.MAP_READ ? GPUMapMode.READ : GPUMapMode.WRITE; @@ -91,176 +90,191 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('writeBuffer') - .desc(`Test that an outstanding mapping will prevent writeBuffer calls.`) - .fn(async t => { - const data = new Uint32Array([42]); +g.test('writeBuffer'). +desc(`Test that an outstanding mapping will prevent writeBuffer calls.`). +fn(async (t) => { + const data = new Uint32Array([42]); - await t.runBufferDependencyTest(GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, buffer => { + await t.runBufferDependencyTest( + GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + (buffer) => { t.queue.writeBuffer(buffer, 0, data); - }); - }); + } + ); +}); -g.test('copyBufferToBuffer') - .desc( - ` +g.test('copyBufferToBuffer'). +desc( + ` Test that an outstanding mapping will prevent copyBufferToTexture commands from submitting, both when used as the source and destination.` - ) - .fn(async t => { - const sourceBuffer = t.device.createBuffer({ - size: 8, - usage: GPUBufferUsage.COPY_SRC, - }); +). +fn(async (t) => { + const sourceBuffer = t.device.createBuffer({ + size: 8, + usage: GPUBufferUsage.COPY_SRC + }); - const destBuffer = t.device.createBuffer({ - size: 8, - usage: GPUBufferUsage.COPY_DST, - }); + const destBuffer = t.device.createBuffer({ + size: 8, + usage: GPUBufferUsage.COPY_DST + }); - await t.runBufferDependencyTest(GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, buffer => { + await t.runBufferDependencyTest( + GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, + (buffer) => { const commandEncoder = t.device.createCommandEncoder(); commandEncoder.copyBufferToBuffer(buffer, 0, destBuffer, 0, 4); t.queue.submit([commandEncoder.finish()]); - }); + } + ); - await t.runBufferDependencyTest(GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, buffer => { + await t.runBufferDependencyTest( + GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + (buffer) => { const commandEncoder = t.device.createCommandEncoder(); commandEncoder.copyBufferToBuffer(sourceBuffer, 0, buffer, 0, 4); t.queue.submit([commandEncoder.finish()]); - }); + } + ); +}); + +g.test('copyBufferToTexture'). +desc( + `Test that an outstanding mapping will prevent copyBufferToTexture commands from submitting.` +). +fn(async (t) => { + const size = { width: 1, height: 1 }; + + const texture = t.device.createTexture({ + size, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST }); -g.test('copyBufferToTexture') - .desc( - `Test that an outstanding mapping will prevent copyBufferToTexture commands from submitting.` - ) - .fn(async t => { - const size = { width: 1, height: 1 }; - - const texture = t.device.createTexture({ - size, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST, - }); - - await t.runBufferDependencyTest(GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, buffer => { + await t.runBufferDependencyTest( + GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, + (buffer) => { const commandEncoder = t.device.createCommandEncoder(); commandEncoder.copyBufferToTexture({ buffer }, { texture }, size); t.queue.submit([commandEncoder.finish()]); - }); + } + ); +}); + +g.test('copyTextureToBuffer'). +desc( + `Test that an outstanding mapping will prevent copyTextureToBuffer commands from submitting.` +). +fn(async (t) => { + const size = { width: 1, height: 1 }; + + const texture = t.device.createTexture({ + size, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC }); -g.test('copyTextureToBuffer') - .desc( - `Test that an outstanding mapping will prevent copyTextureToBuffer commands from submitting.` - ) - .fn(async t => { - const size = { width: 1, height: 1 }; - - const texture = t.device.createTexture({ - size, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC, - }); - - await t.runBufferDependencyTest(GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, buffer => { + await t.runBufferDependencyTest( + GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + (buffer) => { const commandEncoder = t.device.createCommandEncoder(); commandEncoder.copyTextureToBuffer({ texture }, { buffer }, size); t.queue.submit([commandEncoder.finish()]); - }); - }); + } + ); +}); -g.test('map_command_recording_order') - .desc( - ` +g.test('map_command_recording_order'). +desc( + ` Test that the order of mapping a buffer relative to when commands are recorded that use it does not matter, as long as the buffer is unmapped when the commands are submitted. ` - ) - .paramsSubcasesOnly([ - { - order: ['record', 'map', 'unmap', 'finish', 'submit'], - mappedAtCreation: false, - _shouldError: false, - }, - { - order: ['record', 'map', 'finish', 'unmap', 'submit'], - mappedAtCreation: false, - _shouldError: false, - }, - { - order: ['record', 'finish', 'map', 'unmap', 'submit'], - mappedAtCreation: false, - _shouldError: false, - }, - { - order: ['map', 'record', 'unmap', 'finish', 'submit'], - mappedAtCreation: false, - _shouldError: false, - }, - { - order: ['map', 'record', 'finish', 'unmap', 'submit'], - mappedAtCreation: false, - _shouldError: false, - }, - { - order: ['map', 'record', 'finish', 'submit', 'unmap'], - mappedAtCreation: false, - _shouldError: true, - }, - { - order: ['record', 'map', 'finish', 'submit', 'unmap'], - mappedAtCreation: false, - _shouldError: true, - }, - { - order: ['record', 'finish', 'map', 'submit', 'unmap'], - mappedAtCreation: false, - _shouldError: true, - }, - { order: ['record', 'unmap', 'finish', 'submit'], mappedAtCreation: true, _shouldError: false }, - { order: ['record', 'finish', 'unmap', 'submit'], mappedAtCreation: true, _shouldError: false }, - { order: ['record', 'finish', 'submit', 'unmap'], mappedAtCreation: true, _shouldError: true }, - ]) - .fn(async t => { - const { order, mappedAtCreation, _shouldError: shouldError } = t.params; +). +paramsSubcasesOnly([ +{ + order: ['record', 'map', 'unmap', 'finish', 'submit'], + mappedAtCreation: false, + _shouldError: false +}, +{ + order: ['record', 'map', 'finish', 'unmap', 'submit'], + mappedAtCreation: false, + _shouldError: false +}, +{ + order: ['record', 'finish', 'map', 'unmap', 'submit'], + mappedAtCreation: false, + _shouldError: false +}, +{ + order: ['map', 'record', 'unmap', 'finish', 'submit'], + mappedAtCreation: false, + _shouldError: false +}, +{ + order: ['map', 'record', 'finish', 'unmap', 'submit'], + mappedAtCreation: false, + _shouldError: false +}, +{ + order: ['map', 'record', 'finish', 'submit', 'unmap'], + mappedAtCreation: false, + _shouldError: true +}, +{ + order: ['record', 'map', 'finish', 'submit', 'unmap'], + mappedAtCreation: false, + _shouldError: true +}, +{ + order: ['record', 'finish', 'map', 'submit', 'unmap'], + mappedAtCreation: false, + _shouldError: true +}, +{ order: ['record', 'unmap', 'finish', 'submit'], mappedAtCreation: true, _shouldError: false }, +{ order: ['record', 'finish', 'unmap', 'submit'], mappedAtCreation: true, _shouldError: false }, +{ order: ['record', 'finish', 'submit', 'unmap'], mappedAtCreation: true, _shouldError: true }] +). +fn(async (t) => { + const { order, mappedAtCreation, _shouldError: shouldError } = t.params; - const buffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, - mappedAtCreation, - }); - - const targetBuffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.COPY_DST, - }); - - const commandEncoder = t.device.createCommandEncoder(); - let commandBuffer; - - const steps = { - record: () => { - commandEncoder.copyBufferToBuffer(buffer, 0, targetBuffer, 0, 4); - }, - map: async () => { - await buffer.mapAsync(GPUMapMode.WRITE); - }, - unmap: () => { - buffer.unmap(); - }, - finish: () => { - commandBuffer = commandEncoder.finish(); - }, - submit: () => { - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, shouldError); - }, - }; - - for (const op of order) { - await steps[op](); - } + const buffer = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, + mappedAtCreation }); + + const targetBuffer = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.COPY_DST + }); + + const commandEncoder = t.device.createCommandEncoder(); + let commandBuffer; + + const steps = { + record: () => { + commandEncoder.copyBufferToBuffer(buffer, 0, targetBuffer, 0, 4); + }, + map: async () => { + await buffer.mapAsync(GPUMapMode.WRITE); + }, + unmap: () => { + buffer.unmap(); + }, + finish: () => { + commandBuffer = commandEncoder.finish(); + }, + submit: () => { + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, shouldError); + } + }; + + for (const op of order) { + await steps[op](); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/copyToTexture/CopyExternalImageToTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/copyToTexture/CopyExternalImageToTexture.spec.js index 20f26672d18..a66b9a77472 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/copyToTexture/CopyExternalImageToTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/copyToTexture/CopyExternalImageToTexture.spec.js @@ -1,29 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyExternalImageToTexture Validation Tests in Queue. Note that we don't need to add tests on the destination texture dimension as currently we require the destination texture should have RENDER_ATTACHMENT usage, which is only allowed to be used on 2D textures. -`; -import { +`;import { getResourcePath, - getCrossOriginResourcePath, -} from '../../../../../common/framework/resources.js'; + getCrossOriginResourcePath } from +'../../../../../common/framework/resources.js'; import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { raceWithRejectOnTimeout, unreachable, assert } from '../../../../../common/util/util.js'; import { kTextureUsages } from '../../../../capability_info.js'; import { kTextureFormatInfo, kTextureFormats, - kValidTextureFormatsForCopyE2T, -} from '../../../../format_info.js'; + kValidTextureFormatsForCopyE2T } from +'../../../../format_info.js'; import { kResourceStates } from '../../../../gpu_test.js'; import { + createCanvas, createOnscreenCanvas, - createOffscreenCanvas, -} from '../../../../util/create_elements.js'; + createOffscreenCanvas } from +'../../../../util/create_elements.js'; import { ValidationTest } from '../../validation_test.js'; const kDefaultBytesPerPixel = 4; // using 'bgra8unorm' or 'rgba8unorm' @@ -35,10 +35,18 @@ const kDefaultMipLevelCount = 6; function computeMipMapSize(width, height, mipLevel) { return { mipWidth: Math.max(width >> mipLevel, 1), - mipHeight: Math.max(height >> mipLevel, 1), + mipHeight: Math.max(height >> mipLevel, 1) }; } + + + + + + + + // Helper function to generate copySize for src OOB test function generateCopySizeForSrcOOB({ srcOrigin }) { // OOB origin fails even with no-op copy. @@ -49,26 +57,26 @@ function generateCopySizeForSrcOOB({ srcOrigin }) { const justFitCopySize = { width: kDefaultWidth - srcOrigin.x, height: kDefaultHeight - srcOrigin.y, - depthOrArrayLayers: 1, + depthOrArrayLayers: 1 }; return [ - justFitCopySize, // correct size, maybe no-op copy. - { - width: justFitCopySize.width + 1, - height: justFitCopySize.height, - depthOrArrayLayers: justFitCopySize.depthOrArrayLayers, - }, // OOB in width - { - width: justFitCopySize.width, - height: justFitCopySize.height + 1, - depthOrArrayLayers: justFitCopySize.depthOrArrayLayers, - }, // OOB in height - { - width: justFitCopySize.width, - height: justFitCopySize.height, - depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + 1, - }, // OOB in depthOrArrayLayers + justFitCopySize, // correct size, maybe no-op copy. + { + width: justFitCopySize.width + 1, + height: justFitCopySize.height, + depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + }, // OOB in width + { + width: justFitCopySize.width, + height: justFitCopySize.height + 1, + depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + }, // OOB in height + { + width: justFitCopySize.width, + height: justFitCopySize.height, + depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + 1 + } // OOB in depthOrArrayLayers ]; } @@ -77,16 +85,16 @@ function generateDstOriginValue({ mipLevel }) { const origin = computeMipMapSize(kDefaultWidth, kDefaultHeight, mipLevel); return [ - { x: 0, y: 0, z: 0 }, - { x: origin.mipWidth - 1, y: 0, z: 0 }, - { x: 0, y: origin.mipHeight - 1, z: 0 }, - { x: origin.mipWidth, y: 0, z: 0 }, - { x: 0, y: origin.mipHeight, z: 0 }, - { x: 0, y: 0, z: kDefaultDepth }, - { x: origin.mipWidth + 1, y: 0, z: 0 }, - { x: 0, y: origin.mipHeight + 1, z: 0 }, - { x: 0, y: 0, z: kDefaultDepth + 1 }, - ]; + { x: 0, y: 0, z: 0 }, + { x: origin.mipWidth - 1, y: 0, z: 0 }, + { x: 0, y: origin.mipHeight - 1, z: 0 }, + { x: origin.mipWidth, y: 0, z: 0 }, + { x: 0, y: origin.mipHeight, z: 0 }, + { x: 0, y: 0, z: kDefaultDepth }, + { x: origin.mipWidth + 1, y: 0, z: 0 }, + { x: 0, y: origin.mipHeight + 1, z: 0 }, + { x: 0, y: 0, z: kDefaultDepth + 1 }]; + } // Helper function to generate copySize for dst OOB test @@ -95,36 +103,36 @@ function generateCopySizeForDstOOB({ mipLevel, dstOrigin }) { // OOB origin fails even with no-op copy. if ( - dstOrigin.x > dstMipMapSize.mipWidth || - dstOrigin.y > dstMipMapSize.mipHeight || - dstOrigin.z > kDefaultDepth - ) { + dstOrigin.x > dstMipMapSize.mipWidth || + dstOrigin.y > dstMipMapSize.mipHeight || + dstOrigin.z > kDefaultDepth) + { return [{ width: 0, height: 0, depthOrArrayLayers: 0 }]; } const justFitCopySize = { width: dstMipMapSize.mipWidth - dstOrigin.x, height: dstMipMapSize.mipHeight - dstOrigin.y, - depthOrArrayLayers: kDefaultDepth - dstOrigin.z, + depthOrArrayLayers: kDefaultDepth - dstOrigin.z }; return [ - justFitCopySize, - { - width: justFitCopySize.width + 1, - height: justFitCopySize.height, - depthOrArrayLayers: justFitCopySize.depthOrArrayLayers, - }, // OOB in width - { - width: justFitCopySize.width, - height: justFitCopySize.height + 1, - depthOrArrayLayers: justFitCopySize.depthOrArrayLayers, - }, // OOB in height - { - width: justFitCopySize.width, - height: justFitCopySize.height, - depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + 1, - }, // OOB in depthOrArrayLayers + justFitCopySize, + { + width: justFitCopySize.width + 1, + height: justFitCopySize.height, + depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + }, // OOB in width + { + width: justFitCopySize.width, + height: justFitCopySize.height + 1, + depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + }, // OOB in height + { + width: justFitCopySize.width, + height: justFitCopySize.height, + depthOrArrayLayers: justFitCopySize.depthOrArrayLayers + 1 + } // OOB in depthOrArrayLayers ]; } @@ -141,7 +149,12 @@ class CopyExternalImageToTextureTest extends ValidationTest { return new ImageData(imagePixels, width, height); } - getCanvasWithContent(canvasType, width, height, content) { + getCanvasWithContent( + canvasType, + width, + height, + content) + { const canvas = createCanvas(this, canvasType, 1, 1); const ctx = canvas.getContext('2d'); switch (canvasType) { @@ -152,7 +165,6 @@ class CopyExternalImageToTextureTest extends ValidationTest { assert(ctx instanceof OffscreenCanvasRenderingContext2D); break; } - ctx.drawImage(content, 0, 0); return canvas; @@ -165,7 +177,13 @@ class CopyExternalImageToTextureTest extends ValidationTest { return createImageBitmap(image); } - runTest(imageBitmapCopyView, textureCopyView, copySize, validationScopeSuccess, exceptionName) { + runTest( + imageBitmapCopyView, + textureCopyView, + copySize, + validationScopeSuccess, + exceptionName) + { // copyExternalImageToTexture will generate two types of errors. One is synchronous exceptions; // the other is asynchronous validation error scope errors. if (exceptionName) { @@ -190,9 +208,9 @@ class CopyExternalImageToTextureTest extends ValidationTest { export const g = makeTestGroup(CopyExternalImageToTextureTest); -g.test('source_image,crossOrigin') - .desc( - ` +g.test('source_image,crossOrigin'). +desc( + ` Test contents of source image is [clean, cross-origin]. Load crossOrigin image or same origin image and init the source @@ -200,102 +218,102 @@ g.test('source_image,crossOrigin') Check whether 'SecurityError' is generated when source image is not origin clean. ` - ) - .params(u => - u // - .combine('sourceImage', ['canvas', 'offscreenCanvas', 'imageBitmap']) - .combine('isOriginClean', [true, false]) - .beginSubcases() - .combine('contentFrom', ['image', 'imageBitmap', 'canvas', 'offscreenCanvas']) - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { sourceImage, isOriginClean, contentFrom, copySize } = t.params; - if (typeof document === 'undefined') { - t.skip('DOM is not available to create an image element.'); +). +params((u) => +u // +.combine('sourceImage', ['canvas', 'offscreenCanvas', 'imageBitmap']). +combine('isOriginClean', [true, false]). +beginSubcases(). +combine('contentFrom', ['image', 'imageBitmap', 'canvas', 'offscreenCanvas']). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { sourceImage, isOriginClean, contentFrom, copySize } = t.params; + if (typeof document === 'undefined') { + t.skip('DOM is not available to create an image element.'); + } + + const crossOriginUrl = getCrossOriginResourcePath('webgpu.png', t.onlineCrossOriginUrl); + const originCleanUrl = getResourcePath('webgpu.png'); + const img = document.createElement('img'); + img.src = isOriginClean ? originCleanUrl : crossOriginUrl; + + // Load image + const timeout_ms = 5000; + try { + await raceWithRejectOnTimeout(img.decode(), timeout_ms, 'load image timeout'); + } catch (e) { + if (isOriginClean) { + throw e; + } else { + t.skip('Cannot load cross origin image in time'); + return; } + } - const crossOriginUrl = getCrossOriginResourcePath('webgpu.png', t.onlineCrossOriginUrl); - const originCleanUrl = getResourcePath('webgpu.png'); - const img = document.createElement('img'); - img.src = isOriginClean ? originCleanUrl : crossOriginUrl; - - // Load image - const timeout_ms = 5000; - try { - await raceWithRejectOnTimeout(img.decode(), timeout_ms, 'load image timeout'); - } catch (e) { - if (isOriginClean) { - throw e; - } else { - t.skip('Cannot load cross origin image in time'); - return; - } - } - - // The externalImage contents can be updated by: - // - decoded image element - // - canvas/offscreenCanvas with image draw on it. - // - imageBitmap created with the image. - // Test covers all of these cases to ensure origin clean checks works. - let source; - switch (contentFrom) { - case 'image': { + // The externalImage contents can be updated by: + // - decoded image element + // - canvas/offscreenCanvas with image draw on it. + // - imageBitmap created with the image. + // Test covers all of these cases to ensure origin clean checks works. + let source; + switch (contentFrom) { + case 'image':{ source = img; break; } - case 'imageBitmap': { + case 'imageBitmap':{ source = await t.createImageBitmap(img); break; } - case 'canvas': - case 'offscreenCanvas': { + case 'canvas': + case 'offscreenCanvas':{ const canvasType = contentFrom === 'offscreenCanvas' ? 'offscreen' : 'onscreen'; source = t.getCanvasWithContent(canvasType, 1, 1, img); break; } - default: - unreachable(); - } + default: + unreachable(); + } - // Update the externalImage content with source. - let externalImage; - switch (sourceImage) { - case 'imageBitmap': { + // Update the externalImage content with source. + let externalImage; + switch (sourceImage) { + case 'imageBitmap':{ externalImage = await t.createImageBitmap(source); break; } - case 'canvas': - case 'offscreenCanvas': { + case 'canvas': + case 'offscreenCanvas':{ const canvasType = contentFrom === 'offscreenCanvas' ? 'offscreen' : 'onscreen'; externalImage = t.getCanvasWithContent(canvasType, 1, 1, source); break; } - default: - unreachable(); - } + default: + unreachable(); + } - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - t.runTest( - { source: externalImage }, - { texture: dstTexture }, - copySize, - true, // No validation errors. - isOriginClean ? '' : 'SecurityError' - ); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('source_imageBitmap,state') - .desc( - ` + t.runTest( + { source: externalImage }, + { texture: dstTexture }, + copySize, + true, // No validation errors. + isOriginClean ? '' : 'SecurityError' + ); +}); + +g.test('source_imageBitmap,state'). +desc( + ` Test ImageBitmap as source image in state [valid, closed]. Call imageBitmap.close() to transfer the imageBitmap into @@ -304,39 +322,39 @@ g.test('source_imageBitmap,state') Check whether 'InvalidStateError' is generated when ImageBitmap is closed. ` - ) - .params(u => - u // - .combine('closed', [false, true]) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { closed, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - if (closed) imageBitmap.close(); - - t.runTest( - { source: imageBitmap }, - { texture: dstTexture }, - copySize, - true, // No validation errors. - closed ? 'InvalidStateError' : '' - ); +). +params((u) => +u // +.combine('closed', [false, true]). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { closed, copySize } = t.params; + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('source_canvas,state') - .desc( - ` + if (closed) imageBitmap.close(); + + t.runTest( + { source: imageBitmap }, + { texture: dstTexture }, + copySize, + true, // No validation errors. + closed ? 'InvalidStateError' : '' + ); +}); + +g.test('source_canvas,state'). +desc( + ` Test HTMLCanvasElement as source image in state [nocontext, 'placeholder-nocontext', 'placeholder-hascontext', valid]. @@ -354,68 +372,68 @@ g.test('source_canvas,state') Check whether 'InvalidStateError' is generated when HTMLCanvasElement is in 'placeholder' state. ` - ) - .params(u => - u // - .combine('state', ['nocontext', 'placeholder-nocontext', 'placeholder-hascontext', 'valid']) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(t => { - const { state, copySize } = t.params; - const canvas = createOnscreenCanvas(t, 1, 1); - if (typeof canvas.transferControlToOffscreen === 'undefined') { - t.skip("Browser doesn't support HTMLCanvasElement.transferControlToOffscreen"); - return; - } +). +params((u) => +u // +.combine('state', ['nocontext', 'placeholder-nocontext', 'placeholder-hascontext', 'valid']). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn((t) => { + const { state, copySize } = t.params; + const canvas = createOnscreenCanvas(t, 1, 1); + if (typeof canvas.transferControlToOffscreen === 'undefined') { + t.skip("Browser doesn't support HTMLCanvasElement.transferControlToOffscreen"); + return; + } - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT + }); - let exceptionName = ''; + let exceptionName = ''; - switch (state) { - case 'nocontext': { + switch (state) { + case 'nocontext':{ exceptionName = 'OperationError'; break; } - case 'placeholder-nocontext': { + case 'placeholder-nocontext':{ canvas.transferControlToOffscreen(); exceptionName = 'InvalidStateError'; break; } - case 'placeholder-hascontext': { + case 'placeholder-hascontext':{ const offscreenCanvas = canvas.transferControlToOffscreen(); t.tryTrackForCleanup(offscreenCanvas.getContext('webgl')); exceptionName = 'InvalidStateError'; break; } - case 'valid': { + case 'valid':{ assert(canvas.getContext('2d') !== null); break; } - default: - unreachable(); - } + default: + unreachable(); + } - t.runTest( - { source: canvas }, - { texture: dstTexture }, - copySize, - true, // No validation errors. - exceptionName - ); - }); + t.runTest( + { source: canvas }, + { texture: dstTexture }, + copySize, + true, // No validation errors. + exceptionName + ); +}); -g.test('source_offscreenCanvas,state') - .desc( - ` +g.test('source_offscreenCanvas,state'). +desc( + ` Test OffscreenCanvas as source image in state [valid, detached]. Nocontext means using a canvas without any context as copy param. @@ -428,43 +446,43 @@ g.test('source_offscreenCanvas,state') Check whether 'InvalidStateError' is generated when OffscreenCanvas is detached. ` - ) - .params(u => - u // - .combine('state', ['nocontext', 'detached-nocontext', 'detached-hascontext', 'valid']) - .beginSubcases() - .combine('getContextInOffscreenCanvas', [false, true]) - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { state, copySize } = t.params; - const offscreenCanvas = createOffscreenCanvas(t, 1, 1); - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); +). +params((u) => +u // +.combine('state', ['nocontext', 'detached-nocontext', 'detached-hascontext', 'valid']). +beginSubcases(). +combine('getContextInOffscreenCanvas', [false, true]). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { state, copySize } = t.params; + const offscreenCanvas = createOffscreenCanvas(t, 1, 1); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT + }); - let exceptionName = ''; - switch (state) { - case 'nocontext': { + let exceptionName = ''; + switch (state) { + case 'nocontext':{ exceptionName = 'OperationError'; break; } - case 'detached-nocontext': { + case 'detached-nocontext':{ const messageChannel = new MessageChannel(); messageChannel.port1.postMessage(offscreenCanvas, [offscreenCanvas]); exceptionName = 'InvalidStateError'; break; } - case 'detached-hascontext': { + case 'detached-hascontext':{ const messageChannel = new MessageChannel(); - const port2FirstMessage = new Promise(resolve => { - messageChannel.port2.onmessage = m => resolve(m); + const port2FirstMessage = new Promise((resolve) => { + messageChannel.port2.onmessage = (m) => resolve(m); }); messageChannel.port1.postMessage(offscreenCanvas, [offscreenCanvas]); @@ -475,325 +493,324 @@ g.test('source_offscreenCanvas,state') exceptionName = 'InvalidStateError'; break; } - case 'valid': { + case 'valid':{ offscreenCanvas.getContext('webgl'); break; } - default: - unreachable(); - } + default: + unreachable(); + } - t.runTest( - { source: offscreenCanvas }, - { texture: dstTexture }, - copySize, - true, // No validation errors. - exceptionName - ); - }); + t.runTest( + { source: offscreenCanvas }, + { texture: dstTexture }, + copySize, + true, // No validation errors. + exceptionName + ); +}); -g.test('destination_texture,state') - .desc( - ` +g.test('destination_texture,state'). +desc( + ` Test dst texture is [valid, invalid, destroyed]. Check that an error is generated when texture is an error texture. Check that an error is generated when texture is in destroyed state. ` - ) - .params(u => - u // - .combine('state', kResourceStates) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { state, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - const dstTexture = t.createTextureWithState(state); +). +params((u) => +u // +.combine('state', kResourceStates). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { state, copySize } = t.params; + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); + const dstTexture = t.createTextureWithState(state); - t.runTest({ source: imageBitmap }, { texture: dstTexture }, copySize, state === 'valid'); + t.runTest({ source: imageBitmap }, { texture: dstTexture }, copySize, state === 'valid'); +}); + +g.test('destination_texture,device_mismatch'). +desc( + 'Tests copyExternalImageToTexture cannot be called with a destination texture created from another device' +). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn(async (t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const copySize = { width: 1, height: 1, depthOrArrayLayers: 1 }; + + const texture = sourceDevice.createTexture({ + size: copySize, + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('destination_texture,device_mismatch') - .desc( - 'Tests copyExternalImageToTexture cannot be called with a destination texture created from another device' - ) - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(async t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - const copySize = { width: 1, height: 1, depthOrArrayLayers: 1 }; + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - const texture = sourceDevice.createTexture({ - size: copySize, - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); + t.runTest({ source: imageBitmap }, { texture }, copySize, !mismatched); +}); - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - - t.runTest({ source: imageBitmap }, { texture }, copySize, !mismatched); - }); - -g.test('destination_texture,usage') - .desc( - ` +g.test('destination_texture,usage'). +desc( + ` Test dst texture usages Check that an error is generated when texture is created without usage COPY_DST | RENDER_ATTACHMENT. ` - ) - .params(u => - u // - .combine('usage', kTextureUsages) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { usage, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage, - }); - - t.runTest( - { source: imageBitmap }, - { texture: dstTexture }, - copySize, - !!(usage & GPUTextureUsage.COPY_DST && usage & GPUTextureUsage.RENDER_ATTACHMENT) - ); +). +params((u) => +u // +.combine('usage', kTextureUsages). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { usage, copySize } = t.params; + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'rgba8unorm', + usage }); -g.test('destination_texture,sample_count') - .desc( - ` + t.runTest( + { source: imageBitmap }, + { texture: dstTexture }, + copySize, + !!(usage & GPUTextureUsage.COPY_DST && usage & GPUTextureUsage.RENDER_ATTACHMENT) + ); +}); + +g.test('destination_texture,sample_count'). +desc( + ` Test dst texture sample count. Check that an error is generated when sample count it not 1. ` - ) - .params(u => - u // - .combine('sampleCount', [1, 4]) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { sampleCount, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - sampleCount, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - t.runTest({ source: imageBitmap }, { texture: dstTexture }, copySize, sampleCount === 1); +). +params((u) => +u // +.combine('sampleCount', [1, 4]). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { sampleCount, copySize } = t.params; + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + sampleCount, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('destination_texture,mipLevel') - .desc( - ` + t.runTest({ source: imageBitmap }, { texture: dstTexture }, copySize, sampleCount === 1); +}); + +g.test('destination_texture,mipLevel'). +desc( + ` Test dst mipLevel. Check that an error is generated when mipLevel is too large. ` - ) - .params(u => - u // - .combine('mipLevel', [0, kDefaultMipLevelCount - 1, kDefaultMipLevelCount]) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .fn(async t => { - const { mipLevel, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - const dstTexture = t.device.createTexture({ - size: { width: kDefaultWidth, height: kDefaultHeight, depthOrArrayLayers: kDefaultDepth }, - mipLevelCount: kDefaultMipLevelCount, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - t.runTest( - { source: imageBitmap }, - { texture: dstTexture, mipLevel }, - copySize, - mipLevel < kDefaultMipLevelCount - ); +). +params((u) => +u // +.combine('mipLevel', [0, kDefaultMipLevelCount - 1, kDefaultMipLevelCount]). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +fn(async (t) => { + const { mipLevel, copySize } = t.params; + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); + const dstTexture = t.device.createTexture({ + size: { width: kDefaultWidth, height: kDefaultHeight, depthOrArrayLayers: kDefaultDepth }, + mipLevelCount: kDefaultMipLevelCount, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('destination_texture,format') - .desc( - ` + t.runTest( + { source: imageBitmap }, + { texture: dstTexture, mipLevel }, + copySize, + mipLevel < kDefaultMipLevelCount + ); +}); + +g.test('destination_texture,format'). +desc( + ` Test dst texture format. Check that an error is generated when texture format is not valid. ` - ) - .params(u => - u - .combine('format', kTextureFormats) - .beginSubcases() - .combine('copySize', [ - { width: 0, height: 0, depthOrArrayLayers: 0 }, - { width: 1, height: 1, depthOrArrayLayers: 1 }, - ]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(async t => { - const { format, copySize } = t.params; +). +params((u) => +u. +combine('format', kTextureFormats). +beginSubcases(). +combine('copySize', [ +{ width: 0, height: 0, depthOrArrayLayers: 0 }, +{ width: 1, height: 1, depthOrArrayLayers: 1 }] +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn(async (t) => { + const { format, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); + const imageBitmap = await t.createImageBitmap(t.getImageData(1, 1)); - // createTexture with all possible texture format may have validation error when using - // compressed texture format. - t.device.pushErrorScope('validation'); - const dstTexture = t.device.createTexture({ - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - format, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - void t.device.popErrorScope(); - - const success = kValidTextureFormatsForCopyE2T.includes(format); - - t.runTest({ source: imageBitmap }, { texture: dstTexture }, copySize, success); + // createTexture with all possible texture format may have validation error when using + // compressed texture format. + t.device.pushErrorScope('validation'); + const dstTexture = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); + void t.device.popErrorScope(); -g.test('OOB,source') - .desc( - ` + const success = kValidTextureFormatsForCopyE2T.includes(format); + + t.runTest({ source: imageBitmap }, { texture: dstTexture }, copySize, success); +}); + +g.test('OOB,source'). +desc( + ` Test source image origin and copy size Check that an error is generated when source.externalImage.origin + copySize is too large. ` - ) - .paramsSubcasesOnly(u => - u - .combine('srcOrigin', [ - { x: 0, y: 0 }, // origin is on top-left - { x: kDefaultWidth - 1, y: 0 }, // x near the border - { x: 0, y: kDefaultHeight - 1 }, // y is near the border - { x: kDefaultWidth, y: kDefaultHeight }, // origin is on bottom-right - { x: kDefaultWidth + 1, y: 0 }, // x is too large - { x: 0, y: kDefaultHeight + 1 }, // y is too large - ]) - .expand('copySize', generateCopySizeForSrcOOB) - ) - .fn(async t => { - const { srcOrigin, copySize } = t.params; - const imageBitmap = await t.createImageBitmap(t.getImageData(kDefaultWidth, kDefaultHeight)); - const dstTexture = t.device.createTexture({ - size: { - width: kDefaultWidth + 1, - height: kDefaultHeight + 1, - depthOrArrayLayers: kDefaultDepth, - }, - mipLevelCount: kDefaultMipLevelCount, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - let success = true; - - if ( - srcOrigin.x + copySize.width > kDefaultWidth || - srcOrigin.y + copySize.height > kDefaultHeight || - copySize.depthOrArrayLayers > 1 - ) { - success = false; - } - - t.runTest( - { source: imageBitmap, origin: srcOrigin }, - { texture: dstTexture }, - copySize, - true, - success ? '' : 'OperationError' - ); +). +paramsSubcasesOnly((u) => +u. +combine('srcOrigin', [ +{ x: 0, y: 0 }, // origin is on top-left +{ x: kDefaultWidth - 1, y: 0 }, // x near the border +{ x: 0, y: kDefaultHeight - 1 }, // y is near the border +{ x: kDefaultWidth, y: kDefaultHeight }, // origin is on bottom-right +{ x: kDefaultWidth + 1, y: 0 }, // x is too large +{ x: 0, y: kDefaultHeight + 1 } // y is too large +]). +expand('copySize', generateCopySizeForSrcOOB) +). +fn(async (t) => { + const { srcOrigin, copySize } = t.params; + const imageBitmap = await t.createImageBitmap(t.getImageData(kDefaultWidth, kDefaultHeight)); + const dstTexture = t.device.createTexture({ + size: { + width: kDefaultWidth + 1, + height: kDefaultHeight + 1, + depthOrArrayLayers: kDefaultDepth + }, + mipLevelCount: kDefaultMipLevelCount, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('OOB,destination') - .desc( - ` + let success = true; + + if ( + srcOrigin.x + copySize.width > kDefaultWidth || + srcOrigin.y + copySize.height > kDefaultHeight || + copySize.depthOrArrayLayers > 1) + { + success = false; + } + + t.runTest( + { source: imageBitmap, origin: srcOrigin }, + { texture: dstTexture }, + copySize, + true, + success ? '' : 'OperationError' + ); +}); + +g.test('OOB,destination'). +desc( + ` Test dst texture copy origin and copy size Check that an error is generated when destination.texture.origin + copySize is too large. Check that 'OperationError' is generated when copySize.depth is larger than 1. ` - ) - .paramsSubcasesOnly(u => - u - .combine('mipLevel', [0, 1, kDefaultMipLevelCount - 2]) - .expand('dstOrigin', generateDstOriginValue) - .expand('copySize', generateCopySizeForDstOOB) - ) - .fn(async t => { - const { mipLevel, dstOrigin, copySize } = t.params; +). +paramsSubcasesOnly((u) => +u. +combine('mipLevel', [0, 1, kDefaultMipLevelCount - 2]). +expand('dstOrigin', generateDstOriginValue). +expand('copySize', generateCopySizeForDstOOB) +). +fn(async (t) => { + const { mipLevel, dstOrigin, copySize } = t.params; - const imageBitmap = await t.createImageBitmap( - t.getImageData(kDefaultWidth + 1, kDefaultHeight + 1) - ); - - const dstTexture = t.device.createTexture({ - size: { - width: kDefaultWidth, - height: kDefaultHeight, - depthOrArrayLayers: kDefaultDepth, - }, - format: 'bgra8unorm', - mipLevelCount: kDefaultMipLevelCount, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - let success = true; - let hasOperationError = false; - const dstMipMapSize = computeMipMapSize(kDefaultWidth, kDefaultHeight, mipLevel); - - if ( - copySize.depthOrArrayLayers > 1 || - dstOrigin.x + copySize.width > dstMipMapSize.mipWidth || - dstOrigin.y + copySize.height > dstMipMapSize.mipHeight || - dstOrigin.z + copySize.depthOrArrayLayers > kDefaultDepth - ) { - success = false; - } - if (copySize.depthOrArrayLayers > 1) { - hasOperationError = true; - } - - t.runTest( - { source: imageBitmap }, - { - texture: dstTexture, - mipLevel, - origin: dstOrigin, - }, - copySize, - success, - hasOperationError ? 'OperationError' : '' - ); + const imageBitmap = await t.createImageBitmap( + t.getImageData(kDefaultWidth + 1, kDefaultHeight + 1) + ); + const dstTexture = t.device.createTexture({ + size: { + width: kDefaultWidth, + height: kDefaultHeight, + depthOrArrayLayers: kDefaultDepth + }, + format: 'bgra8unorm', + mipLevelCount: kDefaultMipLevelCount, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); + + let success = true; + let hasOperationError = false; + const dstMipMapSize = computeMipMapSize(kDefaultWidth, kDefaultHeight, mipLevel); + + if ( + copySize.depthOrArrayLayers > 1 || + dstOrigin.x + copySize.width > dstMipMapSize.mipWidth || + dstOrigin.y + copySize.height > dstMipMapSize.mipHeight || + dstOrigin.z + copySize.depthOrArrayLayers > kDefaultDepth) + { + success = false; + } + if (copySize.depthOrArrayLayers > 1) { + hasOperationError = true; + } + + t.runTest( + { source: imageBitmap }, + { + texture: dstTexture, + mipLevel, + origin: dstOrigin + }, + copySize, + success, + hasOperationError ? 'OperationError' : '' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/buffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/buffer.spec.js index 51da169c7a5..aa740c9200a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/buffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/buffer.spec.js @@ -1,297 +1,296 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests using a destroyed buffer on a queue. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('writeBuffer') - .desc( - ` +g.test('writeBuffer'). +desc( + ` Tests that using a destroyed buffer in writeBuffer fails. - x= {destroyed, not destroyed (control case)} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const buffer = t.trackForCleanup( - t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.COPY_DST, - }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const buffer = t.trackForCleanup( + t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.COPY_DST + }) + ); - if (destroyed) { - buffer.destroy(); - } + if (destroyed) { + buffer.destroy(); + } - t.expectValidationError(() => t.queue.writeBuffer(buffer, 0, new Uint8Array(4)), destroyed); - }); + t.expectValidationError(() => t.queue.writeBuffer(buffer, 0, new Uint8Array(4)), destroyed); +}); -g.test('copyBufferToBuffer') - .desc( - ` +g.test('copyBufferToBuffer'). +desc( + ` Tests that using a destroyed buffer in copyBufferToBuffer fails. - x= {not destroyed (control case), src destroyed, dst destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', ['none', 'src', 'dst', 'both'])) - .fn(t => { - const src = t.trackForCleanup( - t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_SRC }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', ['none', 'src', 'dst', 'both'])). +fn((t) => { + const src = t.trackForCleanup( + t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_SRC }) + ); + const dst = t.trackForCleanup( + t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }) + ); - const dst = t.trackForCleanup( - t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToBuffer(src, 0, dst, 0, dst.size); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToBuffer(src, 0, dst, 0, dst.size); - const commandBuffer = encoder.finish(); + let shouldError = true; + switch (t.params.destroyed) { + case 'none': + shouldError = false; + break; + case 'src': + src.destroy(); + break; + case 'dst': + dst.destroy(); + break; + case 'both': + src.destroy(); + dst.destroy(); + break; + } - let shouldError = true; - switch (t.params.destroyed) { - case 'none': - shouldError = false; - break; - case 'src': - src.destroy(); - break; - case 'dst': - dst.destroy(); - break; - case 'both': - src.destroy(); - dst.destroy(); - break; - } + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, shouldError); +}); - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, shouldError); - }); - -g.test('copyBufferToTexture') - .desc( - ` +g.test('copyBufferToTexture'). +desc( + ` Tests that using a destroyed buffer in copyBufferToTexture fails. - x= {not destroyed (control case), src destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const buffer = t.trackForCleanup( - t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_SRC }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const buffer = t.trackForCleanup( + t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_SRC }) + ); + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST + }) + ); - const texture = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST, - }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToTexture({ buffer }, { texture }, [1, 1, 1]); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToTexture({ buffer }, { texture }, [1, 1, 1]); - const commandBuffer = encoder.finish(); + if (destroyed) { + buffer.destroy(); + } - if (destroyed) { - buffer.destroy(); - } + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); - -g.test('copyTextureToBuffer') - .desc( - ` +g.test('copyTextureToBuffer'). +desc( + ` Tests that using a destroyed buffer in copyTextureToBuffer fails. - x= {not destroyed (control case), dst destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const texture = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC, - }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC + }) + ); + const buffer = t.trackForCleanup( + t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }) + ); - const buffer = t.trackForCleanup( - t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToBuffer({ texture }, { buffer }, [1, 1, 1]); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.copyTextureToBuffer({ texture }, { buffer }, [1, 1, 1]); - const commandBuffer = encoder.finish(); + if (destroyed) { + buffer.destroy(); + } - if (destroyed) { - buffer.destroy(); - } + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); - -g.test('setBindGroup') - .desc( - ` +g.test('setBindGroup'). +desc( + ` Tests that using a destroyed buffer referenced by a bindGroup set with setBindGroup fails - x= {not destroyed (control case), destroyed} ` - ) - .paramsSubcasesOnly(u => - u - .combine('destroyed', [false, true]) - .combine('encoderType', ['compute pass', 'render pass', 'render bundle']) - ) - .fn(t => { - const { destroyed, encoderType } = t.params; - const { device } = t; - const buffer = t.trackForCleanup( - t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.UNIFORM, - }) - ); +). +paramsSubcasesOnly((u) => +u. +combine('destroyed', [false, true]). +combine('encoderType', ['compute pass', 'render pass', 'render bundle']) +). +fn((t) => { + const { destroyed, encoderType } = t.params; + const { device } = t; + const buffer = t.trackForCleanup( + t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.UNIFORM + }) + ); - const layout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE | GPUShaderStage.VERTEX, - buffer: {}, - }, - ], - }); + const layout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE | GPUShaderStage.VERTEX, + buffer: {} + }] - const bindGroup = device.createBindGroup({ - layout, - entries: [{ binding: 0, resource: { buffer } }], - }); - - const { encoder, finish } = t.createEncoder(encoderType); - encoder.setBindGroup(0, bindGroup); - const commandBuffer = finish(); - - if (destroyed) { - buffer.destroy(); - } - - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); }); -g.test('setVertexBuffer') - .desc( - ` + const bindGroup = device.createBindGroup({ + layout, + entries: [{ binding: 0, resource: { buffer } }] + }); + + const { encoder, finish } = t.createEncoder(encoderType); + encoder.setBindGroup(0, bindGroup); + const commandBuffer = finish(); + + if (destroyed) { + buffer.destroy(); + } + + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); + +g.test('setVertexBuffer'). +desc( + ` Tests that using a destroyed buffer referenced in a render pass fails - x= {not destroyed (control case), destroyed} ` - ) - .paramsSubcasesOnly(u => - u.combine('destroyed', [false, true]).combine('encoderType', ['render pass', 'render bundle']) - ) - .fn(t => { - const { destroyed, encoderType } = t.params; - const vertexBuffer = t.trackForCleanup( - t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.VERTEX, - }) - ); +). +paramsSubcasesOnly((u) => +u. +combine('destroyed', [false, true]). +combine('encoderType', ['render pass', 'render bundle']) +). +fn((t) => { + const { destroyed, encoderType } = t.params; + const vertexBuffer = t.trackForCleanup( + t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.VERTEX + }) + ); - const { encoder, finish } = t.createEncoder(encoderType); - encoder.setVertexBuffer(0, vertexBuffer); - const commandBuffer = finish(); + const { encoder, finish } = t.createEncoder(encoderType); + encoder.setVertexBuffer(0, vertexBuffer); + const commandBuffer = finish(); - if (destroyed) { - vertexBuffer.destroy(); - } + if (destroyed) { + vertexBuffer.destroy(); + } - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); -g.test('setIndexBuffer') - .desc( - ` +g.test('setIndexBuffer'). +desc( + ` Tests that using a destroyed buffer referenced in a render pass fails - x= {not destroyed (control case), destroyed} ` - ) - .paramsSubcasesOnly(u => - u.combine('destroyed', [false, true]).combine('encoderType', ['render pass', 'render bundle']) - ) - .fn(t => { - const { destroyed, encoderType } = t.params; - const indexBuffer = t.trackForCleanup( - t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.INDEX, - }) - ); +). +paramsSubcasesOnly((u) => +u. +combine('destroyed', [false, true]). +combine('encoderType', ['render pass', 'render bundle']) +). +fn((t) => { + const { destroyed, encoderType } = t.params; + const indexBuffer = t.trackForCleanup( + t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.INDEX + }) + ); - const { encoder, finish } = t.createEncoder(encoderType); - encoder.setIndexBuffer(indexBuffer, 'uint16'); - const commandBuffer = finish(); + const { encoder, finish } = t.createEncoder(encoderType); + encoder.setIndexBuffer(indexBuffer, 'uint16'); + const commandBuffer = finish(); - if (destroyed) { - indexBuffer.destroy(); - } + if (destroyed) { + indexBuffer.destroy(); + } - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); -g.test('resolveQuerySet') - .desc( - ` +g.test('resolveQuerySet'). +desc( + ` Tests that using a destroyed buffer referenced via resolveQuerySet fails - x= {not destroyed (control case), destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const querySet = t.trackForCleanup( - t.device.createQuerySet({ - type: 'occlusion', - count: 1, - }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const querySet = t.trackForCleanup( + t.device.createQuerySet({ + type: 'occlusion', + count: 1 + }) + ); + const querySetBuffer = t.trackForCleanup( + t.device.createBuffer({ + size: 8, + usage: GPUBufferUsage.QUERY_RESOLVE + }) + ); - const querySetBuffer = t.trackForCleanup( - t.device.createBuffer({ - size: 8, - usage: GPUBufferUsage.QUERY_RESOLVE, - }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.resolveQuerySet(querySet, 0, 1, querySetBuffer, 0); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.resolveQuerySet(querySet, 0, 1, querySetBuffer, 0); - const commandBuffer = encoder.finish(); + if (destroyed) { + querySetBuffer.destroy(); + } - if (destroyed) { - querySetBuffer.destroy(); - } - - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/query_set.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/query_set.spec.js index a7dc93613d8..ac8f810f160 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/query_set.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/query_set.spec.js @@ -1,64 +1,106 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests using a destroyed query set on a queue. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ValidationTest } from '../../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('beginOcclusionQuery') - .desc( - ` +g.test('beginOcclusionQuery'). +desc( + ` Tests that use a destroyed query set in occlusion query on render pass encoder. - x= {destroyed, not destroyed (control case)} ` - ) - .paramsSubcasesOnly(u => u.combine('querySetState', ['valid', 'destroyed'])) - .fn(t => { - const occlusionQuerySet = t.createQuerySetWithState(t.params.querySetState); +). +paramsSubcasesOnly((u) => u.combine('querySetState', ['valid', 'destroyed'])). +fn((t) => { + const occlusionQuerySet = t.createQuerySetWithState(t.params.querySetState); - const encoder = t.createEncoder('render pass', { occlusionQuerySet }); - encoder.encoder.beginOcclusionQuery(0); - encoder.encoder.endOcclusionQuery(); - encoder.validateFinishAndSubmitGivenState(t.params.querySetState); - }); + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + encoder.encoder.beginOcclusionQuery(0); + encoder.encoder.endOcclusionQuery(); + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); +}); -g.test('writeTimestamp') - .desc( - ` -Tests that use a destroyed query set in writeTimestamp on {non-pass, compute, render} encoder. -- x= {destroyed, not destroyed (control case)} +g.test('timestamps'). +desc( ` - ) - .params(u => u.beginSubcases().combine('querySetState', ['valid', 'destroyed'])) - .beforeAllSubcases(t => t.selectDeviceOrSkipTestCase('timestamp-query')) - .fn(t => { - const querySet = t.createQuerySetWithState(t.params.querySetState, { - type: 'timestamp', - count: 2, - }); +Tests that use a destroyed query set in timestamp query on {non-pass, compute, render} encoder. +- x= {destroyed, not destroyed (control case)} - const encoder = t.createEncoder('non-pass'); - encoder.encoder.writeTimestamp(querySet, 0); - encoder.validateFinishAndSubmitGivenState(t.params.querySetState); + TODO: writeTimestamp is removed from the spec so it's skipped if it TypeErrors. + ` +). +params((u) => u.beginSubcases().combine('querySetState', ['valid', 'destroyed'])). +beforeAllSubcases((t) => t.selectDeviceOrSkipTestCase('timestamp-query')). +fn((t) => { + const querySet = t.createQuerySetWithState(t.params.querySetState, { + type: 'timestamp', + count: 2 }); -g.test('resolveQuerySet') - .desc( - ` + { + const encoder = t.createEncoder('non-pass'); + try { + + encoder.encoder.writeTimestamp(querySet, 0); + } catch (ex) { + t.skipIf(ex instanceof TypeError, 'writeTimestamp is actually not available'); + } + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); + } + + { + const encoder = t.createEncoder('non-pass'); + encoder.encoder. + beginComputePass({ + timestampWrites: { querySet, beginningOfPassWriteIndex: 0 } + }). + end(); + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); + } + + { + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ); + const encoder = t.createEncoder('non-pass'); + encoder.encoder. + beginRenderPass({ + colorAttachments: [ + { + view: texture.createView(), + loadOp: 'load', + storeOp: 'store' + }], + + timestampWrites: { querySet, beginningOfPassWriteIndex: 0 } + }). + end(); + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); + } +}); + +g.test('resolveQuerySet'). +desc( + ` Tests that use a destroyed query set in resolveQuerySet. - x= {destroyed, not destroyed (control case)} ` - ) - .paramsSubcasesOnly(u => u.combine('querySetState', ['valid', 'destroyed'])) - .fn(t => { - const querySet = t.createQuerySetWithState(t.params.querySetState); +). +paramsSubcasesOnly((u) => u.combine('querySetState', ['valid', 'destroyed'])). +fn((t) => { + const querySet = t.createQuerySetWithState(t.params.querySetState); - const buffer = t.device.createBuffer({ size: 8, usage: GPUBufferUsage.QUERY_RESOLVE }); + const buffer = t.device.createBuffer({ size: 8, usage: GPUBufferUsage.QUERY_RESOLVE }); - const encoder = t.createEncoder('non-pass'); - encoder.encoder.resolveQuerySet(querySet, 0, 1, buffer, 0); - encoder.validateFinishAndSubmitGivenState(t.params.querySetState); - }); + const encoder = t.createEncoder('non-pass'); + encoder.encoder.resolveQuerySet(querySet, 0, 1, buffer, 0); + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/texture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/texture.spec.js index 75bce17211b..eb32232b51a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/texture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/destroyed/texture.spec.js @@ -1,299 +1,294 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests using a destroyed texture on a queue. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { unreachable } from '../../../../../common/util/util.js'; import { ValidationTest } from '../../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('writeTexture') - .desc( - ` +g.test('writeTexture'). +desc( + ` Tests that using a destroyed texture in writeTexture fails. - x= {destroyed, not destroyed (control case)} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const texture = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST, - }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST + }) + ); - if (destroyed) { - texture.destroy(); - } + if (destroyed) { + texture.destroy(); + } - t.expectValidationError( - () => t.queue.writeTexture({ texture }, new Uint8Array(4), { bytesPerRow: 4 }, [1, 1, 1]), - destroyed - ); - }); + t.expectValidationError( + () => t.queue.writeTexture({ texture }, new Uint8Array(4), { bytesPerRow: 4 }, [1, 1, 1]), + destroyed + ); +}); -g.test('copyTextureToTexture') - .desc( - ` +g.test('copyTextureToTexture'). +desc( + ` Tests that using a destroyed texture in copyTextureToTexture fails. - x= {not destroyed (control case), src destroyed, dst destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', ['none', 'src', 'dst', 'both'])) - .fn(t => { - const src = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC, - }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', ['none', 'src', 'dst', 'both'])). +fn((t) => { + const src = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC + }) + ); + const dst = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST + }) + ); - const dst = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST, - }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToTexture({ texture: src }, { texture: dst }, [1, 1, 1]); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.copyTextureToTexture({ texture: src }, { texture: dst }, [1, 1, 1]); - const commandBuffer = encoder.finish(); + let shouldError = true; + switch (t.params.destroyed) { + case 'none': + shouldError = false; + break; + case 'src': + src.destroy(); + break; + case 'dst': + dst.destroy(); + break; + case 'both': + src.destroy(); + dst.destroy(); + break; + } - let shouldError = true; - switch (t.params.destroyed) { - case 'none': - shouldError = false; - break; - case 'src': - src.destroy(); - break; - case 'dst': - dst.destroy(); - break; - case 'both': - src.destroy(); - dst.destroy(); - break; - } + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, shouldError); +}); - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, shouldError); - }); - -g.test('copyBufferToTexture') - .desc( - ` +g.test('copyBufferToTexture'). +desc( + ` Tests that using a destroyed texture in copyBufferToTexture fails. - x= {not destroyed (control case), dst destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const buffer = t.trackForCleanup( - t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_SRC }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const buffer = t.trackForCleanup( + t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_SRC }) + ); + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_DST + }) + ); - const texture = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_DST, - }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToTexture({ buffer }, { texture }, [1, 1, 1]); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.copyBufferToTexture({ buffer }, { texture }, [1, 1, 1]); - const commandBuffer = encoder.finish(); + if (destroyed) { + texture.destroy(); + } - if (destroyed) { - texture.destroy(); - } + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); - -g.test('copyTextureToBuffer') - .desc( - ` +g.test('copyTextureToBuffer'). +desc( + ` Tests that using a destroyed texture in copyTextureToBuffer fails. - x= {not destroyed (control case), src destroyed} ` - ) - .paramsSubcasesOnly(u => u.combine('destroyed', [false, true])) - .fn(t => { - const { destroyed } = t.params; - const texture = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC, - }) - ); +). +paramsSubcasesOnly((u) => u.combine('destroyed', [false, true])). +fn((t) => { + const { destroyed } = t.params; + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.COPY_SRC + }) + ); + const buffer = t.trackForCleanup( + t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }) + ); - const buffer = t.trackForCleanup( - t.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }) - ); + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToBuffer({ texture }, { buffer }, [1, 1, 1]); + const commandBuffer = encoder.finish(); - const encoder = t.device.createCommandEncoder(); - encoder.copyTextureToBuffer({ texture }, { buffer }, [1, 1, 1]); - const commandBuffer = encoder.finish(); + if (destroyed) { + texture.destroy(); + } - if (destroyed) { - texture.destroy(); - } + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); - }); - -g.test('setBindGroup') - .desc( - ` +g.test('setBindGroup'). +desc( + ` Tests that using a destroyed texture referenced by a bindGroup set with setBindGroup fails - x= {not destroyed (control case), destroyed} ` - ) - .paramsSubcasesOnly(u => - u - .combine('destroyed', [false, true]) - .combine('encoderType', ['compute pass', 'render pass', 'render bundle']) - ) - .fn(t => { - const { destroyed, encoderType } = t.params; - const { device } = t; - const texture = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, - }) - ); +). +paramsSubcasesOnly((u) => +u. +combine('destroyed', [false, true]). +combine('encoderType', ['compute pass', 'render pass', 'render bundle']) +). +fn((t) => { + const { destroyed, encoderType } = t.params; + const { device } = t; + const texture = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING + }) + ); - const layout = device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - texture: {}, - }, - ], - }); + const layout = device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + texture: {} + }] - const bindGroup = device.createBindGroup({ - layout, - entries: [{ binding: 0, resource: texture.createView() }], - }); - - const { encoder, finish } = t.createEncoder(encoderType); - encoder.setBindGroup(0, bindGroup); - const commandBuffer = finish(); - - if (destroyed) { - texture.destroy(); - } - - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, destroyed); }); -g.test('beginRenderPass') - .desc( - ` + const bindGroup = device.createBindGroup({ + layout, + entries: [{ binding: 0, resource: texture.createView() }] + }); + + const { encoder, finish } = t.createEncoder(encoderType); + encoder.setBindGroup(0, bindGroup); + const commandBuffer = finish(); + + if (destroyed) { + texture.destroy(); + } + + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, destroyed); +}); + +g.test('beginRenderPass'). +desc( + ` Tests that using a destroyed texture referenced by a render pass fails - x= {not destroyed (control case), colorAttachment destroyed, depthAttachment destroyed, resolveTarget destroyed} ` - ) - .paramsSubcasesOnly(u => - u.combine('textureToDestroy', [ - 'none', - 'colorAttachment', - 'resolveAttachment', - 'depthStencilAttachment', - ]) - ) - .fn(t => { - const { textureToDestroy } = t.params; - const { device } = t; +). +paramsSubcasesOnly((u) => +u.combine('textureToDestroy', [ +'none', +'colorAttachment', +'resolveAttachment', +'depthStencilAttachment'] +) +). +fn((t) => { + const { textureToDestroy } = t.params; + const { device } = t; - const colorAttachment = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - sampleCount: 4, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); + const colorAttachment = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + sampleCount: 4, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ); - const resolveAttachment = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); + const resolveAttachment = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ); - const depthStencilAttachment = t.trackForCleanup( - t.device.createTexture({ - size: [1, 1, 1], - format: 'depth32float', - sampleCount: 4, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); + const depthStencilAttachment = t.trackForCleanup( + t.device.createTexture({ + size: [1, 1, 1], + format: 'depth32float', + sampleCount: 4, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ); - const encoder = device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - resolveTarget: resolveAttachment.createView(), - loadOp: 'clear', - storeOp: 'store', - }, - ], + const encoder = device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachment.createView(), + resolveTarget: resolveAttachment.createView(), + loadOp: 'clear', + storeOp: 'store' + }], - depthStencilAttachment: { - view: depthStencilAttachment.createView(), - depthClearValue: 0, - depthLoadOp: 'clear', - depthStoreOp: 'store', - }, - }); - pass.end(); - const commandBuffer = encoder.finish(); - - switch (textureToDestroy) { - case 'none': - break; - case 'colorAttachment': - colorAttachment.destroy(); - break; - case 'resolveAttachment': - resolveAttachment.destroy(); - break; - case 'depthStencilAttachment': - depthStencilAttachment.destroy(); - break; - default: - unreachable(); + depthStencilAttachment: { + view: depthStencilAttachment.createView(), + depthClearValue: 0, + depthLoadOp: 'clear', + depthStoreOp: 'store' } - - const shouldError = textureToDestroy !== 'none'; - - t.expectValidationError(() => { - t.queue.submit([commandBuffer]); - }, shouldError); }); + pass.end(); + const commandBuffer = encoder.finish(); + + switch (textureToDestroy) { + case 'none': + break; + case 'colorAttachment': + colorAttachment.destroy(); + break; + case 'resolveAttachment': + resolveAttachment.destroy(); + break; + case 'depthStencilAttachment': + depthStencilAttachment.destroy(); + break; + default: + unreachable(); + } + + const shouldError = textureToDestroy !== 'none'; + + t.expectValidationError(() => { + t.queue.submit([commandBuffer]); + }, shouldError); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/submit.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/submit.spec.js index 09d36ea983e..fc31992d580 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/submit.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/submit.spec.js @@ -1,48 +1,47 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests submit validation. Note: destroyed buffer/texture/querySet are tested in destroyed/. (unless it gets moved here) Note: buffer map state is tested in ./buffer_mapped.spec.ts. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('command_buffer,device_mismatch') - .desc( - ` +g.test('command_buffer,device_mismatch'). +desc( + ` Tests submit cannot be called with command buffers created from another device Test with two command buffers to make sure all command buffers can be validated: - cb0 and cb1 from same device - cb0 and cb1 from different device ` - ) - .paramsSubcasesOnly([ - { cb0Mismatched: false, cb1Mismatched: false }, // control case - { cb0Mismatched: true, cb1Mismatched: false }, - { cb0Mismatched: false, cb1Mismatched: true }, - ]) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { cb0Mismatched, cb1Mismatched } = t.params; - const mismatched = cb0Mismatched || cb1Mismatched; +). +paramsSubcasesOnly([ +{ cb0Mismatched: false, cb1Mismatched: false }, // control case +{ cb0Mismatched: true, cb1Mismatched: false }, +{ cb0Mismatched: false, cb1Mismatched: true }] +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { cb0Mismatched, cb1Mismatched } = t.params; + const mismatched = cb0Mismatched || cb1Mismatched; - const encoder0 = cb0Mismatched - ? t.mismatchedDevice.createCommandEncoder() - : t.device.createCommandEncoder(); - const cb0 = encoder0.finish(); + const encoder0 = cb0Mismatched ? + t.mismatchedDevice.createCommandEncoder() : + t.device.createCommandEncoder(); + const cb0 = encoder0.finish(); - const encoder1 = cb1Mismatched - ? t.mismatchedDevice.createCommandEncoder() - : t.device.createCommandEncoder(); - const cb1 = encoder1.finish(); + const encoder1 = cb1Mismatched ? + t.mismatchedDevice.createCommandEncoder() : + t.device.createCommandEncoder(); + const cb1 = encoder1.finish(); - t.expectValidationError(() => { - t.device.queue.submit([cb0, cb1]); - }, mismatched); - }); + t.expectValidationError(() => { + t.device.queue.submit([cb0, cb1]); + }, mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeBuffer.spec.js index 92e4de6d0c0..f7cff5bb79c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeBuffer.spec.js @@ -1,12 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests writeBuffer validation. Note: buffer map state is tested in ./buffer_mapped.spec.ts. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { kTypedArrayBufferViewConstructors } from '../../../../common/util/util.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { + kTypedArrayBufferViewConstructors } from + + +'../../../../common/util/util.js'; import { Float16Array } from '../../../../external/petamoriken/float16/float16.js'; import { GPUConst } from '../../../constants.js'; import { kResourceStates } from '../../../gpu_test.js'; @@ -14,31 +17,31 @@ import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('buffer_state') - .desc( - ` +g.test('buffer_state'). +desc( + ` Test that the buffer used for GPUQueue.writeBuffer() must be valid. Tests calling writeBuffer with {valid, invalid, destroyed} buffer. ` - ) - .params(u => u.combine('bufferState', kResourceStates)) - .fn(t => { - const { bufferState } = t.params; - const buffer = t.createBufferWithState(bufferState, { - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); - const data = new Uint8Array(16); - const _valid = bufferState === 'valid'; - - t.expectValidationError(() => { - t.device.queue.writeBuffer(buffer, 0, data, 0, data.length); - }, !_valid); +). +params((u) => u.combine('bufferState', kResourceStates)). +fn((t) => { + const { bufferState } = t.params; + const buffer = t.createBufferWithState(bufferState, { + size: 16, + usage: GPUBufferUsage.COPY_DST }); + const data = new Uint8Array(16); + const _valid = bufferState === 'valid'; -g.test('ranges') - .desc( - ` + t.expectValidationError(() => { + t.device.queue.writeBuffer(buffer, 0, data, 0, data.length); + }, !_valid); +}); + +g.test('ranges'). +desc( + ` Tests that the data ranges given to GPUQueue.writeBuffer() are properly validated. Tests calling writeBuffer with both TypedArrays and ArrayBuffers and checks that the data offset and size is interpreted correctly for both. @@ -50,140 +53,148 @@ g.test('ranges') - Fits fully within the destination buffer. - Has a byte size which is a multiple of 4. ` - ) - .fn(t => { - const queue = t.device.queue; +). +fn((t) => { + const queue = t.device.queue; - function runTest(arrayType, testBuffer) { - const elementSize = arrayType.BYTES_PER_ELEMENT; - const bufferSize = 16 * elementSize; - const buffer = t.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_DST, - }); - const arraySm = testBuffer ? new arrayType(8).buffer : new arrayType(8); - const arrayMd = testBuffer ? new arrayType(16).buffer : new arrayType(16); - const arrayLg = testBuffer ? new arrayType(32).buffer : new arrayType(32); + function runTest(arrayType, testBuffer) { + const elementSize = arrayType.BYTES_PER_ELEMENT; + const bufferSize = 16 * elementSize; + const buffer = t.device.createBuffer({ + size: bufferSize, + usage: GPUBufferUsage.COPY_DST + }); + const arraySm = testBuffer ? + new arrayType(8).buffer : + new arrayType(8); + const arrayMd = testBuffer ? + new arrayType(16).buffer : + new arrayType(16); + const arrayLg = testBuffer ? + new arrayType(32).buffer : + new arrayType(32); - if (elementSize < 4) { - const array15 = testBuffer ? new arrayType(15).buffer : new arrayType(15); + if (elementSize < 4) { + const array15 = testBuffer ? + new arrayType(15).buffer : + new arrayType(15); - // Writing the full buffer that isn't 4-byte aligned. - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, array15)); + // Writing the full buffer that isn't 4-byte aligned. + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, array15)); - // Writing from an offset that causes source to be 4-byte aligned. - queue.writeBuffer(buffer, 0, array15, 3); + // Writing from an offset that causes source to be 4-byte aligned. + queue.writeBuffer(buffer, 0, array15, 3); - // Writing from an offset that causes the source to not be 4-byte aligned. - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arrayMd, 3)); + // Writing from an offset that causes the source to not be 4-byte aligned. + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arrayMd, 3)); - // Writing with a size that is not 4-byte aligned. - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 0, 7)); - } - - // Writing the full buffer without offsets. - queue.writeBuffer(buffer, 0, arraySm); - queue.writeBuffer(buffer, 0, arrayMd); - t.expectValidationError(() => queue.writeBuffer(buffer, 0, arrayLg)); - - // Writing the full buffer with a 4-byte aligned offset. - queue.writeBuffer(buffer, 8, arraySm); - t.expectValidationError(() => queue.writeBuffer(buffer, 8, arrayMd)); - - // Writing the full buffer with a unaligned offset. - t.expectValidationError(() => queue.writeBuffer(buffer, 3, arraySm)); - - // Writing remainder of buffer from offset. - queue.writeBuffer(buffer, 0, arraySm, 4); - queue.writeBuffer(buffer, 0, arrayMd, 4); - t.expectValidationError(() => queue.writeBuffer(buffer, 0, arrayLg, 4)); - - // Writing a larger buffer from an offset that allows it to fit in the destination. - queue.writeBuffer(buffer, 0, arrayLg, 16); - - // Writing with both an offset and size. - queue.writeBuffer(buffer, 0, arraySm, 4, 4); - - // Writing with a size that extends past the source buffer length. - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 0, 16)); - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 4, 8)); - - // Writing with a size that is 4-byte aligned but an offset that is not. - queue.writeBuffer(buffer, 0, arraySm, 3, 4); - - // Writing zero bytes at the end of the buffer. - queue.writeBuffer(buffer, bufferSize, arraySm, 0, 0); - - // Writing with a buffer offset that is out of range of buffer size. - t.expectValidationError(() => queue.writeBuffer(buffer, bufferSize + 4, arraySm, 0, 0)); - - // Writing zero bytes from the end of the data. - queue.writeBuffer(buffer, 0, arraySm, 8, 0); - - // Writing with a data offset that is out of range of data size. - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 9, 0)); - - // Writing with a data offset that is out of range of data size with implicit copy size. - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 9, undefined)); - - // A data offset of undefined should be treated as 0. - queue.writeBuffer(buffer, 0, arraySm, undefined, 8); - t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, undefined, 12)); + // Writing with a size that is not 4-byte aligned. + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 0, 7)); } - runTest(Uint8Array, true); + // Writing the full buffer without offsets. + queue.writeBuffer(buffer, 0, arraySm); + queue.writeBuffer(buffer, 0, arrayMd); + t.expectValidationError(() => queue.writeBuffer(buffer, 0, arrayLg)); - for (const arrayType of kTypedArrayBufferViewConstructors) { - if (arrayType === Float16Array) { - // Skip Float16Array since it is supplied by an external module, so there isn't an overload for it. - continue; - } - runTest(arrayType, false); + // Writing the full buffer with a 4-byte aligned offset. + queue.writeBuffer(buffer, 8, arraySm); + t.expectValidationError(() => queue.writeBuffer(buffer, 8, arrayMd)); + + // Writing the full buffer with a unaligned offset. + t.expectValidationError(() => queue.writeBuffer(buffer, 3, arraySm)); + + // Writing remainder of buffer from offset. + queue.writeBuffer(buffer, 0, arraySm, 4); + queue.writeBuffer(buffer, 0, arrayMd, 4); + t.expectValidationError(() => queue.writeBuffer(buffer, 0, arrayLg, 4)); + + // Writing a larger buffer from an offset that allows it to fit in the destination. + queue.writeBuffer(buffer, 0, arrayLg, 16); + + // Writing with both an offset and size. + queue.writeBuffer(buffer, 0, arraySm, 4, 4); + + // Writing with a size that extends past the source buffer length. + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 0, 16)); + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 4, 8)); + + // Writing with a size that is 4-byte aligned but an offset that is not. + queue.writeBuffer(buffer, 0, arraySm, 3, 4); + + // Writing zero bytes at the end of the buffer. + queue.writeBuffer(buffer, bufferSize, arraySm, 0, 0); + + // Writing with a buffer offset that is out of range of buffer size. + t.expectValidationError(() => queue.writeBuffer(buffer, bufferSize + 4, arraySm, 0, 0)); + + // Writing zero bytes from the end of the data. + queue.writeBuffer(buffer, 0, arraySm, 8, 0); + + // Writing with a data offset that is out of range of data size. + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 9, 0)); + + // Writing with a data offset that is out of range of data size with implicit copy size. + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, 9, undefined)); + + // A data offset of undefined should be treated as 0. + queue.writeBuffer(buffer, 0, arraySm, undefined, 8); + t.shouldThrow('OperationError', () => queue.writeBuffer(buffer, 0, arraySm, undefined, 12)); + } + + runTest(Uint8Array, true); + + for (const arrayType of kTypedArrayBufferViewConstructors) { + if (arrayType === Float16Array) { + // Skip Float16Array since it is supplied by an external module, so there isn't an overload for it. + continue; } - }); + runTest(arrayType, false); + } +}); -g.test('usages') - .desc( - ` +g.test('usages'). +desc( + ` Tests calling writeBuffer with the buffer missed COPY_DST usage. - buffer {with, without} COPY DST usage ` - ) - .paramsSubcasesOnly([ - { usage: GPUConst.BufferUsage.COPY_DST, _valid: true }, // control case - { usage: GPUConst.BufferUsage.STORAGE, _valid: false }, // without COPY_DST usage - { usage: GPUConst.BufferUsage.STORAGE | GPUConst.BufferUsage.COPY_SRC, _valid: false }, // with other usage - { usage: GPUConst.BufferUsage.STORAGE | GPUConst.BufferUsage.COPY_DST, _valid: true }, // with COPY_DST usage - ]) - .fn(t => { - const { usage, _valid } = t.params; - const buffer = t.device.createBuffer({ size: 16, usage }); - const data = new Uint8Array(16); +). +paramsSubcasesOnly([ +{ usage: GPUConst.BufferUsage.COPY_DST, _valid: true }, // control case +{ usage: GPUConst.BufferUsage.STORAGE, _valid: false }, // without COPY_DST usage +{ usage: GPUConst.BufferUsage.STORAGE | GPUConst.BufferUsage.COPY_SRC, _valid: false }, // with other usage +{ usage: GPUConst.BufferUsage.STORAGE | GPUConst.BufferUsage.COPY_DST, _valid: true } // with COPY_DST usage +]). +fn((t) => { + const { usage, _valid } = t.params; + const buffer = t.device.createBuffer({ size: 16, usage }); + const data = new Uint8Array(16); - t.expectValidationError(() => { - t.device.queue.writeBuffer(buffer, 0, data, 0, data.length); - }, !_valid); + t.expectValidationError(() => { + t.device.queue.writeBuffer(buffer, 0, data, 0, data.length); + }, !_valid); +}); + +g.test('buffer,device_mismatch'). +desc('Tests writeBuffer cannot be called with a buffer created from another device.'). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const buffer = sourceDevice.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST }); + t.trackForCleanup(buffer); -g.test('buffer,device_mismatch') - .desc('Tests writeBuffer cannot be called with a buffer created from another device.') - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const data = new Uint8Array(16); - const buffer = sourceDevice.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(buffer); - - const data = new Uint8Array(16); - - t.expectValidationError(() => { - t.device.queue.writeBuffer(buffer, 0, data, 0, data.length); - }, mismatched); - }); + t.expectValidationError(() => { + t.device.queue.writeBuffer(buffer, 0, data, 0, data.length); + }, mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeTexture.spec.js index 6882a32b0cd..31727c7945e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/queue/writeTexture.spec.js @@ -1,111 +1,110 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Tests writeTexture validation.`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Tests writeTexture validation.`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUConst } from '../../../constants.js'; import { kResourceStates } from '../../../gpu_test.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('texture_state') - .desc( - ` +g.test('texture_state'). +desc( + ` Test that the texture used for GPUQueue.writeTexture() must be valid. Tests calling writeTexture with {valid, invalid, destroyed} texture. ` - ) - .params(u => u.combine('textureState', kResourceStates)) - .fn(t => { - const { textureState } = t.params; - const texture = t.createTextureWithState(textureState); - const data = new Uint8Array(16); - const size = [1, 1]; +). +params((u) => u.combine('textureState', kResourceStates)). +fn((t) => { + const { textureState } = t.params; + const texture = t.createTextureWithState(textureState); + const data = new Uint8Array(16); + const size = [1, 1]; - const isValid = textureState === 'valid'; + const isValid = textureState === 'valid'; - t.expectValidationError(() => { - t.device.queue.writeTexture({ texture }, data, {}, size); - }, !isValid); - }); + t.expectValidationError(() => { + t.device.queue.writeTexture({ texture }, data, {}, size); + }, !isValid); +}); -g.test('usages') - .desc( - ` +g.test('usages'). +desc( + ` Tests calling writeTexture with the texture missed COPY_DST usage. - texture {with, without} COPY DST usage ` - ) - .paramsSubcasesOnly([ - { usage: GPUConst.TextureUsage.COPY_DST }, // control case - { usage: GPUConst.TextureUsage.STORAGE_BINDING }, - { usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.COPY_SRC }, - { usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.COPY_DST }, - ]) - .fn(t => { - const { usage } = t.params; - const texture = t.device.createTexture({ - size: { width: 16, height: 16 }, - usage, - format: 'rgba8unorm', - }); - const data = new Uint8Array(16); - const size = [1, 1]; - - const isValid = usage & GPUConst.TextureUsage.COPY_DST ? true : false; - t.expectValidationError(() => { - t.device.queue.writeTexture({ texture }, data, {}, size); - }, !isValid); +). +paramsSubcasesOnly([ +{ usage: GPUConst.TextureUsage.COPY_DST }, // control case +{ usage: GPUConst.TextureUsage.STORAGE_BINDING }, +{ usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.COPY_SRC }, +{ usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.COPY_DST }] +). +fn((t) => { + const { usage } = t.params; + const texture = t.device.createTexture({ + size: { width: 16, height: 16 }, + usage, + format: 'rgba8unorm' }); + const data = new Uint8Array(16); + const size = [1, 1]; -g.test('sample_count') - .desc( - ` + const isValid = usage & GPUConst.TextureUsage.COPY_DST ? true : false; + t.expectValidationError(() => { + t.device.queue.writeTexture({ texture }, data, {}, size); + }, !isValid); +}); + +g.test('sample_count'). +desc( + ` Test that the texture sample count. Check that a validation error is generated if sample count is not 1. ` - ) - .params(u => u.combine('sampleCount', [1, 4])) - .fn(t => { - const { sampleCount } = t.params; - const texture = t.device.createTexture({ - size: { width: 16, height: 16 }, - sampleCount, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const data = new Uint8Array(16); - const size = [1, 1]; - - const isValid = sampleCount === 1; - - t.expectValidationError(() => { - t.device.queue.writeTexture({ texture }, data, {}, size); - }, !isValid); +). +params((u) => u.combine('sampleCount', [1, 4])). +fn((t) => { + const { sampleCount } = t.params; + const texture = t.device.createTexture({ + size: { width: 16, height: 16 }, + sampleCount, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('texture,device_mismatch') - .desc('Tests writeTexture cannot be called with a texture created from another device.') - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + const data = new Uint8Array(16); + const size = [1, 1]; - const texture = sourceDevice.createTexture({ - size: { width: 16, height: 16 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - t.trackForCleanup(texture); + const isValid = sampleCount === 1; - const data = new Uint8Array(16); - const size = [1, 1]; + t.expectValidationError(() => { + t.device.queue.writeTexture({ texture }, data, {}, size); + }, !isValid); +}); - t.expectValidationError(() => { - t.device.queue.writeTexture({ texture }, data, {}, size); - }, mismatched); +g.test('texture,device_mismatch'). +desc('Tests writeTexture cannot be called with a texture created from another device.'). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const texture = sourceDevice.createTexture({ + size: { width: 16, height: 16 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); + t.trackForCleanup(texture); + + const data = new Uint8Array(16); + const size = [1, 1]; + + t.expectValidationError(() => { + t.device.queue.writeTexture({ texture }, data, {}, size); + }, mismatched); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/attachment_compatibility.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/attachment_compatibility.spec.js index 76cb0b23611..6579343b49c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/attachment_compatibility.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/attachment_compatibility.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation for attachment compatibility between render passes, bundles, and pipelines -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { range } from '../../../../common/util/util.js'; import { kMaxColorAttachmentsToTest, kTextureSampleCounts } from '../../../capability_info.js'; import { @@ -12,105 +11,111 @@ import { kUnsizedDepthStencilFormats, kTextureFormatInfo, filterFormatsByFeature, - getFeaturesForFormats, -} from '../../../format_info.js'; + getFeaturesForFormats } from +'../../../format_info.js'; import { ValidationTest } from '../validation_test.js'; -const kColorAttachmentCounts = range(kMaxColorAttachmentsToTest, i => i + 1); -const kColorAttachments = kColorAttachmentCounts - .map(count => { - // generate cases with 0..1 null attachments at different location - // e.g. count == 2 - // [ - // [1, 1], - // [0, 1], - // [1, 0], - // ] - // 0 (false) means null attachment, 1 (true) means non-null attachment, at the slot +const kColorAttachmentCounts = range(kMaxColorAttachmentsToTest, (i) => i + 1); +const kColorAttachments = kColorAttachmentCounts. +map((count) => { + // generate cases with 0..1 null attachments at different location + // e.g. count == 2 + // [ + // [1, 1], + // [0, 1], + // [1, 0], + // ] + // 0 (false) means null attachment, 1 (true) means non-null attachment, at the slot - // Special cases: we need at least a color attachment, when we don't have depth stencil attachment - if (count === 1) { - return [[1]]; - } - if (count === 2) { - return [ - [1, 1], - [0, 1], - [1, 0], - ]; - } + // Special cases: we need at least a color attachment, when we don't have depth stencil attachment + if (count === 1) { + return [[1]]; + } + if (count === 2) { + return [ + [1, 1], + [0, 1], + [1, 0]]; - // [1, 1, ..., 1]: all color attachment are used - let result = [new Array(count).fill(true)]; + } - // [1, 0, 1, ..., 1]: generate cases with one null attachment at different locations + // [1, 1, ..., 1]: all color attachment are used + let result = [new Array(count).fill(true)]; + + // [1, 0, 1, ..., 1]: generate cases with one null attachment at different locations + result = result.concat( + range(count, (i) => { + const r = new Array(count).fill(true); + r[i] = false; + return r; + }) + ); + + // [1, 0, 1, ..., 0, 1]: generate cases with two null attachments at different locations + // To reduce test run time, limit the attachment count to <= 4 + if (count <= 4) { result = result.concat( - range(count, i => { - const r = new Array(count).fill(true); - r[i] = false; - return r; - }) + range(count - 1, (i) => { + const cases = []; + for (let j = i + 1; j < count; j++) { + const r = new Array(count).fill(true); + r[i] = false; + r[j] = false; + cases.push(r); + } + return cases; + }).flat() ); + } - // [1, 0, 1, ..., 0, 1]: generate cases with two null attachments at different locations - // To reduce test run time, limit the attachment count to <= 4 - if (count <= 4) { - result = result.concat( - range(count - 1, i => { - const cases = []; - for (let j = i + 1; j < count; j++) { - const r = new Array(count).fill(true); - r[i] = false; - r[j] = false; - cases.push(r); - } - return cases; - }).flat() - ); - } - - return result; - }) - .flat(); + return result; +}). +flat(); const kDepthStencilAttachmentFormats = [ - undefined, - ...kSizedDepthStencilFormats, - ...kUnsizedDepthStencilFormats, -]; +undefined, +...kSizedDepthStencilFormats, +...kUnsizedDepthStencilFormats]; + const kFeaturesForDepthStencilAttachmentFormats = getFeaturesForFormats([ - ...kSizedDepthStencilFormats, - ...kUnsizedDepthStencilFormats, -]); +...kSizedDepthStencilFormats, +...kUnsizedDepthStencilFormats] +); class F extends ValidationTest { createAttachmentTextureView(format, sampleCount) { - return this.device - .createTexture({ - // Size matching the "arbitrary" size used by ValidationTest helpers. - size: [16, 16, 1], - format, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount, - }) - .createView(); + return this.device. + createTexture({ + // Size matching the "arbitrary" size used by ValidationTest helpers. + size: [16, 16, 1], + format, + usage: GPUTextureUsage.RENDER_ATTACHMENT, + sampleCount + }). + createView(); } - createColorAttachment(format, sampleCount) { - return format === null - ? null - : { - view: this.createAttachmentTextureView(format, sampleCount), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }; - } - - createDepthAttachment(format, sampleCount) { - const attachment = { + createColorAttachment( + format, + sampleCount) + { + return format === null ? + null : + { view: this.createAttachmentTextureView(format, sampleCount), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }; + } + + createDepthAttachment( + format, + sampleCount) + { + const attachment = { + view: this.createAttachmentTextureView(format, sampleCount) }; if (kTextureFormatInfo[format].depth) { attachment.depthClearValue = 0; @@ -125,7 +130,12 @@ class F extends ValidationTest { return attachment; } - createRenderPipeline(targets, depthStencil, sampleCount, cullMode) { + createRenderPipeline( + targets, + depthStencil, + sampleCount, + cullMode) + { return this.device.createRenderPipeline({ layout: 'auto', vertex: { @@ -133,20 +143,20 @@ class F extends ValidationTest { code: ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 0.0); - }`, + }` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ - code: '@fragment fn main() {}', + code: '@fragment fn main() {}' }), entryPoint: 'main', - targets, + targets }, primitive: { topology: 'triangle-list', cullMode }, depthStencil, - multisample: { count: sampleCount }, + multisample: { count: sampleCount } }); } } @@ -154,509 +164,520 @@ class F extends ValidationTest { export const g = makeTestGroup(F); const kColorAttachmentFormats = kRegularTextureFormats.filter( - format => !!kTextureFormatInfo[format].colorRender + (format) => !!kTextureFormatInfo[format].colorRender ); -g.test('render_pass_and_bundle,color_format') - .desc('Test that color attachment formats in render passes and bundles must match.') - .paramsSubcasesOnly(u => - u // - .combine('passFormat', kColorAttachmentFormats) - .combine('bundleFormat', kColorAttachmentFormats) - ) - .fn(t => { - const { passFormat, bundleFormat } = t.params; +g.test('render_pass_and_bundle,color_format'). +desc('Test that color attachment formats in render passes and bundles must match.'). +paramsSubcasesOnly((u) => +u // +.combine('passFormat', kColorAttachmentFormats). +combine('bundleFormat', kColorAttachmentFormats) +). +fn((t) => { + const { passFormat, bundleFormat } = t.params; - t.skipIfTextureFormatNotSupported(passFormat, bundleFormat); + t.skipIfTextureFormatNotSupported(passFormat, bundleFormat); - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: [bundleFormat], - }); - const bundle = bundleEncoder.finish(); - - const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); - const pass = encoder.beginRenderPass({ - colorAttachments: [t.createColorAttachment(passFormat)], - }); - pass.executeBundles([bundle]); - pass.end(); - validateFinishAndSubmit(passFormat === bundleFormat, true); + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: [bundleFormat] }); + const bundle = bundleEncoder.finish(); -g.test('render_pass_and_bundle,color_count') - .desc( - ` + const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); + const pass = encoder.beginRenderPass({ + colorAttachments: [t.createColorAttachment(passFormat)] + }); + pass.executeBundles([bundle]); + pass.end(); + validateFinishAndSubmit(passFormat === bundleFormat, true); +}); + +g.test('render_pass_and_bundle,color_count'). +desc( + ` Test that the number of color attachments in render passes and bundles must match. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('passCount', kColorAttachmentCounts) - .combine('bundleCount', kColorAttachmentCounts) - ) - .fn(t => { - const { passCount, bundleCount } = t.params; - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: range(bundleCount, () => 'rgba8uint'), - }); - const bundle = bundleEncoder.finish(); +). +paramsSubcasesOnly((u) => +u // +.combine('passCount', kColorAttachmentCounts). +combine('bundleCount', kColorAttachmentCounts) +). +fn((t) => { + const { passCount, bundleCount } = t.params; - const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); - const pass = encoder.beginRenderPass({ - colorAttachments: range(passCount, () => t.createColorAttachment('rgba8uint')), - }); - pass.executeBundles([bundle]); - pass.end(); - validateFinishAndSubmit(passCount === bundleCount, true); + const { maxColorAttachments } = t.device.limits; + t.skipIf( + passCount > maxColorAttachments, + `passCount: ${passCount} > maxColorAttachments for device: ${maxColorAttachments}` + ); + t.skipIf( + bundleCount > maxColorAttachments, + `bundleCount: ${bundleCount} > maxColorAttachments for device: ${maxColorAttachments}` + ); + + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: range(bundleCount, () => 'rgba8uint') }); + const bundle = bundleEncoder.finish(); -g.test('render_pass_and_bundle,color_sparse') - .desc( - ` + const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); + const pass = encoder.beginRenderPass({ + colorAttachments: range(passCount, () => t.createColorAttachment('rgba8uint')) + }); + pass.executeBundles([bundle]); + pass.end(); + validateFinishAndSubmit(passCount === bundleCount, true); +}); + +g.test('render_pass_and_bundle,color_sparse'). +desc( + ` Test that each of color attachments in render passes and bundles must match. ` - ) - .params(u => - u // - // introduce attachmentCount to make it easier to split the test - .combine('attachmentCount', kColorAttachmentCounts) - .beginSubcases() - .combine('passAttachments', kColorAttachments) - .combine('bundleAttachments', kColorAttachments) - .filter( - p => - p.attachmentCount === p.passAttachments.length && - p.attachmentCount === p.bundleAttachments.length - ) - ) - .fn(t => { - const { passAttachments, bundleAttachments } = t.params; +). +params((u) => +u // +// introduce attachmentCount to make it easier to split the test +.combine('attachmentCount', kColorAttachmentCounts). +beginSubcases(). +combine('passAttachments', kColorAttachments). +combine('bundleAttachments', kColorAttachments). +filter( + (p) => + p.attachmentCount === p.passAttachments.length && + p.attachmentCount === p.bundleAttachments.length +) +). +fn((t) => { + const { passAttachments, bundleAttachments } = t.params; - const maxColorAttachments = t.device.limits.maxColorAttachments; - t.skipIf( - passAttachments.length > maxColorAttachments, - `num passAttachments: ${passAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` - ); + const { maxColorAttachments } = t.device.limits; + t.skipIf( + passAttachments.length > maxColorAttachments, + `num passAttachments: ${passAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` + ); + t.skipIf( + bundleAttachments.length > maxColorAttachments, + `num bundleAttachments: ${bundleAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` + ); - t.skipIf( - bundleAttachments.length > maxColorAttachments, - `num bundleAttachments: ${bundleAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` - ); - - const colorFormats = bundleAttachments.map(i => (i ? 'rgba8uint' : null)); - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats, - }); - const bundle = bundleEncoder.finish(); - - const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); - const colorAttachments = passAttachments.map(i => - t.createColorAttachment(i ? 'rgba8uint' : null) - ); - - const pass = encoder.beginRenderPass({ - colorAttachments, - }); - pass.executeBundles([bundle]); - pass.end(); - validateFinishAndSubmit( - passAttachments.every((v, i) => v === bundleAttachments[i]), - true - ); + const colorFormats = bundleAttachments.map((i) => i ? 'rgba8uint' : null); + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats }); + const bundle = bundleEncoder.finish(); -g.test('render_pass_and_bundle,depth_format') - .desc('Test that the depth attachment format in render passes and bundles must match.') - .params(u => - u // - .combine('passFeature', kFeaturesForDepthStencilAttachmentFormats) - .combine('bundleFeature', kFeaturesForDepthStencilAttachmentFormats) - .beginSubcases() - .expand('passFormat', ({ passFeature }) => - filterFormatsByFeature(passFeature, kDepthStencilAttachmentFormats) - ) - .expand('bundleFormat', ({ bundleFeature }) => - filterFormatsByFeature(bundleFeature, kDepthStencilAttachmentFormats) - ) - ) - .beforeAllSubcases(t => { - const { passFeature, bundleFeature } = t.params; - t.selectDeviceOrSkipTestCase([passFeature, bundleFeature]); - }) - .fn(t => { - const { passFormat, bundleFormat } = t.params; - - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - depthStencilFormat: bundleFormat, - }); - const bundle = bundleEncoder.finish(); - - const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); - const pass = encoder.beginRenderPass({ - colorAttachments: [t.createColorAttachment('rgba8unorm')], - depthStencilAttachment: - passFormat !== undefined ? t.createDepthAttachment(passFormat) : undefined, - }); - pass.executeBundles([bundle]); - pass.end(); - validateFinishAndSubmit(passFormat === bundleFormat, true); + const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); + const colorAttachments = passAttachments.map((i) => + t.createColorAttachment(i ? 'rgba8uint' : null) + ); + const pass = encoder.beginRenderPass({ + colorAttachments }); + pass.executeBundles([bundle]); + pass.end(); + validateFinishAndSubmit( + passAttachments.every((v, i) => v === bundleAttachments[i]), + true + ); +}); -g.test('render_pass_and_bundle,sample_count') - .desc('Test that the sample count in render passes and bundles must match.') - .paramsSubcasesOnly(u => - u // - .combine('renderSampleCount', kTextureSampleCounts) - .combine('bundleSampleCount', kTextureSampleCounts) - ) - .fn(t => { - const { renderSampleCount, bundleSampleCount } = t.params; - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - sampleCount: bundleSampleCount, - }); - const bundle = bundleEncoder.finish(); - const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); - const pass = encoder.beginRenderPass({ - colorAttachments: [t.createColorAttachment('rgba8unorm', renderSampleCount)], - }); - pass.executeBundles([bundle]); - pass.end(); - validateFinishAndSubmit(renderSampleCount === bundleSampleCount, true); +g.test('render_pass_and_bundle,depth_format'). +desc('Test that the depth attachment format in render passes and bundles must match.'). +params((u) => +u // +.combine('passFeature', kFeaturesForDepthStencilAttachmentFormats). +combine('bundleFeature', kFeaturesForDepthStencilAttachmentFormats). +beginSubcases(). +expand('passFormat', ({ passFeature }) => +filterFormatsByFeature(passFeature, kDepthStencilAttachmentFormats) +). +expand('bundleFormat', ({ bundleFeature }) => +filterFormatsByFeature(bundleFeature, kDepthStencilAttachmentFormats) +) +). +beforeAllSubcases((t) => { + const { passFeature, bundleFeature } = t.params; + t.selectDeviceOrSkipTestCase([passFeature, bundleFeature]); +}). +fn((t) => { + const { passFormat, bundleFormat } = t.params; + + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'], + depthStencilFormat: bundleFormat }); + const bundle = bundleEncoder.finish(); -g.test('render_pass_and_bundle,device_mismatch') - .desc('Test that render passes cannot be called with bundles created from another device.') - .paramsSubcasesOnly(u => u.combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { mismatched } = t.params; - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - - const format = 'r16float'; - const bundleEncoder = sourceDevice.createRenderBundleEncoder({ - colorFormats: [format], - }); - const bundle = bundleEncoder.finish(); - - const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); - const pass = encoder.beginRenderPass({ - colorAttachments: [t.createColorAttachment(format)], - }); - pass.executeBundles([bundle]); - pass.end(); - validateFinishAndSubmit(!mismatched, true); + const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); + const pass = encoder.beginRenderPass({ + colorAttachments: [t.createColorAttachment('rgba8unorm')], + depthStencilAttachment: + passFormat !== undefined ? t.createDepthAttachment(passFormat) : undefined }); + pass.executeBundles([bundle]); + pass.end(); + validateFinishAndSubmit(passFormat === bundleFormat, true); +}); -g.test('render_pass_or_bundle_and_pipeline,color_format') - .desc( - ` +g.test('render_pass_and_bundle,sample_count'). +desc('Test that the sample count in render passes and bundles must match.'). +paramsSubcasesOnly((u) => +u // +.combine('renderSampleCount', kTextureSampleCounts). +combine('bundleSampleCount', kTextureSampleCounts) +). +fn((t) => { + const { renderSampleCount, bundleSampleCount } = t.params; + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'], + sampleCount: bundleSampleCount + }); + const bundle = bundleEncoder.finish(); + const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); + const pass = encoder.beginRenderPass({ + colorAttachments: [t.createColorAttachment('rgba8unorm', renderSampleCount)] + }); + pass.executeBundles([bundle]); + pass.end(); + validateFinishAndSubmit(renderSampleCount === bundleSampleCount, true); +}); + +g.test('render_pass_and_bundle,device_mismatch'). +desc('Test that render passes cannot be called with bundles created from another device.'). +paramsSubcasesOnly((u) => u.combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { mismatched } = t.params; + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const format = 'r16float'; + const bundleEncoder = sourceDevice.createRenderBundleEncoder({ + colorFormats: [format] + }); + const bundle = bundleEncoder.finish(); + + const { encoder, validateFinishAndSubmit } = t.createEncoder('non-pass'); + const pass = encoder.beginRenderPass({ + colorAttachments: [t.createColorAttachment(format)] + }); + pass.executeBundles([bundle]); + pass.end(); + validateFinishAndSubmit(!mismatched, true); +}); + +g.test('render_pass_or_bundle_and_pipeline,color_format'). +desc( + ` Test that color attachment formats in render passes or bundles match the pipeline color format. ` - ) - .params(u => - u - .combine('encoderType', ['render pass', 'render bundle']) - .beginSubcases() - .combine('encoderFormat', kColorAttachmentFormats) - .combine('pipelineFormat', kColorAttachmentFormats) - ) - .fn(t => { - const { encoderType, encoderFormat, pipelineFormat } = t.params; +). +params((u) => +u. +combine('encoderType', ['render pass', 'render bundle']). +beginSubcases(). +combine('encoderFormat', kColorAttachmentFormats). +combine('pipelineFormat', kColorAttachmentFormats) +). +fn((t) => { + const { encoderType, encoderFormat, pipelineFormat } = t.params; - t.skipIfTextureFormatNotSupported(encoderFormat, pipelineFormat); + t.skipIfTextureFormatNotSupported(encoderFormat, pipelineFormat); - const pipeline = t.createRenderPipeline([{ format: pipelineFormat, writeMask: 0 }]); + const pipeline = t.createRenderPipeline([{ format: pipelineFormat, writeMask: 0 }]); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { - attachmentInfo: { colorFormats: [encoderFormat] }, - }); - encoder.setPipeline(pipeline); - validateFinishAndSubmit(encoderFormat === pipelineFormat, true); + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { + attachmentInfo: { colorFormats: [encoderFormat] } }); + encoder.setPipeline(pipeline); + validateFinishAndSubmit(encoderFormat === pipelineFormat, true); +}); -g.test('render_pass_or_bundle_and_pipeline,color_count') - .desc( - ` +g.test('render_pass_or_bundle_and_pipeline,color_count'). +desc( + ` Test that the number of color attachments in render passes or bundles match the pipeline color count. ` - ) - .params(u => - u - .combine('encoderType', ['render pass', 'render bundle']) - .beginSubcases() - .combine('encoderCount', kColorAttachmentCounts) - .combine('pipelineCount', kColorAttachmentCounts) - ) - .fn(t => { - const { encoderType, encoderCount, pipelineCount } = t.params; - const pipeline = t.createRenderPipeline( - range(pipelineCount, () => ({ format: 'rgba8uint', writeMask: 0 })) - ); +). +params((u) => +u. +combine('encoderType', ['render pass', 'render bundle']). +beginSubcases(). +combine('encoderCount', kColorAttachmentCounts). +combine('pipelineCount', kColorAttachmentCounts) +). +fn((t) => { + const { encoderType, encoderCount, pipelineCount } = t.params; - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { - attachmentInfo: { colorFormats: range(encoderCount, () => 'rgba8uint') }, - }); - encoder.setPipeline(pipeline); - validateFinishAndSubmit(encoderCount === pipelineCount, true); + const { maxColorAttachments } = t.device.limits; + t.skipIf( + pipelineCount > maxColorAttachments, + `pipelineCount: ${pipelineCount} > maxColorAttachments for device: ${maxColorAttachments}` + ); + t.skipIf( + encoderCount > maxColorAttachments, + `encoderCount: ${encoderCount} > maxColorAttachments for device: ${maxColorAttachments}` + ); + + const pipeline = t.createRenderPipeline( + range(pipelineCount, () => ({ format: 'rgba8uint', writeMask: 0 })) + ); + + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { + attachmentInfo: { colorFormats: range(encoderCount, () => 'rgba8uint') } }); + encoder.setPipeline(pipeline); + validateFinishAndSubmit(encoderCount === pipelineCount, true); +}); -g.test('render_pass_or_bundle_and_pipeline,color_sparse') - .desc( - ` +g.test('render_pass_or_bundle_and_pipeline,color_sparse'). +desc( + ` Test that each of color attachments in render passes or bundles match that of the pipeline. ` - ) - .params(u => - u - .combine('encoderType', ['render pass', 'render bundle']) - // introduce attachmentCount to make it easier to split the test - .combine('attachmentCount', kColorAttachmentCounts) - .beginSubcases() - .combine('encoderAttachments', kColorAttachments) - .combine('pipelineAttachments', kColorAttachments) - .filter( - p => - p.attachmentCount === p.encoderAttachments.length && - p.attachmentCount === p.pipelineAttachments.length - ) - ) - .fn(t => { - const { encoderType, encoderAttachments, pipelineAttachments } = t.params; - const maxColorAttachments = t.device.limits.maxColorAttachments; - t.skipIf( - encoderAttachments.length > maxColorAttachments, - `num encoderAttachments: ${encoderAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` - ); +). +params((u) => +u. +combine('encoderType', ['render pass', 'render bundle']) +// introduce attachmentCount to make it easier to split the test +.combine('attachmentCount', kColorAttachmentCounts). +beginSubcases(). +combine('encoderAttachments', kColorAttachments). +combine('pipelineAttachments', kColorAttachments). +filter( + (p) => + p.attachmentCount === p.encoderAttachments.length && + p.attachmentCount === p.pipelineAttachments.length +) +). +fn((t) => { + const { encoderType, encoderAttachments, pipelineAttachments } = t.params; + const { maxColorAttachments } = t.device.limits; + t.skipIf( + encoderAttachments.length > maxColorAttachments, + `num encoderAttachments: ${encoderAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` + ); + t.skipIf( + pipelineAttachments.length > maxColorAttachments, + `num pipelineAttachments: ${pipelineAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` + ); - t.skipIf( - pipelineAttachments.length > maxColorAttachments, - `num pipelineAttachments: ${pipelineAttachments.length} > maxColorAttachments for device: ${maxColorAttachments}` - ); + const colorTargets = pipelineAttachments.map((i) => + i ? { format: 'rgba8uint', writeMask: 0 } : null + ); + const pipeline = t.createRenderPipeline(colorTargets); - const colorTargets = pipelineAttachments.map(i => - i ? { format: 'rgba8uint', writeMask: 0 } : null - ); - - const pipeline = t.createRenderPipeline(colorTargets); - - const colorFormats = encoderAttachments.map(i => (i ? 'rgba8uint' : null)); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { - attachmentInfo: { colorFormats }, - }); - encoder.setPipeline(pipeline); - validateFinishAndSubmit( - encoderAttachments.every((v, i) => v === pipelineAttachments[i]), - true - ); + const colorFormats = encoderAttachments.map((i) => i ? 'rgba8uint' : null); + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { + attachmentInfo: { colorFormats } }); + encoder.setPipeline(pipeline); + validateFinishAndSubmit( + encoderAttachments.every((v, i) => v === pipelineAttachments[i]), + true + ); +}); -g.test('render_pass_or_bundle_and_pipeline,depth_format') - .desc( - ` +g.test('render_pass_or_bundle_and_pipeline,depth_format'). +desc( + ` Test that the depth attachment format in render passes or bundles match the pipeline depth format. ` - ) - .params(u => - u - .combine('encoderType', ['render pass', 'render bundle']) - .combine('encoderFormatFeature', kFeaturesForDepthStencilAttachmentFormats) - .combine('pipelineFormatFeature', kFeaturesForDepthStencilAttachmentFormats) - .beginSubcases() - .expand('encoderFormat', ({ encoderFormatFeature }) => - filterFormatsByFeature(encoderFormatFeature, kDepthStencilAttachmentFormats) - ) - .expand('pipelineFormat', ({ pipelineFormatFeature }) => - filterFormatsByFeature(pipelineFormatFeature, kDepthStencilAttachmentFormats) - ) - ) - .beforeAllSubcases(t => { - const { encoderFormatFeature, pipelineFormatFeature } = t.params; - t.selectDeviceOrSkipTestCase([encoderFormatFeature, pipelineFormatFeature]); - }) - .fn(t => { - const { encoderType, encoderFormat, pipelineFormat } = t.params; +). +params((u) => +u. +combine('encoderType', ['render pass', 'render bundle']). +combine('encoderFormatFeature', kFeaturesForDepthStencilAttachmentFormats). +combine('pipelineFormatFeature', kFeaturesForDepthStencilAttachmentFormats). +beginSubcases(). +expand('encoderFormat', ({ encoderFormatFeature }) => +filterFormatsByFeature(encoderFormatFeature, kDepthStencilAttachmentFormats) +). +expand('pipelineFormat', ({ pipelineFormatFeature }) => +filterFormatsByFeature(pipelineFormatFeature, kDepthStencilAttachmentFormats) +) +). +beforeAllSubcases((t) => { + const { encoderFormatFeature, pipelineFormatFeature } = t.params; + t.selectDeviceOrSkipTestCase([encoderFormatFeature, pipelineFormatFeature]); +}). +fn((t) => { + const { encoderType, encoderFormat, pipelineFormat } = t.params; - const pipeline = t.createRenderPipeline( - [{ format: 'rgba8unorm', writeMask: 0 }], - pipelineFormat !== undefined - ? { format: pipelineFormat, depthCompare: 'always', depthWriteEnabled: false } - : undefined - ); + const pipeline = t.createRenderPipeline( + [{ format: 'rgba8unorm', writeMask: 0 }], + pipelineFormat !== undefined ? + { format: pipelineFormat, depthCompare: 'always', depthWriteEnabled: false } : + undefined + ); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { - attachmentInfo: { colorFormats: ['rgba8unorm'], depthStencilFormat: encoderFormat }, - }); - encoder.setPipeline(pipeline); - validateFinishAndSubmit(encoderFormat === pipelineFormat, true); + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { + attachmentInfo: { colorFormats: ['rgba8unorm'], depthStencilFormat: encoderFormat } }); + encoder.setPipeline(pipeline); + validateFinishAndSubmit(encoderFormat === pipelineFormat, true); +}); const kStencilFaceStates = [ - { failOp: 'keep', depthFailOp: 'keep', passOp: 'keep' }, - { failOp: 'zero', depthFailOp: 'zero', passOp: 'zero' }, -]; +{ failOp: 'keep', depthFailOp: 'keep', passOp: 'keep' }, +{ failOp: 'zero', depthFailOp: 'zero', passOp: 'zero' }]; -g.test('render_pass_or_bundle_and_pipeline,depth_stencil_read_only_write_state') - .desc( - ` + +g.test('render_pass_or_bundle_and_pipeline,depth_stencil_read_only_write_state'). +desc( + ` Test that the depth stencil read only state in render passes or bundles is compatible with the depth stencil write state of the pipeline. ` - ) - .params(u => - u - .combine('encoderType', ['render pass', 'render bundle']) - .combine('format', kDepthStencilAttachmentFormats) - .beginSubcases() - // pass/bundle state - .combine('depthReadOnly', [false, true]) - .combine('stencilReadOnly', [false, true]) - .combine('stencilFront', kStencilFaceStates) - .combine('stencilBack', kStencilFaceStates) - // pipeline state - .combine('depthWriteEnabled', [false, true]) - .combine('stencilWriteMask', [0, 0xffffffff]) - .combine('cullMode', ['none', 'front', 'back']) - .filter(p => { - if (p.format) { - const depthStencilInfo = kTextureFormatInfo[p.format]; - // For combined depth/stencil formats the depth and stencil read only state must match - // in order to create a valid render bundle or render pass. - if (depthStencilInfo.depth && depthStencilInfo.stencil) { - if (p.depthReadOnly !== p.stencilReadOnly) { - return false; - } - } - // If the format has no depth aspect, the depthReadOnly, depthWriteEnabled of the pipeline must not be true - // in order to create a valid render pipeline. - if (!depthStencilInfo.depth && p.depthWriteEnabled) { - return false; - } - // If the format has no stencil aspect, the stencil state operation must be 'keep' - // in order to create a valid render pipeline. - if ( - !depthStencilInfo.stencil && - (p.stencilFront.failOp !== 'keep' || p.stencilBack.failOp !== 'keep') - ) { - return false; - } - } - // No depthStencil attachment - return true; - }) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { - encoderType, +). +params((u) => +u. +combine('encoderType', ['render pass', 'render bundle']). +combine('format', kDepthStencilAttachmentFormats). +beginSubcases() +// pass/bundle state +.combine('depthReadOnly', [false, true]). +combine('stencilReadOnly', [false, true]). +combine('stencilFront', kStencilFaceStates). +combine('stencilBack', kStencilFaceStates) +// pipeline state +.combine('depthWriteEnabled', [false, true]). +combine('stencilWriteMask', [0, 0xffffffff]). +combine('cullMode', ['none', 'front', 'back']). +filter((p) => { + if (p.format) { + const depthStencilInfo = kTextureFormatInfo[p.format]; + // If the format has no depth aspect, the depthReadOnly, depthWriteEnabled of the pipeline must not be true + // in order to create a valid render pipeline. + if (!depthStencilInfo.depth && p.depthWriteEnabled) { + return false; + } + // If the format has no stencil aspect, the stencil state operation must be 'keep' + // in order to create a valid render pipeline. + if ( + !depthStencilInfo.stencil && ( + p.stencilFront.failOp !== 'keep' || p.stencilBack.failOp !== 'keep')) + { + return false; + } + } + // No depthStencil attachment + return true; +}) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { + encoderType, + format, + depthReadOnly, + stencilReadOnly, + depthWriteEnabled, + stencilWriteMask, + cullMode, + stencilFront, + stencilBack + } = t.params; + + const pipeline = t.createRenderPipeline( + [{ format: 'rgba8unorm', writeMask: 0 }], + format === undefined ? + undefined : + { format, - depthReadOnly, - stencilReadOnly, depthWriteEnabled, + depthCompare: 'always', stencilWriteMask, - cullMode, stencilFront, - stencilBack, - } = t.params; + stencilBack + }, + 1, + cullMode + ); - const pipeline = t.createRenderPipeline( - [{ format: 'rgba8unorm', writeMask: 0 }], - format === undefined - ? undefined - : { - format, - depthWriteEnabled, - depthCompare: 'always', - stencilWriteMask, - stencilFront, - stencilBack, - }, - 1, - cullMode - ); + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { + attachmentInfo: { + colorFormats: ['rgba8unorm'], + depthStencilFormat: format, + depthReadOnly, + stencilReadOnly + } + }); + encoder.setPipeline(pipeline); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { - attachmentInfo: { - colorFormats: ['rgba8unorm'], - depthStencilFormat: format, - depthReadOnly, - stencilReadOnly, - }, - }); - encoder.setPipeline(pipeline); - - let writesDepth = false; - let writesStencil = false; - if (format) { - writesDepth = depthWriteEnabled; - if (stencilWriteMask !== 0) { - if ( - cullMode !== 'front' && - (stencilFront.passOp !== 'keep' || - stencilFront.depthFailOp !== 'keep' || - stencilFront.failOp !== 'keep') - ) { - writesStencil = true; - } - if ( - cullMode !== 'back' && - (stencilBack.passOp !== 'keep' || - stencilBack.depthFailOp !== 'keep' || - stencilBack.failOp !== 'keep') - ) { - writesStencil = true; - } + let writesDepth = false; + let writesStencil = false; + if (format) { + writesDepth = depthWriteEnabled; + if (stencilWriteMask !== 0) { + if ( + cullMode !== 'front' && ( + stencilFront.passOp !== 'keep' || + stencilFront.depthFailOp !== 'keep' || + stencilFront.failOp !== 'keep')) + { + writesStencil = true; + } + if ( + cullMode !== 'back' && ( + stencilBack.passOp !== 'keep' || + stencilBack.depthFailOp !== 'keep' || + stencilBack.failOp !== 'keep')) + { + writesStencil = true; } } + } - let isValid = true; - if (writesDepth) { - isValid &&= !depthReadOnly; - } - if (writesStencil) { - isValid &&= !stencilReadOnly; - } + let isValid = true; + if (writesDepth) { + isValid &&= !depthReadOnly; + } + if (writesStencil) { + isValid &&= !stencilReadOnly; + } - validateFinishAndSubmit(isValid, true); - }); + validateFinishAndSubmit(isValid, true); +}); -g.test('render_pass_or_bundle_and_pipeline,sample_count') - .desc( - ` +g.test('render_pass_or_bundle_and_pipeline,sample_count'). +desc( + ` Test that the sample count in render passes or bundles match the pipeline sample count for both color texture and depthstencil texture. ` - ) - .params(u => - u - .combine('encoderType', ['render pass', 'render bundle']) - .combine('attachmentType', ['color', 'depthstencil']) - .beginSubcases() - .combine('encoderSampleCount', kTextureSampleCounts) - .combine('pipelineSampleCount', kTextureSampleCounts) - ) - .fn(t => { - const { encoderType, attachmentType, encoderSampleCount, pipelineSampleCount } = t.params; +). +params((u) => +u. +combine('encoderType', ['render pass', 'render bundle']). +combine('attachmentType', ['color', 'depthstencil']). +beginSubcases(). +combine('encoderSampleCount', kTextureSampleCounts). +combine('pipelineSampleCount', kTextureSampleCounts) +). +fn((t) => { + const { encoderType, attachmentType, encoderSampleCount, pipelineSampleCount } = t.params; - const colorFormats = attachmentType === 'color' ? ['rgba8unorm'] : []; - const depthStencilFormat = - attachmentType === 'depthstencil' ? 'depth24plus-stencil8' : undefined; + const colorFormats = attachmentType === 'color' ? ['rgba8unorm'] : []; + const depthStencilFormat = + attachmentType === 'depthstencil' ? 'depth24plus-stencil8' : undefined; - const pipeline = t.createRenderPipeline( - colorFormats.map(format => ({ format, writeMask: 0 })), - depthStencilFormat - ? { format: depthStencilFormat, depthWriteEnabled: false, depthCompare: 'always' } - : undefined, - pipelineSampleCount - ); + const pipeline = t.createRenderPipeline( + colorFormats.map((format) => ({ format, writeMask: 0 })), + depthStencilFormat ? + { format: depthStencilFormat, depthWriteEnabled: false, depthCompare: 'always' } : + undefined, + pipelineSampleCount + ); - const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { - attachmentInfo: { colorFormats, depthStencilFormat, sampleCount: encoderSampleCount }, - }); - encoder.setPipeline(pipeline); - validateFinishAndSubmit(encoderSampleCount === pipelineSampleCount, true); + const { encoder, validateFinishAndSubmit } = t.createEncoder(encoderType, { + attachmentInfo: { colorFormats, depthStencilFormat, sampleCount: encoderSampleCount } }); + encoder.setPipeline(pipeline); + validateFinishAndSubmit(encoderSampleCount === pipelineSampleCount, true); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/render_pass_descriptor.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/render_pass_descriptor.spec.js index 123b97cf2b1..e8ccb794a1e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/render_pass_descriptor.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/render_pass_descriptor.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` render pass descriptor validation tests. TODO: review for completeness -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { range } from '../../../../common/util/util.js'; import { kMaxColorAttachmentsToTest, kQueryTypes } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; @@ -13,12 +12,22 @@ import { computeBytesPerSampleFromFormats, kDepthStencilFormats, kRenderableColorTextureFormats, - kTextureFormatInfo, -} from '../../../format_info.js'; + kTextureFormatInfo } from +'../../../format_info.js'; import { ValidationTest } from '../validation_test.js'; class F extends ValidationTest { - createTexture(options = {}) { + createTexture( + options = + + + + + + + + {}) + { const { format = 'rgba8unorm', width = 16, @@ -26,7 +35,7 @@ class F extends ValidationTest { arrayLayerCount = 1, mipLevelCount = 1, sampleCount = 1, - usage = GPUTextureUsage.RENDER_ATTACHMENT, + usage = GPUTextureUsage.RENDER_ATTACHMENT } = options; return this.device.createTexture({ @@ -34,22 +43,28 @@ class F extends ValidationTest { format, mipLevelCount, sampleCount, - usage, + usage }); } - getColorAttachment(texture, textureViewDescriptor) { + getColorAttachment( + texture, + textureViewDescriptor) + { const view = texture.createView(textureViewDescriptor); return { view, clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, loadOp: 'clear', - storeOp: 'store', + storeOp: 'store' }; } - getDepthStencilAttachment(texture, textureViewDescriptor) { + getDepthStencilAttachment( + texture, + textureViewDescriptor) + { const view = texture.createView(textureViewDescriptor); return { @@ -59,7 +74,7 @@ class F extends ValidationTest { depthStoreOp: 'store', stencilClearValue: 0, stencilLoadOp: 'clear', - stencilStoreOp: 'store', + stencilStoreOp: 'store' }; } @@ -76,739 +91,749 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('attachments,one_color_attachment') - .desc(`Test that a render pass works with only one color attachment.`) - .fn(t => { - const colorTexture = t.createTexture({ format: 'rgba8unorm' }); - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture)], - }; +g.test('attachments,one_color_attachment'). +desc(`Test that a render pass works with only one color attachment.`). +fn((t) => { + const colorTexture = t.createTexture({ format: 'rgba8unorm' }); + const descriptor = { + colorAttachments: [t.getColorAttachment(colorTexture)] + }; - t.tryRenderPass(true, descriptor); - }); + t.tryRenderPass(true, descriptor); +}); -g.test('attachments,one_depth_stencil_attachment') - .desc(`Test that a render pass works with only one depthStencil attachment.`) - .fn(t => { - const depthStencilTexture = t.createTexture({ format: 'depth24plus-stencil8' }); - const descriptor = { - colorAttachments: [], - depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture), - }; +g.test('attachments,one_depth_stencil_attachment'). +desc(`Test that a render pass works with only one depthStencil attachment.`). +fn((t) => { + const depthStencilTexture = t.createTexture({ format: 'depth24plus-stencil8' }); + const descriptor = { + colorAttachments: [], + depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture) + }; - t.tryRenderPass(true, descriptor); - }); + t.tryRenderPass(true, descriptor); +}); -g.test('color_attachments,empty') - .desc( - ` +g.test('color_attachments,empty'). +desc( + ` Test that when colorAttachments has all values be 'undefined' or the sequence is empty, the depthStencilAttachment must not be 'undefined'. ` - ) - .paramsSubcasesOnly(u => - u - .combine('unclampedColorAttachments', [ - [], - [undefined], - [undefined, undefined], - new Array(8).fill(undefined), - [{ format: 'rgba8unorm' }], - ]) - .combine('hasDepthStencilAttachment', [false, true]) - ) - .fn(t => { - const { unclampedColorAttachments, hasDepthStencilAttachment } = t.params; - const colorAttachments = unclampedColorAttachments.slice( - 0, - t.device.limits.maxColorAttachments - ); +). +paramsSubcasesOnly((u) => +u. +combine('unclampedColorAttachments', [ +[], +[undefined], +[undefined, undefined], +new Array(8).fill(undefined), +[{ format: 'rgba8unorm' }]] +). +combine('hasDepthStencilAttachment', [false, true]) +). +fn((t) => { + const { unclampedColorAttachments, hasDepthStencilAttachment } = t.params; + const colorAttachments = unclampedColorAttachments.slice( + 0, + t.device.limits.maxColorAttachments + ); - let isEmptyColorTargets = true; - for (let i = 0; i < colorAttachments.length; i++) { - if (colorAttachments[i] !== undefined) { - isEmptyColorTargets = false; - const colorTexture = t.createTexture(); - colorAttachments[i] = t.getColorAttachment(colorTexture); - } + let isEmptyColorTargets = true; + for (let i = 0; i < colorAttachments.length; i++) { + if (colorAttachments[i] !== undefined) { + isEmptyColorTargets = false; + const colorTexture = t.createTexture(); + colorAttachments[i] = t.getColorAttachment(colorTexture); } + } - const _success = !isEmptyColorTargets || hasDepthStencilAttachment; - t.tryRenderPass(_success, { - colorAttachments, - depthStencilAttachment: hasDepthStencilAttachment - ? t.getDepthStencilAttachment(t.createTexture({ format: 'depth24plus-stencil8' })) - : undefined, - }); + const _success = !isEmptyColorTargets || hasDepthStencilAttachment; + t.tryRenderPass(_success, { + colorAttachments, + depthStencilAttachment: hasDepthStencilAttachment ? + t.getDepthStencilAttachment(t.createTexture({ format: 'depth24plus-stencil8' })) : + undefined }); +}); -g.test('color_attachments,limits,maxColorAttachments') - .desc( - ` +g.test('color_attachments,limits,maxColorAttachments'). +desc( + ` Test that the out of bound of color attachment indexes are handled. - a validation error is generated when color attachments exceed the maximum limit(8). ` - ) - .paramsSimple([ - { colorAttachmentsCountVariant: { mult: 1, add: 0 }, _success: true }, // Control case - { colorAttachmentsCountVariant: { mult: 1, add: 1 }, _success: false }, // Out of bounds - ]) - .fn(t => { - const { colorAttachmentsCountVariant, _success } = t.params; - const colorAttachmentsCount = t.makeLimitVariant( - 'maxColorAttachments', - colorAttachmentsCountVariant - ); +). +paramsSimple([ +{ colorAttachmentsCountVariant: { mult: 1, add: 0 }, _success: true }, // Control case +{ colorAttachmentsCountVariant: { mult: 1, add: 1 }, _success: false } // Out of bounds +]). +fn((t) => { + const { colorAttachmentsCountVariant, _success } = t.params; + const colorAttachmentsCount = t.makeLimitVariant( + 'maxColorAttachments', + colorAttachmentsCountVariant + ); - const colorAttachments = []; - for (let i = 0; i < colorAttachmentsCount; i++) { - const colorTexture = t.createTexture({ format: 'r8unorm' }); - colorAttachments.push(t.getColorAttachment(colorTexture)); - } + const colorAttachments = []; + for (let i = 0; i < colorAttachmentsCount; i++) { + const colorTexture = t.createTexture({ format: 'r8unorm' }); + colorAttachments.push(t.getColorAttachment(colorTexture)); + } - t.tryRenderPass(_success, { colorAttachments }); - }); + t.tryRenderPass(_success, { colorAttachments }); +}); -g.test('color_attachments,limits,maxColorAttachmentBytesPerSample,aligned') - .desc( - ` +g.test('color_attachments,limits,maxColorAttachmentBytesPerSample,aligned'). +desc( + ` Test that the total bytes per sample of the formats of the color attachments must be no greater than maxColorAttachmentBytesPerSample when the components are aligned (same format). ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .beginSubcases() - .combine( - 'attachmentCount', - range(kMaxColorAttachmentsToTest, i => i + 1) - ) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(t => { - const { format, attachmentCount } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +beginSubcases(). +combine( + 'attachmentCount', + range(kMaxColorAttachmentsToTest, (i) => i + 1) +) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn((t) => { + const { format, attachmentCount } = t.params; + const info = kTextureFormatInfo[format]; - t.skipIf( - attachmentCount > t.device.limits.maxColorAttachments, - `attachmentCount: ${attachmentCount} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` - ); + t.skipIf( + attachmentCount > t.device.limits.maxColorAttachments, + `attachmentCount: ${attachmentCount} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` + ); - const colorAttachments = []; - for (let i = 0; i < attachmentCount; i++) { - const colorTexture = t.createTexture({ format }); - colorAttachments.push(t.getColorAttachment(colorTexture)); - } - const shouldError = - info.colorRender === undefined || - computeBytesPerSampleFromFormats(range(attachmentCount, () => format)) > - t.device.limits.maxColorAttachmentBytesPerSample; + const colorAttachments = []; + for (let i = 0; i < attachmentCount; i++) { + const colorTexture = t.createTexture({ format }); + colorAttachments.push(t.getColorAttachment(colorTexture)); + } + const shouldError = + info.colorRender === undefined || + computeBytesPerSampleFromFormats(range(attachmentCount, () => format)) > + t.device.limits.maxColorAttachmentBytesPerSample; - t.tryRenderPass(!shouldError, { colorAttachments }); - }); + t.tryRenderPass(!shouldError, { colorAttachments }); +}); -g.test('color_attachments,limits,maxColorAttachmentBytesPerSample,unaligned') - .desc( - ` +g.test('color_attachments,limits,maxColorAttachmentBytesPerSample,unaligned'). +desc( + ` Test that the total bytes per sample of the formats of the color attachments must be no greater than maxColorAttachmentBytesPerSample when the components are (potentially) unaligned. ` - ) - .params(u => - u.combineWithParams([ - // Alignment causes the first 1 byte R8Unorm to become 4 bytes. So even though - // 1+4+8+16+1 < 32, the 4 byte alignment requirement of R32Float makes the first R8Unorm - // become 4 and 4+4+8+16+1 > 32. Re-ordering this so the R8Unorm's are at the end, however - // is allowed: 4+8+16+1+1 < 32. - { - formats: ['r8unorm', 'r32float', 'rgba8unorm', 'rgba32float', 'r8unorm'], - }, - { - formats: ['r32float', 'rgba8unorm', 'rgba32float', 'r8unorm', 'r8unorm'], - }, - ]) - ) - .fn(t => { - const { formats } = t.params; +). +params((u) => +u.combineWithParams([ +// Alignment causes the first 1 byte R8Unorm to become 4 bytes. So even though +// 1+4+8+16+1 < 32, the 4 byte alignment requirement of R32Float makes the first R8Unorm +// become 4 and 4+4+8+16+1 > 32. Re-ordering this so the R8Unorm's are at the end, however +// is allowed: 4+8+16+1+1 < 32. +{ + formats: [ + 'r8unorm', + 'r32float', + 'rgba8unorm', + 'rgba32float', + 'r8unorm'] - t.skipIf( - formats.length > t.device.limits.maxColorAttachments, - `numColorAttachments: ${formats.length} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` - ); +}, +{ + formats: [ + 'r32float', + 'rgba8unorm', + 'rgba32float', + 'r8unorm', + 'r8unorm'] - const colorAttachments = []; - for (const format of formats) { - const colorTexture = t.createTexture({ format }); - colorAttachments.push(t.getColorAttachment(colorTexture)); - } +}] +) +). +fn((t) => { + const { formats } = t.params; - const success = - computeBytesPerSampleFromFormats(formats) <= t.device.limits.maxColorAttachmentBytesPerSample; + t.skipIf( + formats.length > t.device.limits.maxColorAttachments, + `numColorAttachments: ${formats.length} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` + ); - t.tryRenderPass(success, { colorAttachments }); - }); + const colorAttachments = []; + for (const format of formats) { + const colorTexture = t.createTexture({ format }); + colorAttachments.push(t.getColorAttachment(colorTexture)); + } -g.test('attachments,same_size') - .desc( - ` + const success = + computeBytesPerSampleFromFormats(formats) <= t.device.limits.maxColorAttachmentBytesPerSample; + + t.tryRenderPass(success, { colorAttachments }); +}); + +g.test('attachments,same_size'). +desc( + ` Test that attachments have the same size. Otherwise, a validation error should be generated. - Succeed if all attachments have the same size. - Fail if one of the color attachments has a different size. - Fail if the depth stencil attachment has a different size. ` - ) - .fn(t => { - const colorTexture1x1A = t.createTexture({ width: 1, height: 1, format: 'rgba8unorm' }); - const colorTexture1x1B = t.createTexture({ width: 1, height: 1, format: 'rgba8unorm' }); - const colorTexture2x2 = t.createTexture({ width: 2, height: 2, format: 'rgba8unorm' }); - const depthStencilTexture1x1 = t.createTexture({ - width: 1, - height: 1, - format: 'depth24plus-stencil8', - }); - const depthStencilTexture2x2 = t.createTexture({ - width: 2, - height: 2, - format: 'depth24plus-stencil8', - }); - - { - // Control case: all the same size (1x1) - const descriptor = { - colorAttachments: [ - t.getColorAttachment(colorTexture1x1A), - t.getColorAttachment(colorTexture1x1B), - ], - - depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture1x1), - }; - - t.tryRenderPass(true, descriptor); - } - { - // One of the color attachments has a different size - const descriptor = { - colorAttachments: [ - t.getColorAttachment(colorTexture1x1A), - t.getColorAttachment(colorTexture2x2), - ], - }; - - t.tryRenderPass(false, descriptor); - } - { - // The depth stencil attachment has a different size - const descriptor = { - colorAttachments: [ - t.getColorAttachment(colorTexture1x1A), - t.getColorAttachment(colorTexture1x1B), - ], - - depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture2x2), - }; - - t.tryRenderPass(false, descriptor); - } +). +fn((t) => { + const colorTexture1x1A = t.createTexture({ width: 1, height: 1, format: 'rgba8unorm' }); + const colorTexture1x1B = t.createTexture({ width: 1, height: 1, format: 'rgba8unorm' }); + const colorTexture2x2 = t.createTexture({ width: 2, height: 2, format: 'rgba8unorm' }); + const depthStencilTexture1x1 = t.createTexture({ + width: 1, + height: 1, + format: 'depth24plus-stencil8' + }); + const depthStencilTexture2x2 = t.createTexture({ + width: 2, + height: 2, + format: 'depth24plus-stencil8' }); -g.test('attachments,color_depth_mismatch') - .desc(`Test that attachments match whether they are used for color or depth stencil.`) - .fn(t => { - const colorTexture = t.createTexture({ format: 'rgba8unorm' }); - const depthStencilTexture = t.createTexture({ format: 'depth24plus-stencil8' }); + { + // Control case: all the same size (1x1) + const descriptor = { + colorAttachments: [ + t.getColorAttachment(colorTexture1x1A), + t.getColorAttachment(colorTexture1x1B)], - { - // Using depth-stencil for color - const descriptor = { - colorAttachments: [t.getColorAttachment(depthStencilTexture)], - }; + depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture1x1) + }; - t.tryRenderPass(false, descriptor); - } - { - // Using color for depth-stencil - const descriptor = { - colorAttachments: [], - depthStencilAttachment: t.getDepthStencilAttachment(colorTexture), - }; + t.tryRenderPass(true, descriptor); + } + { + // One of the color attachments has a different size + const descriptor = { + colorAttachments: [ + t.getColorAttachment(colorTexture1x1A), + t.getColorAttachment(colorTexture2x2)] - t.tryRenderPass(false, descriptor); - } - }); + }; -g.test('attachments,layer_count') - .desc( - ` + t.tryRenderPass(false, descriptor); + } + { + // The depth stencil attachment has a different size + const descriptor = { + colorAttachments: [ + t.getColorAttachment(colorTexture1x1A), + t.getColorAttachment(colorTexture1x1B)], + + depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture2x2) + }; + + t.tryRenderPass(false, descriptor); + } +}); + +g.test('attachments,color_depth_mismatch'). +desc(`Test that attachments match whether they are used for color or depth stencil.`). +fn((t) => { + const colorTexture = t.createTexture({ format: 'rgba8unorm' }); + const depthStencilTexture = t.createTexture({ format: 'depth24plus-stencil8' }); + + { + // Using depth-stencil for color + const descriptor = { + colorAttachments: [t.getColorAttachment(depthStencilTexture)] + }; + + t.tryRenderPass(false, descriptor); + } + { + // Using color for depth-stencil + const descriptor = { + colorAttachments: [], + depthStencilAttachment: t.getDepthStencilAttachment(colorTexture) + }; + + t.tryRenderPass(false, descriptor); + } +}); + +g.test('attachments,layer_count'). +desc( + ` Test the layer counts for color or depth stencil. - Fail if using 2D array texture view with arrayLayerCount > 1. - Succeed if using 2D array texture view that covers the first layer of the texture. - Succeed if using 2D array texture view that covers the last layer for depth stencil. ` - ) - .paramsSimple([ - { arrayLayerCount: 5, baseArrayLayer: 0, _success: false }, - { arrayLayerCount: 1, baseArrayLayer: 0, _success: true }, - { arrayLayerCount: 1, baseArrayLayer: 9, _success: true }, - ]) - .fn(t => { - const { arrayLayerCount, baseArrayLayer, _success } = t.params; +). +paramsSimple([ +{ arrayLayerCount: 5, baseArrayLayer: 0, _success: false }, +{ arrayLayerCount: 1, baseArrayLayer: 0, _success: true }, +{ arrayLayerCount: 1, baseArrayLayer: 9, _success: true }] +). +fn((t) => { + const { arrayLayerCount, baseArrayLayer, _success } = t.params; - const ARRAY_LAYER_COUNT = 10; - const MIP_LEVEL_COUNT = 1; - const COLOR_FORMAT = 'rgba8unorm'; - const DEPTH_STENCIL_FORMAT = 'depth24plus-stencil8'; + const ARRAY_LAYER_COUNT = 10; + const MIP_LEVEL_COUNT = 1; + const COLOR_FORMAT = 'rgba8unorm'; + const DEPTH_STENCIL_FORMAT = 'depth24plus-stencil8'; - const colorTexture = t.createTexture({ - format: COLOR_FORMAT, - width: 32, - height: 32, - mipLevelCount: MIP_LEVEL_COUNT, - arrayLayerCount: ARRAY_LAYER_COUNT, - }); - const depthStencilTexture = t.createTexture({ - format: DEPTH_STENCIL_FORMAT, - width: 32, - height: 32, - mipLevelCount: MIP_LEVEL_COUNT, - arrayLayerCount: ARRAY_LAYER_COUNT, - }); - - const baseTextureViewDescriptor = { - dimension: '2d-array', - baseArrayLayer, - arrayLayerCount, - baseMipLevel: 0, - mipLevelCount: MIP_LEVEL_COUNT, - }; - - { - // Check 2D array texture view for color - const textureViewDescriptor = { - ...baseTextureViewDescriptor, - format: COLOR_FORMAT, - }; - - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture, textureViewDescriptor)], - }; - - t.tryRenderPass(_success, descriptor); - } - { - // Check 2D array texture view for depth stencil - const textureViewDescriptor = { - ...baseTextureViewDescriptor, - format: DEPTH_STENCIL_FORMAT, - }; - - const descriptor = { - colorAttachments: [], - depthStencilAttachment: t.getDepthStencilAttachment( - depthStencilTexture, - textureViewDescriptor - ), - }; - - t.tryRenderPass(_success, descriptor); - } + const colorTexture = t.createTexture({ + format: COLOR_FORMAT, + width: 32, + height: 32, + mipLevelCount: MIP_LEVEL_COUNT, + arrayLayerCount: ARRAY_LAYER_COUNT + }); + const depthStencilTexture = t.createTexture({ + format: DEPTH_STENCIL_FORMAT, + width: 32, + height: 32, + mipLevelCount: MIP_LEVEL_COUNT, + arrayLayerCount: ARRAY_LAYER_COUNT }); -g.test('attachments,mip_level_count') - .desc( - ` + const baseTextureViewDescriptor = { + dimension: '2d-array', + baseArrayLayer, + arrayLayerCount, + baseMipLevel: 0, + mipLevelCount: MIP_LEVEL_COUNT + }; + + { + // Check 2D array texture view for color + const textureViewDescriptor = { + ...baseTextureViewDescriptor, + format: COLOR_FORMAT + }; + + const descriptor = { + colorAttachments: [t.getColorAttachment(colorTexture, textureViewDescriptor)] + }; + + t.tryRenderPass(_success, descriptor); + } + { + // Check 2D array texture view for depth stencil + const textureViewDescriptor = { + ...baseTextureViewDescriptor, + format: DEPTH_STENCIL_FORMAT + }; + + const descriptor = { + colorAttachments: [], + depthStencilAttachment: t.getDepthStencilAttachment( + depthStencilTexture, + textureViewDescriptor + ) + }; + + t.tryRenderPass(_success, descriptor); + } +}); + +g.test('attachments,mip_level_count'). +desc( + ` Test the mip level count for color or depth stencil. - Fail if using 2D texture view with mipLevelCount > 1. - Succeed if using 2D texture view that covers the first level of the texture. - Succeed if using 2D texture view that covers the last level of the texture. ` - ) - .paramsSimple([ - { mipLevelCount: 2, baseMipLevel: 0, _success: false }, - { mipLevelCount: 1, baseMipLevel: 0, _success: true }, - { mipLevelCount: 1, baseMipLevel: 3, _success: true }, - ]) - .fn(t => { - const { mipLevelCount, baseMipLevel, _success } = t.params; +). +paramsSimple([ +{ mipLevelCount: 2, baseMipLevel: 0, _success: false }, +{ mipLevelCount: 1, baseMipLevel: 0, _success: true }, +{ mipLevelCount: 1, baseMipLevel: 3, _success: true }] +). +fn((t) => { + const { mipLevelCount, baseMipLevel, _success } = t.params; - const ARRAY_LAYER_COUNT = 1; - const MIP_LEVEL_COUNT = 4; - const COLOR_FORMAT = 'rgba8unorm'; - const DEPTH_STENCIL_FORMAT = 'depth24plus-stencil8'; + const ARRAY_LAYER_COUNT = 1; + const MIP_LEVEL_COUNT = 4; + const COLOR_FORMAT = 'rgba8unorm'; + const DEPTH_STENCIL_FORMAT = 'depth24plus-stencil8'; - const colorTexture = t.createTexture({ - format: COLOR_FORMAT, - width: 32, - height: 32, - mipLevelCount: MIP_LEVEL_COUNT, - arrayLayerCount: ARRAY_LAYER_COUNT, - }); - const depthStencilTexture = t.createTexture({ - format: DEPTH_STENCIL_FORMAT, - width: 32, - height: 32, - mipLevelCount: MIP_LEVEL_COUNT, - arrayLayerCount: ARRAY_LAYER_COUNT, - }); - - const baseTextureViewDescriptor = { - dimension: '2d', - baseArrayLayer: 0, - arrayLayerCount: ARRAY_LAYER_COUNT, - baseMipLevel, - mipLevelCount, - }; - - { - // Check 2D texture view for color - const textureViewDescriptor = { - ...baseTextureViewDescriptor, - format: COLOR_FORMAT, - }; - - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture, textureViewDescriptor)], - }; - - t.tryRenderPass(_success, descriptor); - } - { - // Check 2D texture view for depth stencil - const textureViewDescriptor = { - ...baseTextureViewDescriptor, - format: DEPTH_STENCIL_FORMAT, - }; - - const descriptor = { - colorAttachments: [], - depthStencilAttachment: t.getDepthStencilAttachment( - depthStencilTexture, - textureViewDescriptor - ), - }; - - t.tryRenderPass(_success, descriptor); - } + const colorTexture = t.createTexture({ + format: COLOR_FORMAT, + width: 32, + height: 32, + mipLevelCount: MIP_LEVEL_COUNT, + arrayLayerCount: ARRAY_LAYER_COUNT + }); + const depthStencilTexture = t.createTexture({ + format: DEPTH_STENCIL_FORMAT, + width: 32, + height: 32, + mipLevelCount: MIP_LEVEL_COUNT, + arrayLayerCount: ARRAY_LAYER_COUNT }); -g.test('color_attachments,non_multisampled') - .desc( - ` - Test that setting a resolve target is invalid if the color attachments is non multisampled. - ` - ) - .fn(t => { - const colorTexture = t.createTexture({ sampleCount: 1 }); - const resolveTargetTexture = t.createTexture({ sampleCount: 1 }); + const baseTextureViewDescriptor = { + dimension: '2d', + baseArrayLayer: 0, + arrayLayerCount: ARRAY_LAYER_COUNT, + baseMipLevel, + mipLevelCount + }; + + { + // Check 2D texture view for color + const textureViewDescriptor = { + ...baseTextureViewDescriptor, + format: COLOR_FORMAT + }; const descriptor = { - colorAttachments: [ - { - view: colorTexture.createView(), - resolveTarget: resolveTargetTexture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + colorAttachments: [t.getColorAttachment(colorTexture, textureViewDescriptor)] }; - t.tryRenderPass(false, descriptor); - }); + t.tryRenderPass(_success, descriptor); + } + { + // Check 2D texture view for depth stencil + const textureViewDescriptor = { + ...baseTextureViewDescriptor, + format: DEPTH_STENCIL_FORMAT + }; -g.test('color_attachments,sample_count') - .desc( - ` + const descriptor = { + colorAttachments: [], + depthStencilAttachment: t.getDepthStencilAttachment( + depthStencilTexture, + textureViewDescriptor + ) + }; + + t.tryRenderPass(_success, descriptor); + } +}); + +g.test('color_attachments,non_multisampled'). +desc( + ` + Test that setting a resolve target is invalid if the color attachments is non multisampled. + ` +). +fn((t) => { + const colorTexture = t.createTexture({ sampleCount: 1 }); + const resolveTargetTexture = t.createTexture({ sampleCount: 1 }); + + const descriptor = { + colorAttachments: [ + { + view: colorTexture.createView(), + resolveTarget: resolveTargetTexture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + + }; + + t.tryRenderPass(false, descriptor); +}); + +g.test('color_attachments,sample_count'). +desc( + ` Test the usages of multisampled textures for color attachments. - Succeed if using a multisampled color attachment without setting a resolve target. - Fail if using multiple color attachments with different sample counts. ` - ) - .fn(t => { - const colorTexture = t.createTexture({ sampleCount: 1 }); - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - - { - // It is allowed to use a multisampled color attachment without setting resolve target - const descriptor = { - colorAttachments: [t.getColorAttachment(multisampledColorTexture)], - }; - t.tryRenderPass(true, descriptor); - } - { - // It is not allowed to use multiple color attachments with different sample counts - const descriptor = { - colorAttachments: [ - t.getColorAttachment(colorTexture), - t.getColorAttachment(multisampledColorTexture), - ], - }; - - t.tryRenderPass(false, descriptor); - } - }); - -g.test('resolveTarget,sample_count') - .desc( - ` - Test that using multisampled resolve target is invalid for color attachments. - ` - ) - .fn(t => { - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const multisampledResolveTargetTexture = t.createTexture({ sampleCount: 4 }); - - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = multisampledResolveTargetTexture.createView(); +). +fn((t) => { + const colorTexture = t.createTexture({ sampleCount: 1 }); + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + { + // It is allowed to use a multisampled color attachment without setting resolve target const descriptor = { - colorAttachments: [colorAttachment], + colorAttachments: [t.getColorAttachment(multisampledColorTexture)] + }; + t.tryRenderPass(true, descriptor); + } + { + // It is not allowed to use multiple color attachments with different sample counts + const descriptor = { + colorAttachments: [ + t.getColorAttachment(colorTexture), + t.getColorAttachment(multisampledColorTexture)] + }; t.tryRenderPass(false, descriptor); - }); + } +}); -g.test('resolveTarget,array_layer_count') - .desc( - ` +g.test('resolveTarget,sample_count'). +desc( + ` + Test that using multisampled resolve target is invalid for color attachments. + ` +). +fn((t) => { + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const multisampledResolveTargetTexture = t.createTexture({ sampleCount: 4 }); + + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = multisampledResolveTargetTexture.createView(); + + const descriptor = { + colorAttachments: [colorAttachment] + }; + + t.tryRenderPass(false, descriptor); +}); + +g.test('resolveTarget,array_layer_count'). +desc( + ` Test that using a resolve target with array layer count is greater than 1 is invalid for color attachments. ` - ) - .fn(t => { - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ arrayLayerCount: 2 }); +). +fn((t) => { + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ arrayLayerCount: 2 }); - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTexture.createView({ dimension: '2d-array' }); + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTargetTexture.createView({ dimension: '2d-array' }); - const descriptor = { - colorAttachments: [colorAttachment], - }; + const descriptor = { + colorAttachments: [colorAttachment] + }; - t.tryRenderPass(false, descriptor); - }); + t.tryRenderPass(false, descriptor); +}); -g.test('resolveTarget,mipmap_level_count') - .desc( - ` +g.test('resolveTarget,mipmap_level_count'). +desc( + ` Test that using a resolve target with that mipmap level count is greater than 1 is invalid for color attachments. ` - ) - .fn(t => { - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ mipLevelCount: 2 }); +). +fn((t) => { + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ mipLevelCount: 2 }); - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTexture.createView(); + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTargetTexture.createView(); - const descriptor = { - colorAttachments: [colorAttachment], - }; + const descriptor = { + colorAttachments: [colorAttachment] + }; - t.tryRenderPass(false, descriptor); - }); + t.tryRenderPass(false, descriptor); +}); -g.test('resolveTarget,usage') - .desc( - ` +g.test('resolveTarget,usage'). +desc( + ` Test that using a resolve target whose usage is not RENDER_ATTACHMENT is invalid for color attachments. ` - ) - .paramsSimple([ - { usage: GPUConst.TextureUsage.COPY_SRC | GPUConst.TextureUsage.COPY_DST }, - { usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.TEXTURE_BINDING }, - { usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.STORAGE }, - { usage: GPUConst.TextureUsage.RENDER_ATTACHMENT | GPUConst.TextureUsage.TEXTURE_BINDING }, - ]) - .fn(t => { - const { usage } = t.params; +). +paramsSimple([ +{ usage: GPUConst.TextureUsage.COPY_SRC | GPUConst.TextureUsage.COPY_DST }, +{ usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.TEXTURE_BINDING }, +{ usage: GPUConst.TextureUsage.STORAGE_BINDING | GPUConst.TextureUsage.STORAGE }, +{ usage: GPUConst.TextureUsage.RENDER_ATTACHMENT | GPUConst.TextureUsage.TEXTURE_BINDING }] +). +fn((t) => { + const { usage } = t.params; - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ usage }); + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ usage }); - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTexture.createView(); + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTargetTexture.createView(); - const descriptor = { - colorAttachments: [colorAttachment], - }; + const descriptor = { + colorAttachments: [colorAttachment] + }; - const isValid = usage & GPUConst.TextureUsage.RENDER_ATTACHMENT ? true : false; - t.tryRenderPass(isValid, descriptor); - }); + const isValid = usage & GPUConst.TextureUsage.RENDER_ATTACHMENT ? true : false; + t.tryRenderPass(isValid, descriptor); +}); -g.test('resolveTarget,error_state') - .desc(`Test that a resolve target that has a error is invalid for color attachments.`) - .fn(t => { - const ARRAY_LAYER_COUNT = 1; +g.test('resolveTarget,error_state'). +desc(`Test that a resolve target that has a error is invalid for color attachments.`). +fn((t) => { + const ARRAY_LAYER_COUNT = 1; - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ arrayLayerCount: ARRAY_LAYER_COUNT }); + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ arrayLayerCount: ARRAY_LAYER_COUNT }); - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - t.expectValidationError(() => { - colorAttachment.resolveTarget = resolveTargetTexture.createView({ - dimension: '2d', - format: 'rgba8unorm', - baseArrayLayer: ARRAY_LAYER_COUNT + 1, - }); + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + t.expectValidationError(() => { + colorAttachment.resolveTarget = resolveTargetTexture.createView({ + dimension: '2d', + format: 'rgba8unorm', + baseArrayLayer: ARRAY_LAYER_COUNT + 1 }); - - const descriptor = { - colorAttachments: [colorAttachment], - }; - - t.tryRenderPass(false, descriptor); }); -g.test('resolveTarget,single_sample_count') - .desc( - ` + const descriptor = { + colorAttachments: [colorAttachment] + }; + + t.tryRenderPass(false, descriptor); +}); + +g.test('resolveTarget,single_sample_count'). +desc( + ` Test that a resolve target that has multi sample color attachment and a single resolve target is valid. ` - ) - .fn(t => { - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ sampleCount: 1 }); +). +fn((t) => { + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ sampleCount: 1 }); - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTexture.createView(); + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTargetTexture.createView(); - const descriptor = { - colorAttachments: [colorAttachment], - }; + const descriptor = { + colorAttachments: [colorAttachment] + }; - t.tryRenderPass(true, descriptor); + t.tryRenderPass(true, descriptor); +}); + +g.test('resolveTarget,different_format'). +desc(`Test that a resolve target that has a different format is invalid.`). +fn((t) => { + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ format: 'bgra8unorm' }); + + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTargetTexture.createView(); + + const descriptor = { + colorAttachments: [colorAttachment] + }; + + t.tryRenderPass(false, descriptor); +}); + +g.test('resolveTarget,different_size'). +desc( + ` + Test that a resolve target that has a different size with the color attachment is invalid. + ` +). +fn((t) => { + const size = 16; + const multisampledColorTexture = t.createTexture({ width: size, height: size, sampleCount: 4 }); + const resolveTargetTexture = t.createTexture({ + width: size * 2, + height: size * 2, + mipLevelCount: 2 }); -g.test('resolveTarget,different_format') - .desc(`Test that a resolve target that has a different format is invalid.`) - .fn(t => { - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ format: 'bgra8unorm' }); + { + const resolveTargetTextureView = resolveTargetTexture.createView({ + baseMipLevel: 0, + mipLevelCount: 1 + }); const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTexture.createView(); + colorAttachment.resolveTarget = resolveTargetTextureView; const descriptor = { - colorAttachments: [colorAttachment], + colorAttachments: [colorAttachment] }; t.tryRenderPass(false, descriptor); - }); + } + { + const resolveTargetTextureView = resolveTargetTexture.createView({ baseMipLevel: 1 }); -g.test('resolveTarget,different_size') - .desc( - ` - Test that a resolve target that has a different size with the color attachment is invalid. + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTargetTextureView; + + const descriptor = { + colorAttachments: [colorAttachment] + }; + + t.tryRenderPass(true, descriptor); + } +}); + +g.test('depth_stencil_attachment,sample_counts_mismatch'). +desc( ` - ) - .fn(t => { - const size = 16; - const multisampledColorTexture = t.createTexture({ width: size, height: size, sampleCount: 4 }); - const resolveTargetTexture = t.createTexture({ - width: size * 2, - height: size * 2, - mipLevelCount: 2, - }); - - { - const resolveTargetTextureView = resolveTargetTexture.createView({ - baseMipLevel: 0, - mipLevelCount: 1, - }); - - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTextureView; - - const descriptor = { - colorAttachments: [colorAttachment], - }; - - t.tryRenderPass(false, descriptor); - } - { - const resolveTargetTextureView = resolveTargetTexture.createView({ baseMipLevel: 1 }); - - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTargetTextureView; - - const descriptor = { - colorAttachments: [colorAttachment], - }; - - t.tryRenderPass(true, descriptor); - } - }); - -g.test('depth_stencil_attachment,sample_counts_mismatch') - .desc( - ` Test that the depth stencil attachment that has different number of samples with the color attachment is invalid. ` - ) - .fn(t => { - const multisampledDepthStencilTexture = t.createTexture({ - sampleCount: 4, - format: 'depth24plus-stencil8', - }); - - { - // It is not allowed to use a depth stencil attachment whose sample count is different from - // the one of the color attachment. - const depthStencilTexture = t.createTexture({ - sampleCount: 1, - format: 'depth24plus-stencil8', - }); - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const descriptor = { - colorAttachments: [t.getColorAttachment(multisampledColorTexture)], - depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture), - }; - - t.tryRenderPass(false, descriptor); - } - { - const colorTexture = t.createTexture({ sampleCount: 1 }); - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture)], - depthStencilAttachment: t.getDepthStencilAttachment(multisampledDepthStencilTexture), - }; - - t.tryRenderPass(false, descriptor); - } - { - // It is allowed to use a multisampled depth stencil attachment whose sample count is equal to - // the one of the color attachment. - const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); - const descriptor = { - colorAttachments: [t.getColorAttachment(multisampledColorTexture)], - depthStencilAttachment: t.getDepthStencilAttachment(multisampledDepthStencilTexture), - }; - - t.tryRenderPass(true, descriptor); - } - { - // It is allowed to use a multisampled depth stencil attachment with no color attachment. - const descriptor = { - colorAttachments: [], - depthStencilAttachment: t.getDepthStencilAttachment(multisampledDepthStencilTexture), - }; - - t.tryRenderPass(true, descriptor); - } +). +fn((t) => { + const multisampledDepthStencilTexture = t.createTexture({ + sampleCount: 4, + format: 'depth24plus-stencil8' }); -g.test('depth_stencil_attachment,loadOp_storeOp_match_depthReadOnly_stencilReadOnly') - .desc( - ` + { + // It is not allowed to use a depth stencil attachment whose sample count is different from + // the one of the color attachment. + const depthStencilTexture = t.createTexture({ + sampleCount: 1, + format: 'depth24plus-stencil8' + }); + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const descriptor = { + colorAttachments: [t.getColorAttachment(multisampledColorTexture)], + depthStencilAttachment: t.getDepthStencilAttachment(depthStencilTexture) + }; + + t.tryRenderPass(false, descriptor); + } + { + const colorTexture = t.createTexture({ sampleCount: 1 }); + const descriptor = { + colorAttachments: [t.getColorAttachment(colorTexture)], + depthStencilAttachment: t.getDepthStencilAttachment(multisampledDepthStencilTexture) + }; + + t.tryRenderPass(false, descriptor); + } + { + // It is allowed to use a multisampled depth stencil attachment whose sample count is equal to + // the one of the color attachment. + const multisampledColorTexture = t.createTexture({ sampleCount: 4 }); + const descriptor = { + colorAttachments: [t.getColorAttachment(multisampledColorTexture)], + depthStencilAttachment: t.getDepthStencilAttachment(multisampledDepthStencilTexture) + }; + + t.tryRenderPass(true, descriptor); + } + { + // It is allowed to use a multisampled depth stencil attachment with no color attachment. + const descriptor = { + colorAttachments: [], + depthStencilAttachment: t.getDepthStencilAttachment(multisampledDepthStencilTexture) + }; + + t.tryRenderPass(true, descriptor); + } +}); + +g.test('depth_stencil_attachment,loadOp_storeOp_match_depthReadOnly_stencilReadOnly'). +desc( + ` Test GPURenderPassDepthStencilAttachment Usage: - if the format has a depth aspect: - if depthReadOnly is true @@ -821,253 +846,250 @@ g.test('depth_stencil_attachment,loadOp_storeOp_match_depthReadOnly_stencilReadO - else: - stencilLoadOp and stencilStoreOp must be provided ` - ) - .params(u => - u - .combine('format', kDepthStencilFormats) - .beginSubcases() // Note: It's easier to debug if you comment this line out as you can then run an individual case. - .combine('depthReadOnly', [undefined, true, false]) - .combine('depthLoadOp', [undefined, 'clear', 'load']) - .combine('depthStoreOp', [undefined, 'discard', 'store']) - .combine('stencilReadOnly', [undefined, true, false]) - .combine('stencilLoadOp', [undefined, 'clear', 'load']) - .combine('stencilStoreOp', [undefined, 'discard', 'store']) - ) - .beforeAllSubcases(t => { - const info = kTextureFormatInfo[t.params.format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { +). +params((u) => +u. +combine('format', kDepthStencilFormats). +beginSubcases() // Note: It's easier to debug if you comment this line out as you can then run an individual case. +.combine('depthReadOnly', [undefined, true, false]). +combine('depthLoadOp', [undefined, 'clear', 'load']). +combine('depthStoreOp', [undefined, 'discard', 'store']). +combine('stencilReadOnly', [undefined, true, false]). +combine('stencilLoadOp', [undefined, 'clear', 'load']). +combine('stencilStoreOp', [undefined, 'discard', 'store']) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + format, + depthReadOnly, + depthLoadOp, + depthStoreOp, + stencilReadOnly, + stencilLoadOp, + stencilStoreOp + } = t.params; + + const depthAttachment = t.trackForCleanup( + t.device.createTexture({ format, - depthReadOnly, + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.RENDER_ATTACHMENT + }) + ); + const depthAttachmentView = depthAttachment.createView(); + + const encoder = t.device.createCommandEncoder(); + + // If depthLoadOp is "clear", depthClearValue must be provided and must be between 0.0 and 1.0, + // and it will be ignored if depthLoadOp is not "clear". + const depthClearValue = depthLoadOp === 'clear' ? 0 : undefined; + const renderPassDescriptor = { + colorAttachments: [], + depthStencilAttachment: { + view: depthAttachmentView, depthLoadOp, depthStoreOp, - stencilReadOnly, + depthReadOnly, stencilLoadOp, stencilStoreOp, - } = t.params; + stencilReadOnly, + depthClearValue + } + }; + const pass = encoder.beginRenderPass(renderPassDescriptor); + pass.end(); - const depthAttachment = t.trackForCleanup( - t.device.createTexture({ - format, - size: { width: 1, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }) - ); + const info = kTextureFormatInfo[format]; + const hasDepthSettings = !!depthLoadOp && !!depthStoreOp && !depthReadOnly; + const hasStencilSettings = !!stencilLoadOp && !!stencilStoreOp && !stencilReadOnly; + const hasDepth = info.depth; + const hasStencil = info.stencil; - const depthAttachmentView = depthAttachment.createView(); + const goodAspectSettingsPresent = + (hasDepthSettings ? hasDepth : true) && (hasStencilSettings ? hasStencil : true); - const encoder = t.device.createCommandEncoder(); + const hasBothDepthOps = !!depthLoadOp && !!depthStoreOp; + const hasBothStencilOps = !!stencilLoadOp && !!stencilStoreOp; + const hasNeitherDepthOps = !depthLoadOp && !depthStoreOp; + const hasNeitherStencilOps = !stencilLoadOp && !stencilStoreOp; - // If depthLoadOp is "clear", depthClearValue must be provided and must be between 0.0 and 1.0, - // and it will be ignored if depthLoadOp is not "clear". - const depthClearValue = depthLoadOp === 'clear' ? 0 : undefined; - const renderPassDescriptor = { - colorAttachments: [], - depthStencilAttachment: { - view: depthAttachmentView, - depthLoadOp, - depthStoreOp, - depthReadOnly, - stencilLoadOp, - stencilStoreOp, - stencilReadOnly, - depthClearValue, - }, - }; - const pass = encoder.beginRenderPass(renderPassDescriptor); - pass.end(); + const goodDepthCombo = hasDepth && !depthReadOnly ? hasBothDepthOps : hasNeitherDepthOps; + const goodStencilCombo = + hasStencil && !stencilReadOnly ? hasBothStencilOps : hasNeitherStencilOps; - const info = kTextureFormatInfo[format]; - const hasDepthSettings = !!depthLoadOp && !!depthStoreOp && !depthReadOnly; - const hasStencilSettings = !!stencilLoadOp && !!stencilStoreOp && !stencilReadOnly; - const hasDepth = info.depth; - const hasStencil = info.stencil; + const shouldError = !goodAspectSettingsPresent || !goodDepthCombo || !goodStencilCombo; - const goodAspectCombo = - (hasDepth && hasStencil ? !depthReadOnly === !stencilReadOnly : true) && - (hasDepthSettings ? hasDepth : true) && - (hasStencilSettings ? hasStencil : true); + t.expectValidationError(() => { + encoder.finish(); + }, shouldError); +}); - const hasBothDepthOps = !!depthLoadOp && !!depthStoreOp; - const hasBothStencilOps = !!stencilLoadOp && !!stencilStoreOp; - const hasNeitherDepthOps = !depthLoadOp && !depthStoreOp; - const hasNeitherStencilOps = !stencilLoadOp && !stencilStoreOp; - - const goodDepthCombo = hasDepth && !depthReadOnly ? hasBothDepthOps : hasNeitherDepthOps; - const goodStencilCombo = - hasStencil && !stencilReadOnly ? hasBothStencilOps : hasNeitherStencilOps; - - const shouldError = !goodAspectCombo || !goodDepthCombo || !goodStencilCombo; - - t.expectValidationError(() => { - encoder.finish(); - }, shouldError); - }); - -g.test('depth_stencil_attachment,depth_clear_value') - .desc( - ` +g.test('depth_stencil_attachment,depth_clear_value'). +desc( + ` Test that depthClearValue is invalid if the value is out of the range(0.0 and 1.0) only when depthLoadOp is 'clear'. ` - ) - .params(u => - u - .combine('depthLoadOp', ['load', 'clear', undefined]) - .combine('depthClearValue', [undefined, -1.0, 0.0, 0.5, 1.0, 1.5]) - ) - .fn(t => { - const { depthLoadOp, depthClearValue } = t.params; +). +params((u) => +u. +combine('depthLoadOp', ['load', 'clear', undefined]). +combine('depthClearValue', [undefined, -1.0, 0.0, 0.5, 1.0, 1.5]) +). +fn((t) => { + const { depthLoadOp, depthClearValue } = t.params; - const depthStencilTexture = t.createTexture({ - format: depthLoadOp === undefined ? 'stencil8' : 'depth24plus-stencil8', - }); - const depthStencilAttachment = t.getDepthStencilAttachment(depthStencilTexture); - depthStencilAttachment.depthClearValue = depthClearValue; - depthStencilAttachment.depthLoadOp = depthLoadOp; - if (depthLoadOp === undefined) { - depthStencilAttachment.depthStoreOp = undefined; - } - - const descriptor = { - colorAttachments: [t.getColorAttachment(t.createTexture())], - depthStencilAttachment, - }; - - // We can not check for out of range because NaN is not out of range. - // So (v < 0.0 || v > 1.0) would return false when depthClearValue is undefined (NaN) - const isDepthValueInRange = depthClearValue >= 0.0 && depthClearValue <= 1.0; - const isInvalid = depthLoadOp === 'clear' && !isDepthValueInRange; - - t.tryRenderPass(!isInvalid, descriptor); + const depthStencilTexture = t.createTexture({ + format: depthLoadOp === undefined ? 'stencil8' : 'depth24plus-stencil8' }); + const depthStencilAttachment = t.getDepthStencilAttachment(depthStencilTexture); + depthStencilAttachment.depthClearValue = depthClearValue; + depthStencilAttachment.depthLoadOp = depthLoadOp; + if (depthLoadOp === undefined) { + depthStencilAttachment.depthStoreOp = undefined; + } -g.test('resolveTarget,format_supports_resolve') - .desc( - ` + const descriptor = { + colorAttachments: [t.getColorAttachment(t.createTexture())], + depthStencilAttachment + }; + + // We can not check for out of range because NaN is not out of range. + // So (v < 0.0 || v > 1.0) would return false when depthClearValue is undefined (NaN) + const isDepthValueInRange = depthClearValue >= 0.0 && depthClearValue <= 1.0; + const isInvalid = depthLoadOp === 'clear' && !isDepthValueInRange; + + t.tryRenderPass(!isInvalid, descriptor); +}); + +g.test('resolveTarget,format_supports_resolve'). +desc( + ` For all formats that support 'multisample', test that they can be used as a resolveTarget if and only if they support 'resolve'. ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .filter(t => kTextureFormatInfo[t.format].multisample) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +filter((t) => kTextureFormatInfo[t.format].multisample) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; - const multisampledColorTexture = t.createTexture({ format, sampleCount: 4 }); - const resolveTarget = t.createTexture({ format }); + const multisampledColorTexture = t.createTexture({ format, sampleCount: 4 }); + const resolveTarget = t.createTexture({ format }); - const colorAttachment = t.getColorAttachment(multisampledColorTexture); - colorAttachment.resolveTarget = resolveTarget.createView(); + const colorAttachment = t.getColorAttachment(multisampledColorTexture); + colorAttachment.resolveTarget = resolveTarget.createView(); - t.tryRenderPass(!!info.colorRender?.resolve, { - colorAttachments: [colorAttachment], - }); + t.tryRenderPass(!!info.colorRender?.resolve, { + colorAttachments: [colorAttachment] }); +}); -g.test('timestampWrites,query_set_type') - .desc( - ` +g.test('timestampWrites,query_set_type'). +desc( + ` Test that all entries of the timestampWrites must have type 'timestamp'. If all query types are not 'timestamp', a validation error should be generated. ` - ) - .params(u => - u // - .combine('queryType', kQueryTypes) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase(['timestamp-query']); - }) - .fn(t => { - const { queryType } = t.params; +). +params((u) => +u // +.combine('queryType', kQueryTypes) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase(['timestamp-query']); +}). +fn((t) => { + const { queryType } = t.params; - const timestampWrites = { - querySet: t.device.createQuerySet({ type: queryType, count: 2 }), - beginningOfPassWriteIndex: 0, - endOfPassWriteIndex: 1, - }; + const timestampWrites = { + querySet: t.device.createQuerySet({ type: queryType, count: 2 }), + beginningOfPassWriteIndex: 0, + endOfPassWriteIndex: 1 + }; - const isValid = queryType === 'timestamp'; + const isValid = queryType === 'timestamp'; - const colorTexture = t.createTexture(); - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture)], - timestampWrites, - }; + const colorTexture = t.createTexture(); + const descriptor = { + colorAttachments: [t.getColorAttachment(colorTexture)], + timestampWrites + }; - t.tryRenderPass(isValid, descriptor); - }); + t.tryRenderPass(isValid, descriptor); +}); -g.test('timestampWrite,query_index') - .desc( - `Test that querySet.count should be greater than timestampWrite.queryIndex, and that the +g.test('timestampWrite,query_index'). +desc( + `Test that querySet.count should be greater than timestampWrite.queryIndex, and that the query indexes are unique.` - ) - .paramsSubcasesOnly(u => - u // - .combine('beginningOfPassWriteIndex', [undefined, 0, 1, 2, 3]) - .combine('endOfPassWriteIndex', [undefined, 0, 1, 2, 3]) - ) - .beforeAllSubcases(t => { +). +paramsSubcasesOnly((u) => +u // +.combine('beginningOfPassWriteIndex', [undefined, 0, 1, 2, 3]). +combine('endOfPassWriteIndex', [undefined, 0, 1, 2, 3]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase(['timestamp-query']); +}). +fn((t) => { + const { beginningOfPassWriteIndex, endOfPassWriteIndex } = t.params; + + const querySetCount = 2; + + const timestampWrites = { + querySet: t.device.createQuerySet({ type: 'timestamp', count: querySetCount }), + beginningOfPassWriteIndex, + endOfPassWriteIndex + }; + + const isValid = + beginningOfPassWriteIndex !== endOfPassWriteIndex && ( + beginningOfPassWriteIndex === undefined || beginningOfPassWriteIndex < querySetCount) && ( + endOfPassWriteIndex === undefined || endOfPassWriteIndex < querySetCount); + + const colorTexture = t.createTexture(); + const descriptor = { + colorAttachments: [t.getColorAttachment(colorTexture)], + timestampWrites + }; + + t.tryRenderPass(isValid, descriptor); +}); + +g.test('occlusionQuerySet,query_set_type'). +desc(`Test that occlusionQuerySet must have type 'occlusion'.`). +params((u) => u.combine('queryType', kQueryTypes)). +beforeAllSubcases((t) => { + if (t.params.queryType === 'timestamp') { t.selectDeviceOrSkipTestCase(['timestamp-query']); - }) - .fn(t => { - const { beginningOfPassWriteIndex, endOfPassWriteIndex } = t.params; + } +}). +fn((t) => { + const { queryType } = t.params; - const querySetCount = 2; - - const timestampWrites = { - querySet: t.device.createQuerySet({ type: 'timestamp', count: querySetCount }), - beginningOfPassWriteIndex, - endOfPassWriteIndex, - }; - - const isValid = - beginningOfPassWriteIndex !== endOfPassWriteIndex && - (beginningOfPassWriteIndex === undefined || beginningOfPassWriteIndex < querySetCount) && - (endOfPassWriteIndex === undefined || endOfPassWriteIndex < querySetCount); - - const colorTexture = t.createTexture(); - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture)], - timestampWrites, - }; - - t.tryRenderPass(isValid, descriptor); + const querySet = t.device.createQuerySet({ + type: queryType, + count: 1 }); -g.test('occlusionQuerySet,query_set_type') - .desc(`Test that occlusionQuerySet must have type 'occlusion'.`) - .params(u => u.combine('queryType', kQueryTypes)) - .beforeAllSubcases(t => { - if (t.params.queryType === 'timestamp') { - t.selectDeviceOrSkipTestCase(['timestamp-query']); - } - }) - .fn(t => { - const { queryType } = t.params; + const colorTexture = t.createTexture(); + const descriptor = { + colorAttachments: [t.getColorAttachment(colorTexture)], + occlusionQuerySet: querySet + }; - const querySet = t.device.createQuerySet({ - type: queryType, - count: 1, - }); - - const colorTexture = t.createTexture(); - const descriptor = { - colorAttachments: [t.getColorAttachment(colorTexture)], - occlusionQuerySet: querySet, - }; - - const isValid = queryType === 'occlusion'; - t.tryRenderPass(isValid, descriptor); - }); + const isValid = queryType === 'occlusion'; + t.tryRenderPass(isValid, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/resolve.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/resolve.spec.js index 7f160ec0a73..b9d60091f8f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/resolve.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pass/resolve.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for render pass resolve. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUConst } from '../../../constants.js'; import { ValidationTest } from '../validation_test.js'; @@ -11,9 +10,9 @@ const kNumColorAttachments = 4; export const g = makeTestGroup(ValidationTest); -g.test('resolve_attachment') - .desc( - ` +g.test('resolve_attachment'). +desc( + ` Test various validation behaviors when a resolveTarget is provided. - base case (valid). @@ -30,164 +29,164 @@ Test various validation behaviors when a resolveTarget is provided. - test with other color attachments having a different format - resolve source and target have different sizes. ` - ) - .paramsSimple([ - // control case should be valid - { _valid: true }, - // a single sampled resolve source should cause a validation error. - { colorAttachmentSamples: 1, _valid: false }, - // a multisampled resolve target should cause a validation error. - { resolveTargetSamples: 4, _valid: false }, - // resolveTargetUsage without RENDER_ATTACHMENT usage should cause a validation error. - { resolveTargetUsage: GPUConst.TextureUsage.COPY_SRC, _valid: false }, - // non-zero resolve target base mip level should be valid. +). +paramsSimple([ +// control case should be valid +{ _valid: true }, +// a single sampled resolve source should cause a validation error. +{ colorAttachmentSamples: 1, _valid: false }, +// a multisampled resolve target should cause a validation error. +{ resolveTargetSamples: 4, _valid: false }, +// resolveTargetUsage without RENDER_ATTACHMENT usage should cause a validation error. +{ resolveTargetUsage: GPUConst.TextureUsage.COPY_SRC, _valid: false }, +// non-zero resolve target base mip level should be valid. +{ + resolveTargetViewBaseMipLevel: 1, + resolveTargetHeight: 4, + resolveTargetWidth: 4, + _valid: true +}, +// a validation error should be created when resolveTarget is invalid. +{ resolveTargetInvalid: true, _valid: false }, +// a validation error should be created when mip count > 1 +{ resolveTargetViewMipCount: 2, _valid: false }, +{ + resolveTargetViewBaseMipLevel: 1, + resolveTargetViewMipCount: 2, + resolveTargetHeight: 4, + resolveTargetWidth: 4, + _valid: false +}, +// non-zero resolve target base array layer should be valid. +{ resolveTargetViewBaseArrayLayer: 1, _valid: true }, +// a validation error should be created when array layer count > 1 +{ resolveTargetViewArrayLayerCount: 2, _valid: false }, +{ resolveTargetViewBaseArrayLayer: 1, resolveTargetViewArrayLayerCount: 2, _valid: false }, +// other color attachments resolving with a different format should be valid. +{ otherAttachmentFormat: 'bgra8unorm', _valid: true }, +// mismatched colorAttachment and resolveTarget formats should cause a validation error. +{ colorAttachmentFormat: 'bgra8unorm', _valid: false }, +{ colorAttachmentFormat: 'rgba8unorm-srgb', _valid: false }, +{ resolveTargetFormat: 'bgra8unorm', _valid: false }, +{ resolveTargetFormat: 'rgba8unorm-srgb', _valid: false }, +// mismatched colorAttachment and resolveTarget sizes should cause a validation error. +{ colorAttachmentHeight: 4, _valid: false }, +{ colorAttachmentWidth: 4, _valid: false }, +{ resolveTargetHeight: 4, _valid: false }, +{ resolveTargetWidth: 4, _valid: false }] +). +fn((t) => { + const { + colorAttachmentFormat = 'rgba8unorm', + resolveTargetFormat = 'rgba8unorm', + otherAttachmentFormat = 'rgba8unorm', + colorAttachmentSamples = 4, + resolveTargetSamples = 1, + resolveTargetUsage = GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + resolveTargetInvalid = false, + resolveTargetViewMipCount = 1, + resolveTargetViewBaseMipLevel = 0, + resolveTargetViewArrayLayerCount = 1, + resolveTargetViewBaseArrayLayer = 0, + colorAttachmentHeight = 2, + colorAttachmentWidth = 2, + resolveTargetHeight = 2, + resolveTargetWidth = 2, + _valid + } = t.params; + + // Run the test in a nested loop such that the configured color attachment with resolve target + // is tested while occupying each individual colorAttachment slot. + for (let resolveSlot = 0; resolveSlot < kNumColorAttachments; resolveSlot++) { + const renderPassColorAttachmentDescriptors = []; + for ( + let colorAttachmentSlot = 0; + colorAttachmentSlot < kNumColorAttachments; + colorAttachmentSlot++) { - resolveTargetViewBaseMipLevel: 1, - resolveTargetHeight: 4, - resolveTargetWidth: 4, - _valid: true, - }, - // a validation error should be created when resolveTarget is invalid. - { resolveTargetInvalid: true, _valid: false }, - // a validation error should be created when mip count > 1 - { resolveTargetViewMipCount: 2, _valid: false }, - { - resolveTargetViewBaseMipLevel: 1, - resolveTargetViewMipCount: 2, - resolveTargetHeight: 4, - resolveTargetWidth: 4, - _valid: false, - }, - // non-zero resolve target base array layer should be valid. - { resolveTargetViewBaseArrayLayer: 1, _valid: true }, - // a validation error should be created when array layer count > 1 - { resolveTargetViewArrayLayerCount: 2, _valid: false }, - { resolveTargetViewBaseArrayLayer: 1, resolveTargetViewArrayLayerCount: 2, _valid: false }, - // other color attachments resolving with a different format should be valid. - { otherAttachmentFormat: 'bgra8unorm', _valid: true }, - // mismatched colorAttachment and resolveTarget formats should cause a validation error. - { colorAttachmentFormat: 'bgra8unorm', _valid: false }, - { colorAttachmentFormat: 'rgba8unorm-srgb', _valid: false }, - { resolveTargetFormat: 'bgra8unorm', _valid: false }, - { resolveTargetFormat: 'rgba8unorm-srgb', _valid: false }, - // mismatched colorAttachment and resolveTarget sizes should cause a validation error. - { colorAttachmentHeight: 4, _valid: false }, - { colorAttachmentWidth: 4, _valid: false }, - { resolveTargetHeight: 4, _valid: false }, - { resolveTargetWidth: 4, _valid: false }, - ]) - .fn(t => { - const { - colorAttachmentFormat = 'rgba8unorm', - resolveTargetFormat = 'rgba8unorm', - otherAttachmentFormat = 'rgba8unorm', - colorAttachmentSamples = 4, - resolveTargetSamples = 1, - resolveTargetUsage = GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - resolveTargetInvalid = false, - resolveTargetViewMipCount = 1, - resolveTargetViewBaseMipLevel = 0, - resolveTargetViewArrayLayerCount = 1, - resolveTargetViewBaseArrayLayer = 0, - colorAttachmentHeight = 2, - colorAttachmentWidth = 2, - resolveTargetHeight = 2, - resolveTargetWidth = 2, - _valid, - } = t.params; + // resolveSlot === colorAttachmentSlot denotes the color attachment slot that contains the + // color attachment with resolve target. + if (resolveSlot === colorAttachmentSlot) { + // Create the color attachment with resolve target with the configurable parameters. + const resolveSourceColorAttachment = t.device.createTexture({ + format: colorAttachmentFormat, + size: { + width: colorAttachmentWidth, + height: colorAttachmentHeight, + depthOrArrayLayers: 1 + }, + sampleCount: colorAttachmentSamples, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); - // Run the test in a nested loop such that the configured color attachment with resolve target - // is tested while occupying each individual colorAttachment slot. - for (let resolveSlot = 0; resolveSlot < kNumColorAttachments; resolveSlot++) { - const renderPassColorAttachmentDescriptors = []; - for ( - let colorAttachmentSlot = 0; - colorAttachmentSlot < kNumColorAttachments; - colorAttachmentSlot++ - ) { - // resolveSlot === colorAttachmentSlot denotes the color attachment slot that contains the - // color attachment with resolve target. - if (resolveSlot === colorAttachmentSlot) { - // Create the color attachment with resolve target with the configurable parameters. - const resolveSourceColorAttachment = t.device.createTexture({ - format: colorAttachmentFormat, - size: { - width: colorAttachmentWidth, - height: colorAttachmentHeight, - depthOrArrayLayers: 1, - }, - sampleCount: colorAttachmentSamples, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + const resolveTarget = t.device.createTexture({ + format: resolveTargetFormat, + size: { + width: resolveTargetWidth, + height: resolveTargetHeight, + depthOrArrayLayers: + resolveTargetViewBaseArrayLayer + resolveTargetViewArrayLayerCount + }, + sampleCount: resolveTargetSamples, + mipLevelCount: resolveTargetViewBaseMipLevel + resolveTargetViewMipCount, + usage: resolveTargetUsage + }); - const resolveTarget = t.device.createTexture({ - format: resolveTargetFormat, - size: { - width: resolveTargetWidth, - height: resolveTargetHeight, - depthOrArrayLayers: - resolveTargetViewBaseArrayLayer + resolveTargetViewArrayLayerCount, - }, - sampleCount: resolveTargetSamples, - mipLevelCount: resolveTargetViewBaseMipLevel + resolveTargetViewMipCount, - usage: resolveTargetUsage, - }); + renderPassColorAttachmentDescriptors.push({ + view: resolveSourceColorAttachment.createView(), + loadOp: 'load', + storeOp: 'discard', + resolveTarget: resolveTargetInvalid ? + t.getErrorTextureView() : + resolveTarget.createView({ + dimension: resolveTargetViewArrayLayerCount === 1 ? '2d' : '2d-array', + mipLevelCount: resolveTargetViewMipCount, + arrayLayerCount: resolveTargetViewArrayLayerCount, + baseMipLevel: resolveTargetViewBaseMipLevel, + baseArrayLayer: resolveTargetViewBaseArrayLayer + }) + }); + } else { + // Create a basic texture to fill other color attachment slots. This texture's dimensions + // and sample count must match the resolve source color attachment to be valid. + const colorAttachment = t.device.createTexture({ + format: otherAttachmentFormat, + size: { + width: colorAttachmentWidth, + height: colorAttachmentHeight, + depthOrArrayLayers: 1 + }, + sampleCount: colorAttachmentSamples, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); - renderPassColorAttachmentDescriptors.push({ - view: resolveSourceColorAttachment.createView(), - loadOp: 'load', - storeOp: 'discard', - resolveTarget: resolveTargetInvalid - ? t.getErrorTextureView() - : resolveTarget.createView({ - dimension: resolveTargetViewArrayLayerCount === 1 ? '2d' : '2d-array', - mipLevelCount: resolveTargetViewMipCount, - arrayLayerCount: resolveTargetViewArrayLayerCount, - baseMipLevel: resolveTargetViewBaseMipLevel, - baseArrayLayer: resolveTargetViewBaseArrayLayer, - }), - }); - } else { - // Create a basic texture to fill other color attachment slots. This texture's dimensions - // and sample count must match the resolve source color attachment to be valid. - const colorAttachment = t.device.createTexture({ - format: otherAttachmentFormat, - size: { - width: colorAttachmentWidth, - height: colorAttachmentHeight, - depthOrArrayLayers: 1, - }, - sampleCount: colorAttachmentSamples, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + const resolveTarget = t.device.createTexture({ + format: otherAttachmentFormat, + size: { + width: colorAttachmentWidth, + height: colorAttachmentHeight, + depthOrArrayLayers: 1 + }, + sampleCount: 1, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); - const resolveTarget = t.device.createTexture({ - format: otherAttachmentFormat, - size: { - width: colorAttachmentWidth, - height: colorAttachmentHeight, - depthOrArrayLayers: 1, - }, - sampleCount: 1, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - renderPassColorAttachmentDescriptors.push({ - view: colorAttachment.createView(), - loadOp: 'load', - storeOp: 'discard', - resolveTarget: resolveTarget.createView(), - }); - } + renderPassColorAttachmentDescriptors.push({ + view: colorAttachment.createView(), + loadOp: 'load', + storeOp: 'discard', + resolveTarget: resolveTarget.createView() + }); } - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: renderPassColorAttachmentDescriptors, - }); - pass.end(); - - t.expectValidationError(() => { - encoder.finish(); - }, !_valid); } - }); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: renderPassColorAttachmentDescriptors + }); + pass.end(); + + t.expectValidationError(() => { + encoder.finish(); + }, !_valid); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/common.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/common.js index 0cffe7a60df..2b4283b32c6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/common.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/common.js @@ -1,16 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kTextureFormatInfo } from '../../../format_info.js'; -import { - getFragmentShaderCodeWithOutput, - getPlainTypeInfo, - kDefaultVertexShaderCode, -} from '../../../util/shader.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kTextureFormatInfo } from '../../../format_info.js';import { getFragmentShaderCodeWithOutput, +getPlainTypeInfo, +kDefaultVertexShaderCode } from +'../../../util/shader.js'; import { ValidationTest } from '../validation_test.js'; const values = [0, 1, 0, 1]; export class CreateRenderPipelineValidationTest extends ValidationTest { - getDescriptor(options = {}) { + getDescriptor( + options = + + + + + + + + {}) + { const defaultTargets = [{ format: 'rgba8unorm' }]; const { primitive = {}, @@ -18,45 +26,43 @@ export class CreateRenderPipelineValidationTest extends ValidationTest { multisample = {}, depthStencil, fragmentShaderCode = getFragmentShaderCodeWithOutput([ - { - values, - plainType: getPlainTypeInfo( - kTextureFormatInfo[targets[0] ? targets[0].format : 'rgba8unorm'].sampleType - ), - - componentCount: 4, - }, - ]), - + { + values, + plainType: getPlainTypeInfo( + kTextureFormatInfo[targets[0] ? targets[0].format : 'rgba8unorm'].sampleType + ), + componentCount: 4 + }] + ), noFragment = false, - fragmentConstants = {}, + fragmentConstants = {} } = options; return { vertex: { module: this.device.createShaderModule({ - code: kDefaultVertexShaderCode, + code: kDefaultVertexShaderCode + }), + entryPoint: 'main' + }, + fragment: noFragment ? + undefined : + { + module: this.device.createShaderModule({ + code: fragmentShaderCode }), entryPoint: 'main', + targets, + constants: fragmentConstants }, - fragment: noFragment - ? undefined - : { - module: this.device.createShaderModule({ - code: fragmentShaderCode, - }), - entryPoint: 'main', - targets, - constants: fragmentConstants, - }, layout: this.getPipelineLayout(), primitive, multisample, - depthStencil, + depthStencil }; } getPipelineLayout() { return this.device.createPipelineLayout({ bindGroupLayouts: [] }); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/depth_stencil_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/depth_stencil_state.spec.js index d526b2f1801..d47041b4fc1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/depth_stencil_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/depth_stencil_state.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests validation of GPUDepthStencilState of createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { unreachable } from '../../../../common/util/util.js'; import { kCompareFunctions, kStencilOperations } from '../../../capability_info.js'; import { kTextureFormats, kTextureFormatInfo, kDepthStencilFormats } from '../../../format_info.js'; @@ -13,212 +12,293 @@ import { CreateRenderPipelineValidationTest } from './common.js'; export const g = makeTestGroup(CreateRenderPipelineValidationTest); -g.test('format') - .desc(`The texture format in depthStencilState must be a depth/stencil format.`) - .params(u => u.combine('isAsync', [false, true]).combine('format', kTextureFormats)) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format } = t.params; - const info = kTextureFormatInfo[format]; +g.test('format'). +desc(`The texture format in depthStencilState must be a depth/stencil format.`). +params((u) => u.combine('isAsync', [false, true]).combine('format', kTextureFormats)). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format } = t.params; + const info = kTextureFormatInfo[format]; - const descriptor = t.getDescriptor({ - depthStencil: { format, depthWriteEnabled: false, depthCompare: 'always' }, - }); - - t.doCreateRenderPipelineTest(isAsync, !!info.depth || !!info.stencil, descriptor); + const descriptor = t.getDescriptor({ + depthStencil: { format, depthWriteEnabled: false, depthCompare: 'always' } }); -g.test('depth_test') - .desc( - `Depth aspect must be contained in the format if depth test is enabled in depthStencilState.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', kDepthStencilFormats) - .combine('depthCompare', kCompareFunctions) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format, depthCompare } = t.params; - const info = kTextureFormatInfo[format]; + t.doCreateRenderPipelineTest(isAsync, !!info.depth || !!info.stencil, descriptor); +}); - const descriptor = t.getDescriptor({ - depthStencil: { format, depthCompare, depthWriteEnabled: false }, - }); - - const depthTestEnabled = depthCompare !== undefined && depthCompare !== 'always'; - t.doCreateRenderPipelineTest(isAsync, !depthTestEnabled || !!info.depth, descriptor); - }); - -g.test('depth_write') - .desc( - `Depth aspect must be contained in the format if depth write is enabled in depthStencilState.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', kDepthStencilFormats) - .combine('depthWriteEnabled', [false, true]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format, depthWriteEnabled } = t.params; - const info = kTextureFormatInfo[format]; - - const descriptor = t.getDescriptor({ - depthStencil: { format, depthWriteEnabled, depthCompare: 'always' }, - }); - t.doCreateRenderPipelineTest(isAsync, !depthWriteEnabled || !!info.depth, descriptor); - }); - -g.test('depth_write,frag_depth') - .desc(`Depth aspect must be contained in the format if frag_depth is written in fragment stage.`) - .params(u => - u.combine('isAsync', [false, true]).combine('format', [undefined, ...kDepthStencilFormats]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - if (format !== undefined) { - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - } - }) - .fn(t => { - const { isAsync, format } = t.params; - - const descriptor = t.getDescriptor({ - // Keep one color target so that the pipeline is still valid with no depth stencil target. - targets: [{ format: 'rgba8unorm' }], - depthStencil: format - ? { format, depthWriteEnabled: true, depthCompare: 'always' } - : undefined, - fragmentShaderCode: getFragmentShaderCodeWithOutput( - [{ values: [1, 1, 1, 1], plainType: 'f32', componentCount: 4 }], - { value: 0.5 } - ), - }); - - const hasDepth = format ? !!kTextureFormatInfo[format].depth : false; - t.doCreateRenderPipelineTest(isAsync, hasDepth, descriptor); - }); - -g.test('stencil_test') - .desc( - `Stencil aspect must be contained in the format if stencil test is enabled in depthStencilState.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', kDepthStencilFormats) - .combine('face', ['front', 'back']) - .combine('compare', [undefined, ...kCompareFunctions]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format, face, compare } = t.params; - const info = kTextureFormatInfo[format]; - - let descriptor; - if (face === 'front') { - descriptor = t.getDescriptor({ - depthStencil: { - format, - depthWriteEnabled: false, - depthCompare: 'always', - stencilFront: { compare }, - }, - }); - } else { - descriptor = t.getDescriptor({ - depthStencil: { - format, - depthWriteEnabled: false, - depthCompare: 'always', - stencilBack: { compare }, - }, - }); - } - - const stencilTestEnabled = compare !== undefined && compare !== 'always'; - t.doCreateRenderPipelineTest(isAsync, !stencilTestEnabled || !!info.stencil, descriptor); - }); - -g.test('stencil_write') - .desc( - `Stencil aspect must be contained in the format if stencil write is enabled in depthStencilState.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', kDepthStencilFormats) - .combine('faceAndOpType', [ - 'frontFailOp', - 'frontDepthFailOp', - 'frontPassOp', - 'backFailOp', - 'backDepthFailOp', - 'backPassOp', - ]) - .combine('op', [undefined, ...kStencilOperations]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format, faceAndOpType, op } = t.params; - const info = kTextureFormatInfo[format]; - - const common = { +g.test('depthCompare_optional'). +desc( + `The depthCompare in depthStencilState is optional for stencil-only formats but + required for formats with a depth if depthCompare is not used for anything.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kDepthStencilFormats). +beginSubcases(). +combine('depthCompare', ['always', undefined]). +combine('depthWriteEnabled', [false, true, undefined]). +combine('stencilFrontDepthFailOp', ['keep', 'zero']). +combine('stencilBackDepthFailOp', ['keep', 'zero']) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { + isAsync, + format, + depthCompare, + depthWriteEnabled, + stencilFrontDepthFailOp, + stencilBackDepthFailOp + } = t.params; + const info = kTextureFormatInfo[format]; + const descriptor = t.getDescriptor({ + depthStencil: { format, - depthWriteEnabled: false, - depthCompare: 'always', - }; - let depthStencil; - switch (faceAndOpType) { - case 'frontFailOp': - depthStencil = { ...common, stencilFront: { failOp: op } }; - break; - case 'frontDepthFailOp': - depthStencil = { ...common, stencilFront: { depthFailOp: op } }; - break; - case 'frontPassOp': - depthStencil = { ...common, stencilFront: { passOp: op } }; - break; - case 'backFailOp': - depthStencil = { ...common, stencilBack: { failOp: op } }; - break; - case 'backDepthFailOp': - depthStencil = { ...common, stencilBack: { depthFailOp: op } }; - break; - case 'backPassOp': - depthStencil = { ...common, stencilBack: { passOp: op } }; - break; - default: - unreachable(); + depthCompare, + depthWriteEnabled, + stencilFront: { depthFailOp: stencilFrontDepthFailOp }, + stencilBack: { depthFailOp: stencilBackDepthFailOp } } - - const descriptor = t.getDescriptor({ depthStencil }); - - const stencilWriteEnabled = op !== undefined && op !== 'keep'; - t.doCreateRenderPipelineTest(isAsync, !stencilWriteEnabled || !!info.stencil, descriptor); }); + + const depthFailOpsAreKeep = + stencilFrontDepthFailOp === 'keep' && stencilBackDepthFailOp === 'keep'; + const stencilStateIsDefault = depthFailOpsAreKeep; + let success = true; + if (depthWriteEnabled || depthCompare && depthCompare !== 'always') { + if (!info.depth) success = false; + } + if (!stencilStateIsDefault) { + if (!info.stencil) success = false; + } + if (info.depth) { + if (depthWriteEnabled === undefined) success = false; + if (depthWriteEnabled || !depthFailOpsAreKeep) { + if (depthCompare === undefined) success = false; + } + } + + t.doCreateRenderPipelineTest(isAsync, success, descriptor); +}); + +g.test('depthWriteEnabled_optional'). +desc( + `The depthWriteEnabled in depthStencilState is optional for stencil-only formats but required for formats with a depth.` +). +params((u) => u.combine('isAsync', [false, true]).combine('format', kDepthStencilFormats)). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format } = t.params; + const info = kTextureFormatInfo[format]; + const descriptor = t.getDescriptor({ + depthStencil: { format, depthCompare: 'always', depthWriteEnabled: undefined } + }); + + t.doCreateRenderPipelineTest(isAsync, !info.depth, descriptor); +}); + +g.test('depth_test'). +desc( + `Depth aspect must be contained in the format if depth test is enabled in depthStencilState.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kDepthStencilFormats). +combine('depthCompare', kCompareFunctions) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format, depthCompare } = t.params; + const info = kTextureFormatInfo[format]; + + const descriptor = t.getDescriptor({ + depthStencil: { format, depthCompare, depthWriteEnabled: false } + }); + + const depthTestEnabled = depthCompare !== undefined && depthCompare !== 'always'; + t.doCreateRenderPipelineTest(isAsync, !depthTestEnabled || !!info.depth, descriptor); +}); + +g.test('depth_write'). +desc( + `Depth aspect must be contained in the format if depth write is enabled in depthStencilState.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kDepthStencilFormats). +combine('depthWriteEnabled', [false, true]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format, depthWriteEnabled } = t.params; + const info = kTextureFormatInfo[format]; + + const descriptor = t.getDescriptor({ + depthStencil: { format, depthWriteEnabled, depthCompare: 'always' } + }); + t.doCreateRenderPipelineTest(isAsync, !depthWriteEnabled || !!info.depth, descriptor); +}); + +g.test('depth_write,frag_depth'). +desc(`Depth aspect must be contained in the format if frag_depth is written in fragment stage.`). +params((u) => +u.combine('isAsync', [false, true]).combine('format', [undefined, ...kDepthStencilFormats]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + if (format !== undefined) { + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); + } +}). +fn((t) => { + const { isAsync, format } = t.params; + + const descriptor = t.getDescriptor({ + // Keep one color target so that the pipeline is still valid with no depth stencil target. + targets: [{ format: 'rgba8unorm' }], + depthStencil: format ? + { format, depthWriteEnabled: true, depthCompare: 'always' } : + undefined, + fragmentShaderCode: getFragmentShaderCodeWithOutput( + [{ values: [1, 1, 1, 1], plainType: 'f32', componentCount: 4 }], + { value: 0.5 } + ) + }); + + const hasDepth = format ? !!kTextureFormatInfo[format].depth : false; + t.doCreateRenderPipelineTest(isAsync, hasDepth, descriptor); +}); + +g.test('stencil_test'). +desc( + `Stencil aspect must be contained in the format if stencil test is enabled in depthStencilState.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kDepthStencilFormats). +combine('face', ['front', 'back']). +combine('compare', [undefined, ...kCompareFunctions]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format, face, compare } = t.params; + const info = kTextureFormatInfo[format]; + + let descriptor; + if (face === 'front') { + descriptor = t.getDescriptor({ + depthStencil: { + format, + depthWriteEnabled: false, + depthCompare: 'always', + stencilFront: { compare } + } + }); + } else { + descriptor = t.getDescriptor({ + depthStencil: { + format, + depthWriteEnabled: false, + depthCompare: 'always', + stencilBack: { compare } + } + }); + } + + const stencilTestEnabled = compare !== undefined && compare !== 'always'; + t.doCreateRenderPipelineTest(isAsync, !stencilTestEnabled || !!info.stencil, descriptor); +}); + +g.test('stencil_write'). +desc( + `Stencil aspect must be contained in the format if stencil write is enabled in depthStencilState.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kDepthStencilFormats). +combine('faceAndOpType', [ +'frontFailOp', +'frontDepthFailOp', +'frontPassOp', +'backFailOp', +'backDepthFailOp', +'backPassOp'] +). +combine('op', [undefined, ...kStencilOperations]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format, faceAndOpType, op } = t.params; + const info = kTextureFormatInfo[format]; + + const common = { + format, + depthWriteEnabled: false, + depthCompare: 'always' + }; + let depthStencil; + switch (faceAndOpType) { + case 'frontFailOp': + depthStencil = { ...common, stencilFront: { failOp: op } }; + break; + case 'frontDepthFailOp': + depthStencil = { ...common, stencilFront: { depthFailOp: op } }; + break; + case 'frontPassOp': + depthStencil = { ...common, stencilFront: { passOp: op } }; + break; + case 'backFailOp': + depthStencil = { ...common, stencilBack: { failOp: op } }; + break; + case 'backDepthFailOp': + depthStencil = { ...common, stencilBack: { depthFailOp: op } }; + break; + case 'backPassOp': + depthStencil = { ...common, stencilBack: { passOp: op } }; + break; + default: + unreachable(); + } + const descriptor = t.getDescriptor({ depthStencil }); + + const stencilWriteEnabled = op !== undefined && op !== 'keep'; + t.doCreateRenderPipelineTest(isAsync, !stencilWriteEnabled || !!info.stencil, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/fragment_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/fragment_state.spec.js index 76f044e97d5..6e7a46e943c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/fragment_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/fragment_state.spec.js @@ -1,26 +1,25 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests validation of GPUFragmentState of createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { range } from '../../../../common/util/util.js'; import { kBlendFactors, kBlendOperations, - kMaxColorAttachmentsToTest, -} from '../../../capability_info.js'; + kMaxColorAttachmentsToTest } from +'../../../capability_info.js'; import { kTextureFormats, kRenderableColorTextureFormats, kTextureFormatInfo, - computeBytesPerSampleFromFormats, -} from '../../../format_info.js'; + computeBytesPerSampleFromFormats } from +'../../../format_info.js'; import { getFragmentShaderCodeWithOutput, getPlainTypeInfo, - kDefaultFragmentShaderCode, -} from '../../../util/shader.js'; + kDefaultFragmentShaderCode } from +'../../../util/shader.js'; import { kTexelRepresentationInfo } from '../../../util/texture/texel_data.js'; import { CreateRenderPipelineValidationTest } from './common.js'; @@ -29,390 +28,400 @@ export const g = makeTestGroup(CreateRenderPipelineValidationTest); const values = [0, 1, 0, 1]; -g.test('color_target_exists') - .desc(`Tests creating a complete render pipeline requires at least one color target state.`) - .params(u => u.combine('isAsync', [false, true])) - .fn(t => { - const { isAsync } = t.params; +g.test('color_target_exists'). +desc(`Tests creating a complete render pipeline requires at least one color target state.`). +params((u) => u.combine('isAsync', [false, true])). +fn((t) => { + const { isAsync } = t.params; - const goodDescriptor = t.getDescriptor({ - targets: [{ format: 'rgba8unorm' }], - }); - - // Control case - t.doCreateRenderPipelineTest(isAsync, true, goodDescriptor); - - // Fail because lack of color states - const badDescriptor = t.getDescriptor({ - targets: [], - }); - - t.doCreateRenderPipelineTest(isAsync, false, badDescriptor); + const goodDescriptor = t.getDescriptor({ + targets: [{ format: 'rgba8unorm' }] }); -g.test('targets_format_renderable') - .desc(`Tests that color target state format must have RENDER_ATTACHMENT capability.`) - .params(u => u.combine('isAsync', [false, true]).combine('format', kTextureFormats)) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(t.params.format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format } = t.params; - const info = kTextureFormatInfo[format]; + // Control case + t.doCreateRenderPipelineTest(isAsync, true, goodDescriptor); - const descriptor = t.getDescriptor({ targets: [{ format }] }); - - t.doCreateRenderPipelineTest(isAsync, !!info.colorRender, descriptor); + // Fail because lack of color states + const badDescriptor = t.getDescriptor({ + targets: [] }); -g.test('limits,maxColorAttachments') - .desc( - `Tests that color state targets length must not be larger than device.limits.maxColorAttachments.` - ) - .params(u => - u.combine('isAsync', [false, true]).combine('targetsLengthVariant', [ - { mult: 1, add: 0 }, - { mult: 1, add: 1 }, - ]) - ) - .fn(t => { - const { isAsync, targetsLengthVariant } = t.params; - const targetsLength = t.makeLimitVariant('maxColorAttachments', targetsLengthVariant); + t.doCreateRenderPipelineTest(isAsync, false, badDescriptor); +}); - const descriptor = t.getDescriptor({ - targets: range(targetsLength, i => { - return { format: 'rg8unorm', writeMask: 0 }; - }), - fragmentShaderCode: kDefaultFragmentShaderCode, - // add a depth stencil so that we can set writeMask to 0 for all color attachments - depthStencil: { - format: 'depth24plus', - depthWriteEnabled: true, - depthCompare: 'always', - }, - }); +g.test('targets_format_renderable'). +desc(`Tests that color target state format must have RENDER_ATTACHMENT capability.`). +params((u) => u.combine('isAsync', [false, true]).combine('format', kTextureFormats)). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format } = t.params; + const info = kTextureFormatInfo[format]; - t.doCreateRenderPipelineTest( - isAsync, - targetsLength <= t.device.limits.maxColorAttachments, - descriptor - ); + const descriptor = t.getDescriptor({ targets: [{ format }] }); + + t.doCreateRenderPipelineTest(isAsync, !!info.colorRender, descriptor); +}); + +g.test('limits,maxColorAttachments'). +desc( + `Tests that color state targets length must not be larger than device.limits.maxColorAttachments.` +). +params((u) => +u.combine('isAsync', [false, true]).combine('targetsLengthVariant', [ +{ mult: 1, add: 0 }, +{ mult: 1, add: 1 }] +) +). +fn((t) => { + const { isAsync, targetsLengthVariant } = t.params; + const targetsLength = t.makeLimitVariant('maxColorAttachments', targetsLengthVariant); + + const descriptor = t.getDescriptor({ + targets: range(targetsLength, (_i) => { + return { format: 'rg8unorm', writeMask: 0 }; + }), + fragmentShaderCode: kDefaultFragmentShaderCode, + // add a depth stencil so that we can set writeMask to 0 for all color attachments + depthStencil: { + format: 'depth24plus', + depthWriteEnabled: true, + depthCompare: 'always' + } }); -g.test('limits,maxColorAttachmentBytesPerSample,aligned') - .desc( - ` + t.doCreateRenderPipelineTest( + isAsync, + targetsLength <= t.device.limits.maxColorAttachments, + descriptor + ); +}); + +g.test('limits,maxColorAttachmentBytesPerSample,aligned'). +desc( + ` Tests that the total color attachment bytes per sample must not be larger than maxColorAttachmentBytesPerSample when using the same format for multiple attachments. ` - ) - .params(u => - u - .combine('format', kRenderableColorTextureFormats) - .beginSubcases() - .combine( - 'attachmentCount', - range(kMaxColorAttachmentsToTest, i => i + 1) - ) - .combine('isAsync', [false, true]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(t => { - const { format, attachmentCount, isAsync } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). +beginSubcases(). +combine( + 'attachmentCount', + range(kMaxColorAttachmentsToTest, (i) => i + 1) +). +combine('isAsync', [false, true]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn((t) => { + const { format, attachmentCount, isAsync } = t.params; + const info = kTextureFormatInfo[format]; - t.skipIf( - attachmentCount > t.device.limits.maxColorAttachments, - `attachmentCount: ${attachmentCount} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` - ); + t.skipIf( + attachmentCount > t.device.limits.maxColorAttachments, + `attachmentCount: ${attachmentCount} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` + ); - const descriptor = t.getDescriptor({ - targets: range(attachmentCount, () => { - return { format, writeMask: 0 }; - }), - }); - const shouldError = - info.colorRender === undefined || - info.colorRender.byteCost * attachmentCount > - t.device.limits.maxColorAttachmentBytesPerSample; - - t.doCreateRenderPipelineTest(isAsync, !shouldError, descriptor); + const descriptor = t.getDescriptor({ + targets: range(attachmentCount, () => { + return { format, writeMask: 0 }; + }) }); + const shouldError = + info.colorRender === undefined || + info.colorRender.byteCost * attachmentCount > + t.device.limits.maxColorAttachmentBytesPerSample; -g.test('limits,maxColorAttachmentBytesPerSample,unaligned') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, !shouldError, descriptor); +}); + +g.test('limits,maxColorAttachmentBytesPerSample,unaligned'). +desc( + ` Tests that the total color attachment bytes per sample must not be larger than maxColorAttachmentBytesPerSample when using various sets of (potentially) unaligned formats. ` - ) - .params(u => - u - .combineWithParams([ - // Alignment causes the first 1 byte R8Unorm to become 4 bytes. So even though - // 1+4+8+16+1 < 32, the 4 byte alignment requirement of R32Float makes the first R8Unorm - // become 4 and 4+4+8+16+1 > 32. Re-ordering this so the R8Unorm's are at the end, however - // is allowed: 4+8+16+1+1 < 32. - { - formats: ['r8unorm', 'r32float', 'rgba8unorm', 'rgba32float', 'r8unorm'], - }, - { - formats: ['r32float', 'rgba8unorm', 'rgba32float', 'r8unorm', 'r8unorm'], - }, - ]) - .beginSubcases() - .combine('isAsync', [false, true]) - ) - .fn(t => { - const { formats, isAsync } = t.params; +). +params((u) => +u. +combineWithParams([ +// Alignment causes the first 1 byte R8Unorm to become 4 bytes. So even though +// 1+4+8+16+1 < 32, the 4 byte alignment requirement of R32Float makes the first R8Unorm +// become 4 and 4+4+8+16+1 > 32. Re-ordering this so the R8Unorm's are at the end, however +// is allowed: 4+8+16+1+1 < 32. +{ + formats: [ + 'r8unorm', + 'r32float', + 'rgba8unorm', + 'rgba32float', + 'r8unorm'] - t.skipIf( - formats.length > t.device.limits.maxColorAttachments, - `numColorAttachments: ${formats.length} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` - ); +}, +{ + formats: [ + 'r32float', + 'rgba8unorm', + 'rgba32float', + 'r8unorm', + 'r8unorm'] - const success = - computeBytesPerSampleFromFormats(formats) <= t.device.limits.maxColorAttachmentBytesPerSample; +}] +). +beginSubcases(). +combine('isAsync', [false, true]) +). +fn((t) => { + const { formats, isAsync } = t.params; - const descriptor = t.getDescriptor({ - targets: formats.map(f => { - return { format: f, writeMask: 0 }; - }), - }); + t.skipIf( + formats.length > t.device.limits.maxColorAttachments, + `numColorAttachments: ${formats.length} > maxColorAttachments: ${t.device.limits.maxColorAttachments}` + ); - t.doCreateRenderPipelineTest(isAsync, success, descriptor); + const success = + computeBytesPerSampleFromFormats(formats) <= t.device.limits.maxColorAttachmentBytesPerSample; + + const descriptor = t.getDescriptor({ + targets: formats.map((f) => { + return { format: f, writeMask: 0 }; + }) }); -g.test('targets_format_filterable') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, success, descriptor); +}); + +g.test('targets_format_filterable'). +desc( + ` Tests that color target state format must be filterable if blend is not undefined. TODO: info.colorRender.blend now directly says whether the format is blendable. Use that.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', kRenderableColorTextureFormats) - .beginSubcases() - .combine('hasBlend', [false, true]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.skipIfTextureFormatNotSupported(format); - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const { isAsync, format, hasBlend } = t.params; - const info = kTextureFormatInfo[format]; +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', kRenderableColorTextureFormats). +beginSubcases(). +combine('hasBlend', [false, true]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.skipIfTextureFormatNotSupported(format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { isAsync, format, hasBlend } = t.params; + const info = kTextureFormatInfo[format]; - const descriptor = t.getDescriptor({ - targets: [ - { - format, - blend: hasBlend ? { color: {}, alpha: {} } : undefined, - }, - ], - }); + const descriptor = t.getDescriptor({ + targets: [ + { + format, + blend: hasBlend ? { color: {}, alpha: {} } : undefined + }] - t.doCreateRenderPipelineTest(isAsync, !hasBlend || info.color.type === 'float', descriptor); }); -g.test('targets_blend') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, !hasBlend || info.color.type === 'float', descriptor); +}); + +g.test('targets_blend'). +desc( + ` For the blend components on either GPUBlendState.color or GPUBlendState.alpha: - Tests if the combination of 'srcFactor', 'dstFactor' and 'operation' is valid (if the blend operation is "min" or "max", srcFactor and dstFactor must be "one"). ` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('component', ['color', 'alpha']) - .beginSubcases() - .combine('srcFactor', kBlendFactors) - .combine('dstFactor', kBlendFactors) - .combine('operation', kBlendOperations) - ) - .fn(t => { - const { isAsync, component, srcFactor, dstFactor, operation } = t.params; +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('component', ['color', 'alpha']). +beginSubcases(). +combine('srcFactor', kBlendFactors). +combine('dstFactor', kBlendFactors). +combine('operation', kBlendOperations) +). +fn((t) => { + const { isAsync, component, srcFactor, dstFactor, operation } = t.params; - const defaultBlendComponent = { - srcFactor: 'src-alpha', - dstFactor: 'dst-alpha', - operation: 'add', - }; - const blendComponentToTest = { - srcFactor, - dstFactor, - operation, - }; - const format = 'rgba8unorm'; + const defaultBlendComponent = { + srcFactor: 'src-alpha', + dstFactor: 'dst-alpha', + operation: 'add' + }; + const blendComponentToTest = { + srcFactor, + dstFactor, + operation + }; + const format = 'rgba8unorm'; - const descriptor = t.getDescriptor({ - targets: [ - { - format, - blend: { - color: component === 'color' ? blendComponentToTest : defaultBlendComponent, - alpha: component === 'alpha' ? blendComponentToTest : defaultBlendComponent, - }, - }, - ], - }); + const descriptor = t.getDescriptor({ + targets: [ + { + format, + blend: { + color: component === 'color' ? blendComponentToTest : defaultBlendComponent, + alpha: component === 'alpha' ? blendComponentToTest : defaultBlendComponent + } + }] - if (operation === 'min' || operation === 'max') { - const _success = srcFactor === 'one' && dstFactor === 'one'; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - } else { - t.doCreateRenderPipelineTest(isAsync, true, descriptor); - } }); -g.test('targets_write_mask') - .desc(`Tests that color target state write mask must be < 16.`) - .params(u => u.combine('isAsync', [false, true]).combine('writeMask', [0, 0xf, 0x10, 0x80000001])) - .fn(t => { - const { isAsync, writeMask } = t.params; + if (operation === 'min' || operation === 'max') { + const _success = srcFactor === 'one' && dstFactor === 'one'; + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + } else { + t.doCreateRenderPipelineTest(isAsync, true, descriptor); + } +}); - const descriptor = t.getDescriptor({ - targets: [ - { - format: 'rgba8unorm', - writeMask, - }, - ], - }); +g.test('targets_write_mask'). +desc(`Tests that color target state write mask must be < 16.`). +params((u) => u.combine('isAsync', [false, true]).combine('writeMask', [0, 0xf, 0x10, 0x80000001])). +fn((t) => { + const { isAsync, writeMask } = t.params; + + const descriptor = t.getDescriptor({ + targets: [ + { + format: 'rgba8unorm', + writeMask + }] - t.doCreateRenderPipelineTest(isAsync, writeMask < 16, descriptor); }); -g.test('pipeline_output_targets') - .desc( - `Pipeline fragment output types must be compatible with target color state format + t.doCreateRenderPipelineTest(isAsync, writeMask < 16, descriptor); +}); + +g.test('pipeline_output_targets'). +desc( + `Pipeline fragment output types must be compatible with target color state format - The scalar type (f32, i32, or u32) must match the sample type of the format. - The componentCount of the fragment output (e.g. f32, vec2, vec3, vec4) must not have fewer channels than that of the color attachment texture formats. Extra components are allowed and are discarded. Otherwise, color state write mask must be 0.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', [undefined, ...kRenderableColorTextureFormats]) - .beginSubcases() - .combine('shaderOutput', [ - undefined, - ...u.combine('scalar', ['f32', 'u32', 'i32']).combine('count', [1, 2, 3, 4]), - ]) +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', [undefined, ...kRenderableColorTextureFormats]). +beginSubcases(). +combine('shaderOutput', [ +undefined, +...u.combine('scalar', ['f32', 'u32', 'i32']).combine('count', [1, 2, 3, 4])] +) +// We only care about testing writeMask if there is an attachment but no shader output. +.expand('writeMask', (p) => +p.format !== undefined && p.shaderOutput !== undefined ? [0, 0x1, 0x2, 0x4, 0x8] : [0xf] +) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { isAsync, format, writeMask, shaderOutput } = t.params; - // We only care about testing writeMask if there is an attachment but no shader output. - .expand('writeMask', p => - p.format !== undefined && p.shaderOutput !== undefined ? [0, 0x1, 0x2, 0x4, 0x8] : [0xf] - ) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { isAsync, format, writeMask, shaderOutput } = t.params; - - const descriptor = t.getDescriptor({ - targets: format ? [{ format, writeMask }] : [], - // To have a dummy depthStencil attachment to avoid having no attachment at all which is invalid - depthStencil: { format: 'depth24plus', depthWriteEnabled: false, depthCompare: 'always' }, - fragmentShaderCode: getFragmentShaderCodeWithOutput( - shaderOutput - ? [{ values, plainType: shaderOutput.scalar, componentCount: shaderOutput.count }] - : [] - ), - }); - - let success = true; - if (format) { - // There is a color target - if (shaderOutput) { - // The shader outputs to the color target - const info = kTextureFormatInfo[format]; - success = - shaderOutput.scalar === getPlainTypeInfo(info.color.type) && - shaderOutput.count >= kTexelRepresentationInfo[format].componentOrder.length; - } else { - // The shader does not output to the color target - success = writeMask === 0; - } - } - - t.doCreateRenderPipelineTest(isAsync, success, descriptor); + const descriptor = t.getDescriptor({ + targets: format ? [{ format, writeMask }] : [], + // To have a dummy depthStencil attachment to avoid having no attachment at all which is invalid + depthStencil: { format: 'depth24plus', depthWriteEnabled: false, depthCompare: 'always' }, + fragmentShaderCode: getFragmentShaderCodeWithOutput( + shaderOutput ? + [{ values, plainType: shaderOutput.scalar, componentCount: shaderOutput.count }] : + [] + ) }); -g.test('pipeline_output_targets,blend') - .desc( - `On top of requirements from pipeline_output_targets, when blending is enabled and alpha channel is read indicated by any blend factor, an extra requirement is added: + let success = true; + if (format) { + // There is a color target + if (shaderOutput) { + // The shader outputs to the color target + const info = kTextureFormatInfo[format]; + success = + shaderOutput.scalar === getPlainTypeInfo(info.color.type) && + shaderOutput.count >= kTexelRepresentationInfo[format].componentOrder.length; + } else { + // The shader does not output to the color target + success = writeMask === 0; + } + } + + t.doCreateRenderPipelineTest(isAsync, success, descriptor); +}); + +g.test('pipeline_output_targets,blend'). +desc( + `On top of requirements from pipeline_output_targets, when blending is enabled and alpha channel is read indicated by any blend factor, an extra requirement is added: - fragment output must be vec4. ` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('format', ['r8unorm', 'rg8unorm', 'rgba8unorm', 'bgra8unorm']) - .combine('componentCount', [1, 2, 3, 4]) - .beginSubcases() - // The default srcFactor and dstFactor are 'one' and 'zero'. Override just one at a time. - .combineWithParams([ - ...u.combine('colorSrcFactor', kBlendFactors), - ...u.combine('colorDstFactor', kBlendFactors), - ...u.combine('alphaSrcFactor', kBlendFactors), - ...u.combine('alphaDstFactor', kBlendFactors), - ]) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - const info = kTextureFormatInfo[format]; - t.selectDeviceOrSkipTestCase(info.feature); - }) - .fn(t => { - const sampleType = 'float'; - const { - isAsync, +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('format', ['r8unorm', 'rg8unorm', 'rgba8unorm', 'bgra8unorm']). +combine('componentCount', [1, 2, 3, 4]). +beginSubcases() +// The default srcFactor and dstFactor are 'one' and 'zero'. Override just one at a time. +.combineWithParams([ +...u.combine('colorSrcFactor', kBlendFactors), +...u.combine('colorDstFactor', kBlendFactors), +...u.combine('alphaSrcFactor', kBlendFactors), +...u.combine('alphaDstFactor', kBlendFactors)] +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const sampleType = 'float'; + const { + isAsync, + format, + componentCount, + colorSrcFactor, + colorDstFactor, + alphaSrcFactor, + alphaDstFactor + } = t.params; + const info = kTextureFormatInfo[format]; + + const descriptor = t.getDescriptor({ + targets: [ + { format, - componentCount, - colorSrcFactor, - colorDstFactor, - alphaSrcFactor, - alphaDstFactor, - } = t.params; - const info = kTextureFormatInfo[format]; + blend: { + color: { srcFactor: colorSrcFactor, dstFactor: colorDstFactor }, + alpha: { srcFactor: alphaSrcFactor, dstFactor: alphaDstFactor } + } + }], - const descriptor = t.getDescriptor({ - targets: [ - { - format, - blend: { - color: { srcFactor: colorSrcFactor, dstFactor: colorDstFactor }, - alpha: { srcFactor: alphaSrcFactor, dstFactor: alphaDstFactor }, - }, - }, - ], - - fragmentShaderCode: getFragmentShaderCodeWithOutput([ - { values, plainType: getPlainTypeInfo(sampleType), componentCount }, - ]), - }); - - const colorBlendReadsSrcAlpha = - colorSrcFactor?.includes('src-alpha') || colorDstFactor?.includes('src-alpha'); - const meetsExtraBlendingRequirement = !colorBlendReadsSrcAlpha || componentCount === 4; - const _success = - info.color.type === sampleType && - componentCount >= kTexelRepresentationInfo[format].componentOrder.length && - meetsExtraBlendingRequirement; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + fragmentShaderCode: getFragmentShaderCodeWithOutput([ + { values, plainType: getPlainTypeInfo(sampleType), componentCount }] + ) }); + + const colorBlendReadsSrcAlpha = + colorSrcFactor?.includes('src-alpha') || colorDstFactor?.includes('src-alpha'); + const meetsExtraBlendingRequirement = !colorBlendReadsSrcAlpha || componentCount === 4; + const _success = + info.color.type === sampleType && + componentCount >= kTexelRepresentationInfo[format].componentOrder.length && + meetsExtraBlendingRequirement; + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/inter_stage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/inter_stage.spec.js index c081657f82e..38691f10a35 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/inter_stage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/inter_stage.spec.js @@ -1,10 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Interface matching between vertex and fragment shader validation for createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { assert, range } from '../../../../common/util/util.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { range } from '../../../../common/util/util.js'; import { CreateRenderPipelineValidationTest } from './common.js'; @@ -26,13 +25,16 @@ class InterStageMatchingValidationTest extends CreateRenderPipelineValidationTes vertexOut.pos = vec4(0.0, 0.0, 0.0, 1.0); return vertexOut; } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }; } - getFragmentStateWithInputs(inputs, hasBuiltinPosition = false) { + getFragmentStateWithInputs( + inputs, + hasBuiltinPosition = false) + { return { targets: [{ format: 'rgba8unorm' }], module: this.device.createShaderModule({ @@ -44,277 +46,288 @@ class InterStageMatchingValidationTest extends CreateRenderPipelineValidationTes @fragment fn main(fragmentIn: B) -> @location(0) vec4 { return vec4(1.0, 1.0, 1.0, 1.0); } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }; } - getDescriptorWithStates(vertex, fragment) { + getDescriptorWithStates( + vertex, + fragment) + { return { layout: 'auto', vertex, - fragment, + fragment }; } } export const g = makeTestGroup(InterStageMatchingValidationTest); -g.test('location,mismatch') - .desc(`Tests that missing declaration at the same location should fail validation.`) - .params(u => - u.combine('isAsync', [false, true]).combineWithParams([ - { outputs: ['@location(0) __: f32'], inputs: ['@location(0) __: f32'], _success: true }, - { outputs: ['@location(0) __: f32'], inputs: ['@location(1) __: f32'], _success: false }, - { outputs: ['@location(1) __: f32'], inputs: ['@location(0) __: f32'], _success: false }, - { - outputs: ['@location(0) __: f32', '@location(1) __: f32'], - inputs: ['@location(1) __: f32', '@location(0) __: f32'], - _success: true, - }, - { - outputs: ['@location(1) __: f32', '@location(0) __: f32'], - inputs: ['@location(0) __: f32', '@location(1) __: f32'], - _success: true, - }, - ]) - ) - .fn(t => { - const { isAsync, outputs, inputs, _success } = t.params; +g.test('location,mismatch'). +desc(`Tests that missing declaration at the same location should fail validation.`). +params((u) => +u.combine('isAsync', [false, true]).combineWithParams([ +{ outputs: ['@location(0) __: f32'], inputs: ['@location(0) __: f32'], _success: true }, +{ outputs: ['@location(0) __: f32'], inputs: ['@location(1) __: f32'], _success: false }, +{ outputs: ['@location(1) __: f32'], inputs: ['@location(0) __: f32'], _success: false }, +{ + outputs: ['@location(0) __: f32', '@location(1) __: f32'], + inputs: ['@location(1) __: f32', '@location(0) __: f32'], + _success: true +}, +{ + outputs: ['@location(1) __: f32', '@location(0) __: f32'], + inputs: ['@location(0) __: f32', '@location(1) __: f32'], + _success: true +}] +) +). +fn((t) => { + const { isAsync, outputs, inputs, _success } = t.params; - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs(outputs), - t.getFragmentStateWithInputs(inputs) + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs(outputs), + t.getFragmentStateWithInputs(inputs) + ); + + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); + +g.test('location,superset'). +desc(`TODO: implement after spec is settled: https://github.com/gpuweb/gpuweb/issues/2038`). +unimplemented(); + +g.test('location,subset'). +desc(`Tests that validation should fail when vertex output is a subset of fragment input.`). +params((u) => u.combine('isAsync', [false, true])). +fn((t) => { + const { isAsync } = t.params; + + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs(['@location(0) vout0: f32']), + t.getFragmentStateWithInputs(['@location(0) fin0: f32', '@location(1) fin1: f32']) + ); + + t.doCreateRenderPipelineTest(isAsync, false, descriptor); +}); + +g.test('type'). +desc( + `Tests that validation should fail when type of vertex output and fragment input at the same location doesn't match.` +). +params((u) => +u.combine('isAsync', [false, true]).combineWithParams([ +{ output: 'f32', input: 'f32' }, +{ output: 'i32', input: 'f32' }, +{ output: 'u32', input: 'f32' }, +{ output: 'u32', input: 'i32' }, +{ output: 'i32', input: 'u32' }, +{ output: 'vec2', input: 'vec2' }, +{ output: 'vec3', input: 'vec2' }, +{ output: 'vec2', input: 'vec3' }, +{ output: 'vec2', input: 'f32' }, +{ output: 'f32', input: 'vec2' }] +) +). +fn((t) => { + const { isAsync, output, input } = t.params; + + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs([`@location(0) @interpolate(flat) vout0: ${output}`]), + t.getFragmentStateWithInputs([`@location(0) @interpolate(flat) fin0: ${input}`]) + ); + + t.doCreateRenderPipelineTest(isAsync, output === input, descriptor); +}); + +g.test('interpolation_type'). +desc( + `Tests that validation should fail when interpolation type of vertex output and fragment input at the same location doesn't match.` +). +params((u) => +u.combine('isAsync', [false, true]).combineWithParams([ +// default is @interpolate(perspective, center) +{ output: '', input: '' }, +{ output: '', input: '@interpolate(perspective)', _success: true }, +{ output: '', input: '@interpolate(perspective, center)', _success: true }, +{ output: '@interpolate(perspective)', input: '', _success: true }, +{ output: '', input: '@interpolate(linear)' }, +{ output: '@interpolate(perspective)', input: '@interpolate(perspective)' }, +{ output: '@interpolate(linear)', input: '@interpolate(perspective)' }, +{ output: '@interpolate(flat)', input: '@interpolate(perspective)' }, +{ output: '@interpolate(linear)', input: '@interpolate(flat)' }, +{ + output: '@interpolate(linear, center)', + input: '@interpolate(linear, center)', + _compat_success: false +}] +) +). +fn((t) => { + const { isAsync, output, input, _success, _compat_success } = t.params; + + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs([`@location(0) ${output} vout0: f32`]), + t.getFragmentStateWithInputs([`@location(0) ${input} fin0: f32`]) + ); + + const shouldSucceed = + (_success ?? output === input) && (!t.isCompatibility || _compat_success !== false); + + t.doCreateRenderPipelineTest(isAsync, shouldSucceed, descriptor); +}); +1; +g.test('interpolation_sampling'). +desc( + `Tests that validation should fail when interpolation sampling of vertex output and fragment input at the same location doesn't match.` +). +params((u) => +u.combine('isAsync', [false, true]).combineWithParams([ +// default is @interpolate(perspective, center) +{ output: '@interpolate(perspective)', input: '@interpolate(perspective)' }, +{ + output: '@interpolate(perspective)', + input: '@interpolate(perspective, center)', + _success: true +}, +{ + output: '@interpolate(linear, center)', + input: '@interpolate(linear)', + _success: true, + _compat_success: false +}, +{ output: '@interpolate(flat)', input: '@interpolate(flat)' }, +{ output: '@interpolate(perspective)', input: '@interpolate(perspective, sample)' }, +{ output: '@interpolate(perspective, center)', input: '@interpolate(perspective, sample)' }, +{ + output: '@interpolate(perspective, center)', + input: '@interpolate(perspective, centroid)' +}, +{ output: '@interpolate(perspective, centroid)', input: '@interpolate(perspective)' }] +) +). +fn((t) => { + const { isAsync, output, input, _success, _compat_success } = t.params; + + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs([`@location(0) ${output} vout0: f32`]), + t.getFragmentStateWithInputs([`@location(0) ${input} fin0: f32`]) + ); + + const shouldSucceed = + (_success ?? output === input) && (!t.isCompatibility || _compat_success !== false); + + t.doCreateRenderPipelineTest(isAsync, shouldSucceed, descriptor); +}); + +g.test('max_shader_variable_location'). +desc( + `Tests that validation should fail when there is location of user-defined output/input variable >= device.limits.maxInterStageShaderVariables` +). +params((u) => +u. +combine('isAsync', [false, true]) +// User defined variable location = maxInterStageShaderVariables + locationDelta +.combine('locationDelta', [0, -1, -2]) +). +fn((t) => { + const { isAsync, locationDelta } = t.params; + const maxInterStageShaderVariables = t.device.limits.maxInterStageShaderVariables; + const location = maxInterStageShaderVariables + locationDelta; + + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs([`@location(${location}) vout0: f32`]), + t.getFragmentStateWithInputs([`@location(${location}) fin0: f32`]) + ); + + t.doCreateRenderPipelineTest(isAsync, location < maxInterStageShaderVariables, descriptor); +}); + +g.test('max_components_count,output'). +desc( + `Tests that validation should fail when scalar components of all user-defined outputs > max vertex shader output components.` +). +params((u) => +u.combine('isAsync', [false, true]).combineWithParams([ +// Number of user-defined output scalar components in test shader = device.limits.maxInterStageShaderComponents + numScalarDelta. +{ numScalarDelta: 0, topology: 'triangle-list', _success: true }, +{ numScalarDelta: 1, topology: 'triangle-list', _success: false }, +{ numScalarDelta: 0, topology: 'point-list', _success: false }, +{ numScalarDelta: -1, topology: 'point-list', _success: true }] +) +). +fn((t) => { + const { isAsync, numScalarDelta, topology, _success } = t.params; + + const numScalarComponents = t.device.limits.maxInterStageShaderComponents + numScalarDelta; + + const numVec4 = Math.floor(numScalarComponents / 4); + const numTrailingScalars = numScalarComponents % 4; + + const outputs = range(numVec4, (i) => `@location(${i}) vout${i}: vec4`); + const inputs = range(numVec4, (i) => `@location(${i}) fin${i}: vec4`); + + if (numTrailingScalars > 0) { + const typeString = numTrailingScalars === 1 ? 'f32' : `vec${numTrailingScalars}`; + outputs.push(`@location(${numVec4}) vout${numVec4}: ${typeString}`); + inputs.push(`@location(${numVec4}) fin${numVec4}: ${typeString}`); + } + + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs(outputs), + t.getFragmentStateWithInputs(inputs) + ); + descriptor.primitive = { topology }; + + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); + +g.test('max_components_count,input'). +desc( + `Tests that validation should fail when scalar components of all user-defined inputs > max vertex shader output components.` +). +params((u) => +u.combine('isAsync', [false, true]).combineWithParams([ +// Number of user-defined input scalar components in test shader = device.limits.maxInterStageShaderComponents + numScalarDelta. +{ numScalarDelta: 0, useExtraBuiltinInputs: false, _success: true }, +{ numScalarDelta: 1, useExtraBuiltinInputs: false, _success: false }, +{ numScalarDelta: 0, useExtraBuiltinInputs: true, _success: false }, +{ numScalarDelta: -3, useExtraBuiltinInputs: true, _success: true }, +{ numScalarDelta: -2, useExtraBuiltinInputs: true, _success: false }] +) +). +fn((t) => { + const { isAsync, numScalarDelta, useExtraBuiltinInputs, _success } = t.params; + + const numScalarComponents = t.device.limits.maxInterStageShaderComponents + numScalarDelta; + + const numVec4 = Math.floor(numScalarComponents / 4); + const numTrailingScalars = numScalarComponents % 4; + + const outputs = range(numVec4, (i) => `@location(${i}) vout${i}: vec4`); + const inputs = range(numVec4, (i) => `@location(${i}) fin${i}: vec4`); + + if (numTrailingScalars > 0) { + const typeString = numTrailingScalars === 1 ? 'f32' : `vec${numTrailingScalars}`; + outputs.push(`@location(${numVec4}) vout${numVec4}: ${typeString}`); + inputs.push(`@location(${numVec4}) fin${numVec4}: ${typeString}`); + } + + if (useExtraBuiltinInputs) { + inputs.push( + '@builtin(front_facing) front_facing_in: bool', + '@builtin(sample_index) sample_index_in: u32', + '@builtin(sample_mask) sample_mask_in: u32' ); + } - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + const descriptor = t.getDescriptorWithStates( + t.getVertexStateWithOutputs(outputs), + t.getFragmentStateWithInputs(inputs, true) + ); -g.test('location,superset') - .desc(`TODO: implement after spec is settled: https://github.com/gpuweb/gpuweb/issues/2038`) - .unimplemented(); - -g.test('location,subset') - .desc(`Tests that validation should fail when vertex output is a subset of fragment input.`) - .params(u => u.combine('isAsync', [false, true])) - .fn(t => { - const { isAsync } = t.params; - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs(['@location(0) vout0: f32']), - t.getFragmentStateWithInputs(['@location(0) fin0: f32', '@location(1) fin1: f32']) - ); - - t.doCreateRenderPipelineTest(isAsync, false, descriptor); - }); - -g.test('type') - .desc( - `Tests that validation should fail when type of vertex output and fragment input at the same location doesn't match.` - ) - .params(u => - u.combine('isAsync', [false, true]).combineWithParams([ - { output: 'f32', input: 'f32' }, - { output: 'i32', input: 'f32' }, - { output: 'u32', input: 'f32' }, - { output: 'u32', input: 'i32' }, - { output: 'i32', input: 'u32' }, - { output: 'vec2', input: 'vec2' }, - { output: 'vec3', input: 'vec2' }, - { output: 'vec2', input: 'vec3' }, - { output: 'vec2', input: 'f32' }, - { output: 'f32', input: 'vec2' }, - ]) - ) - .fn(t => { - const { isAsync, output, input } = t.params; - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs([`@location(0) @interpolate(flat) vout0: ${output}`]), - t.getFragmentStateWithInputs([`@location(0) @interpolate(flat) fin0: ${input}`]) - ); - - t.doCreateRenderPipelineTest(isAsync, output === input, descriptor); - }); - -g.test('interpolation_type') - .desc( - `Tests that validation should fail when interpolation type of vertex output and fragment input at the same location doesn't match.` - ) - .params(u => - u.combine('isAsync', [false, true]).combineWithParams([ - // default is @interpolate(perspective, center) - { output: '', input: '' }, - { output: '', input: '@interpolate(perspective)', _success: true }, - { output: '', input: '@interpolate(perspective, center)', _success: true }, - { output: '@interpolate(perspective)', input: '', _success: true }, - { output: '', input: '@interpolate(linear)' }, - { output: '@interpolate(perspective)', input: '@interpolate(perspective)' }, - { output: '@interpolate(linear)', input: '@interpolate(perspective)' }, - { output: '@interpolate(flat)', input: '@interpolate(perspective)' }, - { output: '@interpolate(linear)', input: '@interpolate(flat)' }, - { output: '@interpolate(linear, center)', input: '@interpolate(linear, center)' }, - ]) - ) - .fn(t => { - const { isAsync, output, input, _success } = t.params; - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs([`@location(0) ${output} vout0: f32`]), - t.getFragmentStateWithInputs([`@location(0) ${input} fin0: f32`]) - ); - - t.doCreateRenderPipelineTest(isAsync, _success ?? output === input, descriptor); - }); - -g.test('interpolation_sampling') - .desc( - `Tests that validation should fail when interpolation sampling of vertex output and fragment input at the same location doesn't match.` - ) - .params(u => - u.combine('isAsync', [false, true]).combineWithParams([ - // default is @interpolate(perspective, center) - { output: '@interpolate(perspective)', input: '@interpolate(perspective)' }, - { - output: '@interpolate(perspective)', - input: '@interpolate(perspective, center)', - _success: true, - }, - { output: '@interpolate(linear, center)', input: '@interpolate(linear)', _success: true }, - { output: '@interpolate(flat)', input: '@interpolate(flat)' }, - { output: '@interpolate(perspective)', input: '@interpolate(perspective, sample)' }, - { output: '@interpolate(perspective, center)', input: '@interpolate(perspective, sample)' }, - { - output: '@interpolate(perspective, center)', - input: '@interpolate(perspective, centroid)', - }, - { output: '@interpolate(perspective, centroid)', input: '@interpolate(perspective)' }, - ]) - ) - .fn(t => { - const { isAsync, output, input, _success } = t.params; - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs([`@location(0) ${output} vout0: f32`]), - t.getFragmentStateWithInputs([`@location(0) ${input} fin0: f32`]) - ); - - t.doCreateRenderPipelineTest(isAsync, _success ?? output === input, descriptor); - }); - -g.test('max_shader_variable_location') - .desc( - `Tests that validation should fail when there is location of user-defined output/input variable >= device.limits.maxInterStageShaderVariables` - ) - .params(u => - u - .combine('isAsync', [false, true]) - // User defined variable location = maxInterStageShaderVariables + locationDelta - .combine('locationDelta', [0, -1, -2]) - ) - .fn(t => { - const { isAsync, locationDelta } = t.params; - const maxInterStageShaderVariables = t.device.limits.maxInterStageShaderVariables; - const location = maxInterStageShaderVariables + locationDelta; - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs([`@location(${location}) vout0: f32`]), - t.getFragmentStateWithInputs([`@location(${location}) fin0: f32`]) - ); - - t.doCreateRenderPipelineTest(isAsync, location < maxInterStageShaderVariables, descriptor); - }); - -g.test('max_components_count,output') - .desc( - `Tests that validation should fail when scalar components of all user-defined outputs > max vertex shader output components.` - ) - .params(u => - u.combine('isAsync', [false, true]).combineWithParams([ - // Number of user-defined output scalar components in test shader = device.limits.maxInterStageShaderComponents + numScalarDelta. - { numScalarDelta: 0, topology: 'triangle-list', _success: true }, - { numScalarDelta: 1, topology: 'triangle-list', _success: false }, - { numScalarDelta: 0, topology: 'point-list', _success: false }, - { numScalarDelta: -1, topology: 'point-list', _success: true }, - ]) - ) - .fn(t => { - const { isAsync, numScalarDelta, topology, _success } = t.params; - - const numScalarComponents = t.device.limits.maxInterStageShaderComponents + numScalarDelta; - - const numVec4 = Math.floor(numScalarComponents / 4); - const numTrailingScalars = numScalarComponents % 4; - const numUserDefinedInterStageVariables = numTrailingScalars > 0 ? numVec4 + 1 : numVec4; - - assert(numUserDefinedInterStageVariables <= t.device.limits.maxInterStageShaderVariables); - - const outputs = range(numVec4, i => `@location(${i}) vout${i}: vec4`); - const inputs = range(numVec4, i => `@location(${i}) fin${i}: vec4`); - - if (numTrailingScalars > 0) { - const typeString = numTrailingScalars === 1 ? 'f32' : `vec${numTrailingScalars}`; - outputs.push(`@location(${numVec4}) vout${numVec4}: ${typeString}`); - inputs.push(`@location(${numVec4}) fin${numVec4}: ${typeString}`); - } - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs(outputs), - t.getFragmentStateWithInputs(inputs) - ); - - descriptor.primitive = { topology }; - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); - -g.test('max_components_count,input') - .desc( - `Tests that validation should fail when scalar components of all user-defined inputs > max vertex shader output components.` - ) - .params(u => - u.combine('isAsync', [false, true]).combineWithParams([ - // Number of user-defined input scalar components in test shader = device.limits.maxInterStageShaderComponents + numScalarDelta. - { numScalarDelta: 0, useExtraBuiltinInputs: false, _success: true }, - { numScalarDelta: 1, useExtraBuiltinInputs: false, _success: false }, - { numScalarDelta: 0, useExtraBuiltinInputs: true, _success: false }, - { numScalarDelta: -3, useExtraBuiltinInputs: true, _success: true }, - { numScalarDelta: -2, useExtraBuiltinInputs: true, _success: false }, - ]) - ) - .fn(t => { - const { isAsync, numScalarDelta, useExtraBuiltinInputs, _success } = t.params; - - const numScalarComponents = t.device.limits.maxInterStageShaderComponents + numScalarDelta; - - const numVec4 = Math.floor(numScalarComponents / 4); - const numTrailingScalars = numScalarComponents % 4; - const numUserDefinedInterStageVariables = numTrailingScalars > 0 ? numVec4 + 1 : numVec4; - - assert(numUserDefinedInterStageVariables <= t.device.limits.maxInterStageShaderVariables); - - const outputs = range(numVec4, i => `@location(${i}) vout${i}: vec4`); - const inputs = range(numVec4, i => `@location(${i}) fin${i}: vec4`); - - if (numTrailingScalars > 0) { - const typeString = numTrailingScalars === 1 ? 'f32' : `vec${numTrailingScalars}`; - outputs.push(`@location(${numVec4}) vout${numVec4}: ${typeString}`); - inputs.push(`@location(${numVec4}) fin${numVec4}: ${typeString}`); - } - - if (useExtraBuiltinInputs) { - inputs.push( - '@builtin(front_facing) front_facing_in: bool', - '@builtin(sample_index) sample_index_in: u32', - '@builtin(sample_mask) sample_mask_in: u32' - ); - } - - const descriptor = t.getDescriptorWithStates( - t.getVertexStateWithOutputs(outputs), - t.getFragmentStateWithInputs(inputs, true) - ); - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/misc.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/misc.spec.js index 4868df06ccf..79dddb51e03 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/misc.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/misc.spec.js @@ -1,94 +1,98 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` misc createRenderPipeline and createRenderPipelineAsync validation tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kDefaultVertexShaderCode, kDefaultFragmentShaderCode } from '../../../util/shader.js'; import { CreateRenderPipelineValidationTest } from './common.js'; export const g = makeTestGroup(CreateRenderPipelineValidationTest); -g.test('basic') - .desc(`Test basic usage of createRenderPipeline.`) - .params(u => u.combine('isAsync', [false, true])) - .fn(t => { - const { isAsync } = t.params; - const descriptor = t.getDescriptor(); +g.test('basic'). +desc(`Test basic usage of createRenderPipeline.`). +params((u) => u.combine('isAsync', [false, true])). +fn((t) => { + const { isAsync } = t.params; + const descriptor = t.getDescriptor(); - t.doCreateRenderPipelineTest(isAsync, true, descriptor); - }); + t.doCreateRenderPipelineTest(isAsync, true, descriptor); +}); -g.test('vertex_state_only') - .desc( - `Tests creating vertex-state-only render pipeline. A vertex-only render pipeline has no fragment +g.test('vertex_state_only'). +desc( + `Tests creating vertex-state-only render pipeline. A vertex-only render pipeline has no fragment state (and thus has no color state), and can be created with or without depth stencil state.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .beginSubcases() - .combine('depthStencilFormat', ['depth24plus', 'depth24plus-stencil8', 'depth32float', '']) - .combine('hasColor', [false, true]) - ) - .fn(t => { - const { isAsync, depthStencilFormat, hasColor } = t.params; +). +params((u) => +u. +combine('isAsync', [false, true]). +beginSubcases(). +combine('depthStencilFormat', [ +'depth24plus', +'depth24plus-stencil8', +'depth32float', +''] +). +combine('hasColor', [false, true]) +). +fn((t) => { + const { isAsync, depthStencilFormat, hasColor } = t.params; - let depthStencilState; - if (depthStencilFormat === '') { - depthStencilState = undefined; - } else { - depthStencilState = { - format: depthStencilFormat, - depthWriteEnabled: false, - depthCompare: 'always', - }; - } - - // Having targets or not should have no effect in result, since it will not appear in the - // descriptor in vertex-only render pipeline - const descriptor = t.getDescriptor({ - noFragment: true, - depthStencil: depthStencilState, - targets: hasColor ? [{ format: 'rgba8unorm' }] : [], - }); - - t.doCreateRenderPipelineTest(isAsync, true, descriptor); - }); - -g.test('pipeline_layout,device_mismatch') - .desc( - 'Tests createRenderPipeline(Async) cannot be called with a pipeline layout created from another device' - ) - .paramsSubcasesOnly(u => u.combine('isAsync', [true, false]).combine('mismatched', [true, false])) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { isAsync, mismatched } = t.params; - - const sourceDevice = mismatched ? t.mismatchedDevice : t.device; - - const layout = sourceDevice.createPipelineLayout({ bindGroupLayouts: [] }); - - const format = 'rgba8unorm'; - const descriptor = { - layout, - vertex: { - module: t.device.createShaderModule({ - code: kDefaultVertexShaderCode, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: kDefaultFragmentShaderCode, - }), - entryPoint: 'main', - targets: [{ format }], - }, + let depthStencilState; + if (depthStencilFormat === '') { + depthStencilState = undefined; + } else { + depthStencilState = { + format: depthStencilFormat, + depthWriteEnabled: false, + depthCompare: 'always' }; + } - t.doCreateRenderPipelineTest(isAsync, !mismatched, descriptor); + // Having targets or not should have no effect in result, since it will not appear in the + // descriptor in vertex-only render pipeline + const descriptor = t.getDescriptor({ + noFragment: true, + depthStencil: depthStencilState, + targets: hasColor ? [{ format: 'rgba8unorm' }] : [] }); + + t.doCreateRenderPipelineTest(isAsync, true, descriptor); +}); + +g.test('pipeline_layout,device_mismatch'). +desc( + 'Tests createRenderPipeline(Async) cannot be called with a pipeline layout created from another device' +). +paramsSubcasesOnly((u) => u.combine('isAsync', [true, false]).combine('mismatched', [true, false])). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { isAsync, mismatched } = t.params; + + const sourceDevice = mismatched ? t.mismatchedDevice : t.device; + + const layout = sourceDevice.createPipelineLayout({ bindGroupLayouts: [] }); + + const format = 'rgba8unorm'; + const descriptor = { + layout, + vertex: { + module: t.device.createShaderModule({ + code: kDefaultVertexShaderCode + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: kDefaultFragmentShaderCode + }), + entryPoint: 'main', + targets: [{ format }] + } + }; + + t.doCreateRenderPipelineTest(isAsync, !mismatched, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/multisample_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/multisample_state.spec.js index b9434ec07ac..a4305c1b54c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/multisample_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/multisample_state.spec.js @@ -1,74 +1,73 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests validation of GPUMultisampleState of createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kDefaultFragmentShaderCode } from '../../../util/shader.js'; import { CreateRenderPipelineValidationTest } from './common.js'; export const g = makeTestGroup(CreateRenderPipelineValidationTest); -g.test('count') - .desc(`If multisample.count must either be 1 or 4.`) - .params(u => - u - .combine('isAsync', [false, true]) - .beginSubcases() - .combine('count', [0, 1, 2, 3, 4, 8, 16, 1024]) - ) - .fn(t => { - const { isAsync, count } = t.params; +g.test('count'). +desc(`If multisample.count must either be 1 or 4.`). +params((u) => +u. +combine('isAsync', [false, true]). +beginSubcases(). +combine('count', [0, 1, 2, 3, 4, 8, 16, 1024]) +). +fn((t) => { + const { isAsync, count } = t.params; - const descriptor = t.getDescriptor({ multisample: { count, alphaToCoverageEnabled: false } }); + const descriptor = t.getDescriptor({ multisample: { count, alphaToCoverageEnabled: false } }); - const _success = count === 1 || count === 4; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + const _success = count === 1 || count === 4; + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); -g.test('alpha_to_coverage,count') - .desc( - `If multisample.alphaToCoverageEnabled is true, multisample.count must be greater than 1, e.g. it can only be 4.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('alphaToCoverageEnabled', [false, true]) - .beginSubcases() - .combine('count', [1, 4]) - ) - .fn(t => { - const { isAsync, alphaToCoverageEnabled, count } = t.params; +g.test('alpha_to_coverage,count'). +desc( + `If multisample.alphaToCoverageEnabled is true, multisample.count must be greater than 1, e.g. it can only be 4.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('alphaToCoverageEnabled', [false, true]). +beginSubcases(). +combine('count', [1, 4]) +). +fn((t) => { + const { isAsync, alphaToCoverageEnabled, count } = t.params; - const descriptor = t.getDescriptor({ multisample: { count, alphaToCoverageEnabled } }); + const descriptor = t.getDescriptor({ multisample: { count, alphaToCoverageEnabled } }); - const _success = alphaToCoverageEnabled ? count === 4 : count === 1 || count === 4; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + const _success = alphaToCoverageEnabled ? count === 4 : count === 1 || count === 4; + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); -g.test('alpha_to_coverage,sample_mask') - .desc( - `If sample_mask builtin is a pipeline output of fragment, multisample.alphaToCoverageEnabled should be false.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('alphaToCoverageEnabled', [false, true]) - .beginSubcases() - .combine('hasSampleMaskOutput', [false, true]) - ) - .fn(t => { - const { isAsync, alphaToCoverageEnabled, hasSampleMaskOutput } = t.params; +g.test('alpha_to_coverage,sample_mask'). +desc( + `If sample_mask builtin is a pipeline output of fragment, multisample.alphaToCoverageEnabled should be false.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('alphaToCoverageEnabled', [false, true]). +beginSubcases(). +combine('hasSampleMaskOutput', [false, true]) +). +fn((t) => { + const { isAsync, alphaToCoverageEnabled, hasSampleMaskOutput } = t.params; - if (t.isCompatibility && hasSampleMaskOutput) { - t.skip('WGSL sample_mask is not supported in compatibility mode'); - } + if (t.isCompatibility && hasSampleMaskOutput) { + t.skip('WGSL sample_mask is not supported in compatibility mode'); + } - const descriptor = t.getDescriptor({ - multisample: { alphaToCoverageEnabled, count: 4 }, - fragmentShaderCode: hasSampleMaskOutput - ? ` + const descriptor = t.getDescriptor({ + multisample: { alphaToCoverageEnabled, count: 4 }, + fragmentShaderCode: hasSampleMaskOutput ? + ` struct Output { @builtin(sample_mask) mask_out: u32, @location(0) color : vec4, @@ -79,10 +78,10 @@ g.test('alpha_to_coverage,sample_mask') o.mask_out = 0xFFFFFFFFu; o.color = vec4(1.0, 1.0, 1.0, 1.0); return o; - }` - : kDefaultFragmentShaderCode, - }); - - const _success = !hasSampleMaskOutput || !alphaToCoverageEnabled; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + }` : + kDefaultFragmentShaderCode }); + + const _success = !hasSampleMaskOutput || !alphaToCoverageEnabled; + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/overrides.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/overrides.spec.js index bc3d4948458..e930ecaed62 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/overrides.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/overrides.spec.js @@ -1,47 +1,46 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests validation of pipeline overridable constants of createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kValue } from '../../../util/constants.js'; import { CreateRenderPipelineValidationTest } from './common.js'; export const g = makeTestGroup(CreateRenderPipelineValidationTest); -g.test('identifier,vertex') - .desc( - ` +g.test('identifier,vertex'). +desc( + ` Tests calling createRenderPipeline(Async) validation for overridable constants identifiers in vertex state. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { vertexConstants: {}, _success: true }, - { vertexConstants: { x: 1, y: 1 }, _success: true }, - { vertexConstants: { x: 1, y: 1, 1: 1, 1000: 1 }, _success: true }, - { vertexConstants: { 'x\0': 1, y: 1 }, _success: false }, - { vertexConstants: { xxx: 1 }, _success: false }, - { vertexConstants: { 1: 1 }, _success: true }, - { vertexConstants: { 2: 1 }, _success: false }, - { vertexConstants: { z: 1 }, _success: false }, // pipeline constant id is specified for z - { vertexConstants: { w: 1 }, _success: false }, // pipeline constant id is specified for w - { vertexConstants: { 1: 1, z: 1 }, _success: false }, // pipeline constant id is specified for z - { vertexConstants: { 数: 1 }, _success: true }, // test non-ASCII - { vertexConstants: { séquençage: 0 }, _success: false }, // test unicode normalization - ]) - ) - .fn(t => { - const { isAsync, vertexConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ vertexConstants: {}, _success: true }, +{ vertexConstants: { x: 1, y: 1 }, _success: true }, +{ vertexConstants: { x: 1, y: 1, 1: 1, 1000: 1 }, _success: true }, +{ vertexConstants: { 'x\0': 1, y: 1 }, _success: false }, +{ vertexConstants: { xxx: 1 }, _success: false }, +{ vertexConstants: { 1: 1 }, _success: true }, +{ vertexConstants: { 2: 1 }, _success: false }, +{ vertexConstants: { z: 1 }, _success: false }, // pipeline constant id is specified for z +{ vertexConstants: { w: 1 }, _success: false }, // pipeline constant id is specified for w +{ vertexConstants: { 1: 1, z: 1 }, _success: false }, // pipeline constant id is specified for z +{ vertexConstants: { 数: 1 }, _success: true }, // test non-ASCII +{ vertexConstants: { séquençage: 0 }, _success: false } // test unicode normalization +]) +). +fn((t) => { + const { isAsync, vertexConstants, _success } = t.params; - t.doCreateRenderPipelineTest(isAsync, _success, { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest(isAsync, _success, { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` override x: f32 = 0.0; override y: f32 = 0.0; override 数: f32 = 0.0; @@ -50,52 +49,52 @@ Tests calling createRenderPipeline(Async) validation for overridable constants i @id(1000) override w: f32 = 1.0; @vertex fn main() -> @builtin(position) vec4 { return vec4(x, y, z, w + 数 + séquençage); - }`, - }), - entryPoint: 'main', - constants: vertexConstants, - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() -> @location(0) vec4 { + }` + }), + entryPoint: 'main', + constants: vertexConstants + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); +}); -g.test('identifier,fragment') - .desc( - ` +g.test('identifier,fragment'). +desc( + ` Tests calling createRenderPipeline(Async) validation for overridable constants identifiers in fragment state. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { fragmentConstants: {}, _success: true }, - { fragmentConstants: { r: 1, g: 1 }, _success: true }, - { fragmentConstants: { r: 1, g: 1, 1: 1, 1000: 1 }, _success: true }, - { fragmentConstants: { 'r\0': 1 }, _success: false }, - { fragmentConstants: { xxx: 1 }, _success: false }, - { fragmentConstants: { 1: 1 }, _success: true }, - { fragmentConstants: { 2: 1 }, _success: false }, - { fragmentConstants: { b: 1 }, _success: false }, // pipeline constant id is specified for b - { fragmentConstants: { a: 1 }, _success: false }, // pipeline constant id is specified for a - { fragmentConstants: { 1: 1, b: 1 }, _success: false }, // pipeline constant id is specified for b - { fragmentConstants: { 数: 1 }, _success: true }, // test non-ASCII - { fragmentConstants: { séquençage: 0 }, _success: false }, // test unicode is not normalized - ]) - ) - .fn(t => { - const { isAsync, fragmentConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ fragmentConstants: {}, _success: true }, +{ fragmentConstants: { r: 1, g: 1 }, _success: true }, +{ fragmentConstants: { r: 1, g: 1, 1: 1, 1000: 1 }, _success: true }, +{ fragmentConstants: { 'r\0': 1 }, _success: false }, +{ fragmentConstants: { xxx: 1 }, _success: false }, +{ fragmentConstants: { 1: 1 }, _success: true }, +{ fragmentConstants: { 2: 1 }, _success: false }, +{ fragmentConstants: { b: 1 }, _success: false }, // pipeline constant id is specified for b +{ fragmentConstants: { a: 1 }, _success: false }, // pipeline constant id is specified for a +{ fragmentConstants: { 1: 1, b: 1 }, _success: false }, // pipeline constant id is specified for b +{ fragmentConstants: { 数: 1 }, _success: true }, // test non-ASCII +{ fragmentConstants: { séquençage: 0 }, _success: false } // test unicode is not normalized +]) +). +fn((t) => { + const { isAsync, fragmentConstants, _success } = t.params; - const descriptor = t.getDescriptor({ - fragmentShaderCode: ` + const descriptor = t.getDescriptor({ + fragmentShaderCode: ` override r: f32 = 0.0; override g: f32 = 0.0; override 数: f32 = 0.0; @@ -106,80 +105,80 @@ Tests calling createRenderPipeline(Async) validation for overridable constants i -> @location(0) vec4 { return vec4(r, g, b, a + 数 + sequencage); }`, - fragmentConstants, - }); - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + fragmentConstants }); -g.test('uninitialized,vertex') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); + +g.test('uninitialized,vertex'). +desc( + ` Tests calling createRenderPipeline(Async) validation for uninitialized overridable constants in vertex state. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { vertexConstants: {}, _success: false }, - { vertexConstants: { x: 1, y: 1 }, _success: false }, // z is missing - { vertexConstants: { x: 1, z: 1 }, _success: true }, - { vertexConstants: { x: 1, y: 1, z: 1, w: 1 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, vertexConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ vertexConstants: {}, _success: false }, +{ vertexConstants: { x: 1, y: 1 }, _success: false }, // z is missing +{ vertexConstants: { x: 1, z: 1 }, _success: true }, +{ vertexConstants: { x: 1, y: 1, z: 1, w: 1 }, _success: true }] +) +). +fn((t) => { + const { isAsync, vertexConstants, _success } = t.params; - t.doCreateRenderPipelineTest(isAsync, _success, { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest(isAsync, _success, { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` override x: f32; override y: f32 = 0.0; override z: f32; override w: f32 = 1.0; @vertex fn main() -> @builtin(position) vec4 { return vec4(x, y, z, w); - }`, - }), - entryPoint: 'main', - constants: vertexConstants, - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() -> @location(0) vec4 { + }` + }), + entryPoint: 'main', + constants: vertexConstants + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); +}); -g.test('uninitialized,fragment') - .desc( - ` +g.test('uninitialized,fragment'). +desc( + ` Tests calling createRenderPipeline(Async) validation for uninitialized overridable constants in fragment state. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { fragmentConstants: {}, _success: false }, - { fragmentConstants: { r: 1, g: 1 }, _success: false }, // b is missing - { fragmentConstants: { r: 1, b: 1 }, _success: true }, - { fragmentConstants: { r: 1, g: 1, b: 1, a: 1 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, fragmentConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ fragmentConstants: {}, _success: false }, +{ fragmentConstants: { r: 1, g: 1 }, _success: false }, // b is missing +{ fragmentConstants: { r: 1, b: 1 }, _success: true }, +{ fragmentConstants: { r: 1, g: 1, b: 1, a: 1 }, _success: true }] +) +). +fn((t) => { + const { isAsync, fragmentConstants, _success } = t.params; - const descriptor = t.getDescriptor({ - fragmentShaderCode: ` + const descriptor = t.getDescriptor({ + fragmentShaderCode: ` override r: f32; override g: f32 = 0.0; override b: f32; @@ -189,83 +188,83 @@ Tests calling createRenderPipeline(Async) validation for uninitialized overridab return vec4(r, g, b, a); } `, - fragmentConstants, - }); - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + fragmentConstants }); -g.test('value,type_error,vertex') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); + +g.test('value,type_error,vertex'). +desc( + ` Tests calling createRenderPipeline(Async) validation for invalid constant values like inf, NaN will results in TypeError. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { vertexConstants: { cf: 1 }, _success: true }, // control - { vertexConstants: { cf: NaN }, _success: false }, - { vertexConstants: { cf: Number.POSITIVE_INFINITY }, _success: false }, - { vertexConstants: { cf: Number.NEGATIVE_INFINITY }, _success: false }, - ]) - ) - .fn(t => { - const { isAsync, vertexConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ vertexConstants: { cf: 1 }, _success: true }, // control +{ vertexConstants: { cf: NaN }, _success: false }, +{ vertexConstants: { cf: Number.POSITIVE_INFINITY }, _success: false }, +{ vertexConstants: { cf: Number.NEGATIVE_INFINITY }, _success: false }] +) +). +fn((t) => { + const { isAsync, vertexConstants, _success } = t.params; - t.doCreateRenderPipelineTest( - isAsync, - _success, - { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest( + isAsync, + _success, + { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` override cf: f32 = 0.0; @vertex fn main() -> @builtin(position) vec4 { _ = cf; return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - constants: vertexConstants, - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() -> @location(0) vec4 { - return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, + }` + }), + entryPoint: 'main', + constants: vertexConstants }, - 'TypeError' - ); - }); + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() -> @location(0) vec4 { + return vec4(0.0, 1.0, 0.0, 1.0); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } + }, + 'TypeError' + ); +}); -g.test('value,type_error,fragment') - .desc( - ` +g.test('value,type_error,fragment'). +desc( + ` Tests calling createRenderPipeline(Async) validation for invalid constant values like inf, NaN will results in TypeError. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { fragmentConstants: { cf: 1 }, _success: true }, // control - { fragmentConstants: { cf: NaN }, _success: false }, - { fragmentConstants: { cf: Number.POSITIVE_INFINITY }, _success: false }, - { fragmentConstants: { cf: Number.NEGATIVE_INFINITY }, _success: false }, - ]) - ) - .fn(t => { - const { isAsync, fragmentConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ fragmentConstants: { cf: 1 }, _success: true }, // control +{ fragmentConstants: { cf: NaN }, _success: false }, +{ fragmentConstants: { cf: Number.POSITIVE_INFINITY }, _success: false }, +{ fragmentConstants: { cf: Number.NEGATIVE_INFINITY }, _success: false }] +) +). +fn((t) => { + const { isAsync, fragmentConstants, _success } = t.params; - const descriptor = t.getDescriptor({ - fragmentShaderCode: ` + const descriptor = t.getDescriptor({ + fragmentShaderCode: ` override cf: f32 = 0.0; @fragment fn main() -> @location(0) vec4 { @@ -273,55 +272,55 @@ Tests calling createRenderPipeline(Async) validation for invalid constant values return vec4(1.0, 1.0, 1.0, 1.0); } `, - fragmentConstants, - }); - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor, 'TypeError'); + fragmentConstants }); -g.test('value,validation_error,vertex') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, _success, descriptor, 'TypeError'); +}); + +g.test('value,validation_error,vertex'). +desc( + ` Tests calling createRenderPipeline(Async) validation for unrepresentable constant values in vertex stage. TODO(#2060): test with last_f64_castable. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { vertexConstants: { cu: kValue.u32.min }, _success: true }, - { vertexConstants: { cu: kValue.u32.min - 1 }, _success: false }, - { vertexConstants: { cu: kValue.u32.max }, _success: true }, - { vertexConstants: { cu: kValue.u32.max + 1 }, _success: false }, - { vertexConstants: { ci: kValue.i32.negative.min }, _success: true }, - { vertexConstants: { ci: kValue.i32.negative.min - 1 }, _success: false }, - { vertexConstants: { ci: kValue.i32.positive.max }, _success: true }, - { vertexConstants: { ci: kValue.i32.positive.max + 1 }, _success: false }, - { vertexConstants: { cf: kValue.f32.negative.min }, _success: true }, - { - vertexConstants: { cf: kValue.f32.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { vertexConstants: { cf: kValue.f32.positive.max }, _success: true }, - { - vertexConstants: { cf: kValue.f32.positive.first_non_castable_pipeline_override }, - _success: false, - }, - // Conversion to boolean can't fail - { vertexConstants: { cb: Number.MAX_VALUE }, _success: true }, - { vertexConstants: { cb: kValue.i32.negative.min - 1 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, vertexConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ vertexConstants: { cu: kValue.u32.min }, _success: true }, +{ vertexConstants: { cu: kValue.u32.min - 1 }, _success: false }, +{ vertexConstants: { cu: kValue.u32.max }, _success: true }, +{ vertexConstants: { cu: kValue.u32.max + 1 }, _success: false }, +{ vertexConstants: { ci: kValue.i32.negative.min }, _success: true }, +{ vertexConstants: { ci: kValue.i32.negative.min - 1 }, _success: false }, +{ vertexConstants: { ci: kValue.i32.positive.max }, _success: true }, +{ vertexConstants: { ci: kValue.i32.positive.max + 1 }, _success: false }, +{ vertexConstants: { cf: kValue.f32.negative.min }, _success: true }, +{ + vertexConstants: { cf: kValue.f32.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ vertexConstants: { cf: kValue.f32.positive.max }, _success: true }, +{ + vertexConstants: { cf: kValue.f32.positive.first_non_castable_pipeline_override }, + _success: false +}, +// Conversion to boolean can't fail +{ vertexConstants: { cb: Number.MAX_VALUE }, _success: true }, +{ vertexConstants: { cb: kValue.i32.negative.min - 1 }, _success: true }] +) +). +fn((t) => { + const { isAsync, vertexConstants, _success } = t.params; - t.doCreateRenderPipelineTest(isAsync, _success, { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest(isAsync, _success, { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` override cb: bool = false; override cu: u32 = 0u; override ci: i32 = 0; @@ -332,63 +331,63 @@ TODO(#2060): test with last_f64_castable. _ = ci; _ = cf; return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - constants: vertexConstants, - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() -> @location(0) vec4 { + }` + }), + entryPoint: 'main', + constants: vertexConstants + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); +}); -g.test('value,validation_error,fragment') - .desc( - ` +g.test('value,validation_error,fragment'). +desc( + ` Tests calling createRenderPipeline(Async) validation for unrepresentable constant values in fragment stage. TODO(#2060): test with last_f64_castable. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { fragmentConstants: { cu: kValue.u32.min }, _success: true }, - { fragmentConstants: { cu: kValue.u32.min - 1 }, _success: false }, - { fragmentConstants: { cu: kValue.u32.max }, _success: true }, - { fragmentConstants: { cu: kValue.u32.max + 1 }, _success: false }, - { fragmentConstants: { ci: kValue.i32.negative.min }, _success: true }, - { fragmentConstants: { ci: kValue.i32.negative.min - 1 }, _success: false }, - { fragmentConstants: { ci: kValue.i32.positive.max }, _success: true }, - { fragmentConstants: { ci: kValue.i32.positive.max + 1 }, _success: false }, - { fragmentConstants: { cf: kValue.f32.negative.min }, _success: true }, - { - fragmentConstants: { cf: kValue.f32.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { fragmentConstants: { cf: kValue.f32.positive.max }, _success: true }, - { - fragmentConstants: { cf: kValue.f32.positive.first_non_castable_pipeline_override }, - _success: false, - }, - // Conversion to boolean can't fail - { fragmentConstants: { cb: Number.MAX_VALUE }, _success: true }, - { fragmentConstants: { cb: kValue.i32.negative.min - 1 }, _success: true }, - ]) - ) - .fn(t => { - const { isAsync, fragmentConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ fragmentConstants: { cu: kValue.u32.min }, _success: true }, +{ fragmentConstants: { cu: kValue.u32.min - 1 }, _success: false }, +{ fragmentConstants: { cu: kValue.u32.max }, _success: true }, +{ fragmentConstants: { cu: kValue.u32.max + 1 }, _success: false }, +{ fragmentConstants: { ci: kValue.i32.negative.min }, _success: true }, +{ fragmentConstants: { ci: kValue.i32.negative.min - 1 }, _success: false }, +{ fragmentConstants: { ci: kValue.i32.positive.max }, _success: true }, +{ fragmentConstants: { ci: kValue.i32.positive.max + 1 }, _success: false }, +{ fragmentConstants: { cf: kValue.f32.negative.min }, _success: true }, +{ + fragmentConstants: { cf: kValue.f32.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ fragmentConstants: { cf: kValue.f32.positive.max }, _success: true }, +{ + fragmentConstants: { cf: kValue.f32.positive.first_non_castable_pipeline_override }, + _success: false +}, +// Conversion to boolean can't fail +{ fragmentConstants: { cb: Number.MAX_VALUE }, _success: true }, +{ fragmentConstants: { cb: kValue.i32.negative.min - 1 }, _success: true }] +) +). +fn((t) => { + const { isAsync, fragmentConstants, _success } = t.params; - const descriptor = t.getDescriptor({ - fragmentShaderCode: ` + const descriptor = t.getDescriptor({ + fragmentShaderCode: ` override cb: bool = false; override cu: u32 = 0u; override ci: i32 = 0; @@ -402,124 +401,124 @@ TODO(#2060): test with last_f64_castable. return vec4(1.0, 1.0, 1.0, 1.0); } `, - fragmentConstants, - }); - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + fragmentConstants }); -g.test('value,validation_error,f16,vertex') - .desc( - ` + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); + +g.test('value,validation_error,f16,vertex'). +desc( + ` Tests calling createRenderPipeline(Async) validation for unrepresentable f16 constant values in vertex stage. TODO(#2060): Tighten the cases around the valid/invalid boundary once we have WGSL spec clarity on whether values like f16.positive.last_f64_castable would be valid. See issue. ` - ) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { vertexConstants: { cf16: kValue.f16.negative.min }, _success: true }, - { - vertexConstants: { cf16: kValue.f16.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { vertexConstants: { cf16: kValue.f16.positive.max }, _success: true }, - { - vertexConstants: { cf16: kValue.f16.positive.first_non_castable_pipeline_override }, - _success: false, - }, - { vertexConstants: { cf16: kValue.f32.negative.min }, _success: false }, - { vertexConstants: { cf16: kValue.f32.positive.max }, _success: false }, - { - vertexConstants: { cf16: kValue.f32.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { - vertexConstants: { cf16: kValue.f32.positive.first_non_castable_pipeline_override }, - _success: false, - }, - ]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(t => { - const { isAsync, vertexConstants, _success } = t.params; +). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ vertexConstants: { cf16: kValue.f16.negative.min }, _success: true }, +{ + vertexConstants: { cf16: kValue.f16.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ vertexConstants: { cf16: kValue.f16.positive.max }, _success: true }, +{ + vertexConstants: { cf16: kValue.f16.positive.first_non_castable_pipeline_override }, + _success: false +}, +{ vertexConstants: { cf16: kValue.f32.negative.min }, _success: false }, +{ vertexConstants: { cf16: kValue.f32.positive.max }, _success: false }, +{ + vertexConstants: { cf16: kValue.f32.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ + vertexConstants: { cf16: kValue.f32.positive.first_non_castable_pipeline_override }, + _success: false +}] +) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn((t) => { + const { isAsync, vertexConstants, _success } = t.params; - t.doCreateRenderPipelineTest(isAsync, _success, { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: ` + t.doCreateRenderPipelineTest(isAsync, _success, { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: ` enable f16; override cf16: f16 = 0.0h; @vertex fn main() -> @builtin(position) vec4 { _ = cf16; return vec4(0.0, 0.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - constants: vertexConstants, - }, - fragment: { - module: t.device.createShaderModule({ - code: `@fragment fn main() -> @location(0) vec4 { + }` + }), + entryPoint: 'main', + constants: vertexConstants + }, + fragment: { + module: t.device.createShaderModule({ + code: `@fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); + }` + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); +}); -g.test('value,validation_error,f16,fragment') - .desc( - ` +g.test('value,validation_error,f16,fragment'). +desc( + ` Tests calling createRenderPipeline(Async) validation for unrepresentable f16 constant values in fragment stage. TODO(#2060): Tighten the cases around the valid/invalid boundary once we have WGSL spec clarity on whether values like f16.positive.last_f64_castable would be valid. See issue. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => - u // - .combine('isAsync', [true, false]) - .combineWithParams([ - { fragmentConstants: { cf16: kValue.f16.negative.min }, _success: true }, - { - fragmentConstants: { cf16: kValue.f16.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { fragmentConstants: { cf16: kValue.f16.positive.max }, _success: true }, - { - fragmentConstants: { cf16: kValue.f16.positive.first_non_castable_pipeline_override }, - _success: false, - }, - { fragmentConstants: { cf16: kValue.f32.negative.min }, _success: false }, - { fragmentConstants: { cf16: kValue.f32.positive.max }, _success: false }, - { - fragmentConstants: { cf16: kValue.f32.negative.first_non_castable_pipeline_override }, - _success: false, - }, - { - fragmentConstants: { cf16: kValue.f32.positive.first_non_castable_pipeline_override }, - _success: false, - }, - ]) - ) - .fn(t => { - const { isAsync, fragmentConstants, _success } = t.params; +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u // +.combine('isAsync', [true, false]). +combineWithParams([ +{ fragmentConstants: { cf16: kValue.f16.negative.min }, _success: true }, +{ + fragmentConstants: { cf16: kValue.f16.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ fragmentConstants: { cf16: kValue.f16.positive.max }, _success: true }, +{ + fragmentConstants: { cf16: kValue.f16.positive.first_non_castable_pipeline_override }, + _success: false +}, +{ fragmentConstants: { cf16: kValue.f32.negative.min }, _success: false }, +{ fragmentConstants: { cf16: kValue.f32.positive.max }, _success: false }, +{ + fragmentConstants: { cf16: kValue.f32.negative.first_non_castable_pipeline_override }, + _success: false +}, +{ + fragmentConstants: { cf16: kValue.f32.positive.first_non_castable_pipeline_override }, + _success: false +}] +) +). +fn((t) => { + const { isAsync, fragmentConstants, _success } = t.params; - const descriptor = t.getDescriptor({ - fragmentShaderCode: ` + const descriptor = t.getDescriptor({ + fragmentShaderCode: ` enable f16; override cf16: f16 = 0.0h; @@ -529,8 +528,8 @@ clarity on whether values like f16.positive.last_f64_castable would be valid. Se return vec4(1.0, 1.0, 1.0, 1.0); } `, - fragmentConstants, - }); - - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); + fragmentConstants }); + + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/primitive_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/primitive_state.spec.js index 16cc827fd2c..249159a4787 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/primitive_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/primitive_state.spec.js @@ -1,43 +1,42 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests validation of GPUPrimitiveState of createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kPrimitiveTopology, kIndexFormat } from '../../../capability_info.js'; import { CreateRenderPipelineValidationTest } from './common.js'; export const g = makeTestGroup(CreateRenderPipelineValidationTest); -g.test('strip_index_format') - .desc( - `If primitive.topology is not "line-strip" or "triangle-strip", primitive.stripIndexFormat must be undefined.` - ) - .params(u => - u - .combine('isAsync', [false, true]) - .combine('topology', [undefined, ...kPrimitiveTopology]) - .combine('stripIndexFormat', [undefined, ...kIndexFormat]) - ) - .fn(t => { - const { isAsync, topology, stripIndexFormat } = t.params; +g.test('strip_index_format'). +desc( + `If primitive.topology is not "line-strip" or "triangle-strip", primitive.stripIndexFormat must be undefined.` +). +params((u) => +u. +combine('isAsync', [false, true]). +combine('topology', [undefined, ...kPrimitiveTopology]). +combine('stripIndexFormat', [undefined, ...kIndexFormat]) +). +fn((t) => { + const { isAsync, topology, stripIndexFormat } = t.params; - const descriptor = t.getDescriptor({ primitive: { topology, stripIndexFormat } }); + const descriptor = t.getDescriptor({ primitive: { topology, stripIndexFormat } }); - const _success = - topology === 'line-strip' || topology === 'triangle-strip' || stripIndexFormat === undefined; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + const _success = + topology === 'line-strip' || topology === 'triangle-strip' || stripIndexFormat === undefined; + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); -g.test('unclipped_depth') - .desc(`If primitive.unclippedDepth is true, features must contain "depth-clip-control".`) - .params(u => u.combine('isAsync', [false, true]).combine('unclippedDepth', [false, true])) - .fn(t => { - const { isAsync, unclippedDepth } = t.params; +g.test('unclipped_depth'). +desc(`If primitive.unclippedDepth is true, features must contain "depth-clip-control".`). +params((u) => u.combine('isAsync', [false, true]).combine('unclippedDepth', [false, true])). +fn((t) => { + const { isAsync, unclippedDepth } = t.params; - const descriptor = t.getDescriptor({ primitive: { unclippedDepth } }); + const descriptor = t.getDescriptor({ primitive: { unclippedDepth } }); - const _success = !unclippedDepth || t.device.features.has('depth-clip-control'); - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + const _success = !unclippedDepth || t.device.features.has('depth-clip-control'); + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/shader_module.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/shader_module.spec.js index d3b7c220930..72b44e6811e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/shader_module.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/shader_module.spec.js @@ -1,16 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests createRenderPipeline validation issues related to the shader modules. Note: entry point matching tests are in ../shader_module/entry_point.spec.ts -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { getFragmentShaderCodeWithOutput, kDefaultVertexShaderCode, - kDefaultFragmentShaderCode, -} from '../../../util/shader.js'; + kDefaultFragmentShaderCode } from +'../../../util/shader.js'; import { CreateRenderPipelineValidationTest } from './common.js'; @@ -18,96 +17,96 @@ export const g = makeTestGroup(CreateRenderPipelineValidationTest); const values = [0, 1, 0, 1]; -g.test('device_mismatch') - .desc( - 'Tests createRenderPipeline(Async) cannot be called with a shader module created from another device' - ) - .paramsSubcasesOnly(u => - u.combine('isAsync', [true, false]).combineWithParams([ - { vertex_mismatched: false, fragment_mismatched: false, _success: true }, - { vertex_mismatched: true, fragment_mismatched: false, _success: false }, - { vertex_mismatched: false, fragment_mismatched: true, _success: false }, - ]) - ) - .beforeAllSubcases(t => { - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { isAsync, vertex_mismatched, fragment_mismatched, _success } = t.params; +g.test('device_mismatch'). +desc( + 'Tests createRenderPipeline(Async) cannot be called with a shader module created from another device' +). +paramsSubcasesOnly((u) => +u.combine('isAsync', [true, false]).combineWithParams([ +{ vertex_mismatched: false, fragment_mismatched: false, _success: true }, +{ vertex_mismatched: true, fragment_mismatched: false, _success: false }, +{ vertex_mismatched: false, fragment_mismatched: true, _success: false }] +) +). +beforeAllSubcases((t) => { + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { isAsync, vertex_mismatched, fragment_mismatched, _success } = t.params; - const code = ` + const code = ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); } `; - const descriptor = { - vertex: { - module: vertex_mismatched - ? t.mismatchedDevice.createShaderModule({ code }) - : t.device.createShaderModule({ code }), - entryPoint: 'main', - }, - fragment: { - module: fragment_mismatched - ? t.mismatchedDevice.createShaderModule({ - code: getFragmentShaderCodeWithOutput([ - { values, plainType: 'f32', componentCount: 4 }, - ]), - }) - : t.device.createShaderModule({ - code: getFragmentShaderCodeWithOutput([ - { values, plainType: 'f32', componentCount: 4 }, - ]), - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - layout: t.getPipelineLayout(), - }; + const descriptor = { + vertex: { + module: vertex_mismatched ? + t.mismatchedDevice.createShaderModule({ code }) : + t.device.createShaderModule({ code }), + entryPoint: 'main' + }, + fragment: { + module: fragment_mismatched ? + t.mismatchedDevice.createShaderModule({ + code: getFragmentShaderCodeWithOutput([ + { values, plainType: 'f32', componentCount: 4 }] + ) + }) : + t.device.createShaderModule({ + code: getFragmentShaderCodeWithOutput([ + { values, plainType: 'f32', componentCount: 4 }] + ) + }), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + }, + layout: t.getPipelineLayout() + }; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); -g.test('invalid,vertex') - .desc(`Tests shader module must be valid.`) - .params(u => u.combine('isAsync', [true, false]).combine('isVertexShaderValid', [true, false])) - .fn(t => { - const { isAsync, isVertexShaderValid } = t.params; - t.doCreateRenderPipelineTest(isAsync, isVertexShaderValid, { - layout: 'auto', - vertex: { - module: isVertexShaderValid - ? t.device.createShaderModule({ - code: kDefaultVertexShaderCode, - }) - : t.createInvalidShaderModule(), - entryPoint: 'main', - }, - }); +g.test('invalid,vertex'). +desc(`Tests shader module must be valid.`). +params((u) => u.combine('isAsync', [true, false]).combine('isVertexShaderValid', [true, false])). +fn((t) => { + const { isAsync, isVertexShaderValid } = t.params; + t.doCreateRenderPipelineTest(isAsync, isVertexShaderValid, { + layout: 'auto', + vertex: { + module: isVertexShaderValid ? + t.device.createShaderModule({ + code: kDefaultVertexShaderCode + }) : + t.createInvalidShaderModule(), + entryPoint: 'main' + } }); +}); -g.test('invalid,fragment') - .desc(`Tests shader module must be valid.`) - .params(u => u.combine('isAsync', [true, false]).combine('isFragmentShaderValid', [true, false])) - .fn(t => { - const { isAsync, isFragmentShaderValid } = t.params; - t.doCreateRenderPipelineTest(isAsync, isFragmentShaderValid, { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: kDefaultVertexShaderCode, - }), - entryPoint: 'main', - }, - fragment: { - module: isFragmentShaderValid - ? t.device.createShaderModule({ - code: kDefaultFragmentShaderCode, - }) - : t.createInvalidShaderModule(), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); +g.test('invalid,fragment'). +desc(`Tests shader module must be valid.`). +params((u) => u.combine('isAsync', [true, false]).combine('isFragmentShaderValid', [true, false])). +fn((t) => { + const { isAsync, isFragmentShaderValid } = t.params; + t.doCreateRenderPipelineTest(isAsync, isFragmentShaderValid, { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: kDefaultVertexShaderCode + }), + entryPoint: 'main' + }, + fragment: { + module: isFragmentShaderValid ? + t.device.createShaderModule({ + code: kDefaultFragmentShaderCode + }) : + t.createInvalidShaderModule(), + entryPoint: 'main', + targets: [{ format: 'rgba8unorm' }] + } }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/vertex_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/vertex_state.spec.js index 852f39febd4..c0e23749f96 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/vertex_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/render_pipeline/vertex_state.spec.js @@ -1,13 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This test dedicatedly tests validation of GPUVertexState of createRenderPipeline. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { filterUniqueValueTestVariants, - makeValueTestVariant, -} from '../../../../common/util/util.js'; + makeValueTestVariant } from +'../../../../common/util/util.js'; import { kVertexFormats, kVertexFormatInfo } from '../../../capability_info.js'; import { ValidationTest } from '../validation_test.js'; @@ -18,14 +17,19 @@ const VERTEX_SHADER_CODE_WITH_NO_INPUT = ` `; function addTestAttributes( - attributes, - { - testAttribute, - testAttributeAtStart = true, - extraAttributeCount = 0, - extraAttributeSkippedLocations = [], - } -) { +attributes, +{ + testAttribute, + testAttributeAtStart = true, + extraAttributeCount = 0, + extraAttributeSkippedLocations = [] + + + + + +}) +{ // Add a bunch of dummy attributes each with a different location such that none of the locations // are in extraAttributeSkippedLocations let currentLocation = 0; @@ -52,36 +56,43 @@ function addTestAttributes( } class F extends ValidationTest { - getDescriptor(buffers, vertexShaderCode) { + getDescriptor( + buffers, + vertexShaderCode) + { const descriptor = { layout: 'auto', vertex: { module: this.device.createShaderModule({ code: vertexShaderCode }), entryPoint: 'main', - buffers, + buffers }, fragment: { module: this.device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }; return descriptor; } - testVertexState(success, buffers, vertexShader = VERTEX_SHADER_CODE_WITH_NO_INPUT) { + testVertexState( + success, + buffers, + vertexShader = VERTEX_SHADER_CODE_WITH_NO_INPUT) + { const vsModule = this.device.createShaderModule({ code: vertexShader }); const fsModule = this.device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); - }`, + }` }); this.expectValidationError(() => { @@ -90,14 +101,14 @@ class F extends ValidationTest { vertex: { module: vsModule, entryPoint: 'main', - buffers, + buffers }, fragment: { module: fsModule, entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); }, !success); } @@ -127,636 +138,628 @@ class F extends ValidationTest { export const g = makeTestGroup(F); -g.test('max_vertex_buffer_limit') - .desc( - `Test that only up to vertex buffers are allowed. +g.test('max_vertex_buffer_limit'). +desc( + `Test that only up to vertex buffers are allowed. - Tests with 0, 1, limits, limits + 1 vertex buffers. - Tests with the last buffer having an attribute or not. This also happens to test that vertex buffers with no attributes are allowed and that a vertex state with no buffers is allowed.` - ) - .paramsSubcasesOnly(u => - u // - .combine('countVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 1, add: 1 }, - ]) - .combine('lastEmpty', [false, true]) - ) - .fn(t => { - const { countVariant, lastEmpty } = t.params; - const count = t.makeLimitVariant('maxVertexBuffers', countVariant); - const vertexBuffers = []; - for (let i = 0; i < count; i++) { - if (lastEmpty || i !== count - 1) { - vertexBuffers.push({ attributes: [], arrayStride: 0 }); - } else { - vertexBuffers.push({ - attributes: [{ format: 'float32', offset: 0, shaderLocation: 0 }], - arrayStride: 0, - }); - } +). +paramsSubcasesOnly((u) => +u // +.combine('countVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: 0 }, +{ mult: 1, add: 1 }] +). +combine('lastEmpty', [false, true]) +). +fn((t) => { + const { countVariant, lastEmpty } = t.params; + const count = t.makeLimitVariant('maxVertexBuffers', countVariant); + const vertexBuffers = []; + for (let i = 0; i < count; i++) { + if (lastEmpty || i !== count - 1) { + vertexBuffers.push({ attributes: [], arrayStride: 0 }); + } else { + vertexBuffers.push({ + attributes: [{ format: 'float32', offset: 0, shaderLocation: 0 }], + arrayStride: 0 + }); } + } - const success = count <= t.device.limits.maxVertexBuffers; - t.testVertexState(success, vertexBuffers); - }); + const success = count <= t.device.limits.maxVertexBuffers; + t.testVertexState(success, vertexBuffers); +}); -g.test('max_vertex_attribute_limit') - .desc( - `Test that only up to vertex attributes are allowed. +g.test('max_vertex_attribute_limit'). +desc( + `Test that only up to vertex attributes are allowed. - Tests with 0, 1, limit, limits + 1 vertex attribute. - Tests with 0, 1, 4 attributes per buffer (with remaining attributes in the last buffer).` - ) - .paramsSubcasesOnly(u => - u // - .combine('attribCountVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: 0 }, - { mult: 1, add: 1 }, - ]) - .combine('attribsPerBuffer', [0, 1, 4]) - ) - .fn(t => { - const { attribCountVariant, attribsPerBuffer } = t.params; - const attribCount = t.makeLimitVariant('maxVertexAttributes', attribCountVariant); +). +paramsSubcasesOnly((u) => +u // +.combine('attribCountVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: 0 }, +{ mult: 1, add: 1 }] +). +combine('attribsPerBuffer', [0, 1, 4]) +). +fn((t) => { + const { attribCountVariant, attribsPerBuffer } = t.params; + const attribCount = t.makeLimitVariant('maxVertexAttributes', attribCountVariant); - const vertexBuffers = []; + const vertexBuffers = []; - let attribsAdded = 0; - while (attribsAdded !== attribCount) { - // Choose how many attributes to add for this buffer. The last buffer gets all remaining attributes. - let targetCount = Math.min(attribCount, attribsAdded + attribsPerBuffer); - if (vertexBuffers.length === t.device.limits.maxVertexBuffers - 1) { - targetCount = attribCount; - } - - const attributes = []; - while (attribsAdded !== targetCount) { - attributes.push({ format: 'float32', offset: 0, shaderLocation: attribsAdded }); - attribsAdded++; - } - - vertexBuffers.push({ arrayStride: 0, attributes }); + let attribsAdded = 0; + while (attribsAdded !== attribCount) { + // Choose how many attributes to add for this buffer. The last buffer gets all remaining attributes. + let targetCount = Math.min(attribCount, attribsAdded + attribsPerBuffer); + if (vertexBuffers.length === t.device.limits.maxVertexBuffers - 1) { + targetCount = attribCount; } - const success = attribCount <= t.device.limits.maxVertexAttributes; - t.testVertexState(success, vertexBuffers); - }); + const attributes = []; + while (attribsAdded !== targetCount) { + attributes.push({ format: 'float32', offset: 0, shaderLocation: attribsAdded }); + attribsAdded++; + } -g.test('max_vertex_buffer_array_stride_limit') - .desc( - `Test that the vertex buffer arrayStride must be at most . + vertexBuffers.push({ arrayStride: 0, attributes }); + } + + const success = attribCount <= t.device.limits.maxVertexAttributes; + t.testVertexState(success, vertexBuffers); +}); + +g.test('max_vertex_buffer_array_stride_limit'). +desc( + `Test that the vertex buffer arrayStride must be at most . - Test for various vertex buffer indices - Test for array strides 0, 4, 256, limit - 4, limit, limit + 4` - ) - .paramsSubcasesOnly(u => - u // - .combine('vertexBufferIndexVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('arrayStrideVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 4 }, - { mult: 0, add: 256 }, - { mult: 1, add: -4 }, - { mult: 1, add: 0 }, - { mult: 1, add: +4 }, - ]) - ) - .fn(t => { - const { vertexBufferIndexVariant, arrayStrideVariant } = t.params; - const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); - const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); - const vertexBuffers = []; - vertexBuffers[vertexBufferIndex] = { arrayStride, attributes: [] }; +). +paramsSubcasesOnly((u) => +u // +.combine('vertexBufferIndexVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('arrayStrideVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 4 }, +{ mult: 0, add: 256 }, +{ mult: 1, add: -4 }, +{ mult: 1, add: 0 }, +{ mult: 1, add: +4 }] +) +). +fn((t) => { + const { vertexBufferIndexVariant, arrayStrideVariant } = t.params; + const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); + const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); + const vertexBuffers = []; + vertexBuffers[vertexBufferIndex] = { arrayStride, attributes: [] }; - const success = arrayStride <= t.device.limits.maxVertexBufferArrayStride; - t.testVertexState(success, vertexBuffers); - }); + const success = arrayStride <= t.device.limits.maxVertexBufferArrayStride; + t.testVertexState(success, vertexBuffers); +}); -g.test('vertex_buffer_array_stride_limit_alignment') - .desc( - `Test that the vertex buffer arrayStride must be a multiple of 4 (including 0). +g.test('vertex_buffer_array_stride_limit_alignment'). +desc( + `Test that the vertex buffer arrayStride must be a multiple of 4 (including 0). - Test for various vertex buffer indices - Test for array strides 0, 1, 2, 4, limit - 4, limit - 2, limit` - ) - .paramsSubcasesOnly(u => - u // - .combine('vertexBufferIndexVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('arrayStrideVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 2 }, - { mult: 0, add: 4 }, - { mult: 1, add: -4 }, - { mult: 1, add: -2 }, - { mult: 1, add: 0 }, - ]) - ) - .fn(t => { - const { vertexBufferIndexVariant, arrayStrideVariant } = t.params; - const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); - const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); +). +paramsSubcasesOnly((u) => +u // +.combine('vertexBufferIndexVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('arrayStrideVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 0, add: 2 }, +{ mult: 0, add: 4 }, +{ mult: 1, add: -4 }, +{ mult: 1, add: -2 }, +{ mult: 1, add: 0 }] +) +). +fn((t) => { + const { vertexBufferIndexVariant, arrayStrideVariant } = t.params; + const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); + const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); - const vertexBuffers = []; - vertexBuffers[vertexBufferIndex] = { arrayStride, attributes: [] }; + const vertexBuffers = []; + vertexBuffers[vertexBufferIndex] = { arrayStride, attributes: [] }; - const success = arrayStride % 4 === 0; - t.testVertexState(success, vertexBuffers); - }); + const success = arrayStride % 4 === 0; + t.testVertexState(success, vertexBuffers); +}); -g.test('vertex_attribute_shaderLocation_limit') - .desc( - `Test shaderLocation must be less than maxVertexAttributes. +g.test('vertex_attribute_shaderLocation_limit'). +desc( + `Test shaderLocation must be less than maxVertexAttributes. - Test for various vertex buffer indices - Test for various amounts of attributes in that vertex buffer - Test for shaderLocation 0, 1, limit - 1, limit` - ) - .paramsSubcasesOnly(u => - u // - .combine('vertexBufferIndexVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('extraAttributeCountVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('testAttributeAtStart', [false, true]) - .combine('testShaderLocationVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - { mult: 1, add: 0 }, - ]) - ) - .fn(t => { - const { - vertexBufferIndexVariant, - extraAttributeCountVariant, - testShaderLocationVariant, - testAttributeAtStart, - } = t.params; - const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); - const extraAttributeCount = t.makeLimitVariant( - 'maxVertexAttributes', - extraAttributeCountVariant - ); +). +paramsSubcasesOnly((u) => +u // +.combine('vertexBufferIndexVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('extraAttributeCountVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('testAttributeAtStart', [false, true]). +combine('testShaderLocationVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }, +{ mult: 1, add: 0 }] +) +). +fn((t) => { + const { + vertexBufferIndexVariant, + extraAttributeCountVariant, + testShaderLocationVariant, + testAttributeAtStart + } = t.params; + const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); + const extraAttributeCount = t.makeLimitVariant( + 'maxVertexAttributes', + extraAttributeCountVariant + ); + const testShaderLocation = t.makeLimitVariant('maxVertexAttributes', testShaderLocationVariant); - const testShaderLocation = t.makeLimitVariant('maxVertexAttributes', testShaderLocationVariant); - - const attributes = []; - addTestAttributes(attributes, { - testAttribute: { format: 'float32', offset: 0, shaderLocation: testShaderLocation }, - testAttributeAtStart, - extraAttributeCount, - extraAttributeSkippedLocations: [testShaderLocation], - }); - - const vertexBuffers = []; - vertexBuffers[vertexBufferIndex] = { arrayStride: 256, attributes }; - - const success = testShaderLocation < t.device.limits.maxVertexAttributes; - t.testVertexState(success, vertexBuffers); + const attributes = []; + addTestAttributes(attributes, { + testAttribute: { format: 'float32', offset: 0, shaderLocation: testShaderLocation }, + testAttributeAtStart, + extraAttributeCount, + extraAttributeSkippedLocations: [testShaderLocation] }); -g.test('vertex_attribute_shaderLocation_unique') - .desc( - `Test that shaderLocation must be unique in the vertex state. + const vertexBuffers = []; + vertexBuffers[vertexBufferIndex] = { arrayStride: 256, attributes }; + + const success = testShaderLocation < t.device.limits.maxVertexAttributes; + t.testVertexState(success, vertexBuffers); +}); + +g.test('vertex_attribute_shaderLocation_unique'). +desc( + `Test that shaderLocation must be unique in the vertex state. - Test for various pairs of buffers that contain the potentially conflicting attributes - Test for the potentially conflicting attributes in various places in the buffers (with dummy attributes) - Test for various shaderLocations that conflict or not` - ) - .paramsSubcasesOnly(u => - u // - .combine('vertexBufferIndexAVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('vertexBufferIndexBVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('testAttributeAtStartA', [false, true]) - .combine('testAttributeAtStartB', [false, true]) - .combine('shaderLocationAVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 7 }, - { mult: 1, add: -1 }, - ]) - .combine('shaderLocationBVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 7 }, - { mult: 1, add: -1 }, - ]) - .combine('extraAttributeCount', [0, 4]) - ) - .fn(t => { - const { - vertexBufferIndexAVariant, - vertexBufferIndexBVariant, - testAttributeAtStartA, - testAttributeAtStartB, - shaderLocationAVariant, - shaderLocationBVariant, - extraAttributeCount, - } = t.params; - const vertexBufferIndexA = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexAVariant); - const vertexBufferIndexB = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexBVariant); - const shaderLocationA = t.makeLimitVariant('maxVertexAttributes', shaderLocationAVariant); - const shaderLocationB = t.makeLimitVariant('maxVertexAttributes', shaderLocationBVariant); +). +paramsSubcasesOnly((u) => +u // +.combine('vertexBufferIndexAVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('vertexBufferIndexBVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('testAttributeAtStartA', [false, true]). +combine('testAttributeAtStartB', [false, true]). +combine('shaderLocationAVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 0, add: 7 }, +{ mult: 1, add: -1 }] +). +combine('shaderLocationBVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 0, add: 7 }, +{ mult: 1, add: -1 }] +). +combine('extraAttributeCount', [0, 4]) +). +fn((t) => { + const { + vertexBufferIndexAVariant, + vertexBufferIndexBVariant, + testAttributeAtStartA, + testAttributeAtStartB, + shaderLocationAVariant, + shaderLocationBVariant, + extraAttributeCount + } = t.params; + const vertexBufferIndexA = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexAVariant); + const vertexBufferIndexB = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexBVariant); + const shaderLocationA = t.makeLimitVariant('maxVertexAttributes', shaderLocationAVariant); + const shaderLocationB = t.makeLimitVariant('maxVertexAttributes', shaderLocationBVariant); - // Depending on the params, the vertexBuffer for A and B can be the same or different. To support - // both cases without code changes we treat `vertexBufferAttributes` as a map from indices to - // vertex buffer descriptors, with A and B potentially reusing the same JS object if they have the - // same index. - const vertexBufferAttributes = []; - vertexBufferAttributes[vertexBufferIndexA] = []; - vertexBufferAttributes[vertexBufferIndexB] = []; + // Depending on the params, the vertexBuffer for A and B can be the same or different. To support + // both cases without code changes we treat `vertexBufferAttributes` as a map from indices to + // vertex buffer descriptors, with A and B potentially reusing the same JS object if they have the + // same index. + const vertexBufferAttributes = []; + vertexBufferAttributes[vertexBufferIndexA] = []; + vertexBufferAttributes[vertexBufferIndexB] = []; - // Add the dummy attributes for attribute A - const attributesA = vertexBufferAttributes[vertexBufferIndexA]; - addTestAttributes(attributesA, { - testAttribute: { format: 'float32', offset: 0, shaderLocation: shaderLocationA }, - testAttributeAtStart: testAttributeAtStartA, - extraAttributeCount, - extraAttributeSkippedLocations: [shaderLocationA, shaderLocationB], - }); - - // Add attribute B. Not that attributesB can be the same object as attributesA so they end - // up in the same vertex buffer. - const attributesB = vertexBufferAttributes[vertexBufferIndexB]; - addTestAttributes(attributesB, { - testAttribute: { format: 'float32', offset: 0, shaderLocation: shaderLocationB }, - testAttributeAtStart: testAttributeAtStartB, - }); - - // Use the attributes to make the list of vertex buffers. Note that we might be setting the same vertex - // buffer twice, but that only happens when it is the only vertex buffer. - const vertexBuffers = []; - vertexBuffers[vertexBufferIndexA] = { arrayStride: 256, attributes: attributesA }; - vertexBuffers[vertexBufferIndexB] = { arrayStride: 256, attributes: attributesB }; - - // Note that an empty vertex shader will be used so errors only happens because of the conflict - // in the vertex state. - const success = shaderLocationA !== shaderLocationB; - t.testVertexState(success, vertexBuffers); + // Add the dummy attributes for attribute A + const attributesA = vertexBufferAttributes[vertexBufferIndexA]; + addTestAttributes(attributesA, { + testAttribute: { format: 'float32', offset: 0, shaderLocation: shaderLocationA }, + testAttributeAtStart: testAttributeAtStartA, + extraAttributeCount, + extraAttributeSkippedLocations: [shaderLocationA, shaderLocationB] }); -g.test('vertex_shader_input_location_limit') - .desc( - `Test that vertex shader's input's location decoration must be less than maxVertexAttributes. + // Add attribute B. Not that attributesB can be the same object as attributesA so they end + // up in the same vertex buffer. + const attributesB = vertexBufferAttributes[vertexBufferIndexB]; + addTestAttributes(attributesB, { + testAttribute: { format: 'float32', offset: 0, shaderLocation: shaderLocationB }, + testAttributeAtStart: testAttributeAtStartB + }); + + // Use the attributes to make the list of vertex buffers. Note that we might be setting the same vertex + // buffer twice, but that only happens when it is the only vertex buffer. + const vertexBuffers = []; + vertexBuffers[vertexBufferIndexA] = { arrayStride: 256, attributes: attributesA }; + vertexBuffers[vertexBufferIndexB] = { arrayStride: 256, attributes: attributesB }; + + // Note that an empty vertex shader will be used so errors only happens because of the conflict + // in the vertex state. + const success = shaderLocationA !== shaderLocationB; + t.testVertexState(success, vertexBuffers); +}); + +g.test('vertex_shader_input_location_limit'). +desc( + `Test that vertex shader's input's location decoration must be less than maxVertexAttributes. - Test for shaderLocation 0, 1, limit - 1, limit, MAX_I32 (the WGSL spec requires a non-negative i32)` - ) - .paramsSubcasesOnly(u => - u // - .combine('testLocationVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - { mult: 1, add: 0 }, - { mult: 0, add: 2 ** 31 - 1 }, - ]) - ) - .fn(t => { - const { testLocationVariant } = t.params; - const testLocation = t.makeLimitVariant('maxVertexAttributes', testLocationVariant); +). +paramsSubcasesOnly((u) => +u // +.combine('testLocationVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }, +{ mult: 1, add: 0 }, +{ mult: 0, add: 2 ** 31 - 1 }] +) +). +fn((t) => { + const { testLocationVariant } = t.params; + const testLocation = t.makeLimitVariant('maxVertexAttributes', testLocationVariant); - const shader = t.generateTestVertexShader([ - { - type: 'vec4', - location: testLocation, - }, - ]); + const shader = t.generateTestVertexShader([ + { + type: 'vec4', + location: testLocation + }] + ); - const vertexBuffers = [ - { - arrayStride: 512, - attributes: [ - { - format: 'float32', - offset: 0, - shaderLocation: testLocation, - }, - ], - }, - ]; + const vertexBuffers = [ + { + arrayStride: 512, + attributes: [ + { + format: 'float32', + offset: 0, + shaderLocation: testLocation + }] - const success = testLocation < t.device.limits.maxVertexAttributes; - t.testVertexState(success, vertexBuffers, shader); - }); + }]; -g.test('vertex_shader_input_location_in_vertex_state') - .desc( - `Test that a vertex shader defined in the shader must have a corresponding attribute in the vertex state. + + const success = testLocation < t.device.limits.maxVertexAttributes; + t.testVertexState(success, vertexBuffers, shader); +}); + +g.test('vertex_shader_input_location_in_vertex_state'). +desc( + `Test that a vertex shader defined in the shader must have a corresponding attribute in the vertex state. - Test for various input locations. - Test for the attribute in various places in the list of vertex buffer and various places inside the vertex buffer descriptor` - ) - .paramsSubcasesOnly(u => - u // - .combine('vertexBufferIndexVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('extraAttributeCountVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('testAttributeAtStart', [false, true]) - .combine('testShaderLocationVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 0, add: 4 }, - { mult: 0, add: 5 }, - { mult: 1, add: -1 }, - ]) - ) - .fn(t => { - const { - vertexBufferIndexVariant, - extraAttributeCountVariant, - testAttributeAtStart, - testShaderLocationVariant, - } = t.params; - const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); - const extraAttributeCount = t.makeLimitVariant( - 'maxVertexAttributes', - extraAttributeCountVariant - ); +). +paramsSubcasesOnly((u) => +u // +.combine('vertexBufferIndexVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('extraAttributeCountVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('testAttributeAtStart', [false, true]). +combine('testShaderLocationVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 0, add: 4 }, +{ mult: 0, add: 5 }, +{ mult: 1, add: -1 }] +) +). +fn((t) => { + const { + vertexBufferIndexVariant, + extraAttributeCountVariant, + testAttributeAtStart, + testShaderLocationVariant + } = t.params; + const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); + const extraAttributeCount = t.makeLimitVariant( + 'maxVertexAttributes', + extraAttributeCountVariant + ); + const testShaderLocation = t.makeLimitVariant('maxVertexAttributes', testShaderLocationVariant); + // We have a shader using `testShaderLocation`. + const shader = t.generateTestVertexShader([ + { + type: 'vec4', + location: testShaderLocation + }] + ); - const testShaderLocation = t.makeLimitVariant('maxVertexAttributes', testShaderLocationVariant); - // We have a shader using `testShaderLocation`. - const shader = t.generateTestVertexShader([ - { - type: 'vec4', - location: testShaderLocation, - }, - ]); + const attributes = []; + const vertexBuffers = []; + vertexBuffers[vertexBufferIndex] = { arrayStride: 256, attributes }; - const attributes = []; - const vertexBuffers = []; - vertexBuffers[vertexBufferIndex] = { arrayStride: 256, attributes }; - - // Fill attributes with a bunch of attributes for other locations. - // Using that vertex state is invalid because the vertex state doesn't contain the test location - addTestAttributes(attributes, { - extraAttributeCount, - extraAttributeSkippedLocations: [testShaderLocation], - }); - t.testVertexState(false, vertexBuffers, shader); - - // Add an attribute for the test location and try again. - addTestAttributes(attributes, { - testAttribute: { format: 'float32', shaderLocation: testShaderLocation, offset: 0 }, - testAttributeAtStart, - }); - t.testVertexState(true, vertexBuffers, shader); + // Fill attributes with a bunch of attributes for other locations. + // Using that vertex state is invalid because the vertex state doesn't contain the test location + addTestAttributes(attributes, { + extraAttributeCount, + extraAttributeSkippedLocations: [testShaderLocation] }); + t.testVertexState(false, vertexBuffers, shader); -g.test('vertex_shader_type_matches_attribute_format') - .desc( - ` + // Add an attribute for the test location and try again. + addTestAttributes(attributes, { + testAttribute: { format: 'float32', shaderLocation: testShaderLocation, offset: 0 }, + testAttributeAtStart + }); + t.testVertexState(true, vertexBuffers, shader); +}); + +g.test('vertex_shader_type_matches_attribute_format'). +desc( + ` Test that the vertex shader declaration must have a type compatible with the vertex format. - Test for all formats. - Test for all combinations of u/i/f32 with and without vectors.` - ) - .params(u => - u - .combine('format', kVertexFormats) - .beginSubcases() - .combine('shaderBaseType', ['u32', 'i32', 'f32']) - .expand('shaderType', p => [ - p.shaderBaseType, - `vec2<${p.shaderBaseType}>`, - `vec3<${p.shaderBaseType}>`, - `vec4<${p.shaderBaseType}>`, - ]) - ) - .fn(t => { - const { format, shaderBaseType, shaderType } = t.params; - const shader = t.generateTestVertexShader([ - { - type: shaderType, - location: 0, - }, - ]); +). +params((u) => +u. +combine('format', kVertexFormats). +beginSubcases(). +combine('shaderBaseType', ['u32', 'i32', 'f32']). +expand('shaderType', (p) => [ +p.shaderBaseType, +`vec2<${p.shaderBaseType}>`, +`vec3<${p.shaderBaseType}>`, +`vec4<${p.shaderBaseType}>`] +) +). +fn((t) => { + const { format, shaderBaseType, shaderType } = t.params; + const shader = t.generateTestVertexShader([ + { + type: shaderType, + location: 0 + }] + ); - const requiredBaseType = { - sint: 'i32', - uint: 'u32', - snorm: 'f32', - unorm: 'f32', - float: 'f32', - }[kVertexFormatInfo[format].type]; + const requiredBaseType = { + sint: 'i32', + uint: 'u32', + snorm: 'f32', + unorm: 'f32', + float: 'f32' + }[kVertexFormatInfo[format].type]; - const success = requiredBaseType === shaderBaseType; - t.testVertexState( - success, - [ - { - arrayStride: 0, - attributes: [{ offset: 0, shaderLocation: 0, format }], - }, - ], + const success = requiredBaseType === shaderBaseType; + t.testVertexState( + success, + [ + { + arrayStride: 0, + attributes: [{ offset: 0, shaderLocation: 0, format }] + }], - shader - ); - }); + shader + ); +}); -g.test('vertex_attribute_offset_alignment') - .desc( - ` +g.test('vertex_attribute_offset_alignment'). +desc( + ` Test that vertex attribute offsets must be aligned to the format's component byte size. - Test for all formats. - Test for various arrayStrides and offsets within that stride - Test for various vertex buffer indices - Test for various amounts of attributes in that vertex buffer` - ) - .params(u => - u - .combine('format', kVertexFormats) - .combine('arrayStrideVariant', [ - { mult: 0, add: 256 }, - { mult: 1, add: 0 }, - ]) - .expand('offsetVariant', p => { - const { bytesPerComponent, componentCount } = kVertexFormatInfo[p.format]; - const formatSize = bytesPerComponent * componentCount; - return filterUniqueValueTestVariants([ - { mult: 0, add: 0 }, - { mult: 0, add: Math.floor(formatSize / 2) }, - { mult: 0, add: formatSize }, - { mult: 0, add: 2 }, - { mult: 0, add: 4 }, - { mult: 1, add: -formatSize }, - { mult: 1, add: -formatSize - Math.floor(formatSize / 2) }, - { mult: 1, add: -formatSize - 4 }, - { mult: 1, add: -formatSize - 2 }, - ]); - }) - .beginSubcases() - .combine('vertexBufferIndexVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('extraAttributeCountVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('testAttributeAtStart', [false, true]) - ) - .fn(t => { - const { - format, - arrayStrideVariant, - offsetVariant, - vertexBufferIndexVariant, - extraAttributeCountVariant, - testAttributeAtStart, - } = t.params; - const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); - const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); - const extraAttributeCount = t.makeLimitVariant( - 'maxVertexAttributes', - extraAttributeCountVariant - ); +). +params((u) => +u. +combine('format', kVertexFormats). +combine('arrayStrideVariant', [ +{ mult: 0, add: 256 }, +{ mult: 1, add: 0 }] +). +expand('offsetVariant', (p) => { + const formatSize = kVertexFormatInfo[p.format].byteSize; + return filterUniqueValueTestVariants([ + { mult: 0, add: 0 }, + { mult: 0, add: Math.floor(formatSize / 2) }, + { mult: 0, add: formatSize }, + { mult: 0, add: 2 }, + { mult: 0, add: 4 }, + { mult: 1, add: -formatSize }, + { mult: 1, add: -formatSize - Math.floor(formatSize / 2) }, + { mult: 1, add: -formatSize - 4 }, + { mult: 1, add: -formatSize - 2 }] + ); +}). +beginSubcases(). +combine('vertexBufferIndexVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('extraAttributeCountVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('testAttributeAtStart', [false, true]) +). +fn((t) => { + const { + format, + arrayStrideVariant, + offsetVariant, + vertexBufferIndexVariant, + extraAttributeCountVariant, + testAttributeAtStart + } = t.params; + const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); + const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); + const extraAttributeCount = t.makeLimitVariant( + 'maxVertexAttributes', + extraAttributeCountVariant + ); + const offset = makeValueTestVariant(arrayStride, offsetVariant); - const offset = makeValueTestVariant(arrayStride, offsetVariant); - - const attributes = []; - addTestAttributes(attributes, { - testAttribute: { format, offset, shaderLocation: 0 }, - testAttributeAtStart, - extraAttributeCount, - extraAttributeSkippedLocations: [0], - }); - - const vertexBuffers = []; - vertexBuffers[vertexBufferIndex] = { arrayStride, attributes }; - - const formatInfo = kVertexFormatInfo[format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - const success = offset % Math.min(4, formatSize) === 0; - - t.testVertexState(success, vertexBuffers); + const attributes = []; + addTestAttributes(attributes, { + testAttribute: { format, offset, shaderLocation: 0 }, + testAttributeAtStart, + extraAttributeCount, + extraAttributeSkippedLocations: [0] }); -g.test('vertex_attribute_contained_in_stride') - .desc( - ` + const vertexBuffers = []; + vertexBuffers[vertexBufferIndex] = { arrayStride, attributes }; + + const formatInfo = kVertexFormatInfo[format]; + const formatSize = formatInfo.byteSize; + const success = offset % Math.min(4, formatSize) === 0; + + t.testVertexState(success, vertexBuffers); +}); + +g.test('vertex_attribute_contained_in_stride'). +desc( + ` Test that vertex attribute [offset, offset + formatSize) must be contained in the arrayStride if arrayStride is not 0: - Test for all formats. - Test for various arrayStrides and offsets within that stride - Test for various vertex buffer indices - Test for various amounts of attributes in that vertex buffer` - ) - .params(u => - u - .combine('format', kVertexFormats) - .beginSubcases() - .combine('arrayStrideVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 256 }, - { mult: 1, add: -4 }, - { mult: 1, add: 0 }, - ]) - .expand('offsetVariant', function* (p) { - // Compute a bunch of test offsets to test. - const { bytesPerComponent, componentCount } = kVertexFormatInfo[p.format]; - const formatSize = bytesPerComponent * componentCount; - yield { mult: 0, add: 0 }; - yield { mult: 0, add: 4 }; - yield { mult: 1, add: -formatSize }; - yield { mult: 1, add: -formatSize + 4 }; +). +params((u) => +u. +combine('format', kVertexFormats). +beginSubcases(). +combine('arrayStrideVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 256 }, +{ mult: 1, add: -4 }, +{ mult: 1, add: 0 }] +). +expand('offsetVariant', function* (p) { + // Compute a bunch of test offsets to test. + const formatSize = kVertexFormatInfo[p.format].byteSize; + yield { mult: 0, add: 0 }; + yield { mult: 0, add: 4 }; + yield { mult: 1, add: -formatSize }; + yield { mult: 1, add: -formatSize + 4 }; - // Avoid adding duplicate cases when formatSize == 4 (it is already tested above) - if (formatSize !== 4) { - yield { mult: 0, add: formatSize }; - yield { mult: 1, add: 0 }; - } - }) - .combine('vertexBufferIndexVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('extraAttributeCountVariant', [ - { mult: 0, add: 0 }, - { mult: 0, add: 1 }, - { mult: 1, add: -1 }, - ]) - .combine('testAttributeAtStart', [false, true]) - ) - .fn(t => { - const { - format, - arrayStrideVariant, - offsetVariant, - vertexBufferIndexVariant, - extraAttributeCountVariant, - testAttributeAtStart, - } = t.params; - const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); - const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); - const extraAttributeCount = t.makeLimitVariant( - 'maxVertexAttributes', - extraAttributeCountVariant - ); + // Avoid adding duplicate cases when formatSize == 4 (it is already tested above) + if (formatSize !== 4) { + yield { mult: 0, add: formatSize }; + yield { mult: 1, add: 0 }; + } +}). +combine('vertexBufferIndexVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('extraAttributeCountVariant', [ +{ mult: 0, add: 0 }, +{ mult: 0, add: 1 }, +{ mult: 1, add: -1 }] +). +combine('testAttributeAtStart', [false, true]) +). +fn((t) => { + const { + format, + arrayStrideVariant, + offsetVariant, + vertexBufferIndexVariant, + extraAttributeCountVariant, + testAttributeAtStart + } = t.params; + const arrayStride = t.makeLimitVariant('maxVertexBufferArrayStride', arrayStrideVariant); + const vertexBufferIndex = t.makeLimitVariant('maxVertexBuffers', vertexBufferIndexVariant); + const extraAttributeCount = t.makeLimitVariant( + 'maxVertexAttributes', + extraAttributeCountVariant + ); + // arrayStride = 0 is a special case because for the offset validation it acts the same + // as arrayStride = device.limits.maxVertexBufferArrayStride. We special case here so as to avoid adding + // negative offsets that would cause an IDL exception to be thrown instead of a validation + // error. + const stride = arrayStride !== 0 ? arrayStride : t.device.limits.maxVertexBufferArrayStride; + const offset = makeValueTestVariant(stride, offsetVariant); - // arrayStride = 0 is a special case because for the offset validation it acts the same - // as arrayStride = device.limits.maxVertexBufferArrayStride. We special case here so as to avoid adding - // negative offsets that would cause an IDL exception to be thrown instead of a validation - // error. - const stride = arrayStride !== 0 ? arrayStride : t.device.limits.maxVertexBufferArrayStride; - const offset = makeValueTestVariant(stride, offsetVariant); - - const attributes = []; - addTestAttributes(attributes, { - testAttribute: { format, offset, shaderLocation: 0 }, - testAttributeAtStart, - extraAttributeCount, - extraAttributeSkippedLocations: [0], - }); - - const vertexBuffers = []; - vertexBuffers[vertexBufferIndex] = { arrayStride, attributes }; - - const formatInfo = kVertexFormatInfo[format]; - const formatSize = formatInfo.bytesPerComponent * formatInfo.componentCount; - const limit = arrayStride === 0 ? t.device.limits.maxVertexBufferArrayStride : arrayStride; - - const success = offset + formatSize <= limit; - t.testVertexState(success, vertexBuffers); + const attributes = []; + addTestAttributes(attributes, { + testAttribute: { format, offset, shaderLocation: 0 }, + testAttributeAtStart, + extraAttributeCount, + extraAttributeSkippedLocations: [0] }); -g.test('many_attributes_overlapping') - .desc(`Test that it is valid to have many vertex attributes overlap`) - .fn(t => { - // Create many attributes, each of them intersects with at least 3 others. - const attributes = []; - const formats = ['float32x4', 'uint32x4', 'sint32x4']; - for (let i = 0; i < t.device.limits.maxVertexAttributes; i++) { - attributes.push({ format: formats[i % 3], offset: i * 4, shaderLocation: i }); - } + const vertexBuffers = []; + vertexBuffers[vertexBufferIndex] = { arrayStride, attributes }; - t.testVertexState(true, [{ arrayStride: 0, attributes }]); - }); + const formatSize = kVertexFormatInfo[format].byteSize; + const limit = arrayStride === 0 ? t.device.limits.maxVertexBufferArrayStride : arrayStride; + + const success = offset + formatSize <= limit; + t.testVertexState(success, vertexBuffers); +}); + +g.test('many_attributes_overlapping'). +desc(`Test that it is valid to have many vertex attributes overlap`). +fn((t) => { + // Create many attributes, each of them intersects with at least 3 others. + const attributes = []; + const formats = ['float32x4', 'uint32x4', 'sint32x4']; + for (let i = 0; i < t.device.limits.maxVertexAttributes; i++) { + attributes.push({ format: formats[i % 3], offset: i * 4, shaderLocation: i }); + } + + t.testVertexState(true, [{ arrayStride: 0, attributes }]); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_encoder.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_encoder.spec.js index dc65905d94b..d4a6fac4dad 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_encoder.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_encoder.spec.js @@ -1,48 +1,64 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Buffer Usages Validation Tests in Render Pass and Compute Pass. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { assert, unreachable } from '../../../../../common/util/util.js'; import { ValidationTest } from '../../validation_test.js'; const kBoundBufferSize = 256; + + + + + + + + + export const kAllBufferUsages = [ - 'uniform', - 'storage', - 'read-only-storage', - 'vertex', - 'index', - 'indirect', - 'indexedIndirect', -]; +'uniform', +'storage', +'read-only-storage', +'vertex', +'index', +'indirect', +'indexedIndirect']; + export class BufferResourceUsageTest extends ValidationTest { - createBindGroupLayoutForTest(type, resourceVisibility) { + createBindGroupLayoutForTest( + type, + resourceVisibility) + { const bindGroupLayoutEntry = { binding: 0, visibility: - resourceVisibility === 'compute' ? GPUShaderStage.COMPUTE : GPUShaderStage.FRAGMENT, + resourceVisibility === 'compute' ? GPUShaderStage.COMPUTE : GPUShaderStage.FRAGMENT, buffer: { - type, - }, + type + } }; return this.device.createBindGroupLayout({ - entries: [bindGroupLayoutEntry], + entries: [bindGroupLayoutEntry] }); } - createBindGroupForTest(buffer, offset, type, resourceVisibility) { + createBindGroupForTest( + buffer, + offset, + type, + resourceVisibility) + { return this.device.createBindGroup({ layout: this.createBindGroupLayoutForTest(type, resourceVisibility), entries: [ - { - binding: 0, - resource: { buffer, offset, size: kBoundBufferSize }, - }, - ], + { + binding: 0, + resource: { buffer, offset, size: kBoundBufferSize } + }] + }); } @@ -50,31 +66,34 @@ export class BufferResourceUsageTest extends ValidationTest { const colorTexture = this.device.createTexture({ format: 'rgba8unorm', usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [16, 16, 1], + size: [16, 16, 1] }); return encoder.beginRenderPass({ colorAttachments: [ - { - view: colorTexture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], + { + view: colorTexture.createView(), + loadOp: 'load', + storeOp: 'store' + }] + }); } - createRenderPipelineForTest(pipelineLayout, vertexBufferCount) { + createRenderPipelineForTest( + pipelineLayout, + vertexBufferCount) + { const vertexBuffers = []; for (let i = 0; i < vertexBufferCount; ++i) { vertexBuffers.push({ arrayStride: 4, attributes: [ - { - format: 'float32', - shaderLocation: i, - offset: 0, - }, - ], + { + format: 'float32', + shaderLocation: i, + offset: 0 + }] + }); } @@ -82,10 +101,10 @@ export class BufferResourceUsageTest extends ValidationTest { layout: pipelineLayout, vertex: { module: this.device.createShaderModule({ - code: this.getNoOpShaderCode('VERTEX'), + code: this.getNoOpShaderCode('VERTEX') }), entryPoint: 'main', - buffers: vertexBuffers, + buffers: vertexBuffers }, fragment: { module: this.device.createShaderModule({ @@ -93,12 +112,12 @@ export class BufferResourceUsageTest extends ValidationTest { @fragment fn main() -> @location(0) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'point-list' }, + primitive: { topology: 'point-list' } }); } } @@ -121,51 +140,51 @@ function IsBufferUsageInBindGroup(bufferUsage) { export const g = makeTestGroup(BufferResourceUsageTest); -g.test('subresources,buffer_usage_in_one_compute_pass_with_no_dispatch') - .desc( - ` +g.test('subresources,buffer_usage_in_one_compute_pass_with_no_dispatch'). +desc( + ` Test that it is always allowed to set multiple bind groups with same buffer in a compute pass encoder without any dispatch calls as state-setting compute pass commands, like setBindGroup(index, bindGroup, dynamicOffsets), do not contribute directly to a usage scope.` - ) - .params(u => - u - .combine('usage0', ['uniform', 'storage', 'read-only-storage']) - .combine('usage1', ['uniform', 'storage', 'read-only-storage']) - .beginSubcases() - .combine('visibility0', ['compute', 'fragment']) - .combine('visibility1', ['compute', 'fragment']) - .combine('hasOverlap', [true, false]) - ) - .fn(t => { - const { usage0, usage1, visibility0, visibility1, hasOverlap } = t.params; +). +params((u) => +u. +combine('usage0', ['uniform', 'storage', 'read-only-storage']). +combine('usage1', ['uniform', 'storage', 'read-only-storage']). +beginSubcases(). +combine('visibility0', ['compute', 'fragment']). +combine('visibility1', ['compute', 'fragment']). +combine('hasOverlap', [true, false]) +). +fn((t) => { + const { usage0, usage1, visibility0, visibility1, hasOverlap } = t.params; - const buffer = t.createBufferWithState('valid', { - size: kBoundBufferSize * 2, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE, - }); - - const encoder = t.device.createCommandEncoder(); - const computePassEncoder = encoder.beginComputePass(); - - const offset0 = 0; - const bindGroup0 = t.createBindGroupForTest(buffer, offset0, usage0, visibility0); - computePassEncoder.setBindGroup(0, bindGroup0); - - const offset1 = hasOverlap ? offset0 : kBoundBufferSize; - const bindGroup1 = t.createBindGroupForTest(buffer, offset1, usage1, visibility1); - computePassEncoder.setBindGroup(1, bindGroup1); - - computePassEncoder.end(); - - t.expectValidationError(() => { - encoder.finish(); - }, false); + const buffer = t.createBufferWithState('valid', { + size: kBoundBufferSize * 2, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE }); -g.test('subresources,buffer_usage_in_one_compute_pass_with_one_dispatch') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const computePassEncoder = encoder.beginComputePass(); + + const offset0 = 0; + const bindGroup0 = t.createBindGroupForTest(buffer, offset0, usage0, visibility0); + computePassEncoder.setBindGroup(0, bindGroup0); + + const offset1 = hasOverlap ? offset0 : kBoundBufferSize; + const bindGroup1 = t.createBindGroupForTest(buffer, offset1, usage1, visibility1); + computePassEncoder.setBindGroup(1, bindGroup1); + + computePassEncoder.end(); + + t.expectValidationError(() => { + encoder.finish(); + }, false); +}); + +g.test('subresources,buffer_usage_in_one_compute_pass_with_one_dispatch'). +desc( + ` Test that when one buffer is used in one compute pass encoder, its list of internal usages within one usage scope can only be a compatible usage list. According to WebGPU SPEC, within one dispatch, for each bind group slot that is used by the current GPUComputePipeline's layout, every subresource @@ -174,82 +193,82 @@ referenced by that bind group is "used" in the usage scope. For both usage === storage, there is writable buffer binding aliasing so we skip this case and will have tests covered (https://github.com/gpuweb/cts/issues/2232) ` - ) - .params(u => - u - .combine('usage0AccessibleInDispatch', [true, false]) - .combine('usage1AccessibleInDispatch', [true, false]) - .combine('dispatchBeforeUsage1', [true, false]) - .beginSubcases() - .combine('usage0', ['uniform', 'storage', 'read-only-storage', 'indirect']) - .combine('visibility0', ['compute', 'fragment']) - .filter(t => { - // The buffer with `indirect` usage is always accessible in the dispatch call. - if ( - t.usage0 === 'indirect' && - (!t.usage0AccessibleInDispatch || t.visibility0 !== 'compute' || !t.dispatchBeforeUsage1) - ) { - return false; - } - if (t.usage0AccessibleInDispatch && t.visibility0 !== 'compute') { - return false; - } - if (t.dispatchBeforeUsage1 && t.usage1AccessibleInDispatch) { - return false; - } - return true; - }) - .combine('usage1', ['uniform', 'storage', 'read-only-storage', 'indirect']) - .combine('visibility1', ['compute', 'fragment']) - .filter(t => { - if ( - t.usage1 === 'indirect' && - (!t.usage1AccessibleInDispatch || t.visibility1 !== 'compute' || t.dispatchBeforeUsage1) - ) { - return false; - } - // When the first buffer usage is `indirect`, there has already been one dispatch call, so - // in this test we always make the second usage inaccessible in the dispatch call. - if ( - t.usage1AccessibleInDispatch && - (t.visibility1 !== 'compute' || t.usage0 === 'indirect') - ) { - return false; - } +). +params((u) => +u. +combine('usage0AccessibleInDispatch', [true, false]). +combine('usage1AccessibleInDispatch', [true, false]). +combine('dispatchBeforeUsage1', [true, false]). +beginSubcases(). +combine('usage0', ['uniform', 'storage', 'read-only-storage', 'indirect']). +combine('visibility0', ['compute', 'fragment']). +filter((t) => { + // The buffer with `indirect` usage is always accessible in the dispatch call. + if ( + t.usage0 === 'indirect' && ( + !t.usage0AccessibleInDispatch || t.visibility0 !== 'compute' || !t.dispatchBeforeUsage1)) + { + return false; + } + if (t.usage0AccessibleInDispatch && t.visibility0 !== 'compute') { + return false; + } + if (t.dispatchBeforeUsage1 && t.usage1AccessibleInDispatch) { + return false; + } + return true; +}). +combine('usage1', ['uniform', 'storage', 'read-only-storage', 'indirect']). +combine('visibility1', ['compute', 'fragment']). +filter((t) => { + if ( + t.usage1 === 'indirect' && ( + !t.usage1AccessibleInDispatch || t.visibility1 !== 'compute' || t.dispatchBeforeUsage1)) + { + return false; + } + // When the first buffer usage is `indirect`, there has already been one dispatch call, so + // in this test we always make the second usage inaccessible in the dispatch call. + if ( + t.usage1AccessibleInDispatch && ( + t.visibility1 !== 'compute' || t.usage0 === 'indirect')) + { + return false; + } - // Avoid writable storage buffer bindings aliasing. - if (t.usage0 === 'storage' && t.usage1 === 'storage') { - return false; - } - return true; - }) - .combine('hasOverlap', [true, false]) - ) - .fn(t => { - const { - usage0AccessibleInDispatch, - usage1AccessibleInDispatch, - dispatchBeforeUsage1, - usage0, - visibility0, - usage1, - visibility1, - hasOverlap, - } = t.params; + // Avoid writable storage buffer bindings aliasing. + if (t.usage0 === 'storage' && t.usage1 === 'storage') { + return false; + } + return true; +}). +combine('hasOverlap', [true, false]) +). +fn((t) => { + const { + usage0AccessibleInDispatch, + usage1AccessibleInDispatch, + dispatchBeforeUsage1, + usage0, + visibility0, + usage1, + visibility1, + hasOverlap + } = t.params; - const buffer = t.createBufferWithState('valid', { - size: kBoundBufferSize * 2, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT, - }); + const buffer = t.createBufferWithState('valid', { + size: kBoundBufferSize * 2, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT + }); - const encoder = t.device.createCommandEncoder(); - const computePassEncoder = encoder.beginComputePass(); + const encoder = t.device.createCommandEncoder(); + const computePassEncoder = encoder.beginComputePass(); - const offset0 = 0; - switch (usage0) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + const offset0 = 0; + switch (usage0) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup0 = t.createBindGroupForTest(buffer, offset0, usage0, visibility0); computePassEncoder.setBindGroup(0, bindGroup0); @@ -263,7 +282,7 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) if (usage0AccessibleInDispatch) { const bindGroupLayout0 = t.createBindGroupLayoutForTest(usage0, visibility0); pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout0], + bindGroupLayouts: [bindGroupLayout0] }); } const computePipeline = t.createNoOpComputePipeline(pipelineLayout); @@ -272,7 +291,7 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) } break; } - case 'indirect': { + case 'indirect':{ /* * dispatchWorkgroupsIndirect(buffer); * setBindGroup(bindGroup1); @@ -283,13 +302,13 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) computePassEncoder.dispatchWorkgroupsIndirect(buffer, offset0); break; } - } + } - const offset1 = hasOverlap ? offset0 : kBoundBufferSize; - switch (usage1) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + const offset1 = hasOverlap ? offset0 : kBoundBufferSize; + switch (usage1) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup1 = t.createBindGroupForTest(buffer, offset1, usage1, visibility1); const bindGroupIndex = usage0AccessibleInDispatch ? 1 : 0; computePassEncoder.setBindGroup(bindGroupIndex, bindGroup1); @@ -309,18 +328,18 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) const bindGroupLayout1 = t.createBindGroupLayoutForTest(usage1, visibility1); bindGroupLayouts.push(bindGroupLayout1); } - const pipelineLayout = bindGroupLayouts - ? t.device.createPipelineLayout({ - bindGroupLayouts, - }) - : undefined; + const pipelineLayout = bindGroupLayouts ? + t.device.createPipelineLayout({ + bindGroupLayouts + }) : + undefined; const computePipeline = t.createNoOpComputePipeline(pipelineLayout); computePassEncoder.setPipeline(computePipeline); computePassEncoder.dispatchWorkgroups(1); } break; } - case 'indirect': { + case 'indirect':{ /* * setBindGroup(bindGroup0); * dispatchWorkgroupsIndirect(buffer); @@ -330,7 +349,7 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) if (usage0AccessibleInDispatch) { assert(usage0 !== 'indirect'); pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [t.createBindGroupLayoutForTest(usage0, visibility0)], + bindGroupLayouts: [t.createBindGroupLayoutForTest(usage0, visibility0)] }); } const computePipeline = t.createNoOpComputePipeline(pipelineLayout); @@ -338,177 +357,181 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) computePassEncoder.dispatchWorkgroupsIndirect(buffer, offset1); break; } - } + } + computePassEncoder.end(); - computePassEncoder.end(); + const usageHasConflict = + usage0 === 'storage' && usage1 !== 'storage' || + usage0 !== 'storage' && usage1 === 'storage'; + const fail = + usageHasConflict && + visibility0 === 'compute' && + visibility1 === 'compute' && + usage0AccessibleInDispatch && + usage1AccessibleInDispatch; + t.expectValidationError(() => { + encoder.finish(); + }, fail); +}); - const usageHasConflict = - (usage0 === 'storage' && usage1 !== 'storage') || - (usage0 !== 'storage' && usage1 === 'storage'); - const fail = - usageHasConflict && - visibility0 === 'compute' && - visibility1 === 'compute' && - usage0AccessibleInDispatch && - usage1AccessibleInDispatch; - t.expectValidationError(() => { - encoder.finish(); - }, fail); - }); - -g.test('subresources,buffer_usage_in_compute_pass_with_two_dispatches') - .desc( - ` +g.test('subresources,buffer_usage_in_compute_pass_with_two_dispatches'). +desc( + ` Test that it is always allowed to use one buffer in different dispatch calls as in WebGPU SPEC, within one dispatch, for each bind group slot that is used by the current GPUComputePipeline's layout, every subresource referenced by that bind group is "used" in the usage scope, and different dispatch calls refer to different usage scopes.` - ) - .params(u => - u - .combine('usage0', ['uniform', 'storage', 'read-only-storage', 'indirect']) - .combine('usage1', ['uniform', 'storage', 'read-only-storage', 'indirect']) - .beginSubcases() - .combine('inSamePass', [true, false]) - .combine('hasOverlap', [true, false]) - ) - .fn(t => { - const { usage0, usage1, inSamePass, hasOverlap } = t.params; +). +params((u) => +u. +combine('usage0', ['uniform', 'storage', 'read-only-storage', 'indirect']). +combine('usage1', ['uniform', 'storage', 'read-only-storage', 'indirect']). +beginSubcases(). +combine('inSamePass', [true, false]). +combine('hasOverlap', [true, false]) +). +fn((t) => { + const { usage0, usage1, inSamePass, hasOverlap } = t.params; - const UseBufferOnComputePassEncoder = (computePassEncoder, buffer, usage, offset) => { - switch (usage) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + const UseBufferOnComputePassEncoder = ( + computePassEncoder, + buffer, + usage, + offset) => + { + switch (usage) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup = t.createBindGroupForTest(buffer, offset, usage, 'compute'); computePassEncoder.setBindGroup(0, bindGroup); const bindGroupLayout = t.createBindGroupLayoutForTest(usage, 'compute'); const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], + bindGroupLayouts: [bindGroupLayout] }); const computePipeline = t.createNoOpComputePipeline(pipelineLayout); computePassEncoder.setPipeline(computePipeline); computePassEncoder.dispatchWorkgroups(1); break; } - case 'indirect': { + case 'indirect':{ const computePipeline = t.createNoOpComputePipeline(); computePassEncoder.setPipeline(computePipeline); computePassEncoder.dispatchWorkgroupsIndirect(buffer, offset); break; } - default: - unreachable(); - break; - } - }; - - const buffer = t.createBufferWithState('valid', { - size: kBoundBufferSize * 2, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT, - }); - - const encoder = t.device.createCommandEncoder(); - const computePassEncoder = encoder.beginComputePass(); - - const offset0 = 0; - const offset1 = hasOverlap ? offset0 : kBoundBufferSize; - UseBufferOnComputePassEncoder(computePassEncoder, buffer, usage0, offset0); - - if (inSamePass) { - UseBufferOnComputePassEncoder(computePassEncoder, buffer, usage1, offset1); - computePassEncoder.end(); - } else { - computePassEncoder.end(); - const anotherComputePassEncoder = encoder.beginComputePass(); - UseBufferOnComputePassEncoder(anotherComputePassEncoder, buffer, usage1, offset1); - anotherComputePassEncoder.end(); + default: + unreachable(); + break; } + }; - t.expectValidationError(() => { - encoder.finish(); - }, false); + const buffer = t.createBufferWithState('valid', { + size: kBoundBufferSize * 2, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT }); -g.test('subresources,buffer_usage_in_one_render_pass_with_no_draw') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const computePassEncoder = encoder.beginComputePass(); + + const offset0 = 0; + const offset1 = hasOverlap ? offset0 : kBoundBufferSize; + UseBufferOnComputePassEncoder(computePassEncoder, buffer, usage0, offset0); + + if (inSamePass) { + UseBufferOnComputePassEncoder(computePassEncoder, buffer, usage1, offset1); + computePassEncoder.end(); + } else { + computePassEncoder.end(); + const anotherComputePassEncoder = encoder.beginComputePass(); + UseBufferOnComputePassEncoder(anotherComputePassEncoder, buffer, usage1, offset1); + anotherComputePassEncoder.end(); + } + + t.expectValidationError(() => { + encoder.finish(); + }, false); +}); + +g.test('subresources,buffer_usage_in_one_render_pass_with_no_draw'). +desc( + ` Test that when one buffer is used in one render pass encoder, its list of internal usages within one usage scope (all the commands in the whole render pass) can only be a compatible usage list even if there is no draw call in the render pass. ` - ) - .params(u => - u - .combine('usage0', ['uniform', 'storage', 'read-only-storage', 'vertex', 'index']) - .combine('usage1', ['uniform', 'storage', 'read-only-storage', 'vertex', 'index']) - .beginSubcases() - .combine('hasOverlap', [true, false]) - .combine('visibility0', ['compute', 'fragment']) - .unless(t => t.visibility0 === 'compute' && !IsBufferUsageInBindGroup(t.usage0)) - .combine('visibility1', ['compute', 'fragment']) - .unless(t => t.visibility1 === 'compute' && !IsBufferUsageInBindGroup(t.usage1)) - ) - .fn(t => { - const { usage0, usage1, hasOverlap, visibility0, visibility1 } = t.params; +). +params((u) => +u. +combine('usage0', ['uniform', 'storage', 'read-only-storage', 'vertex', 'index']). +combine('usage1', ['uniform', 'storage', 'read-only-storage', 'vertex', 'index']). +beginSubcases(). +combine('hasOverlap', [true, false]). +combine('visibility0', ['compute', 'fragment']). +unless((t) => t.visibility0 === 'compute' && !IsBufferUsageInBindGroup(t.usage0)). +combine('visibility1', ['compute', 'fragment']). +unless((t) => t.visibility1 === 'compute' && !IsBufferUsageInBindGroup(t.usage1)) +). +fn((t) => { + const { usage0, usage1, hasOverlap, visibility0, visibility1 } = t.params; - const UseBufferOnRenderPassEncoder = ( - buffer, - offset, - type, - bindGroupVisibility, - renderPassEncoder - ) => { - switch (type) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + const UseBufferOnRenderPassEncoder = ( + buffer, + offset, + type, + bindGroupVisibility, + renderPassEncoder) => + { + switch (type) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup = t.createBindGroupForTest(buffer, offset, type, bindGroupVisibility); renderPassEncoder.setBindGroup(0, bindGroup); break; } - case 'vertex': { + case 'vertex':{ renderPassEncoder.setVertexBuffer(0, buffer, offset, kBoundBufferSize); break; } - case 'index': { + case 'index':{ renderPassEncoder.setIndexBuffer(buffer, 'uint16', offset, kBoundBufferSize); break; } - case 'indirect': - case 'indexedIndirect': - unreachable(); - break; - } - }; + case 'indirect': + case 'indexedIndirect': + unreachable(); + break; + } + }; - const buffer = t.createBufferWithState('valid', { - size: kBoundBufferSize * 2, - usage: - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX, - }); - - const encoder = t.device.createCommandEncoder(); - const renderPassEncoder = t.beginSimpleRenderPass(encoder); - const offset0 = 0; - UseBufferOnRenderPassEncoder(buffer, offset0, usage0, visibility0, renderPassEncoder); - const offset1 = hasOverlap ? offset0 : kBoundBufferSize; - UseBufferOnRenderPassEncoder(buffer, offset1, usage1, visibility1, renderPassEncoder); - renderPassEncoder.end(); - - const fail = (usage0 === 'storage') !== (usage1 === 'storage'); - t.expectValidationError(() => { - encoder.finish(); - }, fail); + const buffer = t.createBufferWithState('valid', { + size: kBoundBufferSize * 2, + usage: + GPUBufferUsage.UNIFORM | + GPUBufferUsage.STORAGE | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX }); -g.test('subresources,buffer_usage_in_one_render_pass_with_one_draw') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const renderPassEncoder = t.beginSimpleRenderPass(encoder); + const offset0 = 0; + UseBufferOnRenderPassEncoder(buffer, offset0, usage0, visibility0, renderPassEncoder); + const offset1 = hasOverlap ? offset0 : kBoundBufferSize; + UseBufferOnRenderPassEncoder(buffer, offset1, usage1, visibility1, renderPassEncoder); + renderPassEncoder.end(); + + const fail = usage0 === 'storage' !== (usage1 === 'storage'); + t.expectValidationError(() => { + encoder.finish(); + }, fail); +}); + +g.test('subresources,buffer_usage_in_one_render_pass_with_one_draw'). +desc( + ` Test that when one buffer is used in one render pass encoder where there is one draw call, its list of internal usages within one usage scope (all the commands in the whole render pass) can only be a compatible usage list. The usage scope rules are not related to the buffer offset or the bind group @@ -517,116 +540,116 @@ layout visibilities. For both usage === storage, there is writable buffer binding aliasing so we skip this case and will have tests covered (https://github.com/gpuweb/cts/issues/2232) ` - ) - .params(u => - u - .combine('usage0', kAllBufferUsages) - .combine('usage1', kAllBufferUsages) - .beginSubcases() - .combine('usage0AccessibleInDraw', [true, false]) - .combine('usage1AccessibleInDraw', [true, false]) - .combine('drawBeforeUsage1', [true, false]) - .combine('visibility0', ['compute', 'fragment']) - .filter(t => { - // The buffer with `indirect` or `indexedIndirect` usage is always accessible in the draw - // call. - if ( - (t.usage0 === 'indirect' || t.usage0 === 'indexedIndirect') && - (!t.usage0AccessibleInDraw || t.visibility0 !== 'fragment' || !t.drawBeforeUsage1) - ) { - return false; - } - // The buffer usages `vertex` and `index` do nothing with shader visibilities. - if ((t.usage0 === 'vertex' || t.usage0 === 'index') && t.visibility0 !== 'fragment') { - return false; - } +). +params((u) => +u. +combine('usage0', kAllBufferUsages). +combine('usage1', kAllBufferUsages). +beginSubcases(). +combine('usage0AccessibleInDraw', [true, false]). +combine('usage1AccessibleInDraw', [true, false]). +combine('drawBeforeUsage1', [true, false]). +combine('visibility0', ['compute', 'fragment']). +filter((t) => { + // The buffer with `indirect` or `indexedIndirect` usage is always accessible in the draw + // call. + if ( + (t.usage0 === 'indirect' || t.usage0 === 'indexedIndirect') && ( + !t.usage0AccessibleInDraw || t.visibility0 !== 'fragment' || !t.drawBeforeUsage1)) + { + return false; + } + // The buffer usages `vertex` and `index` do nothing with shader visibilities. + if ((t.usage0 === 'vertex' || t.usage0 === 'index') && t.visibility0 !== 'fragment') { + return false; + } - // As usage0 is accessible in the draw call, visibility0 can only be 'fragment'. - if (t.usage0AccessibleInDraw && t.visibility0 !== 'fragment') { - return false; - } - // As usage1 is accessible in the draw call, the draw call cannot be before usage1. - if (t.drawBeforeUsage1 && t.usage1AccessibleInDraw) { - return false; - } + // As usage0 is accessible in the draw call, visibility0 can only be 'fragment'. + if (t.usage0AccessibleInDraw && t.visibility0 !== 'fragment') { + return false; + } + // As usage1 is accessible in the draw call, the draw call cannot be before usage1. + if (t.drawBeforeUsage1 && t.usage1AccessibleInDraw) { + return false; + } - // Avoid writable storage buffer bindings aliasing. - if (t.usage0 === 'storage' && t.usage1 === 'storage') { - return false; - } - return true; - }) - .combine('visibility1', ['compute', 'fragment']) - .filter(t => { - if ( - (t.usage1 === 'indirect' || t.usage1 === 'indexedIndirect') && - (!t.usage1AccessibleInDraw || t.visibility1 !== 'fragment' || t.drawBeforeUsage1) - ) { - return false; - } - if ((t.usage1 === 'vertex' || t.usage1 === 'index') && t.visibility1 !== 'fragment') { - return false; - } - // When the first buffer usage is `indirect` or `indexedIndirect`, there has already been - // one draw call, so in this test we always make the second usage inaccessible in the draw - // call. - if ( - t.usage1AccessibleInDraw && - (t.visibility1 !== 'fragment' || - t.usage0 === 'indirect' || - t.usage0 === 'indexedIndirect') - ) { - return false; - } - // When the first buffer usage is `index` and is accessible in the draw call, the second - // usage cannot be `indirect` (it should be `indexedIndirect` for the tests on indirect draw - // calls) - if (t.usage0 === 'index' && t.usage0AccessibleInDraw && t.usage1 === 'indirect') { - return false; - } - return true; - }) - .combine('hasOverlap', [true, false]) - ) - .fn(t => { - const { - // Buffer with usage0 will be "used" in the draw call if this value is true. - usage0AccessibleInDraw, - // Buffer with usage1 will be "used" in the draw call if this value is true. - usage1AccessibleInDraw, - // Whether we will have the draw call before setting the buffer usage as "usage1" or not. - // If it is true: set-usage0 -> draw -> set-usage1 or indirect-draw -> set-usage1 - // Otherwise: set-usage0 -> set-usage1 -> draw or set-usage0 -> indirect-draw - drawBeforeUsage1, - usage0, - visibility0, - usage1, - visibility1, - hasOverlap, - } = t.params; - const buffer = t.createBufferWithState('valid', { - size: kBoundBufferSize * 2, - usage: - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX | - GPUBufferUsage.INDIRECT, - }); + // Avoid writable storage buffer bindings aliasing. + if (t.usage0 === 'storage' && t.usage1 === 'storage') { + return false; + } + return true; +}). +combine('visibility1', ['compute', 'fragment']). +filter((t) => { + if ( + (t.usage1 === 'indirect' || t.usage1 === 'indexedIndirect') && ( + !t.usage1AccessibleInDraw || t.visibility1 !== 'fragment' || t.drawBeforeUsage1)) + { + return false; + } + if ((t.usage1 === 'vertex' || t.usage1 === 'index') && t.visibility1 !== 'fragment') { + return false; + } + // When the first buffer usage is `indirect` or `indexedIndirect`, there has already been + // one draw call, so in this test we always make the second usage inaccessible in the draw + // call. + if ( + t.usage1AccessibleInDraw && ( + t.visibility1 !== 'fragment' || + t.usage0 === 'indirect' || + t.usage0 === 'indexedIndirect')) + { + return false; + } + // When the first buffer usage is `index` and is accessible in the draw call, the second + // usage cannot be `indirect` (it should be `indexedIndirect` for the tests on indirect draw + // calls) + if (t.usage0 === 'index' && t.usage0AccessibleInDraw && t.usage1 === 'indirect') { + return false; + } + return true; +}). +combine('hasOverlap', [true, false]) +). +fn((t) => { + const { + // Buffer with usage0 will be "used" in the draw call if this value is true. + usage0AccessibleInDraw, + // Buffer with usage1 will be "used" in the draw call if this value is true. + usage1AccessibleInDraw, + // Whether we will have the draw call before setting the buffer usage as "usage1" or not. + // If it is true: set-usage0 -> draw -> set-usage1 or indirect-draw -> set-usage1 + // Otherwise: set-usage0 -> set-usage1 -> draw or set-usage0 -> indirect-draw + drawBeforeUsage1, + usage0, + visibility0, + usage1, + visibility1, + hasOverlap + } = t.params; + const buffer = t.createBufferWithState('valid', { + size: kBoundBufferSize * 2, + usage: + GPUBufferUsage.UNIFORM | + GPUBufferUsage.STORAGE | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX | + GPUBufferUsage.INDIRECT + }); - const UseBufferOnRenderPassEncoder = ( - bufferAccessibleInDraw, - bufferIndex, - offset, - usage, - bindGroupVisibility, - renderPassEncoder, - usedBindGroupLayouts - ) => { - switch (usage) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + const UseBufferOnRenderPassEncoder = ( + bufferAccessibleInDraw, + bufferIndex, + offset, + usage, + bindGroupVisibility, + renderPassEncoder, + usedBindGroupLayouts) => + { + switch (usage) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup = t.createBindGroupForTest(buffer, offset, usage, bindGroupVisibility); renderPassEncoder.setBindGroup(bufferIndex, bindGroup); // To "use" the bind group we will set the corresponding bind group layout in the @@ -636,200 +659,208 @@ have tests covered (https://github.com/gpuweb/cts/issues/2232) } break; } - case 'vertex': { + case 'vertex':{ renderPassEncoder.setVertexBuffer(bufferIndex, buffer, offset); break; } - case 'index': { + case 'index':{ renderPassEncoder.setIndexBuffer(buffer, 'uint16', offset); break; } - case 'indirect': - case 'indexedIndirect': { + case 'indirect': + case 'indexedIndirect':{ // We will handle the indirect draw calls later. break; } - } - }; + } + }; - const MakeDrawCallWithOneUsage = (usage, offset, renderPassEncoder) => { - switch (usage) { - case 'uniform': - case 'read-only-storage': - case 'storage': - case 'vertex': - renderPassEncoder.draw(1); - break; - case 'index': - renderPassEncoder.drawIndexed(1); - break; - case 'indirect': - renderPassEncoder.drawIndirect(buffer, offset); - break; - case 'indexedIndirect': { + const MakeDrawCallWithOneUsage = ( + usage, + offset, + renderPassEncoder) => + { + switch (usage) { + case 'uniform': + case 'read-only-storage': + case 'storage': + case 'vertex': + renderPassEncoder.draw(1); + break; + case 'index': + renderPassEncoder.drawIndexed(1); + break; + case 'indirect': + renderPassEncoder.drawIndirect(buffer, offset); + break; + case 'indexedIndirect':{ const indexBuffer = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX }); renderPassEncoder.setIndexBuffer(indexBuffer, 'uint16'); renderPassEncoder.drawIndexedIndirect(buffer, offset); break; } - } - }; + } + }; - const encoder = t.device.createCommandEncoder(); - const renderPassEncoder = t.beginSimpleRenderPass(encoder); + const encoder = t.device.createCommandEncoder(); + const renderPassEncoder = t.beginSimpleRenderPass(encoder); - // Set buffer with usage0 - const offset0 = 0; + // Set buffer with usage0 + const offset0 = 0; + // Invisible bind groups or vertex buffers are all bound to the slot 1. + const bufferIndex0 = visibility0 === 'fragment' ? 0 : 1; + const usedBindGroupLayouts = []; + + UseBufferOnRenderPassEncoder( + usage0AccessibleInDraw, + bufferIndex0, + offset0, + usage0, + visibility0, + renderPassEncoder, + usedBindGroupLayouts + ); + + let vertexBufferCount = 0; + + // Set pipeline and do draw call if drawBeforeUsage1 === true + if (drawBeforeUsage1) { + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: usedBindGroupLayouts + }); + // To "use" the vertex buffer we need to set the corresponding vertex buffer layout when + // creating the render pipeline. + if (usage0 === 'vertex' && usage0AccessibleInDraw) { + ++vertexBufferCount; + } + const pipeline = t.createRenderPipelineForTest(pipelineLayout, vertexBufferCount); + renderPassEncoder.setPipeline(pipeline); + if (!usage0AccessibleInDraw) { + renderPassEncoder.draw(1); + } else { + MakeDrawCallWithOneUsage(usage0, offset0, renderPassEncoder); + } + } + + // Set buffer with usage1. + const offset1 = hasOverlap ? offset0 : kBoundBufferSize; + let bufferIndex1 = 0; + if (visibility1 !== 'fragment') { // Invisible bind groups or vertex buffers are all bound to the slot 1. - const bufferIndex0 = visibility0 === 'fragment' ? 0 : 1; - const usedBindGroupLayouts = []; + bufferIndex1 = 1; + } else if (visibility0 === 'fragment' && usage0AccessibleInDraw) { + // When buffer is bound to different bind groups or bound as vertex buffers in one render pass + // encoder, the second buffer binding should consume the slot 1. + if (IsBufferUsageInBindGroup(usage0) && IsBufferUsageInBindGroup(usage1)) { + bufferIndex1 = 1; + } else if (usage0 === 'vertex' && usage1 === 'vertex') { + bufferIndex1 = 1; + } + } - UseBufferOnRenderPassEncoder( - usage0AccessibleInDraw, - bufferIndex0, - offset0, - usage0, - visibility0, - renderPassEncoder, - usedBindGroupLayouts - ); + UseBufferOnRenderPassEncoder( + usage1AccessibleInDraw, + bufferIndex1, + offset1, + usage1, + visibility1, + renderPassEncoder, + usedBindGroupLayouts + ); - let vertexBufferCount = 0; - - // Set pipeline and do draw call if drawBeforeUsage1 === true - if (drawBeforeUsage1) { - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: usedBindGroupLayouts, - }); + // Set pipeline and do draw call if drawBeforeUsage1 === false + if (!drawBeforeUsage1) { + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: usedBindGroupLayouts + }); + if (usage1 === 'vertex' && usage1AccessibleInDraw) { // To "use" the vertex buffer we need to set the corresponding vertex buffer layout when // creating the render pipeline. - if (usage0 === 'vertex' && usage0AccessibleInDraw) { - ++vertexBufferCount; - } - const pipeline = t.createRenderPipelineForTest(pipelineLayout, vertexBufferCount); - renderPassEncoder.setPipeline(pipeline); - if (!usage0AccessibleInDraw) { - renderPassEncoder.draw(1); - } else { - MakeDrawCallWithOneUsage(usage0, offset0, renderPassEncoder); - } + ++vertexBufferCount; } + const pipeline = t.createRenderPipelineForTest(pipelineLayout, vertexBufferCount); + renderPassEncoder.setPipeline(pipeline); - // Set buffer with usage1. - const offset1 = hasOverlap ? offset0 : kBoundBufferSize; - let bufferIndex1 = 0; - if (visibility1 !== 'fragment') { - // Invisible bind groups or vertex buffers are all bound to the slot 1. - bufferIndex1 = 1; - } else if (visibility0 === 'fragment' && usage0AccessibleInDraw) { - // When buffer is bound to different bind groups or bound as vertex buffers in one render pass - // encoder, the second buffer binding should consume the slot 1. - if (IsBufferUsageInBindGroup(usage0) && IsBufferUsageInBindGroup(usage1)) { - bufferIndex1 = 1; - } else if (usage0 === 'vertex' && usage1 === 'vertex') { - bufferIndex1 = 1; - } - } - - UseBufferOnRenderPassEncoder( - usage1AccessibleInDraw, - bufferIndex1, - offset1, - usage1, - visibility1, - renderPassEncoder, - usedBindGroupLayouts - ); - - // Set pipeline and do draw call if drawBeforeUsage1 === false - if (!drawBeforeUsage1) { - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: usedBindGroupLayouts, - }); - if (usage1 === 'vertex' && usage1AccessibleInDraw) { - // To "use" the vertex buffer we need to set the corresponding vertex buffer layout when - // creating the render pipeline. - ++vertexBufferCount; - } - const pipeline = t.createRenderPipelineForTest(pipelineLayout, vertexBufferCount); - renderPassEncoder.setPipeline(pipeline); - - assert(usage0 !== 'indirect'); - if (!usage0AccessibleInDraw && !usage1AccessibleInDraw) { - renderPassEncoder.draw(1); - } else if (usage0AccessibleInDraw && !usage1AccessibleInDraw) { - MakeDrawCallWithOneUsage(usage0, offset0, renderPassEncoder); - } else if (!usage0AccessibleInDraw && usage1AccessibleInDraw) { - MakeDrawCallWithOneUsage(usage1, offset1, renderPassEncoder); - } else { - if (usage1 === 'indexedIndirect') { - // If the index buffer has already been set (as usage0), we won't need to set another - // index buffer. - if (usage0 !== 'index') { - const indexBuffer = t.createBufferWithState('valid', { - size: 4, - usage: GPUBufferUsage.INDEX, - }); - renderPassEncoder.setIndexBuffer(indexBuffer, 'uint16'); - } - renderPassEncoder.drawIndexedIndirect(buffer, offset1); - } else if (usage1 === 'indirect') { - assert(usage0 !== 'index'); - renderPassEncoder.drawIndirect(buffer, offset1); - } else if (usage0 === 'index' || usage1 === 'index') { - // We need to call drawIndexed to "use" the index buffer (as usage0 or usage1). - renderPassEncoder.drawIndexed(1); - } else { - renderPassEncoder.draw(1); + assert(usage0 !== 'indirect'); + if (!usage0AccessibleInDraw && !usage1AccessibleInDraw) { + renderPassEncoder.draw(1); + } else if (usage0AccessibleInDraw && !usage1AccessibleInDraw) { + MakeDrawCallWithOneUsage(usage0, offset0, renderPassEncoder); + } else if (!usage0AccessibleInDraw && usage1AccessibleInDraw) { + MakeDrawCallWithOneUsage(usage1, offset1, renderPassEncoder); + } else { + if (usage1 === 'indexedIndirect') { + // If the index buffer has already been set (as usage0), we won't need to set another + // index buffer. + if (usage0 !== 'index') { + const indexBuffer = t.createBufferWithState('valid', { + size: 4, + usage: GPUBufferUsage.INDEX + }); + renderPassEncoder.setIndexBuffer(indexBuffer, 'uint16'); } + renderPassEncoder.drawIndexedIndirect(buffer, offset1); + } else if (usage1 === 'indirect') { + assert(usage0 !== 'index'); + renderPassEncoder.drawIndirect(buffer, offset1); + } else if (usage0 === 'index' || usage1 === 'index') { + // We need to call drawIndexed to "use" the index buffer (as usage0 or usage1). + renderPassEncoder.drawIndexed(1); + } else { + renderPassEncoder.draw(1); } } - renderPassEncoder.end(); + } + renderPassEncoder.end(); - const fail = (usage0 === 'storage') !== (usage1 === 'storage'); - t.expectValidationError(() => { - encoder.finish(); - }, fail); - }); + const fail = usage0 === 'storage' !== (usage1 === 'storage'); + t.expectValidationError(() => { + encoder.finish(); + }, fail); +}); -g.test('subresources,buffer_usage_in_one_render_pass_with_two_draws') - .desc( - ` +g.test('subresources,buffer_usage_in_one_render_pass_with_two_draws'). +desc( + ` Test that when one buffer is used in different draw calls in one render pass, its list of internal usages within one usage scope (all the commands in the whole render pass) can only be a compatible usage list, and the usage scope rules are not related to the buffer offset, while the draw calls in different render pass encoders belong to different usage scopes.` - ) - .params(u => - u - .combine('usage0', kAllBufferUsages) - .combine('usage1', kAllBufferUsages) - .beginSubcases() - .combine('inSamePass', [true, false]) - .combine('hasOverlap', [true, false]) - ) - .fn(t => { - const { usage0, usage1, inSamePass, hasOverlap } = t.params; - const buffer = t.createBufferWithState('valid', { - size: kBoundBufferSize * 2, - usage: - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX | - GPUBufferUsage.INDIRECT, - }); - const UseBufferOnRenderPassEncoderInDrawCall = (offset, usage, renderPassEncoder) => { - switch (usage) { - case 'uniform': - case 'storage': - case 'read-only-storage': { +). +params((u) => +u. +combine('usage0', kAllBufferUsages). +combine('usage1', kAllBufferUsages). +beginSubcases(). +combine('inSamePass', [true, false]). +combine('hasOverlap', [true, false]) +). +fn((t) => { + const { usage0, usage1, inSamePass, hasOverlap } = t.params; + const buffer = t.createBufferWithState('valid', { + size: kBoundBufferSize * 2, + usage: + GPUBufferUsage.UNIFORM | + GPUBufferUsage.STORAGE | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX | + GPUBufferUsage.INDIRECT + }); + const UseBufferOnRenderPassEncoderInDrawCall = ( + offset, + usage, + renderPassEncoder) => + { + switch (usage) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroupLayout = t.createBindGroupLayoutForTest(usage, 'fragment'); const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], + bindGroupLayouts: [bindGroupLayout] }); const pipeline = t.createRenderPipelineForTest(pipelineLayout, 0); renderPassEncoder.setPipeline(pipeline); @@ -838,7 +869,7 @@ different render pass encoders belong to different usage scopes.` renderPassEncoder.draw(1); break; } - case 'vertex': { + case 'vertex':{ const kVertexBufferCount = 1; const pipeline = t.createRenderPipelineForTest('auto', kVertexBufferCount); renderPassEncoder.setPipeline(pipeline); @@ -846,52 +877,52 @@ different render pass encoders belong to different usage scopes.` renderPassEncoder.draw(1); break; } - case 'index': { + case 'index':{ const pipeline = t.createRenderPipelineForTest('auto', 0); renderPassEncoder.setPipeline(pipeline); renderPassEncoder.setIndexBuffer(buffer, 'uint16', offset); renderPassEncoder.drawIndexed(1); break; } - case 'indirect': { + case 'indirect':{ const pipeline = t.createRenderPipelineForTest('auto', 0); renderPassEncoder.setPipeline(pipeline); renderPassEncoder.drawIndirect(buffer, offset); break; } - case 'indexedIndirect': { + case 'indexedIndirect':{ const pipeline = t.createRenderPipelineForTest('auto', 0); renderPassEncoder.setPipeline(pipeline); const indexBuffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX }); renderPassEncoder.setIndexBuffer(indexBuffer, 'uint16'); renderPassEncoder.drawIndexedIndirect(buffer, offset); break; } - } - }; - - const encoder = t.device.createCommandEncoder(); - const renderPassEncoder = t.beginSimpleRenderPass(encoder); - - const offset0 = 0; - UseBufferOnRenderPassEncoderInDrawCall(offset0, usage0, renderPassEncoder); - - const offset1 = hasOverlap ? offset0 : kBoundBufferSize; - if (inSamePass) { - UseBufferOnRenderPassEncoderInDrawCall(offset1, usage1, renderPassEncoder); - renderPassEncoder.end(); - } else { - renderPassEncoder.end(); - const anotherRenderPassEncoder = t.beginSimpleRenderPass(encoder); - UseBufferOnRenderPassEncoderInDrawCall(offset1, usage1, anotherRenderPassEncoder); - anotherRenderPassEncoder.end(); } + }; - const fail = inSamePass && (usage0 === 'storage') !== (usage1 === 'storage'); - t.expectValidationError(() => { - encoder.finish(); - }, fail); - }); + const encoder = t.device.createCommandEncoder(); + const renderPassEncoder = t.beginSimpleRenderPass(encoder); + + const offset0 = 0; + UseBufferOnRenderPassEncoderInDrawCall(offset0, usage0, renderPassEncoder); + + const offset1 = hasOverlap ? offset0 : kBoundBufferSize; + if (inSamePass) { + UseBufferOnRenderPassEncoderInDrawCall(offset1, usage1, renderPassEncoder); + renderPassEncoder.end(); + } else { + renderPassEncoder.end(); + const anotherRenderPassEncoder = t.beginSimpleRenderPass(encoder); + UseBufferOnRenderPassEncoderInDrawCall(offset1, usage1, anotherRenderPassEncoder); + anotherRenderPassEncoder.end(); + } + + const fail = inSamePass && usage0 === 'storage' !== (usage1 === 'storage'); + t.expectValidationError(() => { + encoder.finish(); + }, fail); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_misc.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_misc.spec.js index aab27f354e9..189c3be2300 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_misc.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/buffer/in_pass_misc.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test other buffer usage validation rules that are not tests in ./in_pass_encoder.spec.js. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { unreachable } from '../../../../../common/util/util.js'; import { BufferResourceUsageTest, kAllBufferUsages } from './in_pass_encoder.spec.js'; @@ -12,116 +11,116 @@ export const g = makeTestGroup(BufferResourceUsageTest); const kBufferSize = 256; -g.test('subresources,reset_buffer_usage_before_dispatch') - .desc( - ` +g.test('subresources,reset_buffer_usage_before_dispatch'). +desc( + ` Test that the buffer usages which are reset by another state-setting commands before a dispatch call do not contribute directly to any usage scope in a compute pass.` - ) - .params(u => - u - .combine('usage0', ['uniform', 'storage', 'read-only-storage']) - .combine('usage1', ['uniform', 'storage', 'read-only-storage', 'indirect']) - ) - .fn(t => { - const { usage0, usage1 } = t.params; +). +params((u) => +u. +combine('usage0', ['uniform', 'storage', 'read-only-storage']). +combine('usage1', ['uniform', 'storage', 'read-only-storage', 'indirect']) +). +fn((t) => { + const { usage0, usage1 } = t.params; - const kUsages = GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT; - const buffer = t.createBufferWithState('valid', { - size: kBufferSize, - usage: kUsages, - }); - const anotherBuffer = t.createBufferWithState('valid', { - size: kBufferSize, - usage: kUsages, - }); + const kUsages = GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT; + const buffer = t.createBufferWithState('valid', { + size: kBufferSize, + usage: kUsages + }); + const anotherBuffer = t.createBufferWithState('valid', { + size: kBufferSize, + usage: kUsages + }); - const bindGroupLayouts = [t.createBindGroupLayoutForTest(usage0, 'compute')]; + const bindGroupLayouts = [ + t.createBindGroupLayoutForTest(usage0, 'compute')]; - if (usage1 !== 'indirect') { - bindGroupLayouts.push(t.createBindGroupLayoutForTest(usage1, 'compute')); - } - const pipelineLayout = t.device.createPipelineLayout({ bindGroupLayouts }); - const computePipeline = t.createNoOpComputePipeline(pipelineLayout); + if (usage1 !== 'indirect') { + bindGroupLayouts.push(t.createBindGroupLayoutForTest(usage1, 'compute')); + } + const pipelineLayout = t.device.createPipelineLayout({ bindGroupLayouts }); + const computePipeline = t.createNoOpComputePipeline(pipelineLayout); - const encoder = t.device.createCommandEncoder(); - const computePassEncoder = encoder.beginComputePass(); - computePassEncoder.setPipeline(computePipeline); + const encoder = t.device.createCommandEncoder(); + const computePassEncoder = encoder.beginComputePass(); + computePassEncoder.setPipeline(computePipeline); - // Set usage0 for buffer at bind group index 0 - const bindGroup0 = t.createBindGroupForTest(buffer, 0, usage0, 'compute'); - computePassEncoder.setBindGroup(0, bindGroup0); + // Set usage0 for buffer at bind group index 0 + const bindGroup0 = t.createBindGroupForTest(buffer, 0, usage0, 'compute'); + computePassEncoder.setBindGroup(0, bindGroup0); - // Reset bind group index 0 with another bind group that uses anotherBuffer - const anotherBindGroup = t.createBindGroupForTest(anotherBuffer, 0, usage0, 'compute'); - computePassEncoder.setBindGroup(0, anotherBindGroup); + // Reset bind group index 0 with another bind group that uses anotherBuffer + const anotherBindGroup = t.createBindGroupForTest(anotherBuffer, 0, usage0, 'compute'); + computePassEncoder.setBindGroup(0, anotherBindGroup); - // Set usage1 for buffer - switch (usage1) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + // Set usage1 for buffer + switch (usage1) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup1 = t.createBindGroupForTest(buffer, 0, usage1, 'compute'); computePassEncoder.setBindGroup(1, bindGroup1); computePassEncoder.dispatchWorkgroups(1); break; } - case 'indirect': { + case 'indirect':{ computePassEncoder.dispatchWorkgroupsIndirect(buffer, 0); break; } - } + } + computePassEncoder.end(); - computePassEncoder.end(); + t.expectValidationError(() => { + encoder.finish(); + }, false); +}); - t.expectValidationError(() => { - encoder.finish(); - }, false); - }); - -g.test('subresources,reset_buffer_usage_before_draw') - .desc( - ` +g.test('subresources,reset_buffer_usage_before_draw'). +desc( + ` Test that the buffer usages which are reset by another state-setting commands before a draw call still contribute directly to the usage scope of the draw call.` - ) - .params(u => - u - .combine('usage0', ['uniform', 'storage', 'read-only-storage', 'vertex', 'index']) - .combine('usage1', kAllBufferUsages) - .unless(t => { - return t.usage0 === 'index' && t.usage1 === 'indirect'; - }) - ) - .fn(t => { - const { usage0, usage1 } = t.params; +). +params((u) => +u. +combine('usage0', ['uniform', 'storage', 'read-only-storage', 'vertex', 'index']). +combine('usage1', kAllBufferUsages). +unless((t) => { + return t.usage0 === 'index' && t.usage1 === 'indirect'; +}) +). +fn((t) => { + const { usage0, usage1 } = t.params; - const kUsages = - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.INDIRECT | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX; - const buffer = t.createBufferWithState('valid', { - size: kBufferSize, - usage: kUsages, - }); - const anotherBuffer = t.createBufferWithState('valid', { - size: kBufferSize, - usage: kUsages, - }); + const kUsages = + GPUBufferUsage.UNIFORM | + GPUBufferUsage.STORAGE | + GPUBufferUsage.INDIRECT | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX; + const buffer = t.createBufferWithState('valid', { + size: kBufferSize, + usage: kUsages + }); + const anotherBuffer = t.createBufferWithState('valid', { + size: kBufferSize, + usage: kUsages + }); - const encoder = t.device.createCommandEncoder(); - const renderPassEncoder = t.beginSimpleRenderPass(encoder); + const encoder = t.device.createCommandEncoder(); + const renderPassEncoder = t.beginSimpleRenderPass(encoder); - const bindGroupLayouts = []; - let vertexBufferCount = 0; + const bindGroupLayouts = []; + let vertexBufferCount = 0; - // Set buffer as usage0 and reset buffer with anotherBuffer as usage0 - switch (usage0) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + // Set buffer as usage0 and reset buffer with anotherBuffer as usage0 + switch (usage0) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup0 = t.createBindGroupForTest(buffer, 0, usage0, 'fragment'); renderPassEncoder.setBindGroup(bindGroupLayouts.length, bindGroup0); @@ -131,75 +130,75 @@ still contribute directly to the usage scope of the draw call.` bindGroupLayouts.push(t.createBindGroupLayoutForTest(usage0, 'fragment')); break; } - case 'vertex': { + case 'vertex':{ renderPassEncoder.setVertexBuffer(vertexBufferCount, buffer); renderPassEncoder.setVertexBuffer(vertexBufferCount, anotherBuffer); ++vertexBufferCount; break; } - case 'index': { + case 'index':{ renderPassEncoder.setIndexBuffer(buffer, 'uint16'); renderPassEncoder.setIndexBuffer(anotherBuffer, 'uint16'); break; } - } + } - // Set buffer as usage1 - switch (usage1) { - case 'uniform': - case 'storage': - case 'read-only-storage': { + // Set buffer as usage1 + switch (usage1) { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup1 = t.createBindGroupForTest(buffer, 0, usage1, 'fragment'); renderPassEncoder.setBindGroup(bindGroupLayouts.length, bindGroup1); bindGroupLayouts.push(t.createBindGroupLayoutForTest(usage1, 'fragment')); break; } - case 'vertex': { + case 'vertex':{ renderPassEncoder.setVertexBuffer(vertexBufferCount, buffer); ++vertexBufferCount; break; } - case 'index': { + case 'index':{ renderPassEncoder.setIndexBuffer(buffer, 'uint16'); break; } - case 'indirect': - case 'indexedIndirect': - break; - } + case 'indirect': + case 'indexedIndirect': + break; + } - // Add draw call - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts, - }); - const renderPipeline = t.createRenderPipelineForTest(pipelineLayout, vertexBufferCount); - renderPassEncoder.setPipeline(renderPipeline); - switch (usage1) { - case 'indexedIndirect': { + // Add draw call + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts + }); + const renderPipeline = t.createRenderPipelineForTest(pipelineLayout, vertexBufferCount); + renderPassEncoder.setPipeline(renderPipeline); + switch (usage1) { + case 'indexedIndirect':{ if (usage0 !== 'index') { const indexBuffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX }); renderPassEncoder.setIndexBuffer(indexBuffer, 'uint16'); } renderPassEncoder.drawIndexedIndirect(buffer, 0); break; } - case 'indirect': { + case 'indirect':{ renderPassEncoder.drawIndirect(buffer, 0); break; } - case 'index': { + case 'index':{ renderPassEncoder.drawIndexed(1); break; } - case 'vertex': - case 'uniform': - case 'storage': - case 'read-only-storage': { + case 'vertex': + case 'uniform': + case 'storage': + case 'read-only-storage':{ if (usage0 === 'index') { renderPassEncoder.drawIndexed(1); } else { @@ -207,198 +206,204 @@ still contribute directly to the usage scope of the draw call.` } break; } - } + } - renderPassEncoder.end(); + renderPassEncoder.end(); - const fail = (usage0 === 'storage') !== (usage1 === 'storage'); - t.expectValidationError(() => { - encoder.finish(); - }, fail); - }); + const fail = usage0 === 'storage' !== (usage1 === 'storage'); + t.expectValidationError(() => { + encoder.finish(); + }, fail); +}); -g.test('subresources,buffer_usages_in_copy_and_pass') - .desc( - ` +g.test('subresources,buffer_usages_in_copy_and_pass'). +desc( + ` Test that using one buffer in a copy command, a render or compute pass encoder is always allowed as WebGPU SPEC (chapter 3.4.5) defines that out of any pass encoder, each command belongs to one separated usage scope.` - ) - .params(u => - u - .combine('usage0', [ - 'copy-src', - 'copy-dst', - 'uniform', - 'storage', - 'read-only-storage', - 'vertex', - 'index', - 'indirect', - 'indexedIndirect', - ]) - .combine('usage1', [ - 'copy-src', - 'copy-dst', - 'uniform', - 'storage', - 'read-only-storage', - 'vertex', - 'index', - 'indirect', - 'indexedIndirect', - ]) - .combine('pass', ['render', 'compute']) - .unless(({ usage0, usage1, pass }) => { - const IsCopy = usage => { - return usage === 'copy-src' || usage === 'copy-dst'; - }; - // We intend to test copy usages in this test. - if (!IsCopy(usage0) && !IsCopy(usage1)) { - return true; - } - // When both usage0 and usage1 are copy usages, 'pass' is meaningless so in such situation - // we just need to reserve one value as 'pass'. - if (IsCopy(usage0) && IsCopy(usage1)) { - return pass === 'compute'; - } - - const IsValidComputeUsage = usage => { - switch (usage) { - case 'vertex': - case 'index': - case 'indexedIndirect': - return false; - default: - return true; - } - }; - if (pass === 'compute') { - return !IsValidComputeUsage(usage0) || !IsValidComputeUsage(usage1); - } +). +params((u) => +u. +combine('usage0', [ +'copy-src', +'copy-dst', +'uniform', +'storage', +'read-only-storage', +'vertex', +'index', +'indirect', +'indexedIndirect'] +). +combine('usage1', [ +'copy-src', +'copy-dst', +'uniform', +'storage', +'read-only-storage', +'vertex', +'index', +'indirect', +'indexedIndirect'] +). +combine('pass', ['render', 'compute']). +unless(({ usage0, usage1, pass }) => { + const IsCopy = (usage) => { + return usage === 'copy-src' || usage === 'copy-dst'; + }; + // We intend to test copy usages in this test. + if (!IsCopy(usage0) && !IsCopy(usage1)) { + return true; + } + // When both usage0 and usage1 are copy usages, 'pass' is meaningless so in such situation + // we just need to reserve one value as 'pass'. + if (IsCopy(usage0) && IsCopy(usage1)) { + return pass === 'compute'; + } + const IsValidComputeUsage = (usage) => { + switch (usage) { + case 'vertex': + case 'index': + case 'indexedIndirect': return false; - }) - ) - .fn(t => { - const { usage0, usage1, pass } = t.params; + default: + return true; + } + }; + if (pass === 'compute') { + return !IsValidComputeUsage(usage0) || !IsValidComputeUsage(usage1); + } - const kUsages = - GPUBufferUsage.COPY_SRC | - GPUBufferUsage.COPY_DST | - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.INDIRECT | - GPUBufferUsage.VERTEX | - GPUBufferUsage.INDEX; - const buffer = t.createBufferWithState('valid', { - size: kBufferSize, - usage: kUsages, - }); + return false; +}) +). +fn((t) => { + const { usage0, usage1, pass } = t.params; - const UseBufferOnCommandEncoder = ( - usage, + const kUsages = + GPUBufferUsage.COPY_SRC | + GPUBufferUsage.COPY_DST | + GPUBufferUsage.UNIFORM | + GPUBufferUsage.STORAGE | + GPUBufferUsage.INDIRECT | + GPUBufferUsage.VERTEX | + GPUBufferUsage.INDEX; + const buffer = t.createBufferWithState('valid', { + size: kBufferSize, + usage: kUsages + }); - encoder - ) => { - switch (usage) { - case 'copy-src': { + const UseBufferOnCommandEncoder = ( + usage, + + + + + + + + + + encoder) => + { + switch (usage) { + case 'copy-src':{ const destinationBuffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_DST }); encoder.copyBufferToBuffer(buffer, 0, destinationBuffer, 0, 4); break; } - case 'copy-dst': { + case 'copy-dst':{ const sourceBuffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.COPY_SRC }); encoder.copyBufferToBuffer(sourceBuffer, 0, buffer, 0, 4); break; } - case 'uniform': - case 'storage': - case 'read-only-storage': { + case 'uniform': + case 'storage': + case 'read-only-storage':{ const bindGroup = t.createBindGroupForTest(buffer, 0, usage, 'fragment'); switch (pass) { - case 'render': { - const renderPassEncoder = t.beginSimpleRenderPass(encoder); - renderPassEncoder.setBindGroup(0, bindGroup); - renderPassEncoder.end(); - break; - } - case 'compute': { - const computePassEncoder = encoder.beginComputePass(); - computePassEncoder.setBindGroup(0, bindGroup); - computePassEncoder.end(); - break; - } + case 'render':{ + const renderPassEncoder = t.beginSimpleRenderPass(encoder); + renderPassEncoder.setBindGroup(0, bindGroup); + renderPassEncoder.end(); + break; + } + case 'compute':{ + const computePassEncoder = encoder.beginComputePass(); + computePassEncoder.setBindGroup(0, bindGroup); + computePassEncoder.end(); + break; + } default: unreachable(); } - break; } - case 'vertex': { + case 'vertex':{ const renderPassEncoder = t.beginSimpleRenderPass(encoder); renderPassEncoder.setVertexBuffer(0, buffer); renderPassEncoder.end(); break; } - case 'index': { + case 'index':{ const renderPassEncoder = t.beginSimpleRenderPass(encoder); renderPassEncoder.setIndexBuffer(buffer, 'uint16'); renderPassEncoder.end(); break; } - case 'indirect': { + case 'indirect':{ switch (pass) { - case 'render': { - const renderPassEncoder = t.beginSimpleRenderPass(encoder); - const renderPipeline = t.createNoOpRenderPipeline(); - renderPassEncoder.setPipeline(renderPipeline); - renderPassEncoder.drawIndirect(buffer, 0); - renderPassEncoder.end(); - break; - } - case 'compute': { - const computePassEncoder = encoder.beginComputePass(); - const computePipeline = t.createNoOpComputePipeline(); - computePassEncoder.setPipeline(computePipeline); - computePassEncoder.dispatchWorkgroupsIndirect(buffer, 0); - computePassEncoder.end(); - break; - } + case 'render':{ + const renderPassEncoder = t.beginSimpleRenderPass(encoder); + const renderPipeline = t.createNoOpRenderPipeline(); + renderPassEncoder.setPipeline(renderPipeline); + renderPassEncoder.drawIndirect(buffer, 0); + renderPassEncoder.end(); + break; + } + case 'compute':{ + const computePassEncoder = encoder.beginComputePass(); + const computePipeline = t.createNoOpComputePipeline(); + computePassEncoder.setPipeline(computePipeline); + computePassEncoder.dispatchWorkgroupsIndirect(buffer, 0); + computePassEncoder.end(); + break; + } default: unreachable(); } - break; } - case 'indexedIndirect': { + case 'indexedIndirect':{ const renderPassEncoder = t.beginSimpleRenderPass(encoder); const renderPipeline = t.createNoOpRenderPipeline(); renderPassEncoder.setPipeline(renderPipeline); const indexBuffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX }); renderPassEncoder.setIndexBuffer(indexBuffer, 'uint16'); renderPassEncoder.drawIndexedIndirect(buffer, 0); renderPassEncoder.end(); break; } - default: - unreachable(); - } - }; + default: + unreachable(); + } + }; - const encoder = t.device.createCommandEncoder(); - UseBufferOnCommandEncoder(usage0, encoder); - UseBufferOnCommandEncoder(usage1, encoder); - t.expectValidationError(() => { - encoder.finish(); - }, false); - }); + const encoder = t.device.createCommandEncoder(); + UseBufferOnCommandEncoder(usage0, encoder); + UseBufferOnCommandEncoder(usage1, encoder); + t.expectValidationError(() => { + encoder.finish(); + }, false); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_pass_encoder.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_pass_encoder.spec.js index 10c74b80061..694746123a7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_pass_encoder.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_pass_encoder.spec.js @@ -1,36 +1,53 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Texture Usages Validation Tests in Render Pass and Compute Pass. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { pp } from '../../../../../common/util/preprocessor.js'; import { assert } from '../../../../../common/util/util.js'; import { GPUConst } from '../../../../constants.js'; import { kDepthStencilFormats, kDepthStencilFormatResolvedAspect, - kTextureFormatInfo, -} from '../../../../format_info.js'; + kTextureFormatInfo } from +'../../../../format_info.js'; import { ValidationTest } from '../../validation_test.js'; + + + + + + const kTextureBindingTypes = [ - 'sampled-texture', - 'multisampled-texture', - 'writeonly-storage-texture', -]; +'sampled-texture', +'multisampled-texture', +'writeonly-storage-texture', +'readonly-storage-texture', +'readwrite-storage-texture']; + const SIZE = 32; class TextureUsageTracking extends ValidationTest { - createTexture(options = {}) { + createTexture( + options = + + + + + + + + {}) + { const { width = SIZE, height = SIZE, arrayLayerCount = 1, mipLevelCount = 1, sampleCount = 1, - format = 'rgba8unorm', - usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, + format = 'r32float', + usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING } = options; return this.device.createTexture({ @@ -39,11 +56,19 @@ class TextureUsageTracking extends ValidationTest { sampleCount, dimension: '2d', format, - usage, + usage }); } - createBindGroupLayout(binding, bindingType, viewDimension, options = {}) { + createBindGroupLayout( + binding, + bindingType, + viewDimension, + options = + + + {}) + { const { sampleType, format } = options; let entry; switch (bindingType) { @@ -57,26 +82,48 @@ class TextureUsageTracking extends ValidationTest { assert(format !== undefined); entry = { storageTexture: { access: 'write-only', format, viewDimension } }; break; + case 'readonly-storage-texture': + assert(format !== undefined); + entry = { storageTexture: { access: 'read-only', format, viewDimension } }; + break; + case 'readwrite-storage-texture': + assert(format !== undefined); + entry = { storageTexture: { access: 'read-write', format, viewDimension } }; + break; } return this.device.createBindGroupLayout({ entries: [ - { binding, visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, ...entry }, - ], + { binding, visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, ...entry }] + }); } - createBindGroup(binding, resource, bindingType, viewDimension, options = {}) { + createBindGroup( + binding, + resource, + bindingType, + viewDimension, + options = + + + {}) + { return this.device.createBindGroup({ entries: [{ binding, resource }], - layout: this.createBindGroupLayout(binding, bindingType, viewDimension, options), + layout: this.createBindGroupLayout(binding, bindingType, viewDimension, options) }); } - createAndExecuteBundle(binding, bindGroup, pass, depthStencilFormat) { + createAndExecuteBundle( + binding, + bindGroup, + pass, + depthStencilFormat) + { const bundleEncoder = this.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - depthStencilFormat, + colorFormats: ['r32float'], + depthStencilFormat }); bundleEncoder.setBindGroup(binding, bindGroup); const bundle = bundleEncoder.finish(); @@ -86,69 +133,89 @@ class TextureUsageTracking extends ValidationTest { beginSimpleRenderPass(encoder, view) { return encoder.beginRenderPass({ colorAttachments: [ - { - view, - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view, + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); } /** - * Create two bind groups. Resource usages conflict between these two bind groups. But resource - * usage inside each bind group doesn't conflict. + * Create two bind groups with one texture view. */ - makeConflictingBindGroups() { + makeTwoBindGroupsWithOneTextureView(usage1, usage2) { const view = this.createTexture({ - usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING, + usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING }).createView(); const bindGroupLayouts = [ - this.createBindGroupLayout(0, 'sampled-texture', '2d'), - this.createBindGroupLayout(0, 'writeonly-storage-texture', '2d', { format: 'rgba8unorm' }), - ]; + this.createBindGroupLayout(0, usage1, '2d', { + sampleType: 'unfilterable-float', + format: 'r32float' + }), + this.createBindGroupLayout(0, usage2, '2d', { + sampleType: 'unfilterable-float', + format: 'r32float' + })]; return { bindGroupLayouts, bindGroups: [ - this.device.createBindGroup({ - layout: bindGroupLayouts[0], - entries: [{ binding: 0, resource: view }], - }), - this.device.createBindGroup({ - layout: bindGroupLayouts[1], - entries: [{ binding: 0, resource: view }], - }), - ], + this.device.createBindGroup({ + layout: bindGroupLayouts[0], + entries: [{ binding: 0, resource: view }] + }), + this.device.createBindGroup({ + layout: bindGroupLayouts[1], + entries: [{ binding: 0, resource: view }] + })] + }; } - testValidationScope(compute) { - const { bindGroupLayouts, bindGroups } = this.makeConflictingBindGroups(); + testValidationScope( + compute, + usage1, + usage2) + + + + + + + { + const { bindGroupLayouts, bindGroups } = this.makeTwoBindGroupsWithOneTextureView( + usage1, + usage2 + ); const encoder = this.device.createCommandEncoder(); - const pass = compute - ? encoder.beginComputePass() - : this.beginSimpleRenderPass(encoder, this.createTexture().createView()); + const pass = compute ? + encoder.beginComputePass() : + this.beginSimpleRenderPass(encoder, this.createTexture().createView()); // Create pipeline. Note that bindings unused in pipeline should be validated too. const pipelineLayout = this.device.createPipelineLayout({ - bindGroupLayouts, + bindGroupLayouts }); - const pipeline = compute - ? this.createNoOpComputePipeline(pipelineLayout) - : this.createNoOpRenderPipeline(pipelineLayout); + const pipeline = compute ? + this.createNoOpComputePipeline(pipelineLayout) : + this.createNoOpRenderPipeline(pipelineLayout, 'r32float'); return { bindGroup0: bindGroups[0], bindGroup1: bindGroups[1], encoder, pass, - pipeline, + pipeline }; } - setPipeline(pass, pipeline) { + setPipeline( + pass, + pipeline) + { if (pass instanceof GPUComputePassEncoder) { pass.setPipeline(pipeline); } else { @@ -179,1182 +246,1307 @@ const BASE_LAYER = 1; const TOTAL_LAYERS = 6; const SLICE_COUNT = 2; -g.test('subresources_and_binding_types_combination_for_color') - .desc( - ` +g.test('subresources_and_binding_types_combination_for_color'). +desc( + ` Test the resource usage rules by using two views of the same GPUTexture in a usage scope. Tests various combinations of {sampled, storage, render target} usages, mip-level ranges, and array-layer ranges, in {compute pass, render pass, render pass via bundle}. - Error if a subresource (level/layer) is used as read+write or write+write in the scope, except when both usages are writeonly-storage-texture which is allowed. ` - ) - .params(u => - u - .combine('compute', [false, true]) - .expandWithParams(p => [ - { _usageOK: true, type0: 'sampled-texture', type1: 'sampled-texture' }, - { _usageOK: false, type0: 'sampled-texture', type1: 'writeonly-storage-texture' }, - { _usageOK: false, type0: 'sampled-texture', type1: 'render-target' }, - // Race condition upon multiple writable storage texture is valid. - // For p.compute === true, fails at pass.dispatch because aliasing exists. - { - _usageOK: !p.compute, - type0: 'writeonly-storage-texture', - type1: 'writeonly-storage-texture', - }, - { _usageOK: false, type0: 'writeonly-storage-texture', type1: 'render-target' }, - { _usageOK: false, type0: 'render-target', type1: 'render-target' }, - ]) - .beginSubcases() - .combine('binding0InBundle', [false, true]) - .combine('binding1InBundle', [false, true]) - .unless( - p => - // We can't set 'render-target' in bundle, so we need to exclude it from bundle. - (p.binding0InBundle && p.type0 === 'render-target') || - (p.binding1InBundle && p.type1 === 'render-target') || - // We can't set 'render-target' or bundle in compute. - (p.compute && - (p.binding0InBundle || - p.binding1InBundle || - p.type0 === 'render-target' || - p.type1 === 'render-target')) - ) - .combineWithParams([ - // Two texture usages are binding to the same texture subresource. - { - levelCount0: 1, - layerCount0: 1, - baseLevel1: BASE_LEVEL, - levelCount1: 1, - baseLayer1: BASE_LAYER, - layerCount1: 1, - _resourceSuccess: false, - }, +). +params((u) => +u. +combine('compute', [false, true]). +expandWithParams( + (p) => + [ + { _usageOK: true, type0: 'sampled-texture', type1: 'sampled-texture' }, + { _usageOK: false, type0: 'sampled-texture', type1: 'writeonly-storage-texture' }, + { _usageOK: true, type0: 'sampled-texture', type1: 'readonly-storage-texture' }, + { _usageOK: false, type0: 'sampled-texture', type1: 'readwrite-storage-texture' }, + { _usageOK: false, type0: 'sampled-texture', type1: 'render-target' }, + // Race condition upon multiple writable storage texture is valid. + // For p.compute === true, fails at pass.dispatch because aliasing exists. + { + _usageOK: !p.compute, + type0: 'writeonly-storage-texture', + type1: 'writeonly-storage-texture' + }, + { + _usageOK: true, + type0: 'readonly-storage-texture', + type1: 'readonly-storage-texture' + }, + { + _usageOK: !p.compute, + type0: 'readwrite-storage-texture', + type1: 'readwrite-storage-texture' + }, + { + _usageOK: false, + type0: 'readonly-storage-texture', + type1: 'writeonly-storage-texture' + }, + { + _usageOK: false, + type0: 'readonly-storage-texture', + type1: 'readwrite-storage-texture' + }, + { + _usageOK: false, + type0: 'writeonly-storage-texture', + type1: 'readwrite-storage-texture' + }, + { _usageOK: false, type0: 'readonly-storage-texture', type1: 'render-target' }, + { _usageOK: false, type0: 'writeonly-storage-texture', type1: 'render-target' }, + { _usageOK: false, type0: 'readwrite-storage-texture', type1: 'render-target' }, + { _usageOK: false, type0: 'render-target', type1: 'render-target' }] - // Two texture usages are binding to different mip levels of the same texture. - { - levelCount0: 1, - layerCount0: 1, - baseLevel1: BASE_LEVEL + 1, - levelCount1: 1, - baseLayer1: BASE_LAYER, - layerCount1: 1, - _resourceSuccess: true, - }, +). +beginSubcases(). +combine('binding0InBundle', [false, true]). +combine('binding1InBundle', [false, true]). +unless( + (p) => + // We can't set 'render-target' in bundle, so we need to exclude it from bundle. + p.binding0InBundle && p.type0 === 'render-target' || + p.binding1InBundle && p.type1 === 'render-target' || + // We can't set 'render-target' or bundle in compute. + p.compute && ( + p.binding0InBundle || + p.binding1InBundle || + p.type0 === 'render-target' || + p.type1 === 'render-target') +). +combineWithParams([ +// Two texture usages are binding to the same texture subresource. +{ + levelCount0: 1, + layerCount0: 1, + baseLevel1: BASE_LEVEL, + levelCount1: 1, + baseLayer1: BASE_LAYER, + layerCount1: 1, + _resourceSuccess: false +}, - // Two texture usages are binding to different array layers of the same texture. - { - levelCount0: 1, - layerCount0: 1, - baseLevel1: BASE_LEVEL, - levelCount1: 1, - baseLayer1: BASE_LAYER + 1, - layerCount1: 1, - _resourceSuccess: true, - }, +// Two texture usages are binding to different mip levels of the same texture. +{ + levelCount0: 1, + layerCount0: 1, + baseLevel1: BASE_LEVEL + 1, + levelCount1: 1, + baseLayer1: BASE_LAYER, + layerCount1: 1, + _resourceSuccess: true +}, - // The second texture usage contains the whole mip chain where the first texture usage is - // using. - { - levelCount0: 1, - layerCount0: 1, - baseLevel1: 0, - levelCount1: TOTAL_LEVELS, - baseLayer1: BASE_LAYER, - layerCount1: 1, - _resourceSuccess: false, - }, +// Two texture usages are binding to different array layers of the same texture. +{ + levelCount0: 1, + layerCount0: 1, + baseLevel1: BASE_LEVEL, + levelCount1: 1, + baseLayer1: BASE_LAYER + 1, + layerCount1: 1, + _resourceSuccess: true +}, - // The second texture usage contains all layers where the first texture usage is using. - { - levelCount0: 1, - layerCount0: 1, - baseLevel1: BASE_LEVEL, - levelCount1: 1, - baseLayer1: 0, - layerCount1: TOTAL_LAYERS, - _resourceSuccess: false, - }, +// The second texture usage contains the whole mip chain where the first texture usage is +// using. +{ + levelCount0: 1, + layerCount0: 1, + baseLevel1: 0, + levelCount1: TOTAL_LEVELS, + baseLayer1: BASE_LAYER, + layerCount1: 1, + _resourceSuccess: false +}, - // The second texture usage contains all subresources where the first texture usage is - // using. - { - levelCount0: 1, - layerCount0: 1, - baseLevel1: 0, - levelCount1: TOTAL_LEVELS, - baseLayer1: 0, - layerCount1: TOTAL_LAYERS, - _resourceSuccess: false, - }, +// The second texture usage contains all layers where the first texture usage is using. +{ + levelCount0: 1, + layerCount0: 1, + baseLevel1: BASE_LEVEL, + levelCount1: 1, + baseLayer1: 0, + layerCount1: TOTAL_LAYERS, + _resourceSuccess: false +}, - // Both of the two usages access a few mip levels on the same layer but they don't overlap. - { - levelCount0: SLICE_COUNT, - layerCount0: 1, - baseLevel1: BASE_LEVEL + SLICE_COUNT, - levelCount1: 3, - baseLayer1: BASE_LAYER, - layerCount1: 1, - _resourceSuccess: true, - }, +// The second texture usage contains all subresources where the first texture usage is +// using. +{ + levelCount0: 1, + layerCount0: 1, + baseLevel1: 0, + levelCount1: TOTAL_LEVELS, + baseLayer1: 0, + layerCount1: TOTAL_LAYERS, + _resourceSuccess: false +}, - // Both of the two usages access a few mip levels on the same layer and they overlap. - { - levelCount0: SLICE_COUNT, - layerCount0: 1, - baseLevel1: BASE_LEVEL + SLICE_COUNT - 1, - levelCount1: 3, - baseLayer1: BASE_LAYER, - layerCount1: 1, - _resourceSuccess: false, - }, +// Both of the two usages access a few mip levels on the same layer but they don't overlap. +{ + levelCount0: SLICE_COUNT, + layerCount0: 1, + baseLevel1: BASE_LEVEL + SLICE_COUNT, + levelCount1: 3, + baseLayer1: BASE_LAYER, + layerCount1: 1, + _resourceSuccess: true +}, - // Both of the two usages access a few array layers on the same level but they don't - // overlap. - { - levelCount0: 1, - layerCount0: SLICE_COUNT, - baseLevel1: BASE_LEVEL, - levelCount1: 1, - baseLayer1: BASE_LAYER + SLICE_COUNT, - layerCount1: 3, - _resourceSuccess: true, - }, +// Both of the two usages access a few mip levels on the same layer and they overlap. +{ + levelCount0: SLICE_COUNT, + layerCount0: 1, + baseLevel1: BASE_LEVEL + SLICE_COUNT - 1, + levelCount1: 3, + baseLayer1: BASE_LAYER, + layerCount1: 1, + _resourceSuccess: false +}, - // Both of the two usages access a few array layers on the same level and they overlap. - { - levelCount0: 1, - layerCount0: SLICE_COUNT, - baseLevel1: BASE_LEVEL, - levelCount1: 1, - baseLayer1: BASE_LAYER + SLICE_COUNT - 1, - layerCount1: 3, - _resourceSuccess: false, - }, +// Both of the two usages access a few array layers on the same level but they don't +// overlap. +{ + levelCount0: 1, + layerCount0: SLICE_COUNT, + baseLevel1: BASE_LEVEL, + levelCount1: 1, + baseLayer1: BASE_LAYER + SLICE_COUNT, + layerCount1: 3, + _resourceSuccess: true +}, - // Both of the two usages access a few array layers and mip levels but they don't overlap. - { - levelCount0: SLICE_COUNT, - layerCount0: SLICE_COUNT, - baseLevel1: BASE_LEVEL + SLICE_COUNT, - levelCount1: 3, - baseLayer1: BASE_LAYER + SLICE_COUNT, - layerCount1: 3, - _resourceSuccess: true, - }, +// Both of the two usages access a few array layers on the same level and they overlap. +{ + levelCount0: 1, + layerCount0: SLICE_COUNT, + baseLevel1: BASE_LEVEL, + levelCount1: 1, + baseLayer1: BASE_LAYER + SLICE_COUNT - 1, + layerCount1: 3, + _resourceSuccess: false +}, - // Both of the two usages access a few array layers and mip levels and they overlap. - { - levelCount0: SLICE_COUNT, - layerCount0: SLICE_COUNT, - baseLevel1: BASE_LEVEL + SLICE_COUNT - 1, - levelCount1: 3, - baseLayer1: BASE_LAYER + SLICE_COUNT - 1, - layerCount1: 3, - _resourceSuccess: false, - }, - ]) - .unless( - p => - // Every color attachment or storage texture can use only one single subresource. - (p.type0 !== 'sampled-texture' && (p.levelCount0 !== 1 || p.layerCount0 !== 1)) || - (p.type1 !== 'sampled-texture' && (p.levelCount1 !== 1 || p.layerCount1 !== 1)) || - // All color attachments' size should be the same. - (p.type0 === 'render-target' && - p.type1 === 'render-target' && - p.baseLevel1 !== BASE_LEVEL) - ) - ) - .fn(t => { - const { - compute, - binding0InBundle, - binding1InBundle, - levelCount0, - layerCount0, - baseLevel1, - baseLayer1, - levelCount1, - layerCount1, - type0, - type1, - _usageOK, - _resourceSuccess, - } = t.params; +// Both of the two usages access a few array layers and mip levels but they don't overlap. +{ + levelCount0: SLICE_COUNT, + layerCount0: SLICE_COUNT, + baseLevel1: BASE_LEVEL + SLICE_COUNT, + levelCount1: 3, + baseLayer1: BASE_LAYER + SLICE_COUNT, + layerCount1: 3, + _resourceSuccess: true +}, - const texture = t.createTexture({ - arrayLayerCount: TOTAL_LAYERS, - mipLevelCount: TOTAL_LEVELS, - usage: - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.STORAGE_BINDING | - GPUTextureUsage.RENDER_ATTACHMENT, - }); +// Both of the two usages access a few array layers and mip levels and they overlap. +{ + levelCount0: SLICE_COUNT, + layerCount0: SLICE_COUNT, + baseLevel1: BASE_LEVEL + SLICE_COUNT - 1, + levelCount1: 3, + baseLayer1: BASE_LAYER + SLICE_COUNT - 1, + layerCount1: 3, + _resourceSuccess: false +}] +). +unless( + (p) => + // Every color attachment or storage texture can use only one single subresource. + p.type0 !== 'sampled-texture' && (p.levelCount0 !== 1 || p.layerCount0 !== 1) || + p.type1 !== 'sampled-texture' && (p.levelCount1 !== 1 || p.layerCount1 !== 1) || + // All color attachments' size should be the same. + p.type0 === 'render-target' && + p.type1 === 'render-target' && + p.baseLevel1 !== BASE_LEVEL +) +). +fn((t) => { + const { + compute, + binding0InBundle, + binding1InBundle, + levelCount0, + layerCount0, + baseLevel1, + baseLayer1, + levelCount1, + layerCount1, + type0, + type1, + _usageOK, + _resourceSuccess + } = t.params; - const dimension0 = layerCount0 !== 1 ? '2d-array' : '2d'; - const view0 = texture.createView({ - dimension: dimension0, - baseMipLevel: BASE_LEVEL, - mipLevelCount: levelCount0, - baseArrayLayer: BASE_LAYER, - arrayLayerCount: layerCount0, - }); + t.skipIf( + t.isCompatibility, + 'multiple views of the same texture in a single draw/dispatch are not supported in compat, nor are sub ranges of layers' + ); - const dimension1 = layerCount1 !== 1 ? '2d-array' : '2d'; - const view1 = texture.createView({ - dimension: dimension1, - baseMipLevel: baseLevel1, - mipLevelCount: levelCount1, - baseArrayLayer: baseLayer1, - arrayLayerCount: layerCount1, - }); - - const viewsAreSame = - dimension0 === dimension1 && - layerCount0 === layerCount1 && - BASE_LEVEL === baseLevel1 && - levelCount0 === levelCount1 && - BASE_LAYER === baseLayer1 && - layerCount0 === layerCount1; - if (!viewsAreSame && t.isCompatibility) { - t.skip('different views of same texture are not supported in compatibility mode'); - } - - const encoder = t.device.createCommandEncoder(); - if (type0 === 'render-target') { - // Note that type1 is 'render-target' too. So we don't need to create bindings. - assert(type1 === 'render-target'); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: view0, - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - { - view: view1, - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.end(); - } else { - const pass = compute - ? encoder.beginComputePass() - : t.beginSimpleRenderPass( - encoder, - type1 === 'render-target' ? view1 : t.createTexture().createView() - ); - - const bgls = []; - // Create bind groups. Set bind groups in pass directly or set bind groups in bundle. - const storageTextureFormat0 = type0 === 'sampled-texture' ? undefined : 'rgba8unorm'; - - const bgl0 = t.createBindGroupLayout(0, type0, dimension0, { format: storageTextureFormat0 }); - const bindGroup0 = t.device.createBindGroup({ - layout: bgl0, - entries: [{ binding: 0, resource: view0 }], - }); - bgls.push(bgl0); - - if (binding0InBundle) { - assert(pass instanceof GPURenderPassEncoder); - t.createAndExecuteBundle(0, bindGroup0, pass); - } else { - pass.setBindGroup(0, bindGroup0); - } - if (type1 !== 'render-target') { - const storageTextureFormat1 = type1 === 'sampled-texture' ? undefined : 'rgba8unorm'; - - const bgl1 = t.createBindGroupLayout(1, type1, dimension1, { - format: storageTextureFormat1, - }); - const bindGroup1 = t.device.createBindGroup({ - layout: bgl1, - entries: [{ binding: 1, resource: view1 }], - }); - bgls.push(bgl1); - - if (binding1InBundle) { - assert(pass instanceof GPURenderPassEncoder); - t.createAndExecuteBundle(1, bindGroup1, pass); - } else { - pass.setBindGroup(1, bindGroup1); - } - } - if (compute) { - t.setComputePipelineAndCallDispatch( - pass, - t.device.createPipelineLayout({ bindGroupLayouts: bgls }) - ); - } - pass.end(); - } - - const success = _resourceSuccess || _usageOK; - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const texture = t.createTexture({ + arrayLayerCount: TOTAL_LAYERS, + mipLevelCount: TOTAL_LEVELS, + usage: + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.STORAGE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT }); -g.test('subresources_and_binding_types_combination_for_aspect') - .desc( - ` + const dimension0 = layerCount0 !== 1 ? '2d-array' : '2d'; + const view0 = texture.createView({ + dimension: dimension0, + baseMipLevel: BASE_LEVEL, + mipLevelCount: levelCount0, + baseArrayLayer: BASE_LAYER, + arrayLayerCount: layerCount0 + }); + + const dimension1 = layerCount1 !== 1 ? '2d-array' : '2d'; + const view1 = texture.createView({ + dimension: dimension1, + baseMipLevel: baseLevel1, + mipLevelCount: levelCount1, + baseArrayLayer: baseLayer1, + arrayLayerCount: layerCount1 + }); + + const viewsAreSame = + dimension0 === dimension1 && + layerCount0 === layerCount1 && + BASE_LEVEL === baseLevel1 && + levelCount0 === levelCount1 && + BASE_LAYER === baseLayer1 && + layerCount0 === layerCount1; + if (!viewsAreSame && t.isCompatibility) { + t.skip('different views of same texture are not supported in compatibility mode'); + } + + const encoder = t.device.createCommandEncoder(); + if (type0 === 'render-target') { + // Note that type1 is 'render-target' too. So we don't need to create bindings. + assert(type1 === 'render-target'); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: view0, + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }, + { + view: view1, + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + pass.end(); + } else { + const pass = compute ? + encoder.beginComputePass() : + t.beginSimpleRenderPass( + encoder, + type1 === 'render-target' ? view1 : t.createTexture().createView() + ); + + const bgls = []; + // Create bind groups. Set bind groups in pass directly or set bind groups in bundle. + const storageTextureFormat0 = type0 === 'sampled-texture' ? undefined : 'r32float'; + const sampleType0 = type0 === 'sampled-texture' ? 'unfilterable-float' : undefined; + + const bgl0 = t.createBindGroupLayout(0, type0, dimension0, { + format: storageTextureFormat0, + sampleType: sampleType0 + }); + const bindGroup0 = t.device.createBindGroup({ + layout: bgl0, + entries: [{ binding: 0, resource: view0 }] + }); + bgls.push(bgl0); + + if (binding0InBundle) { + assert(pass instanceof GPURenderPassEncoder); + t.createAndExecuteBundle(0, bindGroup0, pass); + } else { + pass.setBindGroup(0, bindGroup0); + } + if (type1 !== 'render-target') { + const storageTextureFormat1 = type1 === 'sampled-texture' ? undefined : 'r32float'; + const sampleType1 = type1 === 'sampled-texture' ? 'unfilterable-float' : undefined; + const bgl1 = t.createBindGroupLayout(1, type1, dimension1, { + format: storageTextureFormat1, + sampleType: sampleType1 + }); + const bindGroup1 = t.device.createBindGroup({ + layout: bgl1, + entries: [{ binding: 1, resource: view1 }] + }); + bgls.push(bgl1); + + if (binding1InBundle) { + assert(pass instanceof GPURenderPassEncoder); + t.createAndExecuteBundle(1, bindGroup1, pass); + } else { + pass.setBindGroup(1, bindGroup1); + } + } + if (compute) { + t.setComputePipelineAndCallDispatch( + pass, + t.device.createPipelineLayout({ bindGroupLayouts: bgls }) + ); + } + pass.end(); + } + + const success = _resourceSuccess || _usageOK; + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('subresources_and_binding_types_combination_for_aspect'). +desc( + ` Test the resource usage rules by using two views of the same GPUTexture in a usage scope. Tests various combinations of {sampled, render target} usages, {all, depth-only, stencil-only} aspects that overlap a given subresources in {compute pass, render pass, render pass via bundle}. - Error if a subresource (level/layer/aspect) is used as read+write or write+write in the scope. ` - ) - .params(u => - u - .combine('compute', [false, true]) - .combine('binding0InBundle', [false, true]) - .combine('binding1InBundle', [false, true]) - .combine('format', kDepthStencilFormats) - .beginSubcases() - .combineWithParams([ - { - baseLevel: BASE_LEVEL, - baseLayer: BASE_LAYER, - _resourceSuccess: false, - }, - { - baseLevel: BASE_LEVEL + 1, - baseLayer: BASE_LAYER, - _resourceSuccess: true, - }, - { - baseLevel: BASE_LEVEL, - baseLayer: BASE_LAYER + 1, - _resourceSuccess: true, - }, - ]) - .combine('aspect0', ['all', 'depth-only', 'stencil-only']) - .combine('aspect1', ['all', 'depth-only', 'stencil-only']) - .unless( - p => - (p.aspect0 === 'stencil-only' && !kTextureFormatInfo[p.format].stencil) || - (p.aspect1 === 'stencil-only' && !kTextureFormatInfo[p.format].stencil) - ) - .unless( - p => - (p.aspect0 === 'depth-only' && !kTextureFormatInfo[p.format].depth) || - (p.aspect1 === 'depth-only' && !kTextureFormatInfo[p.format].depth) - ) - .combineWithParams([ - { - type0: 'sampled-texture', - type1: 'sampled-texture', - _usageSuccess: true, - }, - { - type0: 'sampled-texture', - type1: 'render-target', - _usageSuccess: false, - }, - ]) - .unless( - // Can't sample a multiplanar texture without selecting an aspect. - p => - !!kTextureFormatInfo[p.format].depth && - !!kTextureFormatInfo[p.format].stencil && - ((p.aspect0 === 'all' && p.type0 === 'sampled-texture') || - (p.aspect1 === 'all' && p.type1 === 'sampled-texture')) - ) - .unless( - p => - // We can't set 'render-target' in bundle, so we need to exclude it from bundle. - p.binding1InBundle && p.type1 === 'render-target' - ) - .unless( - p => - // We can't set 'render-target' or bundle in compute. Note that type0 is definitely not - // 'render-target' - p.compute && (p.binding0InBundle || p.binding1InBundle || p.type1 === 'render-target') - ) - .unless( - p => - // Depth-stencil attachment views must encompass all aspects of the texture. Invalid - // cases are for depth-stencil textures when the aspect is not 'all'. - p.type1 === 'render-target' && - !!kTextureFormatInfo[p.format].depth && - !!kTextureFormatInfo[p.format].stencil && - p.aspect1 !== 'all' - ) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(t => { - const { - compute, - binding0InBundle, - binding1InBundle, - format, - baseLevel, - baseLayer, - aspect0, - aspect1, - type0, - type1, - _resourceSuccess, - _usageSuccess, - } = t.params; +). +params((u) => +u. +combine('compute', [false, true]). +combine('binding0InBundle', [false, true]). +combine('binding1InBundle', [false, true]). +combine('format', kDepthStencilFormats). +beginSubcases(). +combineWithParams([ +{ + baseLevel: BASE_LEVEL, + baseLayer: BASE_LAYER, + _resourceSuccess: false +}, +{ + baseLevel: BASE_LEVEL + 1, + baseLayer: BASE_LAYER, + _resourceSuccess: true +}, +{ + baseLevel: BASE_LEVEL, + baseLayer: BASE_LAYER + 1, + _resourceSuccess: true +}] +). +combine('aspect0', ['all', 'depth-only', 'stencil-only']). +combine('aspect1', ['all', 'depth-only', 'stencil-only']). +unless( + (p) => + p.aspect0 === 'stencil-only' && !kTextureFormatInfo[p.format].stencil || + p.aspect1 === 'stencil-only' && !kTextureFormatInfo[p.format].stencil +). +unless( + (p) => + p.aspect0 === 'depth-only' && !kTextureFormatInfo[p.format].depth || + p.aspect1 === 'depth-only' && !kTextureFormatInfo[p.format].depth +). +combineWithParams([ +{ + type0: 'sampled-texture', + type1: 'sampled-texture', + _usageSuccess: true +}, +{ + type0: 'sampled-texture', + type1: 'render-target', + _usageSuccess: false +}] +). +unless( + // Can't sample a multiplanar texture without selecting an aspect. + (p) => + !!kTextureFormatInfo[p.format].depth && + !!kTextureFormatInfo[p.format].stencil && ( + p.aspect0 === 'all' && p.type0 === 'sampled-texture' || + p.aspect1 === 'all' && p.type1 === 'sampled-texture') +). +unless( + (p) => + // We can't set 'render-target' in bundle, so we need to exclude it from bundle. + p.binding1InBundle && p.type1 === 'render-target' +). +unless( + (p) => + // We can't set 'render-target' or bundle in compute. Note that type0 is definitely not + // 'render-target' + p.compute && (p.binding0InBundle || p.binding1InBundle || p.type1 === 'render-target') +). +unless( + (p) => + // Depth-stencil attachment views must encompass all aspects of the texture. Invalid + // cases are for depth-stencil textures when the aspect is not 'all'. + p.type1 === 'render-target' && + !!kTextureFormatInfo[p.format].depth && + !!kTextureFormatInfo[p.format].stencil && + p.aspect1 !== 'all' +) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn((t) => { + const { + compute, + binding0InBundle, + binding1InBundle, + format, + baseLevel, + baseLayer, + aspect0, + aspect1, + type0, + type1, + _resourceSuccess, + _usageSuccess + } = t.params; - const texture = t.createTexture({ - arrayLayerCount: TOTAL_LAYERS, - mipLevelCount: TOTAL_LEVELS, - format, - }); + t.skipIf(t.isCompatibility, 'sub ranges of layers are not supported in compat mode'); - const view0 = texture.createView({ - dimension: '2d', - baseMipLevel: BASE_LEVEL, - mipLevelCount: 1, - baseArrayLayer: BASE_LAYER, - arrayLayerCount: 1, - aspect: aspect0, - }); - - const view1 = texture.createView({ - dimension: '2d', - baseMipLevel: baseLevel, - mipLevelCount: 1, - baseArrayLayer: baseLayer, - arrayLayerCount: 1, - aspect: aspect1, - }); - const view1ResolvedFormat = kDepthStencilFormatResolvedAspect[format][aspect1]; - const view1HasDepth = kTextureFormatInfo[view1ResolvedFormat].depth; - const view1HasStencil = kTextureFormatInfo[view1ResolvedFormat].stencil; - - const encoder = t.device.createCommandEncoder(); - // Color attachment's size should match depth/stencil attachment's size. Note that if - // type1 !== 'render-target' then there's no depthStencilAttachment to match anyway. - const depthStencilFormat = type1 === 'render-target' ? view1ResolvedFormat : undefined; - - const size = SIZE >> baseLevel; - const pass = compute - ? encoder.beginComputePass() - : encoder.beginRenderPass({ - colorAttachments: [ - { - view: t.createTexture({ width: size, height: size }).createView(), - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - - depthStencilAttachment: depthStencilFormat - ? { - view: view1, - depthStoreOp: view1HasDepth ? 'discard' : undefined, - depthLoadOp: view1HasDepth ? 'load' : undefined, - stencilStoreOp: view1HasStencil ? 'discard' : undefined, - stencilLoadOp: view1HasStencil ? 'load' : undefined, - } - : undefined, - }); - - const aspectSampleType = (format, aspect) => { - switch (aspect) { - case 'depth-only': - return 'depth'; - case 'stencil-only': - return 'uint'; - case 'all': - assert(kTextureFormatInfo[format].depth !== kTextureFormatInfo[format].stencil); - if (kTextureFormatInfo[format].stencil) { - return 'uint'; - } - return 'depth'; - } - }; - - // Create bind groups. Set bind groups in pass directly or set bind groups in bundle. - const bindGroup0 = t.createBindGroup(0, view0, type0, '2d', { - sampleType: type0 === 'sampled-texture' ? aspectSampleType(format, aspect0) : undefined, - }); - if (binding0InBundle) { - assert(pass instanceof GPURenderPassEncoder); - t.createAndExecuteBundle(0, bindGroup0, pass, depthStencilFormat); - } else { - pass.setBindGroup(0, bindGroup0); - } - if (type1 !== 'render-target') { - const bindGroup1 = t.createBindGroup(1, view1, type1, '2d', { - sampleType: type1 === 'sampled-texture' ? aspectSampleType(format, aspect1) : undefined, - }); - if (binding1InBundle) { - assert(pass instanceof GPURenderPassEncoder); - t.createAndExecuteBundle(1, bindGroup1, pass, depthStencilFormat); - } else { - pass.setBindGroup(1, bindGroup1); - } - } - if (compute) t.setComputePipelineAndCallDispatch(pass); - pass.end(); - - const disjointAspects = - (aspect0 === 'depth-only' && aspect1 === 'stencil-only') || - (aspect0 === 'stencil-only' && aspect1 === 'depth-only'); - - // If subresources' mip/array slices has no overlap, or their binding types don't conflict, - // it will definitely success no matter what aspects they are binding to. - const success = disjointAspects || _resourceSuccess || _usageSuccess; - - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const texture = t.createTexture({ + arrayLayerCount: TOTAL_LAYERS, + mipLevelCount: TOTAL_LEVELS, + format }); -g.test('shader_stages_and_visibility,storage_write') - .desc( - ` + const view0 = texture.createView({ + dimension: '2d', + baseMipLevel: BASE_LEVEL, + mipLevelCount: 1, + baseArrayLayer: BASE_LAYER, + arrayLayerCount: 1, + aspect: aspect0 + }); + + const view1 = texture.createView({ + dimension: '2d', + baseMipLevel: baseLevel, + mipLevelCount: 1, + baseArrayLayer: baseLayer, + arrayLayerCount: 1, + aspect: aspect1 + }); + const view1ResolvedFormat = kDepthStencilFormatResolvedAspect[format][aspect1]; + const view1HasDepth = kTextureFormatInfo[view1ResolvedFormat].depth; + const view1HasStencil = kTextureFormatInfo[view1ResolvedFormat].stencil; + + const encoder = t.device.createCommandEncoder(); + // Color attachment's size should match depth/stencil attachment's size. Note that if + // type1 !== 'render-target' then there's no depthStencilAttachment to match anyway. + const depthStencilFormat = type1 === 'render-target' ? view1ResolvedFormat : undefined; + + const size = SIZE >> baseLevel; + const pass = compute ? + encoder.beginComputePass() : + encoder.beginRenderPass({ + colorAttachments: [ + { + view: t.createTexture({ width: size, height: size }).createView(), + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }], + + depthStencilAttachment: depthStencilFormat ? + { + view: view1, + depthStoreOp: view1HasDepth ? 'discard' : undefined, + depthLoadOp: view1HasDepth ? 'load' : undefined, + stencilStoreOp: view1HasStencil ? 'discard' : undefined, + stencilLoadOp: view1HasStencil ? 'load' : undefined + } : + undefined + }); + + const aspectSampleType = (format, aspect) => { + switch (aspect) { + case 'depth-only': + return 'depth'; + case 'stencil-only': + return 'uint'; + case 'all': + assert(kTextureFormatInfo[format].depth !== kTextureFormatInfo[format].stencil); + if (kTextureFormatInfo[format].stencil) { + return 'uint'; + } + return 'depth'; + } + }; + + // Create bind groups. Set bind groups in pass directly or set bind groups in bundle. + const bindGroup0 = t.createBindGroup(0, view0, type0, '2d', { + sampleType: type0 === 'sampled-texture' ? aspectSampleType(format, aspect0) : undefined + }); + if (binding0InBundle) { + assert(pass instanceof GPURenderPassEncoder); + t.createAndExecuteBundle(0, bindGroup0, pass, depthStencilFormat); + } else { + pass.setBindGroup(0, bindGroup0); + } + if (type1 !== 'render-target') { + const bindGroup1 = t.createBindGroup(1, view1, type1, '2d', { + sampleType: type1 === 'sampled-texture' ? aspectSampleType(format, aspect1) : undefined + }); + if (binding1InBundle) { + assert(pass instanceof GPURenderPassEncoder); + t.createAndExecuteBundle(1, bindGroup1, pass, depthStencilFormat); + } else { + pass.setBindGroup(1, bindGroup1); + } + } + if (compute) t.setComputePipelineAndCallDispatch(pass); + pass.end(); + + const disjointAspects = + aspect0 === 'depth-only' && aspect1 === 'stencil-only' || + aspect0 === 'stencil-only' && aspect1 === 'depth-only'; + + // If subresources' mip/array slices has no overlap, or their binding types don't conflict, + // it will definitely success no matter what aspects they are binding to. + const success = disjointAspects || _resourceSuccess || _usageSuccess; + + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('shader_stages_and_visibility,storage_write'). +desc( + ` Test that stage visibility doesn't affect resource usage validation. - Use a texture as sampled, with 'readVisibility' {0,VERTEX,FRAGMENT,COMPUTE} - Use a {same,different} texture as storage, with 'writeVisibility' {0,FRAGMENT,COMPUTE} There should be a validation error IFF the same texture was used. ` - ) - .params(u => - u - .combine('compute', [false, true]) - .beginSubcases() - .combine('secondUseConflicts', [false, true]) - .combine('readVisibility', [ - 0, - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - ]) - .combine('writeVisibility', [0, GPUConst.ShaderStage.FRAGMENT, GPUConst.ShaderStage.COMPUTE]) - ) - .fn(t => { - const { compute, readVisibility, writeVisibility, secondUseConflicts } = t.params; +). +params((u) => +u. +combine('compute', [false, true]). +beginSubcases(). +combine('secondUseConflicts', [false, true]). +combine('readVisibility', [ +0, +GPUConst.ShaderStage.VERTEX, +GPUConst.ShaderStage.FRAGMENT, +GPUConst.ShaderStage.COMPUTE] +). +combine('writeVisibility', [0, GPUConst.ShaderStage.FRAGMENT, GPUConst.ShaderStage.COMPUTE]). +combine('readEntry', [ +{ texture: { sampleType: 'unfilterable-float' } }, +{ storageTexture: { access: 'read-only', format: 'r32float' } }] +). +combine('storageWriteAccess', ['write-only', 'read-write']) +). +fn((t) => { + const { + compute, + readEntry, + storageWriteAccess, + readVisibility, + writeVisibility, + secondUseConflicts + } = t.params; - const usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING; - const view = t.createTexture({ usage }).createView(); - const view2 = secondUseConflicts ? view : t.createTexture({ usage }).createView(); + const usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING; + const view = t.createTexture({ usage }).createView(); + const view2 = secondUseConflicts ? view : t.createTexture({ usage }).createView(); - const bgl = t.device.createBindGroupLayout({ - entries: [ - { binding: 0, visibility: readVisibility, texture: {} }, - { - binding: 1, - visibility: writeVisibility, - storageTexture: { access: 'write-only', format: 'rgba8unorm' }, - }, - ], - }); - const bindGroup = t.device.createBindGroup({ - layout: bgl, - entries: [ - { binding: 0, resource: view }, - { binding: 1, resource: view2 }, - ], - }); + const bgl = t.device.createBindGroupLayout({ + entries: [ + { binding: 0, visibility: readVisibility, ...readEntry }, + { + binding: 1, + visibility: writeVisibility, + storageTexture: { access: storageWriteAccess, format: 'r32float' } + }] - const encoder = t.device.createCommandEncoder(); - if (compute) { - const pass = encoder.beginComputePass(); - pass.setBindGroup(0, bindGroup); + }); + const bindGroup = t.device.createBindGroup({ + layout: bgl, + entries: [ + { binding: 0, resource: view }, + { binding: 1, resource: view2 }] - t.setComputePipelineAndCallDispatch( - pass, - t.device.createPipelineLayout({ - bindGroupLayouts: [bgl], - }) - ); - - pass.end(); - } else { - const pass = t.beginSimpleRenderPass(encoder, t.createTexture().createView()); - pass.setBindGroup(0, bindGroup); - pass.end(); - } - - t.expectValidationError(() => { - encoder.finish(); - }, secondUseConflicts); }); -g.test('shader_stages_and_visibility,attachment_write') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + if (compute) { + const pass = encoder.beginComputePass(); + pass.setBindGroup(0, bindGroup); + + t.setComputePipelineAndCallDispatch( + pass, + t.device.createPipelineLayout({ + bindGroupLayouts: [bgl] + }) + ); + pass.end(); + } else { + const pass = t.beginSimpleRenderPass(encoder, t.createTexture().createView()); + pass.setBindGroup(0, bindGroup); + pass.end(); + } + + t.expectValidationError(() => { + encoder.finish(); + }, secondUseConflicts); +}); + +g.test('shader_stages_and_visibility,attachment_write'). +desc( + ` Test that stage visibility doesn't affect resource usage validation. - Use a texture as sampled, with 'readVisibility' {0,VERTEX,FRAGMENT,COMPUTE} - Use a {same,different} texture as a render pass attachment There should be a validation error IFF the same texture was used. ` - ) - .params(u => - u - .beginSubcases() - .combine('secondUseConflicts', [false, true]) - .combine('readVisibility', [ - 0, - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, - ]) - ) - .fn(t => { - const { readVisibility, secondUseConflicts } = t.params; +). +params((u) => +u. +beginSubcases(). +combine('secondUseConflicts', [false, true]). +combine('readVisibility', [ +0, +GPUConst.ShaderStage.VERTEX, +GPUConst.ShaderStage.FRAGMENT, +GPUConst.ShaderStage.COMPUTE] +). +combine('readEntry', [ +{ texture: { sampleType: 'unfilterable-float' } }, +{ storageTexture: { access: 'read-only', format: 'r32float' } }] +) +). +fn((t) => { + const { readVisibility, readEntry, secondUseConflicts } = t.params; - // writeonly-storage-texture binding type is not supported in vertex stage. So, this test - // uses writeonly-storage-texture binding as writable binding upon the same subresource if - // vertex stage is not included. Otherwise, it uses output attachment instead. - const usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT; + const usage = + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT | + GPUTextureUsage.STORAGE_BINDING; - const view = t.createTexture({ usage }).createView(); - const view2 = secondUseConflicts ? view : t.createTexture({ usage }).createView(); - const bgl = t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility: readVisibility, texture: {} }], - }); - const bindGroup = t.device.createBindGroup({ - layout: bgl, - entries: [{ binding: 0, resource: view }], - }); - - const encoder = t.device.createCommandEncoder(); - const pass = t.beginSimpleRenderPass(encoder, view2); - pass.setBindGroup(0, bindGroup); - pass.end(); - - // Texture usages in bindings with invisible shader stages should be validated. Invisible shader - // stages include shader stage with visibility none, compute shader stage in render pass, and - // vertex/fragment shader stage in compute pass. - t.expectValidationError(() => { - encoder.finish(); - }, secondUseConflicts); + const view = t.createTexture({ usage }).createView(); + const view2 = secondUseConflicts ? view : t.createTexture({ usage }).createView(); + const bgl = t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility: readVisibility, ...readEntry }] + }); + const bindGroup = t.device.createBindGroup({ + layout: bgl, + entries: [{ binding: 0, resource: view }] }); -g.test('replaced_binding') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const pass = t.beginSimpleRenderPass(encoder, view2); + pass.setBindGroup(0, bindGroup); + pass.end(); + + // Texture usages in bindings with invisible shader stages should be validated. Invisible shader + // stages include shader stage with visibility none, compute shader stage in render pass, and + // vertex/fragment shader stage in compute pass. + t.expectValidationError(() => { + encoder.finish(); + }, secondUseConflicts); +}); + +g.test('replaced_binding'). +desc( + ` Test whether a binding that's been replaced by another setBindGroup call can still cause validation to fail (with a write/write conflict). - In render pass, all setBindGroup calls contribute to the validation even if they're shadowed. - In compute pass, only the bindings visible at dispatchWorkgroups() contribute to validation. ` - ) - .params(u => - u - .combine('compute', [false, true]) - .combine('callDrawOrDispatch', [false, true]) - .combine('entry', [ - { texture: {} }, - { storageTexture: { access: 'write-only', format: 'rgba8unorm' } }, - ]) - ) - .fn(t => { - const { compute, callDrawOrDispatch, entry } = t.params; +). +params((u) => +u. +combine('compute', [false, true]). +combine('callDrawOrDispatch', [false, true]). +combine('entry', [ +{ texture: { sampleType: 'unfilterable-float' } }, +{ storageTexture: { access: 'read-only', format: 'r32float' } }, +{ storageTexture: { access: 'write-only', format: 'r32float' } }, +{ storageTexture: { access: 'read-write', format: 'r32float' } }] +) +). +fn((t) => { + const { compute, callDrawOrDispatch, entry } = t.params; - const sampledView = t.createTexture().createView(); - const sampledStorageView = t - .createTexture({ usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING }) - .createView(); + const sampledView = t.createTexture().createView(); + const sampledStorageView = t. + createTexture({ usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING }). + createView(); - // Create bindGroup0. It has two bindings. These two bindings use different views/subresources. - const bglEntries0 = [ - { binding: 0, visibility: GPUShaderStage.FRAGMENT, texture: {} }, - { - binding: 1, - visibility: GPUShaderStage.FRAGMENT, - ...entry, - }, - ]; + // Create bindGroup0. It has two bindings. These two bindings use different views/subresources. + const bglEntries0 = [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + texture: { sampleType: 'unfilterable-float' } + }, + { + binding: 1, + visibility: GPUShaderStage.FRAGMENT, + ...entry + }]; - const bgEntries0 = [ - { binding: 0, resource: sampledView }, - { binding: 1, resource: sampledStorageView }, - ]; + const bgEntries0 = [ + { binding: 0, resource: sampledView }, + { binding: 1, resource: sampledStorageView }]; - const bindGroup0 = t.device.createBindGroup({ - entries: bgEntries0, - layout: t.device.createBindGroupLayout({ entries: bglEntries0 }), - }); - - // Create bindGroup1. It has one binding, which use the same view/subresource of a binding in - // bindGroup0. So it may or may not conflicts with that binding in bindGroup0. - const bindGroup1 = t.createBindGroup(0, sampledStorageView, 'sampled-texture', '2d', undefined); - - const encoder = t.device.createCommandEncoder(); - const pass = compute - ? encoder.beginComputePass() - : t.beginSimpleRenderPass(encoder, t.createTexture().createView()); - - // Set bindGroup0 and bindGroup1. bindGroup0 is replaced by bindGroup1 in the current pass. - // But bindings in bindGroup0 should be validated too. - pass.setBindGroup(0, bindGroup0); - if (callDrawOrDispatch) { - const pipeline = compute ? t.createNoOpComputePipeline() : t.createNoOpRenderPipeline(); - t.setPipeline(pass, pipeline); - t.issueDrawOrDispatch(pass); - } - pass.setBindGroup(0, bindGroup1); - pass.end(); - - // MAINTENANCE_TODO: If the Compatible Usage List - // (https://gpuweb.github.io/gpuweb/#compatible-usage-list) gets programmatically defined in - // capability_info, use it here, instead of this logic, for clarity. - let success = entry.storageTexture?.access !== 'write-only'; - // Replaced bindings should not be validated in compute pass, because validation only occurs - // inside dispatchWorkgroups() which only looks at the current resource usages. - success ||= compute; - - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const bindGroup0 = t.device.createBindGroup({ + entries: bgEntries0, + layout: t.device.createBindGroupLayout({ entries: bglEntries0 }) }); -g.test('bindings_in_bundle') - .desc( - ` + // Create bindGroup1. It has one binding, which use the same view/subresource of a binding in + // bindGroup0. So it may or may not conflicts with that binding in bindGroup0. + const bindGroup1 = t.createBindGroup(0, sampledStorageView, 'sampled-texture', '2d', { + sampleType: 'unfilterable-float' + }); + + const encoder = t.device.createCommandEncoder(); + const pass = compute ? + encoder.beginComputePass() : + t.beginSimpleRenderPass(encoder, t.createTexture().createView()); + + // Set bindGroup0 and bindGroup1. bindGroup0 is replaced by bindGroup1 in the current pass. + // But bindings in bindGroup0 should be validated too. + pass.setBindGroup(0, bindGroup0); + if (callDrawOrDispatch) { + const pipeline = compute ? + t.createNoOpComputePipeline() : + t.createNoOpRenderPipeline('auto', 'r32float'); + t.setPipeline(pass, pipeline); + t.issueDrawOrDispatch(pass); + } + pass.setBindGroup(0, bindGroup1); + pass.end(); + + // MAINTENANCE_TODO: If the Compatible Usage List + // (https://gpuweb.github.io/gpuweb/#compatible-usage-list) gets programmatically defined in + // capability_info, use it here, instead of this logic, for clarity. + let success = + entry.storageTexture?.access !== 'write-only' && + entry.storageTexture?.access !== 'read-write'; + // Replaced bindings should not be validated in compute pass, because validation only occurs + // inside dispatchWorkgroups() which only looks at the current resource usages. + success ||= compute; + + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('bindings_in_bundle'). +desc( + ` Test the texture usages in bundles by using two bindings of the same texture with various combination of {sampled, storage, render target} usages. ` - ) - .params(u => - u - .combine('type0', ['render-target', ...kTextureBindingTypes]) - .combine('type1', ['render-target', ...kTextureBindingTypes]) - .beginSubcases() - .combine('binding0InBundle', [false, true]) - .combine('binding1InBundle', [false, true]) - .expandWithParams(function* ({ type0, type1 }) { - const usageForType = type => { - switch (type) { - case 'multisampled-texture': - case 'sampled-texture': - return 'TEXTURE_BINDING'; - case 'writeonly-storage-texture': - return 'STORAGE_BINDING'; - case 'render-target': - return 'RENDER_ATTACHMENT'; - } - }; +). +params((u) => +u. +combine('type0', ['render-target', ...kTextureBindingTypes]). +combine('type1', ['render-target', ...kTextureBindingTypes]). +beginSubcases(). +combine('binding0InBundle', [false, true]). +combine('binding1InBundle', [false, true]). +expandWithParams(function* ({ type0, type1 }) { + const usageForType = (type) => { + switch (type) { + case 'multisampled-texture': + case 'sampled-texture': + return 'TEXTURE_BINDING'; + case 'readonly-storage-texture': + case 'writeonly-storage-texture': + case 'readwrite-storage-texture': + return 'STORAGE_BINDING'; + case 'render-target': + return 'RENDER_ATTACHMENT'; + } + }; - yield { - _usage0: usageForType(type0), - _usage1: usageForType(type1), - _sampleCount: - type0 === 'multisampled-texture' || type1 === 'multisampled-texture' ? 4 : undefined, - }; - }) - .unless( - p => - // We can't set 'render-target' in bundle, so we need to exclude it from bundle. - // In addition, if both bindings are non-bundle, there is no need to test it because - // we have far more comprehensive test cases for that situation in this file. - (p.binding0InBundle && p.type0 === 'render-target') || - (p.binding1InBundle && p.type1 === 'render-target') || - (!p.binding0InBundle && !p.binding1InBundle) || - // Storage textures can't be multisampled. - (p._sampleCount !== undefined && - p._sampleCount > 1 && - (p._usage0 === 'STORAGE_BINDING' || p._usage1 === 'STORAGE_BINDING')) || - // If both are sampled, we create two views of the same texture, so both must be - // multisampled. - (p.type0 === 'multisampled-texture' && p.type1 === 'sampled-texture') || - (p.type0 === 'sampled-texture' && p.type1 === 'multisampled-texture') - ) - ) - .fn(t => { - const { - binding0InBundle, - binding1InBundle, - type0, - type1, - _usage0, - _usage1, - _sampleCount, - } = t.params; + yield { + _usage0: usageForType(type0), + _usage1: usageForType(type1), + _sampleCount: + type0 === 'multisampled-texture' || type1 === 'multisampled-texture' ? + 4 : + undefined + }; +}). +unless( + (p) => + // We can't set 'render-target' in bundle, so we need to exclude it from bundle. + // In addition, if both bindings are non-bundle, there is no need to test it because + // we have far more comprehensive test cases for that situation in this file. + p.binding0InBundle && p.type0 === 'render-target' || + p.binding1InBundle && p.type1 === 'render-target' || + !p.binding0InBundle && !p.binding1InBundle || + // Storage textures can't be multisampled. + p._sampleCount !== undefined && + p._sampleCount > 1 && ( + p._usage0 === 'STORAGE_BINDING' || p._usage1 === 'STORAGE_BINDING') || + // If both are sampled, we create two views of the same texture, so both must be + // multisampled. + p.type0 === 'multisampled-texture' && p.type1 === 'sampled-texture' || + p.type0 === 'sampled-texture' && p.type1 === 'multisampled-texture' +) +). +fn((t) => { + const { binding0InBundle, binding1InBundle, type0, type1, _usage0, _usage1, _sampleCount } = + t.params; - // Two bindings are attached to the same texture view. - const usage = - _sampleCount === 4 - ? GPUTextureUsage[_usage0] | GPUTextureUsage[_usage1] | GPUTextureUsage.RENDER_ATTACHMENT - : GPUTextureUsage[_usage0] | GPUTextureUsage[_usage1]; - const view = t - .createTexture({ - usage, - sampleCount: _sampleCount, - }) - .createView(); + // Two bindings are attached to the same texture view. + const usage = + _sampleCount === 4 ? + GPUTextureUsage[_usage0] | GPUTextureUsage[_usage1] | GPUTextureUsage.RENDER_ATTACHMENT : + GPUTextureUsage[_usage0] | GPUTextureUsage[_usage1]; + const view = t. + createTexture({ + usage, + sampleCount: _sampleCount + }). + createView(); - const bindGroups = []; - if (type0 !== 'render-target') { - const binding0TexFormat = type0 === 'sampled-texture' ? undefined : 'rgba8unorm'; - bindGroups[0] = t.createBindGroup(0, view, type0, '2d', { - format: binding0TexFormat, - sampleType: _sampleCount && 'unfilterable-float', + const bindGroups = []; + if (type0 !== 'render-target') { + const binding0TexFormat = type0 === 'sampled-texture' ? undefined : 'r32float'; + bindGroups[0] = t.createBindGroup(0, view, type0, '2d', { + format: binding0TexFormat, + sampleType: 'unfilterable-float' + }); + } + if (type1 !== 'render-target') { + const binding1TexFormat = type1 === 'sampled-texture' ? undefined : 'r32float'; + bindGroups[1] = t.createBindGroup(1, view, type1, '2d', { + format: binding1TexFormat, + sampleType: 'unfilterable-float' + }); + } + + const encoder = t.device.createCommandEncoder(); + // At least one binding is in bundle, which means that its type is not 'render-target'. + // As a result, only one binding's type is 'render-target' at most. + const pass = t.beginSimpleRenderPass( + encoder, + type0 === 'render-target' || type1 === 'render-target' ? view : t.createTexture().createView() + ); + + const bindingsInBundle = [binding0InBundle, binding1InBundle]; + for (let i = 0; i < 2; i++) { + // Create a bundle for each bind group if its bindings is required to be in bundle on purpose. + // Otherwise, call setBindGroup directly in pass if needed (when its binding is not + // 'render-target'). + if (bindingsInBundle[i]) { + const bundleEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['r32float'] }); + bundleEncoder.setBindGroup(i, bindGroups[i]); + const bundleInPass = bundleEncoder.finish(); + pass.executeBundles([bundleInPass]); + } else if (bindGroups[i] !== undefined) { + pass.setBindGroup(i, bindGroups[i]); } - if (type1 !== 'render-target') { - const binding1TexFormat = type1 === 'sampled-texture' ? undefined : 'rgba8unorm'; - bindGroups[1] = t.createBindGroup(1, view, type1, '2d', { - format: binding1TexFormat, - sampleType: _sampleCount && 'unfilterable-float', - }); + } + + pass.end(); + + const isReadOnly = (t) => { + switch (t) { + case 'sampled-texture': + case 'multisampled-texture': + case 'readonly-storage-texture': + return true; + default: + return false; } + }; - const encoder = t.device.createCommandEncoder(); - // At least one binding is in bundle, which means that its type is not 'render-target'. - // As a result, only one binding's type is 'render-target' at most. - const pass = t.beginSimpleRenderPass( - encoder, - type0 === 'render-target' || type1 === 'render-target' ? view : t.createTexture().createView() - ); + let success = false; + if (isReadOnly(type0) && isReadOnly(type1)) { + success = true; + } - const bindingsInBundle = [binding0InBundle, binding1InBundle]; - for (let i = 0; i < 2; i++) { - // Create a bundle for each bind group if its bindings is required to be in bundle on purpose. - // Otherwise, call setBindGroup directly in pass if needed (when its binding is not - // 'render-target'). - if (bindingsInBundle[i]) { - const bundleEncoder = t.device.createRenderBundleEncoder({ - colorFormats: ['rgba8unorm'], - }); - bundleEncoder.setBindGroup(i, bindGroups[i]); - const bundleInPass = bundleEncoder.finish(); - pass.executeBundles([bundleInPass]); - } else if (bindGroups[i] !== undefined) { - pass.setBindGroup(i, bindGroups[i]); - } - } + // Writable storage textures (write-only and read-write storage textures) cannot be aliased. + if (type0 === type1) { + success = true; + } - pass.end(); + // Resource usages in bundle should be validated. + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); - const isReadOnly = t => { - switch (t) { - case 'sampled-texture': - case 'multisampled-texture': - return true; - default: - return false; - } - }; - - let success = false; - if (isReadOnly(type0) && isReadOnly(type1)) { - success = true; - } - - if (type0 === 'writeonly-storage-texture' && type1 === 'writeonly-storage-texture') { - success = true; - } - - // Resource usages in bundle should be validated. - t.expectValidationError(() => { - encoder.finish(); - }, !success); - }); - -g.test('unused_bindings_in_pipeline') - .desc( - ` +g.test('unused_bindings_in_pipeline'). +desc( + ` Test that for compute pipelines with 'auto' layout, only bindings used by the pipeline count toward the usage scope. For render passes, test the pipeline doesn't matter because only the calls to setBindGroup count toward the usage scope. ` - ) - .params(u => - u - .combine('compute', [false, true]) - .combine('useBindGroup0', [false, true]) - .combine('useBindGroup1', [false, true]) - .combine('setBindGroupsOrder', ['common', 'reversed']) - .combine('setPipeline', ['before', 'middle', 'after', 'none']) - .combine('callDrawOrDispatch', [false, true]) - ) - .fn(t => { - const { - compute, - useBindGroup0, - useBindGroup1, - setBindGroupsOrder, - setPipeline, - callDrawOrDispatch, - } = t.params; - const view = t - .createTexture({ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING }) - .createView(); - const bindGroup0 = t.createBindGroup(0, view, 'sampled-texture', '2d', { - format: 'rgba8unorm', - }); - const bindGroup1 = t.createBindGroup(0, view, 'writeonly-storage-texture', '2d', { - format: 'rgba8unorm', - }); +). +params((u) => +u. +combine('compute', [false, true]). +combine('readOnlyUsage', ['sampled-texture', 'readonly-storage-texture']). +combine('writableUsage', ['writeonly-storage-texture', 'readwrite-storage-texture']). +combine('useBindGroup0', [false, true]). +combine('useBindGroup1', [false, true]). +combine('setBindGroupsOrder', ['common', 'reversed']). +combine('setPipeline', ['before', 'middle', 'after', 'none']). +combine('callDrawOrDispatch', [false, true]) +). +fn((t) => { + const { + compute, + readOnlyUsage, + writableUsage, + useBindGroup0, + useBindGroup1, + setBindGroupsOrder, + setPipeline, + callDrawOrDispatch + } = t.params; + if (writableUsage === 'readwrite-storage-texture') { + t.requireLanguageFeatureOrSkipTestCase('readonly_and_readwrite_storage_textures'); + } - const wgslVertex = `@vertex fn main() -> @builtin(position) vec4 { + const view = t. + createTexture({ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING }). + createView(); + const bindGroup0 = t.createBindGroup(0, view, readOnlyUsage, '2d', { + sampleType: 'unfilterable-float', + format: 'r32float' + }); + const bindGroup1 = t.createBindGroup(0, view, writableUsage, '2d', { + format: 'r32float' + }); + + const writeAccess = writableUsage === 'writeonly-storage-texture' ? 'write' : 'read_write'; + const wgslVertex = `@vertex fn main() -> @builtin(position) vec4 { return vec4(); }`; - const wgslFragment = pp` + const wgslFragment = pp` ${pp._if(useBindGroup0)} - @group(0) @binding(0) var image0 : texture_storage_2d; + @group(0) @binding(0) var image0 : texture_storage_2d; ${pp._endif} ${pp._if(useBindGroup1)} - @group(1) @binding(0) var image1 : texture_storage_2d; + @group(1) @binding(0) var image1 : texture_storage_2d; ${pp._endif} @fragment fn main() {} `; - const wgslCompute = pp` + const wgslCompute = pp` ${pp._if(useBindGroup0)} - @group(0) @binding(0) var image0 : texture_storage_2d; + @group(0) @binding(0) var image0 : texture_storage_2d; ${pp._endif} ${pp._if(useBindGroup1)} - @group(1) @binding(0) var image1 : texture_storage_2d; + @group(1) @binding(0) var image1 : texture_storage_2d; ${pp._endif} @compute @workgroup_size(1) fn main() {} `; - const pipeline = compute - ? t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: wgslCompute, - }), - entryPoint: 'main', - }, - }) - : t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: wgslVertex, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: wgslFragment, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, - primitive: { topology: 'triangle-list' }, - }); - - const encoder = t.device.createCommandEncoder(); - const pass = compute - ? encoder.beginComputePass() - : encoder.beginRenderPass({ - colorAttachments: [ - { - view: t.createTexture().createView(), - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - const index0 = setBindGroupsOrder === 'common' ? 0 : 1; - const index1 = setBindGroupsOrder === 'common' ? 1 : 0; - if (setPipeline === 'before') t.setPipeline(pass, pipeline); - pass.setBindGroup(index0, bindGroup0); - if (setPipeline === 'middle') t.setPipeline(pass, pipeline); - pass.setBindGroup(index1, bindGroup1); - if (setPipeline === 'after') t.setPipeline(pass, pipeline); - if (callDrawOrDispatch) t.issueDrawOrDispatch(pass); - pass.end(); - - // Resource usage validation scope is defined by the whole render pass or by dispatch calls. - // Regardless of whether or not dispatch is called, in a compute pass, we always succeed - // because in this test, none of the bindings are used by the pipeline. - // In a render pass, we always fail because usage is based on any bindings used in the - // render pass, regardless of whether the pipeline uses them. - let success = compute; - - // Also fails if we try to draw/dispatch without a pipeline. - if (callDrawOrDispatch && setPipeline === 'none') { - success = false; + const pipeline = compute ? + t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: wgslCompute + }), + entryPoint: 'main' } - - t.expectValidationError(() => { - encoder.finish(); - }, !success); + }) : + t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: wgslVertex + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: wgslFragment + }), + entryPoint: 'main', + targets: [{ format: 'r32float', writeMask: 0 }] + }, + primitive: { topology: 'triangle-list' } }); -g.test('scope,dispatch') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const pass = compute ? + encoder.beginComputePass() : + encoder.beginRenderPass({ + colorAttachments: [ + { + view: t.createTexture().createView(), + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + + }); + const index0 = setBindGroupsOrder === 'common' ? 0 : 1; + const index1 = setBindGroupsOrder === 'common' ? 1 : 0; + if (setPipeline === 'before') t.setPipeline(pass, pipeline); + pass.setBindGroup(index0, bindGroup0); + if (setPipeline === 'middle') t.setPipeline(pass, pipeline); + pass.setBindGroup(index1, bindGroup1); + if (setPipeline === 'after') t.setPipeline(pass, pipeline); + if (callDrawOrDispatch) t.issueDrawOrDispatch(pass); + pass.end(); + + // Resource usage validation scope is defined by the whole render pass or by dispatch calls. + // Regardless of whether or not dispatch is called, in a compute pass, we always succeed + // because in this test, none of the bindings are used by the pipeline. + // In a render pass, we always fail because usage is based on any bindings used in the + // render pass, regardless of whether the pipeline uses them. + let success = compute; + + // Also fails if we try to draw/dispatch without a pipeline. + if (callDrawOrDispatch && setPipeline === 'none') { + success = false; + } + + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('scope,dispatch'). +desc( + ` Tests that in a compute pass, no usage validation occurs without a dispatch call. {Sets,skips} each of two conflicting bind groups in a pass {with,without} a dispatch call. If both are set, AND there is a dispatch call, validation should fail. ` - ) - .params(u => - u - .combine('dispatch', ['none', 'direct', 'indirect']) - .beginSubcases() - .expand('setBindGroup0', p => (p.dispatch ? [true] : [false, true])) - .expand('setBindGroup1', p => (p.dispatch ? [true] : [false, true])) - ) - .fn(t => { - const { dispatch, setBindGroup0, setBindGroup1 } = t.params; +). +params((u) => +u. +combine('dispatch', ['none', 'direct', 'indirect']). +expandWithParams( + (p) => + [ + { usage1: 'sampled-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'sampled-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'writeonly-storage-texture', usage2: 'readwrite-storage-texture' }] - const { bindGroup0, bindGroup1, encoder, pass, pipeline } = t.testValidationScope(true); - assert(pass instanceof GPUComputePassEncoder); - t.setPipeline(pass, pipeline); +). +beginSubcases(). +expand('setBindGroup0', (p) => p.dispatch ? [true] : [false, true]). +expand('setBindGroup1', (p) => p.dispatch ? [true] : [false, true]) +). +fn((t) => { + const { dispatch, usage1, usage2, setBindGroup0, setBindGroup1 } = t.params; - if (setBindGroup0) pass.setBindGroup(0, bindGroup0); - if (setBindGroup1) pass.setBindGroup(1, bindGroup1); + const { bindGroup0, bindGroup1, encoder, pass, pipeline } = t.testValidationScope( + true, + usage1, + usage2 + ); + assert(pass instanceof GPUComputePassEncoder); + t.setPipeline(pass, pipeline); - switch (dispatch) { - case 'direct': - pass.dispatchWorkgroups(1); - break; - case 'indirect': - { - const indirectBuffer = t.device.createBuffer({ size: 4, usage: GPUBufferUsage.INDIRECT }); - pass.dispatchWorkgroupsIndirect(indirectBuffer, 0); - } - break; - } + if (setBindGroup0) pass.setBindGroup(0, bindGroup0); + if (setBindGroup1) pass.setBindGroup(1, bindGroup1); - pass.end(); + switch (dispatch) { + case 'direct': + pass.dispatchWorkgroups(1); + break; + case 'indirect': + { + const indirectBuffer = t.device.createBuffer({ size: 4, usage: GPUBufferUsage.INDIRECT }); + pass.dispatchWorkgroupsIndirect(indirectBuffer, 0); + } + break; + } - t.expectValidationError(() => { + pass.end(); + + t.expectValidationError( + () => { encoder.finish(); - }, dispatch !== 'none' && setBindGroup0 && setBindGroup1); - }); + }, + dispatch !== 'none' && setBindGroup0 && setBindGroup1 + ); +}); -g.test('scope,basic,render') - .desc( - ` +g.test('scope,basic,render'). +desc( + ` Tests that in a render pass, validation occurs even without a pipeline or draw call. {Set,skip} each of two conflicting bind groups. If both are set, validation should fail. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('setBindGroup0', [false, true]) - .combine('setBindGroup1', [false, true]) - ) - .fn(t => { - const { setBindGroup0, setBindGroup1 } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('setBindGroup0', [false, true]). +combine('setBindGroup1', [false, true]). +expandWithParams( + (p) => + [ + { usage1: 'sampled-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'sampled-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'writeonly-storage-texture', usage2: 'readwrite-storage-texture' }] - const { bindGroup0, bindGroup1, encoder, pass } = t.testValidationScope(false); - assert(pass instanceof GPURenderPassEncoder); +) +). +fn((t) => { + const { setBindGroup0, setBindGroup1, usage1, usage2 } = t.params; - if (setBindGroup0) pass.setBindGroup(0, bindGroup0); - if (setBindGroup1) pass.setBindGroup(1, bindGroup1); + const { bindGroup0, bindGroup1, encoder, pass } = t.testValidationScope(false, usage1, usage2); + assert(pass instanceof GPURenderPassEncoder); - pass.end(); + if (setBindGroup0) pass.setBindGroup(0, bindGroup0); + if (setBindGroup1) pass.setBindGroup(1, bindGroup1); - t.expectValidationError(() => { - encoder.finish(); - }, setBindGroup0 && setBindGroup1); - }); + pass.end(); -g.test('scope,pass_boundary,compute') - .desc( - ` + t.expectValidationError(() => { + encoder.finish(); + }, setBindGroup0 && setBindGroup1); +}); + +g.test('scope,pass_boundary,compute'). +desc( + ` Test using two conflicting bind groups in separate dispatch calls, {with,without} a pass boundary in between. This should always be valid. ` - ) - .paramsSubcasesOnly(u => u.combine('splitPass', [false, true])) - .fn(t => { - const { splitPass } = t.params; +). +paramsSubcasesOnly((u) => +u.combine('splitPass', [false, true]).expandWithParams( + (p) => + [ + { usage1: 'sampled-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'sampled-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'writeonly-storage-texture', usage2: 'readwrite-storage-texture' }] - const { bindGroupLayouts, bindGroups } = t.makeConflictingBindGroups(); +) +). +fn((t) => { + const { splitPass, usage1, usage2 } = t.params; - const encoder = t.device.createCommandEncoder(); + const { bindGroupLayouts, bindGroups } = t.makeTwoBindGroupsWithOneTextureView(usage1, usage2); - const pipelineUsingBG0 = t.createNoOpComputePipeline( - t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayouts[0]], - }) - ); + const encoder = t.device.createCommandEncoder(); - const pipelineUsingBG1 = t.createNoOpComputePipeline( - t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayouts[1]], - }) - ); + const pipelineUsingBG0 = t.createNoOpComputePipeline( + t.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayouts[0]] + }) + ); + const pipelineUsingBG1 = t.createNoOpComputePipeline( + t.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayouts[1]] + }) + ); - let pass = encoder.beginComputePass(); - pass.setPipeline(pipelineUsingBG0); - pass.setBindGroup(0, bindGroups[0]); - pass.dispatchWorkgroups(1); - if (splitPass) { - pass.end(); - pass = encoder.beginComputePass(); - } - pass.setPipeline(pipelineUsingBG1); - pass.setBindGroup(0, bindGroups[1]); - pass.dispatchWorkgroups(1); + let pass = encoder.beginComputePass(); + pass.setPipeline(pipelineUsingBG0); + pass.setBindGroup(0, bindGroups[0]); + pass.dispatchWorkgroups(1); + if (splitPass) { pass.end(); + pass = encoder.beginComputePass(); + } + pass.setPipeline(pipelineUsingBG1); + pass.setBindGroup(0, bindGroups[1]); + pass.dispatchWorkgroups(1); + pass.end(); - // Always valid - encoder.finish(); - }); + // Always valid + encoder.finish(); +}); -g.test('scope,pass_boundary,render') - .desc( - ` +g.test('scope,pass_boundary,render'). +desc( + ` Test using two conflicting bind groups in separate draw calls, {with,without} a pass boundary in between. This should be valid only if there is a pass boundary. ` - ) - .paramsSubcasesOnly(u => - u // - .combine('splitPass', [false, true]) - .combine('draw', [false, true]) - ) - .fn(t => { - const { splitPass, draw } = t.params; +). +paramsSubcasesOnly((u) => +u // +.combine('splitPass', [false, true]). +combine('draw', [false, true]). +expandWithParams( + (p) => + [ + { usage1: 'sampled-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'sampled-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'writeonly-storage-texture' }, + { usage1: 'readonly-storage-texture', usage2: 'readwrite-storage-texture' }, + { usage1: 'writeonly-storage-texture', usage2: 'readwrite-storage-texture' }] - const { bindGroupLayouts, bindGroups } = t.makeConflictingBindGroups(); +) +). +fn((t) => { + const { splitPass, draw, usage1, usage2 } = t.params; - const encoder = t.device.createCommandEncoder(); + const { bindGroupLayouts, bindGroups } = t.makeTwoBindGroupsWithOneTextureView(usage1, usage2); - const pipelineUsingBG0 = t.createNoOpRenderPipeline( - t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayouts[0]], - }) - ); + const encoder = t.device.createCommandEncoder(); - const pipelineUsingBG1 = t.createNoOpRenderPipeline( - t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayouts[1]], - }) - ); + const pipelineUsingBG0 = t.createNoOpRenderPipeline( + t.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayouts[0]] + }), + 'r32float' + ); + const pipelineUsingBG1 = t.createNoOpRenderPipeline( + t.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayouts[1]] + }), + 'r32float' + ); - const attachment = t.createTexture().createView(); + const attachment = t.createTexture().createView(); - let pass = t.beginSimpleRenderPass(encoder, attachment); - pass.setPipeline(pipelineUsingBG0); - pass.setBindGroup(0, bindGroups[0]); - if (draw) pass.draw(3); - if (splitPass) { - pass.end(); - pass = t.beginSimpleRenderPass(encoder, attachment); - } - pass.setPipeline(pipelineUsingBG1); - pass.setBindGroup(0, bindGroups[1]); - if (draw) pass.draw(3); + let pass = t.beginSimpleRenderPass(encoder, attachment); + pass.setPipeline(pipelineUsingBG0); + pass.setBindGroup(0, bindGroups[0]); + if (draw) pass.draw(3); + if (splitPass) { pass.end(); + pass = t.beginSimpleRenderPass(encoder, attachment); + } + pass.setPipeline(pipelineUsingBG1); + pass.setBindGroup(0, bindGroups[1]); + if (draw) pass.draw(3); + pass.end(); - t.expectValidationError(() => { - encoder.finish(); - }, !splitPass); - }); + t.expectValidationError(() => { + encoder.finish(); + }, !splitPass); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_common.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_common.spec.js index f8f27fe78b9..eb51f612b43 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_common.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_common.spec.js @@ -1,51 +1,85 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Texture Usages Validation Tests in Same or Different Render Pass Encoders. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { assert, unreachable } from '../../../../../common/util/util.js'; import { ValidationTest } from '../../validation_test.js'; + + + + + +export const kTextureBindingTypes = [ +'sampled-texture', +'writeonly-storage-texture', +'readonly-storage-texture', +'readwrite-storage-texture']; + +export function IsReadOnlyTextureBindingType(t) { + return t === 'sampled-texture' || t === 'readonly-storage-texture'; +} + class F extends ValidationTest { - getColorAttachment(texture, textureViewDescriptor) { + getColorAttachment( + texture, + textureViewDescriptor) + { const view = texture.createView(textureViewDescriptor); return { view, clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, loadOp: 'clear', - storeOp: 'store', + storeOp: 'store' }; } - createBindGroupForTest(textureView, textureUsage, sampleType) { + createBindGroupForTest( + textureView, + textureUsage, + sampleType) + { const bindGroupLayoutEntry = { binding: 0, - visibility: GPUShaderStage.FRAGMENT, + visibility: GPUShaderStage.FRAGMENT }; switch (textureUsage) { - case 'texture': + case 'sampled-texture': bindGroupLayoutEntry.texture = { viewDimension: '2d-array', sampleType }; break; - case 'storage': + case 'readonly-storage-texture': + bindGroupLayoutEntry.storageTexture = { + access: 'read-only', + format: 'r32float', + viewDimension: '2d-array' + }; + break; + case 'readwrite-storage-texture': + bindGroupLayoutEntry.storageTexture = { + access: 'read-write', + format: 'r32float', + viewDimension: '2d-array' + }; + break; + case 'writeonly-storage-texture': bindGroupLayoutEntry.storageTexture = { access: 'write-only', - format: 'rgba8unorm', - viewDimension: '2d-array', + format: 'r32float', + viewDimension: '2d-array' }; break; default: unreachable(); break; } - const layout = this.device.createBindGroupLayout({ - entries: [bindGroupLayoutEntry], + entries: [bindGroupLayoutEntry] }); return this.device.createBindGroup({ layout, - entries: [{ binding: 0, resource: textureView }], + entries: [{ binding: 0, resource: textureView }] }); } @@ -64,511 +98,500 @@ const kTextureSize = 16; const kTextureLevels = 3; const kTextureLayers = 3; -g.test('subresources,color_attachments') - .desc( - ` +g.test('subresources,color_attachments'). +desc( + ` Test that the different subresource of the same texture are allowed to be used as color attachments in same / different render pass encoder, while the same subresource is only allowed to be used as different color attachments in different render pass encoders.` - ) - .params(u => - u - .combine('layer0', [0, 1]) - .combine('level0', [0, 1]) - .combine('layer1', [0, 1]) - .combine('level1', [0, 1]) - .combine('inSamePass', [true, false]) - .unless(t => t.inSamePass && t.level0 !== t.level1) - ) - .fn(t => { - const { layer0, level0, layer1, level1, inSamePass } = t.params; +). +params((u) => +u. +combine('layer0', [0, 1]). +combine('level0', [0, 1]). +combine('layer1', [0, 1]). +combine('level1', [0, 1]). +combine('inSamePass', [true, false]). +unless((t) => t.inSamePass && t.level0 !== t.level1) +). +fn((t) => { + const { layer0, level0, layer1, level1, inSamePass } = t.params; - const texture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, kTextureLayers], - mipLevelCount: kTextureLevels, - }); - - const colorAttachment1 = t.getColorAttachment(texture, { - dimension: '2d', - baseArrayLayer: layer0, - arrayLayerCount: 1, - baseMipLevel: level0, - mipLevelCount: 1, - }); - const colorAttachment2 = t.getColorAttachment(texture, { - dimension: '2d', - baseArrayLayer: layer1, - baseMipLevel: level1, - mipLevelCount: 1, - }); - const encoder = t.device.createCommandEncoder(); - if (inSamePass) { - const renderPass = encoder.beginRenderPass({ - colorAttachments: [colorAttachment1, colorAttachment2], - }); - renderPass.end(); - } else { - const renderPass1 = encoder.beginRenderPass({ - colorAttachments: [colorAttachment1], - }); - renderPass1.end(); - const renderPass2 = encoder.beginRenderPass({ - colorAttachments: [colorAttachment2], - }); - renderPass2.end(); - } - - const success = inSamePass ? layer0 !== layer1 : true; - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const texture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, kTextureLayers], + mipLevelCount: kTextureLevels }); -g.test('subresources,color_attachment_and_bind_group') - .desc( - ` + const colorAttachment1 = t.getColorAttachment(texture, { + dimension: '2d', + baseArrayLayer: layer0, + arrayLayerCount: 1, + baseMipLevel: level0, + mipLevelCount: 1 + }); + const colorAttachment2 = t.getColorAttachment(texture, { + dimension: '2d', + baseArrayLayer: layer1, + baseMipLevel: level1, + mipLevelCount: 1 + }); + const encoder = t.device.createCommandEncoder(); + if (inSamePass) { + const renderPass = encoder.beginRenderPass({ + colorAttachments: [colorAttachment1, colorAttachment2] + }); + renderPass.end(); + } else { + const renderPass1 = encoder.beginRenderPass({ + colorAttachments: [colorAttachment1] + }); + renderPass1.end(); + const renderPass2 = encoder.beginRenderPass({ + colorAttachments: [colorAttachment2] + }); + renderPass2.end(); + } + + const success = inSamePass ? layer0 !== layer1 : true; + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('subresources,color_attachment_and_bind_group'). +desc( + ` Test that when one subresource of a texture is used as a color attachment, it cannot be used in a bind group simultaneously in the same render pass encoder. It is allowed when the bind group is used in another render pass encoder instead of the same one.` - ) - .params(u => - u - .combine('colorAttachmentLevel', [0, 1]) - .combine('colorAttachmentLayer', [0, 1]) - .combineWithParams([ - { bgLevel: 0, bgLevelCount: 1 }, - { bgLevel: 1, bgLevelCount: 1 }, - { bgLevel: 1, bgLevelCount: 2 }, - ]) - .combineWithParams([ - { bgLayer: 0, bgLayerCount: 1 }, - { bgLayer: 1, bgLayerCount: 1 }, - { bgLayer: 1, bgLayerCount: 2 }, - ]) - .combine('bgUsage', ['texture', 'storage']) - .unless(t => t.bgUsage === 'storage' && t.bgLevelCount > 1) - .combine('inSamePass', [true, false]) - ) - .fn(t => { - const { - colorAttachmentLevel, - colorAttachmentLayer, - bgLevel, - bgLevelCount, - bgLayer, - bgLayerCount, - bgUsage, - inSamePass, - } = t.params; +). +params((u) => +u. +combine('colorAttachmentLevel', [0, 1]). +combine('colorAttachmentLayer', [0, 1]). +combineWithParams([ +{ bgLevel: 0, bgLevelCount: 1 }, +{ bgLevel: 1, bgLevelCount: 1 }, +{ bgLevel: 1, bgLevelCount: 2 }] +). +combineWithParams([ +{ bgLayer: 0, bgLayerCount: 1 }, +{ bgLayer: 1, bgLayerCount: 1 }, +{ bgLayer: 1, bgLayerCount: 2 }] +). +combine('bgUsage', kTextureBindingTypes). +unless((t) => t.bgUsage !== 'sampled-texture' && t.bgLevelCount > 1). +combine('inSamePass', [true, false]) +). +fn((t) => { + const { + colorAttachmentLevel, + colorAttachmentLayer, + bgLevel, + bgLevelCount, + bgLayer, + bgLayerCount, + bgUsage, + inSamePass + } = t.params; - const texture = t.device.createTexture({ - format: 'rgba8unorm', - usage: - GPUTextureUsage.RENDER_ATTACHMENT | - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.STORAGE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - mipLevelCount: kTextureLevels, - }); - const bindGroupView = texture.createView({ - dimension: '2d-array', - baseArrayLayer: bgLayer, - arrayLayerCount: bgLayerCount, - baseMipLevel: bgLevel, - mipLevelCount: bgLevelCount, - }); - const bindGroup = t.createBindGroupForTest(bindGroupView, bgUsage, 'float'); + const texture = t.device.createTexture({ + format: 'r32float', + usage: + GPUTextureUsage.RENDER_ATTACHMENT | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.STORAGE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers], + mipLevelCount: kTextureLevels + }); + const bindGroupView = texture.createView({ + dimension: '2d-array', + baseArrayLayer: bgLayer, + arrayLayerCount: bgLayerCount, + baseMipLevel: bgLevel, + mipLevelCount: bgLevelCount + }); + const bindGroup = t.createBindGroupForTest(bindGroupView, bgUsage, 'unfilterable-float'); - const colorAttachment = t.getColorAttachment(texture, { - dimension: '2d', - baseArrayLayer: colorAttachmentLayer, - arrayLayerCount: 1, - baseMipLevel: colorAttachmentLevel, - mipLevelCount: 1, - }); - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [colorAttachment], - }); - if (inSamePass) { - renderPass.setBindGroup(0, bindGroup); - renderPass.end(); - } else { - renderPass.end(); - - const texture2 = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - mipLevelCount: 1, - }); - const colorAttachment2 = t.getColorAttachment(texture2); - const renderPass2 = encoder.beginRenderPass({ - colorAttachments: [colorAttachment2], - }); - renderPass2.setBindGroup(0, bindGroup); - renderPass2.end(); - } - - const isMipLevelNotOverlapped = t.isRangeNotOverlapped( - colorAttachmentLevel, - colorAttachmentLevel, - bgLevel, - bgLevel + bgLevelCount - 1 - ); - - const isArrayLayerNotOverlapped = t.isRangeNotOverlapped( - colorAttachmentLayer, - colorAttachmentLayer, - bgLayer, - bgLayer + bgLayerCount - 1 - ); - - const isNotOverlapped = isMipLevelNotOverlapped || isArrayLayerNotOverlapped; - - const success = inSamePass ? isNotOverlapped : true; - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const colorAttachment = t.getColorAttachment(texture, { + dimension: '2d', + baseArrayLayer: colorAttachmentLayer, + arrayLayerCount: 1, + baseMipLevel: colorAttachmentLevel, + mipLevelCount: 1 }); -g.test('subresources,depth_stencil_attachment_and_bind_group') - .desc( - ` + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [colorAttachment] + }); + if (inSamePass) { + renderPass.setBindGroup(0, bindGroup); + renderPass.end(); + } else { + renderPass.end(); + + const texture2 = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1], + mipLevelCount: 1 + }); + const colorAttachment2 = t.getColorAttachment(texture2); + const renderPass2 = encoder.beginRenderPass({ + colorAttachments: [colorAttachment2] + }); + renderPass2.setBindGroup(0, bindGroup); + renderPass2.end(); + } + + const isMipLevelNotOverlapped = t.isRangeNotOverlapped( + colorAttachmentLevel, + colorAttachmentLevel, + bgLevel, + bgLevel + bgLevelCount - 1 + ); + const isArrayLayerNotOverlapped = t.isRangeNotOverlapped( + colorAttachmentLayer, + colorAttachmentLayer, + bgLayer, + bgLayer + bgLayerCount - 1 + ); + const isNotOverlapped = isMipLevelNotOverlapped || isArrayLayerNotOverlapped; + + const success = inSamePass ? isNotOverlapped : true; + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('subresources,depth_stencil_attachment_and_bind_group'). +desc( + ` Test that when one subresource of a texture is used as a depth stencil attachment, it cannot be used in a bind group simultaneously in the same render pass encoder. It is allowed when the bind group is used in another render pass encoder instead of the same one, or the subresource is used as a read-only depth stencil attachment.` - ) - .params(u => - u - .combine('dsLevel', [0, 1]) - .combine('dsLayer', [0, 1]) - .combineWithParams([ - { bgLevel: 0, bgLevelCount: 1 }, - { bgLevel: 1, bgLevelCount: 1 }, - { bgLevel: 1, bgLevelCount: 2 }, - ]) - .combineWithParams([ - { bgLayer: 0, bgLayerCount: 1 }, - { bgLayer: 1, bgLayerCount: 1 }, - { bgLayer: 1, bgLayerCount: 2 }, - ]) - .beginSubcases() - .combine('dsReadOnly', [true, false]) - .combine('bgAspect', ['depth-only', 'stencil-only']) - .combine('inSamePass', [true, false]) - ) - .fn(t => { - const { - dsLevel, - dsLayer, - bgLevel, - bgLevelCount, - bgLayer, - bgLayerCount, - dsReadOnly, - bgAspect, - inSamePass, - } = t.params; +). +params((u) => +u. +combine('dsLevel', [0, 1]). +combine('dsLayer', [0, 1]). +combineWithParams([ +{ bgLevel: 0, bgLevelCount: 1 }, +{ bgLevel: 1, bgLevelCount: 1 }, +{ bgLevel: 1, bgLevelCount: 2 }] +). +combineWithParams([ +{ bgLayer: 0, bgLayerCount: 1 }, +{ bgLayer: 1, bgLayerCount: 1 }, +{ bgLayer: 1, bgLayerCount: 2 }] +). +beginSubcases(). +combine('dsReadOnly', [true, false]). +combine('bgAspect', ['depth-only', 'stencil-only']). +combine('inSamePass', [true, false]) +). +fn((t) => { + const { + dsLevel, + dsLayer, + bgLevel, + bgLevelCount, + bgLayer, + bgLayerCount, + dsReadOnly, + bgAspect, + inSamePass + } = t.params; - const texture = t.device.createTexture({ - format: 'depth24plus-stencil8', - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - mipLevelCount: kTextureLevels, - }); - const bindGroupView = texture.createView({ - dimension: '2d-array', - baseArrayLayer: bgLayer, - arrayLayerCount: bgLayerCount, - baseMipLevel: bgLevel, - mipLevelCount: bgLevelCount, - aspect: bgAspect, - }); - const sampleType = bgAspect === 'depth-only' ? 'depth' : 'uint'; - const bindGroup = t.createBindGroupForTest(bindGroupView, 'texture', sampleType); - - const attachmentView = texture.createView({ - dimension: '2d', - baseArrayLayer: dsLayer, - arrayLayerCount: 1, - baseMipLevel: dsLevel, - mipLevelCount: 1, - }); - const depthStencilAttachment = { - view: attachmentView, - depthReadOnly: dsReadOnly, - depthLoadOp: dsReadOnly ? undefined : 'load', - depthStoreOp: dsReadOnly ? undefined : 'store', - stencilReadOnly: dsReadOnly, - stencilLoadOp: dsReadOnly ? undefined : 'load', - stencilStoreOp: dsReadOnly ? undefined : 'store', - }; - - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment, - }); - if (inSamePass) { - renderPass.setBindGroup(0, bindGroup); - renderPass.end(); - } else { - renderPass.end(); - - const texture2 = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - mipLevelCount: 1, - }); - const colorAttachment2 = t.getColorAttachment(texture2); - const renderPass2 = encoder.beginRenderPass({ - colorAttachments: [colorAttachment2], - }); - renderPass2.setBindGroup(0, bindGroup); - renderPass2.end(); - } - - const isMipLevelNotOverlapped = t.isRangeNotOverlapped( - dsLevel, - dsLevel, - bgLevel, - bgLevel + bgLevelCount - 1 - ); - - const isArrayLayerNotOverlapped = t.isRangeNotOverlapped( - dsLayer, - dsLayer, - bgLayer, - bgLayer + bgLayerCount - 1 - ); - - const isNotOverlapped = isMipLevelNotOverlapped || isArrayLayerNotOverlapped; - - const success = !inSamePass || isNotOverlapped || dsReadOnly; - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const texture = t.device.createTexture({ + format: 'depth24plus-stencil8', + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers], + mipLevelCount: kTextureLevels }); + const bindGroupView = texture.createView({ + dimension: '2d-array', + baseArrayLayer: bgLayer, + arrayLayerCount: bgLayerCount, + baseMipLevel: bgLevel, + mipLevelCount: bgLevelCount, + aspect: bgAspect + }); + const sampleType = bgAspect === 'depth-only' ? 'depth' : 'uint'; + const bindGroup = t.createBindGroupForTest(bindGroupView, 'sampled-texture', sampleType); -g.test('subresources,multiple_bind_groups') - .desc( - ` + const attachmentView = texture.createView({ + dimension: '2d', + baseArrayLayer: dsLayer, + arrayLayerCount: 1, + baseMipLevel: dsLevel, + mipLevelCount: 1 + }); + const depthStencilAttachment = { + view: attachmentView, + depthReadOnly: dsReadOnly, + depthLoadOp: dsReadOnly ? undefined : 'load', + depthStoreOp: dsReadOnly ? undefined : 'store', + stencilReadOnly: dsReadOnly, + stencilLoadOp: dsReadOnly ? undefined : 'load', + stencilStoreOp: dsReadOnly ? undefined : 'store' + }; + + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment + }); + if (inSamePass) { + renderPass.setBindGroup(0, bindGroup); + renderPass.end(); + } else { + renderPass.end(); + + const texture2 = t.device.createTexture({ + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1], + mipLevelCount: 1 + }); + const colorAttachment2 = t.getColorAttachment(texture2); + const renderPass2 = encoder.beginRenderPass({ + colorAttachments: [colorAttachment2] + }); + renderPass2.setBindGroup(0, bindGroup); + renderPass2.end(); + } + + const isMipLevelNotOverlapped = t.isRangeNotOverlapped( + dsLevel, + dsLevel, + bgLevel, + bgLevel + bgLevelCount - 1 + ); + const isArrayLayerNotOverlapped = t.isRangeNotOverlapped( + dsLayer, + dsLayer, + bgLayer, + bgLayer + bgLayerCount - 1 + ); + const isNotOverlapped = isMipLevelNotOverlapped || isArrayLayerNotOverlapped; + + const success = !inSamePass || isNotOverlapped || dsReadOnly; + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('subresources,multiple_bind_groups'). +desc( + ` Test that when one color texture subresource is bound to different bind groups, its list of internal usages within one usage scope can only be a compatible usage list. For texture subresources in bind groups, the compatible usage lists are {TEXTURE_BINDING} and {STORAGE_BINDING}, which means it can only be bound as both TEXTURE_BINDING and STORAGE_BINDING in different render pass encoders, otherwise a validation error will occur.` - ) - .params(u => - u - .combine('bg0Levels', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('bg0Layers', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('bg1Levels', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('bg1Layers', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('bgUsage0', ['texture', 'storage']) - .combine('bgUsage1', ['texture', 'storage']) - .unless( - t => - (t.bgUsage0 === 'storage' && t.bg0Levels.count > 1) || - (t.bgUsage1 === 'storage' && t.bg1Levels.count > 1) - ) - .combine('inSamePass', [true, false]) - ) - .fn(t => { - const { bg0Levels, bg0Layers, bg1Levels, bg1Layers, bgUsage0, bgUsage1, inSamePass } = t.params; +). +params((u) => +u. +combine('bg0Levels', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('bg0Layers', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('bg1Levels', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('bg1Layers', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('bgUsage0', kTextureBindingTypes). +combine('bgUsage1', kTextureBindingTypes). +unless( + (t) => + t.bgUsage0 !== 'sampled-texture' && t.bg0Levels.count > 1 || + t.bgUsage1 !== 'sampled-texture' && t.bg1Levels.count > 1 +). +combine('inSamePass', [true, false]) +). +fn((t) => { + const { bg0Levels, bg0Layers, bg1Levels, bg1Layers, bgUsage0, bgUsage1, inSamePass } = t.params; - const texture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - mipLevelCount: kTextureLevels, - }); - const bg0 = texture.createView({ - dimension: '2d-array', - baseArrayLayer: bg0Layers.base, - arrayLayerCount: bg0Layers.count, - baseMipLevel: bg0Levels.base, - mipLevelCount: bg0Levels.count, - }); - const bg1 = texture.createView({ - dimension: '2d-array', - baseArrayLayer: bg1Layers.base, - arrayLayerCount: bg1Layers.count, - baseMipLevel: bg1Levels.base, - mipLevelCount: bg1Levels.count, - }); - const bindGroup0 = t.createBindGroupForTest(bg0, bgUsage0, 'float'); - const bindGroup1 = t.createBindGroupForTest(bg1, bgUsage1, 'float'); - - const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - mipLevelCount: 1, - }); - const colorAttachment = t.getColorAttachment(colorTexture); - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [colorAttachment], - }); - if (inSamePass) { - renderPass.setBindGroup(0, bindGroup0); - renderPass.setBindGroup(1, bindGroup1); - renderPass.end(); - } else { - renderPass.setBindGroup(0, bindGroup0); - renderPass.end(); - - const renderPass2 = encoder.beginRenderPass({ - colorAttachments: [colorAttachment], - }); - renderPass2.setBindGroup(1, bindGroup1); - renderPass2.end(); - } - - const isMipLevelNotOverlapped = t.isRangeNotOverlapped( - bg0Levels.base, - bg0Levels.base + bg0Levels.count - 1, - bg1Levels.base, - bg1Levels.base + bg1Levels.count - 1 - ); - - const isArrayLayerNotOverlapped = t.isRangeNotOverlapped( - bg0Layers.base, - bg0Layers.base + bg0Layers.count - 1, - bg1Layers.base, - bg1Layers.base + bg1Layers.count - 1 - ); - - const isNotOverlapped = isMipLevelNotOverlapped || isArrayLayerNotOverlapped; - - const success = !inSamePass || isNotOverlapped || bgUsage0 === bgUsage1; - t.expectValidationError(() => { - encoder.finish(); - }, !success); + const texture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers], + mipLevelCount: kTextureLevels }); + const bg0 = texture.createView({ + dimension: '2d-array', + baseArrayLayer: bg0Layers.base, + arrayLayerCount: bg0Layers.count, + baseMipLevel: bg0Levels.base, + mipLevelCount: bg0Levels.count + }); + const bg1 = texture.createView({ + dimension: '2d-array', + baseArrayLayer: bg1Layers.base, + arrayLayerCount: bg1Layers.count, + baseMipLevel: bg1Levels.base, + mipLevelCount: bg1Levels.count + }); + const bindGroup0 = t.createBindGroupForTest(bg0, bgUsage0, 'unfilterable-float'); + const bindGroup1 = t.createBindGroupForTest(bg1, bgUsage1, 'unfilterable-float'); -g.test('subresources,depth_stencil_texture_in_bind_groups') - .desc( - ` + const colorTexture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1], + mipLevelCount: 1 + }); + const colorAttachment = t.getColorAttachment(colorTexture); + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [colorAttachment] + }); + if (inSamePass) { + renderPass.setBindGroup(0, bindGroup0); + renderPass.setBindGroup(1, bindGroup1); + renderPass.end(); + } else { + renderPass.setBindGroup(0, bindGroup0); + renderPass.end(); + + const renderPass2 = encoder.beginRenderPass({ + colorAttachments: [colorAttachment] + }); + renderPass2.setBindGroup(1, bindGroup1); + renderPass2.end(); + } + + const bothReadOnly = + IsReadOnlyTextureBindingType(bgUsage0) && IsReadOnlyTextureBindingType(bgUsage1); + const isMipLevelNotOverlapped = t.isRangeNotOverlapped( + bg0Levels.base, + bg0Levels.base + bg0Levels.count - 1, + bg1Levels.base, + bg1Levels.base + bg1Levels.count - 1 + ); + const isArrayLayerNotOverlapped = t.isRangeNotOverlapped( + bg0Layers.base, + bg0Layers.base + bg0Layers.count - 1, + bg1Layers.base, + bg1Layers.base + bg1Layers.count - 1 + ); + const isNotOverlapped = isMipLevelNotOverlapped || isArrayLayerNotOverlapped; + + const success = !inSamePass || bothReadOnly || isNotOverlapped || bgUsage0 === bgUsage1; + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('subresources,depth_stencil_texture_in_bind_groups'). +desc( + ` Test that when one depth stencil texture subresource is bound to different bind groups, we can always bind these two bind groups in either the same or different render pass encoder as the depth stencil texture can only be bound as TEXTURE_BINDING in the bind group.` - ) - .params(u => - u - .combine('view0Levels', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('view0Layers', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('view1Levels', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('view1Layers', [ - { base: 0, count: 1 }, - { base: 1, count: 1 }, - { base: 1, count: 2 }, - ]) - .combine('aspect0', ['depth-only', 'stencil-only']) - .combine('aspect1', ['depth-only', 'stencil-only']) - .combine('inSamePass', [true, false]) - ) - .fn(t => { - const { - view0Levels, - view0Layers, - view1Levels, - view1Layers, - aspect0, - aspect1, - inSamePass, - } = t.params; +). +params((u) => +u. +combine('view0Levels', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('view0Layers', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('view1Levels', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('view1Layers', [ +{ base: 0, count: 1 }, +{ base: 1, count: 1 }, +{ base: 1, count: 2 }] +). +combine('aspect0', ['depth-only', 'stencil-only']). +combine('aspect1', ['depth-only', 'stencil-only']). +combine('inSamePass', [true, false]) +). +fn((t) => { + const { view0Levels, view0Layers, view1Levels, view1Layers, aspect0, aspect1, inSamePass } = + t.params; - const texture = t.device.createTexture({ - format: 'depth24plus-stencil8', - usage: GPUTextureUsage.TEXTURE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - mipLevelCount: kTextureLevels, - }); - const bindGroupView0 = texture.createView({ - dimension: '2d-array', - baseArrayLayer: view0Layers.base, - arrayLayerCount: view0Layers.count, - baseMipLevel: view0Levels.base, - mipLevelCount: view0Levels.count, - aspect: aspect0, - }); - const bindGroupView1 = texture.createView({ - dimension: '2d-array', - baseArrayLayer: view1Layers.base, - arrayLayerCount: view1Layers.count, - baseMipLevel: view1Levels.base, - mipLevelCount: view1Levels.count, - aspect: aspect1, - }); - - const sampleType0 = aspect0 === 'depth-only' ? 'depth' : 'uint'; - const sampleType1 = aspect1 === 'depth-only' ? 'depth' : 'uint'; - const bindGroup0 = t.createBindGroupForTest(bindGroupView0, 'texture', sampleType0); - const bindGroup1 = t.createBindGroupForTest(bindGroupView1, 'texture', sampleType1); - - const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - mipLevelCount: 1, - }); - const colorAttachment = t.getColorAttachment(colorTexture); - const encoder = t.device.createCommandEncoder(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [colorAttachment], - }); - if (inSamePass) { - renderPass.setBindGroup(0, bindGroup0); - renderPass.setBindGroup(1, bindGroup1); - renderPass.end(); - } else { - renderPass.setBindGroup(0, bindGroup0); - renderPass.end(); - - const renderPass2 = encoder.beginRenderPass({ - colorAttachments: [colorAttachment], - }); - renderPass2.setBindGroup(1, bindGroup1); - renderPass2.end(); - } - - t.expectValidationError(() => { - encoder.finish(); - }, false); + const texture = t.device.createTexture({ + format: 'depth24plus-stencil8', + usage: GPUTextureUsage.TEXTURE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers], + mipLevelCount: kTextureLevels }); + const bindGroupView0 = texture.createView({ + dimension: '2d-array', + baseArrayLayer: view0Layers.base, + arrayLayerCount: view0Layers.count, + baseMipLevel: view0Levels.base, + mipLevelCount: view0Levels.count, + aspect: aspect0 + }); + const bindGroupView1 = texture.createView({ + dimension: '2d-array', + baseArrayLayer: view1Layers.base, + arrayLayerCount: view1Layers.count, + baseMipLevel: view1Levels.base, + mipLevelCount: view1Levels.count, + aspect: aspect1 + }); + + const sampleType0 = aspect0 === 'depth-only' ? 'depth' : 'uint'; + const sampleType1 = aspect1 === 'depth-only' ? 'depth' : 'uint'; + const bindGroup0 = t.createBindGroupForTest(bindGroupView0, 'sampled-texture', sampleType0); + const bindGroup1 = t.createBindGroupForTest(bindGroupView1, 'sampled-texture', sampleType1); + + const colorTexture = t.device.createTexture({ + format: 'rgba8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1], + mipLevelCount: 1 + }); + const colorAttachment = t.getColorAttachment(colorTexture); + const encoder = t.device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [colorAttachment] + }); + if (inSamePass) { + renderPass.setBindGroup(0, bindGroup0); + renderPass.setBindGroup(1, bindGroup1); + renderPass.end(); + } else { + renderPass.setBindGroup(0, bindGroup0); + renderPass.end(); + + const renderPass2 = encoder.beginRenderPass({ + colorAttachments: [colorAttachment] + }); + renderPass2.setBindGroup(1, bindGroup1); + renderPass2.end(); + } + + t.expectValidationError(() => { + encoder.finish(); + }, false); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_misc.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_misc.spec.js index 83d427982bd..b03f5ea2133 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_misc.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/resource_usages/texture/in_render_misc.spec.js @@ -1,49 +1,70 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Texture Usages Validation Tests on All Kinds of WebGPU Subresource Usage Scopes. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { unreachable } from '../../../../../common/util/util.js'; import { ValidationTest } from '../../validation_test.js'; +import { + + kTextureBindingTypes, + IsReadOnlyTextureBindingType } from +'../texture/in_render_common.spec.js'; class F extends ValidationTest { - createBindGroupLayoutForTest(textureUsage, sampleType, visibility = GPUShaderStage['FRAGMENT']) { + createBindGroupLayoutForTest( + textureUsage, + sampleType, + visibility = GPUShaderStage['FRAGMENT']) + { const bindGroupLayoutEntry = { binding: 0, - visibility, + visibility }; switch (textureUsage) { - case 'texture': + case 'sampled-texture': bindGroupLayoutEntry.texture = { viewDimension: '2d-array', sampleType }; break; - case 'storage': + case 'readonly-storage-texture': + bindGroupLayoutEntry.storageTexture = { + access: 'read-only', + format: 'r32float', + viewDimension: '2d-array' + }; + break; + case 'writeonly-storage-texture': bindGroupLayoutEntry.storageTexture = { access: 'write-only', - format: 'rgba8unorm', - viewDimension: '2d-array', + format: 'r32float', + viewDimension: '2d-array' + }; + break; + case 'readwrite-storage-texture': + bindGroupLayoutEntry.storageTexture = { + access: 'read-write', + format: 'r32float', + viewDimension: '2d-array' }; break; default: unreachable(); break; } - return this.device.createBindGroupLayout({ - entries: [bindGroupLayoutEntry], + entries: [bindGroupLayoutEntry] }); } createBindGroupForTest( - textureView, - textureUsage, - sampleType, - visibility = GPUShaderStage['FRAGMENT'] - ) { + textureView, + textureUsage, + sampleType, + visibility = GPUShaderStage['FRAGMENT']) + { return this.device.createBindGroup({ layout: this.createBindGroupLayoutForTest(textureUsage, sampleType, visibility), - entries: [{ binding: 0, resource: textureView }], + entries: [{ binding: 0, resource: textureView }] }); } } @@ -53,351 +74,500 @@ export const g = makeTestGroup(F); const kTextureSize = 16; const kTextureLayers = 3; -g.test('subresources,set_bind_group_on_same_index_color_texture') - .desc( - ` +g.test('subresources,set_bind_group_on_same_index_color_texture'). +desc( + ` Test that when one color texture subresource is bound to different bind groups, whether the bind groups are reset by another compatible ones or not, its list of internal usages within one usage scope can only be a compatible usage list.` - ) - .params(u => - u - .combineWithParams([ - { useDifferentTextureAsTexture2: true, baseLayer2: 0, view2Binding: 'texture' }, - { useDifferentTextureAsTexture2: false, baseLayer2: 0, view2Binding: 'texture' }, - { useDifferentTextureAsTexture2: false, baseLayer2: 1, view2Binding: 'texture' }, - { useDifferentTextureAsTexture2: false, baseLayer2: 0, view2Binding: 'storage' }, - { useDifferentTextureAsTexture2: false, baseLayer2: 1, view2Binding: 'storage' }, - ]) - .combine('hasConflict', [true, false]) - ) - .fn(t => { - const { useDifferentTextureAsTexture2, baseLayer2, view2Binding, hasConflict } = t.params; +). +params((u) => +u. +combine('useDifferentTextureAsTexture2', [true, false]). +combine('baseLayer2', [0, 1]). +combine('view1Binding', kTextureBindingTypes). +combine('view2Binding', kTextureBindingTypes) +). +fn((t) => { + const { useDifferentTextureAsTexture2, baseLayer2, view1Binding, view2Binding } = t.params; - const texture0 = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - }); - // We always bind the first layer of the texture to bindGroup0. - const textureView0 = texture0.createView({ - dimension: '2d-array', - baseArrayLayer: 0, - arrayLayerCount: 1, - }); - const bindGroup0 = t.createBindGroupForTest(textureView0, view2Binding, 'float'); - - // In one renderPassEncoder it is an error to set both bindGroup0 and bindGroup1. - const view1Binding = hasConflict - ? view2Binding === 'texture' - ? 'storage' - : 'texture' - : view2Binding; - const bindGroup1 = t.createBindGroupForTest(textureView0, view1Binding, 'float'); - - const texture2 = useDifferentTextureAsTexture2 - ? t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - }) - : texture0; - const textureView2 = texture2.createView({ - dimension: '2d-array', - baseArrayLayer: baseLayer2, - arrayLayerCount: kTextureLayers - baseLayer2, - }); - // There should be no conflict between bindGroup0 and validBindGroup2. - const validBindGroup2 = t.createBindGroupForTest(textureView2, view2Binding, 'float'); - - const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - }); - const encoder = t.device.createCommandEncoder(); - const renderPassEncoder = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorTexture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPassEncoder.setBindGroup(0, bindGroup0); - renderPassEncoder.setBindGroup(1, bindGroup1); - renderPassEncoder.setBindGroup(1, validBindGroup2); - renderPassEncoder.end(); - - t.expectValidationError(() => { - encoder.finish(); - }, hasConflict); + const texture0 = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers] }); + // We always bind the first layer of the texture to bindGroup0. + const textureView0 = texture0.createView({ + dimension: '2d-array', + baseArrayLayer: 0, + arrayLayerCount: 1 + }); + const bindGroup0 = t.createBindGroupForTest(textureView0, view1Binding, 'unfilterable-float'); + const bindGroup1 = t.createBindGroupForTest(textureView0, view2Binding, 'unfilterable-float'); -g.test('subresources,set_bind_group_on_same_index_depth_stencil_texture') - .desc( - ` + const texture2 = useDifferentTextureAsTexture2 ? + t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers] + }) : + texture0; + const textureView2 = texture2.createView({ + dimension: '2d-array', + baseArrayLayer: baseLayer2, + arrayLayerCount: kTextureLayers - baseLayer2 + }); + // There should be no conflict between bindGroup0 and validBindGroup2. + const validBindGroup2 = t.createBindGroupForTest( + textureView2, + view2Binding, + 'unfilterable-float' + ); + + const unusedColorTexture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1] + }); + const encoder = t.device.createCommandEncoder(); + const renderPassEncoder = encoder.beginRenderPass({ + colorAttachments: [ + { + view: unusedColorTexture.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPassEncoder.setBindGroup(0, bindGroup0); + renderPassEncoder.setBindGroup(1, bindGroup1); + renderPassEncoder.setBindGroup(1, validBindGroup2); + renderPassEncoder.end(); + + const noConflict = + IsReadOnlyTextureBindingType(view1Binding) && IsReadOnlyTextureBindingType(view2Binding) || + view1Binding === view2Binding; + t.expectValidationError(() => { + encoder.finish(); + }, !noConflict); +}); + +g.test('subresources,set_bind_group_on_same_index_depth_stencil_texture'). +desc( + ` Test that when one depth stencil texture subresource is bound to different bind groups, whether the bind groups are reset by another compatible ones or not, its list of internal usages within one usage scope can only be a compatible usage list.` - ) - .params(u => - u - .combine('bindAspect', ['depth-only', 'stencil-only']) - .combine('depthStencilReadOnly', [true, false]) - ) - .fn(t => { - const { bindAspect, depthStencilReadOnly } = t.params; - const depthStencilTexture = t.device.createTexture({ - format: 'depth24plus-stencil8', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - }); - - const conflictedToNonReadOnlyAttachmentBindGroup = t.createBindGroupForTest( - depthStencilTexture.createView({ - dimension: '2d-array', - aspect: bindAspect, - }), - 'texture', - bindAspect === 'depth-only' ? 'depth' : 'uint' - ); - - const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, - size: [kTextureSize, kTextureSize, 1], - }); - const validBindGroup = t.createBindGroupForTest( - colorTexture.createView({ - dimension: '2d-array', - }), - 'texture', - 'float' - ); - - const encoder = t.device.createCommandEncoder(); - const renderPassEncoder = encoder.beginRenderPass({ - colorAttachments: [], - depthStencilAttachment: { - view: depthStencilTexture.createView(), - depthReadOnly: depthStencilReadOnly, - stencilReadOnly: depthStencilReadOnly, - }, - }); - renderPassEncoder.setBindGroup(0, conflictedToNonReadOnlyAttachmentBindGroup); - renderPassEncoder.setBindGroup(0, validBindGroup); - renderPassEncoder.end(); - - t.expectValidationError(() => { - encoder.finish(); - }, !depthStencilReadOnly); +). +params((u) => +u. +combine('bindAspect', ['depth-only', 'stencil-only']). +combine('depthStencilReadOnly', [true, false]) +). +fn((t) => { + const { bindAspect, depthStencilReadOnly } = t.params; + const depthStencilTexture = t.device.createTexture({ + format: 'depth24plus-stencil8', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1], + ...(t.isCompatibility && { + textureBindingViewDimension: '2d-array' + }) }); -g.test('subresources,set_unused_bind_group') - .desc( - ` + const conflictedToNonReadOnlyAttachmentBindGroup = t.createBindGroupForTest( + depthStencilTexture.createView({ + dimension: '2d-array', + aspect: bindAspect + }), + 'sampled-texture', + bindAspect === 'depth-only' ? 'depth' : 'uint' + ); + + const colorTexture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, + size: [kTextureSize, kTextureSize, 1], + ...(t.isCompatibility && { + textureBindingViewDimension: '2d-array' + }) + }); + const validBindGroup = t.createBindGroupForTest( + colorTexture.createView({ + dimension: '2d-array' + }), + 'sampled-texture', + 'unfilterable-float' + ); + + const encoder = t.device.createCommandEncoder(); + const renderPassEncoder = encoder.beginRenderPass({ + colorAttachments: [], + depthStencilAttachment: { + view: depthStencilTexture.createView(), + depthReadOnly: depthStencilReadOnly, + stencilReadOnly: depthStencilReadOnly + } + }); + renderPassEncoder.setBindGroup(0, conflictedToNonReadOnlyAttachmentBindGroup); + renderPassEncoder.setBindGroup(0, validBindGroup); + renderPassEncoder.end(); + + t.expectValidationError(() => { + encoder.finish(); + }, !depthStencilReadOnly); +}); + +g.test('subresources,set_unused_bind_group'). +desc( + ` Test that when one texture subresource is bound to different bind groups and the bind groups are used in the same render or compute pass encoder, its list of internal usages within one usage scope can only be a compatible usage list.` - ) - .params(u => u.combine('inRenderPass', [true, false]).combine('hasConflict', [true, false])) - .fn(t => { - const { inRenderPass, hasConflict } = t.params; +). +params((u) => +u. +combine('inRenderPass', [true, false]). +combine('textureUsage0', kTextureBindingTypes). +combine('textureUsage1', kTextureBindingTypes) +). +fn((t) => { + const { inRenderPass, textureUsage0, textureUsage1 } = t.params; - const texture0 = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, - size: [kTextureSize, kTextureSize, kTextureLayers], - }); - // We always bind the first layer of the texture to bindGroup0. - const textureView0 = texture0.createView({ - dimension: '2d-array', - baseArrayLayer: 0, - arrayLayerCount: 1, - }); - const visibility = inRenderPass ? GPUShaderStage.FRAGMENT : GPUShaderStage.COMPUTE; - // bindGroup0 is used by the pipelines, and bindGroup1 is not used by the pipelines. - const textureUsage0 = inRenderPass ? 'texture' : 'storage'; - const textureUsage1 = hasConflict ? (inRenderPass ? 'storage' : 'texture') : textureUsage0; - const bindGroup0 = t.createBindGroupForTest(textureView0, textureUsage0, 'float', visibility); - const bindGroup1 = t.createBindGroupForTest(textureView0, textureUsage1, 'float', visibility); + if ( + textureUsage0 === 'readwrite-storage-texture' || + textureUsage1 === 'readwrite-storage-texture') + { + t.requireLanguageFeatureOrSkipTestCase('readonly_and_readwrite_storage_textures'); + } - const encoder = t.device.createCommandEncoder(); - const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - }); - const pipelineLayout = t.device.createPipelineLayout({ - bindGroupLayouts: [t.createBindGroupLayoutForTest(textureUsage0, 'float', visibility)], - }); - if (inRenderPass) { - const renderPipeline = t.device.createRenderPipeline({ - layout: pipelineLayout, - vertex: { - module: t.device.createShaderModule({ - code: t.getNoOpShaderCode('VERTEX'), - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: ` - @group(0) @binding(0) var texture0 : texture_2d_array; - @fragment fn main() - -> @location(0) vec4 { - return textureLoad(texture0, vec2(), 0, 0); - }`, - }), - entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], - }, - }); + const texture0 = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING, + size: [kTextureSize, kTextureSize, kTextureLayers] + }); + // We always bind the first layer of the texture to bindGroup0. + const textureView0 = texture0.createView({ + dimension: '2d-array', + baseArrayLayer: 0, + arrayLayerCount: 1 + }); + const visibility = inRenderPass ? GPUShaderStage.FRAGMENT : GPUShaderStage.COMPUTE; + // bindGroup0 is used by the pipelines, and bindGroup1 is not used by the pipelines. + const bindGroup0 = t.createBindGroupForTest( + textureView0, + textureUsage0, + 'unfilterable-float', + visibility + ); + const bindGroup1 = t.createBindGroupForTest( + textureView0, + textureUsage1, + 'unfilterable-float', + visibility + ); - const renderPassEncoder = encoder.beginRenderPass({ - colorAttachments: [ - { - view: colorTexture.createView(), - loadOp: 'load', - storeOp: 'store', - }, - ], - }); - renderPassEncoder.setBindGroup(0, bindGroup0); - renderPassEncoder.setBindGroup(1, bindGroup1); - renderPassEncoder.setPipeline(renderPipeline); - renderPassEncoder.draw(1); - renderPassEncoder.end(); - } else { - const computePipeline = t.device.createComputePipeline({ - layout: pipelineLayout, - compute: { - module: t.device.createShaderModule({ - code: ` - @group(0) @binding(0) var texture0 : texture_storage_2d_array; - @compute @workgroup_size(1) - fn main() { - textureStore(texture0, vec2(), 0, vec4()); - }`, - }), - entryPoint: 'main', - }, - }); - const computePassEncoder = encoder.beginComputePass(); - computePassEncoder.setBindGroup(0, bindGroup0); - computePassEncoder.setBindGroup(1, bindGroup1); - computePassEncoder.setPipeline(computePipeline); - computePassEncoder.dispatchWorkgroups(1); - computePassEncoder.end(); + const encoder = t.device.createCommandEncoder(); + const colorTexture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1] + }); + if (inRenderPass) { + let fragmentShader = ''; + switch (textureUsage0) { + case 'sampled-texture': + fragmentShader = ` + @group(0) @binding(0) var texture0 : texture_2d_array; + @fragment fn main() + -> @location(0) vec4 { + return textureLoad(texture0, vec2(), 0, 0); + } + `; + break; + case `readonly-storage-texture`: + fragmentShader = ` + @group(0) @binding(0) var texture0 : texture_storage_2d_array; + @fragment fn main() + -> @location(0) vec4 { + return textureLoad(texture0, vec2(), 0); + } + `; + break; + case `writeonly-storage-texture`: + fragmentShader = ` + @group(0) @binding(0) var texture0 : texture_storage_2d_array; + @fragment fn main() + -> @location(0) vec4 { + textureStore(texture0, vec2i(), 0, vec4f(1, 0, 0, 1)); + return vec4f(0, 0, 0, 1); + } + `; + break; + case `readwrite-storage-texture`: + fragmentShader = ` + @group(0) @binding(0) var texture0 : texture_storage_2d_array; + @fragment fn main() + -> @location(0) vec4 { + let color = textureLoad(texture0, vec2i(), 0); + textureStore(texture0, vec2i(), 0, vec4f(1, 0, 0, 1)); + return color; + } + `; + break; } - // In WebGPU SPEC (Chapter 3.4.5, Synchronization): - // This specification defines the following usage scopes: - // - In a compute pass, each dispatch command (dispatchWorkgroups() or - // dispatchWorkgroupsIndirect()) is one usage scope. A subresource is "used" in the usage - // scope if it is potentially accessible by the command. State-setting compute pass commands, - // like setBindGroup(index, bindGroup, dynamicOffsets), do not contribute directly to a usage - // scope. - // - One render pass is one usage scope. A subresource is "used" in the usage scope if it’s - // referenced by any (state-setting or non-state-setting) command. For example, in - // setBindGroup(index, bindGroup, dynamicOffsets), every subresource in bindGroup is "used" in - // the render pass’s usage scope. - const success = !inRenderPass || !hasConflict; - t.expectValidationError(() => { - encoder.finish(); - }, !success); - }); + const renderPipeline = t.device.createRenderPipeline({ + layout: t.device.createPipelineLayout({ + bindGroupLayouts: [ + t.createBindGroupLayoutForTest(textureUsage0, 'unfilterable-float', visibility)] -g.test('subresources,texture_usages_in_copy_and_render_pass') - .desc( - ` + }), + vertex: { + module: t.device.createShaderModule({ + code: t.getNoOpShaderCode('VERTEX') + }) + }, + fragment: { + module: t.device.createShaderModule({ + code: fragmentShader + }), + targets: [{ format: 'r32float' }] + } + }); + + const renderPassEncoder = encoder.beginRenderPass({ + colorAttachments: [ + { + view: colorTexture.createView(), + loadOp: 'load', + storeOp: 'store' + }] + + }); + renderPassEncoder.setBindGroup(0, bindGroup0); + renderPassEncoder.setBindGroup(1, bindGroup1); + renderPassEncoder.setPipeline(renderPipeline); + renderPassEncoder.draw(1); + renderPassEncoder.end(); + } else { + let computeShader = ''; + switch (textureUsage0) { + case 'sampled-texture': + computeShader = ` + @group(0) @binding(0) var texture0 : texture_2d_array; + @group(1) @binding(0) var writableStorage : texture_storage_2d_array; + @compute @workgroup_size(1) fn main() { + let value = textureLoad(texture0, vec2i(), 0, 0); + textureStore(writableStorage, vec2i(), 0, value); + } + `; + break; + case `readonly-storage-texture`: + computeShader = ` + @group(0) @binding(0) var texture0 : texture_storage_2d_array; + @group(1) @binding(0) var writableStorage : texture_storage_2d_array; + @compute @workgroup_size(1) fn main() { + let value = textureLoad(texture0, vec2(), 0); + textureStore(writableStorage, vec2i(), 0, value); + } + `; + break; + case `writeonly-storage-texture`: + computeShader = ` + @group(0) @binding(0) var texture0 : texture_storage_2d_array; + @group(1) @binding(0) var writableStorage : texture_storage_2d_array; + @compute @workgroup_size(1) fn main() { + textureStore(texture0, vec2i(), 0, vec4f(1, 0, 0, 1)); + textureStore(writableStorage, vec2i(), 0, vec4f(1, 0, 0, 1)); + } + `; + break; + case `readwrite-storage-texture`: + computeShader = ` + @group(0) @binding(0) var texture0 : texture_storage_2d_array; + @group(1) @binding(0) var writableStorage : texture_storage_2d_array; + @compute @workgroup_size(1) fn main() { + let color = textureLoad(texture0, vec2i(), 0); + textureStore(texture0, vec2i(), 0, vec4f(1, 0, 0, 1)); + textureStore(writableStorage, vec2i(), 0, color); + } + `; + break; + } + + const pipelineLayout = t.device.createPipelineLayout({ + bindGroupLayouts: [ + t.createBindGroupLayoutForTest(textureUsage0, 'unfilterable-float', visibility), + t.createBindGroupLayoutForTest( + 'writeonly-storage-texture', + 'unfilterable-float', + visibility + )] + + }); + const computePipeline = t.device.createComputePipeline({ + layout: pipelineLayout, + compute: { + module: t.device.createShaderModule({ + code: computeShader + }) + } + }); + + const writableStorageTexture = t.device.createTexture({ + format: 'r32float', + usage: GPUTextureUsage.STORAGE_BINDING, + size: [kTextureSize, kTextureSize, 1] + }); + const writableStorageTextureView = writableStorageTexture.createView({ + dimension: '2d-array', + baseArrayLayer: 0, + arrayLayerCount: 1 + }); + const writableStorageTextureBindGroup = t.createBindGroupForTest( + writableStorageTextureView, + 'writeonly-storage-texture', + 'unfilterable-float', + visibility + ); + + const computePassEncoder = encoder.beginComputePass(); + computePassEncoder.setBindGroup(0, bindGroup0); + computePassEncoder.setBindGroup(1, writableStorageTextureBindGroup); + computePassEncoder.setBindGroup(2, bindGroup1); + computePassEncoder.setPipeline(computePipeline); + computePassEncoder.dispatchWorkgroups(1); + computePassEncoder.end(); + } + + // In WebGPU SPEC (https://gpuweb.github.io/gpuweb/#programming-model-synchronization): + // This specification defines the following usage scopes: + // - In a compute pass, each dispatch command (dispatchWorkgroups() or + // dispatchWorkgroupsIndirect()) is one usage scope. A subresource is "used" in the usage + // scope if it is potentially accessible by the command. State-setting compute pass commands, + // like setBindGroup(index, bindGroup, dynamicOffsets), do not contribute directly to a usage + // scope. + // - One render pass is one usage scope. A subresource is "used" in the usage scope if it’s + // referenced by any (state-setting or non-state-setting) command. For example, in + // setBindGroup(index, bindGroup, dynamicOffsets), every subresource in bindGroup is "used" in + // the render pass’s usage scope. + const success = + !inRenderPass || + IsReadOnlyTextureBindingType(textureUsage0) && + IsReadOnlyTextureBindingType(textureUsage1) || + textureUsage0 === textureUsage1; + t.expectValidationError(() => { + encoder.finish(); + }, !success); +}); + +g.test('subresources,texture_usages_in_copy_and_render_pass'). +desc( + ` Test that using one texture subresource in a render pass encoder and a copy command is always allowed as WebGPU SPEC (chapter 3.4.5) defines that out of any pass encoder, each command always belongs to one usage scope.` - ) - .params(u => - u - .combine('usage0', ['copy-src', 'copy-dst', 'texture', 'storage', 'color-attachment']) - .combine('usage1', ['copy-src', 'copy-dst', 'texture', 'storage', 'color-attachment']) - .filter( - ({ usage0, usage1 }) => - usage0 === 'copy-src' || - usage0 === 'copy-dst' || - usage1 === 'copy-src' || - usage1 === 'copy-dst' - ) - ) - .fn(t => { - const { usage0, usage1 } = t.params; +). +params((u) => +u. +combine('usage0', [ +'copy-src', +'copy-dst', +'color-attachment', +...kTextureBindingTypes] +). +combine('usage1', [ +'copy-src', +'copy-dst', +'color-attachment', +...kTextureBindingTypes] +). +filter( + ({ usage0, usage1 }) => + usage0 === 'copy-src' || + usage0 === 'copy-dst' || + usage1 === 'copy-src' || + usage1 === 'copy-dst' +) +). +fn((t) => { + const { usage0, usage1 } = t.params; - const texture = t.device.createTexture({ - format: 'rgba8unorm', - usage: - GPUTextureUsage.COPY_SRC | - GPUTextureUsage.COPY_DST | - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.STORAGE_BINDING | - GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], - }); + const texture = t.device.createTexture({ + format: 'r32float', + usage: + GPUTextureUsage.COPY_SRC | + GPUTextureUsage.COPY_DST | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.STORAGE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT, + size: [kTextureSize, kTextureSize, 1], + ...(t.isCompatibility && { + textureBindingViewDimension: '2d-array' + }) + }); - const UseTextureOnCommandEncoder = (texture, usage, encoder) => { - switch (usage) { - case 'copy-src': { + const UseTextureOnCommandEncoder = ( + texture, + usage, + encoder) => + { + switch (usage) { + case 'copy-src':{ const buffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_DST }); encoder.copyTextureToBuffer({ texture }, { buffer }, [1, 1, 1]); break; } - case 'copy-dst': { + case 'copy-dst':{ const buffer = t.createBufferWithState('valid', { size: 4, - usage: GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.COPY_SRC }); encoder.copyBufferToTexture({ buffer }, { texture }, [1, 1, 1]); break; } - case 'color-attachment': { + case 'color-attachment':{ const renderPassEncoder = encoder.beginRenderPass({ - colorAttachments: [{ view: texture.createView(), loadOp: 'load', storeOp: 'store' }], + colorAttachments: [{ view: texture.createView(), loadOp: 'load', storeOp: 'store' }] }); renderPassEncoder.end(); break; } - case 'texture': - case 'storage': { + case 'sampled-texture': + case 'readonly-storage-texture': + case 'writeonly-storage-texture': + case 'readwrite-storage-texture':{ const colorTexture = t.device.createTexture({ - format: 'rgba8unorm', + format: 'r32float', usage: GPUTextureUsage.RENDER_ATTACHMENT, - size: [kTextureSize, kTextureSize, 1], + size: [kTextureSize, kTextureSize, 1] }); const renderPassEncoder = encoder.beginRenderPass({ colorAttachments: [ - { view: colorTexture.createView(), loadOp: 'load', storeOp: 'store' }, - ], + { view: colorTexture.createView(), loadOp: 'load', storeOp: 'store' }] + }); const bindGroup = t.createBindGroupForTest( texture.createView({ - dimension: '2d-array', + dimension: '2d-array' }), usage, - 'float' + 'unfilterable-float' ); - renderPassEncoder.setBindGroup(0, bindGroup); renderPassEncoder.end(); break; } - } - }; - const encoder = t.device.createCommandEncoder(); - UseTextureOnCommandEncoder(texture, usage0, encoder); - UseTextureOnCommandEncoder(texture, usage1, encoder); - t.expectValidationError(() => { - encoder.finish(); - }, false); - }); + } + }; + const encoder = t.device.createCommandEncoder(); + UseTextureOnCommandEncoder(texture, usage0, encoder); + UseTextureOnCommandEncoder(texture, usage1, encoder); + t.expectValidationError(() => { + encoder.finish(); + }, false); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/entry_point.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/entry_point.spec.js index 6daa94f6bf6..c8e7a0109db 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/entry_point.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/entry_point.spec.js @@ -1,10 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This tests entry point validation of compute/render pipelines and their shader modules. The entryPoint in shader module include standard "main" and others. The entryPoint assigned in descriptor include: +- Undefined with matching entry point for stage - Matching case (control case) - Empty string - Mistyping @@ -12,107 +13,291 @@ The entryPoint assigned in descriptor include: - Unicode entrypoints and their ASCIIfied version TODO: -- Test unicode normalization (gpuweb/gpuweb#1160) - Fine-tune test cases to reduce number by removing trivially similar cases -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kDefaultVertexShaderCode, getShaderWithEntryPoint } from '../../../util/shader.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); const kEntryPointTestCases = [ - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'main' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: '' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'main\0' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'main\0a' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'mian' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'main ' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'ma in' }, - { shaderModuleEntryPoint: 'main', stageEntryPoint: 'main\n' }, - { shaderModuleEntryPoint: 'mian', stageEntryPoint: 'mian' }, - { shaderModuleEntryPoint: 'mian', stageEntryPoint: 'main' }, - { shaderModuleEntryPoint: 'mainmain', stageEntryPoint: 'mainmain' }, - { shaderModuleEntryPoint: 'mainmain', stageEntryPoint: 'foo' }, - { shaderModuleEntryPoint: 'main_t12V3', stageEntryPoint: 'main_t12V3' }, - { shaderModuleEntryPoint: 'main_t12V3', stageEntryPoint: 'main_t12V5' }, - { shaderModuleEntryPoint: 'main_t12V3', stageEntryPoint: '_main_t12V3' }, - { shaderModuleEntryPoint: 'séquençage', stageEntryPoint: 'séquençage' }, - { shaderModuleEntryPoint: 'séquençage', stageEntryPoint: 'séquençage' }, -]; +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'main' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: '' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'main\0' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'main\0a' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'mian' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'main ' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'ma in' }, +{ shaderModuleEntryPoint: 'main', stageEntryPoint: 'main\n' }, +{ shaderModuleEntryPoint: 'mian', stageEntryPoint: 'mian' }, +{ shaderModuleEntryPoint: 'mian', stageEntryPoint: 'main' }, +{ shaderModuleEntryPoint: 'mainmain', stageEntryPoint: 'mainmain' }, +{ shaderModuleEntryPoint: 'mainmain', stageEntryPoint: 'foo' }, +{ shaderModuleEntryPoint: 'main_t12V3', stageEntryPoint: 'main_t12V3' }, +{ shaderModuleEntryPoint: 'main_t12V3', stageEntryPoint: 'main_t12V5' }, +{ shaderModuleEntryPoint: 'main_t12V3', stageEntryPoint: '_main_t12V3' }, +{ shaderModuleEntryPoint: 'séquençage', stageEntryPoint: 'séquençage' }, +{ shaderModuleEntryPoint: 'séquençage', stageEntryPoint: 'séquençage' }]; -g.test('compute') - .desc( - ` -Tests calling createComputePipeline(Async) with valid vertex stage shader and different entryPoints, + +g.test('compute'). +desc( + ` +Tests calling createComputePipeline(Async) with valid compute stage shader and different entryPoints, and check that the APIs only accept matching entryPoint. ` - ) - .params(u => u.combine('isAsync', [true, false]).combineWithParams(kEntryPointTestCases)) - .fn(t => { - const { isAsync, shaderModuleEntryPoint, stageEntryPoint } = t.params; - const descriptor = { - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: getShaderWithEntryPoint('compute', shaderModuleEntryPoint), - }), - entryPoint: stageEntryPoint, - }, - }; - const _success = shaderModuleEntryPoint === stageEntryPoint; - t.doCreateComputePipelineTest(isAsync, _success, descriptor); - }); +). +params((u) => +u. +combine('isAsync', [true, false]). +combine('shaderModuleStage', ['compute', 'vertex', 'fragment']). +beginSubcases(). +combine('provideEntryPoint', [true, false]). +combine('extraEntryPoint', [true, false]). +combineWithParams(kEntryPointTestCases) +). +fn((t) => { + const { + isAsync, + provideEntryPoint, + extraEntryPoint, + shaderModuleStage, + shaderModuleEntryPoint, + stageEntryPoint + } = t.params; + const entryPoint = provideEntryPoint ? stageEntryPoint : undefined; + let code = getShaderWithEntryPoint(shaderModuleStage, shaderModuleEntryPoint); + if (extraEntryPoint) { + code += ` ${getShaderWithEntryPoint(shaderModuleStage, 'extra')}`; + } + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code + }), + entryPoint + } + }; + let _success = true; + if (shaderModuleStage !== 'compute') { + _success = false; + } + if (!provideEntryPoint && extraEntryPoint) { + _success = false; + } + if (shaderModuleEntryPoint !== stageEntryPoint && provideEntryPoint) { + _success = false; + } + t.doCreateComputePipelineTest(isAsync, _success, descriptor); +}); -g.test('vertex') - .desc( - ` +g.test('vertex'). +desc( + ` Tests calling createRenderPipeline(Async) with valid vertex stage shader and different entryPoints, and check that the APIs only accept matching entryPoint. ` - ) - .params(u => u.combine('isAsync', [true, false]).combineWithParams(kEntryPointTestCases)) - .fn(t => { - const { isAsync, shaderModuleEntryPoint, stageEntryPoint } = t.params; - const descriptor = { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: getShaderWithEntryPoint('vertex', shaderModuleEntryPoint), - }), - entryPoint: stageEntryPoint, - }, - }; - const _success = shaderModuleEntryPoint === stageEntryPoint; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); +). +params((u) => +u. +combine('isAsync', [true, false]). +combine('shaderModuleStage', ['compute', 'vertex', 'fragment']). +beginSubcases(). +combine('provideEntryPoint', [true, false]). +combine('extraEntryPoint', [true, false]). +combineWithParams(kEntryPointTestCases) +). +fn((t) => { + const { + isAsync, + provideEntryPoint, + extraEntryPoint, + shaderModuleStage, + shaderModuleEntryPoint, + stageEntryPoint + } = t.params; + const entryPoint = provideEntryPoint ? stageEntryPoint : undefined; + let code = getShaderWithEntryPoint(shaderModuleStage, shaderModuleEntryPoint); + if (extraEntryPoint) { + code += ` ${getShaderWithEntryPoint(shaderModuleStage, 'extra')}`; + } + const descriptor = { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ code }), + entryPoint + } + }; + let _success = true; + if (shaderModuleStage !== 'vertex') { + _success = false; + } + if (!provideEntryPoint && extraEntryPoint) { + _success = false; + } + if (shaderModuleEntryPoint !== stageEntryPoint && provideEntryPoint) { + _success = false; + } + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); -g.test('fragment') - .desc( - ` +g.test('fragment'). +desc( + ` Tests calling createRenderPipeline(Async) with valid fragment stage shader and different entryPoints, and check that the APIs only accept matching entryPoint. ` - ) - .params(u => u.combine('isAsync', [true, false]).combineWithParams(kEntryPointTestCases)) - .fn(t => { - const { isAsync, shaderModuleEntryPoint, stageEntryPoint } = t.params; - const descriptor = { - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: kDefaultVertexShaderCode, - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: getShaderWithEntryPoint('fragment', shaderModuleEntryPoint), - }), - entryPoint: stageEntryPoint, - targets: [{ format: 'rgba8unorm' }], - }, - }; - const _success = shaderModuleEntryPoint === stageEntryPoint; - t.doCreateRenderPipelineTest(isAsync, _success, descriptor); - }); +). +params((u) => +u. +combine('isAsync', [true, false]). +combine('shaderModuleStage', ['compute', 'vertex', 'fragment']). +beginSubcases(). +combine('provideEntryPoint', [true, false]). +combine('extraEntryPoint', [true, false]). +combineWithParams(kEntryPointTestCases) +). +fn((t) => { + const { + isAsync, + provideEntryPoint, + extraEntryPoint, + shaderModuleStage, + shaderModuleEntryPoint, + stageEntryPoint + } = t.params; + const entryPoint = provideEntryPoint ? stageEntryPoint : undefined; + let code = getShaderWithEntryPoint(shaderModuleStage, shaderModuleEntryPoint); + if (extraEntryPoint) { + code += ` ${getShaderWithEntryPoint(shaderModuleStage, 'extra')}`; + } + const descriptor = { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: kDefaultVertexShaderCode + }) + }, + fragment: { + module: t.device.createShaderModule({ + code + }), + entryPoint, + targets: [{ format: 'rgba8unorm' }] + } + }; + let _success = true; + if (shaderModuleStage !== 'fragment') { + _success = false; + } + if (!provideEntryPoint && extraEntryPoint) { + _success = false; + } + if (shaderModuleEntryPoint !== stageEntryPoint && provideEntryPoint) { + _success = false; + } + t.doCreateRenderPipelineTest(isAsync, _success, descriptor); +}); + +g.test('compute_undefined_entry_point_and_extra_stage'). +desc( + ` +Tests calling createComputePipeline(Async) with compute stage shader and +an undefined entryPoint is valid if there's an extra shader stage. +` +). +params((u) => +u. +combine('isAsync', [true, false]). +combine('extraShaderModuleStage', ['compute', 'vertex', 'fragment']) +). +fn((t) => { + const { isAsync, extraShaderModuleStage } = t.params; + const code = ` + ${getShaderWithEntryPoint('compute', 'main')} + ${getShaderWithEntryPoint(extraShaderModuleStage, 'extra')} + `; + const descriptor = { + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code + }), + entryPoint: undefined + } + }; + + const success = extraShaderModuleStage !== 'compute'; + t.doCreateComputePipelineTest(isAsync, success, descriptor); +}); + +g.test('vertex_undefined_entry_point_and_extra_stage'). +desc( + ` +Tests calling createRenderPipeline(Async) with vertex stage shader and +an undefined entryPoint is valid if there's an extra shader stage. +` +). +params((u) => +u. +combine('isAsync', [true, false]). +combine('extraShaderModuleStage', ['compute', 'vertex', 'fragment']) +). +fn((t) => { + const { isAsync, extraShaderModuleStage } = t.params; + const code = ` + ${getShaderWithEntryPoint('vertex', 'main')} + ${getShaderWithEntryPoint(extraShaderModuleStage, 'extra')} + `; + const descriptor = { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code + }), + entryPoint: undefined + } + }; + + const success = extraShaderModuleStage !== 'vertex'; + t.doCreateRenderPipelineTest(isAsync, success, descriptor); +}); + +g.test('fragment_undefined_entry_point_and_extra_stage'). +desc( + ` +Tests calling createRenderPipeline(Async) with fragment stage shader and +an undefined entryPoint is valid if there's an extra shader stage. +` +). +params((u) => +u. +combine('isAsync', [true, false]). +combine('extraShaderModuleStage', ['compute', 'vertex', 'fragment']) +). +fn((t) => { + const { isAsync, extraShaderModuleStage } = t.params; + const code = ` + ${getShaderWithEntryPoint('fragment', 'main')} + ${getShaderWithEntryPoint(extraShaderModuleStage, 'extra')} + `; + const descriptor = { + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: kDefaultVertexShaderCode + }) + }, + fragment: { + module: t.device.createShaderModule({ + code + }), + entryPoint: undefined, + targets: [{ format: 'rgba8unorm' }] + } + }; + + const success = extraShaderModuleStage !== 'fragment'; + t.doCreateRenderPipelineTest(isAsync, success, descriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/overrides.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/overrides.spec.js index 718c966bd10..b48066f8a47 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/overrides.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/shader_module/overrides.spec.js @@ -1,23 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` This tests overrides numeric identifiers should not conflict. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('id_conflict') - .desc( - ` +g.test('id_conflict'). +desc( + ` Tests that overrides' explicit numeric identifier should not conflict. ` - ) - .fn(t => { - t.expectValidationError(() => { - t.device.createShaderModule({ - code: ` +). +fn((t) => { + t.expectValidationError(() => { + t.device.createShaderModule({ + code: ` @id(1234) override c0: u32; @id(4321) override c1: u32; @@ -26,13 +25,13 @@ Tests that overrides' explicit numeric identifier should not conflict. _ = c0; _ = c1; } - `, - }); - }, false); + ` + }); + }, false); - t.expectValidationError(() => { - t.device.createShaderModule({ - code: ` + t.expectValidationError(() => { + t.device.createShaderModule({ + code: ` @id(1234) override c0: u32; @id(1234) override c1: u32; @@ -41,21 +40,21 @@ Tests that overrides' explicit numeric identifier should not conflict. _ = c0; _ = c1; } - `, - }); - }, true); - }); + ` + }); + }, true); +}); -g.test('name_conflict') - .desc( - ` +g.test('name_conflict'). +desc( + ` Tests that overrides' variable name should not conflict, regardless of their numeric identifiers. ` - ) - .fn(t => { - t.expectValidationError(() => { - t.device.createShaderModule({ - code: ` +). +fn((t) => { + t.expectValidationError(() => { + t.device.createShaderModule({ + code: ` override c0: u32; override c0: u32; @@ -63,13 +62,13 @@ override c0: u32; // make sure the overridable constants are not optimized out _ = c0; } - `, - }); - }, true); + ` + }); + }, true); - t.expectValidationError(() => { - t.device.createShaderModule({ - code: ` + t.expectValidationError(() => { + t.device.createShaderModule({ + code: ` @id(1) override c0: u32; override c0: u32; @@ -77,13 +76,13 @@ override c0: u32; // make sure the overridable constants are not optimized out _ = c0; } - `, - }); - }, true); + ` + }); + }, true); - t.expectValidationError(() => { - t.device.createShaderModule({ - code: ` + t.expectValidationError(() => { + t.device.createShaderModule({ + code: ` @id(1) override c0: u32; @id(2) override c0: u32; @@ -91,7 +90,7 @@ override c0: u32; // make sure the overridable constants are not optimized out _ = c0; } - `, - }); - }, true); - }); + ` + }); + }, true); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/state/device_lost/destroy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/state/device_lost/destroy.spec.js index b7708dd89d7..877044a199e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/state/device_lost/destroy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/state/device_lost/destroy.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for device lost induced via destroy. - Tests that prior to device destruction, valid APIs do not generate errors (control case). - After device destruction, runs the same APIs. No expected observable results, so test crash or future failures are the only current failure indicators. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { assert } from '../../../../../common/util/util.js'; import { allBindingEntries, @@ -20,29 +19,30 @@ import { kTextureUsageTypeInfo, kTextureUsageCopy, kTextureUsageCopyInfo, - kShaderStageKeys, -} from '../../../../capability_info.js'; + kShaderStageKeys } from +'../../../../capability_info.js'; import { kCompressedTextureFormats, kRegularTextureFormats, kRenderableColorTextureFormats, - kTextureFormatInfo, -} from '../../../../format_info.js'; + kTextureFormatInfo } from +'../../../../format_info.js'; import { createCanvas, kAllCanvasTypes, - kValidCanvasContextIds, -} from '../../../../util/create_elements.js'; + kValidCanvasContextIds } from +'../../../../util/create_elements.js'; import { startPlayingAndWaitForVideo, getVideoElement, - getVideoFrameFromVideoElement, -} from '../../../../web_platform/util.js'; + getVideoFrameFromVideoElement } from +'../../../../web_platform/util.js'; import { ValidationTest } from '../../validation_test.js'; const kCommandValidationStages = ['finish', 'submit']; + class DeviceDestroyTests extends ValidationTest { /** * Expects that `fn` does not produce any errors before the device is destroyed, and then calls @@ -69,1081 +69,1107 @@ class DeviceDestroyTests extends ValidationTest { * 'finish': Tests [encode, finish] and [encoder, destroy, finish] * 'submit': Tests [encoder, finish, submit] and [encoder, finish, destroy, submit] */ - async executeCommandsAfterDestroy(stage, awaitLost, encoderType, fn) { + async executeCommandsAfterDestroy( + stage, + awaitLost, + encoderType, + fn) + { this.expectDeviceLost('destroyed'); switch (stage) { - case 'finish': { - // Control case - fn(this.createEncoder(encoderType)).validateFinish(true); - // Validation case - const encoder = fn(this.createEncoder(encoderType)); - await this.executeAfterDestroy(() => { - encoder.finish(); - }, awaitLost); - break; - } - case 'submit': { - // Control case - fn(this.createEncoder(encoderType)).validateFinishAndSubmit(true, true); - // Validation case - const commands = fn(this.createEncoder(encoderType)).validateFinish(true); - await this.executeAfterDestroy(() => { - this.queue.submit([commands]); - }, awaitLost); - break; - } + case 'finish':{ + // Control case + fn(this.createEncoder(encoderType)).validateFinish(true); + // Validation case + const encoder = fn(this.createEncoder(encoderType)); + await this.executeAfterDestroy(() => { + encoder.finish(); + }, awaitLost); + break; + } + case 'submit':{ + // Control case + fn(this.createEncoder(encoderType)).validateFinishAndSubmit(true, true); + // Validation case + const commands = fn(this.createEncoder(encoderType)).validateFinish(true); + await this.executeAfterDestroy(() => { + this.queue.submit([commands]); + }, awaitLost); + break; + } } } } export const g = makeTestGroup(DeviceDestroyTests); -g.test('createBuffer') - .desc( - ` +g.test('createBuffer'). +desc( + ` Tests creating buffers on destroyed device. Tests valid combinations of: - Various usages - Mapped at creation or not ` - ) - .params(u => - u - .combine('usageType', kBufferUsageKeys) - .combine('usageCopy', kBufferUsageCopy) - .combine('awaitLost', [true, false]) - .filter(({ usageType, usageCopy }) => { - if (usageType === 'COPY_SRC' || usageType === 'COPY_DST') { - return false; - } - if (usageType === 'MAP_READ') { - return usageCopy === 'COPY_NONE' || usageCopy === 'COPY_DST'; - } - if (usageType === 'MAP_WRITE') { - return usageCopy === 'COPY_NONE' || usageCopy === 'COPY_SRC'; - } - return true; - }) - .combine('mappedAtCreation', [true, false]) - ) - .fn(async t => { - const { awaitLost, usageType, usageCopy, mappedAtCreation } = t.params; - await t.executeAfterDestroy(() => { - t.device.createBuffer({ - size: 16, - usage: kBufferUsageInfo[usageType] | kBufferUsageCopyInfo[usageCopy], - mappedAtCreation, - }); - }, awaitLost); - }); +). +params((u) => +u. +combine('usageType', kBufferUsageKeys). -g.test('createTexture,2d,uncompressed_format') - .desc( - ` +combine('usageCopy', kBufferUsageCopy). +combine('awaitLost', [true, false]). +filter(({ usageType, usageCopy }) => { + if (usageType === 'COPY_SRC' || usageType === 'COPY_DST') { + return false; + } + if (usageType === 'MAP_READ') { + return usageCopy === 'COPY_NONE' || usageCopy === 'COPY_DST'; + } + if (usageType === 'MAP_WRITE') { + return usageCopy === 'COPY_NONE' || usageCopy === 'COPY_SRC'; + } + return true; +}). +combine('mappedAtCreation', [true, false]) +). +fn(async (t) => { + const { awaitLost, usageType, usageCopy, mappedAtCreation } = t.params; + await t.executeAfterDestroy(() => { + t.device.createBuffer({ + size: 16, + usage: kBufferUsageInfo[usageType] | kBufferUsageCopyInfo[usageCopy], + mappedAtCreation + }); + }, awaitLost); +}); + +g.test('createTexture,2d,uncompressed_format'). +desc( + ` Tests creating 2d uncompressed textures on destroyed device. Tests valid combinations of: - Various uncompressed texture formats - Various usages ` - ) - .params(u => - u - .combine('format', kRegularTextureFormats) - .combine('usageType', kTextureUsageType) - .combine('usageCopy', kTextureUsageCopy) - .combine('awaitLost', [true, false]) - .filter(({ format, usageType }) => { - const info = kTextureFormatInfo[format]; - return !( - (!info.colorRender && usageType === 'render') || - (!info.color.storage && usageType === 'storage') - ); - }) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(async t => { - const { awaitLost, format, usageType, usageCopy } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - await t.executeAfterDestroy(() => { - t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], - format, - }); - }, awaitLost); - }); +). +params((u) => +u. +combine('format', kRegularTextureFormats). -g.test('createTexture,2d,compressed_format') - .desc( - ` +combine('usageType', kTextureUsageType). +combine('usageCopy', kTextureUsageCopy). +combine('awaitLost', [true, false]). +filter(({ format, usageType }) => { + const info = kTextureFormatInfo[format]; + return !( + !info.colorRender && usageType === 'render' || + !info.color.storage && usageType === 'storage'); + +}) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn(async (t) => { + const { awaitLost, format, usageType, usageCopy } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + await t.executeAfterDestroy(() => { + t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], + format + }); + }, awaitLost); +}); + +g.test('createTexture,2d,compressed_format'). +desc( + ` Tests creating 2d compressed textures on destroyed device. Tests valid combinations of: - Various compressed texture formats - Various usages ` - ) - .params(u => - u - .combine('format', kCompressedTextureFormats) - .combine('usageType', kTextureUsageType) - .combine('usageCopy', kTextureUsageCopy) - .combine('awaitLost', [true, false]) - .filter(({ format, usageType }) => { - const info = kTextureFormatInfo[format]; - return !( - (!info.colorRender && usageType === 'render') || - (!info.color.storage && usageType === 'storage') - ); - }) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(async t => { - const { awaitLost, format, usageType, usageCopy } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - await t.executeAfterDestroy(() => { - t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], - format, - }); - }, awaitLost); - }); +). +params((u) => +u. +combine('format', kCompressedTextureFormats). -g.test('createView,2d,uncompressed_format') - .desc( - ` +combine('usageType', kTextureUsageType). +combine('usageCopy', kTextureUsageCopy). +combine('awaitLost', [true, false]). +filter(({ format, usageType }) => { + const info = kTextureFormatInfo[format]; + return !( + !info.colorRender && usageType === 'render' || + !info.color.storage && usageType === 'storage'); + +}) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn(async (t) => { + const { awaitLost, format, usageType, usageCopy } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + await t.executeAfterDestroy(() => { + t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], + format + }); + }, awaitLost); +}); + +g.test('createView,2d,uncompressed_format'). +desc( + ` Tests creating texture views on 2d uncompressed textures from destroyed device. Tests valid combinations of: - Various uncompressed texture formats - Various usages ` - ) - .params(u => - u - .combine('format', kRegularTextureFormats) - .combine('usageType', kTextureUsageType) - .combine('usageCopy', kTextureUsageCopy) - .combine('awaitLost', [true, false]) - .filter(({ format, usageType }) => { - const info = kTextureFormatInfo[format]; - return !( - (!info.colorRender && usageType === 'render') || - (!info.color.storage && usageType === 'storage') - ); - }) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(async t => { - const { awaitLost, format, usageType, usageCopy } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - const texture = t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], - format, - }); - await t.executeAfterDestroy(() => { - texture.createView({ format }); - }, awaitLost); - }); +). +params((u) => +u. +combine('format', kRegularTextureFormats). -g.test('createView,2d,compressed_format') - .desc( - ` +combine('usageType', kTextureUsageType). +combine('usageCopy', kTextureUsageCopy). +combine('awaitLost', [true, false]). +filter(({ format, usageType }) => { + const info = kTextureFormatInfo[format]; + return !( + !info.colorRender && usageType === 'render' || + !info.color.storage && usageType === 'storage'); + +}) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn(async (t) => { + const { awaitLost, format, usageType, usageCopy } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + const texture = t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], + format + }); + await t.executeAfterDestroy(() => { + texture.createView({ format }); + }, awaitLost); +}); + +g.test('createView,2d,compressed_format'). +desc( + ` Tests creating texture views on 2d compressed textures from destroyed device. Tests valid combinations of: - Various compressed texture formats - Various usages ` - ) - .params(u => - u - .combine('format', kCompressedTextureFormats) - .combine('usageType', kTextureUsageType) - .combine('usageCopy', kTextureUsageCopy) - .combine('awaitLost', [true, false]) - .filter(({ format, usageType }) => { - const info = kTextureFormatInfo[format]; - return !( - (!info.colorRender && usageType === 'render') || - (!info.color.storage && usageType === 'storage') - ); - }) - ) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(async t => { - const { awaitLost, format, usageType, usageCopy } = t.params; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - const texture = t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], - format, - }); - await t.executeAfterDestroy(() => { - texture.createView({ format }); - }, awaitLost); - }); +). +params((u) => +u. +combine('format', kCompressedTextureFormats). -g.test('createSampler') - .desc( - ` +combine('usageType', kTextureUsageType). +combine('usageCopy', kTextureUsageCopy). +combine('awaitLost', [true, false]). +filter(({ format, usageType }) => { + const info = kTextureFormatInfo[format]; + return !( + !info.colorRender && usageType === 'render' || + !info.color.storage && usageType === 'storage'); + +}) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn(async (t) => { + const { awaitLost, format, usageType, usageCopy } = t.params; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + const texture = t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: kTextureUsageTypeInfo[usageType] | kTextureUsageCopyInfo[usageCopy], + format + }); + await t.executeAfterDestroy(() => { + texture.createView({ format }); + }, awaitLost); +}); + +g.test('createSampler'). +desc( + ` Tests creating samplers on destroyed device. ` - ) - .params(u => u.combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost } = t.params; - await t.executeAfterDestroy(() => { - t.device.createSampler(); - }, awaitLost); - }); +). +params((u) => u.combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost } = t.params; + await t.executeAfterDestroy(() => { + t.device.createSampler(); + }, awaitLost); +}); -g.test('createBindGroupLayout') - .desc( - ` +g.test('createBindGroupLayout'). +desc( + ` Tests creating bind group layouts on destroyed device. Tests valid combinations of: - Various valid binding entries - Maximum set of visibility for each binding entry ` - ) - .params(u => u.combine('entry', allBindingEntries(false)).combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost, entry } = t.params; - const visibility = bindingTypeInfo(entry).validStages; - await t.executeAfterDestroy(() => { - t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility, ...entry }], - }); - }, awaitLost); - }); +). +params((u) => u.combine('entry', allBindingEntries(false)).combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost, entry } = t.params; + const visibility = bindingTypeInfo(entry).validStages; + await t.executeAfterDestroy(() => { + t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility, ...entry }] + }); + }, awaitLost); +}); -g.test('createBindGroup') - .desc( - ` +g.test('createBindGroup'). +desc( + ` Tests creating bind group on destroyed device. Tests valid combinations of: - Various bound resource types - Various valid binding entries - Maximum set of visibility for each binding entry ` - ) - .desc(`A destroyed device should not be able to create any valid bind groups.`) - .params(u => - u - .combine('resourceType', kBindableResources) - .combine('entry', allBindingEntries(false)) - .filter(({ resourceType, entry }) => { - const info = bindingTypeInfo(entry); - switch (info.resource) { - // Either type of sampler may be bound to a filtering sampler binding. - case 'filtSamp': - return resourceType === 'filtSamp' || resourceType === 'nonFiltSamp'; - // But only non-filtering samplers can be used with non-filtering sampler bindings. - case 'nonFiltSamp': - return resourceType === 'nonFiltSamp'; - default: - return info.resource === resourceType; - } - }) - .combine('awaitLost', [true, false]) - ) - .fn(async t => { - const { awaitLost, resourceType, entry } = t.params; - const visibility = bindingTypeInfo(entry).validStages; - const layout = t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility, ...entry }], - }); - const resource = t.getBindingResource(resourceType); - await t.executeAfterDestroy(() => { - t.device.createBindGroup({ layout, entries: [{ binding: 0, resource }] }); - }, awaitLost); - }); +). +desc(`A destroyed device should not be able to create any valid bind groups.`). +params((u) => +u. +combine('resourceType', kBindableResources). +combine('entry', allBindingEntries(false)). +filter(({ resourceType, entry }) => { + const info = bindingTypeInfo(entry); + switch (info.resource) { + // Either type of sampler may be bound to a filtering sampler binding. + case 'filtSamp': + return resourceType === 'filtSamp' || resourceType === 'nonFiltSamp'; + // But only non-filtering samplers can be used with non-filtering sampler bindings. + case 'nonFiltSamp': + return resourceType === 'nonFiltSamp'; + default: + return info.resource === resourceType; + } +}). -g.test('createPipelineLayout') - .desc( - ` +combine('awaitLost', [true, false]) +). +fn(async (t) => { + const { awaitLost, resourceType, entry } = t.params; + const visibility = bindingTypeInfo(entry).validStages; + const layout = t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility, ...entry }] + }); + const resource = t.getBindingResource(resourceType); + await t.executeAfterDestroy(() => { + t.device.createBindGroup({ layout, entries: [{ binding: 0, resource }] }); + }, awaitLost); +}); + +g.test('createPipelineLayout'). +desc( + ` Tests creating pipeline layouts on destroyed device. Tests valid combinations of: - Various bind groups with valid binding entries - Maximum set of visibility for each binding entry ` - ) - .params(u => u.combine('entry', allBindingEntries(false)).combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost, entry } = t.params; - const visibility = bindingTypeInfo(entry).validStages; - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility, ...entry }], - }); - await t.executeAfterDestroy(() => { - t.device.createPipelineLayout({ - bindGroupLayouts: [bindGroupLayout], - }); - }, awaitLost); +). +params((u) => u.combine('entry', allBindingEntries(false)).combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost, entry } = t.params; + const visibility = bindingTypeInfo(entry).validStages; + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility, ...entry }] }); + await t.executeAfterDestroy(() => { + t.device.createPipelineLayout({ + bindGroupLayouts: [bindGroupLayout] + }); + }, awaitLost); +}); -g.test('createShaderModule') - .desc( - ` +g.test('createShaderModule'). +desc( + ` Tests creating shader modules on destroyed device. - Tests all shader stages: vertex, fragment, compute ` - ) - .params(u => u.combine('stage', kShaderStageKeys).combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost, stage } = t.params; - await t.executeAfterDestroy(() => { - t.device.createShaderModule({ code: t.getNoOpShaderCode(stage) }); - }, awaitLost); - }); +). +params((u) => u.combine('stage', kShaderStageKeys).combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost, stage } = t.params; + await t.executeAfterDestroy(() => { + t.device.createShaderModule({ code: t.getNoOpShaderCode(stage) }); + }, awaitLost); +}); -g.test('createComputePipeline') - .desc( - ` +g.test('createComputePipeline'). +desc( + ` Tests creating compute pipeline on destroyed device. - Tests with a valid no-op compute shader ` - ) - .params(u => u.combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost } = t.params; - const cShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('COMPUTE') }); - await t.executeAfterDestroy(() => { - t.device.createComputePipeline({ - layout: 'auto', - compute: { module: cShader, entryPoint: 'main' }, - }); - }, awaitLost); - }); +). +params((u) => u.combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost } = t.params; + const cShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('COMPUTE') }); + await t.executeAfterDestroy(() => { + t.device.createComputePipeline({ + layout: 'auto', + compute: { module: cShader, entryPoint: 'main' } + }); + }, awaitLost); +}); -g.test('createRenderPipeline') - .desc( - ` +g.test('createRenderPipeline'). +desc( + ` Tests creating render pipeline on destroyed device. - Tests with valid no-op vertex and fragment shaders ` - ) - .params(u => u.combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost } = t.params; - const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); - const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); - await t.executeAfterDestroy(() => { - t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module: vShader, entryPoint: 'main' }, - fragment: { - module: fShader, - entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, - }); - }, awaitLost); - }); +). +params((u) => u.combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost } = t.params; + const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); + const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); + await t.executeAfterDestroy(() => { + t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module: vShader, entryPoint: 'main' }, + fragment: { + module: fShader, + entryPoint: 'main', + targets: [{ format: 'rgba8unorm', writeMask: 0 }] + } + }); + }, awaitLost); +}); -g.test('createComputePipelineAsync') - .desc( - ` +g.test('createComputePipelineAsync'). +desc( + ` Tests creating a pipeline asynchronously while destroying the device and on a destroyed device - valid={true, false}, use an invalid or valid pipeline descriptor - awaitLost={true, false}, check results before/after waiting for the device lost promise ` - ) - .params(u => u.combine('valid', [true, false]).combine('awaitLost', [true, false])) - .fn(async t => { - const { valid, awaitLost } = t.params; - const cShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('COMPUTE') }); - const fn = () => - t.device.createComputePipelineAsync({ - layout: 'auto', - compute: { module: cShader, entryPoint: valid ? 'main' : 'does_not_exist' }, - }); +). +params((u) => u.combine('valid', [true, false]).combine('awaitLost', [true, false])). +fn(async (t) => { + const { valid, awaitLost } = t.params; + const cShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('COMPUTE') }); + const fn = () => + t.device.createComputePipelineAsync({ + layout: 'auto', + compute: { module: cShader, entryPoint: valid ? 'main' : 'does_not_exist' } + }); - // Kick off async creation - const p = fn(); + // Kick off async creation + const p = fn(); - // Track whether or not the device is lost. - let isLost = false; - void t.device.lost.then(() => { - isLost = true; - }); + // Track whether or not the device is lost. + let isLost = false; + void t.device.lost.then(() => { + isLost = true; + }); - if (valid) { - // The async creation should resolve successfully. - t.shouldResolve( - (async () => { - const pipeline = await p; - assert(pipeline instanceof GPUComputePipeline, 'Pipeline was not a GPUComputePipeline'); - })() - ); - } else { - // The async creation should resolve successfully if the device is lost. - // If the device is not lost, it should see a validation error. - // Note: this could be a race! - t.shouldResolve( - p.then( - pipeline => { - assert( - isLost, - 'Invalid async creation should "succeed" if the device is already lost.' - ); - - assert(pipeline instanceof GPUComputePipeline, 'Pipeline was not a GPUComputePipeline'); - }, - err => { - assert( - !isLost, - 'Invalid async creation should only fail if the device is not yet lost.' - ); - - assert(err instanceof GPUPipelineError, 'Error was not a GPUPipelineError'); - assert(err.reason === 'validation', 'Expected validation error'); - } - ) - ); - } - - // Destroy the device, and expect it to be lost. - t.expectDeviceLost('destroyed'); - t.device.destroy(); - if (awaitLost) { - const lostInfo = await t.device.lost; - t.expect(lostInfo.reason === 'destroyed'); - } - - // After device destroy, creation should still resolve successfully. + if (valid) { + // The async creation should resolve successfully. t.shouldResolve( (async () => { - const pipeline = await fn(); + const pipeline = await p; assert(pipeline instanceof GPUComputePipeline, 'Pipeline was not a GPUComputePipeline'); })() ); - }); + } else { + // The async creation should resolve successfully if the device is lost. + // If the device is not lost, it should see a validation error. + // Note: this could be a race! + t.shouldResolve( + p.then( + (pipeline) => { + assert( + isLost, + 'Invalid async creation should "succeed" if the device is already lost.' + ); + assert(pipeline instanceof GPUComputePipeline, 'Pipeline was not a GPUComputePipeline'); + }, + (err) => { + assert( + !isLost, + 'Invalid async creation should only fail if the device is not yet lost.' + ); + assert(err instanceof GPUPipelineError, 'Error was not a GPUPipelineError'); + assert(err.reason === 'validation', 'Expected validation error'); + } + ) + ); + } -g.test('createRenderPipelineAsync') - .desc( - ` + // Destroy the device, and expect it to be lost. + t.expectDeviceLost('destroyed'); + t.device.destroy(); + if (awaitLost) { + const lostInfo = await t.device.lost; + t.expect(lostInfo.reason === 'destroyed'); + } + + // After device destroy, creation should still resolve successfully. + t.shouldResolve( + (async () => { + const pipeline = await fn(); + assert(pipeline instanceof GPUComputePipeline, 'Pipeline was not a GPUComputePipeline'); + })() + ); +}); + +g.test('createRenderPipelineAsync'). +desc( + ` Tests creating a pipeline asynchronously while destroying the device and on a destroyed device - valid={true, false}, use an invalid or valid pipeline descriptor - awaitLost={true, false}, check results before/after waiting for the device lost promise ` - ) - .params(u => u.combine('valid', [true, false]).combine('awaitLost', [true, false])) - .fn(async t => { - const { valid, awaitLost } = t.params; - const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); - const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); - const fn = () => - t.device.createRenderPipelineAsync({ - layout: 'auto', - vertex: { module: vShader, entryPoint: 'main' }, - fragment: { - module: fShader, - entryPoint: valid ? 'main' : 'does_not_exist', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, - }); - - // Kick off async creation - const p = fn(); - - // Track whether or not the device is lost. - let isLost = false; - void t.device.lost.then(() => { - isLost = true; - }); - - if (valid) { - // The async creation should resolve successfully. - t.shouldResolve( - (async () => { - const pipeline = await p; - assert(pipeline instanceof GPURenderPipeline, 'Pipeline was not a GPURenderPipeline'); - })() - ); - } else { - // The async creation should resolve successfully if the device is lost. - // If the device is not lost, it should see a validation error. - // Note: this could be a race! - t.shouldResolve( - p.then( - pipeline => { - assert( - isLost, - 'Invalid async creation should "succeed" if the device is already lost.' - ); - - assert(pipeline instanceof GPURenderPipeline, 'Pipeline was not a GPURenderPipeline'); - }, - err => { - assert( - !isLost, - 'Invalid async creation should only fail if the device is not yet lost.' - ); - - assert(err instanceof GPUPipelineError, 'Error was not a GPUPipelineError'); - assert(err.reason === 'validation', 'Expected validation error'); - } - ) - ); +). +params((u) => u.combine('valid', [true, false]).combine('awaitLost', [true, false])). +fn(async (t) => { + const { valid, awaitLost } = t.params; + const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); + const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); + const fn = () => + t.device.createRenderPipelineAsync({ + layout: 'auto', + vertex: { module: vShader, entryPoint: 'main' }, + fragment: { + module: fShader, + entryPoint: valid ? 'main' : 'does_not_exist', + targets: [{ format: 'rgba8unorm', writeMask: 0 }] } + }); - // Destroy the device, and expect it to be lost. - t.expectDeviceLost('destroyed'); - t.device.destroy(); - if (awaitLost) { - const lostInfo = await t.device.lost; - t.expect(lostInfo.reason === 'destroyed'); - } + // Kick off async creation + const p = fn(); - // After device destroy, creation should still resolve successfully. + // Track whether or not the device is lost. + let isLost = false; + void t.device.lost.then(() => { + isLost = true; + }); + + if (valid) { + // The async creation should resolve successfully. t.shouldResolve( (async () => { - const pipeline = await fn(); + const pipeline = await p; assert(pipeline instanceof GPURenderPipeline, 'Pipeline was not a GPURenderPipeline'); })() ); - }); + } else { + // The async creation should resolve successfully if the device is lost. + // If the device is not lost, it should see a validation error. + // Note: this could be a race! + t.shouldResolve( + p.then( + (pipeline) => { + assert( + isLost, + 'Invalid async creation should "succeed" if the device is already lost.' + ); + assert(pipeline instanceof GPURenderPipeline, 'Pipeline was not a GPURenderPipeline'); + }, + (err) => { + assert( + !isLost, + 'Invalid async creation should only fail if the device is not yet lost.' + ); + assert(err instanceof GPUPipelineError, 'Error was not a GPUPipelineError'); + assert(err.reason === 'validation', 'Expected validation error'); + } + ) + ); + } -g.test('createCommandEncoder') - .desc( - ` + // Destroy the device, and expect it to be lost. + t.expectDeviceLost('destroyed'); + t.device.destroy(); + if (awaitLost) { + const lostInfo = await t.device.lost; + t.expect(lostInfo.reason === 'destroyed'); + } + + // After device destroy, creation should still resolve successfully. + t.shouldResolve( + (async () => { + const pipeline = await fn(); + assert(pipeline instanceof GPURenderPipeline, 'Pipeline was not a GPURenderPipeline'); + })() + ); +}); + +g.test('createCommandEncoder'). +desc( + ` Tests creating command encoders on destroyed device. ` - ) - .params(u => u.combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost } = t.params; - await t.executeAfterDestroy(() => { - t.device.createCommandEncoder(); - }, awaitLost); - }); +). +params((u) => u.combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost } = t.params; + await t.executeAfterDestroy(() => { + t.device.createCommandEncoder(); + }, awaitLost); +}); -g.test('createRenderBundleEncoder') - .desc( - ` +g.test('createRenderBundleEncoder'). +desc( + ` Tests creating render bundle encoders on destroyed device. - Tests various renderable texture color formats ` - ) - .params(u => - u.combine('format', kRenderableColorTextureFormats).combine('awaitLost', [true, false]) - ) - .fn(async t => { - const { awaitLost, format } = t.params; - await t.executeAfterDestroy(() => { - t.device.createRenderBundleEncoder({ colorFormats: [format] }); - }, awaitLost); - }); +). +params((u) => +u. +combine('format', kRenderableColorTextureFormats). -g.test('createQuerySet') - .desc( - ` +combine('awaitLost', [true, false]) +). +fn(async (t) => { + const { awaitLost, format } = t.params; + await t.executeAfterDestroy(() => { + t.device.createRenderBundleEncoder({ colorFormats: [format] }); + }, awaitLost); +}); + +g.test('createQuerySet'). +desc( + ` Tests creating query sets on destroyed device. - Tests various query set types ` - ) - .params(u => u.combine('type', kQueryTypes).combine('awaitLost', [true, false])) - .beforeAllSubcases(t => { - const { type } = t.params; - t.selectDeviceForQueryTypeOrSkipTestCase(type); - }) - .fn(async t => { - const { awaitLost, type } = t.params; - await t.executeAfterDestroy(() => { - t.device.createQuerySet({ type, count: 4 }); - }, awaitLost); - }); +). +params((u) => u.combine('type', kQueryTypes).combine('awaitLost', [true, false])). +beforeAllSubcases((t) => { + const { type } = t.params; + t.selectDeviceForQueryTypeOrSkipTestCase(type); +}). +fn(async (t) => { + const { awaitLost, type } = t.params; + await t.executeAfterDestroy(() => { + t.device.createQuerySet({ type, count: 4 }); + }, awaitLost); +}); -g.test('importExternalTexture') - .desc( - ` +g.test('importExternalTexture'). +desc( + ` Tests import external texture on destroyed device. Tests valid combinations of: - Various valid source type ` - ) - .params(u => - u.combine('sourceType', ['VideoElement', 'VideoFrame']).combine('awaitLost', [true, false]) - ) - .fn(async t => { - const { awaitLost, sourceType } = t.params; +). +params((u) => +u. +combine('sourceType', ['VideoElement', 'VideoFrame']). - const videoElement = getVideoElement(t, 'four-colors-vp9-bt601.webm'); - if (!('requestVideoFrameCallback' in videoElement)) { - t.skip('HTMLVideoElement.requestVideoFrameCallback is not supported'); - } +combine('awaitLost', [true, false]) +). +fn(async (t) => { + const { awaitLost, sourceType } = t.params; - let source; - await startPlayingAndWaitForVideo(videoElement, async () => { - source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; + const videoElement = getVideoElement(t, 'four-colors-vp9-bt601.webm'); + if (!('requestVideoFrameCallback' in videoElement)) { + t.skip('HTMLVideoElement.requestVideoFrameCallback is not supported'); + } - await t.executeAfterDestroy(() => { - t.device.createBindGroup({ - layout: t.device.createBindGroupLayout({ - entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, externalTexture: {} }], - }), - entries: [ - { - binding: 0, - resource: t.device.importExternalTexture({ - source: source, - }), - }, - ], - }); - }, awaitLost); - }); + let source; + await startPlayingAndWaitForVideo(videoElement, async () => { + source = + sourceType === 'VideoFrame' ? + await getVideoFrameFromVideoElement(t, videoElement) : + videoElement; + + await t.executeAfterDestroy(() => { + t.device.createBindGroup({ + layout: t.device.createBindGroupLayout({ + entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, externalTexture: {} }] + }), + entries: [ + { + binding: 0, + resource: t.device.importExternalTexture({ + + source: source + }) + }] + + }); + }, awaitLost); }); +}); -g.test('command,copyBufferToBuffer') - .desc( - ` +g.test('command,copyBufferToBuffer'). +desc( + ` Tests copyBufferToBuffer command with various uncompressed formats on destroyed device. ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const kBufferSize = 16; - const src = t.device.createBuffer({ - size: kBufferSize, - usage: GPUBufferUsage.COPY_SRC, - }); - const dst = t.device.createBuffer({ - size: kBufferSize, - usage: GPUBufferUsage.COPY_DST, - }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { - maker.encoder.copyBufferToBuffer(src, 0, dst, 0, kBufferSize); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const kBufferSize = 16; + const src = t.device.createBuffer({ + size: kBufferSize, + usage: GPUBufferUsage.COPY_SRC }); + const dst = t.device.createBuffer({ + size: kBufferSize, + usage: GPUBufferUsage.COPY_DST + }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + maker.encoder.copyBufferToBuffer(src, 0, dst, 0, kBufferSize); + return maker; + }); +}); -g.test('command,copyBufferToTexture') - .desc( - ` +g.test('command,copyBufferToTexture'). +desc( + ` Tests copyBufferToTexture command on destroyed device. - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const format = 'rgba32uint'; - const { - color: { bytes: bytesPerBlock }, - blockWidth, - blockHeight, - } = kTextureFormatInfo[format]; - const src = { - buffer: t.device.createBuffer({ - size: bytesPerBlock, - usage: GPUBufferUsage.COPY_SRC, - }), - }; - const dst = { - texture: t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: GPUTextureUsage.COPY_DST, - format, - }), - }; - const copySize = { width: blockWidth, height: blockHeight }; - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { - maker.encoder.copyBufferToTexture(src, dst, copySize); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const format = 'rgba32uint'; + const { + color: { bytes: bytesPerBlock }, + blockWidth, + blockHeight + } = kTextureFormatInfo[format]; + const src = { + buffer: t.device.createBuffer({ + size: bytesPerBlock, + usage: GPUBufferUsage.COPY_SRC + }) + }; + const dst = { + texture: t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: GPUTextureUsage.COPY_DST, + format + }) + }; + const copySize = { width: blockWidth, height: blockHeight }; + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + maker.encoder.copyBufferToTexture(src, dst, copySize); + return maker; }); +}); -g.test('command,copyTextureToBuffer') - .desc( - ` +g.test('command,copyTextureToBuffer'). +desc( + ` Tests copyTextureToBuffer command on destroyed device. - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const format = 'rgba32uint'; - const { - color: { bytes: bytesPerBlock }, - blockWidth, - blockHeight, - } = kTextureFormatInfo[format]; - const src = { - texture: t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: GPUTextureUsage.COPY_SRC, - format, - }), - }; - const dst = { - buffer: t.device.createBuffer({ - size: bytesPerBlock, - usage: GPUBufferUsage.COPY_DST, - }), - }; - const copySize = { width: blockWidth, height: blockHeight }; - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { - maker.encoder.copyTextureToBuffer(src, dst, copySize); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const format = 'rgba32uint'; + const { + color: { bytes: bytesPerBlock }, + blockWidth, + blockHeight + } = kTextureFormatInfo[format]; + const src = { + texture: t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: GPUTextureUsage.COPY_SRC, + format + }) + }; + const dst = { + buffer: t.device.createBuffer({ + size: bytesPerBlock, + usage: GPUBufferUsage.COPY_DST + }) + }; + const copySize = { width: blockWidth, height: blockHeight }; + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + maker.encoder.copyTextureToBuffer(src, dst, copySize); + return maker; }); +}); -g.test('command,copyTextureToTexture') - .desc( - ` +g.test('command,copyTextureToTexture'). +desc( + ` Tests copyTextureToTexture command on destroyed device. - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const format = 'rgba32uint'; - const { blockWidth, blockHeight } = kTextureFormatInfo[format]; - const src = { - texture: t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: GPUTextureUsage.COPY_SRC, - format, - }), - }; - const dst = { - texture: t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: GPUBufferUsage.COPY_DST, - format, - }), - }; - const copySize = { width: blockWidth, height: blockHeight }; - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { - maker.encoder.copyTextureToTexture(src, dst, copySize); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const format = 'rgba32uint'; + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + const src = { + texture: t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: GPUTextureUsage.COPY_SRC, + format + }) + }; + const dst = { + texture: t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: GPUBufferUsage.COPY_DST, + format + }) + }; + const copySize = { width: blockWidth, height: blockHeight }; + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + maker.encoder.copyTextureToTexture(src, dst, copySize); + return maker; }); +}); -g.test('command,clearBuffer') - .desc( - ` +g.test('command,clearBuffer'). +desc( + ` Tests encoding and finishing a clearBuffer command on destroyed device. - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const kBufferSize = 16; - const buffer = t.device.createBuffer({ - size: kBufferSize, - usage: GPUBufferUsage.COPY_SRC, - }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { - maker.encoder.clearBuffer(buffer, 0, kBufferSize); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const kBufferSize = 16; + const buffer = t.device.createBuffer({ + size: kBufferSize, + usage: GPUBufferUsage.COPY_SRC }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + maker.encoder.clearBuffer(buffer, 0, kBufferSize); + return maker; + }); +}); -g.test('command,writeTimestamp') - .desc( - ` +g.test('command,writeTimestamp'). +desc( + ` Tests encoding and finishing a writeTimestamp command on destroyed device. - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => - u - .combine('type', kQueryTypes) - .combine('stage', kCommandValidationStages) - .combine('awaitLost', [true, false]) - ) - .beforeAllSubcases(t => { - const { type } = t.params; +). +params((u) => +u. +combine('type', kQueryTypes). - // writeTimestamp is only available for devices that enable the 'timestamp-query' feature. - const queryTypes = ['timestamp']; - if (type !== 'timestamp') { - queryTypes.push(type); - } +combine('stage', kCommandValidationStages). +combine('awaitLost', [true, false]) +). +beforeAllSubcases((t) => { + const { type } = t.params; + + // writeTimestamp is only available for devices that enable the 'timestamp-query' feature. + const queryTypes = ['timestamp']; + if (type !== 'timestamp') { + queryTypes.push(type); + } + + t.selectDeviceForQueryTypeOrSkipTestCase(queryTypes); +}). +fn(async (t) => { + const { type, stage, awaitLost } = t.params; + const querySet = t.device.createQuerySet({ type, count: 2 }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + try { - t.selectDeviceForQueryTypeOrSkipTestCase(queryTypes); - }) - .fn(async t => { - const { type, stage, awaitLost } = t.params; - const querySet = t.device.createQuerySet({ type, count: 2 }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { maker.encoder.writeTimestamp(querySet, 0); - return maker; - }); + } catch (ex) { + t.skipIf(ex instanceof TypeError, 'writeTimestamp is actually not available'); + } + return maker; }); +}); -g.test('command,resolveQuerySet') - .desc( - ` +g.test('command,resolveQuerySet'). +desc( + ` Tests encoding and finishing a resolveQuerySet command on destroyed device. - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const kQueryCount = 2; - const querySet = t.createQuerySetWithState('valid'); - const destination = t.createBufferWithState('valid', { - size: kQueryCount * 8, - usage: GPUBufferUsage.QUERY_RESOLVE, - }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', maker => { - maker.encoder.resolveQuerySet(querySet, 0, 1, destination, 0); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const kQueryCount = 2; + const querySet = t.createQuerySetWithState('valid'); + const destination = t.createBufferWithState('valid', { + size: kQueryCount * 8, + usage: GPUBufferUsage.QUERY_RESOLVE }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'non-pass', (maker) => { + maker.encoder.resolveQuerySet(querySet, 0, 1, destination, 0); + return maker; + }); +}); -g.test('command,computePass,dispatch') - .desc( - ` +g.test('command,computePass,dispatch'). +desc( + ` Tests encoding and dispatching a simple valid compute pass on destroyed device. - Binds valid pipeline and bindgroups, then dispatches - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const cShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('COMPUTE') }); - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { module: cShader, entryPoint: 'main' }, - }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'compute pass', maker => { - maker.encoder.setPipeline(pipeline); - maker.encoder.dispatchWorkgroups(1); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const cShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('COMPUTE') }); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { module: cShader, entryPoint: 'main' } }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'compute pass', (maker) => { + maker.encoder.setPipeline(pipeline); + maker.encoder.dispatchWorkgroups(1); + return maker; + }); +}); -g.test('command,renderPass,draw') - .desc( - ` +g.test('command,renderPass,draw'). +desc( + ` Tests encoding and finishing a simple valid render pass on destroyed device. - Binds valid pipeline and bindgroups, then draws - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); - const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module: vShader, entryPoint: 'main' }, - fragment: { - module: fShader, - entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, - }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'render pass', maker => { - maker.encoder.setPipeline(pipeline); - maker.encoder.draw(0); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); + const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module: vShader, entryPoint: 'main' }, + fragment: { + module: fShader, + entryPoint: 'main', + targets: [{ format: 'rgba8unorm', writeMask: 0 }] + } }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'render pass', (maker) => { + maker.encoder.setPipeline(pipeline); + maker.encoder.draw(0); + return maker; + }); +}); -g.test('command,renderPass,renderBundle') - .desc( - ` +g.test('command,renderPass,renderBundle'). +desc( + ` Tests encoding and drawing a render pass including a render bundle on destroyed device. - Binds valid pipeline and bindgroups, executes render bundle, then draws - Tests finishing encoding on destroyed device - Tests submitting command on destroyed device ` - ) - .params(u => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])) - .fn(async t => { - const { stage, awaitLost } = t.params; - const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); - const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { module: vShader, entryPoint: 'main' }, - fragment: { - module: fShader, - entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], - }, - }); - await t.executeCommandsAfterDestroy(stage, awaitLost, 'render bundle', maker => { - maker.encoder.setPipeline(pipeline); - maker.encoder.draw(0); - return maker; - }); +). +params((u) => u.combine('stage', kCommandValidationStages).combine('awaitLost', [true, false])). +fn(async (t) => { + const { stage, awaitLost } = t.params; + const vShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('VERTEX') }); + const fShader = t.device.createShaderModule({ code: t.getNoOpShaderCode('FRAGMENT') }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { module: vShader, entryPoint: 'main' }, + fragment: { + module: fShader, + entryPoint: 'main', + targets: [{ format: 'rgba8unorm', writeMask: 0 }] + } }); + await t.executeCommandsAfterDestroy(stage, awaitLost, 'render bundle', (maker) => { + maker.encoder.setPipeline(pipeline); + maker.encoder.draw(0); + return maker; + }); +}); -g.test('queue,writeBuffer') - .desc( - ` +g.test('queue,writeBuffer'). +desc( + ` Tests writeBuffer on queue on destroyed device. ` - ) - .params(u => u.combine('numElements', [4, 8, 16]).combine('awaitLost', [true, false])) - .fn(async t => { - const { numElements, awaitLost } = t.params; - const buffer = t.device.createBuffer({ - size: numElements, - usage: GPUBufferUsage.COPY_DST, - }); - const data = new Uint8Array(numElements); - await t.executeAfterDestroy(() => { - t.device.queue.writeBuffer(buffer, 0, data); - }, awaitLost); +). +params((u) => u.combine('numElements', [4, 8, 16]).combine('awaitLost', [true, false])). +fn(async (t) => { + const { numElements, awaitLost } = t.params; + const buffer = t.device.createBuffer({ + size: numElements, + usage: GPUBufferUsage.COPY_DST }); + const data = new Uint8Array(numElements); + await t.executeAfterDestroy(() => { + t.device.queue.writeBuffer(buffer, 0, data); + }, awaitLost); +}); -g.test('queue,writeTexture,2d,uncompressed_format') - .desc( - ` +g.test('queue,writeTexture,2d,uncompressed_format'). +desc( + ` Tests writeTexture on queue on destroyed device with uncompressed formats. ` - ) - .params(u => u.combine('format', kRegularTextureFormats).combine('awaitLost', [true, false])) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(async t => { - const { format, awaitLost } = t.params; - const { - blockWidth, - blockHeight, - color: { bytes: bytesPerBlock }, - } = kTextureFormatInfo[format]; - const data = new Uint8Array(bytesPerBlock); - const texture = t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: GPUTextureUsage.COPY_DST, - format, - }); - await t.executeAfterDestroy(() => { - t.device.queue.writeTexture( - { texture }, - data, - {}, - { width: blockWidth, height: blockHeight } - ); - }, awaitLost); +). +params((u) => u.combine('format', kRegularTextureFormats).combine('awaitLost', [true, false])). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn(async (t) => { + const { format, awaitLost } = t.params; + const { + blockWidth, + blockHeight, + color: { bytes: bytesPerBlock } + } = kTextureFormatInfo[format]; + const data = new Uint8Array(bytesPerBlock); + const texture = t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: GPUTextureUsage.COPY_DST, + format }); + await t.executeAfterDestroy(() => { + t.device.queue.writeTexture( + { texture }, + data, + {}, + { width: blockWidth, height: blockHeight } + ); + }, awaitLost); +}); -g.test('queue,writeTexture,2d,compressed_format') - .desc( - ` +g.test('queue,writeTexture,2d,compressed_format'). +desc( + ` Tests writeTexture on queue on destroyed device with compressed formats. ` - ) - .params(u => u.combine('format', kCompressedTextureFormats).combine('awaitLost', [true, false])) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); - }) - .fn(async t => { - const { format, awaitLost } = t.params; - const { - blockWidth, - blockHeight, - color: { bytes: bytesPerBlock }, - } = kTextureFormatInfo[format]; - const data = new Uint8Array(bytesPerBlock); - const texture = t.device.createTexture({ - size: { width: blockWidth, height: blockHeight }, - usage: GPUTextureUsage.COPY_DST, - format, - }); - await t.executeAfterDestroy(() => { - t.device.queue.writeTexture( - { texture }, - data, - {}, - { width: blockWidth, height: blockHeight } - ); - }, awaitLost); - }); +). +params((u) => +u. +combine('format', kCompressedTextureFormats). -g.test('queue,copyExternalImageToTexture,canvas') - .desc( - ` +combine('awaitLost', [true, false]) +). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase(kTextureFormatInfo[format].feature); +}). +fn(async (t) => { + const { format, awaitLost } = t.params; + const { + blockWidth, + blockHeight, + color: { bytes: bytesPerBlock } + } = kTextureFormatInfo[format]; + const data = new Uint8Array(bytesPerBlock); + const texture = t.device.createTexture({ + size: { width: blockWidth, height: blockHeight }, + usage: GPUTextureUsage.COPY_DST, + format + }); + await t.executeAfterDestroy(() => { + t.device.queue.writeTexture( + { texture }, + data, + {}, + { width: blockWidth, height: blockHeight } + ); + }, awaitLost); +}); + +g.test('queue,copyExternalImageToTexture,canvas'). +desc( + ` Tests copyExternalImageToTexture from canvas on queue on destroyed device. ` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .combine('contextType', kValidCanvasContextIds) - .combine('awaitLost', [true, false]) - ) - .fn(async t => { - const { canvasType, contextType, awaitLost } = t.params; - const canvas = createCanvas(t, canvasType, 1, 1); - const texture = t.device.createTexture({ - size: { width: 1, height: 1 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST, - }); +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +combine('contextType', kValidCanvasContextIds). - const ctx = canvas.getContext(contextType); - if (ctx === null) { - t.skip('Failed to get context for canvas element'); - return; - } - t.tryTrackForCleanup(ctx); - - await t.executeAfterDestroy(() => { - t.device.queue.copyExternalImageToTexture( - { source: canvas }, - { texture }, - { width: 1, height: 1 } - ); - }, awaitLost); +combine('awaitLost', [true, false]) +). +fn(async (t) => { + const { canvasType, contextType, awaitLost } = t.params; + const canvas = createCanvas(t, canvasType, 1, 1); + const texture = t.device.createTexture({ + size: { width: 1, height: 1 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST }); -g.test('queue,copyExternalImageToTexture,imageBitmap') - .desc( - ` + const ctx = canvas.getContext(contextType); + if (ctx === null) { + t.skip('Failed to get context for canvas element'); + return; + } + t.tryTrackForCleanup(ctx); + + await t.executeAfterDestroy(() => { + t.device.queue.copyExternalImageToTexture( + { source: canvas }, + { texture }, + { width: 1, height: 1 } + ); + }, awaitLost); +}); + +g.test('queue,copyExternalImageToTexture,imageBitmap'). +desc( + ` Tests copyExternalImageToTexture from canvas on queue on destroyed device. ` - ) - .params(u => u.combine('awaitLost', [true, false])) - .fn(async t => { - const { awaitLost } = t.params; - if (typeof createImageBitmap === 'undefined') { - t.skip('Creating ImageBitmaps is not supported.'); - } - const imageBitmap = await createImageBitmap(new ImageData(new Uint8ClampedArray(4), 1, 1)); +). +params((u) => u.combine('awaitLost', [true, false])). +fn(async (t) => { + const { awaitLost } = t.params; + if (typeof createImageBitmap === 'undefined') { + t.skip('Creating ImageBitmaps is not supported.'); + } + const imageBitmap = await createImageBitmap(new ImageData(new Uint8ClampedArray(4), 1, 1)); - const texture = t.device.createTexture({ - size: { width: 1, height: 1 }, - format: 'bgra8unorm', - usage: GPUTextureUsage.COPY_DST, - }); - - await t.executeAfterDestroy(() => { - t.device.queue.copyExternalImageToTexture( - { source: imageBitmap }, - { texture }, - { width: 1, height: 1 } - ); - }, awaitLost); + const texture = t.device.createTexture({ + size: { width: 1, height: 1 }, + format: 'bgra8unorm', + usage: GPUTextureUsage.COPY_DST }); + + await t.executeAfterDestroy(() => { + t.device.queue.copyExternalImageToTexture( + { source: imageBitmap }, + { texture }, + { width: 1, height: 1 } + ); + }, awaitLost); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/bgra8unorm_storage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/bgra8unorm_storage.spec.js index 7dcb15fb23a..57e1c5a23e5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/bgra8unorm_storage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/bgra8unorm_storage.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for capabilities added by bgra8unorm-storage flag. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { assert } from '../../../../common/util/util.js'; import { kTextureUsages } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; @@ -11,7 +10,10 @@ import { kAllCanvasTypes, createCanvas } from '../../../util/create_elements.js' import { ValidationTest } from '../validation_test.js'; class BGRA8UnormStorageValidationTests extends ValidationTest { - testCreateShaderModuleWithBGRA8UnormStorage(shaderType, success) { + testCreateShaderModuleWithBGRA8UnormStorage( + shaderType, + success) + { let shaderDeclaration = ''; switch (shaderType) { case 'fragment': @@ -21,7 +23,6 @@ class BGRA8UnormStorageValidationTests extends ValidationTest { shaderDeclaration = '@compute @workgroup_size(1)'; break; } - this.expectValidationError(() => { this.device.createShaderModule({ code: ` @@ -29,7 +30,7 @@ class BGRA8UnormStorageValidationTests extends ValidationTest { ${shaderDeclaration} fn main() { textureStore(outputTex, vec2(), vec4()); } - `, + ` }); }, !success); } @@ -37,168 +38,168 @@ class BGRA8UnormStorageValidationTests extends ValidationTest { export const g = makeTestGroup(BGRA8UnormStorageValidationTests); -g.test('create_texture') - .desc( - ` +g.test('create_texture'). +desc( + ` Test that it is valid to create bgra8unorm texture with STORAGE usage iff the feature bgra8unorm-storage is enabled. Note, the createTexture test suite covers the validation cases where this feature is not enabled, which are skipped here. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); - }) - .fn(t => { - const descriptor = { - size: [1, 1, 1], - format: 'bgra8unorm', - usage: GPUConst.TextureUsage.STORAGE, - }; - t.device.createTexture(descriptor); - }); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); +}). +fn((t) => { + const descriptor = { + size: [1, 1, 1], + format: 'bgra8unorm', + usage: GPUConst.TextureUsage.STORAGE + }; + t.device.createTexture(descriptor); +}); -g.test('create_bind_group_layout') - .desc( - ` +g.test('create_bind_group_layout'). +desc( + ` Test that it is valid to create GPUBindGroupLayout that uses bgra8unorm as storage texture format iff the feature bgra8unorm-storage is enabled. Note, the createBindGroupLayout test suite covers the validation cases where this feature is not enabled, which are skipped here. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); - }) - .fn(t => { - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - storageTexture: { format: 'bgra8unorm' }, - }, - ], - }); - }); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); +}). +fn((t) => { + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + storageTexture: { format: 'bgra8unorm' } + }] -g.test('create_shader_module_with_bgra8unorm_storage') - .desc( - ` + }); +}); + +g.test('create_shader_module_with_bgra8unorm_storage'). +desc( + ` Test that it is valid to declare the format of a storage texture as bgra8unorm in a shader module if the feature bgra8unorm-storage is enabled. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); - }) - .params(u => u.combine('shaderType', ['fragment', 'compute'])) - .fn(t => { - const { shaderType } = t.params; +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); +}). +params((u) => u.combine('shaderType', ['fragment', 'compute'])). +fn((t) => { + const { shaderType } = t.params; - t.testCreateShaderModuleWithBGRA8UnormStorage(shaderType, true); - }); + t.testCreateShaderModuleWithBGRA8UnormStorage(shaderType, true); +}); -g.test('create_shader_module_without_bgra8unorm_storage') - .desc( - ` +g.test('create_shader_module_without_bgra8unorm_storage'). +desc( + ` Test that it is invalid to declare the format of a storage texture as bgra8unorm in a shader module if the feature bgra8unorm-storage is not enabled. ` - ) - .params(u => u.combine('shaderType', ['fragment', 'compute'])) - .fn(t => { - const { shaderType } = t.params; +). +params((u) => u.combine('shaderType', ['fragment', 'compute'])). +fn((t) => { + const { shaderType } = t.params; - t.testCreateShaderModuleWithBGRA8UnormStorage(shaderType, false); - }); + t.testCreateShaderModuleWithBGRA8UnormStorage(shaderType, false); +}); -g.test('configure_storage_usage_on_canvas_context_without_bgra8unorm_storage') - .desc( - ` +g.test('configure_storage_usage_on_canvas_context_without_bgra8unorm_storage'). +desc( + ` Test that it is invalid to configure a GPUCanvasContext to 'GPUStorageBinding' usage with 'bgra8unorm' format on a GPUDevice with 'bgra8unorm-storage' disabled. ` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .beginSubcases() - .expand('usage', p => { - const usageSet = new Set(); - for (const usage0 of kTextureUsages) { - for (const usage1 of kTextureUsages) { - usageSet.add(usage0 | usage1); - } - } - return usageSet; - }) - ) - .fn(t => { - const { canvasType, usage } = t.params; - const canvas = createCanvas(t, canvasType, 1, 1); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - - const requiredStorageBinding = !!(usage & GPUTextureUsage.STORAGE_BINDING); - t.expectValidationError(() => { - ctx.configure({ - device: t.device, - format: 'bgra8unorm', - usage, - }); - }, requiredStorageBinding); - }); - -g.test('configure_storage_usage_on_canvas_context_with_bgra8unorm_storage') - .desc( - ` -Test that it is valid to configure a GPUCanvasContext with GPUStorageBinding usage and a GPUDevice -with 'bgra8unorm-storage' enabled. -` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); - }) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .beginSubcases() - .expand('usage', p => { - const usageSet = new Set(); - for (const usage of kTextureUsages) { - usageSet.add(usage | GPUConst.TextureUsage.STORAGE_BINDING); - } - return usageSet; - }) - ) - .fn(t => { - const { canvasType, usage } = t.params; - const canvas = createCanvas(t, canvasType, 1, 1); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +beginSubcases(). +expand('usage', () => { + const usageSet = new Set(); + for (const usage0 of kTextureUsages) { + for (const usage1 of kTextureUsages) { + usageSet.add(usage0 | usage1); + } + } + return usageSet; +}) +). +fn((t) => { + const { canvasType, usage } = t.params; + const canvas = createCanvas(t, canvasType, 1, 1); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + const requiredStorageBinding = !!(usage & GPUTextureUsage.STORAGE_BINDING); + t.expectValidationError(() => { ctx.configure({ device: t.device, format: 'bgra8unorm', - usage, + usage }); + }, requiredStorageBinding); +}); - const currentTexture = ctx.getCurrentTexture(); - const bindGroupLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - storageTexture: { access: 'write-only', format: currentTexture.format }, - }, - ], - }); - t.device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: currentTexture.createView(), - }, - ], - }); +g.test('configure_storage_usage_on_canvas_context_with_bgra8unorm_storage'). +desc( + ` +Test that it is valid to configure a GPUCanvasContext with GPUStorageBinding usage and a GPUDevice +with 'bgra8unorm-storage' enabled. +` +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('bgra8unorm-storage'); +}). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +beginSubcases(). +expand('usage', () => { + const usageSet = new Set(); + for (const usage of kTextureUsages) { + usageSet.add(usage | GPUConst.TextureUsage.STORAGE_BINDING); + } + return usageSet; +}) +). +fn((t) => { + const { canvasType, usage } = t.params; + const canvas = createCanvas(t, canvasType, 1, 1); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + + ctx.configure({ + device: t.device, + format: 'bgra8unorm', + usage }); + + const currentTexture = ctx.getCurrentTexture(); + const bindGroupLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + storageTexture: { access: 'write-only', format: currentTexture.format } + }] + + }); + t.device.createBindGroup({ + layout: bindGroupLayout, + entries: [ + { + binding: 0, + resource: currentTexture.createView() + }] + + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/destroy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/destroy.spec.js index 056b3529385..7f17d036838 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/destroy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/destroy.spec.js @@ -1,137 +1,139 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Destroying a texture more than once is allowed. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kTextureAspects } from '../../../capability_info.js'; import { kTextureFormatInfo } from '../../../format_info.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('base') - .desc(`Test that it is valid to destroy a texture.`) - .fn(t => { - const texture = t.getSampledTexture(); - texture.destroy(); +g.test('base'). +desc(`Test that it is valid to destroy a texture.`). +fn((t) => { + const texture = t.getSampledTexture(); + texture.destroy(); +}); + +g.test('twice'). +desc(`Test that it is valid to destroy a destroyed texture.`). +fn((t) => { + const texture = t.getSampledTexture(); + texture.destroy(); + texture.destroy(); +}); + +g.test('invalid_texture'). +desc('Test that invalid textures may be destroyed without generating validation errors.'). +fn(async (t) => { + t.device.pushErrorScope('validation'); + + const invalidTexture = t.device.createTexture({ + size: [t.device.limits.maxTextureDimension2D + 1, 1, 1], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING }); -g.test('twice') - .desc(`Test that it is valid to destroy a destroyed texture.`) - .fn(t => { - const texture = t.getSampledTexture(); - texture.destroy(); - texture.destroy(); - }); + // Expect error because it's invalid. + const error = await t.device.popErrorScope(); + t.expect(!!error); -g.test('invalid_texture') - .desc('Test that invalid textures may be destroyed without generating validation errors.') - .fn(async t => { - t.device.pushErrorScope('validation'); + // This line should not generate an error + invalidTexture.destroy(); +}); - const invalidTexture = t.device.createTexture({ - size: [t.device.limits.maxTextureDimension2D + 1, 1, 1], - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, - }); - - // Expect error because it's invalid. - const error = await t.device.popErrorScope(); - t.expect(!!error); - - // This line should not generate an error - invalidTexture.destroy(); - }); - -g.test('submit_a_destroyed_texture_as_attachment') - .desc( - ` +g.test('submit_a_destroyed_texture_as_attachment'). +desc( + ` Test that it is invalid to submit with a texture as {color, depth, stencil, depth-stencil} attachment that was destroyed {before, after} encoding finishes. ` - ) - .params(u => - u // - .combine('depthStencilTextureAspect', kTextureAspects) - .combine('colorTextureState', ['valid', 'destroyedBeforeEncode', 'destroyedAfterEncode']) - .combine('depthStencilTextureState', [ - 'valid', - 'destroyedBeforeEncode', - 'destroyedAfterEncode', - ]) - ) - .fn(t => { - const { colorTextureState, depthStencilTextureAspect, depthStencilTextureState } = t.params; +). +params((u) => +u // +.combine('depthStencilTextureAspect', kTextureAspects). +combine('colorTextureState', [ +'valid', +'destroyedBeforeEncode', +'destroyedAfterEncode'] +). +combine('depthStencilTextureState', [ +'valid', +'destroyedBeforeEncode', +'destroyedAfterEncode'] +) +). +fn((t) => { + const { colorTextureState, depthStencilTextureAspect, depthStencilTextureState } = t.params; - const isSubmitSuccess = colorTextureState === 'valid' && depthStencilTextureState === 'valid'; + const isSubmitSuccess = colorTextureState === 'valid' && depthStencilTextureState === 'valid'; - const colorTextureFormat = 'rgba32float'; - const depthStencilTextureFormat = - depthStencilTextureAspect === 'all' - ? 'depth24plus-stencil8' - : depthStencilTextureAspect === 'depth-only' - ? 'depth32float' - : 'stencil8'; + const colorTextureFormat = 'rgba32float'; + const depthStencilTextureFormat = + depthStencilTextureAspect === 'all' ? + 'depth24plus-stencil8' : + depthStencilTextureAspect === 'depth-only' ? + 'depth32float' : + 'stencil8'; - const colorTextureDesc = { - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: colorTextureFormat, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }; + const colorTextureDesc = { + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: colorTextureFormat, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT + }; - const depthStencilTextureDesc = { - size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: depthStencilTextureFormat, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }; + const depthStencilTextureDesc = { + size: { width: 16, height: 16, depthOrArrayLayers: 1 }, + format: depthStencilTextureFormat, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT + }; - const colorTexture = t.device.createTexture(colorTextureDesc); - const depthStencilTexture = t.device.createTexture(depthStencilTextureDesc); + const colorTexture = t.device.createTexture(colorTextureDesc); + const depthStencilTexture = t.device.createTexture(depthStencilTextureDesc); - if (colorTextureState === 'destroyedBeforeEncode') { - colorTexture.destroy(); - } - if (depthStencilTextureState === 'destroyedBeforeEncode') { - depthStencilTexture.destroy(); - } + if (colorTextureState === 'destroyedBeforeEncode') { + colorTexture.destroy(); + } + if (depthStencilTextureState === 'destroyedBeforeEncode') { + depthStencilTexture.destroy(); + } - const commandEncoder = t.device.createCommandEncoder(); - const depthStencilAttachment = { - view: depthStencilTexture.createView({ aspect: depthStencilTextureAspect }), - }; - if (kTextureFormatInfo[depthStencilTextureFormat].depth) { - depthStencilAttachment.depthClearValue = 0; - depthStencilAttachment.depthLoadOp = 'clear'; - depthStencilAttachment.depthStoreOp = 'discard'; - } - if (kTextureFormatInfo[depthStencilTextureFormat].stencil) { - depthStencilAttachment.stencilClearValue = 0; - depthStencilAttachment.stencilLoadOp = 'clear'; - depthStencilAttachment.stencilStoreOp = 'discard'; - } - const renderPass = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: colorTexture.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], + const commandEncoder = t.device.createCommandEncoder(); + const depthStencilAttachment = { + view: depthStencilTexture.createView({ aspect: depthStencilTextureAspect }) + }; + if (kTextureFormatInfo[depthStencilTextureFormat].depth) { + depthStencilAttachment.depthClearValue = 0; + depthStencilAttachment.depthLoadOp = 'clear'; + depthStencilAttachment.depthStoreOp = 'discard'; + } + if (kTextureFormatInfo[depthStencilTextureFormat].stencil) { + depthStencilAttachment.stencilClearValue = 0; + depthStencilAttachment.stencilLoadOp = 'clear'; + depthStencilAttachment.stencilStoreOp = 'discard'; + } + const renderPass = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: colorTexture.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }], - depthStencilAttachment, - }); - renderPass.end(); - - const cmd = commandEncoder.finish(); - - if (colorTextureState === 'destroyedAfterEncode') { - colorTexture.destroy(); - } - if (depthStencilTextureState === 'destroyedAfterEncode') { - depthStencilTexture.destroy(); - } - - t.expectValidationError(() => t.queue.submit([cmd]), !isSubmitSuccess); + depthStencilAttachment }); + renderPass.end(); + + const cmd = commandEncoder.finish(); + + if (colorTextureState === 'destroyedAfterEncode') { + colorTexture.destroy(); + } + if (depthStencilTextureState === 'destroyedAfterEncode') { + depthStencilTexture.destroy(); + } + + t.expectValidationError(() => t.queue.submit([cmd]), !isSubmitSuccess); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/float32_filterable.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/float32_filterable.spec.js index 1cf5f0a95ea..05575673f92 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/float32_filterable.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/float32_filterable.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for capabilities added by float32-filterable flag. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kTextureSampleTypes } from '../../../capability_info.js'; import { ValidationTest } from '../validation_test.js'; @@ -11,50 +10,49 @@ export const g = makeTestGroup(ValidationTest); const kFloat32Formats = ['r32float', 'rg32float', 'rgba32float']; -g.test('create_bind_group') - .desc( - ` +g.test('create_bind_group'). +desc( + ` Test that it is valid to bind a float32 texture format to a 'float' sampled texture iff float32-filterable is enabled. ` - ) - .params(u => - u - .combine('enabled', [true, false]) - .beginSubcases() - .combine('format', kFloat32Formats) - .combine('sampleType', kTextureSampleTypes) - ) - .beforeAllSubcases(t => { - if (t.params.enabled) { - t.selectDeviceOrSkipTestCase('float32-filterable'); - } - }) - .fn(t => { - const { enabled, format, sampleType } = t.params; - const layout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - texture: { sampleType }, - }, - ], - }); - const textureDesc = { - size: { width: 4, height: 4 }, - format, - usage: GPUTextureUsage.TEXTURE_BINDING, - }; - const shouldError = !( - (enabled && sampleType === 'float') || - sampleType === 'unfilterable-float' - ); +). +params((u) => +u. +combine('enabled', [true, false]). +beginSubcases(). +combine('format', kFloat32Formats). +combine('sampleType', kTextureSampleTypes) +). +beforeAllSubcases((t) => { + if (t.params.enabled) { + t.selectDeviceOrSkipTestCase('float32-filterable'); + } +}). +fn((t) => { + const { enabled, format, sampleType } = t.params; + const layout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + texture: { sampleType } + }] - t.expectValidationError(() => { - t.device.createBindGroup({ - entries: [{ binding: 0, resource: t.device.createTexture(textureDesc).createView() }], - layout, - }); - }, shouldError); }); + const textureDesc = { + size: { width: 4, height: 4 }, + format, + usage: GPUTextureUsage.TEXTURE_BINDING + }; + const shouldError = !( + enabled && sampleType === 'float' || + sampleType === 'unfilterable-float'); + + t.expectValidationError(() => { + t.device.createBindGroup({ + entries: [{ binding: 0, resource: t.device.createTexture(textureDesc).createView() }], + layout + }); + }, shouldError); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/rg11b10ufloat_renderable.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/rg11b10ufloat_renderable.spec.js index 174a2b1acbf..29e796d6185 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/rg11b10ufloat_renderable.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/texture/rg11b10ufloat_renderable.spec.js @@ -1,150 +1,149 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for capabilities added by rg11b10ufloat-renderable flag. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUConst } from '../../../constants.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); -g.test('create_texture') - .desc( - ` +g.test('create_texture'). +desc( + ` Test that it is valid to create rg11b10ufloat texture with RENDER_ATTACHMENT usage and/or sampleCount > 1, iff rg11b10ufloat-renderable feature is enabled. Note, the createTexture tests cover these validation cases where this feature is not enabled. ` - ) - .params(u => u.combine('sampleCount', [1, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); - }) - .fn(t => { - const { sampleCount } = t.params; - const descriptor = { - size: [1, 1, 1], - format: 'rg11b10ufloat', - sampleCount, - usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, - }; - t.device.createTexture(descriptor); - }); +). +params((u) => u.combine('sampleCount', [1, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); +}). +fn((t) => { + const { sampleCount } = t.params; + const descriptor = { + size: [1, 1, 1], + format: 'rg11b10ufloat', + sampleCount, + usage: GPUConst.TextureUsage.RENDER_ATTACHMENT + }; + t.device.createTexture(descriptor); +}); -g.test('begin_render_pass_single_sampled') - .desc( - ` +g.test('begin_render_pass_single_sampled'). +desc( + ` Test that it is valid to begin render pass with rg11b10ufloat texture format iff rg11b10ufloat-renderable feature is enabled. Single sampled case. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); - }) - .fn(t => { - const texture = t.device.createTexture({ - size: [1, 1, 1], - format: 'rg11b10ufloat', - sampleCount: 1, - usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, - }); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: texture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.end(); - encoder.finish(); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); +}). +fn((t) => { + const texture = t.device.createTexture({ + size: [1, 1, 1], + format: 'rg11b10ufloat', + sampleCount: 1, + usage: GPUConst.TextureUsage.RENDER_ATTACHMENT }); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: texture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] -g.test('begin_render_pass_msaa_and_resolve') - .desc( - ` + }); + pass.end(); + encoder.finish(); +}); + +g.test('begin_render_pass_msaa_and_resolve'). +desc( + ` Test that it is valid to begin render pass with rg11b10ufloat texture format iff rg11b10ufloat-renderable feature is enabled. MSAA and resolve case. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); - }) - .fn(t => { - const renderTexture = t.device.createTexture({ - size: [1, 1, 1], - format: 'rg11b10ufloat', - sampleCount: 4, - usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, - }); - const resolveTexture = t.device.createTexture({ - size: [1, 1, 1], - format: 'rg11b10ufloat', - sampleCount: 1, - usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, - }); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTexture.createView(), - resolveTarget: resolveTexture.createView(), - clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.end(); - encoder.finish(); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); +}). +fn((t) => { + const renderTexture = t.device.createTexture({ + size: [1, 1, 1], + format: 'rg11b10ufloat', + sampleCount: 4, + usage: GPUConst.TextureUsage.RENDER_ATTACHMENT }); + const resolveTexture = t.device.createTexture({ + size: [1, 1, 1], + format: 'rg11b10ufloat', + sampleCount: 1, + usage: GPUConst.TextureUsage.RENDER_ATTACHMENT + }); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTexture.createView(), + resolveTarget: resolveTexture.createView(), + clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] -g.test('begin_render_bundle_encoder') - .desc( - ` + }); + pass.end(); + encoder.finish(); +}); + +g.test('begin_render_bundle_encoder'). +desc( + ` Test that it is valid to begin render bundle encoder with rg11b10ufloat texture format iff rg11b10ufloat-renderable feature is enabled. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); - }) - .fn(t => { - t.device.createRenderBundleEncoder({ - colorFormats: ['rg11b10ufloat'], - }); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); +}). +fn((t) => { + t.device.createRenderBundleEncoder({ + colorFormats: ['rg11b10ufloat'] }); +}); -g.test('create_render_pipeline') - .desc( - ` +g.test('create_render_pipeline'). +desc( + ` Test that it is valid to create render pipeline with rg11b10ufloat texture format in descriptor.fragment.targets iff rg11b10ufloat-renderable feature is enabled. ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); - }) - .fn(t => { - t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module: t.device.createShaderModule({ - code: t.getNoOpShaderCode('VERTEX'), - }), - entryPoint: 'main', - }, - fragment: { - module: t.device.createShaderModule({ - code: t.getNoOpShaderCode('FRAGMENT'), - }), - entryPoint: 'main', - targets: [{ format: 'rg11b10ufloat', writeMask: 0 }], - }, - primitive: { topology: 'triangle-list' }, - }); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('rg11b10ufloat-renderable'); +}). +fn((t) => { + t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: t.device.createShaderModule({ + code: t.getNoOpShaderCode('VERTEX') + }), + entryPoint: 'main' + }, + fragment: { + module: t.device.createShaderModule({ + code: t.getNoOpShaderCode('FRAGMENT') + }), + entryPoint: 'main', + targets: [{ format: 'rg11b10ufloat', writeMask: 0 }] + }, + primitive: { topology: 'triangle-list' } }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/validation_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/validation_test.js index b7cbdf04063..f602556d0a7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/validation_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/api/validation/validation_test.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kMaxQueryCount } from '../../capability_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { + kMaxQueryCount } from + +'../../capability_info.js'; import { GPUTest } from '../../gpu_test.js'; /** @@ -11,16 +14,19 @@ export class ValidationTest extends GPUTest { * Create a GPUTexture in the specified state. * A `descriptor` may optionally be passed, which is used when `state` is not `'invalid'`. */ - createTextureWithState(state, descriptor) { + createTextureWithState( + state, + descriptor) + { descriptor = descriptor ?? { size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format: 'rgba8unorm', usage: - GPUTextureUsage.COPY_SRC | - GPUTextureUsage.COPY_DST | - GPUTextureUsage.TEXTURE_BINDING | - GPUTextureUsage.STORAGE_BINDING | - GPUTextureUsage.RENDER_ATTACHMENT, + GPUTextureUsage.COPY_SRC | + GPUTextureUsage.COPY_DST | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.STORAGE_BINDING | + GPUTextureUsage.RENDER_ATTACHMENT }; switch (state) { @@ -28,11 +34,11 @@ export class ValidationTest extends GPUTest { return this.trackForCleanup(this.device.createTexture(descriptor)); case 'invalid': return this.getErrorTexture(); - case 'destroyed': { - const texture = this.device.createTexture(descriptor); - texture.destroy(); - return texture; - } + case 'destroyed':{ + const texture = this.device.createTexture(descriptor); + texture.destroy(); + return texture; + } } } @@ -40,32 +46,35 @@ export class ValidationTest extends GPUTest { * Create a GPUTexture in the specified state. A `descriptor` may optionally be passed; * if `state` is `'invalid'`, it will be modified to add an invalid combination of usages. */ - createBufferWithState(state, descriptor) { + createBufferWithState( + state, + descriptor) + { descriptor = descriptor ?? { size: 4, - usage: GPUBufferUsage.VERTEX, + usage: GPUBufferUsage.VERTEX }; switch (state) { case 'valid': return this.trackForCleanup(this.device.createBuffer(descriptor)); - case 'invalid': { - // Make the buffer invalid because of an invalid combination of usages but keep the - // descriptor passed as much as possible (for mappedAtCreation and friends). - this.device.pushErrorScope('validation'); - const buffer = this.device.createBuffer({ - ...descriptor, - usage: descriptor.usage | GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_SRC, - }); - void this.device.popErrorScope(); - return buffer; - } - case 'destroyed': { - const buffer = this.device.createBuffer(descriptor); - buffer.destroy(); - return buffer; - } + case 'invalid':{ + // Make the buffer invalid because of an invalid combination of usages but keep the + // descriptor passed as much as possible (for mappedAtCreation and friends). + this.device.pushErrorScope('validation'); + const buffer = this.device.createBuffer({ + ...descriptor, + usage: descriptor.usage | GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_SRC + }); + void this.device.popErrorScope(); + return buffer; + } + case 'destroyed':{ + const buffer = this.device.createBuffer(descriptor); + buffer.destroy(); + return buffer; + } } } @@ -73,22 +82,25 @@ export class ValidationTest extends GPUTest { * Create a GPUQuerySet in the specified state. * A `descriptor` may optionally be passed, which is used when `state` is not `'invalid'`. */ - createQuerySetWithState(state, desc) { + createQuerySetWithState( + state, + desc) + { const descriptor = { type: 'occlusion', count: 2, ...desc }; switch (state) { case 'valid': return this.trackForCleanup(this.device.createQuerySet(descriptor)); - case 'invalid': { - // Make the queryset invalid because of the count out of bounds. - descriptor.count = kMaxQueryCount + 1; - return this.expectGPUError('validation', () => this.device.createQuerySet(descriptor)); - } - case 'destroyed': { - const queryset = this.device.createQuerySet(descriptor); - queryset.destroy(); - return queryset; - } + case 'invalid':{ + // Make the queryset invalid because of the count out of bounds. + descriptor.count = kMaxQueryCount + 1; + return this.expectGPUError('validation', () => this.device.createQuerySet(descriptor)); + } + case 'destroyed':{ + const queryset = this.device.createQuerySet(descriptor); + queryset.destroy(); + return queryset; + } } } @@ -126,26 +138,26 @@ export class ValidationTest extends GPUTest { */ getSampledTexture(sampleCount = 1) { const usage = - sampleCount > 1 - ? GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT - : GPUTextureUsage.TEXTURE_BINDING; + sampleCount > 1 ? + GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT : + GPUTextureUsage.TEXTURE_BINDING; return this.trackForCleanup( this.device.createTexture({ size: { width: 16, height: 16, depthOrArrayLayers: 1 }, format: 'rgba8unorm', usage, - sampleCount, + sampleCount }) ); } /** Return an arbitrarily-configured GPUTexture with the `STORAGE_BINDING` usage. */ - getStorageTexture() { + getStorageTexture(format) { return this.trackForCleanup( this.device.createTexture({ size: { width: 16, height: 16, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.STORAGE_BINDING, + format, + usage: GPUTextureUsage.STORAGE_BINDING }) ); } @@ -157,7 +169,7 @@ export class ValidationTest extends GPUTest { size: { width: 16, height: 16, depthOrArrayLayers: 1 }, format: 'rgba8unorm', usage: GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount, + sampleCount }) ); } @@ -168,7 +180,7 @@ export class ValidationTest extends GPUTest { const texture = this.device.createTexture({ size: { width: 0, height: 0, depthOrArrayLayers: 0 }, format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, + usage: GPUTextureUsage.TEXTURE_BINDING }); void this.device.popErrorScope(); return texture; @@ -208,8 +220,10 @@ export class ValidationTest extends GPUTest { return this.getSampledTexture(1).createView(); case 'sampledTexMS': return this.getSampledTexture(4).createView(); - case 'storageTex': - return this.getStorageTexture().createView(); + case 'readonlyStorageTex': + case 'writeonlyStorageTex': + case 'readwriteStorageTex': + return this.getStorageTexture('r32float').createView(); } } @@ -238,16 +252,16 @@ export class ValidationTest extends GPUTest { size: { width: 4, height: 4, depthOrArrayLayers: 1 }, format: 'rgba8unorm', usage: GPUTextureUsage.TEXTURE_BINDING, - sampleCount, + sampleCount }); } /** Return an arbitrarily-configured GPUTexture with the `STORAGE` usage from mismatched device. */ - getDeviceMismatchedStorageTexture() { + getDeviceMismatchedStorageTexture(format) { return this.getDeviceMismatchedTexture({ size: { width: 4, height: 4, depthOrArrayLayers: 1 }, - format: 'rgba8unorm', - usage: GPUTextureUsage.STORAGE_BINDING, + format, + usage: GPUTextureUsage.STORAGE_BINDING }); } @@ -257,7 +271,7 @@ export class ValidationTest extends GPUTest { size: { width: 4, height: 4, depthOrArrayLayers: 1 }, format: 'rgba8unorm', usage: GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount, + sampleCount }); } @@ -277,8 +291,10 @@ export class ValidationTest extends GPUTest { return this.getDeviceMismatchedSampledTexture(1).createView(); case 'sampledTexMS': return this.getDeviceMismatchedSampledTexture(4).createView(); - case 'storageTex': - return this.getDeviceMismatchedStorageTexture().createView(); + case 'readonlyStorageTex': + case 'writeonlyStorageTex': + case 'readwriteStorageTex': + return this.getDeviceMismatchedStorageTexture('r32float').createView(); } } @@ -304,23 +320,26 @@ export class ValidationTest extends GPUTest { } /** Return a GPURenderPipeline with default options and no-op vertex and fragment shaders. */ - createNoOpRenderPipeline(layout = 'auto') { + createNoOpRenderPipeline( + layout = 'auto', + colorFormat = 'rgba8unorm') + { return this.device.createRenderPipeline({ layout, vertex: { module: this.device.createShaderModule({ - code: this.getNoOpShaderCode('VERTEX'), + code: this.getNoOpShaderCode('VERTEX') }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: this.device.createShaderModule({ - code: this.getNoOpShaderCode('FRAGMENT'), + code: this.getNoOpShaderCode('FRAGMENT') }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm', writeMask: 0 }], + targets: [{ format: colorFormat, writeMask: 0 }] }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); } @@ -331,25 +350,27 @@ export class ValidationTest extends GPUTest { layout: 'auto', vertex: { module: this.device.createShaderModule({ - code: '', + code: '' }), - entryPoint: '', - }, + entryPoint: '' + } }); void this.device.popErrorScope(); return pipeline; } /** Return a GPUComputePipeline with a no-op shader. */ - createNoOpComputePipeline(layout = 'auto') { + createNoOpComputePipeline( + layout = 'auto') + { return this.device.createComputePipeline({ layout, compute: { module: this.device.createShaderModule({ - code: this.getNoOpShaderCode('COMPUTE'), + code: this.getNoOpShaderCode('COMPUTE') }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); } @@ -360,10 +381,10 @@ export class ValidationTest extends GPUTest { layout: 'auto', compute: { module: this.device.createShaderModule({ - code: '', + code: '' }), - entryPoint: '', - }, + entryPoint: '' + } }); void this.device.popErrorScope(); return pipeline; @@ -379,7 +400,12 @@ export class ValidationTest extends GPUTest { } /** Helper for testing createRenderPipeline(Async) validation */ - doCreateRenderPipelineTest(isAsync, _success, descriptor, errorTypeName = 'GPUPipelineError') { + doCreateRenderPipelineTest( + isAsync, + _success, + descriptor, + errorTypeName = 'GPUPipelineError') + { if (isAsync) { if (_success) { this.shouldResolve(this.device.createRenderPipelineAsync(descriptor)); @@ -400,7 +426,12 @@ export class ValidationTest extends GPUTest { } /** Helper for testing createComputePipeline(Async) validation */ - doCreateComputePipelineTest(isAsync, _success, descriptor, errorTypeName = 'GPUPipelineError') { + doCreateComputePipelineTest( + isAsync, + _success, + descriptor, + errorTypeName = 'GPUPipelineError') + { if (isAsync) { if (_success) { this.shouldResolve(this.device.createComputePipelineAsync(descriptor)); @@ -419,4 +450,4 @@ export class ValidationTest extends GPUTest { } } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/capability_info.js b/tests/wpt/webgpu/tests/webgpu/webgpu/capability_info.js index e8470544872..3181a498c16 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/capability_info.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/capability_info.js @@ -1,14 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ // MAINTENANCE_TODO: The generated Typedoc for this file is hard to navigate because it's +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // MAINTENANCE_TODO: The generated Typedoc for this file is hard to navigate because it's // alphabetized. Consider using namespaces or renames to fix this? import { keysOf, makeTable, makeTableRenameAndFilter, - numericKeysOf, -} from '../common/util/data_tables.js'; + numericKeysOf } from + +'../common/util/data_tables.js'; import { assertTypeTrue } from '../common/util/types.js'; import { unreachable } from '../common/util/util.js'; @@ -22,10 +23,16 @@ import { GPUConst, kMaxUnsignedLongValue, kMaxUnsignedLongLongValue } from './co export const kMaxQueryCount = 4096; /** Per-GPUQueryType info. */ -export const kQueryTypeInfo = { - // Occlusion query does not require any features. - occlusion: { feature: undefined }, - timestamp: { feature: 'timestamp-query' }, + + + + +export const kQueryTypeInfo = + + +{ + 'occlusion': { feature: undefined }, + 'timestamp': { feature: 'timestamp-query' } }; /** List of all GPUQueryType values. */ export const kQueryTypes = keysOf(kQueryTypeInfo); @@ -36,11 +43,14 @@ export const kQueryTypes = keysOf(kQueryTypeInfo); export const kBufferSizeAlignment = 4; /** Per-GPUBufferUsage copy info. */ -export const kBufferUsageCopyInfo = { - COPY_NONE: 0, - COPY_SRC: GPUConst.BufferUsage.COPY_SRC, - COPY_DST: GPUConst.BufferUsage.COPY_DST, - COPY_SRC_DST: GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.COPY_DST, +export const kBufferUsageCopyInfo = + + +{ + 'COPY_NONE': 0, + 'COPY_SRC': GPUConst.BufferUsage.COPY_SRC, + 'COPY_DST': GPUConst.BufferUsage.COPY_DST, + 'COPY_SRC_DST': GPUConst.BufferUsage.COPY_SRC | GPUConst.BufferUsage.COPY_DST }; /** List of all GPUBufferUsage copy values. */ export const kBufferUsageCopy = keysOf(kBufferUsageCopyInfo); @@ -48,8 +58,10 @@ export const kBufferUsageCopy = keysOf(kBufferUsageCopyInfo); /** Per-GPUBufferUsage keys and info. */ export const kBufferUsageKeys = keysOf(GPUConst.BufferUsage); -export const kBufferUsageInfo = { - ...GPUConst.BufferUsage, +export const kBufferUsageInfo = + +{ + ...GPUConst.BufferUsage }; /** List of all GPUBufferUsage values. */ @@ -62,15 +74,20 @@ export const kAllBufferUsageBits = kBufferUsages.reduce( // Errors /** Per-GPUErrorFilter info. */ -export const kErrorScopeFilterInfo = { - internal: { generatable: false }, +export const kErrorScopeFilterInfo = + + + + +{ + 'internal': { generatable: false }, 'out-of-memory': { generatable: true }, - validation: { generatable: true }, + 'validation': { generatable: true } }; /** List of all GPUErrorFilter values. */ export const kErrorScopeFilters = keysOf(kErrorScopeFilterInfo); export const kGeneratableErrorScopeFilters = kErrorScopeFilters.filter( - e => kErrorScopeFilterInfo[e].generatable + (e) => kErrorScopeFilterInfo[e].generatable ); // Canvases @@ -79,35 +96,43 @@ export const kGeneratableErrorScopeFilters = kErrorScopeFilters.filter( export const kCanvasTextureFormats = ['bgra8unorm', 'rgba8unorm', 'rgba16float']; // The alpha mode for canvas context. -export const kCanvasAlphaModesInfo = { - opaque: {}, - premultiplied: {}, +export const kCanvasAlphaModesInfo = + +{ + 'opaque': {}, + 'premultiplied': {} }; export const kCanvasAlphaModes = keysOf(kCanvasAlphaModesInfo); // The color spaces for canvas context -export const kCanvasColorSpacesInfo = { - srgb: {}, - 'display-p3': {}, +export const kCanvasColorSpacesInfo = + +{ + 'srgb': {}, + 'display-p3': {} }; export const kCanvasColorSpaces = keysOf(kCanvasColorSpacesInfo); // Textures (except for texture format info) /** Per-GPUTextureDimension info. */ -export const kTextureDimensionInfo = { +export const kTextureDimensionInfo = + +{ '1d': {}, '2d': {}, - '3d': {}, + '3d': {} }; /** List of all GPUTextureDimension values. */ export const kTextureDimensions = keysOf(kTextureDimensionInfo); /** Per-GPUTextureAspect info. */ -export const kTextureAspectInfo = { - all: {}, +export const kTextureAspectInfo = + +{ + 'all': {}, 'depth-only': {}, - 'stencil-only': {}, + 'stencil-only': {} }; /** List of all GPUTextureAspect values. */ export const kTextureAspects = keysOf(kTextureAspectInfo); @@ -115,29 +140,35 @@ export const kTextureAspects = keysOf(kTextureAspectInfo); // Misc /** Per-GPUCompareFunction info. */ -export const kCompareFunctionInfo = { - never: {}, - less: {}, - equal: {}, +export const kCompareFunctionInfo = + + +{ + 'never': {}, + 'less': {}, + 'equal': {}, 'less-equal': {}, - greater: {}, + 'greater': {}, 'not-equal': {}, 'greater-equal': {}, - always: {}, + 'always': {} }; /** List of all GPUCompareFunction values. */ export const kCompareFunctions = keysOf(kCompareFunctionInfo); /** Per-GPUStencilOperation info. */ -export const kStencilOperationInfo = { - keep: {}, - zero: {}, - replace: {}, - invert: {}, +export const kStencilOperationInfo = + + +{ + 'keep': {}, + 'zero': {}, + 'replace': {}, + 'invert': {}, 'increment-clamp': {}, 'decrement-clamp': {}, 'increment-wrap': {}, - 'decrement-wrap': {}, + 'decrement-wrap': {} }; /** List of all GPUStencilOperation values. */ export const kStencilOperations = keysOf(kStencilOperationInfo); @@ -145,31 +176,39 @@ export const kStencilOperations = keysOf(kStencilOperationInfo); // More textures (except for texture format info) /** Per-GPUTextureUsage type info. */ -export const kTextureUsageTypeInfo = { - texture: Number(GPUConst.TextureUsage.TEXTURE_BINDING), - storage: Number(GPUConst.TextureUsage.STORAGE_BINDING), - render: Number(GPUConst.TextureUsage.RENDER_ATTACHMENT), +export const kTextureUsageTypeInfo = + + +{ + 'texture': Number(GPUConst.TextureUsage.TEXTURE_BINDING), + 'storage': Number(GPUConst.TextureUsage.STORAGE_BINDING), + 'render': Number(GPUConst.TextureUsage.RENDER_ATTACHMENT) }; /** List of all GPUTextureUsage type values. */ export const kTextureUsageType = keysOf(kTextureUsageTypeInfo); /** Per-GPUTextureUsage copy info. */ -export const kTextureUsageCopyInfo = { - none: 0, - src: Number(GPUConst.TextureUsage.COPY_SRC), - dst: Number(GPUConst.TextureUsage.COPY_DST), - 'src-dest': Number(GPUConst.TextureUsage.COPY_SRC) | Number(GPUConst.TextureUsage.COPY_DST), +export const kTextureUsageCopyInfo = + + +{ + 'none': 0, + 'src': Number(GPUConst.TextureUsage.COPY_SRC), + 'dst': Number(GPUConst.TextureUsage.COPY_DST), + 'src-dest': Number(GPUConst.TextureUsage.COPY_SRC) | Number(GPUConst.TextureUsage.COPY_DST) }; /** List of all GPUTextureUsage copy values. */ export const kTextureUsageCopy = keysOf(kTextureUsageCopyInfo); /** Per-GPUTextureUsage info. */ -export const kTextureUsageInfo = { +export const kTextureUsageInfo = + +{ [GPUConst.TextureUsage.COPY_SRC]: {}, [GPUConst.TextureUsage.COPY_DST]: {}, [GPUConst.TextureUsage.TEXTURE_BINDING]: {}, [GPUConst.TextureUsage.STORAGE_BINDING]: {}, - [GPUConst.TextureUsage.RENDER_ATTACHMENT]: {}, + [GPUConst.TextureUsage.RENDER_ATTACHMENT]: {} }; /** List of all GPUTextureUsage values. */ export const kTextureUsages = numericKeysOf(kTextureUsageInfo); @@ -178,14 +217,21 @@ export const kTextureUsages = numericKeysOf(kTextureUsageInfo); /** Per-GPUTextureViewDimension info. */ + + + + /** Per-GPUTextureViewDimension info. */ -export const kTextureViewDimensionInfo = { +export const kTextureViewDimensionInfo = + + +{ '1d': { storage: true }, '2d': { storage: true }, '2d-array': { storage: true }, - cube: { storage: false }, + 'cube': { storage: false }, 'cube-array': { storage: false }, - '3d': { storage: true }, + '3d': { storage: true } }; /** List of all GPUTextureDimension values. */ export const kTextureViewDimensions = keysOf(kTextureViewDimensionInfo); @@ -195,46 +241,73 @@ export const kTextureViewDimensions = keysOf(kTextureViewDimensionInfo); /** Per-GPUVertexFormat info. */ // Exists just for documentation. Otherwise could be inferred by `makeTable`. + + + + + + + + + + + + + + + + + + + + + + + + /** Per-GPUVertexFormat info. */ -export const kVertexFormatInfo = makeTable( - ['bytesPerComponent', 'type', 'componentCount', 'wgslType'], - [, , ,], - { +export const kVertexFormatInfo = + + +makeTable( + ['bytesPerComponent', 'type', 'componentCount', 'byteSize', 'wgslType'], + [,,,,], { // 8 bit components - uint8x2: [1, 'uint', 2, 'vec2'], - uint8x4: [1, 'uint', 4, 'vec4'], - sint8x2: [1, 'sint', 2, 'vec2'], - sint8x4: [1, 'sint', 4, 'vec4'], - unorm8x2: [1, 'unorm', 2, 'vec2'], - unorm8x4: [1, 'unorm', 4, 'vec4'], - snorm8x2: [1, 'snorm', 2, 'vec2'], - snorm8x4: [1, 'snorm', 4, 'vec4'], + 'uint8x2': [1, 'uint', 2, 2, 'vec2'], + 'uint8x4': [1, 'uint', 4, 4, 'vec4'], + 'sint8x2': [1, 'sint', 2, 2, 'vec2'], + 'sint8x4': [1, 'sint', 4, 4, 'vec4'], + 'unorm8x2': [1, 'unorm', 2, 2, 'vec2'], + 'unorm8x4': [1, 'unorm', 4, 4, 'vec4'], + 'snorm8x2': [1, 'snorm', 2, 2, 'vec2'], + 'snorm8x4': [1, 'snorm', 4, 4, 'vec4'], // 16 bit components - uint16x2: [2, 'uint', 2, 'vec2'], - uint16x4: [2, 'uint', 4, 'vec4'], - sint16x2: [2, 'sint', 2, 'vec2'], - sint16x4: [2, 'sint', 4, 'vec4'], - unorm16x2: [2, 'unorm', 2, 'vec2'], - unorm16x4: [2, 'unorm', 4, 'vec4'], - snorm16x2: [2, 'snorm', 2, 'vec2'], - snorm16x4: [2, 'snorm', 4, 'vec4'], - float16x2: [2, 'float', 2, 'vec2'], - float16x4: [2, 'float', 4, 'vec4'], + 'uint16x2': [2, 'uint', 2, 4, 'vec2'], + 'uint16x4': [2, 'uint', 4, 8, 'vec4'], + 'sint16x2': [2, 'sint', 2, 4, 'vec2'], + 'sint16x4': [2, 'sint', 4, 8, 'vec4'], + 'unorm16x2': [2, 'unorm', 2, 4, 'vec2'], + 'unorm16x4': [2, 'unorm', 4, 8, 'vec4'], + 'snorm16x2': [2, 'snorm', 2, 4, 'vec2'], + 'snorm16x4': [2, 'snorm', 4, 8, 'vec4'], + 'float16x2': [2, 'float', 2, 4, 'vec2'], + 'float16x4': [2, 'float', 4, 8, 'vec4'], // 32 bit components - float32: [4, 'float', 1, 'f32'], - float32x2: [4, 'float', 2, 'vec2'], - float32x3: [4, 'float', 3, 'vec3'], - float32x4: [4, 'float', 4, 'vec4'], - uint32: [4, 'uint', 1, 'u32'], - uint32x2: [4, 'uint', 2, 'vec2'], - uint32x3: [4, 'uint', 3, 'vec3'], - uint32x4: [4, 'uint', 4, 'vec4'], - sint32: [4, 'sint', 1, 'i32'], - sint32x2: [4, 'sint', 2, 'vec2'], - sint32x3: [4, 'sint', 3, 'vec3'], - sint32x4: [4, 'sint', 4, 'vec4'], - } -); + 'float32': [4, 'float', 1, 4, 'f32'], + 'float32x2': [4, 'float', 2, 8, 'vec2'], + 'float32x3': [4, 'float', 3, 12, 'vec3'], + 'float32x4': [4, 'float', 4, 16, 'vec4'], + 'uint32': [4, 'uint', 1, 4, 'u32'], + 'uint32x2': [4, 'uint', 2, 8, 'vec2'], + 'uint32x3': [4, 'uint', 3, 12, 'vec3'], + 'uint32x4': [4, 'uint', 4, 16, 'vec4'], + 'sint32': [4, 'sint', 1, 4, 'i32'], + 'sint32x2': [4, 'sint', 2, 8, 'vec2'], + 'sint32x3': [4, 'sint', 3, 12, 'vec3'], + 'sint32x4': [4, 'sint', 4, 16, 'vec4'], + // 32 bit packed + 'unorm10-10-10-2': ['packed', 'unorm', 4, 4, 'vec4'] + }); /** List of all GPUVertexFormat values. */ export const kVertexFormats = keysOf(kVertexFormatInfo); @@ -245,19 +318,51 @@ export const kVertexFormats = keysOf(kVertexFormatInfo); * count toward the same `PerShaderStage` limit(s) in the spec (if any). */ + + + + + + + +/** + * Classes of `PerPipelineLayout` binding limits. Two bindings with the same class + * count toward the same `PerPipelineLayout` limit(s) in the spec (if any). + */ + + + + + + + + + + + + + + + +/** + * Types of resource binding which have distinct binding rules, by spec + * (e.g. filtering vs non-filtering sampler, multisample vs non-multisample texture). + */ + export const kBindableResources = [ - 'uniformBuf', - 'storageBuf', - 'filtSamp', - 'nonFiltSamp', - 'compareSamp', - 'sampledTex', - 'sampledTexMS', - 'storageTex', - 'errorBuf', - 'errorSamp', - 'errorTex', -]; +'uniformBuf', +'storageBuf', +'filtSamp', +'nonFiltSamp', +'compareSamp', +'sampledTex', +'sampledTexMS', +'readonlyStorageTex', +'writeonlyStorageTex', +'readwriteStorageTex', +'errorBuf', +'errorSamp', +'errorTex']; assertTypeTrue(); @@ -267,99 +372,89 @@ assertTypeTrue(); export const kMinDynamicBufferOffsetAlignment = 256; /** Default `PerShaderStage` binding limits, by spec. */ -export const kPerStageBindingLimits = { - uniformBuf: { class: 'uniformBuf', maxLimit: 'maxUniformBuffersPerShaderStage' }, - storageBuf: { class: 'storageBuf', maxLimit: 'maxStorageBuffersPerShaderStage' }, - sampler: { class: 'sampler', maxLimit: 'maxSamplersPerShaderStage' }, - sampledTex: { class: 'sampledTex', maxLimit: 'maxSampledTexturesPerShaderStage' }, - storageTex: { class: 'storageTex', maxLimit: 'maxStorageTexturesPerShaderStage' }, +export const kPerStageBindingLimits = + + + + + + + + +{ + 'uniformBuf': { class: 'uniformBuf', maxLimit: 'maxUniformBuffersPerShaderStage' }, + 'storageBuf': { class: 'storageBuf', maxLimit: 'maxStorageBuffersPerShaderStage' }, + 'sampler': { class: 'sampler', maxLimit: 'maxSamplersPerShaderStage' }, + 'sampledTex': { class: 'sampledTex', maxLimit: 'maxSampledTexturesPerShaderStage' }, + 'readonlyStorageTex': { class: 'readonlyStorageTex', maxLimit: 'maxStorageTexturesPerShaderStage' }, + 'writeonlyStorageTex': { class: 'writeonlyStorageTex', maxLimit: 'maxStorageTexturesPerShaderStage' }, + 'readwriteStorageTex': { class: 'readwriteStorageTex', maxLimit: 'maxStorageTexturesPerShaderStage' } }; /** * Default `PerPipelineLayout` binding limits, by spec. */ -export const kPerPipelineBindingLimits = { - uniformBuf: { class: 'uniformBuf', maxDynamicLimit: 'maxDynamicUniformBuffersPerPipelineLayout' }, - storageBuf: { class: 'storageBuf', maxDynamicLimit: 'maxDynamicStorageBuffersPerPipelineLayout' }, - sampler: { class: 'sampler', maxDynamicLimit: '' }, - sampledTex: { class: 'sampledTex', maxDynamicLimit: '' }, - storageTex: { class: 'storageTex', maxDynamicLimit: '' }, +export const kPerPipelineBindingLimits = + + + + + + + + + + +{ + 'uniformBuf': { class: 'uniformBuf', maxDynamicLimit: 'maxDynamicUniformBuffersPerPipelineLayout' }, + 'storageBuf': { class: 'storageBuf', maxDynamicLimit: 'maxDynamicStorageBuffersPerPipelineLayout' }, + 'sampler': { class: 'sampler', maxDynamicLimit: '' }, + 'sampledTex': { class: 'sampledTex', maxDynamicLimit: '' }, + 'readonlyStorageTex': { class: 'readonlyStorageTex', maxDynamicLimit: '' }, + 'writeonlyStorageTex': { class: 'writeonlyStorageTex', maxDynamicLimit: '' }, + 'readwriteStorageTex': { class: 'readwriteStorageTex', maxDynamicLimit: '' } }; -const kBindingKind = { - uniformBuf: { - resource: 'uniformBuf', - perStageLimitClass: kPerStageBindingLimits.uniformBuf, - perPipelineLimitClass: kPerPipelineBindingLimits.uniformBuf, - }, - storageBuf: { - resource: 'storageBuf', - perStageLimitClass: kPerStageBindingLimits.storageBuf, - perPipelineLimitClass: kPerPipelineBindingLimits.storageBuf, - }, - filtSamp: { - resource: 'filtSamp', - perStageLimitClass: kPerStageBindingLimits.sampler, - perPipelineLimitClass: kPerPipelineBindingLimits.sampler, - }, - nonFiltSamp: { - resource: 'nonFiltSamp', - perStageLimitClass: kPerStageBindingLimits.sampler, - perPipelineLimitClass: kPerPipelineBindingLimits.sampler, - }, - compareSamp: { - resource: 'compareSamp', - perStageLimitClass: kPerStageBindingLimits.sampler, - perPipelineLimitClass: kPerPipelineBindingLimits.sampler, - }, - sampledTex: { - resource: 'sampledTex', - perStageLimitClass: kPerStageBindingLimits.sampledTex, - perPipelineLimitClass: kPerPipelineBindingLimits.sampledTex, - }, - sampledTexMS: { - resource: 'sampledTexMS', - perStageLimitClass: kPerStageBindingLimits.sampledTex, - perPipelineLimitClass: kPerPipelineBindingLimits.sampledTex, - }, - storageTex: { - resource: 'storageTex', - perStageLimitClass: kPerStageBindingLimits.storageTex, - perPipelineLimitClass: kPerPipelineBindingLimits.storageTex, - }, + + + + + + + +const kBindingKind = + + +{ + uniformBuf: { resource: 'uniformBuf', perStageLimitClass: kPerStageBindingLimits.uniformBuf, perPipelineLimitClass: kPerPipelineBindingLimits.uniformBuf }, + storageBuf: { resource: 'storageBuf', perStageLimitClass: kPerStageBindingLimits.storageBuf, perPipelineLimitClass: kPerPipelineBindingLimits.storageBuf }, + filtSamp: { resource: 'filtSamp', perStageLimitClass: kPerStageBindingLimits.sampler, perPipelineLimitClass: kPerPipelineBindingLimits.sampler }, + nonFiltSamp: { resource: 'nonFiltSamp', perStageLimitClass: kPerStageBindingLimits.sampler, perPipelineLimitClass: kPerPipelineBindingLimits.sampler }, + compareSamp: { resource: 'compareSamp', perStageLimitClass: kPerStageBindingLimits.sampler, perPipelineLimitClass: kPerPipelineBindingLimits.sampler }, + sampledTex: { resource: 'sampledTex', perStageLimitClass: kPerStageBindingLimits.sampledTex, perPipelineLimitClass: kPerPipelineBindingLimits.sampledTex }, + sampledTexMS: { resource: 'sampledTexMS', perStageLimitClass: kPerStageBindingLimits.sampledTex, perPipelineLimitClass: kPerPipelineBindingLimits.sampledTex }, + readonlyStorageTex: { resource: 'readonlyStorageTex', perStageLimitClass: kPerStageBindingLimits.readonlyStorageTex, perPipelineLimitClass: kPerPipelineBindingLimits.readonlyStorageTex }, + writeonlyStorageTex: { resource: 'writeonlyStorageTex', perStageLimitClass: kPerStageBindingLimits.writeonlyStorageTex, perPipelineLimitClass: kPerPipelineBindingLimits.writeonlyStorageTex }, + readwriteStorageTex: { resource: 'readwriteStorageTex', perStageLimitClass: kPerStageBindingLimits.readwriteStorageTex, perPipelineLimitClass: kPerPipelineBindingLimits.readwriteStorageTex } }; // Binding type info const kValidStagesAll = { validStages: - GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, + GPUConst.ShaderStage.VERTEX | GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE }; const kValidStagesStorageWrite = { - validStages: GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE, + validStages: GPUConst.ShaderStage.FRAGMENT | GPUConst.ShaderStage.COMPUTE }; /** Binding type info (including class limits) for the specified GPUBufferBindingLayout. */ export function bufferBindingTypeInfo(d) { + switch (d.type ?? 'uniform') { - case 'uniform': - return { - usage: GPUConst.BufferUsage.UNIFORM, - ...kBindingKind.uniformBuf, - ...kValidStagesAll, - }; - case 'storage': - return { - usage: GPUConst.BufferUsage.STORAGE, - ...kBindingKind.storageBuf, - ...kValidStagesStorageWrite, - }; - case 'read-only-storage': - return { - usage: GPUConst.BufferUsage.STORAGE, - ...kBindingKind.storageBuf, - ...kValidStagesAll, - }; + case 'uniform':return { usage: GPUConst.BufferUsage.UNIFORM, ...kBindingKind.uniformBuf, ...kValidStagesAll }; + case 'storage':return { usage: GPUConst.BufferUsage.STORAGE, ...kBindingKind.storageBuf, ...kValidStagesStorageWrite }; + case 'read-only-storage':return { usage: GPUConst.BufferUsage.STORAGE, ...kBindingKind.storageBuf, ...kValidStagesAll }; } } /** List of all GPUBufferBindingType values. */ @@ -368,13 +463,11 @@ assertTypeTrue(); /** Binding type info (including class limits) for the specified GPUSamplerBindingLayout. */ export function samplerBindingTypeInfo(d) { + switch (d.type ?? 'filtering') { - case 'filtering': - return { ...kBindingKind.filtSamp, ...kValidStagesAll }; - case 'non-filtering': - return { ...kBindingKind.nonFiltSamp, ...kValidStagesAll }; - case 'comparison': - return { ...kBindingKind.compareSamp, ...kValidStagesAll }; + case 'filtering':return { ...kBindingKind.filtSamp, ...kValidStagesAll }; + case 'non-filtering':return { ...kBindingKind.nonFiltSamp, ...kValidStagesAll }; + case 'comparison':return { ...kBindingKind.compareSamp, ...kValidStagesAll }; } } /** List of all GPUSamplerBindingType values. */ @@ -383,35 +476,49 @@ assertTypeTrue(); /** Binding type info (including class limits) for the specified GPUTextureBindingLayout. */ export function sampledTextureBindingTypeInfo(d) { + if (d.multisampled) { - return { - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - ...kBindingKind.sampledTexMS, - ...kValidStagesAll, - }; + return { usage: GPUConst.TextureUsage.TEXTURE_BINDING, ...kBindingKind.sampledTexMS, ...kValidStagesAll }; } else { - return { - usage: GPUConst.TextureUsage.TEXTURE_BINDING, - ...kBindingKind.sampledTex, - ...kValidStagesAll, - }; + return { usage: GPUConst.TextureUsage.TEXTURE_BINDING, ...kBindingKind.sampledTex, ...kValidStagesAll }; } } /** List of all GPUTextureSampleType values. */ -export const kTextureSampleTypes = ['float', 'unfilterable-float', 'depth', 'sint', 'uint']; +export const kTextureSampleTypes = [ +'float', +'unfilterable-float', +'depth', +'sint', +'uint']; assertTypeTrue(); /** Binding type info (including class limits) for the specified GPUStorageTextureBindingLayout. */ export function storageTextureBindingTypeInfo(d) { - return { - usage: GPUConst.TextureUsage.STORAGE_BINDING, - ...kBindingKind.storageTex, - ...kValidStagesStorageWrite, - }; + switch (d.access) { + case undefined: + case 'write-only': + return { + usage: GPUConst.TextureUsage.STORAGE_BINDING, + ...kBindingKind.writeonlyStorageTex, + ...kValidStagesStorageWrite + }; + case 'read-only': + return { + usage: GPUConst.TextureUsage.STORAGE_BINDING, + ...kBindingKind.readonlyStorageTex, + ...kValidStagesAll + }; + case 'read-write': + return { + usage: GPUConst.TextureUsage.STORAGE_BINDING, + ...kBindingKind.readwriteStorageTex, + ...kValidStagesStorageWrite + }; + } } /** List of all GPUStorageTextureAccess values. */ -export const kStorageTextureAccessValues = ['write-only']; +export const kStorageTextureAccessValues = ['read-only', 'read-write', 'write-only']; assertTypeTrue(); /** GPUBindGroupLayoutEntry, but only the "union" fields, not the common fields. */ @@ -438,20 +545,20 @@ export function bindingTypeInfo(e) { */ export function bufferBindingEntries(includeUndefined) { return [ - ...(includeUndefined ? [{ buffer: { type: undefined } }] : []), - { buffer: { type: 'uniform' } }, - { buffer: { type: 'storage' } }, - { buffer: { type: 'read-only-storage' } }, - ]; + ...(includeUndefined ? [{ buffer: { type: undefined } }] : []), + { buffer: { type: 'uniform' } }, + { buffer: { type: 'storage' } }, + { buffer: { type: 'read-only-storage' } }]; + } /** Generate a list of possible sampler-typed BGLEntry values. */ export function samplerBindingEntries(includeUndefined) { return [ - ...(includeUndefined ? [{ sampler: { type: undefined } }] : []), - { sampler: { type: 'comparison' } }, - { sampler: { type: 'filtering' } }, - { sampler: { type: 'non-filtering' } }, - ]; + ...(includeUndefined ? [{ sampler: { type: undefined } }] : []), + { sampler: { type: 'comparison' } }, + { sampler: { type: 'filtering' } }, + { sampler: { type: 'non-filtering' } }]; + } /** * Generate a list of possible texture-typed BGLEntry values. @@ -460,28 +567,28 @@ export function samplerBindingEntries(includeUndefined) { */ export function textureBindingEntries(includeUndefined) { return [ - ...(includeUndefined ? [{ texture: { multisampled: undefined } }] : []), - { texture: { multisampled: false } }, - { texture: { multisampled: true, sampleType: 'unfilterable-float' } }, - ]; + ...(includeUndefined ? + [{ texture: { multisampled: undefined, sampleType: 'unfilterable-float' } }] : + []), + { texture: { multisampled: false, sampleType: 'unfilterable-float' } }, + { texture: { multisampled: true, sampleType: 'unfilterable-float' } }]; + } /** * Generate a list of possible storageTexture-typed BGLEntry values. * * Note: Generates different `access` options, but not `format` or `viewDimension` options. */ -export function storageTextureBindingEntries(format) { - return [{ storageTexture: { access: 'write-only', format } }]; +export function storageTextureBindingEntries() { + return [ + { storageTexture: { access: 'write-only', format: 'r32float' } }, + { storageTexture: { access: 'read-only', format: 'r32float' } }, + { storageTexture: { access: 'read-write', format: 'r32float' } }]; + } /** Generate a list of possible texture-or-storageTexture-typed BGLEntry values. */ -export function sampledAndStorageBindingEntries( - includeUndefined, - storageTextureFormat = 'rgba8unorm' -) { - return [ - ...textureBindingEntries(includeUndefined), - ...storageTextureBindingEntries(storageTextureFormat), - ]; +export function sampledAndStorageBindingEntries(includeUndefined) { + return [...textureBindingEntries(includeUndefined), ...storageTextureBindingEntries()]; } /** * Generate a list of possible BGLEntry values of every type, but not variants with different: @@ -490,12 +597,12 @@ export function sampledAndStorageBindingEntries( * - texture.viewDimension * - storageTexture.viewDimension */ -export function allBindingEntries(includeUndefined, storageTextureFormat = 'rgba8unorm') { +export function allBindingEntries(includeUndefined) { return [ - ...bufferBindingEntries(includeUndefined), - ...samplerBindingEntries(includeUndefined), - ...sampledAndStorageBindingEntries(includeUndefined, storageTextureFormat), - ]; + ...bufferBindingEntries(includeUndefined), + ...samplerBindingEntries(includeUndefined), + ...sampledAndStorageBindingEntries(includeUndefined)]; + } // Shader stages @@ -504,14 +611,15 @@ export function allBindingEntries(includeUndefined, storageTextureFormat = 'rgba export const kShaderStageKeys = Object.keys(GPUConst.ShaderStage); export const kShaderStages = [ - GPUConst.ShaderStage.VERTEX, - GPUConst.ShaderStage.FRAGMENT, - GPUConst.ShaderStage.COMPUTE, -]; +GPUConst.ShaderStage.VERTEX, +GPUConst.ShaderStage.FRAGMENT, +GPUConst.ShaderStage.COMPUTE]; /** List of all possible combinations of GPUShaderStage values. */ export const kShaderStageCombinations = [0, 1, 2, 3, 4, 5, 6, 7]; -export const kShaderStageCombinationsWithStage = [1, 2, 3, 4, 5, 6, 7]; +export const kShaderStageCombinationsWithStage = [ +1, 2, 3, 4, 5, 6, 7]; + /** * List of all possible texture sampleCount values. @@ -527,7 +635,10 @@ export const kMipmapFilterModes = ['nearest', 'linear']; assertTypeTrue(); /** List of address modes. */ -export const kAddressModes = ['clamp-to-edge', 'repeat', 'mirror-repeat']; +export const kAddressModes = [ +'clamp-to-edge', +'repeat', +'mirror-repeat']; assertTypeTrue(); @@ -535,38 +646,37 @@ assertTypeTrue(); /** List of all GPUBlendFactor values. */ export const kBlendFactors = [ - 'zero', - 'one', - 'src', - 'one-minus-src', - 'src-alpha', - 'one-minus-src-alpha', - 'dst', - 'one-minus-dst', - 'dst-alpha', - 'one-minus-dst-alpha', - 'src-alpha-saturated', - 'constant', - 'one-minus-constant', -]; +'zero', +'one', +'src', +'one-minus-src', +'src-alpha', +'one-minus-src-alpha', +'dst', +'one-minus-dst', +'dst-alpha', +'one-minus-dst-alpha', +'src-alpha-saturated', +'constant', +'one-minus-constant']; + /** List of all GPUBlendOperation values. */ export const kBlendOperations = [ - 'add', // - 'subtract', - 'reverse-subtract', - 'min', - 'max', -]; +'add', // +'subtract', +'reverse-subtract', +'min', +'max']; + // Primitive topologies export const kPrimitiveTopology = [ - 'point-list', - 'line-list', - 'line-strip', - 'triangle-list', - 'triangle-strip', -]; +'point-list', +'line-list', +'line-strip', +'triangle-list', +'triangle-strip']; assertTypeTrue(); @@ -574,48 +684,48 @@ export const kIndexFormat = ['uint16', 'uint32']; assertTypeTrue(); /** Info for each entry of GPUSupportedLimits */ -const [kLimitInfoKeys, kLimitInfoDefaults, kLimitInfoData] = [ - ['class', 'core', 'compatibility', 'maximumValue'], - ['maximum', , , kMaxUnsignedLongValue], - { - maxTextureDimension1D: [, 8192, 4096], - maxTextureDimension2D: [, 8192, 4096], - maxTextureDimension3D: [, 2048, 1024], - maxTextureArrayLayers: [, 256, 256], +const [kLimitInfoKeys, kLimitInfoDefaults, kLimitInfoData] = +[ +['class', 'core', 'compatibility', 'maximumValue'], +['maximum',,, kMaxUnsignedLongValue], { + 'maxTextureDimension1D': [, 8192, 4096], + 'maxTextureDimension2D': [, 8192, 4096], + 'maxTextureDimension3D': [, 2048, 1024], + 'maxTextureArrayLayers': [, 256, 256], - maxBindGroups: [, 4, 4], - maxBindingsPerBindGroup: [, 1000, 1000], - maxDynamicUniformBuffersPerPipelineLayout: [, 8, 8], - maxDynamicStorageBuffersPerPipelineLayout: [, 4, 4], - maxSampledTexturesPerShaderStage: [, 16, 16], - maxSamplersPerShaderStage: [, 16, 16], - maxStorageBuffersPerShaderStage: [, 8, 4], - maxStorageTexturesPerShaderStage: [, 4, 4], - maxUniformBuffersPerShaderStage: [, 12, 12], + 'maxBindGroups': [, 4, 4], + 'maxBindGroupsPlusVertexBuffers': [, 24, 24], + 'maxBindingsPerBindGroup': [, 1000, 1000], + 'maxDynamicUniformBuffersPerPipelineLayout': [, 8, 8], + 'maxDynamicStorageBuffersPerPipelineLayout': [, 4, 4], + 'maxSampledTexturesPerShaderStage': [, 16, 16], + 'maxSamplersPerShaderStage': [, 16, 16], + 'maxStorageBuffersPerShaderStage': [, 8, 4], + 'maxStorageTexturesPerShaderStage': [, 4, 4], + 'maxUniformBuffersPerShaderStage': [, 12, 12], - maxUniformBufferBindingSize: [, 65536, 16384, kMaxUnsignedLongLongValue], - maxStorageBufferBindingSize: [, 134217728, 134217728, kMaxUnsignedLongLongValue], - minUniformBufferOffsetAlignment: ['alignment', 256, 256], - minStorageBufferOffsetAlignment: ['alignment', 256, 256], + 'maxUniformBufferBindingSize': [, 65536, 16384, kMaxUnsignedLongLongValue], + 'maxStorageBufferBindingSize': [, 134217728, 134217728, kMaxUnsignedLongLongValue], + 'minUniformBufferOffsetAlignment': ['alignment', 256, 256], + 'minStorageBufferOffsetAlignment': ['alignment', 256, 256], - maxVertexBuffers: [, 8, 8], - maxBufferSize: [, 268435456, 268435456, kMaxUnsignedLongLongValue], - maxVertexAttributes: [, 16, 16], - maxVertexBufferArrayStride: [, 2048, 2048], - maxInterStageShaderComponents: [, 60, 60], - maxInterStageShaderVariables: [, 16, 16], + 'maxVertexBuffers': [, 8, 8], + 'maxBufferSize': [, 268435456, 268435456, kMaxUnsignedLongLongValue], + 'maxVertexAttributes': [, 16, 16], + 'maxVertexBufferArrayStride': [, 2048, 2048], + 'maxInterStageShaderComponents': [, 60, 60], + 'maxInterStageShaderVariables': [, 16, 15], - maxColorAttachments: [, 8, 4], - maxColorAttachmentBytesPerSample: [, 32, 32], + 'maxColorAttachments': [, 8, 4], + 'maxColorAttachmentBytesPerSample': [, 32, 32], - maxComputeWorkgroupStorageSize: [, 16384, 16384], - maxComputeInvocationsPerWorkgroup: [, 256, 128], - maxComputeWorkgroupSizeX: [, 256, 128], - maxComputeWorkgroupSizeY: [, 256, 128], - maxComputeWorkgroupSizeZ: [, 64, 64], - maxComputeWorkgroupsPerDimension: [, 65535, 65535], - }, -]; + 'maxComputeWorkgroupStorageSize': [, 16384, 16384], + 'maxComputeInvocationsPerWorkgroup': [, 256, 128], + 'maxComputeWorkgroupSizeX': [, 256, 128], + 'maxComputeWorkgroupSizeY': [, 256, 128], + 'maxComputeWorkgroupSizeZ': [, 64, 64], + 'maxComputeWorkgroupsPerDimension': [, 65535, 65535] +}]; /** * Feature levels corresponding to core WebGPU and WebGPU @@ -625,6 +735,7 @@ const [kLimitInfoKeys, kLimitInfoDefaults, kLimitInfoData] = [ */ export const kFeatureLevels = ['core', 'compatibility']; + const kLimitKeys = ['class', 'default', 'maximumValue']; const kLimitInfoCore = makeTableRenameAndFilter( @@ -645,7 +756,7 @@ const kLimitInfoCompatibility = makeTableRenameAndFilter( const kLimitInfos = { core: kLimitInfoCore, - compatibility: kLimitInfoCompatibility, + compatibility: kLimitInfoCompatibility }; export const kLimitClasses = Object.fromEntries( @@ -658,7 +769,11 @@ export function getDefaultLimits(featureLevel) { export function getDefaultLimitsForAdapter(adapter) { // MAINTENANCE_TODO: Remove casts when GPUAdapter IDL has isCompatibilityMode. - return getDefaultLimits(adapter.isCompatibilityMode ? 'compatibility' : 'core'); + return getDefaultLimits( + adapter.isCompatibilityMode ? + 'compatibility' : + 'core' + ); } /** List of all entries of GPUSupportedLimits. */ @@ -682,7 +797,10 @@ export const kDrawIndirectParametersSize = 4; export const kDrawIndexedIndirectParametersSize = 5; /** Per-GPUFeatureName info. */ -export const kFeatureNameInfo = { +export const kFeatureNameInfo = + + +{ 'bgra8unorm-storage': {}, 'depth-clip-control': {}, 'depth32float-stencil8': {}, @@ -693,7 +811,13 @@ export const kFeatureNameInfo = { 'indirect-first-instance': {}, 'shader-f16': {}, 'rg11b10ufloat-renderable': {}, - 'float32-filterable': {}, + 'float32-filterable': {} }; /** List of all GPUFeatureName values. */ export const kFeatureNames = keysOf(kFeatureNameInfo); + +/** List of all known WGSL language features */ +export const kKnownWGSLLanguageFeatures = [ +'readonly_and_readwrite_storage_textures', +'packed_4x8_integer_dot_product', +'unrestricted_pointer_parameters']; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/createBindGroup.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/createBindGroup.spec.js new file mode 100644 index 00000000000..63cc2770883 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/createBindGroup.spec.js @@ -0,0 +1,178 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Tests that, in compat mode, the dimension of a view is compatible with a texture's textureBindingViewDimension. +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { kTextureDimensions, kTextureViewDimensions } from '../../../capability_info.js'; +import { + effectiveViewDimensionForTexture, + getTextureDimensionFromView } from +'../../../util/texture/base.js'; +import { CompatibilityTest } from '../../compatibility_test.js'; + +export const g = makeTestGroup(CompatibilityTest); + +function isTextureBindingViewDimensionCompatibleWithDimension( +dimension = '2d', +textureBindingViewDimension = '2d') +{ + return getTextureDimensionFromView(textureBindingViewDimension) === dimension; +} + +function isValidViewDimensionForDimension( +dimension, +depthOrArrayLayers, +viewDimension) +{ + if (viewDimension === undefined) { + return true; + } + + switch (dimension) { + case '1d': + return viewDimension === '1d'; + case '2d': + case undefined: + switch (viewDimension) { + case undefined: + case '2d': + case '2d-array': + return true; + case 'cube': + return depthOrArrayLayers === 6; + case 'cube-array': + return depthOrArrayLayers % 6 === 0; + default: + return false; + } + break; + case '3d': + return viewDimension === '3d'; + } +} + +function isValidDimensionForDepthOrArrayLayers( +dimension, +depthOrArrayLayers) +{ + switch (dimension) { + case '1d': + return depthOrArrayLayers === 1; + default: + return true; + } +} + +function isValidViewDimensionForDepthOrArrayLayers( +viewDimension, +depthOrArrayLayers) +{ + switch (viewDimension) { + case '2d': + return depthOrArrayLayers === 1; + case 'cube': + return depthOrArrayLayers === 6; + case 'cube-array': + return depthOrArrayLayers % 6 === 0; + default: + return true; + } + return viewDimension === 'cube'; +} + +function getEffectiveTextureBindingViewDimension( +dimension, +depthOrArrayLayers, +textureBindingViewDimension) +{ + if (textureBindingViewDimension) { + return textureBindingViewDimension; + } + + switch (dimension) { + case '1d': + return '1d'; + case '2d': + case undefined: + return depthOrArrayLayers > 1 ? '2d-array' : '2d'; + break; + case '3d': + return '3d'; + } +} + +g.test('viewDimension_matches_textureBindingViewDimension'). +desc( + ` + Tests that, in compat mode, the dimension of a view is compatible with a texture's textureBindingViewDimension + when used as a TEXTURE_BINDING. + ` +). +params((u) => +u // +.combine('dimension', [...kTextureDimensions, undefined]). +combine('textureBindingViewDimension', [...kTextureViewDimensions, undefined]). +combine('viewDimension', [...kTextureViewDimensions, undefined]). +combine('depthOrArrayLayers', [1, 2, 6]). +filter( + ({ dimension, textureBindingViewDimension, depthOrArrayLayers, viewDimension }) => + textureBindingViewDimension !== 'cube-array' && + viewDimension !== 'cube-array' && + isTextureBindingViewDimensionCompatibleWithDimension( + dimension, + textureBindingViewDimension + ) && + isValidViewDimensionForDimension(dimension, depthOrArrayLayers, viewDimension) && + isValidViewDimensionForDepthOrArrayLayers( + textureBindingViewDimension, + depthOrArrayLayers + ) && + isValidDimensionForDepthOrArrayLayers(dimension, depthOrArrayLayers) +) +). +fn((t) => { + const { dimension, textureBindingViewDimension, viewDimension, depthOrArrayLayers } = t.params; + + const texture = t.device.createTexture({ + size: [1, 1, depthOrArrayLayers], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING, + ...(dimension && { dimension }), + ...(textureBindingViewDimension && { textureBindingViewDimension }) + }); // MAINTENANCE_TODO: remove cast once textureBindingViewDimension is added to IDL + t.trackForCleanup(texture); + + const effectiveTextureBindingViewDimension = getEffectiveTextureBindingViewDimension( + dimension, + texture.depthOrArrayLayers, + textureBindingViewDimension + ); + + const effectiveViewDimension = getEffectiveTextureBindingViewDimension( + dimension, + texture.depthOrArrayLayers, + viewDimension + ); + + const layout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + texture: { + viewDimension: effectiveViewDimensionForTexture(texture, viewDimension) + } + }] + + }); + + const resource = texture.createView({ dimension: viewDimension }); + const shouldError = effectiveTextureBindingViewDimension !== effectiveViewDimension; + + t.expectValidationError(() => { + t.device.createBindGroup({ + layout, + entries: [{ binding: 0, resource }] + }); + }, shouldError); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToBuffer.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToBuffer.spec.js index b2d8d247177..30db0b1a40f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToBuffer.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToBuffer.spec.js @@ -1,45 +1,44 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests limitations of copyTextureToBuffer in compat mode. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { kCompressedTextureFormats, kTextureFormatInfo } from '../../../../../format_info.js'; import { align } from '../../../../../util/math.js'; import { CompatibilityTest } from '../../../../compatibility_test.js'; export const g = makeTestGroup(CompatibilityTest); -g.test('compressed') - .desc(`Tests that you can not call copyTextureToBuffer with compressed textures in compat mode.`) - .params(u => u.combine('format', kCompressedTextureFormats)) - .beforeAllSubcases(t => { - const { format } = t.params; - t.selectDeviceOrSkipTestCase([kTextureFormatInfo[format].feature]); - }) - .fn(t => { - const { format } = t.params; +g.test('compressed'). +desc(`Tests that you can not call copyTextureToBuffer with compressed textures in compat mode.`). +params((u) => u.combine('format', kCompressedTextureFormats)). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase([kTextureFormatInfo[format].feature]); +}). +fn((t) => { + const { format } = t.params; - const { blockWidth, blockHeight, bytesPerBlock } = kTextureFormatInfo[format]; + const { blockWidth, blockHeight, bytesPerBlock } = kTextureFormatInfo[format]; - const texture = t.device.createTexture({ - size: [blockWidth, blockHeight, 1], - format, - usage: GPUTextureUsage.COPY_SRC, - }); - t.trackForCleanup(texture); - - const bytesPerRow = align(bytesPerBlock, 256); - - const buffer = t.device.createBuffer({ - size: bytesPerRow, - usage: GPUBufferUsage.COPY_DST, - }); - t.trackForCleanup(buffer); - - const encoder = t.device.createCommandEncoder(); - encoder.copyTextureToBuffer({ texture }, { buffer, bytesPerRow }, [blockWidth, blockHeight, 1]); - t.expectGPUError('validation', () => { - encoder.finish(); - }); + const texture = t.device.createTexture({ + size: [blockWidth, blockHeight, 1], + format, + usage: GPUTextureUsage.COPY_SRC }); + t.trackForCleanup(texture); + + const bytesPerRow = align(bytesPerBlock, 256); + + const buffer = t.device.createBuffer({ + size: bytesPerRow, + usage: GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(buffer); + + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToBuffer({ texture }, { buffer, bytesPerRow }, [blockWidth, blockHeight, 1]); + t.expectGPUError('validation', () => { + encoder.finish(); + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToTexture.spec.js new file mode 100644 index 00000000000..e8663932017 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/cmds/copyTextureToTexture.spec.js @@ -0,0 +1,48 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Tests limitations of copyTextureToTextures in compat mode. +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { kCompressedTextureFormats, kTextureFormatInfo } from '../../../../../format_info.js'; +import { CompatibilityTest } from '../../../../compatibility_test.js'; + +export const g = makeTestGroup(CompatibilityTest); + +g.test('compressed'). +desc( + `Tests that you can not call copyTextureToTextures with compressed textures in compat mode.` +). +params((u) => u.combine('format', kCompressedTextureFormats)). +beforeAllSubcases((t) => { + const { format } = t.params; + t.selectDeviceOrSkipTestCase([kTextureFormatInfo[format].feature]); +}). +fn((t) => { + const { format } = t.params; + + const { blockWidth, blockHeight } = kTextureFormatInfo[format]; + + const srcTexture = t.device.createTexture({ + size: [blockWidth, blockHeight, 1], + format, + usage: GPUTextureUsage.COPY_SRC + }); + t.trackForCleanup(srcTexture); + + const dstTexture = t.device.createTexture({ + size: [blockWidth, blockHeight, 1], + format, + usage: GPUTextureUsage.COPY_DST + }); + t.trackForCleanup(dstTexture); + + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToTexture({ texture: srcTexture }, { texture: dstTexture }, [ + blockWidth, + blockHeight, + 1] + ); + t.expectGPUError('validation', () => { + encoder.finish(); + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js index 33952b9e53b..8a3d64fe549 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/encoding/programmable/pipeline_bind_group_compat.spec.js @@ -1,24 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests limitations of bind group usage in a pipeline in compat mode. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../common/util/data_tables.js'; import { kRenderEncodeTypes } from '../../../../../util/command_buffer_maker.js'; import { CompatibilityTest } from '../../../../compatibility_test.js'; const kTextureTypes = ['regular', 'storage']; + function getTextureTypeWGSL(textureType) { return textureType === 'storage' ? 'texture_storage_2d' : 'texture_2d'; } + + + /** * Gets the WGSL needed for testing a render pipeline using texture_2d or texture_storage_2d * and either 2 bindgroups or 1 */ -function getRenderShaderModule(device, textureType, bindConfig) { +function getRenderShaderModule( +device, +textureType, +bindConfig) +{ const textureTypeWGSL = getTextureTypeWGSL(textureType); const secondGroup = bindConfig === 'one bindgroup' ? 0 : 1; const secondBinding = secondGroup === 0 ? 1 : 0; @@ -42,7 +49,7 @@ function getRenderShaderModule(device, textureType, bindConfig) { _ = tex1; return vec4f(0); } - `, + ` }); } @@ -50,7 +57,11 @@ function getRenderShaderModule(device, textureType, bindConfig) { * Gets the WGSL needed for testing a compute pipeline using texture_2d or texture_storage_2d * and either 2 bindgroups or 1 */ -function getComputeShaderModule(device, textureType, bindConfig) { +function getComputeShaderModule( +device, +textureType, +bindConfig) +{ const textureTypeWGSL = getTextureTypeWGSL(textureType); const secondGroup = bindConfig === 'one bindgroup' ? 0 : 1; const secondBinding = secondGroup === 0 ? 1 : 0; @@ -64,24 +75,38 @@ function getComputeShaderModule(device, textureType, bindConfig) { _ = tex0; _ = tex1; } - `, + ` }); } -const kBindCases = { + + +const kBindCases = + + + + + + + + + + + +{ 'incompatible views in the same bindGroup': { bindConfig: 'one bindgroup', fn(device, pipeline, encoder, texture) { const bindGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }, - { binding: 1, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }, + { binding: 1, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] + }); encoder.setBindGroup(0, bindGroup); return { shouldSucceed: false }; - }, + } }, 'incompatible views in different bindGroups': { bindConfig: 'two bindgroups', @@ -89,19 +114,19 @@ const kBindCases = { const bindGroup0 = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }] + }); const bindGroup1 = device.createBindGroup({ layout: pipeline.getBindGroupLayout(1), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] + }); encoder.setBindGroup(0, bindGroup0); encoder.setBindGroup(1, bindGroup1); return { shouldSucceed: false }; - }, + } }, 'can bind same view in different bindGroups': { bindConfig: 'two bindgroups', @@ -109,19 +134,19 @@ const kBindCases = { const bindGroup0 = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] + }); const bindGroup1 = device.createBindGroup({ layout: pipeline.getBindGroupLayout(1), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] + }); encoder.setBindGroup(0, bindGroup0); encoder.setBindGroup(1, bindGroup1); return { shouldSucceed: true }; - }, + } }, 'binding incompatible bindGroups then fix': { bindConfig: 'one bindgroup', @@ -129,37 +154,37 @@ const kBindCases = { const badBindGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }, - { binding: 1, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }, + { binding: 1, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] + }); const goodBindGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - { binding: 1, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, - ], + { binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }, + { binding: 1, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] + }); encoder.setBindGroup(0, badBindGroup); encoder.setBindGroup(0, goodBindGroup); return { shouldSucceed: true }; - }, - }, + } + } }; function createAndBindTwoBindGroupsWithDifferentViewsOfSameTexture( - device, - pipeline, - encoder, - texture -) { +device, +pipeline, +encoder, +texture) +{ const bindGroup0 = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }], + entries: [{ binding: 0, resource: texture.createView({ baseMipLevel: 0, mipLevelCount: 1 }) }] }); const bindGroup1 = device.createBindGroup({ layout: pipeline.getBindGroupLayout(1), - entries: [{ binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }], + entries: [{ binding: 0, resource: texture.createView({ baseMipLevel: 1, mipLevelCount: 1 }) }] }); encoder.setBindGroup(0, bindGroup0); encoder.setBindGroup(1, bindGroup1); @@ -167,8 +192,10 @@ function createAndBindTwoBindGroupsWithDifferentViewsOfSameTexture( const kBindCaseNames = keysOf(kBindCases); -const kDrawUseCases = { - draw: (t, encoder) => { +const kDrawUseCases = + +{ + draw: (_t, encoder) => { encoder.draw(3); }, drawIndexed: (t, encoder) => { @@ -181,7 +208,6 @@ const kDrawUseCases = { new Uint32Array([3, 1, 0, 0]), GPUBufferUsage.INDIRECT ); - encoder.drawIndirect(indirectBuffer, 0); }, drawIndexedIndirect(t, encoder) { @@ -191,14 +217,15 @@ const kDrawUseCases = { new Uint32Array([3, 1, 0, 0, 0]), GPUBufferUsage.INDIRECT ); - encoder.drawIndexedIndirect(indirectBuffer, 0); - }, + } }; const kDrawCaseNames = keysOf(kDrawUseCases); -const kDispatchUseCases = { - dispatchWorkgroups(t, encoder) { +const kDispatchUseCases = + +{ + dispatchWorkgroups(_t, encoder) { encoder.dispatchWorkgroups(1); }, dispatchWorkgroupsIndirect(t, encoder) { @@ -206,19 +233,22 @@ const kDispatchUseCases = { new Uint32Array([1, 1, 1]), GPUBufferUsage.INDIRECT ); - encoder.dispatchWorkgroupsIndirect(indirectBuffer, 0); - }, + } }; const kDispatchCaseNames = keysOf(kDispatchUseCases); -function createResourcesForRenderPassTest(t, textureType, bindConfig) { +function createResourcesForRenderPassTest( +t, +textureType, +bindConfig) +{ const texture = t.device.createTexture({ size: [2, 1, 1], mipLevelCount: 2, format: 'rgba8unorm', usage: - textureType === 'storage' ? GPUTextureUsage.STORAGE_BINDING : GPUTextureUsage.TEXTURE_BINDING, + textureType === 'storage' ? GPUTextureUsage.STORAGE_BINDING : GPUTextureUsage.TEXTURE_BINDING }); t.trackForCleanup(texture); @@ -227,25 +257,29 @@ function createResourcesForRenderPassTest(t, textureType, bindConfig) { layout: 'auto', vertex: { module, - entryPoint: 'vs', + entryPoint: 'vs' }, fragment: { module, entryPoint: 'fs', - targets: [{ format: 'rgba8unorm' }], - }, + targets: [{ format: 'rgba8unorm' }] + } }); return { texture, pipeline }; } -function createResourcesForComputePassTest(t, textureType, bindConfig) { +function createResourcesForComputePassTest( +t, +textureType, +bindConfig) +{ const texture = t.device.createTexture({ size: [2, 1, 1], mipLevelCount: 2, format: 'rgba8unorm', usage: - textureType === 'storage' ? GPUTextureUsage.STORAGE_BINDING : GPUTextureUsage.TEXTURE_BINDING, + textureType === 'storage' ? GPUTextureUsage.STORAGE_BINDING : GPUTextureUsage.TEXTURE_BINDING }); t.trackForCleanup(texture); @@ -254,8 +288,8 @@ function createResourcesForComputePassTest(t, textureType, bindConfig) { layout: 'auto', compute: { module, - entryPoint: 'cs', - }, + entryPoint: 'cs' + } }); return { texture, pipeline }; @@ -263,9 +297,9 @@ function createResourcesForComputePassTest(t, textureType, bindConfig) { export const g = makeTestGroup(CompatibilityTest); -g.test('twoDifferentTextureViews,render_pass,used') - .desc( - ` +g.test('twoDifferentTextureViews,render_pass,used'). +desc( + ` Tests that you can not use 2 different views of the same texture in a render pass in compat mode. - Test you can not use incompatible views in the same bindGroup @@ -276,60 +310,59 @@ Tests that you can not use 2 different views of the same texture in a render pas The last test is to check validation happens at the correct time (draw/dispatch) and not at setBindGroup. ` - ) - .params(u => - u - .combine('encoderType', kRenderEncodeTypes) - .combine('bindCase', kBindCaseNames) - .combine('useCase', kDrawCaseNames) - .combine('textureType', kTextureTypes) - .filter( - // storage textures can't have 2 bind groups point to the same - // view even in non-compat. They can have different views in - // non-compat but not compat. - p => - !( - p.textureType === 'storage' && - (p.bindCase === 'can bind same view in different bindGroups' || - p.bindCase === 'binding incompatible bindGroups then fix') - ) - ) - ) - .fn(t => { - const { encoderType, bindCase, useCase, textureType } = t.params; - const { bindConfig, fn } = kBindCases[bindCase]; - const { texture, pipeline } = createResourcesForRenderPassTest(t, textureType, bindConfig); - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - const { shouldSucceed } = fn(t.device, pipeline, encoder, texture); - kDrawUseCases[useCase](t, encoder); - validateFinish(shouldSucceed); - }); +). +params((u) => +u. +combine('encoderType', kRenderEncodeTypes). +combine('bindCase', kBindCaseNames). +combine('useCase', kDrawCaseNames). +combine('textureType', kTextureTypes). +filter( + // storage textures can't have 2 bind groups point to the same + // view even in non-compat. They can have different views in + // non-compat but not compat. + (p) => + !( + p.textureType === 'storage' && ( + p.bindCase === 'can bind same view in different bindGroups' || + p.bindCase === 'binding incompatible bindGroups then fix')) -g.test('twoDifferentTextureViews,render_pass,unused') - .desc( - ` +) +). +fn((t) => { + const { encoderType, bindCase, useCase, textureType } = t.params; + const { bindConfig, fn } = kBindCases[bindCase]; + const { texture, pipeline } = createResourcesForRenderPassTest(t, textureType, bindConfig); + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + const { shouldSucceed } = fn(t.device, pipeline, encoder, texture); + kDrawUseCases[useCase](t, encoder); + validateFinish(shouldSucceed); +}); + +g.test('twoDifferentTextureViews,render_pass,unused'). +desc( + ` Tests that binding 2 different views of the same texture but not using them does not generate a validation error. ` - ) - .params(u => u.combine('encoderType', kRenderEncodeTypes).combine('textureType', kTextureTypes)) - .fn(t => { - const { encoderType, textureType } = t.params; - const { texture, pipeline } = createResourcesForRenderPassTest( - t, - textureType, - 'two bindgroups' - ); +). +params((u) => u.combine('encoderType', kRenderEncodeTypes).combine('textureType', kTextureTypes)). +fn((t) => { + const { encoderType, textureType } = t.params; + const { texture, pipeline } = createResourcesForRenderPassTest( + t, + textureType, + 'two bindgroups' + ); + const { encoder, validateFinish } = t.createEncoder(encoderType); + encoder.setPipeline(pipeline); + createAndBindTwoBindGroupsWithDifferentViewsOfSameTexture(t.device, pipeline, encoder, texture); + validateFinish(true); +}); - const { encoder, validateFinish } = t.createEncoder(encoderType); - encoder.setPipeline(pipeline); - createAndBindTwoBindGroupsWithDifferentViewsOfSameTexture(t.device, pipeline, encoder, texture); - validateFinish(true); - }); - -g.test('twoDifferentTextureViews,compute_pass,used') - .desc( - ` +g.test('twoDifferentTextureViews,compute_pass,used'). +desc( + ` Tests that you can not use 2 different views of the same texture in a compute pass in compat mode. - Test you can not use incompatible views in the same bindGroup @@ -340,52 +373,51 @@ Tests that you can not use 2 different views of the same texture in a compute pa The last test is to check validation happens at the correct time (draw/dispatch) and not at setBindGroup. ` - ) - .params(u => - u - .combine('bindCase', kBindCaseNames) - .combine('useCase', kDispatchCaseNames) - .combine('textureType', kTextureTypes) - .filter( - // storage textures can't have 2 bind groups point to the same - // view even in non-compat. They can have different views in - // non-compat but not compat. - p => - !( - p.textureType === 'storage' && - (p.bindCase === 'can bind same view in different bindGroups' || - p.bindCase === 'binding incompatible bindGroups then fix') - ) - ) - ) - .fn(t => { - const { bindCase, useCase, textureType } = t.params; - const { bindConfig, fn } = kBindCases[bindCase]; - const { texture, pipeline } = createResourcesForComputePassTest(t, textureType, bindConfig); - const { encoder, validateFinish } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - const { shouldSucceed } = fn(t.device, pipeline, encoder, texture); - kDispatchUseCases[useCase](t, encoder); - validateFinish(shouldSucceed); - }); +). +params((u) => +u. +combine('bindCase', kBindCaseNames). +combine('useCase', kDispatchCaseNames). +combine('textureType', kTextureTypes). +filter( + // storage textures can't have 2 bind groups point to the same + // view even in non-compat. They can have different views in + // non-compat but not compat. + (p) => + !( + p.textureType === 'storage' && ( + p.bindCase === 'can bind same view in different bindGroups' || + p.bindCase === 'binding incompatible bindGroups then fix')) -g.test('twoDifferentTextureViews,compute_pass,unused') - .desc( - ` +) +). +fn((t) => { + const { bindCase, useCase, textureType } = t.params; + const { bindConfig, fn } = kBindCases[bindCase]; + const { texture, pipeline } = createResourcesForComputePassTest(t, textureType, bindConfig); + const { encoder, validateFinish } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + const { shouldSucceed } = fn(t.device, pipeline, encoder, texture); + kDispatchUseCases[useCase](t, encoder); + validateFinish(shouldSucceed); +}); + +g.test('twoDifferentTextureViews,compute_pass,unused'). +desc( + ` Tests that binding 2 different views of the same texture but not using them does not generate a validation error. ` - ) - .params(u => u.combine('textureType', kTextureTypes)) - .fn(t => { - const { textureType } = t.params; - const { texture, pipeline } = createResourcesForComputePassTest( - t, - textureType, - 'two bindgroups' - ); - - const { encoder, validateFinish } = t.createEncoder('compute pass'); - encoder.setPipeline(pipeline); - createAndBindTwoBindGroupsWithDifferentViewsOfSameTexture(t.device, pipeline, encoder, texture); - validateFinish(true); - }); +). +params((u) => u.combine('textureType', kTextureTypes)). +fn((t) => { + const { textureType } = t.params; + const { texture, pipeline } = createResourcesForComputePassTest( + t, + textureType, + 'two bindgroups' + ); + const { encoder, validateFinish } = t.createEncoder('compute pass'); + encoder.setPipeline(pipeline); + createAndBindTwoBindGroupsWithDifferentViewsOfSameTexture(t.device, pipeline, encoder, texture); + validateFinish(true); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/fragment_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/fragment_state.spec.js index b3c79f67528..b3c41daafa0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/fragment_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/fragment_state.spec.js @@ -1,16 +1,17 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that you can not create a render pipeline with different per target blend state or write mask in compat mode. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../common/util/data_tables.js'; import { CompatibilityTest } from '../../../compatibility_test.js'; export const g = makeTestGroup(CompatibilityTest); + + const cases = { - default(targets) { + default(_targets) { return true; }, noBlendTarget0(targets) { @@ -48,26 +49,26 @@ const cases = { writeMask(targets) { targets[2].writeMask = GPUColorWrite.GREEN; return false; - }, + } }; const caseNames = keysOf(cases); -g.test('colorState') - .desc( - ` +g.test('colorState'). +desc( + ` Tests that you can not create a render pipeline with different per target blend state or write mask in compat mode. - Test no blend state vs some blend state - Test different operation, srcFactor, dstFactor for color and alpha - Test different writeMask ` - ) - .params(u => u.combine('caseName', caseNames)) - .fn(t => { - const { caseName } = t.params; +). +params((u) => u.combine('caseName', caseNames)). +fn((t) => { + const { caseName } = t.params; - const module = t.device.createShaderModule({ - code: ` + const module = t.device.createShaderModule({ + code: ` @vertex fn vs() -> @builtin(position) vec4f { return vec4f(0); } @@ -85,43 +86,43 @@ Tests that you can not create a render pipeline with different per target blend output.fragColor2 = vec4f(0); return output; } - `, - }); - - const targets = [ - { - format: 'rgba8unorm', - blend: { - color: {}, - alpha: {}, - }, - }, - null, - { - format: 'rgba8unorm', - blend: { - color: {}, - alpha: {}, - }, - }, - ]; - - const pipelineDescriptor = { - layout: 'auto', - vertex: { - module, - entryPoint: 'vs', - }, - fragment: { - module, - entryPoint: 'fs', - targets, - }, - }; - const isValid = cases[caseName](targets); - t.expectGPUError( - 'validation', - () => t.device.createRenderPipeline(pipelineDescriptor), - !isValid - ); + ` }); + + const targets = [ + { + format: 'rgba8unorm', + blend: { + color: {}, + alpha: {} + } + }, + null, + { + format: 'rgba8unorm', + blend: { + color: {}, + alpha: {} + } + }]; + + + const pipelineDescriptor = { + layout: 'auto', + vertex: { + module, + entryPoint: 'vs' + }, + fragment: { + module, + entryPoint: 'fs', + targets + } + }; + const isValid = cases[caseName](targets); + t.expectGPUError( + 'validation', + () => t.device.createRenderPipeline(pipelineDescriptor), + !isValid + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/shader_module.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/shader_module.spec.js index b20e11b3ae4..da7a35dfd28 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/shader_module.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/shader_module.spec.js @@ -1,29 +1,30 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests limitations of createRenderPipeline related to shader modules in compat mode. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { CompatibilityTest } from '../../../compatibility_test.js'; export const g = makeTestGroup(CompatibilityTest); -g.test('sample_mask') - .desc( - ` +g.test('sample_mask'). +desc( + ` Tests that you can not create a render pipeline with a shader module that uses sample_mask in compat mode. - Test that a pipeline with a shader that uses sample_mask fails. - Test that a pipeline that references a module that has a shader that uses sample_mask but the pipeline does not reference that shader succeeds. ` - ) - .params(u => u.combine('entryPoint', ['fsWithoutSampleMaskUsage', 'fsWithSampleMaskUsage'])) - .fn(t => { - const { entryPoint } = t.params; +). +params((u) => +u.combine('entryPoint', ['fsWithoutSampleMaskUsage', 'fsWithSampleMaskUsage']) +). +fn((t) => { + const { entryPoint } = t.params; - const module = t.device.createShaderModule({ - code: ` + const module = t.device.createShaderModule({ + code: ` @vertex fn vs() -> @builtin(position) vec4f { return vec4f(1); } @@ -41,33 +42,113 @@ Tests that you can not create a render pipeline with a shader module that uses s o.color = vec4f(1.0, 1.0, 1.0, 1.0); return o; } - `, - }); - - const pipelineDescriptor = { - layout: 'auto', - vertex: { - module, - entryPoint: 'vs', - }, - fragment: { - module, - entryPoint, - targets: [ - { - format: 'rgba8unorm', - }, - ], - }, - multisample: { - count: 4, - }, - }; - - const isValid = entryPoint === 'fsWithoutSampleMaskUsage'; - t.expectGPUError( - 'validation', - () => t.device.createRenderPipeline(pipelineDescriptor), - !isValid - ); + ` }); + + const pipelineDescriptor = { + layout: 'auto', + vertex: { + module, + entryPoint: 'vs' + }, + fragment: { + module, + entryPoint, + targets: [ + { + format: 'rgba8unorm' + }] + + }, + multisample: { + count: 4 + } + }; + + const isValid = entryPoint === 'fsWithoutSampleMaskUsage'; + t.expectGPUError( + 'validation', + () => t.device.createRenderPipeline(pipelineDescriptor), + !isValid + ); +}); + +g.test('interpolate'). +desc( + ` +Tests that you can not create a render pipeline with a shader module that uses interpolate(linear) nor interpolate(...,sample) in compat mode. + +- Test that a pipeline with a shader that uses interpolate(linear) or interpolate(sample) fails. +- Test that a pipeline that references a module that has a shader that uses interpolate(linear/sample) + but the pipeline does not reference that shader succeeds. + ` +). +params((u) => +u. +combine('interpolate', [ +'', +'@interpolate(linear)', +'@interpolate(linear, sample)', +'@interpolate(perspective, sample)'] +). +combine('entryPoint', [ +'fsWithoutInterpolationUsage', +'fsWithInterpolationUsage1', +'fsWithInterpolationUsage2', +'fsWithInterpolationUsage3'] +) +). +fn((t) => { + const { entryPoint, interpolate } = t.params; + + const module = t.device.createShaderModule({ + code: ` + struct Vertex { + @builtin(position) pos: vec4f, + @location(0) ${interpolate} color : vec4f, + }; + @vertex fn vs() -> Vertex { + var v: Vertex; + v.pos = vec4f(1); + v.color = vec4f(1); + return v; + } + @fragment fn fsWithoutInterpolationUsage() -> @location(0) vec4f { + return vec4f(1); + } + @fragment fn fsWithInterpolationUsage1(v: Vertex) -> @location(0) vec4f { + return vec4f(1); + } + @fragment fn fsWithInterpolationUsage2(v: Vertex) -> @location(0) vec4f { + return v.pos; + } + @fragment fn fsWithInterpolationUsage3(v: Vertex) -> @location(0) vec4f { + return v.color; + } + ` + }); + + const pipelineDescriptor = { + layout: 'auto', + vertex: { + module, + entryPoint: 'vs' + }, + fragment: { + module, + entryPoint, + targets: [ + { + format: 'rgba8unorm' + }] + + } + }; + + const isValid = entryPoint === 'fsWithoutInterpolationUsage' || interpolate === ''; + t.expectGPUError( + 'validation', + () => t.device.createRenderPipeline(pipelineDescriptor), + !isValid + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/vertex_state.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/vertex_state.spec.js index c1c12910812..d5ba060e836 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/vertex_state.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/render_pipeline/vertex_state.spec.js @@ -1,17 +1,16 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests limitations of createRenderPipeline related to vertex state in compat mode. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { range } from '../../../../../common/util/util.js'; import { CompatibilityTest } from '../../../compatibility_test.js'; export const g = makeTestGroup(CompatibilityTest); -g.test('maxVertexAttributesVertexIndexInstanceIndex') - .desc( - ` +g.test('maxVertexAttributesVertexIndexInstanceIndex'). +desc( + ` Tests @builtin(vertex_index) and @builtin(instance_index) each count as an attribute. - Test that you can use maxVertexAttributes @@ -22,71 +21,71 @@ Tests @builtin(vertex_index) and @builtin(instance_index) each count as an attri - Test that you can not use maxVertexAttributes - 1 and both @builtin(vertex_index) and @builtin(instance_index) - Test that you can use maxVertexAttributes - 2 and both @builtin(vertex_index) and @builtin(instance_index) ` - ) - .params(u => - u - .combine('useVertexIndex', [false, true]) - .combine('useInstanceIndex', [false, true]) - .combine('numAttribsToReserve', [0, 1, 2]) - .combine('isAsync', [false, true]) - ) - .fn(t => { - const { useVertexIndex, useInstanceIndex, numAttribsToReserve, isAsync } = t.params; - const numAttribs = t.device.limits.maxVertexAttributes - numAttribsToReserve; +). +params((u) => +u. +combine('useVertexIndex', [false, true]). +combine('useInstanceIndex', [false, true]). +combine('numAttribsToReserve', [0, 1, 2]). +combine('isAsync', [false, true]) +). +fn((t) => { + const { useVertexIndex, useInstanceIndex, numAttribsToReserve, isAsync } = t.params; + const numAttribs = t.device.limits.maxVertexAttributes - numAttribsToReserve; - const numBuiltinsUsed = (useVertexIndex ? 1 : 0) + (useInstanceIndex ? 1 : 0); - const isValid = numAttribs + numBuiltinsUsed <= t.device.limits.maxVertexAttributes; + const numBuiltinsUsed = (useVertexIndex ? 1 : 0) + (useInstanceIndex ? 1 : 0); + const isValid = numAttribs + numBuiltinsUsed <= t.device.limits.maxVertexAttributes; - const inputs = range(numAttribs, i => `@location(${i}) v${i}: vec4f`); - const outputs = range(numAttribs, i => `v${i}`); + const inputs = range(numAttribs, (i) => `@location(${i}) v${i}: vec4f`); + const outputs = range(numAttribs, (i) => `v${i}`); - if (useVertexIndex) { - inputs.push('@builtin(vertex_index) vNdx: u32'); - outputs.push('vec4f(f32(vNdx))'); - } + if (useVertexIndex) { + inputs.push('@builtin(vertex_index) vNdx: u32'); + outputs.push('vec4f(f32(vNdx))'); + } - if (useInstanceIndex) { - inputs.push('@builtin(instance_index) iNdx: u32'); - outputs.push('vec4f(f32(iNdx))'); - } + if (useInstanceIndex) { + inputs.push('@builtin(instance_index) iNdx: u32'); + outputs.push('vec4f(f32(iNdx))'); + } - const module = t.device.createShaderModule({ - code: ` + const module = t.device.createShaderModule({ + code: ` @fragment fn fs() -> @location(0) vec4f { return vec4f(1); } @vertex fn vs(${inputs.join(', ')}) -> @builtin(position) vec4f { return ${outputs.join(' + ')}; } - `, - }); - - const pipelineDescriptor = { - layout: 'auto', - vertex: { - module, - entryPoint: 'vs', - buffers: [ - { - arrayStride: 16, - attributes: range(numAttribs, i => ({ - shaderLocation: i, - format: 'float32x4', - offset: 0, - })), - }, - ], - }, - fragment: { - module, - entryPoint: 'fs', - targets: [ - { - format: 'rgba8unorm', - }, - ], - }, - }; - - t.doCreateRenderPipelineTest(isAsync, isValid, pipelineDescriptor); + ` }); + + const pipelineDescriptor = { + layout: 'auto', + vertex: { + module, + entryPoint: 'vs', + buffers: [ + { + arrayStride: 16, + attributes: range(numAttribs, (i) => ({ + shaderLocation: i, + format: 'float32x4', + offset: 0 + })) + }] + + }, + fragment: { + module, + entryPoint: 'fs', + targets: [ + { + format: 'rgba8unorm' + }] + + } + }; + + t.doCreateRenderPipelineTest(isAsync, isValid, pipelineDescriptor); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/createTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/createTexture.spec.js index 9104a4293fa..6a108c6da11 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/createTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/createTexture.spec.js @@ -1,42 +1,155 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that you can not use bgra8unorm-srgb in compat mode. +Tests that textureBindingViewDimension must compatible with texture dimension `; import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +import { kTextureDimensions, kTextureViewDimensions } from '../../../../capability_info.js'; +import { kColorTextureFormats, kTextureFormatInfo } from '../../../../format_info.js'; +import { getTextureDimensionFromView } from '../../../../util/texture/base.js'; import { CompatibilityTest } from '../../../compatibility_test.js'; export const g = makeTestGroup(CompatibilityTest); -g.test('unsupportedTextureFormats') - .desc(`Tests that you can not create a bgra8unorm-srgb texture in compat mode.`) - .fn(t => { - t.expectGPUError( - 'validation', - () => - t.device.createTexture({ - size: [1, 1, 1], - format: 'bgra8unorm-srgb', - usage: GPUTextureUsage.TEXTURE_BINDING, - }), - true - ); - }); +g.test('unsupportedTextureFormats'). +desc(`Tests that you can not create a bgra8unorm-srgb texture in compat mode.`). +fn((t) => { + t.expectGPUError( + 'validation', + () => + t.device.createTexture({ + size: [1, 1, 1], + format: 'bgra8unorm-srgb', + usage: GPUTextureUsage.TEXTURE_BINDING + }), + true + ); +}); -g.test('unsupportedTextureViewFormats') - .desc( - `Tests that you can not create a bgra8unorm texture with a bgra8unorm-srgb viewFormat in compat mode.` - ) - .fn(t => { +g.test('unsupportedTextureViewFormats'). +desc( + `Tests that you can not create a bgra8unorm texture with a bgra8unorm-srgb viewFormat in compat mode.` +). +fn((t) => { + t.expectGPUError( + 'validation', + () => + t.device.createTexture({ + size: [1, 1, 1], + format: 'bgra8unorm', + viewFormats: ['bgra8unorm-srgb'], + usage: GPUTextureUsage.TEXTURE_BINDING + }), + true + ); +}); + +g.test('invalidTextureBindingViewDimension'). +desc( + `Tests that you can not specify a textureBindingViewDimension that is incompatible with the texture's dimension.` +). +params((u) => +u // +.combine('dimension', kTextureDimensions). +combine('textureBindingViewDimension', kTextureViewDimensions) +). +fn((t) => { + const { dimension, textureBindingViewDimension } = t.params; + const depthOrArrayLayers = textureBindingViewDimension === '1d' || textureBindingViewDimension === '2d' ? 1 : 6; + const shouldError = getTextureDimensionFromView(textureBindingViewDimension) !== dimension; + t.expectGPUError( + 'validation', + () => { + const texture = t.device.createTexture({ + size: [1, 1, depthOrArrayLayers], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING, + dimension, + textureBindingViewDimension + }); // MAINTENANCE_TODO: remove cast once textureBindingViewDimension is added to IDL + t.trackForCleanup(texture); + }, + shouldError + ); +}); + +g.test('depthOrArrayLayers_incompatible_with_textureBindingViewDimension'). +desc( + `Tests + * if textureBindingViewDimension is '2d' then depthOrArrayLayers must be 1 + * if textureBindingViewDimension is 'cube' then depthOrArrayLayers must be 6 + ` +). +params((u) => +u // +.combine('textureBindingViewDimension', ['2d', 'cube']). +combine('depthOrArrayLayers', [1, 3, 6, 12]) +). +fn((t) => { + const { textureBindingViewDimension, depthOrArrayLayers } = t.params; + const shouldError = + textureBindingViewDimension === '2d' && depthOrArrayLayers !== 1 || + textureBindingViewDimension === 'cube' && depthOrArrayLayers !== 6; + t.expectGPUError( + 'validation', + () => { + const texture = t.device.createTexture({ + size: [1, 1, depthOrArrayLayers], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING, + textureBindingViewDimension + }); // MAINTENANCE_TODO: remove cast once textureBindingViewDimension is added to IDL + t.trackForCleanup(texture); + }, + shouldError + ); +}); + +g.test('format_reinterpretation'). +desc( + ` + Tests that you can not request different view formats when creating a texture. + For example, rgba8unorm can not be viewed as rgba8unorm-srgb + ` +). +params((u) => +u // +.combine('format', kColorTextureFormats). +filter( + ({ format }) => + !!kTextureFormatInfo[format].baseFormat && + kTextureFormatInfo[format].baseFormat !== format +) +). +beforeAllSubcases((t) => { + const info = kTextureFormatInfo[t.params.format]; + t.skipIfTextureFormatNotSupported(t.params.format); + t.selectDeviceOrSkipTestCase(info.feature); +}). +fn((t) => { + const { format } = t.params; + const info = kTextureFormatInfo[format]; + + const formatPairs = [ + { format, viewFormats: [info.baseFormat] }, + { format: info.baseFormat, viewFormats: [format] }, + { format, viewFormats: [format, info.baseFormat] }, + { format: info.baseFormat, viewFormats: [format, info.baseFormat] }]; + + for (const { format, viewFormats } of formatPairs) { t.expectGPUError( 'validation', - () => - t.device.createTexture({ - size: [1, 1, 1], - format: 'bgra8unorm', - viewFormats: ['bgra8unorm-srgb'], - usage: GPUTextureUsage.TEXTURE_BINDING, - }), + () => { + const texture = t.device.createTexture({ + size: [info.blockWidth, info.blockHeight], + format, + viewFormats, + usage: GPUTextureUsage.TEXTURE_BINDING + }); + t.trackForCleanup(texture); + }, true ); - }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/cubeArray.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/cubeArray.spec.js index 9222c336c0f..ed3c96ec346 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/cubeArray.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/api/validation/texture/cubeArray.spec.js @@ -1,27 +1,26 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that you can not create cube array views in compat mode. -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { CompatibilityTest } from '../../../compatibility_test.js'; export const g = makeTestGroup(CompatibilityTest); -g.test('cube_array') - .desc('Test you cannot create a cube array texture view.') - .params(u => u.combine('dimension', ['cube', 'cube-array'])) - .fn(t => { - const { dimension } = t.params; - const texture = t.device.createTexture({ - size: [1, 1, 6], - format: 'rgba8unorm', - usage: GPUTextureUsage.TEXTURE_BINDING, - }); - - const isValid = dimension === 'cube'; - t.expectGPUError( - 'validation', - () => texture.createView({ dimension, format: 'rgba8unorm' }), - !isValid - ); +g.test('cube_array'). +desc('Test you cannot create a cube array texture view.'). +params((u) => u.combine('dimension', ['cube', 'cube-array'])). +fn((t) => { + const { dimension } = t.params; + const texture = t.device.createTexture({ + size: [1, 1, 6], + format: 'rgba8unorm', + usage: GPUTextureUsage.TEXTURE_BINDING }); + + const isValid = dimension === 'cube'; + t.expectGPUError( + 'validation', + () => texture.createView({ dimension, format: 'rgba8unorm' }), + !isValid + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/compatibility_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/compatibility_test.js index f611626d4f0..217dbc0ac10 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/compat/compatibility_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/compat/compatibility_test.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { ValidationTest } from '../api/validation/validation_test.js'; -export class CompatibilityTest extends ValidationTest { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { ValidationTest } from '../api/validation/validation_test.js';export class CompatibilityTest extends ValidationTest { async init() { await super.init(); if (!this.isCompatibility) { this.skip('compatibility tests do not work on non-compatibility mode'); } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/constants.js b/tests/wpt/webgpu/tests/webgpu/webgpu/constants.js index ff512c3f6bc..1a01173428a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/constants.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/constants.js @@ -1,7 +1,7 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ // Note: Types ensure every field is specified. -function checkType(x) {} +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // Note: Types ensure every field is specified. +function checkType(_) {} const BufferUsage = { MAP_READ: 0x0001, @@ -13,7 +13,7 @@ const BufferUsage = { UNIFORM: 0x0040, STORAGE: 0x0080, INDIRECT: 0x0100, - QUERY_RESOLVE: 0x0200, + QUERY_RESOLVE: 0x0200 }; checkType(BufferUsage); @@ -24,7 +24,7 @@ const TextureUsage = { SAMPLED: 0x04, STORAGE_BINDING: 0x08, STORAGE: 0x08, - RENDER_ATTACHMENT: 0x10, + RENDER_ATTACHMENT: 0x10 }; checkType(TextureUsage); @@ -33,20 +33,20 @@ const ColorWrite = { GREEN: 0x2, BLUE: 0x4, ALPHA: 0x8, - ALL: 0xf, + ALL: 0xf }; checkType(ColorWrite); const ShaderStage = { VERTEX: 0x1, FRAGMENT: 0x2, - COMPUTE: 0x4, + COMPUTE: 0x4 }; checkType(ShaderStage); const MapMode = { READ: 0x1, - WRITE: 0x2, + WRITE: 0x2 }; checkType(MapMode); @@ -55,8 +55,11 @@ export const GPUConst = { TextureUsage, ColorWrite, ShaderStage, - MapMode, + MapMode }; export const kMaxUnsignedLongValue = 4294967295; export const kMaxUnsignedLongLongValue = Number.MAX_SAFE_INTEGER; + +export const kInterpolationSampling = ['center', 'centroid', 'sample']; +export const kInterpolationType = ['perspective', 'linear', 'flat']; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/examples.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/examples.spec.js index ef61d3a40d0..ca72493de67 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/examples.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/examples.spec.js @@ -1,11 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Examples of writing CTS tests with various features. Start here when looking for examples of basic framework usage. -`; -import { makeTestGroup } from '../common/framework/test_group.js'; +`;import { makeTestGroup } from '../common/framework/test_group.js'; import { GPUTest } from './gpu_test.js'; @@ -23,20 +22,20 @@ import { GPUTest } from './gpu_test.js'; export const g = makeTestGroup(GPUTest); // Note: spaces aren't allowed in test names; use underscores. -g.test('test_name').fn(t => {}); +g.test('test_name').fn((_t) => {}); g.test('not_implemented_yet,without_plan').unimplemented(); -g.test('not_implemented_yet,with_plan') - .desc( - ` +g.test('not_implemented_yet,with_plan'). +desc( + ` Plan for this test. What it tests. Summary of how it tests that functionality. - Description of cases, by describing parameters {a, b, c} - x= more parameters {x, y, z} ` - ) - .unimplemented(); +). +unimplemented(); -g.test('basic').fn(t => { +g.test('basic').fn((t) => { t.expect(true); t.expect(true, 'true should be true'); @@ -48,11 +47,11 @@ g.test('basic').fn(t => { throw new TypeError(); }, // Log message. - 'function should throw Error' + { message: 'function should throw Error' } ); }); -g.test('basic,async').fn(t => { +g.test('basic,async').fn((t) => { // shouldReject must be awaited to ensure it can wait for the promise before the test ends. t.shouldReject( // The expected '.name' of the thrown error. @@ -60,23 +59,23 @@ g.test('basic,async').fn(t => { // Promise expected to reject. Promise.reject(new TypeError()), // Log message. - 'Promise.reject should reject' + { message: 'Promise.reject should reject' } ); - // Promise can also be an IIFE. + // Promise can also be an IIFE (immediately-invoked function expression). t.shouldReject( 'TypeError', (async () => { throw new TypeError(); })(), - 'Promise.reject should reject' + { message: 'Promise.reject should reject' } ); }); -g.test('basic,plain_cases') - .desc( - ` +g.test('basic,plain_cases'). +desc( + ` A test can be parameterized with a simple array of objects using .paramsSimple([ ... ]). Each such instance of the test is a "case". @@ -87,18 +86,18 @@ each with just one subcase: - webgpu:examples:basic,cases:x=-10;y=-10 runs 1 subcase, with t.params set to: - { x: -10, y: -10 } ` - ) - .paramsSimple([ - { x: 2, y: 2 }, // - { x: -10, y: -10 }, - ]) - .fn(t => { - t.expect(t.params.x === t.params.y); - }); +). +paramsSimple([ +{ x: 2, y: 2 }, // +{ x: -10, y: -10 }] +). +fn((t) => { + t.expect(t.params.x === t.params.y); +}); -g.test('basic,plain_cases_private') - .desc( - ` +g.test('basic,plain_cases_private'). +desc( + ` Parameters can be public ("x", "y") which means they're part of the case name. They can also be private by starting with an underscore ("_result"), which passes them into the test but does not make them part of the case name: @@ -109,19 +108,19 @@ In this example, the following cases are generated, each with just one subcase: - webgpu:examples:basic,cases:x=-10;y=18 runs 1 subcase, with t.params set to: - { x: -10, y: 18, _result: 8 } ` - ) - .paramsSimple([ - { x: 2, y: 4, _result: 6 }, // - { x: -10, y: 18, _result: 8 }, - ]) - .fn(t => { - t.expect(t.params.x + t.params.y === t.params._result); - }); +). +paramsSimple([ +{ x: 2, y: 4, _result: 6 }, // +{ x: -10, y: 18, _result: 8 }] +). +fn((t) => { + t.expect(t.params.x + t.params.y === t.params._result); +}); // (note the blank comment above to enforce newlines on autoformat) -g.test('basic,builder_cases') - .desc( - ` +g.test('basic,builder_cases'). +desc( + ` A "CaseParamsBuilder" or "SubcaseParamsBuilder" can be passed to .params() instead. The params builder provides facilities for generating tests combinatorially (by cartesian product). For convenience, the "unit" CaseParamsBuilder is passed as an argument ("u" below). @@ -136,17 +135,17 @@ In this example, the following cases are generated, each with just one subcase: - webgpu:examples:basic,cases:x=2,y=2 runs 1 subcase, with t.params set to: - { x: 2, y: 2 } ` - ) - .params(u => - u // - .combineWithParams([{ x: 1 }, { x: 2 }]) - .combineWithParams([{ y: 1 }, { y: 2 }]) - ) - .fn(() => {}); +). +params((u) => +u // +.combineWithParams([{ x: 1 }, { x: 2 }]). +combineWithParams([{ y: 1 }, { y: 2 }]) +). +fn(() => {}); -g.test('basic,builder_cases_subcases') - .desc( - ` +g.test('basic,builder_cases_subcases'). +desc( + ` Each case sub-parameterized using .beginSubcases(). Each such instance of the test is a "subcase", which cannot be run independently of other subcases. It is somewhat like wrapping the entire fn body in a for-loop. @@ -159,18 +158,18 @@ In this example, the following cases are generated: - { x: 2, y: 1 } - { x: 2, y: 2 } ` - ) - .params(u => - u // - .combineWithParams([{ x: 1 }, { x: 2 }]) - .beginSubcases() - .combineWithParams([{ y: 1 }, { y: 2 }]) - ) - .fn(() => {}); +). +params((u) => +u // +.combineWithParams([{ x: 1 }, { x: 2 }]). +beginSubcases(). +combineWithParams([{ y: 1 }, { y: 2 }]) +). +fn(() => {}); -g.test('basic,builder_subcases') - .desc( - ` +g.test('basic,builder_subcases'). +desc( + ` In this example, the following single case is generated: - webgpu:examples:basic,cases: runs 4 subcases, with t.params set to: - { x: 1, y: 1 } @@ -178,18 +177,18 @@ In this example, the following single case is generated: - { x: 2, y: 1 } - { x: 2, y: 2 } ` - ) - .params(u => - u // - .beginSubcases() - .combineWithParams([{ x: 1 }, { x: 2 }]) - .combineWithParams([{ y: 1 }, { y: 2 }]) - ) - .fn(() => {}); +). +params((u) => +u // +.beginSubcases(). +combineWithParams([{ x: 1 }, { x: 2 }]). +combineWithParams([{ y: 1 }, { y: 2 }]) +). +fn(() => {}); -g.test('basic,builder_subcases_short') - .desc( - ` +g.test('basic,builder_subcases_short'). +desc( + ` As a shorthand, .paramsSubcasesOnly() can be used. In this example, the following single case is generated: @@ -199,20 +198,20 @@ In this example, the following single case is generated: - { x: 2, y: 1 } - { x: 2, y: 2 } ` - ) - .paramsSubcasesOnly(u => - u // - .combineWithParams([{ x: 1 }, { x: 2 }]) - .combineWithParams([{ y: 1 }, { y: 2 }]) - ) - .fn(() => {}); +). +paramsSubcasesOnly((u) => +u // +.combineWithParams([{ x: 1 }, { x: 2 }]). +combineWithParams([{ y: 1 }, { y: 2 }]) +). +fn(() => {}); -g.test('gpu,async').fn(async t => { +g.test('gpu,async').fn(async (t) => { const x = await t.queue.onSubmittedWorkDone(); t.expect(x === undefined); }); -g.test('gpu,buffers').fn(t => { +g.test('gpu,buffers').fn((t) => { const data = new Uint32Array([0, 1234, 0]); const src = t.makeBufferWithContents(data, GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST); @@ -224,53 +223,53 @@ g.test('gpu,buffers').fn(t => { // One of the following two tests should be skipped on most platforms. -g.test('gpu,with_texture_compression,bc') - .desc( - `Example of a test using a device descriptor. +g.test('gpu,with_texture_compression,bc'). +desc( + `Example of a test using a device descriptor. Tests that a BC format passes validation iff the feature is enabled.` - ) - .params(u => u.combine('textureCompressionBC', [false, true])) - .beforeAllSubcases(t => { - const { textureCompressionBC } = t.params; +). +params((u) => u.combine('textureCompressionBC', [false, true])). +beforeAllSubcases((t) => { + const { textureCompressionBC } = t.params; - if (textureCompressionBC) { - t.selectDeviceOrSkipTestCase('texture-compression-bc'); - } - }) - .fn(t => { - const { textureCompressionBC } = t.params; - const shouldError = !textureCompressionBC; - t.shouldThrow(shouldError ? 'TypeError' : false, () => { - t.device.createTexture({ - format: 'bc1-rgba-unorm', - size: [4, 4, 1], - usage: GPUTextureUsage.TEXTURE_BINDING, - }); + if (textureCompressionBC) { + t.selectDeviceOrSkipTestCase('texture-compression-bc'); + } +}). +fn((t) => { + const { textureCompressionBC } = t.params; + const shouldError = !textureCompressionBC; + t.shouldThrow(shouldError ? 'TypeError' : false, () => { + t.device.createTexture({ + format: 'bc1-rgba-unorm', + size: [4, 4, 1], + usage: GPUTextureUsage.TEXTURE_BINDING }); }); +}); -g.test('gpu,with_texture_compression,etc2') - .desc( - `Example of a test using a device descriptor. +g.test('gpu,with_texture_compression,etc2'). +desc( + `Example of a test using a device descriptor. Tests that an ETC2 format passes validation iff the feature is enabled.` - ) - .params(u => u.combine('textureCompressionETC2', [false, true])) - .beforeAllSubcases(t => { - const { textureCompressionETC2 } = t.params; +). +params((u) => u.combine('textureCompressionETC2', [false, true])). +beforeAllSubcases((t) => { + const { textureCompressionETC2 } = t.params; - if (textureCompressionETC2) { - t.selectDeviceOrSkipTestCase('texture-compression-etc2'); - } - }) - .fn(t => { - const { textureCompressionETC2 } = t.params; + if (textureCompressionETC2) { + t.selectDeviceOrSkipTestCase('texture-compression-etc2'); + } +}). +fn((t) => { + const { textureCompressionETC2 } = t.params; - const shouldError = !textureCompressionETC2; - t.shouldThrow(shouldError ? 'TypeError' : false, () => { - t.device.createTexture({ - format: 'etc2-rgb8unorm', - size: [4, 4, 1], - usage: GPUTextureUsage.TEXTURE_BINDING, - }); + const shouldError = !textureCompressionETC2; + t.shouldThrow(shouldError ? 'TypeError' : false, () => { + t.device.createTexture({ + format: 'etc2-rgb8unorm', + size: [4, 4, 1], + usage: GPUTextureUsage.TEXTURE_BINDING }); }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/format_info.js b/tests/wpt/webgpu/tests/webgpu/webgpu/format_info.js index 5a69d983b90..f23a11356a9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/format_info.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/format_info.js @@ -1,9 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { keysOf } from '../common/util/data_tables.js'; -import { assert } from '../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { keysOf } from '../common/util/data_tables.js';import { assert } from '../common/util/util.js'; import { align } from './util/math.js'; + // // Texture format tables // @@ -31,7 +31,7 @@ const kFormatUniversalDefaults = { bytesPerBlock: undefined, renderable: false, renderTargetPixelByteCost: undefined, - renderTargetComponentAlignment: undefined, + renderTargetComponentAlignment: undefined // IMPORTANT: // Add new top-level keys both here and in TextureFormatInfo_TypeCheck. @@ -41,12 +41,27 @@ const kFormatUniversalDefaults = { * `{ ... kUniversalDefaults, ...defaults, ...row }`. * This only operates at the first level; it doesn't support defaults in nested objects. */ -function formatTableWithDefaults({ defaults, table }) { +function formatTableWithDefaults({ + defaults, + table + + + +}) + + + + + + + +{ return Object.fromEntries( Object.entries(table).map(([k, row]) => [ - k, - { ...kFormatUniversalDefaults, ...defaults, ...row }, - ]) + k, + { ...kFormatUniversalDefaults, ...defaults, ...row }] + ) + ); } @@ -57,656 +72,639 @@ const kRegularTextureFormatInfo = formatTableWithDefaults({ // plain, 8 bits per component r8unorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, colorRender: { blend: true, resolve: true, byteCost: 1, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r8snorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r8uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, colorRender: { blend: false, resolve: false, byteCost: 1, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r8sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, colorRender: { blend: false, resolve: false, byteCost: 1, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg8unorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, colorRender: { blend: true, resolve: true, byteCost: 2, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg8snorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg8uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, colorRender: { blend: false, resolve: false, byteCost: 2, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg8sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, colorRender: { blend: false, resolve: false, byteCost: 2, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba8unorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: true, resolve: true, byteCost: 8, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, baseFormat: 'rgba8unorm', - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, 'rgba8unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: true, resolve: true, byteCost: 8, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, baseFormat: 'rgba8unorm', - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba8snorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 4 + }, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba8uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba8sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, bgra8unorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: true, resolve: true, byteCost: 8, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, baseFormat: 'bgra8unorm', - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, 'bgra8unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: true, resolve: true, byteCost: 8, alignment: 1 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, baseFormat: 'bgra8unorm', - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, // plain, 16 bits per component r16uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, colorRender: { blend: false, resolve: false, byteCost: 2, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r16sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, colorRender: { blend: false, resolve: false, byteCost: 2, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r16float: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, colorRender: { blend: true, resolve: true, byteCost: 2, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg16uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg16sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg16float: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: true, resolve: true, byteCost: 4, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba16uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: true, bytes: 8 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 8 + }, colorRender: { blend: false, resolve: false, byteCost: 8, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba16sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: true, bytes: 8 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 8 + }, colorRender: { blend: false, resolve: false, byteCost: 8, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba16float: { - color: { type: 'float', copySrc: true, copyDst: true, storage: true, bytes: 8 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 8 + }, colorRender: { blend: true, resolve: true, byteCost: 8, alignment: 2 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, // plain, 32 bits per component r32uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: true, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r32sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: true, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, r32float: { - color: { type: 'unfilterable-float', copySrc: true, copyDst: true, storage: true, bytes: 4 }, + color: { + type: 'unfilterable-float', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: true, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 4, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg32uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: true, bytes: 8 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 8 + }, colorRender: { blend: false, resolve: false, byteCost: 8, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg32sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: true, bytes: 8 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 8 + }, colorRender: { blend: false, resolve: false, byteCost: 8, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg32float: { - color: { type: 'unfilterable-float', copySrc: true, copyDst: true, storage: true, bytes: 8 }, + color: { + type: 'unfilterable-float', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 8 + }, colorRender: { blend: false, resolve: false, byteCost: 8, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba32uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: true, bytes: 16 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 16 + }, colorRender: { blend: false, resolve: false, byteCost: 16, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba32sint: { - color: { type: 'sint', copySrc: true, copyDst: true, storage: true, bytes: 16 }, + color: { + type: 'sint', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 16 + }, colorRender: { blend: false, resolve: false, byteCost: 16, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgba32float: { - color: { type: 'unfilterable-float', copySrc: true, copyDst: true, storage: true, bytes: 16 }, + color: { + type: 'unfilterable-float', + copySrc: true, + copyDst: true, + storage: true, + readWriteStorage: false, + bytes: 16 + }, colorRender: { blend: false, resolve: false, byteCost: 16, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, // plain, mixed component width, 32 bits per texel rgb10a2uint: { - color: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: false, resolve: false, byteCost: 8, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rgb10a2unorm: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, colorRender: { blend: true, resolve: true, byteCost: 8, alignment: 4 }, renderable: true, - get renderTargetComponentAlignment() { - return this.colorRender.alignment; - }, - get renderTargetPixelByteCost() { - return this.colorRender.byteCost; - }, + get renderTargetComponentAlignment() {return this.colorRender.alignment;}, + get renderTargetPixelByteCost() {return this.colorRender.byteCost;}, multisample: true, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} }, rg11b10ufloat: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;}, renderTargetPixelByteCost: 8, - renderTargetComponentAlignment: 4, + renderTargetComponentAlignment: 4 }, // packed rgb9e5ufloat: { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 4 }, + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 4 + }, multisample: false, - get sampleType() { - return this.color.type; - }, - get bytesPerBlock() { - return this.color.bytes; - }, - }, - }, + get sampleType() {return this.color.type;}, + get bytesPerBlock() {return this.color.bytes;} + } + } }); // MAINTENANCE_TODO: Distinguishing "sized" and "unsized" depth stencil formats doesn't make sense @@ -716,53 +714,109 @@ const kSizedDepthStencilFormatInfo = formatTableWithDefaults({ defaults: { blockWidth: 1, blockHeight: 1, multisample: true, copySrc: true, renderable: true }, table: { stencil8: { - stencil: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + stencil: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, sampleType: 'uint', copyDst: true, - bytesPerBlock: 1, + bytesPerBlock: 1 }, depth16unorm: { - depth: { type: 'depth', copySrc: true, copyDst: true, storage: false, bytes: 2 }, + depth: { + type: 'depth', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 2 + }, sampleType: 'depth', copyDst: true, - bytesPerBlock: 2, + bytesPerBlock: 2 }, depth32float: { - depth: { type: 'depth', copySrc: true, copyDst: false, storage: false, bytes: 4 }, + depth: { + type: 'depth', + copySrc: true, + copyDst: false, + storage: false, + readWriteStorage: false, + bytes: 4 + }, sampleType: 'depth', copyDst: false, - bytesPerBlock: 4, - }, - }, + bytesPerBlock: 4 + } + } }); const kUnsizedDepthStencilFormatInfo = formatTableWithDefaults({ defaults: { blockWidth: 1, blockHeight: 1, multisample: true }, table: { depth24plus: { - depth: { type: 'depth', copySrc: false, copyDst: false, storage: false, bytes: undefined }, + depth: { + type: 'depth', + copySrc: false, + copyDst: false, + storage: false, + readWriteStorage: false, + bytes: undefined + }, copySrc: false, copyDst: false, sampleType: 'depth', - renderable: true, + renderable: true }, 'depth24plus-stencil8': { - depth: { type: 'depth', copySrc: false, copyDst: false, storage: false, bytes: undefined }, - stencil: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + depth: { + type: 'depth', + copySrc: false, + copyDst: false, + storage: false, + readWriteStorage: false, + bytes: undefined + }, + stencil: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, copySrc: false, copyDst: false, sampleType: 'depth', - renderable: true, + renderable: true }, 'depth32float-stencil8': { - depth: { type: 'depth', copySrc: true, copyDst: false, storage: false, bytes: 4 }, - stencil: { type: 'uint', copySrc: true, copyDst: true, storage: false, bytes: 1 }, + depth: { + type: 'depth', + copySrc: true, + copyDst: false, + storage: false, + readWriteStorage: false, + bytes: 4 + }, + stencil: { + type: 'uint', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 1 + }, feature: 'depth32float-stencil8', copySrc: false, copyDst: false, sampleType: 'depth', - renderable: true, - }, - }, + renderable: true + } + } }); const kBCTextureFormatInfo = formatTableWithDefaults({ @@ -773,108 +827,178 @@ const kBCTextureFormatInfo = formatTableWithDefaults({ feature: 'texture-compression-bc', sampleType: 'float', copySrc: true, - copyDst: true, + copyDst: true }, table: { 'bc1-rgba-unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - baseFormat: 'bc1-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + baseFormat: 'bc1-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc1-rgba-unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - baseFormat: 'bc1-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + baseFormat: 'bc1-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc2-rgba-unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'bc2-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'bc2-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc2-rgba-unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'bc2-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'bc2-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc3-rgba-unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'bc3-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'bc3-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc3-rgba-unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'bc3-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'bc3-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc4-r-unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + get bytesPerBlock() {return this.color.bytes;} }, 'bc4-r-snorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + get bytesPerBlock() {return this.color.bytes;} }, 'bc5-rg-unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + get bytesPerBlock() {return this.color.bytes;} }, 'bc5-rg-snorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + get bytesPerBlock() {return this.color.bytes;} }, 'bc6h-rgb-ufloat': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + get bytesPerBlock() {return this.color.bytes;} }, 'bc6h-rgb-float': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + get bytesPerBlock() {return this.color.bytes;} }, 'bc7-rgba-unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'bc7-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'bc7-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'bc7-rgba-unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'bc7-rgba-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, - }, - }, + baseFormat: 'bc7-rgba-unorm', + get bytesPerBlock() {return this.color.bytes;} + } + } }); const kETC2TextureFormatInfo = formatTableWithDefaults({ @@ -885,80 +1009,130 @@ const kETC2TextureFormatInfo = formatTableWithDefaults({ feature: 'texture-compression-etc2', sampleType: 'float', copySrc: true, - copyDst: true, + copyDst: true }, table: { 'etc2-rgb8unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - baseFormat: 'etc2-rgb8unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + baseFormat: 'etc2-rgb8unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'etc2-rgb8unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - baseFormat: 'etc2-rgb8unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + baseFormat: 'etc2-rgb8unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'etc2-rgb8a1unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - baseFormat: 'etc2-rgb8a1unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + baseFormat: 'etc2-rgb8a1unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'etc2-rgb8a1unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - baseFormat: 'etc2-rgb8a1unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + baseFormat: 'etc2-rgb8a1unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'etc2-rgba8unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'etc2-rgba8unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'etc2-rgba8unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'etc2-rgba8unorm-srgb': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'etc2-rgba8unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'etc2-rgba8unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'eac-r11unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + get bytesPerBlock() {return this.color.bytes;} }, 'eac-r11snorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 8 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 8 }, + get bytesPerBlock() {return this.color.bytes;} }, 'eac-rg11unorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + get bytesPerBlock() {return this.color.bytes;} }, 'eac-rg11snorm': { - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, - }, - }, + get bytesPerBlock() {return this.color.bytes;} + } + } }); const kASTCTextureFormatInfo = formatTableWithDefaults({ @@ -967,312 +1141,449 @@ const kASTCTextureFormatInfo = formatTableWithDefaults({ feature: 'texture-compression-astc', sampleType: 'float', copySrc: true, - copyDst: true, + copyDst: true }, table: { 'astc-4x4-unorm': { blockWidth: 4, blockHeight: 4, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-4x4-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-4x4-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-4x4-unorm-srgb': { blockWidth: 4, blockHeight: 4, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-4x4-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-4x4-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-5x4-unorm': { blockWidth: 5, blockHeight: 4, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-5x4-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-5x4-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-5x4-unorm-srgb': { blockWidth: 5, blockHeight: 4, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-5x4-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-5x4-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-5x5-unorm': { blockWidth: 5, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-5x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-5x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-5x5-unorm-srgb': { blockWidth: 5, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-5x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-5x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-6x5-unorm': { blockWidth: 6, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-6x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-6x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-6x5-unorm-srgb': { blockWidth: 6, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-6x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-6x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-6x6-unorm': { blockWidth: 6, blockHeight: 6, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-6x6-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-6x6-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-6x6-unorm-srgb': { blockWidth: 6, blockHeight: 6, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-6x6-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-6x6-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-8x5-unorm': { blockWidth: 8, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-8x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-8x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-8x5-unorm-srgb': { blockWidth: 8, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-8x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-8x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-8x6-unorm': { blockWidth: 8, blockHeight: 6, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-8x6-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-8x6-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-8x6-unorm-srgb': { blockWidth: 8, blockHeight: 6, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-8x6-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-8x6-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-8x8-unorm': { blockWidth: 8, blockHeight: 8, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-8x8-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-8x8-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-8x8-unorm-srgb': { blockWidth: 8, blockHeight: 8, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-8x8-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-8x8-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x5-unorm': { blockWidth: 10, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x5-unorm-srgb': { blockWidth: 10, blockHeight: 5, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x5-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x5-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x6-unorm': { blockWidth: 10, blockHeight: 6, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x6-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x6-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x6-unorm-srgb': { blockWidth: 10, blockHeight: 6, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x6-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x6-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x8-unorm': { blockWidth: 10, blockHeight: 8, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x8-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x8-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x8-unorm-srgb': { blockWidth: 10, blockHeight: 8, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x8-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x8-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x10-unorm': { blockWidth: 10, blockHeight: 10, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x10-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x10-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-10x10-unorm-srgb': { blockWidth: 10, blockHeight: 10, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-10x10-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-10x10-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-12x10-unorm': { blockWidth: 12, blockHeight: 10, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-12x10-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-12x10-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-12x10-unorm-srgb': { blockWidth: 12, blockHeight: 10, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-12x10-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-12x10-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-12x12-unorm': { blockWidth: 12, blockHeight: 12, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-12x12-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, + baseFormat: 'astc-12x12-unorm', + get bytesPerBlock() {return this.color.bytes;} }, 'astc-12x12-unorm-srgb': { blockWidth: 12, blockHeight: 12, - color: { type: 'float', copySrc: true, copyDst: true, storage: false, bytes: 16 }, - baseFormat: 'astc-12x12-unorm', - get bytesPerBlock() { - return this.color.bytes; + color: { + type: 'float', + copySrc: true, + copyDst: true, + storage: false, + readWriteStorage: false, + bytes: 16 }, - }, - }, + baseFormat: 'astc-12x12-unorm', + get bytesPerBlock() {return this.color.bytes;} + } + } }); // Definitions for use locally. To access the table entries, use `kTextureFormatInfo`. // MAINTENANCE_TODO: Consider generating the exports below programmatically by filtering the big list, instead // of using these local constants? Requires some type magic though. -const kCompressedTextureFormatInfo = { - ...kBCTextureFormatInfo, - ...kETC2TextureFormatInfo, - ...kASTCTextureFormatInfo, -}; +const kCompressedTextureFormatInfo = { ...kBCTextureFormatInfo, ...kETC2TextureFormatInfo, ...kASTCTextureFormatInfo }; const kColorTextureFormatInfo = { ...kRegularTextureFormatInfo, ...kCompressedTextureFormatInfo }; -const kEncodableTextureFormatInfo = { - ...kRegularTextureFormatInfo, - ...kSizedDepthStencilFormatInfo, -}; -const kSizedTextureFormatInfo = { - ...kRegularTextureFormatInfo, - ...kSizedDepthStencilFormatInfo, - ...kCompressedTextureFormatInfo, -}; -const kDepthStencilFormatInfo = { - ...kSizedDepthStencilFormatInfo, - ...kUnsizedDepthStencilFormatInfo, -}; -const kUncompressedTextureFormatInfo = { - ...kRegularTextureFormatInfo, - ...kSizedDepthStencilFormatInfo, - ...kUnsizedDepthStencilFormatInfo, -}; -const kAllTextureFormatInfo = { - ...kUncompressedTextureFormatInfo, - ...kCompressedTextureFormatInfo, -}; +const kEncodableTextureFormatInfo = { ...kRegularTextureFormatInfo, ...kSizedDepthStencilFormatInfo }; +const kSizedTextureFormatInfo = { ...kRegularTextureFormatInfo, ...kSizedDepthStencilFormatInfo, ...kCompressedTextureFormatInfo }; +const kDepthStencilFormatInfo = { ...kSizedDepthStencilFormatInfo, ...kUnsizedDepthStencilFormatInfo }; +const kUncompressedTextureFormatInfo = { ...kRegularTextureFormatInfo, ...kSizedDepthStencilFormatInfo, ...kUnsizedDepthStencilFormatInfo }; +const kAllTextureFormatInfo = { ...kUncompressedTextureFormatInfo, ...kCompressedTextureFormatInfo }; /** A "regular" texture format (uncompressed, sized, single-plane color formats). */ +/** A sized depth/stencil texture format. */ + +/** An unsized depth/stencil texture format. */ + +/** A compressed (block) texture format. */ + + +/** A color texture format (regular | compressed). */ + +/** An encodable texture format (regular | sized depth/stencil). */ + +/** A sized texture format (regular | sized depth/stencil | compressed). */ + +/** A depth/stencil format (sized | unsized). */ + +/** An uncompressed (block size 1x1) format (regular | depth/stencil). */ + + export const kRegularTextureFormats = keysOf(kRegularTextureFormatInfo); export const kSizedDepthStencilFormats = keysOf(kSizedDepthStencilFormatInfo); export const kUnsizedDepthStencilFormats = keysOf(kUnsizedDepthStencilFormatInfo); @@ -1287,18 +1598,115 @@ export const kAllTextureFormats = keysOf(kAllTextureFormatInfo); // CompressedTextureFormat are unrenderable so filter from RegularTextureFormats for color targets is enough export const kRenderableColorTextureFormats = kRegularTextureFormats.filter( - v => kColorTextureFormatInfo[v].colorRender + (v) => kColorTextureFormatInfo[v].colorRender ); - assert( kRenderableColorTextureFormats.every( - f => - kAllTextureFormatInfo[f].renderTargetComponentAlignment !== undefined && - kAllTextureFormatInfo[f].renderTargetPixelByteCost !== undefined + (f) => + kAllTextureFormatInfo[f].renderTargetComponentAlignment !== undefined && + kAllTextureFormatInfo[f].renderTargetPixelByteCost !== undefined ) ); /** Per-GPUTextureFormat-per-aspect info. */ + + + + + + + + + + + + +/** Per GPUTextureFormat-per-aspect info for color aspects. */ + + + + + +/** Per GPUTextureFormat-per-aspect info for depth aspects. */ + + + + +/** Per GPUTextureFormat-per-aspect info for stencil aspects. */ + + + + + +/** + * Per-GPUTextureFormat info. + * This is not actually the type of values in kTextureFormatInfo; that type is fully const + * so that it can be narrowed very precisely at usage sites by the compiler. + * This type exists only as a type check on the inferred type of kTextureFormatInfo. + * Documentation is also written here, but not actually visible to the IDE. + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** Per-GPUTextureFormat info. */ export const kTextureFormatInfo = { @@ -1307,12 +1715,14 @@ export const kTextureFormatInfo = { ...kUnsizedDepthStencilFormatInfo, ...kBCTextureFormatInfo, ...kETC2TextureFormatInfo, - ...kASTCTextureFormatInfo, + ...kASTCTextureFormatInfo }; /** Defining this variable verifies the type of kTextureFormatInfo2. It is not used. */ -const kTextureFormatInfo_TypeCheck = kTextureFormatInfo; +const kTextureFormatInfo_TypeCheck = + +kTextureFormatInfo; /** List of all GPUTextureFormat values. */ // MAINTENANCE_TODO: dedup with kAllTextureFormats @@ -1320,20 +1730,20 @@ export const kTextureFormats = keysOf(kAllTextureFormatInfo); /** Valid GPUTextureFormats for `copyExternalImageToTexture`, by spec. */ export const kValidTextureFormatsForCopyE2T = [ - 'r8unorm', - 'r16float', - 'r32float', - 'rg8unorm', - 'rg16float', - 'rg32float', - 'rgba8unorm', - 'rgba8unorm-srgb', - 'bgra8unorm', - 'bgra8unorm-srgb', - 'rgb10a2unorm', - 'rgba16float', - 'rgba32float', -]; +'r8unorm', +'r16float', +'r32float', +'rg8unorm', +'rg16float', +'rg32float', +'rgba8unorm', +'rgba8unorm-srgb', +'bgra8unorm', +'bgra8unorm-srgb', +'rgb10a2unorm', +'rgba16float', +'rgba32float']; + // // Other related stuff @@ -1344,74 +1754,78 @@ const kDepthStencilFormatCapabilityInBufferTextureCopy = { depth24plus: { CopyB2T: [], CopyT2B: [], - texelAspectSize: { 'depth-only': -1, 'stencil-only': -1 }, + texelAspectSize: { 'depth-only': -1, 'stencil-only': -1 } }, 'depth24plus-stencil8': { CopyB2T: ['stencil-only'], CopyT2B: ['stencil-only'], - texelAspectSize: { 'depth-only': -1, 'stencil-only': 1 }, + texelAspectSize: { 'depth-only': -1, 'stencil-only': 1 } }, // kSizedDepthStencilFormats depth16unorm: { CopyB2T: ['all', 'depth-only'], CopyT2B: ['all', 'depth-only'], - texelAspectSize: { 'depth-only': 2, 'stencil-only': -1 }, + texelAspectSize: { 'depth-only': 2, 'stencil-only': -1 } }, depth32float: { CopyB2T: [], CopyT2B: ['all', 'depth-only'], - texelAspectSize: { 'depth-only': 4, 'stencil-only': -1 }, + texelAspectSize: { 'depth-only': 4, 'stencil-only': -1 } }, 'depth32float-stencil8': { CopyB2T: ['stencil-only'], CopyT2B: ['depth-only', 'stencil-only'], - texelAspectSize: { 'depth-only': 4, 'stencil-only': 1 }, + texelAspectSize: { 'depth-only': 4, 'stencil-only': 1 } }, stencil8: { CopyB2T: ['all', 'stencil-only'], CopyT2B: ['all', 'stencil-only'], - texelAspectSize: { 'depth-only': -1, 'stencil-only': 1 }, - }, + texelAspectSize: { 'depth-only': -1, 'stencil-only': 1 } + } }; /** `kDepthStencilFormatResolvedAspect[format][aspect]` returns the aspect-specific format for a * depth-stencil format, or `undefined` if the format doesn't have the aspect. */ -export const kDepthStencilFormatResolvedAspect = { +export const kDepthStencilFormatResolvedAspect = + + + +{ // kUnsizedDepthStencilFormats depth24plus: { all: 'depth24plus', 'depth-only': 'depth24plus', - 'stencil-only': undefined, + 'stencil-only': undefined }, 'depth24plus-stencil8': { all: 'depth24plus-stencil8', 'depth-only': 'depth24plus', - 'stencil-only': 'stencil8', + 'stencil-only': 'stencil8' }, // kSizedDepthStencilFormats depth16unorm: { all: 'depth16unorm', 'depth-only': 'depth16unorm', - 'stencil-only': undefined, + 'stencil-only': undefined }, depth32float: { all: 'depth32float', 'depth-only': 'depth32float', - 'stencil-only': undefined, + 'stencil-only': undefined }, 'depth32float-stencil8': { all: 'depth32float-stencil8', 'depth-only': 'depth32float', - 'stencil-only': 'stencil8', + 'stencil-only': 'stencil8' }, stencil8: { all: 'stencil8', 'depth-only': undefined, - 'stencil-only': 'stencil8', - }, + 'stencil-only': 'stencil8' + } }; /** @@ -1423,7 +1837,10 @@ export const kDepthStencilFormatResolvedAspect = { * Many helpers use an `undefined` `aspect` to means `'all'` so this is also the default for this * function. */ -export function resolvePerAspectFormat(format, aspect) { +export function resolvePerAspectFormat( +format, +aspect) +{ if (aspect === 'all' || aspect === undefined) { return format; } @@ -1436,7 +1853,10 @@ export function resolvePerAspectFormat(format, aspect) { /** * Gets all copyable aspects for copies between texture and buffer for specified depth/stencil format and copy type, by spec. */ -export function depthStencilFormatCopyableAspects(type, format) { +export function depthStencilFormatCopyableAspects( +type, +format) +{ const appliedType = type === 'WriteTexture' ? 'CopyB2T' : type; return kDepthStencilFormatCapabilityInBufferTextureCopy[format][appliedType]; } @@ -1444,9 +1864,15 @@ export function depthStencilFormatCopyableAspects(type, format) { /** * Computes whether a copy between a depth/stencil texture aspect and a buffer is supported, by spec. */ -export function depthStencilBufferTextureCopySupported(type, format, aspect) { - const supportedAspects = depthStencilFormatCopyableAspects(type, format); - +export function depthStencilBufferTextureCopySupported( +type, +format, +aspect) +{ + const supportedAspects = depthStencilFormatCopyableAspects( + type, + format + ); return supportedAspects.includes(aspect); } @@ -1454,9 +1880,12 @@ export function depthStencilBufferTextureCopySupported(type, format, aspect) { * Returns the byte size of the depth or stencil aspect of the specified depth/stencil format, * or -1 if none. */ -export function depthStencilFormatAspectSize(format, aspect) { +export function depthStencilFormatAspectSize( +format, +aspect) +{ const texelAspectSize = - kDepthStencilFormatCapabilityInBufferTextureCopy[format].texelAspectSize[aspect]; + kDepthStencilFormatCapabilityInBufferTextureCopy[format].texelAspectSize[aspect]; assert(texelAspectSize > 0); return texelAspectSize; } @@ -1465,12 +1894,15 @@ export function depthStencilFormatAspectSize(format, aspect) { * Returns true iff a texture can be created with the provided GPUTextureDimension * (defaulting to 2d) and GPUTextureFormat, by spec. */ -export function textureDimensionAndFormatCompatible(dimension, format) { +export function textureDimensionAndFormatCompatible( +dimension, +format) +{ const info = kAllTextureFormatInfo[format]; return !( - (dimension === '1d' || dimension === '3d') && - (info.blockWidth > 1 || info.depth || info.stencil) - ); + (dimension === '1d' || dimension === '3d') && ( + info.blockWidth > 1 || info.depth || info.stencil)); + } /** @@ -1482,18 +1914,42 @@ export function viewCompatible(a, b) { return a === b || a + '-srgb' === b || b + '-srgb' === a; } -export function getFeaturesForFormats(formats) { - return Array.from(new Set(formats.map(f => (f ? kTextureFormatInfo[f].feature : undefined)))); +export function getFeaturesForFormats( +formats) +{ + return Array.from(new Set(formats.map((f) => f ? kTextureFormatInfo[f].feature : undefined))); } -export function filterFormatsByFeature(feature, formats) { - return formats.filter(f => f === undefined || kTextureFormatInfo[f].feature === feature); +export function filterFormatsByFeature( +feature, +formats) +{ + return formats.filter((f) => f === undefined || kTextureFormatInfo[f].feature === feature); } export function isCompressedTextureFormat(format) { return format in kCompressedTextureFormatInfo; } +export function isTextureFormatUsableAsStorageFormat( +format, +isCompatibilityMode) +{ + if (isCompatibilityMode) { + switch (format) { + case 'rg32float': + case 'rg32sint': + case 'rg32uint': + return false; + } + } + return !!kTextureFormatInfo[format].color?.storage; +} + +export function isEncodableTextureformat(format) { + return format in kEncodableTextureFormatInfo; +} + export const kFeaturesForFormats = getFeaturesForFormats(kTextureFormats); /** @@ -1514,4 +1970,4 @@ export function computeBytesPerSampleFromFormats(formats) { */ export function computeBytesPerSample(targets) { return computeBytesPerSampleFromFormats(targets.map(({ format }) => format)); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/gpu_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/gpu_test.js index 003552c5459..e1ea24169b5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/gpu_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/gpu_test.js @@ -1,32 +1,65 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { Fixture, SkipTestCase, SubcaseBatchState } from '../common/framework/fixture.js'; -import { globalTestConfig } from '../common/framework/test_config.js'; -import { assert, makeValueTestVariant, memcpy, range, unreachable } from '../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Fixture, + + + SkipTestCase, + SubcaseBatchState } from + + +'../common/framework/fixture.js'; +import { globalTestConfig } from '../common/framework/test_config.js'; +import { getGPU } from '../common/util/navigator_gpu.js'; +import { + assert, + makeValueTestVariant, + memcpy, + range, + + + + unreachable } from +'../common/util/util.js'; + +import { + getDefaultLimits, + + kQueryTypeInfo } from + +'./capability_info.js'; -import { getDefaultLimits, kQueryTypeInfo } from './capability_info.js'; import { kTextureFormatInfo, kEncodableTextureFormats, resolvePerAspectFormat, + + isCompressedTextureFormat, -} from './format_info.js'; + + isTextureFormatUsableAsStorageFormat } from +'./format_info.js'; import { makeBufferWithContents } from './util/buffer.js'; import { checkElementsEqual, checkElementsBetween } from './util/check_contents.js'; import { CommandBufferMaker } from './util/command_buffer_maker.js'; import { DevicePool } from './util/device_pool.js'; import { align, roundDown } from './util/math.js'; -import { createTextureFromTexelView, createTextureFromTexelViews } from './util/texture.js'; import { physicalMipSizeFromTexture, virtualMipSize } from './util/texture/base.js'; import { bytesInACompleteRow, getTextureCopyLayout, - getTextureSubCopyLayout, -} from './util/texture/layout.js'; + getTextureSubCopyLayout } from + +'./util/texture/layout.js'; import { kTexelRepresentationInfo } from './util/texture/texel_data.js'; import { TexelView } from './util/texture/texel_view.js'; -import { textureContentIsOKByT2B } from './util/texture/texture_ok.js'; +import { + + + + textureContentIsOKByT2B } from +'./util/texture/texture_ok.js'; +import { createTextureFromTexelView, createTextureFromTexelViews } from './util/texture.js'; import { reifyOrigin3D } from './util/unions.js'; const devicePool = new DevicePool(); @@ -41,12 +74,19 @@ export const kResourceStates = kResourceStateValues; /** Various "convenient" shorthands for GPUDeviceDescriptors for selectDevice functions. */ -export function initUncanonicalizedDeviceDescriptor(descriptor) { + + + + + +export function initUncanonicalizedDeviceDescriptor( +descriptor) +{ if (typeof descriptor === 'string') { return { requiredFeatures: [descriptor] }; } else if (descriptor instanceof Array) { return { - requiredFeatures: descriptor.filter(f => f !== undefined), + requiredFeatures: descriptor.filter((f) => f !== undefined) }; } else { return descriptor; @@ -58,6 +98,7 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { /** Provider for mismatched device. */ + async postInit() { // Skip all subcases if there's no device. await this.acquireProvider(); @@ -68,9 +109,9 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { // Ensure devicePool.release is called for both providers even if one rejects. await Promise.all([ - this.provider?.then(x => devicePool.release(x)), - this.mismatchedProvider?.then(x => devicePool.release(x)), - ]); + this.provider?.then((x) => devicePool.release(x)), + this.mismatchedProvider?.then((x) => devicePool.release(x))] + ); } /** @internal MAINTENANCE_TODO: Make this not visible to test code? */ @@ -103,7 +144,6 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { this.recorder, initUncanonicalizedDeviceDescriptor(descriptor) ); - // Suppress uncaught promise rejection (we'll catch it later). this.provider.catch(() => {}); } @@ -113,7 +153,9 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { * Select a device with the features required by these texture format(s). * If the device creation fails, then skip the test case. */ - selectDeviceForTextureFormatOrSkipTestCase(formats) { + selectDeviceForTextureFormatOrSkipTestCase( + formats) + { if (!Array.isArray(formats)) { formats = [formats]; } @@ -137,7 +179,7 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { if (!Array.isArray(types)) { types = [types]; } - const features = types.map(t => kQueryTypeInfo[t].feature); + const features = types.map((t) => kQueryTypeInfo[t].feature); this.selectDeviceOrSkipTestCase(features); } @@ -163,7 +205,6 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { this.recorder, initUncanonicalizedDeviceDescriptor(descriptor) ); - // Suppress uncaught promise rejection (we'll catch it later). this.mismatchedProvider.catch(() => {}); } @@ -212,6 +253,36 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { } } } + + skipIfTextureFormatNotUsableAsStorageTexture(...formats) { + for (const format of formats) { + if (format && !isTextureFormatUsableAsStorageFormat(format, this.isCompatibility)) { + this.skip(`Texture with ${format} is not usable as a storage texture`); + } + } + } + + /** + * Skips test if the given interpolation type or sampling is not supported. + */ + skipIfInterpolationTypeOrSamplingNotSupported({ + type, + sampling + + + + }) { + if (this.isCompatibility) { + this.skipIf( + type === 'linear', + 'interpolation type linear is not supported in compatibility mode' + ); + this.skipIf( + sampling === 'sample', + 'interpolation type linear is not supported in compatibility mode' + ); + } + } } /** @@ -221,7 +292,10 @@ export class GPUTestSubcaseBatchState extends SubcaseBatchState { * as well as helpers that use that device. */ export class GPUTestBase extends Fixture { - static MakeSharedState(recorder, params) { + static MakeSharedState( + recorder, + params) + { return new GPUTestSubcaseBatchState(recorder, params); } @@ -263,7 +337,7 @@ export class GPUTestBase extends Fixture { const dst = this.device.createBuffer({ size, - usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST }); this.trackForCleanup(dst); @@ -281,7 +355,11 @@ export class GPUTestBase extends Fixture { * we initially wanted to map. * The copy will not cause an OOB error because the buffer size must be 4-aligned. */ - createAlignedCopyForMapRead(src, size, offset) { + createAlignedCopyForMapRead( + src, + size, + offset) + { const alignedOffset = roundDown(offset, 4); const subarrayByteStart = offset - alignedOffset; const alignedSize = align(size + subarrayByteStart, 4); @@ -293,7 +371,20 @@ export class GPUTestBase extends Fixture { * Snapshot the current contents of a range of a GPUBuffer, and return them as a TypedArray. * Also provides a cleanup() function to unmap and destroy the staging buffer. */ - async readGPUBufferRangeTyped(src, { srcByteOffset = 0, method = 'copy', type, typedLength }) { + async readGPUBufferRangeTyped( + src, + { + srcByteOffset = 0, + method = 'copy', + type, + typedLength + + + + + + }) + { assert( srcByteOffset % type.BYTES_PER_ELEMENT === 0, 'srcByteOffset must be a multiple of BYTES_PER_ELEMENT' @@ -330,7 +421,7 @@ export class GPUTestBase extends Fixture { cleanup() { mappable.unmap(); mappable.destroy(); - }, + } }; } @@ -357,23 +448,61 @@ export class GPUTestBase extends Fixture { } } + skipIfCopyTextureToTextureNotSupportedForFormat(...formats) { + if (this.isCompatibility) { + for (const format of formats) { + if (format && isCompressedTextureFormat(format)) { + this.skip(`copyTextureToTexture with ${format} is not supported`); + } + } + } + } + + /** Skips this test case if the `langFeature` is *not* supported. */ + requireLanguageFeatureOrSkipTestCase(langFeature) { + const lf = getGPU(this.rec).wgslLanguageFeatures; + if (lf === undefined || !lf.has(langFeature)) { + this.skip(`WGSL language feature '${langFeature}' is not supported`); + } + } + + /** Skips this test case if the `langFeature` is supported. */ + skipIfLanguageFeatureSupported(langFeature) { + const lf = getGPU(this.rec).wgslLanguageFeatures; + if (lf !== undefined && lf.has(langFeature)) { + this.skip(`WGSL language feature '${langFeature}' is supported`); + } + } + /** * Expect a GPUBuffer's contents to pass the provided check. * * A library of checks can be found in {@link webgpu/util/check_contents}. */ expectGPUBufferValuesPassCheck( - src, - check, - { srcByteOffset = 0, type, typedLength, method = 'copy', mode = 'fail' } - ) { + src, + check, + { + srcByteOffset = 0, + type, + typedLength, + method = 'copy', + mode = 'fail' + + + + + + + }) + { const readbackPromise = this.readGPUBufferRangeTyped(src, { srcByteOffset, type, typedLength, - method, + method }); - this.eventualAsyncExpectation(async niceStack => { + this.eventualAsyncExpectation(async (niceStack) => { const readback = await readbackPromise; this.expectOK(check(readback.data), { mode, niceStack }); readback.cleanup(); @@ -384,17 +513,17 @@ export class GPUTestBase extends Fixture { * Expect a GPUBuffer's contents to equal the values in the provided TypedArray. */ expectGPUBufferValuesEqual( - src, - expected, - srcByteOffset = 0, - { method = 'copy', mode = 'fail' } = {} - ) { - this.expectGPUBufferValuesPassCheck(src, a => checkElementsEqual(a, expected), { + src, + expected, + srcByteOffset = 0, + { method = 'copy', mode = 'fail' } = {}) + { + this.expectGPUBufferValuesPassCheck(src, (a) => checkElementsEqual(a, expected), { srcByteOffset, type: expected.constructor, typedLength: expected.length, method, - mode, + mode }); } @@ -405,9 +534,19 @@ export class GPUTestBase extends Fixture { * actual (non-padding) data and must be an exact multiple of the byte-length of `expectedValue`. */ expectGPUBufferRepeatsSingleValue( - buffer, - { expectedValue, numRows, minBytesPerRow, bytesPerRow } - ) { + buffer, + { + expectedValue, + numRows, + minBytesPerRow, + bytesPerRow + + + + + + }) + { const valueSize = expectedValue.byteLength; assert(valueSize === 1 || valueSize === 2 || valueSize % 4 === 0); assert(minBytesPerRow % valueSize === 0); @@ -422,7 +561,7 @@ export class GPUTestBase extends Fixture { const rowValues = new Array(minBytesPerRow / valueSize).fill(valueBytes); const rowBytes = new Uint8Array([].concat(...rowValues)); const expectedContents = new Uint8Array(bufferSize); - range(numRows, row => expectedContents.set(rowBytes, row * bytesPerRow)); + range(numRows, (row) => expectedContents.set(rowBytes, row * bytesPerRow)); this.expectGPUBufferValuesEqual(buffer, expectedContents); return; } @@ -430,7 +569,7 @@ export class GPUTestBase extends Fixture { // Copy into a buffer suitable for STORAGE usage. const storageBuffer = this.device.createBuffer({ size: bufferSize, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST }); this.trackForCleanup(storageBuffer); @@ -443,7 +582,7 @@ export class GPUTestBase extends Fixture { const expectedDataBuffer = this.device.createBuffer({ size: expectedDataSize, usage: GPUBufferUsage.STORAGE, - mappedAtCreation: true, + mappedAtCreation: true }); this.trackForCleanup(expectedDataBuffer); const expectedData = new Uint32Array(expectedDataBuffer.getMappedRange()); @@ -466,7 +605,7 @@ export class GPUTestBase extends Fixture { // read from the corresponding row matches the expected data derived above, or 0 otherwise. const resultBuffer = this.device.createBuffer({ size: numRows * 4, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); this.trackForCleanup(resultBuffer); @@ -497,17 +636,17 @@ export class GPUTestBase extends Fixture { layout: 'auto', compute: { module: this.device.createShaderModule({ code: reducer }), - entryPoint: 'reduce', - }, + entryPoint: 'reduce' + } }); const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: { buffer: expectedDataBuffer } }, - { binding: 1, resource: { buffer: storageBuffer } }, - { binding: 2, resource: { buffer: resultBuffer } }, - ], + { binding: 0, resource: { buffer: expectedDataBuffer } }, + { binding: 1, resource: { buffer: storageBuffer } }, + { binding: 2, resource: { buffer: resultBuffer } }] + }); const commandEncoder = this.device.createCommandEncoder(); @@ -529,7 +668,23 @@ export class GPUTestBase extends Fixture { * Expect an entire GPUTexture to have a single color at the given mip level (defaults to 0). * MAINTENANCE_TODO: Remove this and/or replace it with a helper in TextureTestMixin. */ - expectSingleColor(src, format, { size, exp, dimension = '2d', slice = 0, layout }) { + expectSingleColor( + src, + format, + { + size, + exp, + dimension = '2d', + slice = 0, + layout + + + + + + + }) + { assert( slice === 0 || dimension === '2d', 'texture slices are only implemented for 2d textures' @@ -542,23 +697,22 @@ export class GPUTestBase extends Fixture { size, layout ); - // MAINTENANCE_TODO: getTextureCopyLayout does not return the proper size for array textures, // i.e. it will leave the z/depth value as is instead of making it 1 when dealing with 2d // texture arrays. Since we are passing in the dimension, we should update it to return the // corrected size. const copySize = [ - mipSize[0], - dimension !== '1d' ? mipSize[1] : 1, - dimension === '3d' ? mipSize[2] : 1, - ]; + mipSize[0], + dimension !== '1d' ? mipSize[1] : 1, + dimension === '3d' ? mipSize[2] : 1]; + const rep = kTexelRepresentationInfo[format]; const expectedTexelData = rep.pack(rep.encode(exp)); const buffer = this.device.createBuffer({ size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); this.trackForCleanup(buffer); @@ -568,19 +722,18 @@ export class GPUTestBase extends Fixture { texture: src, mipLevel: layout?.mipLevel, origin: { x: 0, y: 0, z: slice }, - aspect: layout?.aspect, + aspect: layout?.aspect }, { buffer, bytesPerRow, rowsPerImage }, copySize ); - this.queue.submit([commandEncoder.finish()]); this.expectGPUBufferRepeatsSingleValue(buffer, { expectedValue: expectedTexelData, numRows: rowsPerImage * copySize[2], minBytesPerRow, - bytesPerRow, + bytesPerRow }); } @@ -588,16 +741,20 @@ export class GPUTestBase extends Fixture { * Return a GPUBuffer that data are going to be written into. * MAINTENANCE_TODO: Remove this once expectSinglePixelBetweenTwoValuesIn2DTexture is removed. */ - readSinglePixelFrom2DTexture(src, format, { x, y }, { slice = 0, layout }) { + readSinglePixelFrom2DTexture( + src, + format, + { x, y }, + { slice = 0, layout }) + { const { byteLength, bytesPerRow, rowsPerImage } = getTextureSubCopyLayout( format, [1, 1], layout ); - const buffer = this.device.createBuffer({ size: byteLength, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); this.trackForCleanup(buffer); @@ -607,7 +764,6 @@ export class GPUTestBase extends Fixture { { buffer, bytesPerRow, rowsPerImage }, [1, 1] ); - this.queue.submit([commandEncoder.finish()]); return buffer; @@ -620,27 +776,36 @@ export class GPUTestBase extends Fixture { * MAINTENANCE_TODO: Remove this once there is a way to deal with undefined lerp-ed values. */ expectSinglePixelBetweenTwoValuesIn2DTexture( - src, - format, - { x, y }, - { - exp, - slice = 0, - layout, - generateWarningOnly = false, - checkElementsBetweenFn = (act, [a, b]) => checkElementsBetween(act, [i => a[i], i => b[i]]), - } - ) { + src, + format, + { x, y }, + { + exp, + slice = 0, + layout, + generateWarningOnly = false, + checkElementsBetweenFn = (act, [a, b]) => checkElementsBetween(act, [(i) => a[i], (i) => b[i]]) + + + + + + + + + + }) + { assert(exp[0].constructor === exp[1].constructor); const constructor = exp[0].constructor; assert(exp[0].length === exp[1].length); const typedLength = exp[0].length; const buffer = this.readSinglePixelFrom2DTexture(src, format, { x, y }, { slice, layout }); - this.expectGPUBufferValuesPassCheck(buffer, a => checkElementsBetweenFn(a, exp), { + this.expectGPUBufferValuesPassCheck(buffer, (a) => checkElementsBetweenFn(a, exp), { type: constructor, typedLength, - mode: generateWarningOnly ? 'warn' : 'fail', + mode: generateWarningOnly ? 'warn' : 'fail' }); } @@ -658,11 +823,16 @@ export class GPUTestBase extends Fixture { * * @returns storage buffer containing the copied value from the texture. */ - copySinglePixelTextureToBufferUsingComputePass(type, componentCount, textureView, sampleCount) { + copySinglePixelTextureToBufferUsingComputePass( + type, + componentCount, + textureView, + sampleCount) + { const textureSrcCode = - sampleCount === 1 - ? `@group(0) @binding(0) var src: texture_2d<${type}>;` - : `@group(0) @binding(0) var src: texture_multisampled_2d<${type}>;`; + sampleCount === 1 ? + `@group(0) @binding(0) var src: texture_2d<${type}>;` : + `@group(0) @binding(0) var src: texture_multisampled_2d<${type}>;`; const code = ` struct Buffer { data: array<${type}>, @@ -687,32 +857,32 @@ export class GPUTestBase extends Fixture { layout: 'auto', compute: { module: this.device.createShaderModule({ - code, + code }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const storageBuffer = this.device.createBuffer({ size: sampleCount * type.size * componentCount, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC }); this.trackForCleanup(storageBuffer); const uniformBindGroup = this.device.createBindGroup({ layout: computePipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: textureView, - }, - { - binding: 1, - resource: { - buffer: storageBuffer, - }, - }, - ], + { + binding: 0, + resource: textureView + }, + { + binding: 1, + resource: { + buffer: storageBuffer + } + }] + }); const encoder = this.device.createCommandEncoder(); @@ -739,7 +909,7 @@ export class GPUTestBase extends Fixture { const returnValue = fn(); const promise = this.device.popErrorScope(); - this.eventualAsyncExpectation(async niceStack => { + this.eventualAsyncExpectation(async (niceStack) => { const error = await promise; let failed = false; @@ -797,7 +967,7 @@ export class GPUTestBase extends Fixture { if (shouldError) { const promise = this.device.popErrorScope(); - this.eventualAsyncExpectation(async niceStack => { + this.eventualAsyncExpectation(async (niceStack) => { const gpuValidationError = await promise; if (!gpuValidationError) { niceStack.message = 'Validation succeeded unexpectedly.'; @@ -843,102 +1013,109 @@ export class GPUTestBase extends Fixture { * }); * ``` */ - createEncoder(encoderType, { attachmentInfo, occlusionQuerySet } = {}) { + createEncoder( + encoderType, + { + attachmentInfo, + occlusionQuerySet + + + + } = {}) + { const fullAttachmentInfo = { // Defaults if not overridden: colorFormats: ['rgba8unorm'], sampleCount: 1, // Passed values take precedent. - ...attachmentInfo, + ...attachmentInfo }; switch (encoderType) { - case 'non-pass': { - const encoder = this.device.createCommandEncoder(); + case 'non-pass':{ + const encoder = this.device.createCommandEncoder(); - return new CommandBufferMaker(this, encoder, () => { - return encoder.finish(); - }); - } - case 'render bundle': { - const device = this.device; - const rbEncoder = device.createRenderBundleEncoder(fullAttachmentInfo); - const pass = this.createEncoder('render pass', { attachmentInfo }); + return new CommandBufferMaker(this, encoder, () => { + return encoder.finish(); + }); + } + case 'render bundle':{ + const device = this.device; + const rbEncoder = device.createRenderBundleEncoder(fullAttachmentInfo); + const pass = this.createEncoder('render pass', { attachmentInfo }); - return new CommandBufferMaker(this, rbEncoder, () => { - pass.encoder.executeBundles([rbEncoder.finish()]); - return pass.finish(); - }); - } - case 'compute pass': { - const commandEncoder = this.device.createCommandEncoder(); - const encoder = commandEncoder.beginComputePass(); + return new CommandBufferMaker(this, rbEncoder, () => { + pass.encoder.executeBundles([rbEncoder.finish()]); + return pass.finish(); + }); + } + case 'compute pass':{ + const commandEncoder = this.device.createCommandEncoder(); + const encoder = commandEncoder.beginComputePass(); - return new CommandBufferMaker(this, encoder, () => { - encoder.end(); - return commandEncoder.finish(); - }); - } - case 'render pass': { - const makeAttachmentView = format => + return new CommandBufferMaker(this, encoder, () => { + encoder.end(); + return commandEncoder.finish(); + }); + } + case 'render pass':{ + const makeAttachmentView = (format) => this.trackForCleanup( this.device.createTexture({ size: [16, 16, 1], format, usage: GPUTextureUsage.RENDER_ATTACHMENT, - sampleCount: fullAttachmentInfo.sampleCount, + sampleCount: fullAttachmentInfo.sampleCount }) ).createView(); - let depthStencilAttachment = undefined; - if (fullAttachmentInfo.depthStencilFormat !== undefined) { - depthStencilAttachment = { - view: makeAttachmentView(fullAttachmentInfo.depthStencilFormat), - depthReadOnly: fullAttachmentInfo.depthReadOnly, - stencilReadOnly: fullAttachmentInfo.stencilReadOnly, - }; - if ( + let depthStencilAttachment = undefined; + if (fullAttachmentInfo.depthStencilFormat !== undefined) { + depthStencilAttachment = { + view: makeAttachmentView(fullAttachmentInfo.depthStencilFormat), + depthReadOnly: fullAttachmentInfo.depthReadOnly, + stencilReadOnly: fullAttachmentInfo.stencilReadOnly + }; + if ( kTextureFormatInfo[fullAttachmentInfo.depthStencilFormat].depth && - !fullAttachmentInfo.depthReadOnly - ) { - depthStencilAttachment.depthClearValue = 0; - depthStencilAttachment.depthLoadOp = 'clear'; - depthStencilAttachment.depthStoreOp = 'discard'; - } - if ( + !fullAttachmentInfo.depthReadOnly) + { + depthStencilAttachment.depthClearValue = 0; + depthStencilAttachment.depthLoadOp = 'clear'; + depthStencilAttachment.depthStoreOp = 'discard'; + } + if ( kTextureFormatInfo[fullAttachmentInfo.depthStencilFormat].stencil && - !fullAttachmentInfo.stencilReadOnly - ) { - depthStencilAttachment.stencilClearValue = 1; - depthStencilAttachment.stencilLoadOp = 'clear'; - depthStencilAttachment.stencilStoreOp = 'discard'; + !fullAttachmentInfo.stencilReadOnly) + { + depthStencilAttachment.stencilClearValue = 1; + depthStencilAttachment.stencilLoadOp = 'clear'; + depthStencilAttachment.stencilStoreOp = 'discard'; + } } + const passDesc = { + colorAttachments: Array.from(fullAttachmentInfo.colorFormats, (format) => + format ? + { + view: makeAttachmentView(format), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + } : + null + ), + depthStencilAttachment, + occlusionQuerySet + }; + + const commandEncoder = this.device.createCommandEncoder(); + const encoder = commandEncoder.beginRenderPass(passDesc); + return new CommandBufferMaker(this, encoder, () => { + encoder.end(); + return commandEncoder.finish(); + }); } - const passDesc = { - colorAttachments: Array.from(fullAttachmentInfo.colorFormats, format => - format - ? { - view: makeAttachmentView(format), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - } - : null - ), - - depthStencilAttachment, - occlusionQuerySet, - }; - - const commandEncoder = this.device.createCommandEncoder(); - const encoder = commandEncoder.beginRenderPass(passDesc); - return new CommandBufferMaker(this, encoder, () => { - encoder.end(); - return commandEncoder.finish(); - }); - } } - unreachable(); } } @@ -949,6 +1126,8 @@ export class GPUTestBase extends Fixture { export class GPUTest extends GPUTestBase { // Should never be undefined in a test. If it is, init() must not have run/finished. + + async init() { await super.init(); @@ -973,7 +1152,6 @@ export class GPUTest extends GPUTestBase { this.mismatchedProvider !== undefined, 'selectMismatchedDeviceOrSkipTestCase was not called in beforeAllSubcases' ); - return this.mismatchedProvider.device; } @@ -991,13 +1169,156 @@ export class GPUTest extends GPUTestBase { * related expectation helpers. */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + const s_deviceToResourcesMap = new WeakMap(); /** * Gets a (cached) pipeline to render a texture to an rgba8unorm texture */ -function getPipelineToRenderTextureToRGB8UnormTexture(device) { +function getPipelineToRenderTextureToRGB8UnormTexture( +device, +texture, +isCompatibility) +{ if (!s_deviceToResourcesMap.has(device)) { + s_deviceToResourcesMap.set(device, { + pipelineByPipelineType: new Map() + }); + } + + const { pipelineByPipelineType } = s_deviceToResourcesMap.get(device); + const pipelineType = + isCompatibility && texture.depthOrArrayLayers > 1 ? '2d-array' : '2d'; + if (!pipelineByPipelineType.get(pipelineType)) { + const [textureType, layerCode] = + pipelineType === '2d' ? ['texture_2d', ''] : ['texture_2d_array', ', uni.baseArrayLayer']; const module = device.createShaderModule({ code: ` struct VSOutput { @@ -1005,6 +1326,10 @@ function getPipelineToRenderTextureToRGB8UnormTexture(device) { @location(0) texcoord: vec2f, }; + struct Uniforms { + baseArrayLayer: u32, + }; + @vertex fn vs( @builtin(vertex_index) vertexIndex : u32 ) -> VSOutput { @@ -1025,71 +1350,88 @@ function getPipelineToRenderTextureToRGB8UnormTexture(device) { } @group(0) @binding(0) var ourSampler: sampler; - @group(0) @binding(1) var ourTexture: texture_2d; + @group(0) @binding(1) var ourTexture: ${textureType}; + @group(0) @binding(2) var uni: Uniforms; @fragment fn fs(fsInput: VSOutput) -> @location(0) vec4f { - return textureSample(ourTexture, ourSampler, fsInput.texcoord); + return textureSample(ourTexture, ourSampler, fsInput.texcoord${layerCode}); } - `, + ` }); const pipeline = device.createRenderPipeline({ layout: 'auto', vertex: { module, - entryPoint: 'vs', + entryPoint: 'vs' }, fragment: { module, entryPoint: 'fs', - targets: [{ format: 'rgba8unorm' }], - }, + targets: [{ format: 'rgba8unorm' }] + } }); - s_deviceToResourcesMap.set(device, { pipeline }); + pipelineByPipelineType.set(pipelineType, pipeline); } - const { pipeline } = s_deviceToResourcesMap.get(device); - return pipeline; + const pipeline = pipelineByPipelineType.get(pipelineType); + return { pipelineType, pipeline }; } -export function TextureTestMixin(Base) { - class TextureExpectations extends Base { - createTextureFromTexelView(texelView, desc) { + + + + + + +export function TextureTestMixin( +Base) +{ + class TextureExpectations extends + Base + + { + createTextureFromTexelView( + texelView, + desc) + { return this.trackForCleanup(createTextureFromTexelView(this.device, texelView, desc)); } - createTextureFromTexelViewsMultipleMipmaps(texelViews, desc) { + createTextureFromTexelViewsMultipleMipmaps( + texelViews, + desc) + { return this.trackForCleanup(createTextureFromTexelViews(this.device, texelViews, desc)); } expectTexelViewComparisonIsOkInTexture( - src, - exp, - size, - comparisonOptions = { - maxIntDiff: 0, - maxDiffULPsForNormFormat: 1, - maxDiffULPsForFloatFormat: 1, - } - ) { + src, + exp, + size, + comparisonOptions = { + maxIntDiff: 0, + maxDiffULPsForNormFormat: 1, + maxDiffULPsForFloatFormat: 1 + }) + { this.eventualExpectOK( textureContentIsOKByT2B(this, src, size, { expTexelView: exp }, comparisonOptions) ); } expectSinglePixelComparisonsAreOkInTexture( - src, - exp, - comparisonOptions = { - maxIntDiff: 0, - maxDiffULPsForNormFormat: 1, - maxDiffULPsForFloatFormat: 1, - } - ) { + src, + exp, + comparisonOptions = { + maxIntDiff: 0, + maxDiffULPsForNormFormat: 1, + maxDiffULPsForFloatFormat: 1 + }) + { assert(exp.length > 0, 'must specify at least one pixel comparison'); assert( kEncodableTextureFormats.includes(src.texture.format), () => `${src.texture.format} is not an encodable format` ); - const lowerCorner = [src.texture.width, src.texture.height, src.texture.depthOrArrayLayers]; const upperCorner = [0, 0, 0]; const expMap = new Map(); @@ -1114,42 +1456,44 @@ export function TextureTestMixin(Base) { !expMap.has(coordKey), () => `duplicate pixel expectation at coordinate (${coord.x},${coord.y},${coord.z})` ); - expMap.set(coordKey, e.exp); } const size = [ - upperCorner[0] - lowerCorner[0] + 1, - upperCorner[1] - lowerCorner[1] + 1, - upperCorner[2] - lowerCorner[2] + 1, - ]; + upperCorner[0] - lowerCorner[0] + 1, + upperCorner[1] - lowerCorner[1] + 1, + upperCorner[2] - lowerCorner[2] + 1]; let expTexelView; if (Symbol.iterator in exp[0].exp) { - expTexelView = TexelView.fromTexelsAsBytes(src.texture.format, coord => { - const res = expMap.get(JSON.stringify(coord)); - assert( - res !== undefined, - () => `invalid coordinate (${coord.x},${coord.y},${coord.z}) in sparse texel view` - ); - - return res; - }); + expTexelView = TexelView.fromTexelsAsBytes( + src.texture.format, + (coord) => { + const res = expMap.get(JSON.stringify(coord)); + assert( + res !== undefined, + () => `invalid coordinate (${coord.x},${coord.y},${coord.z}) in sparse texel view` + ); + return res; + } + ); } else { - expTexelView = TexelView.fromTexelsAsColors(src.texture.format, coord => { - const res = expMap.get(JSON.stringify(coord)); - assert( - res !== undefined, - () => `invalid coordinate (${coord.x},${coord.y},${coord.z}) in sparse texel view` - ); - - return res; - }); + expTexelView = TexelView.fromTexelsAsColors( + src.texture.format, + (coord) => { + const res = expMap.get(JSON.stringify(coord)); + assert( + res !== undefined, + () => `invalid coordinate (${coord.x},${coord.y},${coord.z}) in sparse texel view` + ); + return res; + } + ); } - const coordsF = (function* () { + const coordsF = function* () { for (const coord of coords) { yield coord; } - })(); + }(); this.eventualExpectOK( textureContentIsOKByT2B( @@ -1163,11 +1507,21 @@ export function TextureTestMixin(Base) { ); } - expectTexturesToMatchByRendering(actualTexture, expectedTexture, mipLevel, origin, size) { + expectTexturesToMatchByRendering( + actualTexture, + expectedTexture, + mipLevel, + origin, + size) + { // Render every layer of both textures at mipLevel to an rgba8unorm texture // that matches the size of the mipLevel. After each render, copy the // result to a buffer and expect the results from both textures to match. - const pipeline = getPipelineToRenderTextureToRGB8UnormTexture(this.device); + const { pipelineType, pipeline } = getPipelineToRenderTextureToRGB8UnormTexture( + this.device, + actualTexture, + this.isCompatibility + ); const readbackPromisesPerTexturePerLayer = [actualTexture, expectedTexture].map( (texture, ndx) => { const attachmentSize = virtualMipSize('2d', [texture.width, texture.height, 1], mipLevel); @@ -1175,7 +1529,7 @@ export function TextureTestMixin(Base) { label: `readback${ndx}`, size: attachmentSize, format: 'rgba8unorm', - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); this.trackForCleanup(attachment); @@ -1183,34 +1537,55 @@ export function TextureTestMixin(Base) { const numLayers = texture.depthOrArrayLayers; const readbackPromisesPerLayer = []; + + const uniformBuffer = this.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST + }); + this.trackForCleanup(uniformBuffer); + for (let layer = 0; layer < numLayers; ++layer) { + const viewDescriptor = { + baseMipLevel: mipLevel, + mipLevelCount: 1, + ...(!this.isCompatibility && { + baseArrayLayer: layer, + arrayLayerCount: 1 + }), + dimension: pipelineType + }; + const bindGroup = this.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: sampler }, - { - binding: 1, - resource: texture.createView({ - baseMipLevel: mipLevel, - mipLevelCount: 1, - baseArrayLayer: layer, - arrayLayerCount: 1, - dimension: '2d', - }), - }, - ], + { binding: 0, resource: sampler }, + { + binding: 1, + resource: texture.createView(viewDescriptor) + }, + ...(pipelineType === '2d-array' ? + [ + { + binding: 2, + resource: { buffer: uniformBuffer } + }] : + + [])] + }); + this.device.queue.writeBuffer(uniformBuffer, 0, new Uint32Array([layer])); + const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: attachment.createView(), - clearValue: [0.5, 0.5, 0.5, 0.5], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: attachment.createView(), + clearValue: [0.5, 0.5, 0.5, 0.5], + loadOp: 'clear', + storeOp: 'store' + }] + }); pass.setPipeline(pipeline); pass.setBindGroup(0, bindGroup); @@ -1223,7 +1598,7 @@ export function TextureTestMixin(Base) { readbackPromisesPerLayer.push( this.readGPUBufferRangeTyped(buffer, { type: Uint8Array, - typedLength: buffer.size, + typedLength: buffer.size }) ); } @@ -1231,7 +1606,7 @@ export function TextureTestMixin(Base) { } ); - this.eventualAsyncExpectation(async niceStack => { + this.eventualAsyncExpectation(async (niceStack) => { const readbacksPerTexturePerLayer = []; // Wait for all buffers to be ready @@ -1241,9 +1616,9 @@ export function TextureTestMixin(Base) { function arrayNotAllTheSameValue(arr, msg) { const first = arr[0]; - return arr.length <= 1 || arr.findIndex(v => v !== first) >= 0 - ? undefined - : Error(`array is entirely ${first} so likely nothing was tested: ${msg || ''}`); + return arr.length <= 1 || arr.findIndex((v) => v !== first) >= 0 ? + undefined : + Error(`array is entirely ${first} so likely nothing was tested: ${msg || ''}`); } // Compare each layer of each texture as read from buffer. @@ -1252,21 +1627,19 @@ export function TextureTestMixin(Base) { const actualReadback = actualReadbacksPerLayer[layer]; const expectedReadback = expectedReadbacksPerLayer[layer]; const sameOk = - size.width === 0 || - size.height === 0 || - layer < origin.z || - layer >= origin.z + size.depthOrArrayLayers; + size.width === 0 || + size.height === 0 || + layer < origin.z || + layer >= origin.z + size.depthOrArrayLayers; this.expectOK( sameOk ? undefined : arrayNotAllTheSameValue(actualReadback.data, 'actualTexture') ); - this.expectOK( sameOk ? undefined : arrayNotAllTheSameValue(expectedReadback.data, 'expectedTexture') ); - this.expectOK(checkElementsEqual(actualReadback.data, expectedReadback.data), { mode: 'fail', - niceStack, + niceStack }); actualReadback.cleanup(); expectedReadback.cleanup(); @@ -1294,16 +1667,24 @@ export function TextureTestMixin(Base) { bytesPerBlock, bytesPerRow, rowsPerImage: blocksPerColumn, - byteLength, + byteLength } ); } - copyWholeTextureToNewBuffer({ texture, mipLevel }, resultDataLayout) { + copyWholeTextureToNewBuffer( + { texture, mipLevel }, + resultDataLayout) + + + + + + { const { byteLength, bytesPerRow, rowsPerImage } = resultDataLayout; const buffer = this.device.createBuffer({ size: align(byteLength, 4), // this is necessary because we need to copy and map data from this buffer - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }); this.trackForCleanup(buffer); @@ -1314,13 +1695,19 @@ export function TextureTestMixin(Base) { { buffer, bytesPerRow, rowsPerImage }, mipSize ); - this.device.queue.submit([encoder.finish()]); return buffer; } - updateLinearTextureDataSubBox(format, copySize, copyParams) { + updateLinearTextureDataSubBox( + format, + copySize, + copyParams) + + + + { const { src, dest } = copyParams; const rowLength = bytesInACompleteRow(copySize.width, format); for (const texel of this.iterateBlockRows(copySize, format)) { @@ -1330,14 +1717,12 @@ export function TextureTestMixin(Base) { texel, src.origin ); - const dstOffsetElements = this.getTexelOffsetInBytes( dest.dataLayout, format, texel, dest.origin ); - memcpy( { src: src.data, start: srcOffsetElements, length: rowLength }, { dst: dest.data, start: dstOffsetElements } @@ -1346,7 +1731,12 @@ export function TextureTestMixin(Base) { } /** Offset for a particular texel in the linear texture data */ - getTexelOffsetInBytes(textureDataLayout, format, texel, origin = { x: 0, y: 0, z: 0 }) { + getTexelOffsetInBytes( + textureDataLayout, + format, + texel, + origin = { x: 0, y: 0, z: 0 }) + { const { offset, bytesPerRow, rowsPerImage } = textureDataLayout; const info = kTextureFormatInfo[format]; @@ -1360,12 +1750,15 @@ export function TextureTestMixin(Base) { return ( offset + (texel.z + origin.z) * bytesPerImage + - ((texel.y + origin.y) / info.blockHeight) * bytesPerRow + - ((texel.x + origin.x) / info.blockWidth) * info.color.bytes - ); + (texel.y + origin.y) / info.blockHeight * bytesPerRow + + (texel.x + origin.x) / info.blockWidth * info.color.bytes); + } - *iterateBlockRows(size, format) { + *iterateBlockRows( + size, + format) + { if (size.width === 0 || size.height === 0 || size.depthOrArrayLayers === 0) { // do not iterate anything for an empty region return; @@ -1378,7 +1771,7 @@ export function TextureTestMixin(Base) { yield { x: 0, y, - z, + z }; } } @@ -1386,4 +1779,4 @@ export function TextureTestMixin(Base) { } return TextureExpectations; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constants/flags.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constants/flags.spec.js index 3002c49b231..f7005eea261 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constants/flags.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constants/flags.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test the values of flags interfaces (e.g. GPUTextureUsage). -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { IDLTest } from '../idl_test.js'; export const g = makeTestGroup(IDLTest); @@ -18,63 +17,63 @@ const kBufferUsageExp = { UNIFORM: 0x0040, STORAGE: 0x0080, INDIRECT: 0x0100, - QUERY_RESOLVE: 0x0200, + QUERY_RESOLVE: 0x0200 }; -g.test('BufferUsage,count').fn(t => { +g.test('BufferUsage,count').fn((t) => { t.assertMemberCount(GPUBufferUsage, kBufferUsageExp); }); -g.test('BufferUsage,values') - .params(u => u.combine('key', Object.keys(kBufferUsageExp))) - .fn(t => { - const { key } = t.params; - t.assertMember(GPUBufferUsage, kBufferUsageExp, key); - }); +g.test('BufferUsage,values'). +params((u) => u.combine('key', Object.keys(kBufferUsageExp))). +fn((t) => { + const { key } = t.params; + t.assertMember(GPUBufferUsage, kBufferUsageExp, key); +}); const kTextureUsageExp = { COPY_SRC: 0x01, COPY_DST: 0x02, TEXTURE_BINDING: 0x04, STORAGE_BINDING: 0x08, - RENDER_ATTACHMENT: 0x10, + RENDER_ATTACHMENT: 0x10 }; -g.test('TextureUsage,count').fn(t => { +g.test('TextureUsage,count').fn((t) => { t.assertMemberCount(GPUTextureUsage, kTextureUsageExp); }); -g.test('TextureUsage,values') - .params(u => u.combine('key', Object.keys(kTextureUsageExp))) - .fn(t => { - const { key } = t.params; - t.assertMember(GPUTextureUsage, kTextureUsageExp, key); - }); +g.test('TextureUsage,values'). +params((u) => u.combine('key', Object.keys(kTextureUsageExp))). +fn((t) => { + const { key } = t.params; + t.assertMember(GPUTextureUsage, kTextureUsageExp, key); +}); const kColorWriteExp = { RED: 0x1, GREEN: 0x2, BLUE: 0x4, ALPHA: 0x8, - ALL: 0xf, + ALL: 0xf }; -g.test('ColorWrite,count').fn(t => { +g.test('ColorWrite,count').fn((t) => { t.assertMemberCount(GPUColorWrite, kColorWriteExp); }); -g.test('ColorWrite,values') - .params(u => u.combine('key', Object.keys(kColorWriteExp))) - .fn(t => { - const { key } = t.params; - t.assertMember(GPUColorWrite, kColorWriteExp, key); - }); +g.test('ColorWrite,values'). +params((u) => u.combine('key', Object.keys(kColorWriteExp))). +fn((t) => { + const { key } = t.params; + t.assertMember(GPUColorWrite, kColorWriteExp, key); +}); const kShaderStageExp = { VERTEX: 0x1, FRAGMENT: 0x2, - COMPUTE: 0x4, + COMPUTE: 0x4 }; -g.test('ShaderStage,count').fn(t => { +g.test('ShaderStage,count').fn((t) => { t.assertMemberCount(GPUShaderStage, kShaderStageExp); }); -g.test('ShaderStage,values') - .params(u => u.combine('key', Object.keys(kShaderStageExp))) - .fn(t => { - const { key } = t.params; - t.assertMember(GPUShaderStage, kShaderStageExp, key); - }); +g.test('ShaderStage,values'). +params((u) => u.combine('key', Object.keys(kShaderStageExp))). +fn((t) => { + const { key } = t.params; + t.assertMember(GPUShaderStage, kShaderStageExp, key); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constructable.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constructable.spec.js new file mode 100644 index 00000000000..7104b2e812b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/constructable.spec.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Test that constructable WebGPU objects are actually constructable. +`;import { makeTestGroup } from './../../common/framework/test_group.js'; +import { IDLTest } from './idl_test.js'; + +export const g = makeTestGroup(IDLTest); + +g.test('gpu_errors'). +desc('tests that GPUErrors are constructable'). +params((u) => +u.combine('errorType', [ +'GPUInternalError', +'GPUOutOfMemoryError', +'GPUValidationError'] +) +). +fn((t) => { + const { errorType } = t.params; + const Ctor = globalThis[errorType]; + const msg = 'this is a test'; + const error = new Ctor(msg); + t.expect(error.message === msg); +}); + +const pipelineErrorOptions = [ +{ reason: 'validation' }, +{ reason: 'internal' }]; + + +g.test('pipeline_errors'). +desc('tests that GPUPipelineError is constructable'). +params((u) => +u // +.combine('msg', [undefined, 'some msg']). +combine('options', pipelineErrorOptions) +). +fn((t) => { + const { msg, options } = t.params; + const error = new GPUPipelineError(msg, options); + const expectedMsg = msg || ''; + t.expect(error.message === expectedMsg); + t.expect(error.reason === options.reason); +}); + +g.test('uncaptured_error_event'). +desc('tests that GPUUncapturedErrorEvent is constructable'). +fn((t) => { + const msg = 'this is a test'; + const error = new GPUValidationError(msg); + const event = new GPUUncapturedErrorEvent('uncapturedError', { error }); + t.expect(event.error === error); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/exposed.html.js b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/exposed.html.js index 7ac9f2ef50b..a62aeff8633 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/exposed.html.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/exposed.html.js @@ -1,47 +1,47 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ // WPT-specific test checking that WebGPU is available iff isSecureContext. +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // WPT-specific test checking that WebGPU is available iff isSecureContext. import { assert } from '../../common/util/util.js'; const items = [ - globalThis.navigator.gpu, - globalThis.GPU, - globalThis.GPUAdapter, - globalThis.GPUAdapterInfo, - globalThis.GPUBindGroup, - globalThis.GPUBindGroupLayout, - globalThis.GPUBuffer, - globalThis.GPUBufferUsage, - globalThis.GPUCanvasContext, - globalThis.GPUColorWrite, - globalThis.GPUCommandBuffer, - globalThis.GPUCommandEncoder, - globalThis.GPUCompilationInfo, - globalThis.GPUCompilationMessage, - globalThis.GPUComputePassEncoder, - globalThis.GPUComputePipeline, - globalThis.GPUDevice, - globalThis.GPUDeviceLostInfo, - globalThis.GPUError, - globalThis.GPUExternalTexture, - globalThis.GPUMapMode, - globalThis.GPUOutOfMemoryError, - globalThis.GPUPipelineLayout, - globalThis.GPUQuerySet, - globalThis.GPUQueue, - globalThis.GPURenderBundle, - globalThis.GPURenderBundleEncoder, - globalThis.GPURenderPassEncoder, - globalThis.GPURenderPipeline, - globalThis.GPUSampler, - globalThis.GPUShaderModule, - globalThis.GPUShaderStage, - globalThis.GPUSupportedLimits, - globalThis.GPUTexture, - globalThis.GPUTextureUsage, - globalThis.GPUTextureView, - globalThis.GPUUncapturedErrorEvent, - globalThis.GPUValidationError, -]; +globalThis.navigator.gpu, +globalThis.GPU, +globalThis.GPUAdapter, +globalThis.GPUAdapterInfo, +globalThis.GPUBindGroup, +globalThis.GPUBindGroupLayout, +globalThis.GPUBuffer, +globalThis.GPUBufferUsage, +globalThis.GPUCanvasContext, +globalThis.GPUColorWrite, +globalThis.GPUCommandBuffer, +globalThis.GPUCommandEncoder, +globalThis.GPUCompilationInfo, +globalThis.GPUCompilationMessage, +globalThis.GPUComputePassEncoder, +globalThis.GPUComputePipeline, +globalThis.GPUDevice, +globalThis.GPUDeviceLostInfo, +globalThis.GPUError, +globalThis.GPUExternalTexture, +globalThis.GPUMapMode, +globalThis.GPUOutOfMemoryError, +globalThis.GPUPipelineLayout, +globalThis.GPUQuerySet, +globalThis.GPUQueue, +globalThis.GPURenderBundle, +globalThis.GPURenderBundleEncoder, +globalThis.GPURenderPassEncoder, +globalThis.GPURenderPipeline, +globalThis.GPUSampler, +globalThis.GPUShaderModule, +globalThis.GPUShaderStage, +globalThis.GPUSupportedLimits, +globalThis.GPUTexture, +globalThis.GPUTextureUsage, +globalThis.GPUTextureView, +globalThis.GPUUncapturedErrorEvent, +globalThis.GPUValidationError]; + for (const item of items) { if (globalThis.isSecureContext) { @@ -49,4 +49,4 @@ for (const item of items) { } else { assert(item === undefined, 'Item/interface should not be exposed on insecure context'); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/idl_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/idl_test.js index ae6de5376ee..147266da65b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/idl/idl_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/idl/idl_test.js @@ -1,8 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { Fixture } from '../../common/framework/fixture.js'; -import { getGPU } from '../../common/util/navigator_gpu.js'; -import { assert } from '../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Fixture } from '../../common/framework/fixture.js';import { getGPU } from '../../common/util/navigator_gpu.js';import { assert } from '../../common/util/util.js'; + + + + /** * Base fixture for testing the exposed interface is correct (without actually using WebGPU). @@ -36,4 +38,4 @@ export class IDLTest extends Fixture { () => `Had ${actKeys.length} keys, expected ${expKeys.length}` ); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/listing.js b/tests/wpt/webgpu/tests/webgpu/webgpu/listing.js index e0dbc7a51f8..f9128482160 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/listing.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/listing.js @@ -154,7 +154,7 @@ export const listing = [ "command_buffer", "queries" ], - "readme": "TODO: test the behavior of creating/using/resolving queries.\n- pipeline statistics\n TODO: pipeline statistics queries are removed from core; consider moving tests to another suite.\n- timestamp\n- nested (e.g. timestamp or PS query inside occlusion query), if any such cases are valid. Try\n writing to the same query set (at same or different indices), if valid. Check results make sense.\n- start a query (all types) with no draw calls" + "readme": "TODO: test the behavior of creating/using/resolving queries.\n- timestamp\n- nested (e.g. timestamp inside occlusion query), if any such cases are valid. Try\n writing to the same query set (at same or different indices), if valid. Check results make sense.\n- start a query (all types) with no draw calls" }, { "file": [ @@ -1176,15 +1176,6 @@ export const listing = [ "general" ] }, - { - "file": [ - "api", - "validation", - "encoding", - "queries", - "pipeline_statistics" - ] - }, { "file": [ "api", @@ -1586,6 +1577,14 @@ export const listing = [ "rg11b10ufloat_renderable" ] }, + { + "file": [ + "compat", + "api", + "validation", + "createBindGroup" + ] + }, { "file": [ "compat", @@ -1596,6 +1595,16 @@ export const listing = [ "copyTextureToBuffer" ] }, + { + "file": [ + "compat", + "api", + "validation", + "encoding", + "cmds", + "copyTextureToTexture" + ] + }, { "file": [ "compat", @@ -1669,6 +1678,12 @@ export const listing = [ "flags" ] }, + { + "file": [ + "idl", + "constructable" + ] + }, { "file": [ "shader" @@ -1700,6 +1715,15 @@ export const listing = [ "af_comparison" ] }, + { + "file": [ + "shader", + "execution", + "expression", + "binary", + "af_division" + ] + }, { "file": [ "shader", @@ -1727,6 +1751,15 @@ export const listing = [ "af_multiplication" ] }, + { + "file": [ + "shader", + "execution", + "expression", + "binary", + "af_remainder" + ] + }, { "file": [ "shader", @@ -3312,6 +3345,14 @@ export const listing = [ "while" ] }, + { + "file": [ + "shader", + "execution", + "memory_model", + "adjacent" + ] + }, { "file": [ "shader", @@ -3373,6 +3414,14 @@ export const listing = [ "compute_builtins" ] }, + { + "file": [ + "shader", + "execution", + "shader_io", + "fragment_builtins" + ] + }, { "file": [ "shader", @@ -3625,6 +3674,26 @@ export const listing = [ "degrees" ] }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "dot4I8Packed" + ] + }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "dot4U8Packed" + ] + }, { "file": [ "shader", @@ -3695,6 +3764,46 @@ export const listing = [ "modf" ] }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "pack4xI8" + ] + }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "pack4xI8Clamp" + ] + }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "pack4xU8" + ] + }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "pack4xU8Clamp" + ] + }, { "file": [ "shader", @@ -3775,6 +3884,26 @@ export const listing = [ "tan" ] }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "unpack4xI8" + ] + }, + { + "file": [ + "shader", + "validation", + "expression", + "call", + "builtin", + "unpack4xU8" + ] + }, { "file": [ "shader", diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/multisample_info.js b/tests/wpt/webgpu/tests/webgpu/webgpu/multisample_info.js new file mode 100644 index 00000000000..5473d4ca742 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/multisample_info.js @@ -0,0 +1,75 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /* Data used for multisample tests */const samplePositionToFragmentPosition = (pos) => +pos.map((v) => v / 16); +const samplePositionsToFragmentPositions = ( +positions) => +positions.map(samplePositionToFragmentPosition); + +// These are sample positions based on a 16x16 grid with 0,0 at the top left. +// For example 8,8 would be a fragment coordinate of 0.5, 0.5 +// Based on: https://learn.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels +const kMultisamplingTables = new Map([ +[1, samplePositionsToFragmentPositions([[8, 8]])], +[ +2, +samplePositionsToFragmentPositions([ +[4, 4], +[12, 12]] +)], + +[ +4, +samplePositionsToFragmentPositions([ +[6, 2], +[14, 6], +[2, 10], +[10, 14]] +)], + +[ +8, +samplePositionsToFragmentPositions([ +[9, 5], +[7, 11], +[13, 9], +[5, 3], +[3, 13], +[1, 7], +[11, 15], +[15, 1]] +)], + +[ +16, +samplePositionsToFragmentPositions([ +[9, 9], +[7, 5], +[5, 10], +[12, 7], + +[3, 6], +[10, 13], +[13, 11], +[11, 3], + +[6, 14], +[8, 1], +[4, 2], +[2, 12], + +[0, 8], +[15, 4], +[14, 15], +[1, 0]] +)]] + +); + +/** + * For a given sampleCount returns an array of 2d fragment offsets + * where each offset is between 0 and 1. + */ +export function getMultisampleFragmentOffsets(sampleCount) { + return kMultisamplingTables.get(sampleCount); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.cache.js new file mode 100644 index 00000000000..402fd1add81 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.cache.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF64Range, sparseVectorF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const additionVectorScalarInterval = (v, s) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.additionInterval(e, s))); +}; + +const additionScalarVectorInterval = (s, v) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.additionInterval(s, e))); +}; + +const scalar_cases = { + ['scalar']: () => { + return FP.abstract.generateScalarPairToIntervalCases( + sparseScalarF64Range(), + sparseScalarF64Range(), + 'finite', + FP.abstract.additionInterval + ); + } +}; + +const vector_scalar_cases = [2, 3, 4]. +map((dim) => ({ + [`vec${dim}_scalar`]: () => { + return FP.abstract.generateVectorScalarToVectorCases( + sparseVectorF64Range(dim), + sparseScalarF64Range(), + 'finite', + additionVectorScalarInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +map((dim) => ({ + [`scalar_vec${dim}`]: () => { + return FP.abstract.generateScalarVectorToVectorCases( + sparseScalarF64Range(), + sparseVectorF64Range(dim), + 'finite', + additionScalarVectorInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_addition', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.spec.js index 7fa06b47e4f..44259f01729 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_addition.spec.js @@ -1,153 +1,101 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix AbstractFloat addition expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeAbstractFloat, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF64Range, sparseVectorF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { onlyConstInputSource, run } from '../expression.js'; +import { d } from './af_addition.cache.js'; import { abstractBinary } from './binary.js'; -const additionVectorScalarInterval = (v, s) => { - return FP.abstract.toVector(v.map(e => FP.abstract.additionInterval(e, s))); -}; - -const additionScalarVectorInterval = (s, v) => { - return FP.abstract.toVector(v.map(e => FP.abstract.additionInterval(s, e))); -}; - export const g = makeTestGroup(GPUTest); -const scalar_cases = { - ['scalar']: () => { - return FP.abstract.generateScalarPairToIntervalCases( - sparseF64Range(), - sparseF64Range(), - 'finite', - FP.abstract.additionInterval - ); - }, -}; - -const vector_scalar_cases = [2, 3, 4] - .map(dim => ({ - [`vec${dim}_scalar`]: () => { - return FP.abstract.generateVectorScalarToVectorCases( - sparseVectorF64Range(dim), - sparseF64Range(), - 'finite', - additionVectorScalarInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .map(dim => ({ - [`scalar_vec${dim}`]: () => { - return FP.abstract.generateScalarVectorToVectorCases( - sparseF64Range(), - sparseVectorF64Range(dim), - 'finite', - additionScalarVectorInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/af_addition', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('scalar'); - await run( - t, - abstractBinary('+'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('scalar'); + await run( + t, + abstractBinary('+'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases - await run( - t, - abstractBinary('+'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +). +params((u) => +u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases + await run( + t, + abstractBinary('+'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get(`vec${dim}_scalar`); - await run( - t, - abstractBinary('+'), - [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], - TypeVec(dim, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`vec${dim}_scalar`); + await run( + t, + abstractBinary('+'), + [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get(`scalar_vec${dim}`); - await run( - t, - abstractBinary('+'), - [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], - TypeVec(dim, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`scalar_vec${dim}`); + await run( + t, + abstractBinary('+'), + [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.cache.js new file mode 100644 index 00000000000..382c8f59dd4 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.cache.js @@ -0,0 +1,90 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf } from '../../../../util/compare.js';import { abstractFloat, bool } from '../../../../util/conversion.js';import { flushSubnormalNumberF64, vectorF64Range } from '../../../../util/math.js'; + +import { makeCaseCache } from '../case_cache.js'; + +/** + * @returns a test case for the provided left hand & right hand values and truth function. + * Handles quantization and subnormals. + */ +function makeCase( +lhs, +rhs, +truthFunc) +{ + // Subnormal float values may be flushed at any time. + // https://www.w3.org/TR/WGSL/#floating-point-evaluation + const af_lhs = abstractFloat(lhs); + const af_rhs = abstractFloat(rhs); + const lhs_options = new Set([af_lhs, abstractFloat(flushSubnormalNumberF64(lhs))]); + const rhs_options = new Set([af_rhs, abstractFloat(flushSubnormalNumberF64(rhs))]); + const expected = []; + lhs_options.forEach((l) => { + rhs_options.forEach((r) => { + const result = bool(truthFunc(l, r)); + if (!expected.includes(result)) { + expected.push(result); + } + }); + }); + + return { input: [af_lhs, af_rhs], expected: anyOf(...expected) }; +} + +export const d = makeCaseCache('binary/af_logical', { + equals: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value === rhs.value; + }; + + return vectorF64Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + not_equals: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value !== rhs.value; + }; + + return vectorF64Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_than: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value < rhs.value; + }; + + return vectorF64Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_equals: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value <= rhs.value; + }; + + return vectorF64Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_than: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value > rhs.value; + }; + + return vectorF64Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_equals: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value >= rhs.value; + }; + + return vectorF64Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.spec.js index 1d3e2a3314b..e5205ccf1d6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_comparison.spec.js @@ -1,205 +1,121 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the AbstractFloat comparison operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { anyOf } from '../../../../util/compare.js'; -import { abstractFloat, bool, TypeAbstractFloat, TypeBool } from '../../../../util/conversion.js'; -import { flushSubnormalNumberF64, vectorF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeAbstractFloat, TypeBool } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './af_comparison.cache.js'; import { binary } from './binary.js'; export const g = makeTestGroup(GPUTest); -/** - * @returns a test case for the provided left hand & right hand values and truth function. - * Handles quantization and subnormals. - */ -function makeCase(lhs, rhs, truthFunc) { - // Subnormal float values may be flushed at any time. - // https://www.w3.org/TR/WGSL/#floating-point-evaluation - const af_lhs = abstractFloat(lhs); - const af_rhs = abstractFloat(rhs); - const lhs_options = new Set([af_lhs, abstractFloat(flushSubnormalNumberF64(lhs))]); - const rhs_options = new Set([af_rhs, abstractFloat(flushSubnormalNumberF64(rhs))]); - const expected = []; - lhs_options.forEach(l => { - rhs_options.forEach(r => { - const result = bool(truthFunc(l, r)); - if (!expected.includes(result)) { - expected.push(result); - } - }); - }); - - return { input: [af_lhs, af_rhs], expected: anyOf(...expected) }; -} - -export const d = makeCaseCache('binary/af_logical', { - equals: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value === rhs.value; - }; - - return vectorF64Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - not_equals: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value !== rhs.value; - }; - - return vectorF64Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_than: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value < rhs.value; - }; - - return vectorF64Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_equals: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value <= rhs.value; - }; - - return vectorF64Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_than: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value > rhs.value; - }; - - return vectorF64Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_equals: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value >= rhs.value; - }; - - return vectorF64Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, -}); - -g.test('equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x == y Accuracy: Correct result ` - ) - .params(u => - u - .combine('inputSource', [allInputSources[0]] /* const */) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('equals'); - await run(t, binary('=='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); - }); +). +params((u) => +u. +combine('inputSource', [allInputSources[0]] /* const */). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('equals'); + await run(t, binary('=='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); +}); -g.test('not_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('not_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x != y Accuracy: Correct result ` - ) - .params(u => - u - .combine('inputSource', [allInputSources[0]] /* const */) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('not_equals'); - await run(t, binary('!='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); - }); +). +params((u) => +u. +combine('inputSource', [allInputSources[0]] /* const */). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('not_equals'); + await run(t, binary('!='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); +}); -g.test('less_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x < y Accuracy: Correct result ` - ) - .params(u => - u - .combine('inputSource', [allInputSources[0]] /* const */) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('less_than'); - await run(t, binary('<'), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); - }); +). +params((u) => +u. +combine('inputSource', [allInputSources[0]] /* const */). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('less_than'); + await run(t, binary('<'), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); +}); -g.test('less_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x <= y Accuracy: Correct result ` - ) - .params(u => - u - .combine('inputSource', [allInputSources[0]] /* const */) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('less_equals'); - await run(t, binary('<='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); - }); +). +params((u) => +u. +combine('inputSource', [allInputSources[0]] /* const */). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('less_equals'); + await run(t, binary('<='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); +}); -g.test('greater_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x > y Accuracy: Correct result ` - ) - .params(u => - u - .combine('inputSource', [allInputSources[0]] /* const */) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('greater_than'); - await run(t, binary('>'), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); - }); +). +params((u) => +u. +combine('inputSource', [allInputSources[0]] /* const */). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('greater_than'); + await run(t, binary('>'), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); +}); -g.test('greater_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x >= y Accuracy: Correct result ` - ) - .params(u => - u - .combine('inputSource', [allInputSources[0]] /* const */) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('greater_equals'); - await run(t, binary('>='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); - }); +). +params((u) => +u. +combine('inputSource', [allInputSources[0]] /* const */). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('greater_equals'); + await run(t, binary('>='), [TypeAbstractFloat, TypeAbstractFloat], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.cache.js new file mode 100644 index 00000000000..867a448b26a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.cache.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF64Range, sparseVectorF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const divisionVectorScalarInterval = (v, s) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.divisionInterval(e, s))); +}; + +const divisionScalarVectorInterval = (s, v) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.divisionInterval(s, e))); +}; + +const scalar_cases = { + ['scalar']: () => { + return FP.abstract.generateScalarPairToIntervalCases( + sparseScalarF64Range(), + sparseScalarF64Range(), + 'finite', + FP.abstract.divisionInterval + ); + } +}; + +const vector_scalar_cases = [2, 3, 4]. +map((dim) => ({ + [`vec${dim}_scalar`]: () => { + return FP.abstract.generateVectorScalarToVectorCases( + sparseVectorF64Range(dim), + sparseScalarF64Range(), + 'finite', + divisionVectorScalarInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +map((dim) => ({ + [`scalar_vec${dim}`]: () => { + return FP.abstract.generateScalarVectorToVectorCases( + sparseScalarF64Range(), + sparseVectorF64Range(dim), + 'finite', + divisionScalarVectorInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_division', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.spec.js new file mode 100644 index 00000000000..eea10865180 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_division.spec.js @@ -0,0 +1,101 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Execution Tests for non-matrix AbstractFloat division expression +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +import { GPUTest } from '../../../../gpu_test.js'; +import { TypeAbstractFloat, TypeVec } from '../../../../util/conversion.js'; +import { onlyConstInputSource, run } from '../expression.js'; + +import { d } from './af_division.cache.js'; +import { abstractBinary } from './binary.js'; + +export const g = makeTestGroup(GPUTest); + +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x / y, where x and y are scalars +Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] +` +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('scalar'); + await run( + t, + abstractBinary('/'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); + +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x / y, where x and y are vectors +Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] +` +). +params((u) => +u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases + await run( + t, + abstractBinary('/'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); + +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x / y, where x is a vector and y is a scalar +Accuracy: Correctly rounded +` +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`vec${dim}_scalar`); + await run( + t, + abstractBinary('/'), + [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); + +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x / y, where x is a scalar and y is a vector +Accuracy: Correctly rounded +` +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`scalar_vec${dim}`); + await run( + t, + abstractBinary('/'), + [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.js new file mode 100644 index 00000000000..3af576a5089 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR +const mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].map((rows) => ({ + [`mat${cols}x${rows}`]: () => { + return FP.abstract.generateMatrixPairToMatrixCases( + sparseMatrixF64Range(cols, rows), + sparseMatrixF64Range(cols, rows), + 'finite', + FP.abstract.additionMatrixMatrixInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_matrix_addition', mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.spec.js index 420ec0361f2..6007298df0b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_addition.spec.js @@ -1,62 +1,41 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix AbstractFloat addition expressions -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeAbstractFloat, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { onlyConstInputSource, run } from '../expression.js'; +import { d } from './af_matrix_addition.cache.js'; import { abstractBinary } from './binary.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR -const mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].map(rows => ({ - [`mat${cols}x${rows}`]: () => { - return FP.abstract.generateMatrixPairToMatrixCases( - sparseMatrixF64Range(cols, rows), - sparseMatrixF64Range(cols, rows), - 'finite', - FP.abstract.additionMatrixMatrixInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/af_matrix_addition', mat_cases); - -g.test('matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u - .combine('inputSource', onlyConstInputSource) - .combine('cols', [2, 3, 4]) - .combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get(`mat${cols}x${rows}`); - await run( - t, - abstractBinary('+'), - [TypeMat(cols, rows, TypeAbstractFloat), TypeMat(cols, rows, TypeAbstractFloat)], - TypeMat(cols, rows, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get(`mat${cols}x${rows}`); + await run( + t, + abstractBinary('+'), + [TypeMat(cols, rows, TypeAbstractFloat), TypeMat(cols, rows, TypeAbstractFloat)], + TypeMat(cols, rows, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.js new file mode 100644 index 00000000000..ffbe51b3f3c --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR +const mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].map((rows) => ({ + [`mat${cols}x${rows}`]: () => { + return FP.abstract.generateMatrixPairToMatrixCases( + sparseMatrixF64Range(cols, rows), + sparseMatrixF64Range(cols, rows), + 'finite', + FP.abstract.subtractionMatrixMatrixInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_matrix_subtraction', mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.spec.js index 9cd5a1fe533..8ea6bcbdfb3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_matrix_subtraction.spec.js @@ -1,62 +1,41 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix AbstractFloat subtraction expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeAbstractFloat, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { onlyConstInputSource, run } from '../expression.js'; +import { d } from './af_matrix_subtraction.cache.js'; import { abstractBinary } from './binary.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR -const mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].map(rows => ({ - [`mat${cols}x${rows}`]: () => { - return FP.abstract.generateMatrixPairToMatrixCases( - sparseMatrixF64Range(cols, rows), - sparseMatrixF64Range(cols, rows), - 'finite', - FP.abstract.subtractionMatrixMatrixInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/af_matrix_subtraction', mat_cases); - -g.test('matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u - .combine('inputSource', onlyConstInputSource) - .combine('cols', [2, 3, 4]) - .combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get(`mat${cols}x${rows}`); - await run( - t, - abstractBinary('-'), - [TypeMat(cols, rows, TypeAbstractFloat), TypeMat(cols, rows, TypeAbstractFloat)], - TypeMat(cols, rows, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get(`mat${cols}x${rows}`); + await run( + t, + abstractBinary('-'), + [TypeMat(cols, rows, TypeAbstractFloat), TypeMat(cols, rows, TypeAbstractFloat)], + TypeMat(cols, rows, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.cache.js new file mode 100644 index 00000000000..210aab7752b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.cache.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF64Range, sparseVectorF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const multiplicationVectorScalarInterval = (v, s) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.multiplicationInterval(e, s))); +}; + +const multiplicationScalarVectorInterval = (s, v) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.multiplicationInterval(s, e))); +}; + +const scalar_cases = { + ['scalar']: () => { + return FP.abstract.generateScalarPairToIntervalCases( + sparseScalarF64Range(), + sparseScalarF64Range(), + 'finite', + FP.abstract.multiplicationInterval + ); + } +}; + +const vector_scalar_cases = [2, 3, 4]. +map((dim) => ({ + [`vec${dim}_scalar`]: () => { + return FP.abstract.generateVectorScalarToVectorCases( + sparseVectorF64Range(dim), + sparseScalarF64Range(), + 'finite', + multiplicationVectorScalarInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +map((dim) => ({ + [`scalar_vec${dim}`]: () => { + return FP.abstract.generateScalarVectorToVectorCases( + sparseScalarF64Range(), + sparseVectorF64Range(dim), + 'finite', + multiplicationScalarVectorInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_multiplication', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.spec.js index 314f1aa96d7..c9e6926635a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_multiplication.spec.js @@ -1,153 +1,101 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix AbstractFloat multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeAbstractFloat, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF64Range, sparseVectorF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { onlyConstInputSource, run } from '../expression.js'; +import { d } from './af_multiplication.cache.js'; import { abstractBinary } from './binary.js'; -const multiplicationVectorScalarInterval = (v, s) => { - return FP.abstract.toVector(v.map(e => FP.abstract.multiplicationInterval(e, s))); -}; - -const multiplicationScalarVectorInterval = (s, v) => { - return FP.abstract.toVector(v.map(e => FP.abstract.multiplicationInterval(s, e))); -}; - export const g = makeTestGroup(GPUTest); -const scalar_cases = { - ['scalar']: () => { - return FP.abstract.generateScalarPairToIntervalCases( - sparseF64Range(), - sparseF64Range(), - 'finite', - FP.abstract.multiplicationInterval - ); - }, -}; - -const vector_scalar_cases = [2, 3, 4] - .map(dim => ({ - [`vec${dim}_scalar`]: () => { - return FP.abstract.generateVectorScalarToVectorCases( - sparseVectorF64Range(dim), - sparseF64Range(), - 'finite', - multiplicationVectorScalarInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .map(dim => ({ - [`scalar_vec${dim}`]: () => { - return FP.abstract.generateScalarVectorToVectorCases( - sparseF64Range(), - sparseVectorF64Range(dim), - 'finite', - multiplicationScalarVectorInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/af_multiplication', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('scalar'); - await run( - t, - abstractBinary('*'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('scalar'); + await run( + t, + abstractBinary('*'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases - await run( - t, - abstractBinary('*'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +). +params((u) => +u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases + await run( + t, + abstractBinary('*'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get(`vec${dim}_scalar`); - await run( - t, - abstractBinary('*'), - [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], - TypeVec(dim, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`vec${dim}_scalar`); + await run( + t, + abstractBinary('*'), + [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get(`scalar_vec${dim}`); - await run( - t, - abstractBinary('*'), - [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], - TypeVec(dim, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`scalar_vec${dim}`); + await run( + t, + abstractBinary('*'), + [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.cache.js new file mode 100644 index 00000000000..d75ddd8c72f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.cache.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF64Range, sparseVectorF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const remainderVectorScalarInterval = (v, s) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.remainderInterval(e, s))); +}; + +const remainderScalarVectorInterval = (s, v) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.remainderInterval(s, e))); +}; + +const scalar_cases = { + ['scalar']: () => { + return FP.abstract.generateScalarPairToIntervalCases( + sparseScalarF64Range(), + sparseScalarF64Range(), + 'finite', + FP.abstract.remainderInterval + ); + } +}; + +const vector_scalar_cases = [2, 3, 4]. +map((dim) => ({ + [`vec${dim}_scalar`]: () => { + return FP.abstract.generateVectorScalarToVectorCases( + sparseVectorF64Range(dim), + sparseScalarF64Range(), + 'finite', + remainderVectorScalarInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +map((dim) => ({ + [`scalar_vec${dim}`]: () => { + return FP.abstract.generateScalarVectorToVectorCases( + sparseScalarF64Range(), + sparseVectorF64Range(dim), + 'finite', + remainderScalarVectorInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_remainder', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.spec.js new file mode 100644 index 00000000000..4abf5d88d50 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_remainder.spec.js @@ -0,0 +1,101 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Execution Tests for non-matrix abstract float remainder expression +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +import { GPUTest } from '../../../../gpu_test.js'; +import { TypeAbstractFloat, TypeVec } from '../../../../util/conversion.js'; +import { onlyConstInputSource, run } from '../expression.js'; + +import { d } from './af_remainder.cache.js'; +import { abstractBinary } from './binary.js'; + +export const g = makeTestGroup(GPUTest); + +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x % y, where x and y are scalars +Accuracy: Derived from x - y * trunc(x/y) +` +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('scalar'); + await run( + t, + abstractBinary('%'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); + +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x % y, where x and y are vectors +Accuracy: Derived from x - y * trunc(x/y) +` +). +params((u) => +u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases + await run( + t, + abstractBinary('%'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); + +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x % y, where x is a vector and y is a scalar +Accuracy: Correctly rounded +` +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`vec${dim}_scalar`); + await run( + t, + abstractBinary('%'), + [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); + +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x % y, where x is a scalar and y is a vector +Accuracy: Correctly rounded +` +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`scalar_vec${dim}`); + await run( + t, + abstractBinary('%'), + [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.cache.js new file mode 100644 index 00000000000..ea2adc302f7 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.cache.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF64Range, sparseVectorF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const subtractionVectorScalarInterval = (v, s) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.subtractionInterval(e, s))); +}; + +const subtractionScalarVectorInterval = (s, v) => { + return FP.abstract.toVector(v.map((e) => FP.abstract.subtractionInterval(s, e))); +}; + +const scalar_cases = { + ['scalar']: () => { + return FP.abstract.generateScalarPairToIntervalCases( + sparseScalarF64Range(), + sparseScalarF64Range(), + 'finite', + FP.abstract.subtractionInterval + ); + } +}; + +const vector_scalar_cases = [2, 3, 4]. +map((dim) => ({ + [`vec${dim}_scalar`]: () => { + return FP.abstract.generateVectorScalarToVectorCases( + sparseVectorF64Range(dim), + sparseScalarF64Range(), + 'finite', + subtractionVectorScalarInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +map((dim) => ({ + [`scalar_vec${dim}`]: () => { + return FP.abstract.generateScalarVectorToVectorCases( + sparseScalarF64Range(), + sparseVectorF64Range(dim), + 'finite', + subtractionScalarVectorInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/af_subtraction', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.spec.js index d202c3c4dc9..f1d510c4e60 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/af_subtraction.spec.js @@ -1,153 +1,101 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix AbstractFloat subtraction expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeAbstractFloat, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF64Range, sparseVectorF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { onlyConstInputSource, run } from '../expression.js'; +import { d } from './af_subtraction.cache.js'; import { abstractBinary } from './binary.js'; -const subtractionVectorScalarInterval = (v, s) => { - return FP.abstract.toVector(v.map(e => FP.abstract.subtractionInterval(e, s))); -}; - -const subtractionScalarVectorInterval = (s, v) => { - return FP.abstract.toVector(v.map(e => FP.abstract.subtractionInterval(s, e))); -}; - export const g = makeTestGroup(GPUTest); -const scalar_cases = { - ['scalar']: () => { - return FP.abstract.generateScalarPairToIntervalCases( - sparseF64Range(), - sparseF64Range(), - 'finite', - FP.abstract.subtractionInterval - ); - }, -}; - -const vector_scalar_cases = [2, 3, 4] - .map(dim => ({ - [`vec${dim}_scalar`]: () => { - return FP.abstract.generateVectorScalarToVectorCases( - sparseVectorF64Range(dim), - sparseF64Range(), - 'finite', - subtractionVectorScalarInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .map(dim => ({ - [`scalar_vec${dim}`]: () => { - return FP.abstract.generateScalarVectorToVectorCases( - sparseF64Range(), - sparseVectorF64Range(dim), - 'finite', - subtractionScalarVectorInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/af_subtraction', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('scalar'); - await run( - t, - abstractBinary('-'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('scalar'); + await run( + t, + abstractBinary('-'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases - await run( - t, - abstractBinary('-'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +). +params((u) => +u.combine('inputSource', onlyConstInputSource).combine('vectorize', [2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('scalar'); // Using vectorize to generate vector cases based on scalar cases + await run( + t, + abstractBinary('-'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get(`vec${dim}_scalar`); - await run( - t, - abstractBinary('-'), - [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], - TypeVec(dim, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`vec${dim}_scalar`); + await run( + t, + abstractBinary('-'), + [TypeVec(dim, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get(`scalar_vec${dim}`); - await run( - t, - abstractBinary('-'), - [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], - TypeVec(dim, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get(`scalar_vec${dim}`); + await run( + t, + abstractBinary('-'), + [TypeAbstractFloat, TypeVec(dim, TypeAbstractFloat)], + TypeVec(dim, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/binary.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/binary.js index a9a6bd2733c..f3f84db87c9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/binary.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/binary.js @@ -1,14 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { - basicExpressionBuilder, - compoundAssignmentBuilder, - abstractFloatShaderBuilder, -} from '../expression.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { basicExpressionBuilder, +compoundAssignmentBuilder, +abstractFloatShaderBuilder } from +'../expression.js'; /* @returns a ShaderBuilder that evaluates a binary operation */ export function binary(op) { - return basicExpressionBuilder(values => `(${values.map(v => `(${v})`).join(op)})`); + return basicExpressionBuilder((values) => `(${values.map((v) => `(${v})`).join(op)})`); } /* @returns a ShaderBuilder that evaluates a compound binary operation */ @@ -18,5 +17,5 @@ export function compoundBinary(op) { /* @returns a ShaderBuilder that evaluates a binary operation that returns AbstractFloats */ export function abstractBinary(op) { - return abstractFloatShaderBuilder(values => `(${values.map(v => `(${v})`).join(op)})`); -} + return abstractFloatShaderBuilder((values) => `(${values.map((v) => `(${v})`).join(op)})`); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise.spec.js index f982cc05df4..c442f5cfa45 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the bitwise binary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { i32, scalarType, u32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; @@ -15,36 +14,35 @@ export const g = makeTestGroup(GPUTest); function makeBitwiseOrCases(inputType) { const V = inputType === 'i32' ? i32 : u32; const cases = [ - // Static patterns - { - input: [V(0b00000000000000000000000000000000), V(0b00000000000000000000000000000000)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b00000000000000000000000000000000)], - expected: V(0b11111111111111111111111111111111), - }, - { - input: [V(0b00000000000000000000000000000000), V(0b11111111111111111111111111111111)], - expected: V(0b11111111111111111111111111111111), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b11111111111111111111111111111111)], - expected: V(0b11111111111111111111111111111111), - }, - { - input: [V(0b10100100010010100100010010100100), V(0b00000000000000000000000000000000)], - expected: V(0b10100100010010100100010010100100), - }, - { - input: [V(0b00000000000000000000000000000000), V(0b10100100010010100100010010100100)], - expected: V(0b10100100010010100100010010100100), - }, - { - input: [V(0b01010010001001010010001001010010), V(0b10100100010010100100010010100100)], - expected: V(0b11110110011011110110011011110110), - }, - ]; + // Static patterns + { + input: [V(0b00000000000000000000000000000000), V(0b00000000000000000000000000000000)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b00000000000000000000000000000000)], + expected: V(0b11111111111111111111111111111111) + }, + { + input: [V(0b00000000000000000000000000000000), V(0b11111111111111111111111111111111)], + expected: V(0b11111111111111111111111111111111) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b11111111111111111111111111111111)], + expected: V(0b11111111111111111111111111111111) + }, + { + input: [V(0b10100100010010100100010010100100), V(0b00000000000000000000000000000000)], + expected: V(0b10100100010010100100010010100100) + }, + { + input: [V(0b00000000000000000000000000000000), V(0b10100100010010100100010010100100)], + expected: V(0b10100100010010100100010010100100) + }, + { + input: [V(0b01010010001001010010001001010010), V(0b10100100010010100100010010100100)], + expected: V(0b11110110011011110110011011110110) + }]; // Permute all combinations of a single bit being set for the LHS and RHS for (let i = 0; i < 32; i++) { @@ -53,255 +51,253 @@ function makeBitwiseOrCases(inputType) { const rhs = 1 << j; cases.push({ input: [V(lhs), V(rhs)], - expected: V(lhs | rhs), + expected: V(lhs | rhs) }); } } return cases; } -g.test('bitwise_or') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('bitwise_or'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 | e2: T T is i32, u32, vecN, or vecN Bitwise-or. Component-wise when T is a vector. ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeBitwiseOrCases(t.params.type); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeBitwiseOrCases(t.params.type); - await run(t, binary('|'), [type, type], type, t.params, cases); - }); + await run(t, binary('|'), [type, type], type, t.params, cases); +}); -g.test('bitwise_or_compound') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('bitwise_or_compound'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 |= e2: T T is i32, u32, vecN, or vecN Bitwise-or. Component-wise when T is a vector. ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeBitwiseOrCases(t.params.type); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeBitwiseOrCases(t.params.type); - await run(t, compoundBinary('|='), [type, type], type, t.params, cases); - }); + await run(t, compoundBinary('|='), [type, type], type, t.params, cases); +}); function makeBitwiseAndCases(inputType) { const V = inputType === 'i32' ? i32 : u32; const cases = [ - // Static patterns - { - input: [V(0b00000000000000000000000000000000), V(0b00000000000000000000000000000000)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b00000000000000000000000000000000)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b00000000000000000000000000000000), V(0b11111111111111111111111111111111)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b11111111111111111111111111111111)], - expected: V(0b11111111111111111111111111111111), - }, - { - input: [V(0b10100100010010100100010010100100), V(0b00000000000000000000000000000000)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b10100100010010100100010010100100), V(0b11111111111111111111111111111111)], - expected: V(0b10100100010010100100010010100100), - }, - { - input: [V(0b00000000000000000000000000000000), V(0b10100100010010100100010010100100)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b10100100010010100100010010100100)], - expected: V(0b10100100010010100100010010100100), - }, - { - input: [V(0b01010010001001010010001001010010), V(0b01011011101101011011101101011011)], - expected: V(0b01010010001001010010001001010010), - }, - ]; + // Static patterns + { + input: [V(0b00000000000000000000000000000000), V(0b00000000000000000000000000000000)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b00000000000000000000000000000000)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b00000000000000000000000000000000), V(0b11111111111111111111111111111111)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b11111111111111111111111111111111)], + expected: V(0b11111111111111111111111111111111) + }, + { + input: [V(0b10100100010010100100010010100100), V(0b00000000000000000000000000000000)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b10100100010010100100010010100100), V(0b11111111111111111111111111111111)], + expected: V(0b10100100010010100100010010100100) + }, + { + input: [V(0b00000000000000000000000000000000), V(0b10100100010010100100010010100100)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b10100100010010100100010010100100)], + expected: V(0b10100100010010100100010010100100) + }, + { + input: [V(0b01010010001001010010001001010010), V(0b01011011101101011011101101011011)], + expected: V(0b01010010001001010010001001010010) + }]; // Permute all combinations of a single bit being set for the LHS and all but one bit set for the RHS for (let i = 0; i < 32; i++) { const lhs = 1 << i; for (let j = 0; j < 32; j++) { - const rhs = 0xffffffff ^ (1 << j); + const rhs = 0xffffffff ^ 1 << j; cases.push({ input: [V(lhs), V(rhs)], - expected: V(lhs & rhs), + expected: V(lhs & rhs) }); } } return cases; } -g.test('bitwise_and') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('bitwise_and'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 & e2: T T is i32, u32, vecN, or vecN Bitwise-and. Component-wise when T is a vector. ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeBitwiseAndCases(t.params.type); - await run(t, binary('&'), [type, type], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeBitwiseAndCases(t.params.type); + await run(t, binary('&'), [type, type], type, t.params, cases); +}); -g.test('bitwise_and_compound') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('bitwise_and_compound'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 &= e2: T T is i32, u32, vecN, or vecN Bitwise-and. Component-wise when T is a vector. ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeBitwiseAndCases(t.params.type); - await run(t, compoundBinary('&='), [type, type], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeBitwiseAndCases(t.params.type); + await run(t, compoundBinary('&='), [type, type], type, t.params, cases); +}); function makeBitwiseExcluseOrCases(inputType) { const V = inputType === 'i32' ? i32 : u32; const cases = [ - // Static patterns - { - input: [V(0b00000000000000000000000000000000), V(0b00000000000000000000000000000000)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b00000000000000000000000000000000)], - expected: V(0b11111111111111111111111111111111), - }, - { - input: [V(0b00000000000000000000000000000000), V(0b11111111111111111111111111111111)], - expected: V(0b11111111111111111111111111111111), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b11111111111111111111111111111111)], - expected: V(0b00000000000000000000000000000000), - }, - { - input: [V(0b10100100010010100100010010100100), V(0b00000000000000000000000000000000)], - expected: V(0b10100100010010100100010010100100), - }, - { - input: [V(0b10100100010010100100010010100100), V(0b11111111111111111111111111111111)], - expected: V(0b01011011101101011011101101011011), - }, - { - input: [V(0b00000000000000000000000000000000), V(0b10100100010010100100010010100100)], - expected: V(0b10100100010010100100010010100100), - }, - { - input: [V(0b11111111111111111111111111111111), V(0b10100100010010100100010010100100)], - expected: V(0b01011011101101011011101101011011), - }, - { - input: [V(0b01010010001001010010001001010010), V(0b01011011101101011011101101011011)], - expected: V(0b00001001100100001001100100001001), - }, - ]; + // Static patterns + { + input: [V(0b00000000000000000000000000000000), V(0b00000000000000000000000000000000)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b00000000000000000000000000000000)], + expected: V(0b11111111111111111111111111111111) + }, + { + input: [V(0b00000000000000000000000000000000), V(0b11111111111111111111111111111111)], + expected: V(0b11111111111111111111111111111111) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b11111111111111111111111111111111)], + expected: V(0b00000000000000000000000000000000) + }, + { + input: [V(0b10100100010010100100010010100100), V(0b00000000000000000000000000000000)], + expected: V(0b10100100010010100100010010100100) + }, + { + input: [V(0b10100100010010100100010010100100), V(0b11111111111111111111111111111111)], + expected: V(0b01011011101101011011101101011011) + }, + { + input: [V(0b00000000000000000000000000000000), V(0b10100100010010100100010010100100)], + expected: V(0b10100100010010100100010010100100) + }, + { + input: [V(0b11111111111111111111111111111111), V(0b10100100010010100100010010100100)], + expected: V(0b01011011101101011011101101011011) + }, + { + input: [V(0b01010010001001010010001001010010), V(0b01011011101101011011101101011011)], + expected: V(0b00001001100100001001100100001001) + }]; // Permute all combinations of a single bit being set for the LHS and all but one bit set for the RHS for (let i = 0; i < 32; i++) { const lhs = 1 << i; for (let j = 0; j < 32; j++) { - const rhs = 0xffffffff ^ (1 << j); + const rhs = 0xffffffff ^ 1 << j; cases.push({ input: [V(lhs), V(rhs)], - expected: V(lhs ^ rhs), + expected: V(lhs ^ rhs) }); } } return cases; } -g.test('bitwise_exclusive_or') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('bitwise_exclusive_or'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 ^ e2: T T is i32, u32, vecN, or vecN Bitwise-exclusive-or. Component-wise when T is a vector. ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeBitwiseExcluseOrCases(t.params.type); - await run(t, binary('^'), [type, type], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeBitwiseExcluseOrCases(t.params.type); + await run(t, binary('^'), [type, type], type, t.params, cases); +}); -g.test('bitwise_exclusive_or_compound') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('bitwise_exclusive_or_compound'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 ^= e2: T T is i32, u32, vecN, or vecN Bitwise-exclusive-or. Component-wise when T is a vector. ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeBitwiseExcluseOrCases(t.params.type); - await run(t, compoundBinary('^='), [type, type], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeBitwiseExcluseOrCases(t.params.type); + await run(t, compoundBinary('^='), [type, type], type, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise_shift.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise_shift.spec.js index be96969d79d..ab766ba672a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise_shift.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bitwise_shift.spec.js @@ -1,11 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the bitwise shift binary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { i32, scalarType, TypeU32, u32 } from '../../../../util/conversion.js'; + import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; @@ -33,7 +33,7 @@ function is_valid_const_shift_left(e1, e1Type, e2) { if (is_unsiged(e1Type)) { // If T is an unsigned integer type, and any of the e2 most significant bits of e1 are 1, then invalid. const must_be_zero_msb = e2; - const mask = ~0 << (bitwidth - must_be_zero_msb); + const mask = ~0 << bitwidth - must_be_zero_msb; if ((e1 & mask) !== 0) { return false; } @@ -41,7 +41,7 @@ function is_valid_const_shift_left(e1, e1Type, e2) { // If T is a signed integer type, and the e2+1 most significant bits of e1 do // not have the same bit value, then error. const must_match_msb = e2 + 1; - const mask = ~0 << (bitwidth - must_match_msb); + const mask = ~0 << bitwidth - must_match_msb; if ((e1 & mask) !== 0 && (e1 & mask) !== mask) { return false; } @@ -109,15 +109,15 @@ function makeShiftLeftConcreteCases(inputType, inputSource, type) { const is_const = inputSource === 'const'; const cases = [ - { - input: /* */ [V(0b00000000000000000000000000000001), u32(1)], - expected: /**/ V(0b00000000000000000000000000000010), - }, - { - input: /* */ [V(0b00000000000000000000000000000011), u32(1)], - expected: /**/ V(0b00000000000000000000000000000110), - }, - ]; + { + input: /* */[V(0b00000000000000000000000000000001), u32(1)], + expected: /**/V(0b00000000000000000000000000000010) + }, + { + input: /* */[V(0b00000000000000000000000000000011), u32(1)], + expected: /**/V(0b00000000000000000000000000000110) + }]; + const add_unsigned_overflow_cases = !is_const || is_unsiged(inputType); const add_signed_overflow_cases = !is_const || !is_unsiged(inputType); @@ -127,19 +127,19 @@ function makeShiftLeftConcreteCases(inputType, inputSource, type) { // values when const evaluated. cases.push( ...[ - { - input: [/* */ V(0b01000000000000000000000000000000), u32(1)], - expected: /**/ V(0b10000000000000000000000000000000), - }, - { - input: [/* */ V(0b01111111111111111111111111111111), u32(1)], - expected: /**/ V(0b11111111111111111111111111111110), - }, - { - input: [/* */ V(0b00000000000000000000000000000001), u32(31)], - expected: /**/ V(0b10000000000000000000000000000000), - }, - ] + { + input: [/* */V(0b01000000000000000000000000000000), u32(1)], + expected: /**/V(0b10000000000000000000000000000000) + }, + { + input: [/* */V(0b01111111111111111111111111111111), u32(1)], + expected: /**/V(0b11111111111111111111111111111110) + }, + { + input: [/* */V(0b00000000000000000000000000000001), u32(31)], + expected: /**/V(0b10000000000000000000000000000000) + }] + ); } if (add_signed_overflow_cases) { @@ -147,19 +147,19 @@ function makeShiftLeftConcreteCases(inputType, inputSource, type) { // unsigned values when const evaluated. cases.push( ...[ - { - input: [/* */ V(0b11000000000000000000000000000000), u32(1)], - expected: /**/ V(0b10000000000000000000000000000000), - }, - { - input: [/* */ V(0b11111111111111111111111111111111), u32(1)], - expected: /**/ V(0b11111111111111111111111111111110), - }, - { - input: [/* */ V(0b11111111111111111111111111111111), u32(31)], - expected: /**/ V(0b10000000000000000000000000000000), - }, - ] + { + input: [/* */V(0b11000000000000000000000000000000), u32(1)], + expected: /**/V(0b10000000000000000000000000000000) + }, + { + input: [/* */V(0b11111111111111111111111111111111), u32(1)], + expected: /**/V(0b11111111111111111111111111111110) + }, + { + input: [/* */V(0b11111111111111111111111111111111), u32(31)], + expected: /**/V(0b10000000000000000000000000000000) + }] + ); } @@ -176,98 +176,97 @@ function makeShiftLeftConcreteCases(inputType, inputSource, type) { return cases; } -g.test('shift_left_concrete') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('shift_left_concrete'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 << e2 Shift left (shifted value is concrete) ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeShiftLeftConcreteCases(t.params.type, t.params.inputSource, type); - await run(t, binary('<<'), [type, TypeU32], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeShiftLeftConcreteCases(t.params.type, t.params.inputSource, type); + await run(t, binary('<<'), [type, TypeU32], type, t.params, cases); +}); -g.test('shift_left_concrete_compound') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('shift_left_concrete_compound'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 <<= e2 Shift left (shifted value is concrete) ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeShiftLeftConcreteCases(t.params.type, t.params.inputSource, type); - await run(t, compoundBinary('<<='), [type, TypeU32], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeShiftLeftConcreteCases(t.params.type, t.params.inputSource, type); + await run(t, compoundBinary('<<='), [type, TypeU32], type, t.params, cases); +}); function makeShiftRightConcreteCases(inputType, inputSource, type) { const V = inputType === 'i32' ? i32 : u32; const is_const = inputSource === 'const'; const cases = [ - { - input: /* */ [V(0b00000000000000000000000000000001), u32(1)], - expected: /**/ V(0b00000000000000000000000000000000), - }, - { - input: /* */ [V(0b00000000000000000000000000000011), u32(1)], - expected: /**/ V(0b00000000000000000000000000000001), - }, - { - input: /* */ [V(0b01000000000000000000000000000000), u32(1)], - expected: /**/ V(0b00100000000000000000000000000000), - }, - { - input: /* */ [V(0b01100000000000000000000000000000), u32(1)], - expected: /**/ V(0b00110000000000000000000000000000), - }, - ]; + { + input: /* */[V(0b00000000000000000000000000000001), u32(1)], + expected: /**/V(0b00000000000000000000000000000000) + }, + { + input: /* */[V(0b00000000000000000000000000000011), u32(1)], + expected: /**/V(0b00000000000000000000000000000001) + }, + { + input: /* */[V(0b01000000000000000000000000000000), u32(1)], + expected: /**/V(0b00100000000000000000000000000000) + }, + { + input: /* */[V(0b01100000000000000000000000000000), u32(1)], + expected: /**/V(0b00110000000000000000000000000000) + }]; if (is_unsiged(inputType)) { // No sign extension cases.push( ...[ - { - input: /* */ [V(0b10000000000000000000000000000000), u32(1)], - expected: /**/ V(0b01000000000000000000000000000000), - }, - { - input: /* */ [V(0b11000000000000000000000000000000), u32(1)], - expected: /**/ V(0b01100000000000000000000000000000), - }, - ] + { + input: /* */[V(0b10000000000000000000000000000000), u32(1)], + expected: /**/V(0b01000000000000000000000000000000) + }, + { + input: /* */[V(0b11000000000000000000000000000000), u32(1)], + expected: /**/V(0b01100000000000000000000000000000) + }] + ); } else { cases.push( // Sign extension if msb is 1 ...[ - { - input: /* */ [V(0b10000000000000000000000000000000), u32(1)], - expected: /**/ V(0b11000000000000000000000000000000), - }, - { - input: /* */ [V(0b11000000000000000000000000000000), u32(1)], - expected: /**/ V(0b11100000000000000000000000000000), - }, - ] + { + input: /* */[V(0b10000000000000000000000000000000), u32(1)], + expected: /**/V(0b11000000000000000000000000000000) + }, + { + input: /* */[V(0b11000000000000000000000000000000), u32(1)], + expected: /**/V(0b11100000000000000000000000000000) + }] + ); } @@ -275,80 +274,71 @@ function makeShiftRightConcreteCases(inputType, inputSource, type) { cases.push( ...generate_shift_right_cases(0b00000000000000000000000000000000, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b00000000000000000000000000000001, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b00000000000000000000000000000010, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b00000000000000000000000000000011, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b10000000000000000000000000000000, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b01000000000000000000000000000000, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b11000000000000000000000000000000, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b00010000001000001000010001010101, inputType, is_const) ); - cases.push( ...generate_shift_right_cases(0b11101111110111110111101110101010, inputType, is_const) ); - return cases; } -g.test('shift_right_concrete') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('shift_right_concrete'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 >> e2 Shift right (shifted value is concrete) ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeShiftRightConcreteCases(t.params.type, t.params.inputSource, type); - await run(t, binary('>>'), [type, TypeU32], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeShiftRightConcreteCases(t.params.type, t.params.inputSource, type); + await run(t, binary('>>'), [type, TypeU32], type, t.params, cases); +}); -g.test('shift_right_concrete_compound') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('shift_right_concrete_compound'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` e1 >>= e2 Shift right (shifted value is concrete) ` - ) - .params(u => - u - .combine('type', ['i32', 'u32']) - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const type = scalarType(t.params.type); - const cases = makeShiftRightConcreteCases(t.params.type, t.params.inputSource, type); - await run(t, compoundBinary('>>='), [type, TypeU32], type, t.params, cases); - }); +). +params((u) => +u. +combine('type', ['i32', 'u32']). +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const type = scalarType(t.params.type); + const cases = makeShiftRightConcreteCases(t.params.type, t.params.inputSource, type); + await run(t, compoundBinary('>>='), [type, TypeU32], type, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bool_logical.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bool_logical.spec.js index 4dc5ebe3cc3..52cbe17222e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bool_logical.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/bool_logical.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the boolean binary logical expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { bool, TypeBool } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; @@ -15,162 +14,174 @@ export const g = makeTestGroup(GPUTest); // Short circuiting vs no short circuiting is not tested here, it is covered in // src/webgpu/shader/execution/evaluation_order.spec.ts -g.test('and') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` +g.test('and'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 & e2 Logical "and". Component-wise when T is a vector. Evaluates both e1 and e2. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(false) }, - { input: [bool(false), bool(true)], expected: bool(false) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(false) }, + { input: [bool(false), bool(true)], expected: bool(false) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, binary('&'), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('and_compound') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, binary('&'), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('and_compound'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 &= e2 Logical "and". Component-wise when T is a vector. Evaluates both e1 and e2. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(false) }, - { input: [bool(false), bool(true)], expected: bool(false) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(false) }, + { input: [bool(false), bool(true)], expected: bool(false) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, compoundBinary('&='), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('and_short_circuit') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, compoundBinary('&='), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('and_short_circuit'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 && e2 short_circuiting "and". Yields true if both e1 and e2 are true; evaluates e2 only if e1 is true. ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(false) }, - { input: [bool(false), bool(true)], expected: bool(false) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(false) }, + { input: [bool(false), bool(true)], expected: bool(false) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, binary('&&'), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('or') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, binary('&&'), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('or'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 | e2 Logical "or". Component-wise when T is a vector. Evaluates both e1 and e2. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(true) }, - { input: [bool(false), bool(true)], expected: bool(true) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(true) }, + { input: [bool(false), bool(true)], expected: bool(true) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, binary('|'), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('or_compound') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, binary('|'), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('or_compound'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 |= e2 Logical "or". Component-wise when T is a vector. Evaluates both e1 and e2. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(true) }, - { input: [bool(false), bool(true)], expected: bool(true) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(true) }, + { input: [bool(false), bool(true)], expected: bool(true) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, compoundBinary('|='), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('or_short_circuit') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, compoundBinary('|='), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('or_short_circuit'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 || e2 short_circuiting "and". Yields true if both e1 and e2 are true; evaluates e2 only if e1 is true. ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(true) }, - { input: [bool(false), bool(true)], expected: bool(true) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(true) }, + { input: [bool(false), bool(true)], expected: bool(true) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, binary('||'), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('equals') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, binary('||'), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('equals'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 == e2 Equality. Component-wise when T is a vector. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(true) }, - { input: [bool(true), bool(false)], expected: bool(false) }, - { input: [bool(false), bool(true)], expected: bool(false) }, - { input: [bool(true), bool(true)], expected: bool(true) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(true) }, + { input: [bool(true), bool(false)], expected: bool(false) }, + { input: [bool(false), bool(true)], expected: bool(false) }, + { input: [bool(true), bool(true)], expected: bool(true) }]; - await run(t, binary('=='), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); -g.test('not_equals') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` + await run(t, binary('=='), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); + +g.test('not_equals'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: e1 != e2 Equality. Component-wise when T is a vector. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: [bool(false), bool(false)], expected: bool(false) }, - { input: [bool(true), bool(false)], expected: bool(true) }, - { input: [bool(false), bool(true)], expected: bool(true) }, - { input: [bool(true), bool(true)], expected: bool(false) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: [bool(false), bool(false)], expected: bool(false) }, + { input: [bool(true), bool(false)], expected: bool(true) }, + { input: [bool(false), bool(true)], expected: bool(true) }, + { input: [bool(true), bool(true)], expected: bool(false) }]; - await run(t, binary('!='), [TypeBool, TypeBool], TypeBool, t.params, cases); - }); + + await run(t, binary('!='), [TypeBool, TypeBool], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.cache.js new file mode 100644 index 00000000000..deefe3744e4 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF16Range, sparseVectorF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const additionVectorScalarInterval = (v, s) => { + return FP.f16.toVector(v.map((e) => FP.f16.additionInterval(e, s))); +}; + +const additionScalarVectorInterval = (s, v) => { + return FP.f16.toVector(v.map((e) => FP.f16.additionInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarPairToIntervalCases( + sparseScalarF16Range(), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f16.additionInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateVectorScalarToVectorCases( + sparseVectorF16Range(dim), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + additionVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarVectorToVectorCases( + sparseScalarF16Range(), + sparseVectorF16Range(dim), + nonConst ? 'unfiltered' : 'finite', + additionScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_addition', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.spec.js index 73d9dba092e..5f06e372578 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_addition.spec.js @@ -1,216 +1,153 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f16 addition expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF16Range, sparseVectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const additionVectorScalarInterval = (v, s) => { - return FP.f16.toVector(v.map(e => FP.f16.additionInterval(e, s))); -}; - -const additionScalarVectorInterval = (s, v) => { - return FP.f16.toVector(v.map(e => FP.f16.additionInterval(s, e))); -}; +import { d } from './f16_addition.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarPairToIntervalCases( - sparseF16Range(), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f16.additionInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorScalarToVectorCases( - sparseVectorF16Range(dim), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - additionVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarVectorToVectorCases( - sparseF16Range(), - sparseVectorF16Range(dim), - nonConst ? 'unfiltered' : 'finite', - additionScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_addition', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('+'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, binary('+'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('+'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('+'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x += y Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('+='), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, compoundBinary('+='), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('+'), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('+'), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x += y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('+='), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('+='), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('+'), - [TypeF16, TypeVec(dim, TypeF16)], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('+'), + [TypeF16, TypeVec(dim, TypeF16)], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.cache.js new file mode 100644 index 00000000000..2c5edd50273 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.cache.js @@ -0,0 +1,144 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf } from '../../../../util/compare.js';import { bool, f16 } from '../../../../util/conversion.js';import { flushSubnormalNumberF16, vectorF16Range } from '../../../../util/math.js'; + +import { makeCaseCache } from '../case_cache.js'; + +/** + * @returns a test case for the provided left hand & right hand values and truth function. + * Handles quantization and subnormals. + */ +function makeCase( +lhs, +rhs, +truthFunc) +{ + // Subnormal float values may be flushed at any time. + // https://www.w3.org/TR/WGSL/#floating-point-evaluation + const f16_lhs = f16(lhs); + const f16_rhs = f16(rhs); + const lhs_options = new Set([f16_lhs, f16(flushSubnormalNumberF16(lhs))]); + const rhs_options = new Set([f16_rhs, f16(flushSubnormalNumberF16(rhs))]); + const expected = []; + lhs_options.forEach((l) => { + rhs_options.forEach((r) => { + const result = bool(truthFunc(l, r)); + if (!expected.includes(result)) { + expected.push(result); + } + }); + }); + + return { input: [f16_lhs, f16_rhs], expected: anyOf(...expected) }; +} + +export const d = makeCaseCache('binary/f16_logical', { + equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value === rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value === rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + not_equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value !== rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + not_equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value !== rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_than_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value < rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_than_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value < rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value <= rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value <= rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_than_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value > rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_than_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value > rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value >= rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value >= rhs.value; + }; + + return vectorF16Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.spec.js index e1a8d983ece..b0ca6369316 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_comparison.spec.js @@ -1,271 +1,139 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the f16 comparison operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { anyOf } from '../../../../util/compare.js'; -import { bool, f16, TypeBool, TypeF16 } from '../../../../util/conversion.js'; -import { flushSubnormalNumberF16, vectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeF16 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; import { binary } from './binary.js'; +import { d } from './f16_comparison.cache.js'; export const g = makeTestGroup(GPUTest); -/** - * @returns a test case for the provided left hand & right hand values and truth function. - * Handles quantization and subnormals. - */ -function makeCase(lhs, rhs, truthFunc) { - // Subnormal float values may be flushed at any time. - // https://www.w3.org/TR/WGSL/#floating-point-evaluation - const f16_lhs = f16(lhs); - const f16_rhs = f16(rhs); - const lhs_options = new Set([f16_lhs, f16(flushSubnormalNumberF16(lhs))]); - const rhs_options = new Set([f16_rhs, f16(flushSubnormalNumberF16(rhs))]); - const expected = []; - lhs_options.forEach(l => { - rhs_options.forEach(r => { - const result = bool(truthFunc(l, r)); - if (!expected.includes(result)) { - expected.push(result); - } - }); - }); - - return { input: [f16_lhs, f16_rhs], expected: anyOf(...expected) }; -} - -export const d = makeCaseCache('binary/f16_logical', { - equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value === rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value === rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - not_equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value !== rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - not_equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value !== rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_than_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value < rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_than_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value < rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value <= rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value <= rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_than_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value > rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_than_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value > rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value >= rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value >= rhs.value; - }; - - return vectorF16Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, -}); - -g.test('equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x == y Accuracy: Correct result ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'equals_const' : 'equals_non_const' - ); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'equals_const' : 'equals_non_const' + ); + await run(t, binary('=='), [TypeF16, TypeF16], TypeBool, t.params, cases); +}); - await run(t, binary('=='), [TypeF16, TypeF16], TypeBool, t.params, cases); - }); - -g.test('not_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('not_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x != y Accuracy: Correct result ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'not_equals_const' : 'not_equals_non_const' - ); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'not_equals_const' : 'not_equals_non_const' + ); + await run(t, binary('!='), [TypeF16, TypeF16], TypeBool, t.params, cases); +}); - await run(t, binary('!='), [TypeF16, TypeF16], TypeBool, t.params, cases); - }); - -g.test('less_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x < y Accuracy: Correct result ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'less_than_const' : 'less_than_non_const' - ); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'less_than_const' : 'less_than_non_const' + ); + await run(t, binary('<'), [TypeF16, TypeF16], TypeBool, t.params, cases); +}); - await run(t, binary('<'), [TypeF16, TypeF16], TypeBool, t.params, cases); - }); - -g.test('less_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x <= y Accuracy: Correct result ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'less_equals_const' : 'less_equals_non_const' - ); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'less_equals_const' : 'less_equals_non_const' + ); + await run(t, binary('<='), [TypeF16, TypeF16], TypeBool, t.params, cases); +}); - await run(t, binary('<='), [TypeF16, TypeF16], TypeBool, t.params, cases); - }); - -g.test('greater_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x > y Accuracy: Correct result ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'greater_than_const' : 'greater_than_non_const' - ); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'greater_than_const' : 'greater_than_non_const' + ); + await run(t, binary('>'), [TypeF16, TypeF16], TypeBool, t.params, cases); +}); - await run(t, binary('>'), [TypeF16, TypeF16], TypeBool, t.params, cases); - }); - -g.test('greater_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x >= y Accuracy: Correct result ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'greater_equals_const' : 'greater_equals_non_const' - ); - - await run(t, binary('>='), [TypeF16, TypeF16], TypeBool, t.params, cases); - }); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'greater_equals_const' : 'greater_equals_non_const' + ); + await run(t, binary('>='), [TypeF16, TypeF16], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.cache.js new file mode 100644 index 00000000000..bd3335f681e --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF16Range, sparseVectorF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const divisionVectorScalarInterval = (v, s) => { + return FP.f16.toVector(v.map((e) => FP.f16.divisionInterval(e, s))); +}; + +const divisionScalarVectorInterval = (s, v) => { + return FP.f16.toVector(v.map((e) => FP.f16.divisionInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarPairToIntervalCases( + sparseScalarF16Range(), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f16.divisionInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateVectorScalarToVectorCases( + sparseVectorF16Range(dim), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + divisionVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarVectorToVectorCases( + sparseScalarF16Range(), + sparseVectorF16Range(dim), + nonConst ? 'unfiltered' : 'finite', + divisionScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_division', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.spec.js index e10519dfe7f..8284b4550f2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_division.spec.js @@ -1,216 +1,153 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f16 division expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF16Range, sparseVectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const divisionVectorScalarInterval = (v, s) => { - return FP.f16.toVector(v.map(e => FP.f16.divisionInterval(e, s))); -}; - -const divisionScalarVectorInterval = (s, v) => { - return FP.f16.toVector(v.map(e => FP.f16.divisionInterval(s, e))); -}; +import { d } from './f16_division.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarPairToIntervalCases( - sparseF16Range(), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f16.divisionInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorScalarToVectorCases( - sparseVectorF16Range(dim), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - divisionVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarVectorToVectorCases( - sparseF16Range(), - sparseVectorF16Range(dim), - nonConst ? 'unfiltered' : 'finite', - divisionScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_division', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x and y are scalars Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('/'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, binary('/'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x and y are vectors Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('/'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('/'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x /= y Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('/='), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, compoundBinary('/='), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('/'), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('/'), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x /= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('/='), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('/='), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('/'), - [TypeF16, TypeVec(dim, TypeF16)], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('/'), + [TypeF16, TypeVec(dim, TypeF16)], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.cache.js new file mode 100644 index 00000000000..fb3140a58ab --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.cache.js @@ -0,0 +1,23 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_[non_]const +const mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateMatrixPairToMatrixCases( + sparseMatrixF16Range(cols, rows), + sparseMatrixF16Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f16.additionMatrixMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_matrix_addition', mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.spec.js index 1c21bfbdb85..cf9cedd8d5e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_addition.spec.js @@ -1,98 +1,79 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix f16 addition expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f16_matrix_addition.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_[non_]const -const mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixPairToMatrixCases( - sparseMatrixF16Range(cols, rows), - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.additionMatrixMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_matrix_addition', mat_cases); - -g.test('matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('+'), + [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('+'), - [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); - -g.test('matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x =+ y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); - - await run( - t, - compoundBinary('+='), - [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + compoundBinary('+='), + [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.cache.js new file mode 100644 index 00000000000..356c64e3e09 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.cache.js @@ -0,0 +1,25 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matKxR_matCxK_[non_]const +const mat_mat_cases = [2, 3, 4]. +flatMap((k) => +[2, 3, 4].flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${k}x${rows}_mat${cols}x${k}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateMatrixPairToMatrixCases( + sparseMatrixF16Range(k, rows), + sparseMatrixF16Range(cols, k), + nonConst ? 'unfiltered' : 'finite', + FP.f16.multiplicationMatrixMatrixInterval + ); + } +})) +) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_matrix_matrix_multiplication', mat_mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.spec.js index 2e9c94d0aac..a310e0eab68 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_matrix_multiplication.spec.js @@ -1,117 +1,90 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix-matrix f16 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f16_matrix_matrix_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matKxR_matCxK_[non_]const -const mat_mat_cases = [2, 3, 4] - .flatMap(k => - [2, 3, 4].flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${k}x${rows}_mat${cols}x${k}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixPairToMatrixCases( - sparseMatrixF16Range(k, rows), - sparseMatrixF16Range(cols, k), - nonConst ? 'unfiltered' : 'finite', - FP.f16.multiplicationMatrixMatrixInterval - ); - }, - })) - ) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_matrix_matrix_multiplication', mat_mat_cases); - -g.test('matrix_matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a matrix and y is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('common_dim', [2, 3, 4]) - .combine('x_rows', [2, 3, 4]) - .combine('y_cols', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const x_cols = t.params.common_dim; - const x_rows = t.params.x_rows; - const y_cols = t.params.y_cols; - const y_rows = t.params.common_dim; +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('common_dim', [2, 3, 4]). +combine('x_rows', [2, 3, 4]). +combine('y_cols', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const x_cols = t.params.common_dim; + const x_rows = t.params.x_rows; + const y_cols = t.params.y_cols; + const y_rows = t.params.common_dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` - : `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` - ); + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` : + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` + ); + await run( + t, + binary('*'), + [TypeMat(x_cols, x_rows, TypeF16), TypeMat(y_cols, y_rows, TypeF16)], + TypeMat(y_cols, x_rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeMat(x_cols, x_rows, TypeF16), TypeMat(y_cols, y_rows, TypeF16)], - TypeMat(y_cols, x_rows, TypeF16), - t.params, - cases - ); - }); - -g.test('matrix_matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a matrix and y is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('common_dim', [2, 3, 4]) - .combine('x_rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const x_cols = t.params.common_dim; - const x_rows = t.params.x_rows; - const y_cols = x_cols; - const y_rows = t.params.common_dim; +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('common_dim', [2, 3, 4]). +combine('x_rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const x_cols = t.params.common_dim; + const x_rows = t.params.x_rows; + const y_cols = x_cols; + const y_rows = t.params.common_dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` - : `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` - ); - - await run( - t, - compoundBinary('*='), - [TypeMat(x_cols, x_rows, TypeF16), TypeMat(y_cols, y_rows, TypeF16)], - TypeMat(y_cols, x_rows, TypeF16), - t.params, - cases - ); - }); + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` : + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeMat(x_cols, x_rows, TypeF16), TypeMat(y_cols, y_rows, TypeF16)], + TypeMat(y_cols, x_rows, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.cache.js new file mode 100644 index 00000000000..43776ca14a4 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.cache.js @@ -0,0 +1,44 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF16Range, sparseScalarF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_scalar_[non_]const +const mat_scalar_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateMatrixScalarToMatrixCases( + sparseMatrixF16Range(cols, rows), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f16.multiplicationMatrixScalarInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: scalar_matCxR_[non_]const +const scalar_mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`scalar_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarMatrixToMatrixCases( + sparseScalarF16Range(), + sparseMatrixF16Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f16.multiplicationScalarMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_matrix_scalar_multiplication', { + ...mat_scalar_cases, + ...scalar_mat_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.spec.js index 8c111ab4ed3..2587945a761 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_scalar_multiplication.spec.js @@ -1,156 +1,118 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix-scalar and scalar-matrix f16 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF16Range, sparseMatrixF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f16_matrix_scalar_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_scalar_[non_]const -const mat_scalar_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixScalarToMatrixCases( - sparseMatrixF16Range(cols, rows), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f16.multiplicationMatrixScalarInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: scalar_matCxR_[non_]const -const scalar_mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`scalar_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarMatrixToMatrixCases( - sparseF16Range(), - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.multiplicationScalarMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_matrix_scalar_multiplication', { - ...mat_scalar_cases, - ...scalar_mat_cases, -}); - -g.test('matrix_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a matrix and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${cols}x${rows}_scalar_const` - : `mat${cols}x${rows}_scalar_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${cols}x${rows}_scalar_const` : + `mat${cols}x${rows}_scalar_non_const` + ); + await run( + t, + binary('*'), + [TypeMat(cols, rows, TypeF16), TypeF16], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeMat(cols, rows, TypeF16), TypeF16], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); - -g.test('matrix_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a matrix and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${cols}x${rows}_scalar_const` - : `mat${cols}x${rows}_scalar_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${cols}x${rows}_scalar_const` : + `mat${cols}x${rows}_scalar_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeMat(cols, rows, TypeF16), TypeF16], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('*='), - [TypeMat(cols, rows, TypeF16), TypeF16], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); - -g.test('scalar_matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a scalar and y is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `scalar_mat${cols}x${rows}_const` - : `scalar_mat${cols}x${rows}_non_const` - ); - - await run( - t, - binary('*'), - [TypeF16, TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `scalar_mat${cols}x${rows}_const` : + `scalar_mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('*'), + [TypeF16, TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.cache.js new file mode 100644 index 00000000000..f759832ae70 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.cache.js @@ -0,0 +1,23 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_[non_]const +const mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateMatrixPairToMatrixCases( + sparseMatrixF16Range(cols, rows), + sparseMatrixF16Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f16.subtractionMatrixMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_matrix_subtraction', mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.spec.js index 236da564d78..9a458db528b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_subtraction.spec.js @@ -1,98 +1,79 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix f16 subtraction expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f16_matrix_subtraction.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_[non_]const -const mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixPairToMatrixCases( - sparseMatrixF16Range(cols, rows), - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.subtractionMatrixMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_matrix_subtraction', mat_cases); - -g.test('matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('-'), + [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('-'), - [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); - -g.test('matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); - - await run( - t, - compoundBinary('-='), - [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + compoundBinary('-='), + [TypeMat(cols, rows, TypeF16), TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.cache.js new file mode 100644 index 00000000000..81b117512a1 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.cache.js @@ -0,0 +1,44 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF16Range, sparseVectorF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_vecC_[non_]const +const mat_vec_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_vec${cols}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateMatrixVectorToVectorCases( + sparseMatrixF16Range(cols, rows), + sparseVectorF16Range(cols), + nonConst ? 'unfiltered' : 'finite', + FP.f16.multiplicationMatrixVectorInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: vecR_matCxR_[non_]const +const vec_mat_cases = [2, 3, 4]. +flatMap((rows) => +[2, 3, 4].flatMap((cols) => +[true, false].map((nonConst) => ({ + [`vec${rows}_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateVectorMatrixToVectorCases( + sparseVectorF16Range(rows), + sparseMatrixF16Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f16.multiplicationVectorMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_matrix_vector_multiplication', { + ...mat_vec_cases, + ...vec_mat_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.spec.js index dcfe2118fc8..f7be6036f3a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_matrix_vector_multiplication.spec.js @@ -1,154 +1,113 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix-vector and vector-matrix f16 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeMat, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF16Range, sparseVectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f16_matrix_vector_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_vecC_[non_]const -const mat_vec_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_vec${cols}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixVectorToVectorCases( - sparseMatrixF16Range(cols, rows), - sparseVectorF16Range(cols), - nonConst ? 'unfiltered' : 'finite', - FP.f16.multiplicationMatrixVectorInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: vecR_matCxR_[non_]const -const vec_mat_cases = [2, 3, 4] - .flatMap(rows => - [2, 3, 4].flatMap(cols => - [true, false].map(nonConst => ({ - [`vec${rows}_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorMatrixToVectorCases( - sparseVectorF16Range(rows), - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.multiplicationVectorMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_matrix_vector_multiplication', { - ...mat_vec_cases, - ...vec_mat_cases, -}); - -g.test('matrix_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a matrix and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${cols}x${rows}_vec${cols}_const` - : `mat${cols}x${rows}_vec${cols}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${cols}x${rows}_vec${cols}_const` : + `mat${cols}x${rows}_vec${cols}_non_const` + ); + await run( + t, + binary('*'), + [TypeMat(cols, rows, TypeF16), TypeVec(cols, TypeF16)], + TypeVec(rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeMat(cols, rows, TypeF16), TypeVec(cols, TypeF16)], - TypeVec(rows, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a vector and y is is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `vec${rows}_mat${cols}x${rows}_const` - : `vec${rows}_mat${cols}x${rows}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `vec${rows}_mat${cols}x${rows}_const` : + `vec${rows}_mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('*'), + [TypeVec(rows, TypeF16), TypeMat(cols, rows, TypeF16)], + TypeVec(cols, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeVec(rows, TypeF16), TypeMat(cols, rows, TypeF16)], - TypeVec(cols, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a vector and y is is a matrix Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.dim; - const rows = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `vec${rows}_mat${cols}x${rows}_const` - : `vec${rows}_mat${cols}x${rows}_non_const` - ); - - await run( - t, - compoundBinary('*='), - [TypeVec(rows, TypeF16), TypeMat(cols, rows, TypeF16)], - TypeVec(cols, TypeF16), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.dim; + const rows = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? + `vec${rows}_mat${cols}x${rows}_const` : + `vec${rows}_mat${cols}x${rows}_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeVec(rows, TypeF16), TypeMat(cols, rows, TypeF16)], + TypeVec(cols, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.cache.js new file mode 100644 index 00000000000..35ad0064260 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF16Range, sparseVectorF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const multiplicationVectorScalarInterval = (v, s) => { + return FP.f16.toVector(v.map((e) => FP.f16.multiplicationInterval(e, s))); +}; + +const multiplicationScalarVectorInterval = (s, v) => { + return FP.f16.toVector(v.map((e) => FP.f16.multiplicationInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarPairToIntervalCases( + sparseScalarF16Range(), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f16.multiplicationInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateVectorScalarToVectorCases( + sparseVectorF16Range(dim), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + multiplicationVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarVectorToVectorCases( + sparseScalarF16Range(), + sparseVectorF16Range(dim), + nonConst ? 'unfiltered' : 'finite', + multiplicationScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_multiplication', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.spec.js index a6ce77c433b..acb36d472e8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_multiplication.spec.js @@ -1,216 +1,153 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f16 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF16Range, sparseVectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const multiplicationVectorScalarInterval = (v, s) => { - return FP.f16.toVector(v.map(e => FP.f16.multiplicationInterval(e, s))); -}; - -const multiplicationScalarVectorInterval = (s, v) => { - return FP.f16.toVector(v.map(e => FP.f16.multiplicationInterval(s, e))); -}; +import { d } from './f16_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarPairToIntervalCases( - sparseF16Range(), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f16.multiplicationInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorScalarToVectorCases( - sparseVectorF16Range(dim), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - multiplicationVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarVectorToVectorCases( - sparseF16Range(), - sparseVectorF16Range(dim), - nonConst ? 'unfiltered' : 'finite', - multiplicationScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_multiplication', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('*'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, binary('*'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('*'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('*'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('*='), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, compoundBinary('*='), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('*'), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('*='), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('*'), - [TypeF16, TypeVec(dim, TypeF16)], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('*'), + [TypeF16, TypeVec(dim, TypeF16)], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.cache.js new file mode 100644 index 00000000000..816fd1d5101 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF16Range, sparseVectorF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const remainderVectorScalarInterval = (v, s) => { + return FP.f16.toVector(v.map((e) => FP.f16.remainderInterval(e, s))); +}; + +const remainderScalarVectorInterval = (s, v) => { + return FP.f16.toVector(v.map((e) => FP.f16.remainderInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarPairToIntervalCases( + sparseScalarF16Range(), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f16.remainderInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateVectorScalarToVectorCases( + sparseVectorF16Range(dim), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + remainderVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarVectorToVectorCases( + sparseScalarF16Range(), + sparseVectorF16Range(dim), + nonConst ? 'unfiltered' : 'finite', + remainderScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_remainder', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.spec.js index 31068964f8d..8d9437d1033 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_remainder.spec.js @@ -1,217 +1,153 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f16 remainder expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF16Range, sparseVectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const remainderVectorScalarInterval = (v, s) => { - return FP.f16.toVector(v.map(e => FP.f16.remainderInterval(e, s))); -}; - -const remainderScalarVectorInterval = (s, v) => { - return FP.f16.toVector(v.map(e => FP.f16.remainderInterval(s, e))); -}; +import { d } from './f16_remainder.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarPairToIntervalCases( - sparseF16Range(), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f16.remainderInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorScalarToVectorCases( - sparseVectorF16Range(dim), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - remainderVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarVectorToVectorCases( - sparseF16Range(), - sparseVectorF16Range(dim), - nonConst ? 'unfiltered' : 'finite', - remainderScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_remainder', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x and y are scalars Accuracy: Derived from x - y * trunc(x/y) ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('%'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, binary('%'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x and y are vectors Accuracy: Derived from x - y * trunc(x/y) ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('%'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, binary('%'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x %= y Accuracy: Derived from x - y * trunc(x/y) ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('%='), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, compoundBinary('%='), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('%'), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('%'), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x %= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('%='), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('%='), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('%'), - [TypeF16, TypeVec(dim, TypeF16)], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('%'), + [TypeF16, TypeVec(dim, TypeF16)], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.cache.js new file mode 100644 index 00000000000..65ff0d7f183 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF16Range, sparseVectorF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const subtractionVectorScalarInterval = (v, s) => { + return FP.f16.toVector(v.map((e) => FP.f16.subtractionInterval(e, s))); +}; + +const subtractionScalarVectorInterval = (s, v) => { + return FP.f16.toVector(v.map((e) => FP.f16.subtractionInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarPairToIntervalCases( + sparseScalarF16Range(), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f16.subtractionInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateVectorScalarToVectorCases( + sparseVectorF16Range(dim), + sparseScalarF16Range(), + nonConst ? 'unfiltered' : 'finite', + subtractionVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateScalarVectorToVectorCases( + sparseScalarF16Range(), + sparseVectorF16Range(dim), + nonConst ? 'unfiltered' : 'finite', + subtractionScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f16_subtraction', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.spec.js index 195cf7d7627..90fe379dc29 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f16_subtraction.spec.js @@ -1,216 +1,153 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f16 subtraction expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF16Range, sparseVectorF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const subtractionVectorScalarInterval = (v, s) => { - return FP.f16.toVector(v.map(e => FP.f16.subtractionInterval(e, s))); -}; - -const subtractionScalarVectorInterval = (s, v) => { - return FP.f16.toVector(v.map(e => FP.f16.subtractionInterval(s, e))); -}; +import { d } from './f16_subtraction.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarPairToIntervalCases( - sparseF16Range(), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f16.subtractionInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorScalarToVectorCases( - sparseVectorF16Range(dim), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - subtractionVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateScalarVectorToVectorCases( - sparseF16Range(), - sparseVectorF16Range(dim), - nonConst ? 'unfiltered' : 'finite', - subtractionScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f16_subtraction', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('-'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, binary('-'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('-'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('-'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('-='), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run(t, compoundBinary('-='), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('-'), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - binary('-'), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('-='), + [TypeVec(dim, TypeF16), TypeF16], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('-='), - [TypeVec(dim, TypeF16), TypeF16], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('-'), - [TypeF16, TypeVec(dim, TypeF16)], - TypeVec(dim, TypeF16), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('-'), + [TypeF16, TypeVec(dim, TypeF16)], + TypeVec(dim, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.cache.js new file mode 100644 index 00000000000..65c280ce3bf --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF32Range, sparseVectorF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const additionVectorScalarInterval = (v, s) => { + return FP.f32.toVector(v.map((e) => FP.f32.additionInterval(e, s))); +}; + +const additionScalarVectorInterval = (s, v) => { + return FP.f32.toVector(v.map((e) => FP.f32.additionInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarPairToIntervalCases( + sparseScalarF32Range(), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f32.additionInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateVectorScalarToVectorCases( + sparseVectorF32Range(dim), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + additionVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarVectorToVectorCases( + sparseScalarF32Range(), + sparseVectorF32Range(dim), + nonConst ? 'unfiltered' : 'finite', + additionScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_addition', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.spec.js index 50a13483154..d1372b80273 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_addition.spec.js @@ -1,198 +1,135 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f32 addition expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF32Range, sparseVectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const additionVectorScalarInterval = (v, s) => { - return FP.f32.toVector(v.map(e => FP.f32.additionInterval(e, s))); -}; - -const additionScalarVectorInterval = (s, v) => { - return FP.f32.toVector(v.map(e => FP.f32.additionInterval(s, e))); -}; +import { d } from './f32_addition.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarPairToIntervalCases( - sparseF32Range(), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f32.additionInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorScalarToVectorCases( - sparseVectorF32Range(dim), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - additionVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarVectorToVectorCases( - sparseF32Range(), - sparseVectorF32Range(dim), - nonConst ? 'unfiltered' : 'finite', - additionScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_addition', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('+'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, binary('+'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('+'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('+'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x += y Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('+='), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, compoundBinary('+='), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('+'), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('+'), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x += y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('+='), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('+='), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('+'), - [TypeF32, TypeVec(dim, TypeF32)], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('+'), + [TypeF32, TypeVec(dim, TypeF32)], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.cache.js new file mode 100644 index 00000000000..6ed518e519f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.cache.js @@ -0,0 +1,144 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf } from '../../../../util/compare.js';import { bool, f32 } from '../../../../util/conversion.js';import { flushSubnormalNumberF32, vectorF32Range } from '../../../../util/math.js'; + +import { makeCaseCache } from '../case_cache.js'; + +/** + * @returns a test case for the provided left hand & right hand values and truth function. + * Handles quantization and subnormals. + */ +function makeCase( +lhs, +rhs, +truthFunc) +{ + // Subnormal float values may be flushed at any time. + // https://www.w3.org/TR/WGSL/#floating-point-evaluation + const f32_lhs = f32(lhs); + const f32_rhs = f32(rhs); + const lhs_options = new Set([f32_lhs, f32(flushSubnormalNumberF32(lhs))]); + const rhs_options = new Set([f32_rhs, f32(flushSubnormalNumberF32(rhs))]); + const expected = []; + lhs_options.forEach((l) => { + rhs_options.forEach((r) => { + const result = bool(truthFunc(l, r)); + if (!expected.includes(result)) { + expected.push(result); + } + }); + }); + + return { input: [f32_lhs, f32_rhs], expected: anyOf(...expected) }; +} + +export const d = makeCaseCache('binary/f32_logical', { + equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value === rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value === rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + not_equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value !== rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + not_equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value !== rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_than_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value < rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_than_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value < rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value <= rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + less_equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value <= rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_than_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value > rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_than_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value > rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_equals_non_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value >= rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + }, + greater_equals_const: () => { + const truthFunc = (lhs, rhs) => { + return lhs.value >= rhs.value; + }; + + return vectorF32Range(2).map((v) => { + return makeCase(v[0], v[1], truthFunc); + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.spec.js index 17f83c7f5b6..95990ebc167 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_comparison.spec.js @@ -1,253 +1,121 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the f32 comparison operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { anyOf } from '../../../../util/compare.js'; -import { bool, f32, TypeBool, TypeF32 } from '../../../../util/conversion.js'; -import { flushSubnormalNumberF32, vectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeF32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; import { binary } from './binary.js'; +import { d } from './f32_comparison.cache.js'; export const g = makeTestGroup(GPUTest); -/** - * @returns a test case for the provided left hand & right hand values and truth function. - * Handles quantization and subnormals. - */ -function makeCase(lhs, rhs, truthFunc) { - // Subnormal float values may be flushed at any time. - // https://www.w3.org/TR/WGSL/#floating-point-evaluation - const f32_lhs = f32(lhs); - const f32_rhs = f32(rhs); - const lhs_options = new Set([f32_lhs, f32(flushSubnormalNumberF32(lhs))]); - const rhs_options = new Set([f32_rhs, f32(flushSubnormalNumberF32(rhs))]); - const expected = []; - lhs_options.forEach(l => { - rhs_options.forEach(r => { - const result = bool(truthFunc(l, r)); - if (!expected.includes(result)) { - expected.push(result); - } - }); - }); - - return { input: [f32_lhs, f32_rhs], expected: anyOf(...expected) }; -} - -export const d = makeCaseCache('binary/f32_logical', { - equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value === rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value === rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - not_equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value !== rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - not_equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value !== rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_than_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value < rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_than_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value < rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value <= rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - less_equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value <= rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_than_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value > rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_than_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value > rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_equals_non_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value >= rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, - greater_equals_const: () => { - const truthFunc = (lhs, rhs) => { - return lhs.value >= rhs.value; - }; - - return vectorF32Range(2).map(v => { - return makeCase(v[0], v[1], truthFunc); - }); - }, -}); - -g.test('equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x == y Accuracy: Correct result ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'equals_const' : 'equals_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'equals_const' : 'equals_non_const' + ); + await run(t, binary('=='), [TypeF32, TypeF32], TypeBool, t.params, cases); +}); - await run(t, binary('=='), [TypeF32, TypeF32], TypeBool, t.params, cases); - }); - -g.test('not_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('not_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x != y Accuracy: Correct result ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'not_equals_const' : 'not_equals_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'not_equals_const' : 'not_equals_non_const' + ); + await run(t, binary('!='), [TypeF32, TypeF32], TypeBool, t.params, cases); +}); - await run(t, binary('!='), [TypeF32, TypeF32], TypeBool, t.params, cases); - }); - -g.test('less_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x < y Accuracy: Correct result ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'less_than_const' : 'less_than_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'less_than_const' : 'less_than_non_const' + ); + await run(t, binary('<'), [TypeF32, TypeF32], TypeBool, t.params, cases); +}); - await run(t, binary('<'), [TypeF32, TypeF32], TypeBool, t.params, cases); - }); - -g.test('less_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x <= y Accuracy: Correct result ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'less_equals_const' : 'less_equals_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'less_equals_const' : 'less_equals_non_const' + ); + await run(t, binary('<='), [TypeF32, TypeF32], TypeBool, t.params, cases); +}); - await run(t, binary('<='), [TypeF32, TypeF32], TypeBool, t.params, cases); - }); - -g.test('greater_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x > y Accuracy: Correct result ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'greater_than_const' : 'greater_than_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'greater_than_const' : 'greater_than_non_const' + ); + await run(t, binary('>'), [TypeF32, TypeF32], TypeBool, t.params, cases); +}); - await run(t, binary('>'), [TypeF32, TypeF32], TypeBool, t.params, cases); - }); - -g.test('greater_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x >= y Accuracy: Correct result ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'greater_equals_const' : 'greater_equals_non_const' - ); - - await run(t, binary('>='), [TypeF32, TypeF32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'greater_equals_const' : 'greater_equals_non_const' + ); + await run(t, binary('>='), [TypeF32, TypeF32], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.cache.js new file mode 100644 index 00000000000..987cb3676f2 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF32Range, sparseVectorF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const divisionVectorScalarInterval = (v, s) => { + return FP.f32.toVector(v.map((e) => FP.f32.divisionInterval(e, s))); +}; + +const divisionScalarVectorInterval = (s, v) => { + return FP.f32.toVector(v.map((e) => FP.f32.divisionInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarPairToIntervalCases( + sparseScalarF32Range(), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f32.divisionInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateVectorScalarToVectorCases( + sparseVectorF32Range(dim), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + divisionVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarVectorToVectorCases( + sparseScalarF32Range(), + sparseVectorF32Range(dim), + nonConst ? 'unfiltered' : 'finite', + divisionScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_division', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.spec.js index 9f5d4dc53ea..a9180e950c7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_division.spec.js @@ -1,198 +1,135 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f32 division expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF32Range, sparseVectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const divisionVectorScalarInterval = (v, s) => { - return FP.f32.toVector(v.map(e => FP.f32.divisionInterval(e, s))); -}; - -const divisionScalarVectorInterval = (s, v) => { - return FP.f32.toVector(v.map(e => FP.f32.divisionInterval(s, e))); -}; +import { d } from './f32_division.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarPairToIntervalCases( - sparseF32Range(), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f32.divisionInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorScalarToVectorCases( - sparseVectorF32Range(dim), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - divisionVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarVectorToVectorCases( - sparseF32Range(), - sparseVectorF32Range(dim), - nonConst ? 'unfiltered' : 'finite', - divisionScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_division', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x and y are scalars Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('/'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, binary('/'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x and y are vectors Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('/'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('/'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x /= y Accuracy: 2.5 ULP for |y| in the range [2^-126, 2^126] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('/='), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, compoundBinary('/='), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('/'), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('/'), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x /= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('/='), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('/='), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('/'), - [TypeF32, TypeVec(dim, TypeF32)], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('/'), + [TypeF32, TypeVec(dim, TypeF32)], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.cache.js new file mode 100644 index 00000000000..b3c7bec4922 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.cache.js @@ -0,0 +1,23 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_[non_]const +const mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixPairToMatrixCases( + sparseMatrixF32Range(cols, rows), + sparseMatrixF32Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f32.additionMatrixMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_matrix_addition', mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.spec.js index 119099de616..14cba2293ef 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_addition.spec.js @@ -1,92 +1,73 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix f32 addition expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f32_matrix_addition.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_[non_]const -const mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixPairToMatrixCases( - sparseMatrixF32Range(cols, rows), - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.additionMatrixMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_matrix_addition', mat_cases); - -g.test('matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x + y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('+'), + [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('+'), - [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); - -g.test('matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x =+ y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); - - await run( - t, - compoundBinary('+='), - [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + compoundBinary('+='), + [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.cache.js new file mode 100644 index 00000000000..4d5382f6495 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.cache.js @@ -0,0 +1,25 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matKxR_matCxK_[non_]const +const mat_mat_cases = [2, 3, 4]. +flatMap((k) => +[2, 3, 4].flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${k}x${rows}_mat${cols}x${k}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixPairToMatrixCases( + sparseMatrixF32Range(k, rows), + sparseMatrixF32Range(cols, k), + nonConst ? 'unfiltered' : 'finite', + FP.f32.multiplicationMatrixMatrixInterval + ); + } +})) +) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_matrix_matrix_multiplication', mat_mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.spec.js index df119808726..ada32250a76 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_matrix_multiplication.spec.js @@ -1,111 +1,84 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix-matrix f32 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f32_matrix_matrix_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matKxR_matCxK_[non_]const -const mat_mat_cases = [2, 3, 4] - .flatMap(k => - [2, 3, 4].flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${k}x${rows}_mat${cols}x${k}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixPairToMatrixCases( - sparseMatrixF32Range(k, rows), - sparseMatrixF32Range(cols, k), - nonConst ? 'unfiltered' : 'finite', - FP.f32.multiplicationMatrixMatrixInterval - ); - }, - })) - ) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_matrix_matrix_multiplication', mat_mat_cases); - -g.test('matrix_matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a matrix and y is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('common_dim', [2, 3, 4]) - .combine('x_rows', [2, 3, 4]) - .combine('y_cols', [2, 3, 4]) - ) - .fn(async t => { - const x_cols = t.params.common_dim; - const x_rows = t.params.x_rows; - const y_cols = t.params.y_cols; - const y_rows = t.params.common_dim; +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('common_dim', [2, 3, 4]). +combine('x_rows', [2, 3, 4]). +combine('y_cols', [2, 3, 4]) +). +fn(async (t) => { + const x_cols = t.params.common_dim; + const x_rows = t.params.x_rows; + const y_cols = t.params.y_cols; + const y_rows = t.params.common_dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` - : `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` - ); + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` : + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` + ); + await run( + t, + binary('*'), + [TypeMat(x_cols, x_rows, TypeF32), TypeMat(y_cols, y_rows, TypeF32)], + TypeMat(y_cols, x_rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeMat(x_cols, x_rows, TypeF32), TypeMat(y_cols, y_rows, TypeF32)], - TypeMat(y_cols, x_rows, TypeF32), - t.params, - cases - ); - }); - -g.test('matrix_matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a matrix and y is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('common_dim', [2, 3, 4]) - .combine('x_rows', [2, 3, 4]) - ) - .fn(async t => { - const x_cols = t.params.common_dim; - const x_rows = t.params.x_rows; - const y_cols = x_cols; - const y_rows = t.params.common_dim; +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('common_dim', [2, 3, 4]). +combine('x_rows', [2, 3, 4]) +). +fn(async (t) => { + const x_cols = t.params.common_dim; + const x_rows = t.params.x_rows; + const y_cols = x_cols; + const y_rows = t.params.common_dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` - : `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` - ); - - await run( - t, - compoundBinary('*='), - [TypeMat(x_cols, x_rows, TypeF32), TypeMat(y_cols, y_rows, TypeF32)], - TypeMat(y_cols, x_rows, TypeF32), - t.params, - cases - ); - }); + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_const` : + `mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeMat(x_cols, x_rows, TypeF32), TypeMat(y_cols, y_rows, TypeF32)], + TypeMat(y_cols, x_rows, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.cache.js new file mode 100644 index 00000000000..cc3321acb70 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.cache.js @@ -0,0 +1,44 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF32Range, sparseScalarF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_scalar_[non_]const +const mat_scalar_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixScalarToMatrixCases( + sparseMatrixF32Range(cols, rows), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f32.multiplicationMatrixScalarInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: scalar_matCxR_[non_]const +const scalar_mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`scalar_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarMatrixToMatrixCases( + sparseScalarF32Range(), + sparseMatrixF32Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f32.multiplicationScalarMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_matrix_scalar_multiplication', { + ...mat_scalar_cases, + ...scalar_mat_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.spec.js index 82edc6eb2b1..d7c0c2b04f7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_scalar_multiplication.spec.js @@ -1,147 +1,109 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix-scalar and scalar-matrix f32 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF32Range, sparseMatrixF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f32_matrix_scalar_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_scalar_[non_]const -const mat_scalar_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixScalarToMatrixCases( - sparseMatrixF32Range(cols, rows), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f32.multiplicationMatrixScalarInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: scalar_matCxR_[non_]const -const scalar_mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`scalar_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarMatrixToMatrixCases( - sparseF32Range(), - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.multiplicationScalarMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_matrix_scalar_multiplication', { - ...mat_scalar_cases, - ...scalar_mat_cases, -}); - -g.test('matrix_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a matrix and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${cols}x${rows}_scalar_const` - : `mat${cols}x${rows}_scalar_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${cols}x${rows}_scalar_const` : + `mat${cols}x${rows}_scalar_non_const` + ); + await run( + t, + binary('*'), + [TypeMat(cols, rows, TypeF32), TypeF32], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeMat(cols, rows, TypeF32), TypeF32], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); - -g.test('matrix_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a matrix and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${cols}x${rows}_scalar_const` - : `mat${cols}x${rows}_scalar_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${cols}x${rows}_scalar_const` : + `mat${cols}x${rows}_scalar_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeMat(cols, rows, TypeF32), TypeF32], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('*='), - [TypeMat(cols, rows, TypeF32), TypeF32], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); - -g.test('scalar_matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a scalar and y is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `scalar_mat${cols}x${rows}_const` - : `scalar_mat${cols}x${rows}_non_const` - ); - - await run( - t, - binary('*'), - [TypeF32, TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `scalar_mat${cols}x${rows}_const` : + `scalar_mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('*'), + [TypeF32, TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.cache.js new file mode 100644 index 00000000000..61a60d8e493 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.cache.js @@ -0,0 +1,23 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_[non_]const +const mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixPairToMatrixCases( + sparseMatrixF32Range(cols, rows), + sparseMatrixF32Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f32.subtractionMatrixMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_matrix_subtraction', mat_cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.spec.js index 4a5eb65e6f0..beb7d0dac26 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_subtraction.spec.js @@ -1,92 +1,73 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix f32 subtraction expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeMat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f32_matrix_subtraction.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_[non_]const -const mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixPairToMatrixCases( - sparseMatrixF32Range(cols, rows), - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.subtractionMatrixMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_matrix_subtraction', mat_cases); - -g.test('matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('-'), + [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('-'), - [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); - -g.test('matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y, where x and y are matrices Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` - ); - - await run( - t, - compoundBinary('-='), - [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? `mat${cols}x${rows}_const` : `mat${cols}x${rows}_non_const` + ); + await run( + t, + compoundBinary('-='), + [TypeMat(cols, rows, TypeF32), TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.cache.js new file mode 100644 index 00000000000..778c0500f83 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.cache.js @@ -0,0 +1,44 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseMatrixF32Range, sparseVectorF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +// Cases: matCxR_vecC_[non_]const +const mat_vec_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`mat${cols}x${rows}_vec${cols}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixVectorToVectorCases( + sparseMatrixF32Range(cols, rows), + sparseVectorF32Range(cols), + nonConst ? 'unfiltered' : 'finite', + FP.f32.multiplicationMatrixVectorInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: vecR_matCxR_[non_]const +const vec_mat_cases = [2, 3, 4]. +flatMap((rows) => +[2, 3, 4].flatMap((cols) => +[true, false].map((nonConst) => ({ + [`vec${rows}_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateVectorMatrixToVectorCases( + sparseVectorF32Range(rows), + sparseMatrixF32Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f32.multiplicationVectorMatrixInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_matrix_vector_multiplication', { + ...mat_vec_cases, + ...vec_mat_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.spec.js index 0ec422536dc..ed1f21028d7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_matrix_vector_multiplication.spec.js @@ -1,145 +1,104 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for matrix-vector and vector-matrix f32 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeMat, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseMatrixF32Range, sparseVectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; +import { d } from './f32_matrix_vector_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: matCxR_vecC_[non_]const -const mat_vec_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`mat${cols}x${rows}_vec${cols}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixVectorToVectorCases( - sparseMatrixF32Range(cols, rows), - sparseVectorF32Range(cols), - nonConst ? 'unfiltered' : 'finite', - FP.f32.multiplicationMatrixVectorInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: vecR_matCxR_[non_]const -const vec_mat_cases = [2, 3, 4] - .flatMap(rows => - [2, 3, 4].flatMap(cols => - [true, false].map(nonConst => ({ - [`vec${rows}_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorMatrixToVectorCases( - sparseVectorF32Range(rows), - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.multiplicationVectorMatrixInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_matrix_vector_multiplication', { - ...mat_vec_cases, - ...vec_mat_cases, -}); - -g.test('matrix_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('matrix_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a matrix and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `mat${cols}x${rows}_vec${cols}_const` - : `mat${cols}x${rows}_vec${cols}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `mat${cols}x${rows}_vec${cols}_const` : + `mat${cols}x${rows}_vec${cols}_non_const` + ); + await run( + t, + binary('*'), + [TypeMat(cols, rows, TypeF32), TypeVec(cols, TypeF32)], + TypeVec(rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeMat(cols, rows, TypeF32), TypeVec(cols, TypeF32)], - TypeVec(rows, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_matrix') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_matrix'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a vector and y is is a matrix Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `vec${rows}_mat${cols}x${rows}_const` - : `vec${rows}_mat${cols}x${rows}_non_const` - ); +). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `vec${rows}_mat${cols}x${rows}_const` : + `vec${rows}_mat${cols}x${rows}_non_const` + ); + await run( + t, + binary('*'), + [TypeVec(rows, TypeF32), TypeMat(cols, rows, TypeF32)], + TypeVec(cols, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeVec(rows, TypeF32), TypeMat(cols, rows, TypeF32)], - TypeVec(cols, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_matrix_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_matrix_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a vector and y is is a matrix Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const cols = t.params.dim; - const rows = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `vec${rows}_mat${cols}x${rows}_const` - : `vec${rows}_mat${cols}x${rows}_non_const` - ); - - await run( - t, - compoundBinary('*='), - [TypeVec(rows, TypeF32), TypeMat(cols, rows, TypeF32)], - TypeVec(cols, TypeF32), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const cols = t.params.dim; + const rows = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? + `vec${rows}_mat${cols}x${rows}_const` : + `vec${rows}_mat${cols}x${rows}_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeVec(rows, TypeF32), TypeMat(cols, rows, TypeF32)], + TypeVec(cols, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.cache.js new file mode 100644 index 00000000000..3135f87b29a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF32Range, sparseVectorF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const multiplicationVectorScalarInterval = (v, s) => { + return FP.f32.toVector(v.map((e) => FP.f32.multiplicationInterval(e, s))); +}; + +const multiplicationScalarVectorInterval = (s, v) => { + return FP.f32.toVector(v.map((e) => FP.f32.multiplicationInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarPairToIntervalCases( + sparseScalarF32Range(), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f32.multiplicationInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateVectorScalarToVectorCases( + sparseVectorF32Range(dim), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + multiplicationVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarVectorToVectorCases( + sparseScalarF32Range(), + sparseVectorF32Range(dim), + nonConst ? 'unfiltered' : 'finite', + multiplicationScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_multiplication', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.spec.js index 59fb529e66e..0420096d7a0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_multiplication.spec.js @@ -1,198 +1,135 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f32 multiplication expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF32Range, sparseVectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const multiplicationVectorScalarInterval = (v, s) => { - return FP.f32.toVector(v.map(e => FP.f32.multiplicationInterval(e, s))); -}; - -const multiplicationScalarVectorInterval = (s, v) => { - return FP.f32.toVector(v.map(e => FP.f32.multiplicationInterval(s, e))); -}; +import { d } from './f32_multiplication.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarPairToIntervalCases( - sparseF32Range(), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f32.multiplicationInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorScalarToVectorCases( - sparseVectorF32Range(dim), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - multiplicationVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarVectorToVectorCases( - sparseF32Range(), - sparseVectorF32Range(dim), - nonConst ? 'unfiltered' : 'finite', - multiplicationScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_multiplication', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('*'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, binary('*'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('*'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('*'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('*='), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, compoundBinary('*='), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('*'), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('*'), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('*='), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('*='), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('*'), - [TypeF32, TypeVec(dim, TypeF32)], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('*'), + [TypeF32, TypeVec(dim, TypeF32)], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.cache.js new file mode 100644 index 00000000000..62f9c4f85cf --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.cache.js @@ -0,0 +1,64 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Execution Tests for non-matrix f32 remainder expression +`;import { FP } from '../../../../util/floating_point.js'; +import { sparseScalarF32Range, sparseVectorF32Range } from '../../../../util/math.js'; +import { makeCaseCache } from '../case_cache.js'; + +const remainderVectorScalarInterval = (v, s) => { + return FP.f32.toVector(v.map((e) => FP.f32.remainderInterval(e, s))); +}; + +const remainderScalarVectorInterval = (s, v) => { + return FP.f32.toVector(v.map((e) => FP.f32.remainderInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarPairToIntervalCases( + sparseScalarF32Range(), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f32.remainderInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateVectorScalarToVectorCases( + sparseVectorF32Range(dim), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + remainderVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarVectorToVectorCases( + sparseScalarF32Range(), + sparseVectorF32Range(dim), + nonConst ? 'unfiltered' : 'finite', + remainderScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_remainder', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.spec.js index 41008bdd2bc..6e7d4cffc55 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_remainder.spec.js @@ -1,198 +1,135 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f32 remainder expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF32Range, sparseVectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const remainderVectorScalarInterval = (v, s) => { - return FP.f32.toVector(v.map(e => FP.f32.remainderInterval(e, s))); -}; - -const remainderScalarVectorInterval = (s, v) => { - return FP.f32.toVector(v.map(e => FP.f32.remainderInterval(s, e))); -}; +import { d } from './f32_remainder.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarPairToIntervalCases( - sparseF32Range(), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f32.remainderInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorScalarToVectorCases( - sparseVectorF32Range(dim), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - remainderVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarVectorToVectorCases( - sparseF32Range(), - sparseVectorF32Range(dim), - nonConst ? 'unfiltered' : 'finite', - remainderScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_remainder', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x and y are scalars Accuracy: Derived from x - y * trunc(x/y) ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('%'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, binary('%'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x and y are vectors Accuracy: Derived from x - y * trunc(x/y) ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('%'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('%'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x %= y Accuracy: Derived from x - y * trunc(x/y) ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('%='), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, compoundBinary('%='), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('%'), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('%'), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x %= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('%='), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('%='), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('%'), - [TypeF32, TypeVec(dim, TypeF32)], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('%'), + [TypeF32, TypeVec(dim, TypeF32)], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.cache.js new file mode 100644 index 00000000000..d328133b14d --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.cache.js @@ -0,0 +1,60 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { sparseScalarF32Range, sparseVectorF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +const subtractionVectorScalarInterval = (v, s) => { + return FP.f32.toVector(v.map((e) => FP.f32.subtractionInterval(e, s))); +}; + +const subtractionScalarVectorInterval = (s, v) => { + return FP.f32.toVector(v.map((e) => FP.f32.subtractionInterval(s, e))); +}; + +const scalar_cases = [true, false]. +map((nonConst) => ({ + [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarPairToIntervalCases( + sparseScalarF32Range(), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + FP.f32.subtractionInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +const vector_scalar_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateVectorScalarToVectorCases( + sparseVectorF32Range(dim), + sparseScalarF32Range(), + nonConst ? 'unfiltered' : 'finite', + subtractionVectorScalarInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +const scalar_vector_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateScalarVectorToVectorCases( + sparseScalarF32Range(), + sparseVectorF32Range(dim), + nonConst ? 'unfiltered' : 'finite', + subtractionScalarVectorInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('binary/f32_subtraction', { + ...scalar_cases, + ...vector_scalar_cases, + ...scalar_vector_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.spec.js index d6d6ab216f7..dd4dab1c8f0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/f32_subtraction.spec.js @@ -1,198 +1,135 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for non-matrix f32 subtraction expression -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32, TypeVec } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { sparseF32Range, sparseVectorF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -const subtractionVectorScalarInterval = (v, s) => { - return FP.f32.toVector(v.map(e => FP.f32.subtractionInterval(e, s))); -}; - -const subtractionScalarVectorInterval = (s, v) => { - return FP.f32.toVector(v.map(e => FP.f32.subtractionInterval(s, e))); -}; +import { d } from './f32_subtraction.cache.js'; export const g = makeTestGroup(GPUTest); -const scalar_cases = [true, false] - .map(nonConst => ({ - [`scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarPairToIntervalCases( - sparseF32Range(), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - FP.f32.subtractionInterval - ); - }, - })) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const vector_scalar_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorScalarToVectorCases( - sparseVectorF32Range(dim), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - subtractionVectorScalarInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -const scalar_vector_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`scalar_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateScalarVectorToVectorCases( - sparseF32Range(), - sparseVectorF32Range(dim), - nonConst ? 'unfiltered' : 'finite', - subtractionScalarVectorInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('binary/f32_subtraction', { - ...scalar_cases, - ...vector_scalar_cases, - ...scalar_vector_cases, -}); - -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are scalars Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, binary('-'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, binary('-'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x and y are vectors Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases - ); - await run(t, binary('-'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' // Using vectorize to generate vector cases based on scalar cases + ); + await run(t, binary('-'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'scalar_const' : 'scalar_non_const' + ); + await run(t, compoundBinary('-='), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - await run(t, compoundBinary('-='), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + binary('-'), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - binary('-'), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y, where x is a vector and y is a scalar Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` - ); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `vec${dim}_scalar_const` : `vec${dim}_scalar_non_const` + ); + await run( + t, + compoundBinary('-='), + [TypeVec(dim, TypeF32), TypeF32], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); - await run( - t, - compoundBinary('-='), - [TypeVec(dim, TypeF32), TypeF32], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); - -g.test('scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y, where x is a scalar and y is a vector Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` - ); - - await run( - t, - binary('-'), - [TypeF32, TypeVec(dim, TypeF32)], - TypeVec(dim, TypeF32), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? `scalar_vec${dim}_const` : `scalar_vec${dim}_non_const` + ); + await run( + t, + binary('-'), + [TypeF32, TypeVec(dim, TypeF32)], + TypeVec(dim, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.cache.js new file mode 100644 index 00000000000..c1ceca4ec68 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.cache.js @@ -0,0 +1,306 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../util/constants.js';import { sparseI32Range, vectorI32Range } from '../../../../util/math.js';import { + generateBinaryToI32Cases, + generateI32VectorBinaryToVectorCases, + generateVectorI32BinaryToVectorCases } from +'../case.js'; +import { makeCaseCache } from '../case_cache.js'; + +function i32_add(x, y) { + return x + y; +} + +function i32_subtract(x, y) { + return x - y; +} + +function i32_multiply(x, y) { + return Math.imul(x, y); +} + +function i32_divide_non_const(x, y) { + if (y === 0) { + return x; + } + if (x === kValue.i32.negative.min && y === -1) { + return x; + } + return x / y; +} + +function i32_divide_const(x, y) { + if (y === 0) { + return undefined; + } + if (x === kValue.i32.negative.min && y === -1) { + return undefined; + } + return x / y; +} + +function i32_remainder_non_const(x, y) { + if (y === 0) { + return 0; + } + if (x === kValue.i32.negative.min && y === -1) { + return 0; + } + return x % y; +} + +function i32_remainder_const(x, y) { + if (y === 0) { + return undefined; + } + if (x === kValue.i32.negative.min && y === -1) { + return undefined; + } + return x % y; +} + +export const d = makeCaseCache('binary/i32_arithmetic', { + addition: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_add); + }, + subtraction: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_subtract); + }, + multiplication: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_multiply); + }, + division_non_const: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_divide_non_const); + }, + division_const: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_divide_const); + }, + remainder_non_const: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_remainder_non_const); + }, + remainder_const: () => { + return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_remainder_const); + }, + addition_scalar_vector2: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(2), i32_add); + }, + addition_scalar_vector3: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(3), i32_add); + }, + addition_scalar_vector4: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(4), i32_add); + }, + addition_vector2_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(2), sparseI32Range(), i32_add); + }, + addition_vector3_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(3), sparseI32Range(), i32_add); + }, + addition_vector4_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(4), sparseI32Range(), i32_add); + }, + subtraction_scalar_vector2: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(2), i32_subtract); + }, + subtraction_scalar_vector3: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(3), i32_subtract); + }, + subtraction_scalar_vector4: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(4), i32_subtract); + }, + subtraction_vector2_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(2), sparseI32Range(), i32_subtract); + }, + subtraction_vector3_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(3), sparseI32Range(), i32_subtract); + }, + subtraction_vector4_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(4), sparseI32Range(), i32_subtract); + }, + multiplication_scalar_vector2: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(2), i32_multiply); + }, + multiplication_scalar_vector3: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(3), i32_multiply); + }, + multiplication_scalar_vector4: () => { + return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(4), i32_multiply); + }, + multiplication_vector2_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(2), sparseI32Range(), i32_multiply); + }, + multiplication_vector3_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(3), sparseI32Range(), i32_multiply); + }, + multiplication_vector4_scalar: () => { + return generateVectorI32BinaryToVectorCases(vectorI32Range(4), sparseI32Range(), i32_multiply); + }, + division_scalar_vector2_non_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(2), + i32_divide_non_const + ); + }, + division_scalar_vector3_non_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(3), + i32_divide_non_const + ); + }, + division_scalar_vector4_non_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(4), + i32_divide_non_const + ); + }, + division_vector2_scalar_non_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(2), + sparseI32Range(), + i32_divide_non_const + ); + }, + division_vector3_scalar_non_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(3), + sparseI32Range(), + i32_divide_non_const + ); + }, + division_vector4_scalar_non_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(4), + sparseI32Range(), + i32_divide_non_const + ); + }, + division_scalar_vector2_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(2), + i32_divide_const + ); + }, + division_scalar_vector3_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(3), + i32_divide_const + ); + }, + division_scalar_vector4_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(4), + i32_divide_const + ); + }, + division_vector2_scalar_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(2), + sparseI32Range(), + i32_divide_const + ); + }, + division_vector3_scalar_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(3), + sparseI32Range(), + i32_divide_const + ); + }, + division_vector4_scalar_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(4), + sparseI32Range(), + i32_divide_const + ); + }, + remainder_scalar_vector2_non_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(2), + i32_remainder_non_const + ); + }, + remainder_scalar_vector3_non_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(3), + i32_remainder_non_const + ); + }, + remainder_scalar_vector4_non_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(4), + i32_remainder_non_const + ); + }, + remainder_vector2_scalar_non_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(2), + sparseI32Range(), + i32_remainder_non_const + ); + }, + remainder_vector3_scalar_non_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(3), + sparseI32Range(), + i32_remainder_non_const + ); + }, + remainder_vector4_scalar_non_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(4), + sparseI32Range(), + i32_remainder_non_const + ); + }, + remainder_scalar_vector2_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(2), + i32_remainder_const + ); + }, + remainder_scalar_vector3_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(3), + i32_remainder_const + ); + }, + remainder_scalar_vector4_const: () => { + return generateI32VectorBinaryToVectorCases( + sparseI32Range(), + vectorI32Range(4), + i32_remainder_const + ); + }, + remainder_vector2_scalar_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(2), + sparseI32Range(), + i32_remainder_const + ); + }, + remainder_vector3_scalar_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(3), + sparseI32Range(), + i32_remainder_const + ); + }, + remainder_vector4_scalar_const: () => { + return generateVectorI32BinaryToVectorCases( + vectorI32Range(4), + sparseI32Range(), + i32_remainder_const + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.spec.js index 2c92f729d43..c2abea5b26a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_arithmetic.spec.js @@ -1,693 +1,432 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the i32 arithmetic binary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { kValue } from '../../../../util/constants.js'; import { TypeI32, TypeVec } from '../../../../util/conversion.js'; -import { sparseI32Range, vectorI32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; -import { - allInputSources, - generateBinaryToI32Cases, - generateI32VectorBinaryToVectorCases, - generateVectorI32BinaryToVectorCases, - run, -} from '../expression.js'; +import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -function i32_add(x, y) { - return x + y; -} - -function i32_subtract(x, y) { - return x - y; -} - -function i32_multiply(x, y) { - return Math.imul(x, y); -} - -function i32_divide_non_const(x, y) { - if (y === 0) { - return x; - } - if (x === kValue.i32.negative.min && y === -1) { - return x; - } - return x / y; -} - -function i32_divide_const(x, y) { - if (y === 0) { - return undefined; - } - if (x === kValue.i32.negative.min && y === -1) { - return undefined; - } - return x / y; -} - -function i32_remainder_non_const(x, y) { - if (y === 0) { - return 0; - } - if (x === kValue.i32.negative.min && y === -1) { - return 0; - } - return x % y; -} - -function i32_remainder_const(x, y) { - if (y === 0) { - return undefined; - } - if (x === kValue.i32.negative.min && y === -1) { - return undefined; - } - return x % y; -} +import { d } from './i32_arithmetic.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('binary/i32_arithmetic', { - addition: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_add); - }, - subtraction: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_subtract); - }, - multiplication: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_multiply); - }, - division_non_const: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_divide_non_const); - }, - division_const: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_divide_const); - }, - remainder_non_const: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_remainder_non_const); - }, - remainder_const: () => { - return generateBinaryToI32Cases(sparseI32Range(), sparseI32Range(), i32_remainder_const); - }, - addition_scalar_vector2: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(2), i32_add); - }, - addition_scalar_vector3: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(3), i32_add); - }, - addition_scalar_vector4: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(4), i32_add); - }, - addition_vector2_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(2), sparseI32Range(), i32_add); - }, - addition_vector3_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(3), sparseI32Range(), i32_add); - }, - addition_vector4_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(4), sparseI32Range(), i32_add); - }, - subtraction_scalar_vector2: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(2), i32_subtract); - }, - subtraction_scalar_vector3: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(3), i32_subtract); - }, - subtraction_scalar_vector4: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(4), i32_subtract); - }, - subtraction_vector2_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(2), sparseI32Range(), i32_subtract); - }, - subtraction_vector3_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(3), sparseI32Range(), i32_subtract); - }, - subtraction_vector4_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(4), sparseI32Range(), i32_subtract); - }, - multiplication_scalar_vector2: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(2), i32_multiply); - }, - multiplication_scalar_vector3: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(3), i32_multiply); - }, - multiplication_scalar_vector4: () => { - return generateI32VectorBinaryToVectorCases(sparseI32Range(), vectorI32Range(4), i32_multiply); - }, - multiplication_vector2_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(2), sparseI32Range(), i32_multiply); - }, - multiplication_vector3_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(3), sparseI32Range(), i32_multiply); - }, - multiplication_vector4_scalar: () => { - return generateVectorI32BinaryToVectorCases(vectorI32Range(4), sparseI32Range(), i32_multiply); - }, - division_scalar_vector2_non_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(2), - i32_divide_non_const - ); - }, - division_scalar_vector3_non_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(3), - i32_divide_non_const - ); - }, - division_scalar_vector4_non_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(4), - i32_divide_non_const - ); - }, - division_vector2_scalar_non_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(2), - sparseI32Range(), - i32_divide_non_const - ); - }, - division_vector3_scalar_non_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(3), - sparseI32Range(), - i32_divide_non_const - ); - }, - division_vector4_scalar_non_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(4), - sparseI32Range(), - i32_divide_non_const - ); - }, - division_scalar_vector2_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(2), - i32_divide_const - ); - }, - division_scalar_vector3_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(3), - i32_divide_const - ); - }, - division_scalar_vector4_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(4), - i32_divide_const - ); - }, - division_vector2_scalar_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(2), - sparseI32Range(), - i32_divide_const - ); - }, - division_vector3_scalar_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(3), - sparseI32Range(), - i32_divide_const - ); - }, - division_vector4_scalar_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(4), - sparseI32Range(), - i32_divide_const - ); - }, - remainder_scalar_vector2_non_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(2), - i32_remainder_non_const - ); - }, - remainder_scalar_vector3_non_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(3), - i32_remainder_non_const - ); - }, - remainder_scalar_vector4_non_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(4), - i32_remainder_non_const - ); - }, - remainder_vector2_scalar_non_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(2), - sparseI32Range(), - i32_remainder_non_const - ); - }, - remainder_vector3_scalar_non_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(3), - sparseI32Range(), - i32_remainder_non_const - ); - }, - remainder_vector4_scalar_non_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(4), - sparseI32Range(), - i32_remainder_non_const - ); - }, - remainder_scalar_vector2_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(2), - i32_remainder_const - ); - }, - remainder_scalar_vector3_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(3), - i32_remainder_const - ); - }, - remainder_scalar_vector4_const: () => { - return generateI32VectorBinaryToVectorCases( - sparseI32Range(), - vectorI32Range(4), - i32_remainder_const - ); - }, - remainder_vector2_scalar_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(2), - sparseI32Range(), - i32_remainder_const - ); - }, - remainder_vector3_scalar_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(3), - sparseI32Range(), - i32_remainder_const - ); - }, - remainder_vector4_scalar_const: () => { - return generateVectorI32BinaryToVectorCases( - vectorI32Range(4), - sparseI32Range(), - i32_remainder_const - ); - }, +g.test('addition'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +Expression: x + y +` +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('addition'); + await run(t, binary('+'), [TypeI32, TypeI32], TypeI32, t.params, cases); }); -g.test('addition') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` -Expression: x + y -` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('addition'); - await run(t, binary('+'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('addition_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('addition_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x += y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('addition'); - await run(t, compoundBinary('+='), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('addition'); + await run(t, compoundBinary('+='), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); -g.test('subtraction') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('subtraction'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x - y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('subtraction'); - await run(t, binary('-'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('subtraction'); + await run(t, binary('-'), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); -g.test('subtraction_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('subtraction_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x -= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('subtraction'); - await run(t, compoundBinary('-='), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('subtraction'); + await run(t, compoundBinary('-='), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); -g.test('multiplication') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('multiplication'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x * y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('multiplication'); - await run(t, binary('*'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('multiplication'); + await run(t, binary('*'), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); -g.test('multiplication_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('multiplication_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x *= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('multiplication'); - await run(t, compoundBinary('*='), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('multiplication'); + await run(t, compoundBinary('*='), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); -g.test('division') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('division'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x / y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' + ); + await run(t, binary('/'), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); - await run(t, binary('/'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('division_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('division_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x /= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' + ); + await run(t, compoundBinary('/='), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); - await run(t, compoundBinary('/='), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('remainder') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('remainder'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x % y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' + ); + await run(t, binary('%'), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); - await run(t, binary('%'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('remainder_compound') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('remainder_compound'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: x %= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' + ); + await run(t, compoundBinary('%='), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); - await run(t, compoundBinary('%='), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('addition_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x + y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`addition_scalar_vector${vec_size}`); - await run(t, binary('+'), [TypeI32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`addition_scalar_vector${vec_size}`); + await run(t, binary('+'), [TypeI32, vec_type], vec_type, t.params, cases); +}); -g.test('addition_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x + y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`addition_vector${vec_size}_scalar`); - await run(t, binary('+'), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`addition_vector${vec_size}_scalar`); + await run(t, binary('+'), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('addition_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x += y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`addition_vector${vec_size}_scalar`); - await run(t, compoundBinary('+='), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`addition_vector${vec_size}_scalar`); + await run(t, compoundBinary('+='), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('subtraction_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x - y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`subtraction_scalar_vector${vec_size}`); - await run(t, binary('-'), [TypeI32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`subtraction_scalar_vector${vec_size}`); + await run(t, binary('-'), [TypeI32, vec_type], vec_type, t.params, cases); +}); -g.test('subtraction_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x - y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`subtraction_vector${vec_size}_scalar`); - await run(t, binary('-'), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`subtraction_vector${vec_size}_scalar`); + await run(t, binary('-'), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('subtraction_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x -= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`subtraction_vector${vec_size}_scalar`); - await run(t, compoundBinary('-='), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`subtraction_vector${vec_size}_scalar`); + await run(t, compoundBinary('-='), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('multiplication_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x * y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`multiplication_scalar_vector${vec_size}`); - await run(t, binary('*'), [TypeI32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`multiplication_scalar_vector${vec_size}`); + await run(t, binary('*'), [TypeI32, vec_type], vec_type, t.params, cases); +}); -g.test('multiplication_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x * y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`multiplication_vector${vec_size}_scalar`); - await run(t, binary('*'), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`multiplication_vector${vec_size}_scalar`); + await run(t, binary('*'), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('multiplication_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x *= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const cases = await d.get(`multiplication_vector${vec_size}_scalar`); - await run(t, compoundBinary('*='), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const cases = await d.get(`multiplication_vector${vec_size}_scalar`); + await run(t, compoundBinary('*='), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('division_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x / y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeI32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`division_scalar_vector${vec_size}_${source}`); - await run(t, binary('/'), [TypeI32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeI32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`division_scalar_vector${vec_size}_${source}`); + await run(t, binary('/'), [TypeI32, vec_type], vec_type, t.params, cases); +}); -g.test('division_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x / y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); - await run(t, binary('/'), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); + await run(t, binary('/'), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('division_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x /= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); - await run(t, compoundBinary('/='), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); + await run(t, compoundBinary('/='), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('remainder_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x % y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeI32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`remainder_scalar_vector${vec_size}_${source}`); - await run(t, binary('%'), [TypeI32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeI32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`remainder_scalar_vector${vec_size}_${source}`); + await run(t, binary('%'), [TypeI32, vec_type], vec_type, t.params, cases); +}); -g.test('remainder_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x % y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); - await run(t, binary('%'), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); + await run(t, binary('%'), [vec_type, TypeI32], vec_type, t.params, cases); +}); -g.test('remainder_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x %= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeI32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); - await run(t, compoundBinary('%='), [vec_type, TypeI32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeI32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); + await run(t, compoundBinary('%='), [vec_type, TypeI32], vec_type, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.cache.js new file mode 100644 index 00000000000..4576051d1dd --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { bool, i32 } from '../../../../util/conversion.js';import { vectorI32Range } from '../../../../util/math.js'; +import { makeCaseCache } from '../case_cache.js'; + +/** + * @returns a test case for the provided left hand & right hand values and + * expected boolean result. + */ +function makeCase(lhs, rhs, expected_answer) { + return { input: [i32(lhs), i32(rhs)], expected: bool(expected_answer) }; +} + +export const d = makeCaseCache('binary/i32_comparison', { + equals: () => vectorI32Range(2).map((v) => makeCase(v[0], v[1], v[0] === v[1])), + not_equals: () => vectorI32Range(2).map((v) => makeCase(v[0], v[1], v[0] !== v[1])), + less_than: () => vectorI32Range(2).map((v) => makeCase(v[0], v[1], v[0] < v[1])), + less_equal: () => vectorI32Range(2).map((v) => makeCase(v[0], v[1], v[0] <= v[1])), + greater_than: () => vectorI32Range(2).map((v) => makeCase(v[0], v[1], v[0] > v[1])), + greater_equal: () => vectorI32Range(2).map((v) => makeCase(v[0], v[1], v[0] >= v[1])) +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.spec.js index d02a96b0730..4c9d7d66429 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/i32_comparison.spec.js @@ -1,110 +1,103 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the i32 comparison expressions -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { i32, bool, TypeBool, TypeI32 } from '../../../../util/conversion.js'; -import { vectorI32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeI32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; import { binary } from './binary.js'; +import { d } from './i32_comparison.cache.js'; export const g = makeTestGroup(GPUTest); -/** - * @returns a test case for the provided left hand & right hand values and - * expected boolean result. - */ -function makeCase(lhs, rhs, expected_answer) { - return { input: [i32(lhs), i32(rhs)], expected: bool(expected_answer) }; -} - -export const d = makeCaseCache('binary/i32_comparison', { - equals: () => vectorI32Range(2).map(v => makeCase(v[0], v[1], v[0] === v[1])), - not_equals: () => vectorI32Range(2).map(v => makeCase(v[0], v[1], v[0] !== v[1])), - less_than: () => vectorI32Range(2).map(v => makeCase(v[0], v[1], v[0] < v[1])), - less_equal: () => vectorI32Range(2).map(v => makeCase(v[0], v[1], v[0] <= v[1])), - greater_than: () => vectorI32Range(2).map(v => makeCase(v[0], v[1], v[0] > v[1])), - greater_equal: () => vectorI32Range(2).map(v => makeCase(v[0], v[1], v[0] >= v[1])), -}); - -g.test('equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x == y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('equals'); - await run(t, binary('=='), [TypeI32, TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('equals'); + await run(t, binary('=='), [TypeI32, TypeI32], TypeBool, t.params, cases); +}); -g.test('not_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('not_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x != y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('not_equals'); - await run(t, binary('!='), [TypeI32, TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('not_equals'); + await run(t, binary('!='), [TypeI32, TypeI32], TypeBool, t.params, cases); +}); -g.test('less_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x < y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('less_than'); - await run(t, binary('<'), [TypeI32, TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('less_than'); + await run(t, binary('<'), [TypeI32, TypeI32], TypeBool, t.params, cases); +}); -g.test('less_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x <= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('less_equal'); - await run(t, binary('<='), [TypeI32, TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('less_equal'); + await run(t, binary('<='), [TypeI32, TypeI32], TypeBool, t.params, cases); +}); -g.test('greater_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x > y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('greater_than'); - await run(t, binary('>'), [TypeI32, TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('greater_than'); + await run(t, binary('>'), [TypeI32, TypeI32], TypeBool, t.params, cases); +}); -g.test('greater_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x >= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('greater_equal'); - await run(t, binary('>='), [TypeI32, TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('greater_equal'); + await run(t, binary('>='), [TypeI32, TypeI32], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.cache.js new file mode 100644 index 00000000000..cf7ffcf99ed --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.cache.js @@ -0,0 +1,293 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { sparseU32Range, vectorU32Range } from '../../../../util/math.js';import { generateBinaryToU32Cases, +generateU32VectorBinaryToVectorCases, +generateVectorU32BinaryToVectorCases } from +'../case.js'; +import { makeCaseCache } from '../case_cache.js'; + +function u32_add(x, y) { + return x + y; +} + +function u32_subtract(x, y) { + return x - y; +} + +function u32_multiply(x, y) { + return Math.imul(x, y); +} + +function u32_divide_non_const(x, y) { + if (y === 0) { + return x; + } + return x / y; +} + +function u32_divide_const(x, y) { + if (y === 0) { + return undefined; + } + return x / y; +} + +function u32_remainder_non_const(x, y) { + if (y === 0) { + return 0; + } + return x % y; +} + +function u32_remainder_const(x, y) { + if (y === 0) { + return undefined; + } + return x % y; +} + +export const d = makeCaseCache('binary/u32_arithmetic', { + addition: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_add); + }, + subtraction: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_subtract); + }, + multiplication: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_multiply); + }, + division_non_const: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_divide_non_const); + }, + division_const: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_divide_const); + }, + remainder_non_const: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_remainder_non_const); + }, + remainder_const: () => { + return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_remainder_const); + }, + addition_scalar_vector2: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_add); + }, + addition_scalar_vector3: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_add); + }, + addition_scalar_vector4: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_add); + }, + addition_vector2_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_add); + }, + addition_vector3_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_add); + }, + addition_vector4_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_add); + }, + subtraction_scalar_vector2: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_subtract); + }, + subtraction_scalar_vector3: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_subtract); + }, + subtraction_scalar_vector4: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_subtract); + }, + subtraction_vector2_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_subtract); + }, + subtraction_vector3_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_subtract); + }, + subtraction_vector4_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_subtract); + }, + multiplication_scalar_vector2: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_multiply); + }, + multiplication_scalar_vector3: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_multiply); + }, + multiplication_scalar_vector4: () => { + return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_multiply); + }, + multiplication_vector2_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_multiply); + }, + multiplication_vector3_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_multiply); + }, + multiplication_vector4_scalar: () => { + return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_multiply); + }, + division_scalar_vector2_non_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(2), + u32_divide_non_const + ); + }, + division_scalar_vector3_non_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(3), + u32_divide_non_const + ); + }, + division_scalar_vector4_non_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(4), + u32_divide_non_const + ); + }, + division_vector2_scalar_non_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(2), + sparseU32Range(), + u32_divide_non_const + ); + }, + division_vector3_scalar_non_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(3), + sparseU32Range(), + u32_divide_non_const + ); + }, + division_vector4_scalar_non_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(4), + sparseU32Range(), + u32_divide_non_const + ); + }, + division_scalar_vector2_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(2), + u32_divide_const + ); + }, + division_scalar_vector3_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(3), + u32_divide_const + ); + }, + division_scalar_vector4_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(4), + u32_divide_const + ); + }, + division_vector2_scalar_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(2), + sparseU32Range(), + u32_divide_const + ); + }, + division_vector3_scalar_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(3), + sparseU32Range(), + u32_divide_const + ); + }, + division_vector4_scalar_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(4), + sparseU32Range(), + u32_divide_const + ); + }, + remainder_scalar_vector2_non_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(2), + u32_remainder_non_const + ); + }, + remainder_scalar_vector3_non_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(3), + u32_remainder_non_const + ); + }, + remainder_scalar_vector4_non_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(4), + u32_remainder_non_const + ); + }, + remainder_vector2_scalar_non_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(2), + sparseU32Range(), + u32_remainder_non_const + ); + }, + remainder_vector3_scalar_non_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(3), + sparseU32Range(), + u32_remainder_non_const + ); + }, + remainder_vector4_scalar_non_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(4), + sparseU32Range(), + u32_remainder_non_const + ); + }, + remainder_scalar_vector2_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(2), + u32_remainder_const + ); + }, + remainder_scalar_vector3_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(3), + u32_remainder_const + ); + }, + remainder_scalar_vector4_const: () => { + return generateU32VectorBinaryToVectorCases( + sparseU32Range(), + vectorU32Range(4), + u32_remainder_const + ); + }, + remainder_vector2_scalar_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(2), + sparseU32Range(), + u32_remainder_const + ); + }, + remainder_vector3_scalar_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(3), + sparseU32Range(), + u32_remainder_const + ); + }, + remainder_vector4_scalar_const: () => { + return generateVectorU32BinaryToVectorCases( + vectorU32Range(4), + sparseU32Range(), + u32_remainder_const + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.spec.js index 16a7fd3d390..ef1c480e5c4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_arithmetic.spec.js @@ -1,680 +1,432 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the u32 arithmetic binary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeU32, TypeVec } from '../../../../util/conversion.js'; -import { sparseU32Range, vectorU32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; -import { - allInputSources, - generateBinaryToU32Cases, - generateU32VectorBinaryToVectorCases, - generateVectorU32BinaryToVectorCases, - run, -} from '../expression.js'; +import { allInputSources, run } from '../expression.js'; import { binary, compoundBinary } from './binary.js'; - -function u32_add(x, y) { - return x + y; -} - -function u32_subtract(x, y) { - return x - y; -} - -function u32_multiply(x, y) { - return Math.imul(x, y); -} - -function u32_divide_non_const(x, y) { - if (y === 0) { - return x; - } - return x / y; -} - -function u32_divide_const(x, y) { - if (y === 0) { - return undefined; - } - return x / y; -} - -function u32_remainder_non_const(x, y) { - if (y === 0) { - return 0; - } - return x % y; -} - -function u32_remainder_const(x, y) { - if (y === 0) { - return undefined; - } - return x % y; -} +import { d } from './u32_arithmetic.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('binary/u32_arithmetic', { - addition: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_add); - }, - subtraction: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_subtract); - }, - multiplication: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_multiply); - }, - division_non_const: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_divide_non_const); - }, - division_const: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_divide_const); - }, - remainder_non_const: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_remainder_non_const); - }, - remainder_const: () => { - return generateBinaryToU32Cases(sparseU32Range(), sparseU32Range(), u32_remainder_const); - }, - addition_scalar_vector2: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_add); - }, - addition_scalar_vector3: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_add); - }, - addition_scalar_vector4: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_add); - }, - addition_vector2_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_add); - }, - addition_vector3_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_add); - }, - addition_vector4_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_add); - }, - subtraction_scalar_vector2: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_subtract); - }, - subtraction_scalar_vector3: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_subtract); - }, - subtraction_scalar_vector4: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_subtract); - }, - subtraction_vector2_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_subtract); - }, - subtraction_vector3_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_subtract); - }, - subtraction_vector4_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_subtract); - }, - multiplication_scalar_vector2: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(2), u32_multiply); - }, - multiplication_scalar_vector3: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(3), u32_multiply); - }, - multiplication_scalar_vector4: () => { - return generateU32VectorBinaryToVectorCases(sparseU32Range(), vectorU32Range(4), u32_multiply); - }, - multiplication_vector2_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(2), sparseU32Range(), u32_multiply); - }, - multiplication_vector3_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(3), sparseU32Range(), u32_multiply); - }, - multiplication_vector4_scalar: () => { - return generateVectorU32BinaryToVectorCases(vectorU32Range(4), sparseU32Range(), u32_multiply); - }, - division_scalar_vector2_non_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(2), - u32_divide_non_const - ); - }, - division_scalar_vector3_non_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(3), - u32_divide_non_const - ); - }, - division_scalar_vector4_non_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(4), - u32_divide_non_const - ); - }, - division_vector2_scalar_non_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(2), - sparseU32Range(), - u32_divide_non_const - ); - }, - division_vector3_scalar_non_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(3), - sparseU32Range(), - u32_divide_non_const - ); - }, - division_vector4_scalar_non_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(4), - sparseU32Range(), - u32_divide_non_const - ); - }, - division_scalar_vector2_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(2), - u32_divide_const - ); - }, - division_scalar_vector3_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(3), - u32_divide_const - ); - }, - division_scalar_vector4_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(4), - u32_divide_const - ); - }, - division_vector2_scalar_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(2), - sparseU32Range(), - u32_divide_const - ); - }, - division_vector3_scalar_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(3), - sparseU32Range(), - u32_divide_const - ); - }, - division_vector4_scalar_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(4), - sparseU32Range(), - u32_divide_const - ); - }, - remainder_scalar_vector2_non_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(2), - u32_remainder_non_const - ); - }, - remainder_scalar_vector3_non_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(3), - u32_remainder_non_const - ); - }, - remainder_scalar_vector4_non_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(4), - u32_remainder_non_const - ); - }, - remainder_vector2_scalar_non_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(2), - sparseU32Range(), - u32_remainder_non_const - ); - }, - remainder_vector3_scalar_non_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(3), - sparseU32Range(), - u32_remainder_non_const - ); - }, - remainder_vector4_scalar_non_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(4), - sparseU32Range(), - u32_remainder_non_const - ); - }, - remainder_scalar_vector2_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(2), - u32_remainder_const - ); - }, - remainder_scalar_vector3_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(3), - u32_remainder_const - ); - }, - remainder_scalar_vector4_const: () => { - return generateU32VectorBinaryToVectorCases( - sparseU32Range(), - vectorU32Range(4), - u32_remainder_const - ); - }, - remainder_vector2_scalar_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(2), - sparseU32Range(), - u32_remainder_const - ); - }, - remainder_vector3_scalar_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(3), - sparseU32Range(), - u32_remainder_const - ); - }, - remainder_vector4_scalar_const: () => { - return generateVectorU32BinaryToVectorCases( - vectorU32Range(4), - sparseU32Range(), - u32_remainder_const - ); - }, +g.test('addition'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` +Expression: x + y +` +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('addition'); + await run(t, binary('+'), [TypeU32, TypeU32], TypeU32, t.params, cases); }); -g.test('addition') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` -Expression: x + y -` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('addition'); - await run(t, binary('+'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); - -g.test('addition_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x += y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('addition'); - await run(t, compoundBinary('+='), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('addition'); + await run(t, compoundBinary('+='), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); -g.test('subtraction') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x - y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('subtraction'); - await run(t, binary('-'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('subtraction'); + await run(t, binary('-'), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); -g.test('subtraction_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x -= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('subtraction'); - await run(t, compoundBinary('-='), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('subtraction'); + await run(t, compoundBinary('-='), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); -g.test('multiplication') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x * y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('multiplication'); - await run(t, binary('*'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('multiplication'); + await run(t, binary('*'), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); -g.test('multiplication_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x *= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('multiplication'); - await run(t, compoundBinary('*='), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('multiplication'); + await run(t, compoundBinary('*='), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); -g.test('division') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x / y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' + ); + await run(t, binary('/'), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); - await run(t, binary('/'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); - -g.test('division_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x /= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'division_const' : 'division_non_const' + ); + await run(t, compoundBinary('/='), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); - await run(t, compoundBinary('/='), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); - -g.test('remainder') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x % y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' + ); + await run(t, binary('%'), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); - await run(t, binary('%'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); - -g.test('remainder_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x %= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' - ); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'remainder_const' : 'remainder_non_const' + ); + await run(t, compoundBinary('%='), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); - await run(t, compoundBinary('%='), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); - -g.test('addition_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x + y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`addition_scalar_vector${vec_size}`); - await run(t, binary('+'), [TypeU32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`addition_scalar_vector${vec_size}`); + await run(t, binary('+'), [TypeU32, vec_type], vec_type, t.params, cases); +}); -g.test('addition_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x + y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`addition_vector${vec_size}_scalar`); - await run(t, binary('+'), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`addition_vector${vec_size}_scalar`); + await run(t, binary('+'), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('addition_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('addition_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x += y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`addition_vector${vec_size}_scalar`); - await run(t, compoundBinary('+='), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`addition_vector${vec_size}_scalar`); + await run(t, compoundBinary('+='), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('subtraction_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x - y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`subtraction_scalar_vector${vec_size}`); - await run(t, binary('-'), [TypeU32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`subtraction_scalar_vector${vec_size}`); + await run(t, binary('-'), [TypeU32, vec_type], vec_type, t.params, cases); +}); -g.test('subtraction_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x - y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`subtraction_vector${vec_size}_scalar`); - await run(t, binary('-'), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`subtraction_vector${vec_size}_scalar`); + await run(t, binary('-'), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('subtraction_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('subtraction_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x -= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`subtraction_vector${vec_size}_scalar`); - await run(t, compoundBinary('-='), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`subtraction_vector${vec_size}_scalar`); + await run(t, compoundBinary('-='), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('multiplication_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x * y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`multiplication_scalar_vector${vec_size}`); - await run(t, binary('*'), [TypeU32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`multiplication_scalar_vector${vec_size}`); + await run(t, binary('*'), [TypeU32, vec_type], vec_type, t.params, cases); +}); -g.test('multiplication_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x * y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`multiplication_vector${vec_size}_scalar`); - await run(t, binary('*'), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`multiplication_vector${vec_size}_scalar`); + await run(t, binary('*'), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('multiplication_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('multiplication_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x *= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const cases = await d.get(`multiplication_vector${vec_size}_scalar`); - await run(t, compoundBinary('*='), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const cases = await d.get(`multiplication_vector${vec_size}_scalar`); + await run(t, compoundBinary('*='), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('division_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x / y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeU32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`division_scalar_vector${vec_size}_${source}`); - await run(t, binary('/'), [TypeU32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeU32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`division_scalar_vector${vec_size}_${source}`); + await run(t, binary('/'), [TypeU32, vec_type], vec_type, t.params, cases); +}); -g.test('division_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x / y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); - await run(t, binary('/'), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); + await run(t, binary('/'), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('division_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('division_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x /= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); - await run(t, compoundBinary('/='), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`division_vector${vec_size}_scalar_${source}`); + await run(t, compoundBinary('/='), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('remainder_scalar_vector') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_scalar_vector'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x % y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_rhs; - const vec_type = TypeVec(vec_size, TypeU32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`remainder_scalar_vector${vec_size}_${source}`); - await run(t, binary('%'), [TypeU32, vec_type], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_rhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_rhs; + const vec_type = TypeVec(vec_size, TypeU32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`remainder_scalar_vector${vec_size}_${source}`); + await run(t, binary('%'), [TypeU32, vec_type], vec_type, t.params, cases); +}); -g.test('remainder_vector_scalar') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_vector_scalar'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x % y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); - await run(t, binary('%'), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); + await run(t, binary('%'), [vec_type, TypeU32], vec_type, t.params, cases); +}); -g.test('remainder_vector_scalar_compound') - .specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr') - .desc( - ` +g.test('remainder_vector_scalar_compound'). +specURL('https://www.w3.org/TR/WGSL/#arithmetic-expr'). +desc( + ` Expression: x %= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4])) - .fn(async t => { - const vec_size = t.params.vectorize_lhs; - const vec_type = TypeVec(vec_size, TypeU32); - const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; - const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); - await run(t, compoundBinary('%='), [vec_type, TypeU32], vec_type, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize_lhs', [2, 3, 4]) +). +fn(async (t) => { + const vec_size = t.params.vectorize_lhs; + const vec_type = TypeVec(vec_size, TypeU32); + const source = t.params.inputSource === 'const' ? 'const' : 'non_const'; + const cases = await d.get(`remainder_vector${vec_size}_scalar_${source}`); + await run(t, compoundBinary('%='), [vec_type, TypeU32], vec_type, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.cache.js new file mode 100644 index 00000000000..cd4e4c067ee --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { bool, u32 } from '../../../../util/conversion.js';import { vectorU32Range } from '../../../../util/math.js'; +import { makeCaseCache } from '../case_cache.js'; + +/** + * @returns a test case for the provided left hand & right hand values and + * expected boolean result. + */ +function makeCase(lhs, rhs, expected_answer) { + return { input: [u32(lhs), u32(rhs)], expected: bool(expected_answer) }; +} + +export const d = makeCaseCache('binary/u32_comparison', { + equals: () => vectorU32Range(2).map((v) => makeCase(v[0], v[1], v[0] === v[1])), + not_equals: () => vectorU32Range(2).map((v) => makeCase(v[0], v[1], v[0] !== v[1])), + less_than: () => vectorU32Range(2).map((v) => makeCase(v[0], v[1], v[0] < v[1])), + less_equal: () => vectorU32Range(2).map((v) => makeCase(v[0], v[1], v[0] <= v[1])), + greater_than: () => vectorU32Range(2).map((v) => makeCase(v[0], v[1], v[0] > v[1])), + greater_equal: () => vectorU32Range(2).map((v) => makeCase(v[0], v[1], v[0] >= v[1])) +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.spec.js index 47a67b18e94..917371129e8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/binary/u32_comparison.spec.js @@ -1,110 +1,103 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the u32 comparison expressions -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { u32, bool, TypeBool, TypeU32 } from '../../../../util/conversion.js'; -import { vectorU32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeU32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; import { binary } from './binary.js'; +import { d } from './u32_comparison.cache.js'; export const g = makeTestGroup(GPUTest); -/** - * @returns a test case for the provided left hand & right hand values and - * expected boolean result. - */ -function makeCase(lhs, rhs, expected_answer) { - return { input: [u32(lhs), u32(rhs)], expected: bool(expected_answer) }; -} - -export const d = makeCaseCache('binary/u32_comparison', { - equals: () => vectorU32Range(2).map(v => makeCase(v[0], v[1], v[0] === v[1])), - not_equals: () => vectorU32Range(2).map(v => makeCase(v[0], v[1], v[0] !== v[1])), - less_than: () => vectorU32Range(2).map(v => makeCase(v[0], v[1], v[0] < v[1])), - less_equal: () => vectorU32Range(2).map(v => makeCase(v[0], v[1], v[0] <= v[1])), - greater_than: () => vectorU32Range(2).map(v => makeCase(v[0], v[1], v[0] > v[1])), - greater_equal: () => vectorU32Range(2).map(v => makeCase(v[0], v[1], v[0] >= v[1])), -}); - -g.test('equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x == y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('equals'); - await run(t, binary('=='), [TypeU32, TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('equals'); + await run(t, binary('=='), [TypeU32, TypeU32], TypeBool, t.params, cases); +}); -g.test('not_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('not_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x != y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('not_equals'); - await run(t, binary('!='), [TypeU32, TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('not_equals'); + await run(t, binary('!='), [TypeU32, TypeU32], TypeBool, t.params, cases); +}); -g.test('less_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x < y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('less_than'); - await run(t, binary('<'), [TypeU32, TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('less_than'); + await run(t, binary('<'), [TypeU32, TypeU32], TypeBool, t.params, cases); +}); -g.test('less_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('less_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x <= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('less_equal'); - await run(t, binary('<='), [TypeU32, TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('less_equal'); + await run(t, binary('<='), [TypeU32, TypeU32], TypeBool, t.params, cases); +}); -g.test('greater_than') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_than'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x > y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('greater_than'); - await run(t, binary('>'), [TypeU32, TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('greater_than'); + await run(t, binary('>'), [TypeU32, TypeU32], TypeBool, t.params, cases); +}); -g.test('greater_equals') - .specURL('https://www.w3.org/TR/WGSL/#comparison-expr') - .desc( - ` +g.test('greater_equals'). +specURL('https://www.w3.org/TR/WGSL/#comparison-expr'). +desc( + ` Expression: x >= y ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('greater_equal'); - await run(t, binary('>='), [TypeU32, TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('greater_equal'); + await run(t, binary('>='), [TypeU32, TypeU32], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.cache.js new file mode 100644 index 00000000000..8e2e0ea58f5 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.cache.js @@ -0,0 +1,17 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].absInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('abs', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.spec.js index f342db70547..6069839777f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/abs.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'abs' builtin function S is AbstractInt, i32, or u32 @@ -15,8 +15,7 @@ T is S or vecN @const fn abs(e: T ) -> T Returns the absolute value of e (e.g. e with a positive sign bit). Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { kBit } from '../../../../../util/constants.js'; import { @@ -26,160 +25,154 @@ import { TypeI32, TypeU32, u32Bits, - TypeAbstractFloat, -} from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, fullF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; + TypeAbstractFloat } from +'../../../../../util/conversion.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; +import { d } from './abs.cache.js'; import { abstractBuiltin, builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('abs', { - f32: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.absInterval); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.absInterval); - }, - abstract: () => { - return FP.abstract.generateScalarToIntervalCases( - fullF64Range(), - 'unfiltered', - FP.abstract.absInterval - ); - }, +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`abstract int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`unsigned int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + await run(t, builtin('abs'), [TypeU32], TypeU32, t.params, [ + // Min and Max u32 + { input: u32Bits(kBit.u32.min), expected: u32Bits(kBit.u32.min) }, + { input: u32Bits(kBit.u32.max), expected: u32Bits(kBit.u32.max) }, + // Powers of 2: -2^i: 0 =< i =< 31 + { input: u32Bits(kBit.powTwo.to0), expected: u32Bits(kBit.powTwo.to0) }, + { input: u32Bits(kBit.powTwo.to1), expected: u32Bits(kBit.powTwo.to1) }, + { input: u32Bits(kBit.powTwo.to2), expected: u32Bits(kBit.powTwo.to2) }, + { input: u32Bits(kBit.powTwo.to3), expected: u32Bits(kBit.powTwo.to3) }, + { input: u32Bits(kBit.powTwo.to4), expected: u32Bits(kBit.powTwo.to4) }, + { input: u32Bits(kBit.powTwo.to5), expected: u32Bits(kBit.powTwo.to5) }, + { input: u32Bits(kBit.powTwo.to6), expected: u32Bits(kBit.powTwo.to6) }, + { input: u32Bits(kBit.powTwo.to7), expected: u32Bits(kBit.powTwo.to7) }, + { input: u32Bits(kBit.powTwo.to8), expected: u32Bits(kBit.powTwo.to8) }, + { input: u32Bits(kBit.powTwo.to9), expected: u32Bits(kBit.powTwo.to9) }, + { input: u32Bits(kBit.powTwo.to10), expected: u32Bits(kBit.powTwo.to10) }, + { input: u32Bits(kBit.powTwo.to11), expected: u32Bits(kBit.powTwo.to11) }, + { input: u32Bits(kBit.powTwo.to12), expected: u32Bits(kBit.powTwo.to12) }, + { input: u32Bits(kBit.powTwo.to13), expected: u32Bits(kBit.powTwo.to13) }, + { input: u32Bits(kBit.powTwo.to14), expected: u32Bits(kBit.powTwo.to14) }, + { input: u32Bits(kBit.powTwo.to15), expected: u32Bits(kBit.powTwo.to15) }, + { input: u32Bits(kBit.powTwo.to16), expected: u32Bits(kBit.powTwo.to16) }, + { input: u32Bits(kBit.powTwo.to17), expected: u32Bits(kBit.powTwo.to17) }, + { input: u32Bits(kBit.powTwo.to18), expected: u32Bits(kBit.powTwo.to18) }, + { input: u32Bits(kBit.powTwo.to19), expected: u32Bits(kBit.powTwo.to19) }, + { input: u32Bits(kBit.powTwo.to20), expected: u32Bits(kBit.powTwo.to20) }, + { input: u32Bits(kBit.powTwo.to21), expected: u32Bits(kBit.powTwo.to21) }, + { input: u32Bits(kBit.powTwo.to22), expected: u32Bits(kBit.powTwo.to22) }, + { input: u32Bits(kBit.powTwo.to23), expected: u32Bits(kBit.powTwo.to23) }, + { input: u32Bits(kBit.powTwo.to24), expected: u32Bits(kBit.powTwo.to24) }, + { input: u32Bits(kBit.powTwo.to25), expected: u32Bits(kBit.powTwo.to25) }, + { input: u32Bits(kBit.powTwo.to26), expected: u32Bits(kBit.powTwo.to26) }, + { input: u32Bits(kBit.powTwo.to27), expected: u32Bits(kBit.powTwo.to27) }, + { input: u32Bits(kBit.powTwo.to28), expected: u32Bits(kBit.powTwo.to28) }, + { input: u32Bits(kBit.powTwo.to29), expected: u32Bits(kBit.powTwo.to29) }, + { input: u32Bits(kBit.powTwo.to30), expected: u32Bits(kBit.powTwo.to30) }, + { input: u32Bits(kBit.powTwo.to31), expected: u32Bits(kBit.powTwo.to31) }] + ); }); -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`abstract int tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`signed int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + await run(t, builtin('abs'), [TypeI32], TypeI32, t.params, [ + // Min and max i32 + // If e evaluates to the largest negative value, then the result is e. + { input: i32Bits(kBit.i32.negative.min), expected: i32Bits(kBit.i32.negative.min) }, + { input: i32Bits(kBit.i32.negative.max), expected: i32Bits(kBit.i32.positive.min) }, + { input: i32Bits(kBit.i32.positive.max), expected: i32Bits(kBit.i32.positive.max) }, + { input: i32Bits(kBit.i32.positive.min), expected: i32Bits(kBit.i32.positive.min) }, + // input: -1 * pow(2, n), n = {-31, ..., 0 }, expected: pow(2, n), n = {-31, ..., 0}] + { input: i32Bits(kBit.negPowTwo.to0), expected: i32Bits(kBit.powTwo.to0) }, + { input: i32Bits(kBit.negPowTwo.to1), expected: i32Bits(kBit.powTwo.to1) }, + { input: i32Bits(kBit.negPowTwo.to2), expected: i32Bits(kBit.powTwo.to2) }, + { input: i32Bits(kBit.negPowTwo.to3), expected: i32Bits(kBit.powTwo.to3) }, + { input: i32Bits(kBit.negPowTwo.to4), expected: i32Bits(kBit.powTwo.to4) }, + { input: i32Bits(kBit.negPowTwo.to5), expected: i32Bits(kBit.powTwo.to5) }, + { input: i32Bits(kBit.negPowTwo.to6), expected: i32Bits(kBit.powTwo.to6) }, + { input: i32Bits(kBit.negPowTwo.to7), expected: i32Bits(kBit.powTwo.to7) }, + { input: i32Bits(kBit.negPowTwo.to8), expected: i32Bits(kBit.powTwo.to8) }, + { input: i32Bits(kBit.negPowTwo.to9), expected: i32Bits(kBit.powTwo.to9) }, + { input: i32Bits(kBit.negPowTwo.to10), expected: i32Bits(kBit.powTwo.to10) }, + { input: i32Bits(kBit.negPowTwo.to11), expected: i32Bits(kBit.powTwo.to11) }, + { input: i32Bits(kBit.negPowTwo.to12), expected: i32Bits(kBit.powTwo.to12) }, + { input: i32Bits(kBit.negPowTwo.to13), expected: i32Bits(kBit.powTwo.to13) }, + { input: i32Bits(kBit.negPowTwo.to14), expected: i32Bits(kBit.powTwo.to14) }, + { input: i32Bits(kBit.negPowTwo.to15), expected: i32Bits(kBit.powTwo.to15) }, + { input: i32Bits(kBit.negPowTwo.to16), expected: i32Bits(kBit.powTwo.to16) }, + { input: i32Bits(kBit.negPowTwo.to17), expected: i32Bits(kBit.powTwo.to17) }, + { input: i32Bits(kBit.negPowTwo.to18), expected: i32Bits(kBit.powTwo.to18) }, + { input: i32Bits(kBit.negPowTwo.to19), expected: i32Bits(kBit.powTwo.to19) }, + { input: i32Bits(kBit.negPowTwo.to20), expected: i32Bits(kBit.powTwo.to20) }, + { input: i32Bits(kBit.negPowTwo.to21), expected: i32Bits(kBit.powTwo.to21) }, + { input: i32Bits(kBit.negPowTwo.to22), expected: i32Bits(kBit.powTwo.to22) }, + { input: i32Bits(kBit.negPowTwo.to23), expected: i32Bits(kBit.powTwo.to23) }, + { input: i32Bits(kBit.negPowTwo.to24), expected: i32Bits(kBit.powTwo.to24) }, + { input: i32Bits(kBit.negPowTwo.to25), expected: i32Bits(kBit.powTwo.to25) }, + { input: i32Bits(kBit.negPowTwo.to26), expected: i32Bits(kBit.powTwo.to26) }, + { input: i32Bits(kBit.negPowTwo.to27), expected: i32Bits(kBit.powTwo.to27) }, + { input: i32Bits(kBit.negPowTwo.to28), expected: i32Bits(kBit.powTwo.to28) }, + { input: i32Bits(kBit.negPowTwo.to29), expected: i32Bits(kBit.powTwo.to29) }, + { input: i32Bits(kBit.negPowTwo.to30), expected: i32Bits(kBit.powTwo.to30) }, + { input: i32Bits(kBit.negPowTwo.to31), expected: i32Bits(kBit.powTwo.to31) }] + ); +}); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`unsigned int tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - await run(t, builtin('abs'), [TypeU32], TypeU32, t.params, [ - // Min and Max u32 - { input: u32Bits(kBit.u32.min), expected: u32Bits(kBit.u32.min) }, - { input: u32Bits(kBit.u32.max), expected: u32Bits(kBit.u32.max) }, - // Powers of 2: -2^i: 0 =< i =< 31 - { input: u32Bits(kBit.powTwo.to0), expected: u32Bits(kBit.powTwo.to0) }, - { input: u32Bits(kBit.powTwo.to1), expected: u32Bits(kBit.powTwo.to1) }, - { input: u32Bits(kBit.powTwo.to2), expected: u32Bits(kBit.powTwo.to2) }, - { input: u32Bits(kBit.powTwo.to3), expected: u32Bits(kBit.powTwo.to3) }, - { input: u32Bits(kBit.powTwo.to4), expected: u32Bits(kBit.powTwo.to4) }, - { input: u32Bits(kBit.powTwo.to5), expected: u32Bits(kBit.powTwo.to5) }, - { input: u32Bits(kBit.powTwo.to6), expected: u32Bits(kBit.powTwo.to6) }, - { input: u32Bits(kBit.powTwo.to7), expected: u32Bits(kBit.powTwo.to7) }, - { input: u32Bits(kBit.powTwo.to8), expected: u32Bits(kBit.powTwo.to8) }, - { input: u32Bits(kBit.powTwo.to9), expected: u32Bits(kBit.powTwo.to9) }, - { input: u32Bits(kBit.powTwo.to10), expected: u32Bits(kBit.powTwo.to10) }, - { input: u32Bits(kBit.powTwo.to11), expected: u32Bits(kBit.powTwo.to11) }, - { input: u32Bits(kBit.powTwo.to12), expected: u32Bits(kBit.powTwo.to12) }, - { input: u32Bits(kBit.powTwo.to13), expected: u32Bits(kBit.powTwo.to13) }, - { input: u32Bits(kBit.powTwo.to14), expected: u32Bits(kBit.powTwo.to14) }, - { input: u32Bits(kBit.powTwo.to15), expected: u32Bits(kBit.powTwo.to15) }, - { input: u32Bits(kBit.powTwo.to16), expected: u32Bits(kBit.powTwo.to16) }, - { input: u32Bits(kBit.powTwo.to17), expected: u32Bits(kBit.powTwo.to17) }, - { input: u32Bits(kBit.powTwo.to18), expected: u32Bits(kBit.powTwo.to18) }, - { input: u32Bits(kBit.powTwo.to19), expected: u32Bits(kBit.powTwo.to19) }, - { input: u32Bits(kBit.powTwo.to20), expected: u32Bits(kBit.powTwo.to20) }, - { input: u32Bits(kBit.powTwo.to21), expected: u32Bits(kBit.powTwo.to21) }, - { input: u32Bits(kBit.powTwo.to22), expected: u32Bits(kBit.powTwo.to22) }, - { input: u32Bits(kBit.powTwo.to23), expected: u32Bits(kBit.powTwo.to23) }, - { input: u32Bits(kBit.powTwo.to24), expected: u32Bits(kBit.powTwo.to24) }, - { input: u32Bits(kBit.powTwo.to25), expected: u32Bits(kBit.powTwo.to25) }, - { input: u32Bits(kBit.powTwo.to26), expected: u32Bits(kBit.powTwo.to26) }, - { input: u32Bits(kBit.powTwo.to27), expected: u32Bits(kBit.powTwo.to27) }, - { input: u32Bits(kBit.powTwo.to28), expected: u32Bits(kBit.powTwo.to28) }, - { input: u32Bits(kBit.powTwo.to29), expected: u32Bits(kBit.powTwo.to29) }, - { input: u32Bits(kBit.powTwo.to30), expected: u32Bits(kBit.powTwo.to30) }, - { input: u32Bits(kBit.powTwo.to31), expected: u32Bits(kBit.powTwo.to31) }, - ]); - }); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run(t, abstractBuiltin('abs'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`signed int tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - await run(t, builtin('abs'), [TypeI32], TypeI32, t.params, [ - // Min and max i32 - // If e evaluates to the largest negative value, then the result is e. - { input: i32Bits(kBit.i32.negative.min), expected: i32Bits(kBit.i32.negative.min) }, - { input: i32Bits(kBit.i32.negative.max), expected: i32Bits(kBit.i32.positive.min) }, - { input: i32Bits(kBit.i32.positive.max), expected: i32Bits(kBit.i32.positive.max) }, - { input: i32Bits(kBit.i32.positive.min), expected: i32Bits(kBit.i32.positive.min) }, - // input: -1 * pow(2, n), n = {-31, ..., 0 }, expected: pow(2, n), n = {-31, ..., 0}] - { input: i32Bits(kBit.negPowTwo.to0), expected: i32Bits(kBit.powTwo.to0) }, - { input: i32Bits(kBit.negPowTwo.to1), expected: i32Bits(kBit.powTwo.to1) }, - { input: i32Bits(kBit.negPowTwo.to2), expected: i32Bits(kBit.powTwo.to2) }, - { input: i32Bits(kBit.negPowTwo.to3), expected: i32Bits(kBit.powTwo.to3) }, - { input: i32Bits(kBit.negPowTwo.to4), expected: i32Bits(kBit.powTwo.to4) }, - { input: i32Bits(kBit.negPowTwo.to5), expected: i32Bits(kBit.powTwo.to5) }, - { input: i32Bits(kBit.negPowTwo.to6), expected: i32Bits(kBit.powTwo.to6) }, - { input: i32Bits(kBit.negPowTwo.to7), expected: i32Bits(kBit.powTwo.to7) }, - { input: i32Bits(kBit.negPowTwo.to8), expected: i32Bits(kBit.powTwo.to8) }, - { input: i32Bits(kBit.negPowTwo.to9), expected: i32Bits(kBit.powTwo.to9) }, - { input: i32Bits(kBit.negPowTwo.to10), expected: i32Bits(kBit.powTwo.to10) }, - { input: i32Bits(kBit.negPowTwo.to11), expected: i32Bits(kBit.powTwo.to11) }, - { input: i32Bits(kBit.negPowTwo.to12), expected: i32Bits(kBit.powTwo.to12) }, - { input: i32Bits(kBit.negPowTwo.to13), expected: i32Bits(kBit.powTwo.to13) }, - { input: i32Bits(kBit.negPowTwo.to14), expected: i32Bits(kBit.powTwo.to14) }, - { input: i32Bits(kBit.negPowTwo.to15), expected: i32Bits(kBit.powTwo.to15) }, - { input: i32Bits(kBit.negPowTwo.to16), expected: i32Bits(kBit.powTwo.to16) }, - { input: i32Bits(kBit.negPowTwo.to17), expected: i32Bits(kBit.powTwo.to17) }, - { input: i32Bits(kBit.negPowTwo.to18), expected: i32Bits(kBit.powTwo.to18) }, - { input: i32Bits(kBit.negPowTwo.to19), expected: i32Bits(kBit.powTwo.to19) }, - { input: i32Bits(kBit.negPowTwo.to20), expected: i32Bits(kBit.powTwo.to20) }, - { input: i32Bits(kBit.negPowTwo.to21), expected: i32Bits(kBit.powTwo.to21) }, - { input: i32Bits(kBit.negPowTwo.to22), expected: i32Bits(kBit.powTwo.to22) }, - { input: i32Bits(kBit.negPowTwo.to23), expected: i32Bits(kBit.powTwo.to23) }, - { input: i32Bits(kBit.negPowTwo.to24), expected: i32Bits(kBit.powTwo.to24) }, - { input: i32Bits(kBit.negPowTwo.to25), expected: i32Bits(kBit.powTwo.to25) }, - { input: i32Bits(kBit.negPowTwo.to26), expected: i32Bits(kBit.powTwo.to26) }, - { input: i32Bits(kBit.negPowTwo.to27), expected: i32Bits(kBit.powTwo.to27) }, - { input: i32Bits(kBit.negPowTwo.to28), expected: i32Bits(kBit.powTwo.to28) }, - { input: i32Bits(kBit.negPowTwo.to29), expected: i32Bits(kBit.powTwo.to29) }, - { input: i32Bits(kBit.negPowTwo.to30), expected: i32Bits(kBit.powTwo.to30) }, - { input: i32Bits(kBit.negPowTwo.to31), expected: i32Bits(kBit.powTwo.to31) }, - ]); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`float 32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('abs'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run(t, abstractBuiltin('abs'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); - }); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`float 32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('abs'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('abs'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('abs'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.cache.js new file mode 100644 index 00000000000..d71dcffc6dd --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...linearRange(-1, 1, 100), ...FP[trait].scalarRange()], // acos is defined on [-1, 1] + nonConst ? 'unfiltered' : 'finite', + FP[trait].acosInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('acos', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.spec.js index 9079adbd9ef..a36a7a88f78 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acos.spec.js @@ -1,73 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'acos' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn acos(e: T ) -> T Returns the arc cosine of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { linearRange, fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './acos.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -const f32_inputs = [ - ...linearRange(-1, 1, 100), // acos is defined on [-1, 1] - ...fullF32Range(), -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f16_inputs = [ - ...linearRange(-1, 1, 100), // acos is defined on [-1, 1] - ...fullF16Range(), -]; - -export const d = makeCaseCache('acos', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.acosInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.acosInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.acosInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.acosInterval); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('acos'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('acos'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('acos'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('acos'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.cache.js new file mode 100644 index 00000000000..acd8029a17e --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { biasedRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...biasedRange(1, 2, 100), ...FP[trait].scalarRange()], // x near 1 can be problematic to implement + nonConst ? 'unfiltered' : 'finite', + ...FP[trait].acoshIntervals + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('acosh', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.spec.js index fe537ba3ce0..5b607469263 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/acosh.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'acosh' builtin function S is AbstractFloat, f32, f16 @@ -11,67 +11,45 @@ Computes the non-negative functional inverse of cosh. Component-wise when T is a vector. Note: The result is not mathematically meaningful when e < 1. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './acosh.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -const f32_inputs = [ - ...biasedRange(1, 2, 100), // x near 1 can be problematic to implement - ...fullF32Range(), -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f16_inputs = [ - ...biasedRange(1, 2, 100), // x near 1 can be problematic to implement - ...fullF16Range(), -]; - -export const d = makeCaseCache('acosh', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', ...FP.f32.acoshIntervals); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', ...FP.f32.acoshIntervals); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', ...FP.f16.acoshIntervals); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', ...FP.f16.acoshIntervals); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('acosh'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('acosh'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('acosh'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('acosh'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/all.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/all.spec.js index cb8b32953ff..09bbb7c02e0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/all.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/all.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'all' builtin function S is a bool @@ -8,8 +8,7 @@ T is S or vecN @const fn all(e: T) -> bool Returns e if e is scalar. Returns true if each component of e is true if e is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { False, @@ -18,76 +17,76 @@ import { TypeVec, vec2, vec3, - vec4, -} from '../../../../../util/conversion.js'; + vec4 } from +'../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions') - .desc(`bool tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('overload', ['scalar', 'vec2', 'vec3', 'vec4']) - ) - .fn(async t => { - const overloads = { - scalar: { - type: TypeBool, - cases: [ - { input: False, expected: False }, - { input: True, expected: True }, - ], - }, - vec2: { - type: TypeVec(2, TypeBool), - cases: [ - { input: vec2(False, False), expected: False }, - { input: vec2(True, False), expected: False }, - { input: vec2(False, True), expected: False }, - { input: vec2(True, True), expected: True }, - ], - }, - vec3: { - type: TypeVec(3, TypeBool), - cases: [ - { input: vec3(False, False, False), expected: False }, - { input: vec3(True, False, False), expected: False }, - { input: vec3(False, True, False), expected: False }, - { input: vec3(True, True, False), expected: False }, - { input: vec3(False, False, True), expected: False }, - { input: vec3(True, False, True), expected: False }, - { input: vec3(False, True, True), expected: False }, - { input: vec3(True, True, True), expected: True }, - ], - }, - vec4: { - type: TypeVec(4, TypeBool), - cases: [ - { input: vec4(False, False, False, False), expected: False }, - { input: vec4(False, True, False, False), expected: False }, - { input: vec4(False, False, True, False), expected: False }, - { input: vec4(False, True, True, False), expected: False }, - { input: vec4(False, False, False, True), expected: False }, - { input: vec4(False, True, False, True), expected: False }, - { input: vec4(False, False, True, True), expected: False }, - { input: vec4(False, True, True, True), expected: False }, - { input: vec4(True, False, False, False), expected: False }, - { input: vec4(True, False, False, True), expected: False }, - { input: vec4(True, False, True, False), expected: False }, - { input: vec4(True, False, True, True), expected: False }, - { input: vec4(True, True, False, False), expected: False }, - { input: vec4(True, True, False, True), expected: False }, - { input: vec4(True, True, True, False), expected: False }, - { input: vec4(True, True, True, True), expected: True }, - ], - }, - }; - const overload = overloads[t.params.overload]; +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions'). +desc(`bool tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('overload', ['scalar', 'vec2', 'vec3', 'vec4']) +). +fn(async (t) => { + const overloads = { + scalar: { + type: TypeBool, + cases: [ + { input: False, expected: False }, + { input: True, expected: True }] - await run(t, builtin('all'), [overload.type], TypeBool, t.params, overload.cases); - }); + }, + vec2: { + type: TypeVec(2, TypeBool), + cases: [ + { input: vec2(False, False), expected: False }, + { input: vec2(True, False), expected: False }, + { input: vec2(False, True), expected: False }, + { input: vec2(True, True), expected: True }] + + }, + vec3: { + type: TypeVec(3, TypeBool), + cases: [ + { input: vec3(False, False, False), expected: False }, + { input: vec3(True, False, False), expected: False }, + { input: vec3(False, True, False), expected: False }, + { input: vec3(True, True, False), expected: False }, + { input: vec3(False, False, True), expected: False }, + { input: vec3(True, False, True), expected: False }, + { input: vec3(False, True, True), expected: False }, + { input: vec3(True, True, True), expected: True }] + + }, + vec4: { + type: TypeVec(4, TypeBool), + cases: [ + { input: vec4(False, False, False, False), expected: False }, + { input: vec4(False, True, False, False), expected: False }, + { input: vec4(False, False, True, False), expected: False }, + { input: vec4(False, True, True, False), expected: False }, + { input: vec4(False, False, False, True), expected: False }, + { input: vec4(False, True, False, True), expected: False }, + { input: vec4(False, False, True, True), expected: False }, + { input: vec4(False, True, True, True), expected: False }, + { input: vec4(True, False, False, False), expected: False }, + { input: vec4(True, False, False, True), expected: False }, + { input: vec4(True, False, True, False), expected: False }, + { input: vec4(True, False, True, True), expected: False }, + { input: vec4(True, True, False, False), expected: False }, + { input: vec4(True, True, False, True), expected: False }, + { input: vec4(True, True, True, False), expected: False }, + { input: vec4(True, True, True, True), expected: True }] + + } + }; + const overload = overloads[t.params.overload]; + + await run(t, builtin('all'), [overload.type], TypeBool, t.params, overload.cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/any.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/any.spec.js index 9f5b4524f11..119efbb2be9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/any.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/any.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'any' builtin function S is a bool @@ -8,8 +8,7 @@ T is S or vecN @const fn all(e) -> bool Returns e if e is scalar. Returns true if any component of e is true if e is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { False, @@ -18,76 +17,76 @@ import { TypeVec, vec2, vec3, - vec4, -} from '../../../../../util/conversion.js'; + vec4 } from +'../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions') - .desc(`bool tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('overload', ['scalar', 'vec2', 'vec3', 'vec4']) - ) - .fn(async t => { - const overloads = { - scalar: { - type: TypeBool, - cases: [ - { input: False, expected: False }, - { input: True, expected: True }, - ], - }, - vec2: { - type: TypeVec(2, TypeBool), - cases: [ - { input: vec2(False, False), expected: False }, - { input: vec2(True, False), expected: True }, - { input: vec2(False, True), expected: True }, - { input: vec2(True, True), expected: True }, - ], - }, - vec3: { - type: TypeVec(3, TypeBool), - cases: [ - { input: vec3(False, False, False), expected: False }, - { input: vec3(True, False, False), expected: True }, - { input: vec3(False, True, False), expected: True }, - { input: vec3(True, True, False), expected: True }, - { input: vec3(False, False, True), expected: True }, - { input: vec3(True, False, True), expected: True }, - { input: vec3(False, True, True), expected: True }, - { input: vec3(True, True, True), expected: True }, - ], - }, - vec4: { - type: TypeVec(4, TypeBool), - cases: [ - { input: vec4(False, False, False, False), expected: False }, - { input: vec4(False, True, False, False), expected: True }, - { input: vec4(False, False, True, False), expected: True }, - { input: vec4(False, True, True, False), expected: True }, - { input: vec4(False, False, False, True), expected: True }, - { input: vec4(False, True, False, True), expected: True }, - { input: vec4(False, False, True, True), expected: True }, - { input: vec4(False, True, True, True), expected: True }, - { input: vec4(True, False, False, False), expected: True }, - { input: vec4(True, False, False, True), expected: True }, - { input: vec4(True, False, True, False), expected: True }, - { input: vec4(True, False, True, True), expected: True }, - { input: vec4(True, True, False, False), expected: True }, - { input: vec4(True, True, False, True), expected: True }, - { input: vec4(True, True, True, False), expected: True }, - { input: vec4(True, True, True, True), expected: True }, - ], - }, - }; - const overload = overloads[t.params.overload]; +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions'). +desc(`bool tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('overload', ['scalar', 'vec2', 'vec3', 'vec4']) +). +fn(async (t) => { + const overloads = { + scalar: { + type: TypeBool, + cases: [ + { input: False, expected: False }, + { input: True, expected: True }] - await run(t, builtin('any'), [overload.type], TypeBool, t.params, overload.cases); - }); + }, + vec2: { + type: TypeVec(2, TypeBool), + cases: [ + { input: vec2(False, False), expected: False }, + { input: vec2(True, False), expected: True }, + { input: vec2(False, True), expected: True }, + { input: vec2(True, True), expected: True }] + + }, + vec3: { + type: TypeVec(3, TypeBool), + cases: [ + { input: vec3(False, False, False), expected: False }, + { input: vec3(True, False, False), expected: True }, + { input: vec3(False, True, False), expected: True }, + { input: vec3(True, True, False), expected: True }, + { input: vec3(False, False, True), expected: True }, + { input: vec3(True, False, True), expected: True }, + { input: vec3(False, True, True), expected: True }, + { input: vec3(True, True, True), expected: True }] + + }, + vec4: { + type: TypeVec(4, TypeBool), + cases: [ + { input: vec4(False, False, False, False), expected: False }, + { input: vec4(False, True, False, False), expected: True }, + { input: vec4(False, False, True, False), expected: True }, + { input: vec4(False, True, True, False), expected: True }, + { input: vec4(False, False, False, True), expected: True }, + { input: vec4(False, True, False, True), expected: True }, + { input: vec4(False, False, True, True), expected: True }, + { input: vec4(False, True, True, True), expected: True }, + { input: vec4(True, False, False, False), expected: True }, + { input: vec4(True, False, False, True), expected: True }, + { input: vec4(True, False, True, False), expected: True }, + { input: vec4(True, False, True, True), expected: True }, + { input: vec4(True, True, False, False), expected: True }, + { input: vec4(True, True, False, True), expected: True }, + { input: vec4(True, True, True, False), expected: True }, + { input: vec4(True, True, True, True), expected: True }] + + } + }; + const overload = overloads[t.params.overload]; + + await run(t, builtin('any'), [overload.type], TypeBool, t.params, overload.cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/arrayLength.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/arrayLength.spec.js index e31fbd832a0..460332e6916 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/arrayLength.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/arrayLength.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'arrayLength' builtin function. fn arrayLength(e: ptr> ) -> u32 Returns the number of elements in the runtime-sized array. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { align } from '../../../../../util/math.js'; @@ -14,51 +13,51 @@ export const g = makeTestGroup(GPUTest); // List of array element types to test. const kTestTypes = [ - { type: 'u32', stride: 4 }, - { type: 'i32', stride: 4 }, - { type: 'f32', stride: 4 }, - { type: 'f16', stride: 2 }, - { type: 'vec2', stride: 8 }, - { type: 'vec2', stride: 8 }, - { type: 'vec2', stride: 8 }, - { type: 'vec2', stride: 4 }, - { type: 'vec3', stride: 16 }, - { type: 'vec3', stride: 16 }, - { type: 'vec3', stride: 16 }, - { type: 'vec3', stride: 8 }, - { type: 'vec4', stride: 16 }, - { type: 'vec4', stride: 16 }, - { type: 'vec4', stride: 16 }, - { type: 'vec4', stride: 8 }, - { type: 'mat2x2', stride: 16 }, - { type: 'mat2x3', stride: 32 }, - { type: 'mat2x4', stride: 32 }, - { type: 'mat3x2', stride: 24 }, - { type: 'mat3x3', stride: 48 }, - { type: 'mat3x4', stride: 48 }, - { type: 'mat4x2', stride: 32 }, - { type: 'mat4x3', stride: 64 }, - { type: 'mat4x4', stride: 64 }, - { type: 'mat2x2', stride: 8 }, - { type: 'mat2x3', stride: 16 }, - { type: 'mat2x4', stride: 16 }, - { type: 'mat3x2', stride: 12 }, - { type: 'mat3x3', stride: 24 }, - { type: 'mat3x4', stride: 24 }, - { type: 'mat4x2', stride: 16 }, - { type: 'mat4x3', stride: 32 }, - { type: 'mat4x4', stride: 32 }, - { type: 'atomic', stride: 4 }, - { type: 'atomic', stride: 4 }, - { type: 'array', stride: 16 }, - { type: 'array', stride: 16 }, - { type: 'array', stride: 16 }, - { type: 'array', stride: 8 }, - // Structures - see declarations below. - { type: 'ElemStruct', stride: 4 }, - { type: 'ElemStruct_ImplicitPadding', stride: 16 }, - { type: 'ElemStruct_ExplicitPadding', stride: 32 }, -]; +{ type: 'u32', stride: 4 }, +{ type: 'i32', stride: 4 }, +{ type: 'f32', stride: 4 }, +{ type: 'f16', stride: 2 }, +{ type: 'vec2', stride: 8 }, +{ type: 'vec2', stride: 8 }, +{ type: 'vec2', stride: 8 }, +{ type: 'vec2', stride: 4 }, +{ type: 'vec3', stride: 16 }, +{ type: 'vec3', stride: 16 }, +{ type: 'vec3', stride: 16 }, +{ type: 'vec3', stride: 8 }, +{ type: 'vec4', stride: 16 }, +{ type: 'vec4', stride: 16 }, +{ type: 'vec4', stride: 16 }, +{ type: 'vec4', stride: 8 }, +{ type: 'mat2x2', stride: 16 }, +{ type: 'mat2x3', stride: 32 }, +{ type: 'mat2x4', stride: 32 }, +{ type: 'mat3x2', stride: 24 }, +{ type: 'mat3x3', stride: 48 }, +{ type: 'mat3x4', stride: 48 }, +{ type: 'mat4x2', stride: 32 }, +{ type: 'mat4x3', stride: 64 }, +{ type: 'mat4x4', stride: 64 }, +{ type: 'mat2x2', stride: 8 }, +{ type: 'mat2x3', stride: 16 }, +{ type: 'mat2x4', stride: 16 }, +{ type: 'mat3x2', stride: 12 }, +{ type: 'mat3x3', stride: 24 }, +{ type: 'mat3x4', stride: 24 }, +{ type: 'mat4x2', stride: 16 }, +{ type: 'mat4x3', stride: 32 }, +{ type: 'mat4x4', stride: 32 }, +{ type: 'atomic', stride: 4 }, +{ type: 'atomic', stride: 4 }, +{ type: 'array', stride: 16 }, +{ type: 'array', stride: 16 }, +{ type: 'array', stride: 16 }, +{ type: 'array', stride: 8 }, +// Structures - see declarations below. +{ type: 'ElemStruct', stride: 4 }, +{ type: 'ElemStruct_ImplicitPadding', stride: 16 }, +{ type: 'ElemStruct_ExplicitPadding', stride: 32 }]; + // Declarations for structures used as array element types. const kWgslStructures = ` @@ -79,35 +78,43 @@ struct ElemStruct_ExplicitPadding { @align(32) a : u32 } * @param binding_offset The offset in bytes of the binding * @param expected The array of expected values after running the shader */ -function runShaderTest(t, wgsl, stride, offset, buffer_size, binding_size, binding_offset) { +function runShaderTest( +t, +wgsl, +stride, +offset, +buffer_size, +binding_size, +binding_offset) +{ // Create the compute pipeline. const pipeline = t.device.createComputePipeline({ layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); // Create the buffer that will contain the runtime-sized array. const buffer = t.device.createBuffer({ size: buffer_size, - usage: GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.STORAGE }); // Create the buffer that will receive the array length. const lengthBuffer = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); // Set up bindings. const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: { buffer, size: binding_size, offset: binding_offset } }, - { binding: 1, resource: { buffer: lengthBuffer } }, - ], + { binding: 0, resource: { buffer, size: binding_size, offset: binding_offset } }, + { binding: 1, resource: { buffer: lengthBuffer } }] + }); // Run the shader. @@ -142,27 +149,27 @@ function shaderHeader(test_type) { return typeRequiresF16(test_type) ? 'enable f16;\n\n' : ''; } -g.test('single_element') - .specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin') - .desc( - `Test the arrayLength() builtin with a binding that is just large enough for a single element. +g.test('single_element'). +specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin'). +desc( + `Test the arrayLength() builtin with a binding that is just large enough for a single element. Test parameters: - type: The WGSL type to use as the array element type. - stride: The stride in bytes of the array element type. ` - ) - .params(u => u.combineWithParams(kTestTypes)) - .beforeAllSubcases(t => { - if (typeRequiresF16(t.params.type)) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const wgsl = - shaderHeader(t.params.type) + - kWgslStructures + - ` +). +params((u) => u.combineWithParams(kTestTypes)). +beforeAllSubcases((t) => { + if (typeRequiresF16(t.params.type)) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const wgsl = + shaderHeader(t.params.type) + + kWgslStructures + + ` @group(0) @binding(0) var buffer : array<${t.params.type}>; @group(0) @binding(1) var length : u32; @compute @workgroup_size(1) @@ -170,16 +177,16 @@ g.test('single_element') length = arrayLength(&buffer); } `; - let buffer_size = t.params.stride; - // Ensure that binding size is multiple of 4. - buffer_size = buffer_size + ((~buffer_size + 1) & 3); - runShaderTest(t, wgsl, t.params.stride, 0, buffer_size, buffer_size, 0); - }); + let buffer_size = t.params.stride; + // Ensure that binding size is multiple of 4. + buffer_size = buffer_size + (~buffer_size + 1 & 3); + runShaderTest(t, wgsl, t.params.stride, 0, buffer_size, buffer_size, 0); +}); -g.test('multiple_elements') - .specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin') - .desc( - `Test the arrayLength() builtin with a binding that is large enough for multiple elements. +g.test('multiple_elements'). +specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin'). +desc( + `Test the arrayLength() builtin with a binding that is large enough for multiple elements. We test sizes that are not exact multiples of the array element strides, to test that the length is correctly floored to the next whole element. @@ -189,18 +196,20 @@ g.test('multiple_elements') - type: The WGSL type to use as the array element type. - stride: The stride in bytes of the array element type. ` - ) - .params(u => u.combine('buffer_size', [640, 1004, 1048576]).combineWithParams(kTestTypes)) - .beforeAllSubcases(t => { - if (typeRequiresF16(t.params.type)) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const wgsl = - shaderHeader(t.params.type) + - kWgslStructures + - ` +). +params((u) => +u.combine('buffer_size', [640, 1004, 1048576]).combineWithParams(kTestTypes) +). +beforeAllSubcases((t) => { + if (typeRequiresF16(t.params.type)) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const wgsl = + shaderHeader(t.params.type) + + kWgslStructures + + ` @group(0) @binding(0) var buffer : array<${t.params.type}>; @group(0) @binding(1) var length : u32; @compute @workgroup_size(1) @@ -208,13 +217,13 @@ g.test('multiple_elements') length = arrayLength(&buffer); } `; - runShaderTest(t, wgsl, t.params.stride, 0, t.params.buffer_size, t.params.buffer_size, 0); - }); + runShaderTest(t, wgsl, t.params.stride, 0, t.params.buffer_size, t.params.buffer_size, 0); +}); -g.test('struct_member') - .specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin') - .desc( - `Test the arrayLength() builtin with an array that is inside a structure. +g.test('struct_member'). +specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin'). +desc( + `Test the arrayLength() builtin with an array that is inside a structure. We include offsets that are not exact multiples of the array element strides, to test that the length is correctly floored to the next whole element. @@ -224,19 +233,19 @@ g.test('struct_member') - type: The WGSL type to use as the array element type. - stride: The stride in bytes of the array element type. ` - ) - .params(u => u.combine('member_offset', [0, 4, 20]).combineWithParams(kTestTypes)) - .beforeAllSubcases(t => { - if (typeRequiresF16(t.params.type)) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const member_offset = align(t.params.member_offset, t.params.stride); - const wgsl = - shaderHeader(t.params.type) + - kWgslStructures + - ` +). +params((u) => u.combine('member_offset', [0, 4, 20]).combineWithParams(kTestTypes)). +beforeAllSubcases((t) => { + if (typeRequiresF16(t.params.type)) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const member_offset = align(t.params.member_offset, t.params.stride); + const wgsl = + shaderHeader(t.params.type) + + kWgslStructures + + ` alias ArrayType = array<${t.params.type}>; struct Struct { ${t.params.member_offset > 0 ? `@size(${member_offset}) padding : u32,` : ``} @@ -249,19 +258,19 @@ g.test('struct_member') length = arrayLength(&buffer.arr); } `; - const buffer_size = 1048576; - runShaderTest(t, wgsl, t.params.stride, member_offset, buffer_size, buffer_size, 0); - }); + const buffer_size = 1048576; + runShaderTest(t, wgsl, t.params.stride, member_offset, buffer_size, buffer_size, 0); +}); -g.test('binding_subregion') - .specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin') - .desc( - `Test the arrayLength() builtin when used with a binding that starts at a non-zero offset and +g.test('binding_subregion'). +specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin'). +desc( + `Test the arrayLength() builtin when used with a binding that starts at a non-zero offset and does not fill the entire buffer. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` @group(0) @binding(0) var buffer : array>; @group(0) @binding(1) var length : u32; @compute @workgroup_size(1) @@ -269,21 +278,21 @@ g.test('binding_subregion') length = arrayLength(&buffer); } `; - const stride = 16; - const buffer_size = 1024; - const binding_size = 640; - const binding_offset = 256; - runShaderTest(t, wgsl, stride, 0, buffer_size, binding_size, binding_offset); - }); + const stride = 16; + const buffer_size = 1024; + const binding_size = 640; + const binding_offset = 256; + runShaderTest(t, wgsl, stride, 0, buffer_size, binding_size, binding_offset); +}); -g.test('read_only') - .specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin') - .desc( - `Test the arrayLength() builtin when used with a read-only storage buffer. +g.test('read_only'). +specURL('https://www.w3.org/TR/WGSL/#arrayLength-builtin'). +desc( + `Test the arrayLength() builtin when used with a read-only storage buffer. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` @group(0) @binding(0) var buffer : array>; @group(0) @binding(1) var length : u32; @compute @workgroup_size(1) @@ -291,7 +300,7 @@ g.test('read_only') length = arrayLength(&buffer); } `; - const stride = 16; - const buffer_size = 1024; - runShaderTest(t, wgsl, stride, 0, buffer_size, buffer_size, 0); - }); + const stride = 16; + const buffer_size = 1024; + runShaderTest(t, wgsl, stride, 0, buffer_size, buffer_size, 0); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.cache.js new file mode 100644 index 00000000000..c7991c9bc85 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...linearRange(-1, 1, 100), ...FP[trait].scalarRange()], // asin is defined on [-1, 1] + nonConst ? 'unfiltered' : 'finite', + FP[trait].asinInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('asin', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.spec.js index 0426a9bd423..0519361a714 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asin.spec.js @@ -1,73 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'asin' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn asin(e: T ) -> T Returns the arc sine of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { linearRange, fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './asin.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -const f32_inputs = [ - ...linearRange(-1, 1, 100), // asin is defined on [-1, 1] - ...fullF32Range(), -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f16_inputs = [ - ...linearRange(-1, 1, 100), // asin is defined on [-1, 1] - ...fullF16Range(), -]; - -export const d = makeCaseCache('asin', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.asinInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.asinInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.asinInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.asinInterval); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('asin'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('asin'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('asin'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('asin'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.cache.js new file mode 100644 index 00000000000..b45ca00e39a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.cache.js @@ -0,0 +1,17 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].asinhInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('asinh', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.spec.js index 988abf62b5a..6e2bd6f9b5a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/asinh.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'sinh' builtin function S is AbstractFloat, f32, f16 @@ -10,51 +10,45 @@ Returns the hyperbolic arc sine of e. Computes the functional inverse of sinh. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './asinh.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('asinh', { - f32: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.asinhInterval); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.asinhInterval); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float test`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('asinh'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float test`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('asinh'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('asinh'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('asinh'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.cache.js new file mode 100644 index 00000000000..97ce4e70cc1 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +const known_values = [-Math.sqrt(3), -1, -1 / Math.sqrt(3), 0, 1, 1 / Math.sqrt(3), Math.sqrt(3)]; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...known_values, ...FP[trait].scalarRange()], + nonConst ? 'unfiltered' : 'finite', + FP[trait].atanInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('atan', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.spec.js index d14a4a2f82d..2ede98c6237 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'atan' builtin function S is AbstractFloat, f32, f16 @@ -8,68 +8,51 @@ T is S or vecN @const fn atan(e: T ) -> T Returns the arc tangent of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './atan.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -const known_values = [-Math.sqrt(3), -1, -1 / Math.sqrt(3), 0, 1, 1 / Math.sqrt(3), Math.sqrt(3)]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f32_inputs = [...known_values, ...fullF32Range()]; -const f16_inputs = [...known_values, ...fullF16Range()]; - -export const d = makeCaseCache('atan', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.atanInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.atanInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.atanInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.atanInterval); - }, -}); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` f32 tests TODO(#792): Decide what the ground-truth is for these tests. [1] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('atan'), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('atan'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('atan'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('atan'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.cache.js new file mode 100644 index 00000000000..5363a81fd7f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.cache.js @@ -0,0 +1,27 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((kind) => +[true, false].map((nonConst) => ({ + [`${kind}_${nonConst ? 'non_const' : 'const'}`]: () => { + // Using sparse range since there are N^2 cases being generated, and also including extra values + // around 0, where there is a discontinuity that implementations may behave badly at. + const numeric_range = [ + ...FP[kind].sparseScalarRange(), + ...linearRange(FP[kind].constants().negative.max, FP[kind].constants().positive.min, 10)]; + + return FP[kind].generateScalarPairToIntervalCases( + numeric_range, + numeric_range, + nonConst ? 'unfiltered' : 'finite', + FP[kind].atan2Interval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('atan2', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.spec.js index 185d104062b..da3cd9fe287 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atan2.spec.js @@ -1,88 +1,57 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'atan2' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn atan2(e1: T ,e2: T ) -> T Returns the arc tangent of e1 over e2. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { linearRange, sparseF32Range, sparseF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './atan2.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('atan2', { - f32: () => { - // Using sparse range since there are N^2 cases being generated, and also including extra values - // around 0, where there is a discontinuity that implementations may behave badly at. - const numeric_range = [ - ...sparseF32Range(), - ...linearRange(kValue.f32.negative.max, kValue.f32.positive.min, 10), - ]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - return FP.f32.generateScalarPairToIntervalCases( - numeric_range, - numeric_range, - 'unfiltered', - FP.f32.atan2Interval - ); - }, - f16: () => { - // Using sparse range since there are N^2 cases being generated, and also including extra values - // around 0, where there is a discontinuity that implementations may behave badly at. - const numeric_range = [ - ...sparseF16Range(), - ...linearRange(kValue.f16.negative.max, kValue.f16.positive.min, 10), - ]; - - return FP.f16.generateScalarPairToIntervalCases( - numeric_range, - numeric_range, - 'unfiltered', - FP.f16.atan2Interval - ); - }, -}); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` f32 tests TODO(#792): Decide what the ground-truth is for these tests. [1] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('atan2'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(`f32_${t.params.inputSource === 'const' ? 'const' : 'non_const'}`); + await run(t, builtin('atan2'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('atan2'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(`f16_${t.params.inputSource === 'const' ? 'const' : 'non_const'}`); + await run(t, builtin('atan2'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.cache.js new file mode 100644 index 00000000000..d34cd70b75b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.cache.js @@ -0,0 +1,28 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { biasedRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [ + // discontinuity at x = -1 + ...biasedRange(FP[trait].constants().negative.less_than_one, -0.9, 20), + -1, + // discontinuity at x = 1 + ...biasedRange(FP[trait].constants().positive.less_than_one, 0.9, 20), + 1, + ...FP[trait].scalarRange()], + + nonConst ? 'unfiltered' : 'finite', + FP[trait].atanhInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('atanh', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.spec.js index 1d74bb11a2c..b3a150bd70d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atanh.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'atanh' builtin function S is AbstractFloat, f32, f16 @@ -10,74 +10,45 @@ Returns the hyperbolic arc tangent of e. The result is 0 when abs(e) ≥ 1. Computes the functional inverse of tanh. Component-wise when T is a vector. Note: The result is not mathematically meaningful when abs(e) >= 1. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './atanh.cache.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -const f32_inputs = [ - ...biasedRange(kValue.f32.negative.less_than_one, -0.9, 20), // discontinuity at x = -1 - -1, - ...biasedRange(kValue.f32.positive.less_than_one, 0.9, 20), // discontinuity at x = 1 - 1, - ...fullF32Range(), -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f16_inputs = [ - ...biasedRange(kValue.f16.negative.less_than_one, -0.9, 20), // discontinuity at x = -1 - -1, - ...biasedRange(kValue.f16.positive.less_than_one, 0.9, 20), // discontinuity at x = 1 - 1, - ...fullF16Range(), -]; - -export const d = makeCaseCache('atanh', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.atanhInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.atanhInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.atanhInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.atanhInterval); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('atanh'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('atanh'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('atanh'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('atanh'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAdd.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAdd.spec.js index 96287e29989..3fc910b3405 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAdd.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAdd.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, add and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, add and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../../gpu_test.js'; import { @@ -17,87 +16,86 @@ import { workgroupSizes, runStorageVariableTest, runWorkgroupVariableTest, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('add_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('add_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicAdd(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - // Allocate one extra element to ensure it doesn't get modified - const bufferNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + // Allocate one extra element to ensure it doesn't get modified + const bufferNumElements = 2; - const initValue = 0; - const op = `atomicAdd(&output[0], 1)`; - const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - expected[0] = numInvocations; + const initValue = 0; + const op = `atomicAdd(&output[0], 1)`; + const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + expected[0] = numInvocations; - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected }); +}); -g.test('add_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('add_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicAdd(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - // Allocate one extra element to ensure it doesn't get modified - const wgNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + // Allocate one extra element to ensure it doesn't get modified + const wgNumElements = 2; - const initValue = 0; - const op = `atomicAdd(&wg[0], 1)`; + const initValue = 0; + const op = `atomicAdd(&wg[0], 1)`; - const expected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * t.params.dispatchSize - ); + const expected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * t.params.dispatchSize + ); + for (let d = 0; d < t.params.dispatchSize; ++d) { + const wg = expected.subarray(d * wgNumElements); + wg[0] = t.params.workgroupSize; + } - for (let d = 0; d < t.params.dispatchSize; ++d) { - const wg = expected.subarray(d * wgNumElements); - wg[0] = t.params.workgroupSize; - } - - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAnd.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAnd.spec.js index e6acf52beea..ebc125b3fbb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAnd.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicAnd.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, and and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, and and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { GPUTest } from '../../../../../../gpu_test.js'; @@ -19,119 +18,118 @@ import { runStorageVariableTest, runWorkgroupVariableTest, kMapId, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('and_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('and_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicAnd(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - // Allocate an output buffer with bitsize of max invocations plus 1 for validation - const bufferNumElements = Math.max(1, numInvocations / 32) + 1; + // Allocate an output buffer with bitsize of max invocations plus 1 for validation + const bufferNumElements = Math.max(1, numInvocations / 32) + 1; - // Start with all bits high, then using atomicAnd to set mapped global id bit off. - // Note: Both WGSL and JS will shift left 1 by id modulo 32. - const initValue = 0xffffffff; + // Start with all bits high, then using atomicAnd to set mapped global id bit off. + // Note: Both WGSL and JS will shift left 1 by id modulo 32. + const initValue = 0xffffffff; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations); // Defines map_id() - const op = ` + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations); // Defines map_id() + const op = ` let i = map_id(u32(id)); atomicAnd(&output[i / 32], ~(${scalarType}(1) << i)) `; - const expected = new (typedArrayCtor(scalarType))(bufferNumElements).fill(initValue); - for (let id = 0; id < numInvocations; ++id) { - const i = mapId.f(id, numInvocations); - expected[Math.floor(i / 32)] &= ~(1 << i); - } + const expected = new (typedArrayCtor(scalarType))(bufferNumElements).fill(initValue); + for (let id = 0; id < numInvocations; ++id) { + const i = mapId.f(id, numInvocations); + expected[Math.floor(i / 32)] &= ~(1 << i); + } - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - extra, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected, + extra }); +}); -g.test('and_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('and_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicAnd(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize; - // Allocate workgroup array with bitsize of max invocations plus 1 for validation - const wgNumElements = Math.max(1, numInvocations / 32) + 1; + // Allocate workgroup array with bitsize of max invocations plus 1 for validation + const wgNumElements = Math.max(1, numInvocations / 32) + 1; - // Start with all bits high, then using atomicAnd to set mapped global id bit off. - // Note: Both WGSL and JS will shift left 1 by id modulo 32. - const initValue = 0xffffffff; + // Start with all bits high, then using atomicAnd to set mapped global id bit off. + // Note: Both WGSL and JS will shift left 1 by id modulo 32. + const initValue = 0xffffffff; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations); // Defines map_id() - const op = ` + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations); // Defines map_id() + const op = ` let i = map_id(u32(id)); atomicAnd(&wg[i / 32], ~(${scalarType}(1) << i)) `; - const expected = new (typedArrayCtor(scalarType))(wgNumElements * t.params.dispatchSize).fill( - initValue - ); - - for (let d = 0; d < t.params.dispatchSize; ++d) { - for (let id = 0; id < numInvocations; ++id) { - const wg = expected.subarray(d * wgNumElements); - const i = mapId.f(id, numInvocations); - wg[Math.floor(i / 32)] &= ~(1 << i); - } + const expected = new (typedArrayCtor(scalarType))(wgNumElements * t.params.dispatchSize).fill( + initValue + ); + for (let d = 0; d < t.params.dispatchSize; ++d) { + for (let id = 0; id < numInvocations; ++id) { + const wg = expected.subarray(d * wgNumElements); + const i = mapId.f(id, numInvocations); + wg[Math.floor(i / 32)] &= ~(1 << i); } + } - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - extra, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected, + extra }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicCompareExchangeWeak.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicCompareExchangeWeak.spec.js index de35fb06c14..60d1488c0ba 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicCompareExchangeWeak.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicCompareExchangeWeak.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Performs the following steps atomically: * Load the original value pointed to by atomic_ptr. * Compare the original value to the value v using an equality operation. @@ -13,8 +13,7 @@ the comparison succeeded. Note: the equality comparison may spuriously fail on some implementations. That is, the second component of the result vector may be false even if the first component of the result vector equals cmp. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { assert } from '../../../../../../../common/util/util.js'; import { GPUTest } from '../../../../../../gpu_test.js'; @@ -24,15 +23,15 @@ import { workgroupSizes, typedArrayCtor, kMapId, - onlyWorkgroupSizes, -} from './harness.js'; + onlyWorkgroupSizes } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('compare_exchange_weak_storage_basic') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('compare_exchange_weak_storage_basic'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 @@ -43,23 +42,23 @@ struct __atomic_compare_exchange_result { exchanged : bool, // true if the exchange was done } ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - const bufferNumElements = numInvocations; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + const bufferNumElements = numInvocations; + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` @group(0) @binding(0) var input : array>; @@ -92,86 +91,86 @@ struct __atomic_compare_exchange_result { } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - // Create input buffer with values [0..n] - const inputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(inputBuffer); - const data = new arrayType(inputBuffer.getMappedRange()); - data.forEach((_, i) => (data[i] = i)); - inputBuffer.unmap(); - - const outputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const exchangedBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(exchangedBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: inputBuffer } }, - { binding: 1, resource: { buffer: outputBuffer } }, - { binding: 2, resource: { buffer: exchangedBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(t.params.dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Output buffer should be the same as the initial input buffer as it contains - // values returned from atomicCompareExchangeWeak - const outputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - outputExpected.forEach((_, i) => (outputExpected[i] = i)); - t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); - - // Read back exchanged buffer - const exchangedBufferResult = await t.readGPUBufferRangeTyped(exchangedBuffer, { - type: arrayType, - typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT, - }); - - // The input buffer should have been modified to a computed value for every third value, - // unless the comparison spuriously failed. - const inputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - inputExpected.forEach((_, i) => { - if (i % 3 === 0 && exchangedBufferResult.data[i]) { - inputExpected[i] = mapId.f(i * 2, numInvocations); - } else { - inputExpected[i] = i; // No change - } - }); - t.expectGPUBufferValuesEqual(inputBuffer, inputExpected); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('compare_exchange_weak_workgroup_basic') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + // Create input buffer with values [0..n] + const inputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(inputBuffer); + const data = new arrayType(inputBuffer.getMappedRange()); + data.forEach((_, i) => data[i] = i); + inputBuffer.unmap(); + + const outputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const exchangedBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(exchangedBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: inputBuffer } }, + { binding: 1, resource: { buffer: outputBuffer } }, + { binding: 2, resource: { buffer: exchangedBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(t.params.dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Output buffer should be the same as the initial input buffer as it contains + // values returned from atomicCompareExchangeWeak + const outputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + outputExpected.forEach((_, i) => outputExpected[i] = i); + t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); + + // Read back exchanged buffer + const exchangedBufferResult = await t.readGPUBufferRangeTyped(exchangedBuffer, { + type: arrayType, + typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT + }); + + // The input buffer should have been modified to a computed value for every third value, + // unless the comparison spuriously failed. + const inputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + inputExpected.forEach((_, i) => { + if (i % 3 === 0 && exchangedBufferResult.data[i]) { + inputExpected[i] = mapId.f(i * 2, numInvocations); + } else { + inputExpected[i] = i; // No change + } + }); + t.expectGPUBufferValuesEqual(inputBuffer, inputExpected); +}); + +g.test('compare_exchange_weak_workgroup_basic'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 @@ -182,24 +181,24 @@ struct __atomic_compare_exchange_result { exchanged : bool, // true if the exchange was done } ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize; - const wgNumElements = numInvocations; - const scalarType = t.params.scalarType; - const dispatchSize = t.params.dispatchSize; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize; + const wgNumElements = numInvocations; + const scalarType = t.params.scalarType; + const dispatchSize = t.params.dispatchSize; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` var wg: array, ${wgNumElements}>; @group(0) @binding(0) @@ -243,84 +242,83 @@ struct __atomic_compare_exchange_result { } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - const outputBuffer = t.device.createBuffer({ - size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const wgCopyBuffer = t.device.createBuffer({ - size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const exchangedBuffer = t.device.createBuffer({ - size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(exchangedBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: outputBuffer } }, - { binding: 1, resource: { buffer: exchangedBuffer } }, - { binding: 2, resource: { buffer: wgCopyBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Output buffer should be the same as the initial wg buffer as it contains - // values returned from atomicCompareExchangeWeak - const outputExpected = new (typedArrayCtor(t.params.scalarType))(wgNumElements * dispatchSize); - outputExpected.forEach((_, i) => (outputExpected[i] = i)); - t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); - - // Read back exchanged buffer - const exchangedBufferResult = await t.readGPUBufferRangeTyped(exchangedBuffer, { - type: arrayType, - typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT, - }); - - // And the wg copy buffer should have been modified to a computed value for every third value, - // unless the comparison spuriously failed. - const wgCopyBufferExpected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * dispatchSize - ); - - wgCopyBufferExpected.forEach((_, i) => { - if (i % 3 === 0 && exchangedBufferResult.data[i]) { - wgCopyBufferExpected[i] = mapId.f(i * 2, numInvocations); - } else { - wgCopyBufferExpected[i] = i; // No change - } - }); - t.expectGPUBufferValuesEqual(wgCopyBuffer, wgCopyBufferExpected); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('compare_exchange_weak_storage_advanced') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + const outputBuffer = t.device.createBuffer({ + size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const wgCopyBuffer = t.device.createBuffer({ + size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const exchangedBuffer = t.device.createBuffer({ + size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(exchangedBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: outputBuffer } }, + { binding: 1, resource: { buffer: exchangedBuffer } }, + { binding: 2, resource: { buffer: wgCopyBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Output buffer should be the same as the initial wg buffer as it contains + // values returned from atomicCompareExchangeWeak + const outputExpected = new (typedArrayCtor(t.params.scalarType))(wgNumElements * dispatchSize); + outputExpected.forEach((_, i) => outputExpected[i] = i); + t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); + + // Read back exchanged buffer + const exchangedBufferResult = await t.readGPUBufferRangeTyped(exchangedBuffer, { + type: arrayType, + typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT + }); + + // And the wg copy buffer should have been modified to a computed value for every third value, + // unless the comparison spuriously failed. + const wgCopyBufferExpected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * dispatchSize + ); + wgCopyBufferExpected.forEach((_, i) => { + if (i % 3 === 0 && exchangedBufferResult.data[i]) { + wgCopyBufferExpected[i] = mapId.f(i * 2, numInvocations); + } else { + wgCopyBufferExpected[i] = i; // No change + } + }); + t.expectGPUBufferValuesEqual(wgCopyBuffer, wgCopyBufferExpected); +}); + +g.test('compare_exchange_weak_storage_advanced'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 @@ -331,23 +329,23 @@ struct __atomic_compare_exchange_result { exchanged : bool, // true if the exchange was done } ` - ) - .params(u => - u - .combine('workgroupSize', onlyWorkgroupSizes) // - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize; - const scalarType = t.params.scalarType; +). +params((u) => +u. +combine('workgroupSize', onlyWorkgroupSizes) // +.combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize; + const scalarType = t.params.scalarType; - // Number of times each workgroup attempts to exchange the same value to the same memory address - const numWrites = 4; + // Number of times each workgroup attempts to exchange the same value to the same memory address + const numWrites = 4; - const bufferNumElements = numInvocations * numWrites; - const pingPongValues = [24, 68]; + const bufferNumElements = numInvocations * numWrites; + const pingPongValues = [24, 68]; - const wgsl = ` + const wgsl = ` @group(0) @binding(0) var data : atomic<${scalarType}>; @@ -399,148 +397,145 @@ struct __atomic_compare_exchange_result { } `; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - const defaultValue = 99999999; - - // Create single-value data buffer initialized to the first ping-pong value - const dataBuffer = t.device.createBuffer({ - size: 1 * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - { - const data = new arrayType(dataBuffer.getMappedRange()); - data[0] = pingPongValues[0]; - dataBuffer.unmap(); - } - t.trackForCleanup(dataBuffer); - - const oldValuesBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(oldValuesBuffer); - { - const data = new arrayType(oldValuesBuffer.getMappedRange()); - data.fill(defaultValue); - oldValuesBuffer.unmap(); - } - - const exchangedBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(exchangedBuffer); - { - const data = new arrayType(exchangedBuffer.getMappedRange()); - data.fill(defaultValue); - exchangedBuffer.unmap(); - } - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: dataBuffer } }, - { binding: 1, resource: { buffer: oldValuesBuffer } }, - { binding: 2, resource: { buffer: exchangedBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(1); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Read back buffers - const oldValuesBufferResult = ( - await t.readGPUBufferRangeTyped(oldValuesBuffer, { - type: arrayType, - typedLength: oldValuesBuffer.size / arrayType.BYTES_PER_ELEMENT, - }) - ).data; - const exchangedBufferResult = ( - await t.readGPUBufferRangeTyped(exchangedBuffer, { - type: arrayType, - typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT, - }) - ).data; - - for (let w = 0; w < numWrites; ++w) { - const offset = w * numInvocations; - const exchanged = exchangedBufferResult.subarray(offset, offset + numInvocations); - const oldValues = oldValuesBufferResult.subarray(offset, offset + numInvocations); - - const dumpValues = () => { - return ` - For write: ${w} - exchanged: ${exchanged} - oldValues: ${oldValues}`; - }; - - // Only one of the invocations should have succeeded to exchange - or none if spurious failures occured - const noExchanges = exchanged.every(v => v === 0); - if (noExchanges) { - // Spurious failure, all values in oldValues should be the default value - if (!oldValues.every(v => v === defaultValue)) { - t.fail( - `Spurious failure detected, expected only default value of ${defaultValue} in oldValues buffer.${dumpValues()}` - ); - - return; - } - } else { - // Only one invocation should have exchanged its value - if (exchanged.filter(v => v === 1).length !== 1) { - t.fail(`More than one invocation exchanged its value.${dumpValues()}`); - return; - } - - // Get its index - const idx = exchanged.findIndex(v => v === 1); - assert(idx !== -1); - - // Its output should contain the old value after exchange - const oldValue = pingPongValues[w % 2]; - if (oldValues[idx] !== oldValue) { - t.fail( - `oldValues[${idx}] expected to contain old value from exchange: ${oldValue}.${dumpValues()}'` - ); - - return; - } - - // The rest of oldValues should either contain the old value or the newly exchanged value, - // depending on whether they executed atomicCompareExchangWeak before or after invocation 'idx'. - const oldValuesRest = oldValues.filter((_, i) => i !== idx); - if (!oldValuesRest.every(v => pingPongValues.includes(v))) { - t.fail( - `Values in oldValues buffer should be one of '${pingPongValues}', except at index '${idx} where it is '${oldValue}'.${dumpValues()}` - ); - - return; - } - } + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' } }); -g.test('compare_exchange_weak_workgroup_advanced') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + const defaultValue = 99999999; + + // Create single-value data buffer initialized to the first ping-pong value + const dataBuffer = t.device.createBuffer({ + size: 1 * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + { + const data = new arrayType(dataBuffer.getMappedRange()); + data[0] = pingPongValues[0]; + dataBuffer.unmap(); + } + t.trackForCleanup(dataBuffer); + + const oldValuesBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(oldValuesBuffer); + { + const data = new arrayType(oldValuesBuffer.getMappedRange()); + data.fill(defaultValue); + oldValuesBuffer.unmap(); + } + + const exchangedBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(exchangedBuffer); + { + const data = new arrayType(exchangedBuffer.getMappedRange()); + data.fill(defaultValue); + exchangedBuffer.unmap(); + } + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: dataBuffer } }, + { binding: 1, resource: { buffer: oldValuesBuffer } }, + { binding: 2, resource: { buffer: exchangedBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(1); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Read back buffers + const oldValuesBufferResult = ( + await t.readGPUBufferRangeTyped(oldValuesBuffer, { + type: arrayType, + typedLength: oldValuesBuffer.size / arrayType.BYTES_PER_ELEMENT + })). + data; + const exchangedBufferResult = ( + await t.readGPUBufferRangeTyped(exchangedBuffer, { + type: arrayType, + typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT + })). + data; + + for (let w = 0; w < numWrites; ++w) { + const offset = w * numInvocations; + const exchanged = exchangedBufferResult.subarray(offset, offset + numInvocations); + const oldValues = oldValuesBufferResult.subarray(offset, offset + numInvocations); + + const dumpValues = () => { + return ` + For write: ${w} + exchanged: ${exchanged} + oldValues: ${oldValues}`; + }; + + // Only one of the invocations should have succeeded to exchange - or none if spurious failures occured + const noExchanges = exchanged.every((v) => v === 0); + if (noExchanges) { + // Spurious failure, all values in oldValues should be the default value + if (!oldValues.every((v) => v === defaultValue)) { + t.fail( + `Spurious failure detected, expected only default value of ${defaultValue} in oldValues buffer.${dumpValues()}` + ); + return; + } + } else { + // Only one invocation should have exchanged its value + if (exchanged.filter((v) => v === 1).length !== 1) { + t.fail(`More than one invocation exchanged its value.${dumpValues()}`); + return; + } + + // Get its index + const idx = exchanged.findIndex((v) => v === 1); + assert(idx !== -1); + + // Its output should contain the old value after exchange + const oldValue = pingPongValues[w % 2]; + if (oldValues[idx] !== oldValue) { + t.fail( + `oldValues[${idx}] expected to contain old value from exchange: ${oldValue}.${dumpValues()}'` + ); + return; + } + + // The rest of oldValues should either contain the old value or the newly exchanged value, + // depending on whether they executed atomicCompareExchangWeak before or after invocation 'idx'. + const oldValuesRest = oldValues.filter((_, i) => i !== idx); + if (!oldValuesRest.every((v) => pingPongValues.includes(v))) { + t.fail( + `Values in oldValues buffer should be one of '${pingPongValues}', except at index '${idx} where it is '${oldValue}'.${dumpValues()}` + ); + return; + } + } + } +}); + +g.test('compare_exchange_weak_workgroup_advanced'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 @@ -551,23 +546,23 @@ struct __atomic_compare_exchange_result { exchanged : bool, // true if the exchange was done } ` - ) - .params(u => - u - .combine('workgroupSize', onlyWorkgroupSizes) // - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize; - const scalarType = t.params.scalarType; +). +params((u) => +u. +combine('workgroupSize', onlyWorkgroupSizes) // +.combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize; + const scalarType = t.params.scalarType; - // Number of times each workgroup attempts to exchange the same value to the same memory address - const numWrites = 4; + // Number of times each workgroup attempts to exchange the same value to the same memory address + const numWrites = 4; - const bufferNumElements = numInvocations * numWrites; - const pingPongValues = [24, 68]; + const bufferNumElements = numInvocations * numWrites; + const pingPongValues = [24, 68]; - const wgsl = ` + const wgsl = ` var wg: atomic<${scalarType}>; @group(0) @binding(0) @@ -625,126 +620,123 @@ struct __atomic_compare_exchange_result { } `; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - const defaultValue = 99999999; - - const oldValuesBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(oldValuesBuffer); - { - const data = new arrayType(oldValuesBuffer.getMappedRange()); - data.fill(defaultValue); - oldValuesBuffer.unmap(); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' } + }); - const exchangedBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(exchangedBuffer); - { - const data = new arrayType(exchangedBuffer.getMappedRange()); - data.fill(defaultValue); - exchangedBuffer.unmap(); - } + const arrayType = typedArrayCtor(scalarType); + const defaultValue = 99999999; - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: oldValuesBuffer } }, - { binding: 1, resource: { buffer: exchangedBuffer } }, - ], - }); + const oldValuesBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(oldValuesBuffer); + { + const data = new arrayType(oldValuesBuffer.getMappedRange()); + data.fill(defaultValue); + oldValuesBuffer.unmap(); + } - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(1); - pass.end(); - t.queue.submit([encoder.finish()]); + const exchangedBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(exchangedBuffer); + { + const data = new arrayType(exchangedBuffer.getMappedRange()); + data.fill(defaultValue); + exchangedBuffer.unmap(); + } - // Read back buffers - const oldValuesBufferResult = ( - await t.readGPUBufferRangeTyped(oldValuesBuffer, { - type: arrayType, - typedLength: oldValuesBuffer.size / arrayType.BYTES_PER_ELEMENT, - }) - ).data; - const exchangedBufferResult = ( - await t.readGPUBufferRangeTyped(exchangedBuffer, { - type: arrayType, - typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT, - }) - ).data; + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: oldValuesBuffer } }, + { binding: 1, resource: { buffer: exchangedBuffer } }] - for (let w = 0; w < numWrites; ++w) { - const offset = w * numInvocations; - const exchanged = exchangedBufferResult.subarray(offset, offset + numInvocations); - const oldValues = oldValuesBufferResult.subarray(offset, offset + numInvocations); + }); - const dumpValues = () => { - return ` + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(1); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Read back buffers + const oldValuesBufferResult = ( + await t.readGPUBufferRangeTyped(oldValuesBuffer, { + type: arrayType, + typedLength: oldValuesBuffer.size / arrayType.BYTES_PER_ELEMENT + })). + data; + const exchangedBufferResult = ( + await t.readGPUBufferRangeTyped(exchangedBuffer, { + type: arrayType, + typedLength: exchangedBuffer.size / arrayType.BYTES_PER_ELEMENT + })). + data; + + for (let w = 0; w < numWrites; ++w) { + const offset = w * numInvocations; + const exchanged = exchangedBufferResult.subarray(offset, offset + numInvocations); + const oldValues = oldValuesBufferResult.subarray(offset, offset + numInvocations); + + const dumpValues = () => { + return ` For write: ${w} exchanged: ${exchanged} oldValues: ${oldValues}`; - }; + }; - // Only one of the invocations should have succeeded to exchange - or none if spurious failures occured - const noExchanges = exchanged.every(v => v === 0); - if (noExchanges) { - // Spurious failure, all values in oldValues should be the default value - if (!oldValues.every(v => v === defaultValue)) { - t.fail( - `Spurious failure detected, expected only default value of ${defaultValue} in oldValues buffer.${dumpValues()}` - ); + // Only one of the invocations should have succeeded to exchange - or none if spurious failures occured + const noExchanges = exchanged.every((v) => v === 0); + if (noExchanges) { + // Spurious failure, all values in oldValues should be the default value + if (!oldValues.every((v) => v === defaultValue)) { + t.fail( + `Spurious failure detected, expected only default value of ${defaultValue} in oldValues buffer.${dumpValues()}` + ); + return; + } + } else { + // Only one invocation should have exchanged its value + if (exchanged.filter((v) => v === 1).length !== 1) { + t.fail(`More than one invocation exchanged its value.${dumpValues()}`); + return; + } - return; - } - } else { - // Only one invocation should have exchanged its value - if (exchanged.filter(v => v === 1).length !== 1) { - t.fail(`More than one invocation exchanged its value.${dumpValues()}`); - return; - } + // Get its index + const idx = exchanged.findIndex((v) => v === 1); + assert(idx !== -1); - // Get its index - const idx = exchanged.findIndex(v => v === 1); - assert(idx !== -1); + // Its output should contain the old value after exchange + const oldValue = pingPongValues[w % 2]; + if (oldValues[idx] !== oldValue) { + t.fail( + `oldValues[${idx}] expected to contain old value from exchange: ${oldValue}.${dumpValues()}'` + ); + return; + } - // Its output should contain the old value after exchange - const oldValue = pingPongValues[w % 2]; - if (oldValues[idx] !== oldValue) { - t.fail( - `oldValues[${idx}] expected to contain old value from exchange: ${oldValue}.${dumpValues()}'` - ); - - return; - } - - // The rest of oldValues should either contain the old value or the newly exchanged value, - // depending on whether they executed atomicCompareExchangWeak before or after invocation 'idx'. - const oldValuesRest = oldValues.filter((_, i) => i !== idx); - if (!oldValuesRest.every(v => pingPongValues.includes(v))) { - t.fail( - `Values in oldValues buffer should be one of '${pingPongValues}', except at index '${idx} where it is '${oldValue}'.${dumpValues()}` - ); - - return; - } + // The rest of oldValues should either contain the old value or the newly exchanged value, + // depending on whether they executed atomicCompareExchangWeak before or after invocation 'idx'. + const oldValuesRest = oldValues.filter((_, i) => i !== idx); + if (!oldValuesRest.every((v) => pingPongValues.includes(v))) { + t.fail( + `Values in oldValues buffer should be one of '${pingPongValues}', except at index '${idx} where it is '${oldValue}'.${dumpValues()}` + ); + return; } } - }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicExchange.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicExchange.spec.js index 34a9be654e8..92717005f7a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicExchange.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicExchange.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically stores the value v in the atomic object pointed to atomic_ptr and returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { GPUTest } from '../../../../../../gpu_test.js'; import { checkElementsEqual } from '../../../../../../util/check_contents.js'; @@ -12,32 +11,32 @@ import { dispatchSizes, workgroupSizes, typedArrayCtor, kMapId } from './harness export const g = makeTestGroup(GPUTest); -g.test('exchange_storage_basic') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('exchange_storage_basic'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicExchange(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - const bufferNumElements = numInvocations; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + const bufferNumElements = numInvocations; + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` @group(0) @binding(0) var input : array>; @@ -54,90 +53,90 @@ fn atomicExchange(atomic_ptr: ptr, read_write>, v: T) -> T } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - // Create input buffer with values [0..n] - const inputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(inputBuffer); - const data = new arrayType(inputBuffer.getMappedRange()); - data.forEach((_, i) => (data[i] = i)); - inputBuffer.unmap(); - - const outputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: inputBuffer } }, - { binding: 1, resource: { buffer: outputBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(t.params.dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Output buffer should be the same as the initial input buffer as it contains - // values returned from atomicExchange - const outputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - outputExpected.forEach((_, i) => (outputExpected[i] = i)); - t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); - - // And the input buffer should have been modified to a computed value - const inputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - inputExpected.forEach((_, i) => (inputExpected[i] = mapId.f(i * 2, numInvocations))); - t.expectGPUBufferValuesEqual(inputBuffer, inputExpected); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('exchange_workgroup_basic') - .specURL('https://www.w3.org/TR/WGSL/#atomic-load') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + // Create input buffer with values [0..n] + const inputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(inputBuffer); + const data = new arrayType(inputBuffer.getMappedRange()); + data.forEach((_, i) => data[i] = i); + inputBuffer.unmap(); + + const outputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: inputBuffer } }, + { binding: 1, resource: { buffer: outputBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(t.params.dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Output buffer should be the same as the initial input buffer as it contains + // values returned from atomicExchange + const outputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + outputExpected.forEach((_, i) => outputExpected[i] = i); + t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); + + // And the input buffer should have been modified to a computed value + const inputExpected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + inputExpected.forEach((_, i) => inputExpected[i] = mapId.f(i * 2, numInvocations)); + t.expectGPUBufferValuesEqual(inputBuffer, inputExpected); +}); + +g.test('exchange_workgroup_basic'). +specURL('https://www.w3.org/TR/WGSL/#atomic-load'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicLoad(atomic_ptr: ptr, read_write>) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize; - const wgNumElements = numInvocations; - const scalarType = t.params.scalarType; - const dispatchSize = t.params.dispatchSize; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize; + const wgNumElements = numInvocations; + const scalarType = t.params.scalarType; + const dispatchSize = t.params.dispatchSize; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` var wg: array, ${wgNumElements}>; // Result of each workgroup is written to output[workgroup_id.x] @@ -167,89 +166,87 @@ fn atomicLoad(atomic_ptr: ptr, read_write>) -> T } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - const outputBuffer = t.device.createBuffer({ - size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const wgCopyBuffer = t.device.createBuffer({ - size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: outputBuffer } }, - { binding: 1, resource: { buffer: wgCopyBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Output buffer should be the same as the initial wg buffer as it contains - // values returned from atomicExchange - const outputExpected = new (typedArrayCtor(t.params.scalarType))(wgNumElements * dispatchSize); - outputExpected.forEach((_, i) => (outputExpected[i] = i)); - t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); - - // And the wg copy buffer should have been modified to a computed value - const wgCopyBufferExpected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * dispatchSize - ); - - wgCopyBufferExpected.forEach( - (_, i) => (wgCopyBufferExpected[i] = mapId.f(i * 2, numInvocations)) - ); - - t.expectGPUBufferValuesEqual(wgCopyBuffer, wgCopyBufferExpected); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('exchange_storage_advanced') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + const outputBuffer = t.device.createBuffer({ + size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const wgCopyBuffer = t.device.createBuffer({ + size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: outputBuffer } }, + { binding: 1, resource: { buffer: wgCopyBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Output buffer should be the same as the initial wg buffer as it contains + // values returned from atomicExchange + const outputExpected = new (typedArrayCtor(t.params.scalarType))(wgNumElements * dispatchSize); + outputExpected.forEach((_, i) => outputExpected[i] = i); + t.expectGPUBufferValuesEqual(outputBuffer, outputExpected); + + // And the wg copy buffer should have been modified to a computed value + const wgCopyBufferExpected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * dispatchSize + ); + wgCopyBufferExpected.forEach( + (_, i) => wgCopyBufferExpected[i] = mapId.f(i * 2, numInvocations) + ); + t.expectGPUBufferValuesEqual(wgCopyBuffer, wgCopyBufferExpected); +}); + +g.test('exchange_storage_advanced'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicExchange(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - const bufferNumElements = numInvocations; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + const bufferNumElements = numInvocations; + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` @group(0) @binding(0) var input : atomic<${scalarType}>; @@ -268,102 +265,102 @@ fn atomicExchange(atomic_ptr: ptr, read_write>, v: T) -> T } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - // Create input buffer of size 1 with initial value 0 - const inputBuffer = t.device.createBuffer({ - size: 1 * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(inputBuffer); - - const outputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: inputBuffer } }, - { binding: 1, resource: { buffer: outputBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(t.params.dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Read back buffers - const inputBufferResult = await t.readGPUBufferRangeTyped(inputBuffer, { - type: arrayType, - typedLength: inputBuffer.size / arrayType.BYTES_PER_ELEMENT, - }); - const outputBufferResult = await t.readGPUBufferRangeTyped(outputBuffer, { - type: arrayType, - typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT, - }); - - // The one value in the input buffer plus all values in the output buffer - // should contain initial value 0 plus map_id(0..n), unsorted. - const values = new arrayType([...inputBufferResult.data, ...outputBufferResult.data]); - - const expected = new arrayType(values.length); - expected.forEach((_, i) => { - if (i === 0) { - expected[0] = 0; - } else { - expected[i] = mapId.f(i - 1, numInvocations); - } - }); - - // Sort both arrays and compare - values.sort(); - expected.sort(); // Sort because we store hashed results when mapId == 'remap' - t.expectOK(checkElementsEqual(values, expected)); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('exchange_workgroup_advanced') - .specURL('https://www.w3.org/TR/WGSL/#atomic-load') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + // Create input buffer of size 1 with initial value 0 + const inputBuffer = t.device.createBuffer({ + size: 1 * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(inputBuffer); + + const outputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: inputBuffer } }, + { binding: 1, resource: { buffer: outputBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(t.params.dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Read back buffers + const inputBufferResult = await t.readGPUBufferRangeTyped(inputBuffer, { + type: arrayType, + typedLength: inputBuffer.size / arrayType.BYTES_PER_ELEMENT + }); + const outputBufferResult = await t.readGPUBufferRangeTyped(outputBuffer, { + type: arrayType, + typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT + }); + + // The one value in the input buffer plus all values in the output buffer + // should contain initial value 0 plus map_id(0..n), unsorted. + const values = new arrayType([...inputBufferResult.data, ...outputBufferResult.data]); + + const expected = new arrayType(values.length); + expected.forEach((_, i) => { + if (i === 0) { + expected[0] = 0; + } else { + expected[i] = mapId.f(i - 1, numInvocations); + } + }); + + // Sort both arrays and compare + values.sort(); + expected.sort(); // Sort because we store hashed results when mapId == 'remap' + t.expectOK(checkElementsEqual(values, expected)); +}); + +g.test('exchange_workgroup_advanced'). +specURL('https://www.w3.org/TR/WGSL/#atomic-load'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicLoad(atomic_ptr: ptr, read_write>) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize; - const scalarType = t.params.scalarType; - const dispatchSize = t.params.dispatchSize; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize; + const scalarType = t.params.scalarType; + const dispatchSize = t.params.dispatchSize; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` var wg: atomic<${scalarType}>; // Will contain the atomicExchange result for each invocation at global index @@ -395,79 +392,79 @@ fn atomicLoad(atomic_ptr: ptr, read_write>) -> T } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - const outputBuffer = t.device.createBuffer({ - size: numInvocations * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const wgCopyBuffer = t.device.createBuffer({ - size: dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: outputBuffer } }, - { binding: 1, resource: { buffer: wgCopyBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Read back buffers - const outputBufferResult = await t.readGPUBufferRangeTyped(outputBuffer, { - type: arrayType, - typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT, - }); - const wgCopyBufferResult = await t.readGPUBufferRangeTyped(wgCopyBuffer, { - type: arrayType, - typedLength: wgCopyBuffer.size / arrayType.BYTES_PER_ELEMENT, - }); - - // For each dispatch, the one value in wgCopyBuffer plus all values in the output buffer - // should contain initial value 0 plus map_id(0..n), unsorted. - - // Expected values for each dispatch - const expected = new arrayType(numInvocations + 1); - expected.forEach((_, i) => { - if (i === 0) { - expected[0] = 0; - } else { - expected[i] = mapId.f(i - 1, numInvocations); - } - }); - expected.sort(); // Sort because we store hashed results when mapId == 'remap' - - // Test values for each dispatch - for (let d = 0; d < dispatchSize; ++d) { - // Get values for this dispatch - const dispatchOffset = d * numInvocations; - const values = new arrayType([ - wgCopyBufferResult.data[d], // Last 'wg' value for this dispatch - ...outputBufferResult.data.subarray(dispatchOffset, dispatchOffset + numInvocations), // Rest of the returned values - ]); - - values.sort(); - t.expectOK(checkElementsEqual(values, expected)); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' } }); + + const arrayType = typedArrayCtor(scalarType); + + const outputBuffer = t.device.createBuffer({ + size: numInvocations * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const wgCopyBuffer = t.device.createBuffer({ + size: dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: outputBuffer } }, + { binding: 1, resource: { buffer: wgCopyBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Read back buffers + const outputBufferResult = await t.readGPUBufferRangeTyped(outputBuffer, { + type: arrayType, + typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT + }); + const wgCopyBufferResult = await t.readGPUBufferRangeTyped(wgCopyBuffer, { + type: arrayType, + typedLength: wgCopyBuffer.size / arrayType.BYTES_PER_ELEMENT + }); + + // For each dispatch, the one value in wgCopyBuffer plus all values in the output buffer + // should contain initial value 0 plus map_id(0..n), unsorted. + + // Expected values for each dispatch + const expected = new arrayType(numInvocations + 1); + expected.forEach((_, i) => { + if (i === 0) { + expected[0] = 0; + } else { + expected[i] = mapId.f(i - 1, numInvocations); + } + }); + expected.sort(); // Sort because we store hashed results when mapId == 'remap' + + // Test values for each dispatch + for (let d = 0; d < dispatchSize; ++d) { + // Get values for this dispatch + const dispatchOffset = d * numInvocations; + const values = new arrayType([ + wgCopyBufferResult.data[d], // Last 'wg' value for this dispatch + ...outputBufferResult.data.subarray(dispatchOffset, dispatchOffset + numInvocations) // Rest of the returned values + ]); + + values.sort(); + t.expectOK(checkElementsEqual(values, expected)); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicLoad.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicLoad.spec.js index 1bcc8bc5601..dca1a6b9d92 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicLoad.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicLoad.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Returns the atomically loaded the value pointed to by atomic_ptr. It does not modify the object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { GPUTest } from '../../../../../../gpu_test.js'; @@ -11,31 +10,31 @@ import { dispatchSizes, workgroupSizes, typedArrayCtor, kMapId } from './harness export const g = makeTestGroup(GPUTest); -g.test('load_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-load') - .desc( - ` +g.test('load_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-load'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicLoad(atomic_ptr: ptr, read_write>) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - const bufferNumElements = numInvocations; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + const bufferNumElements = numInvocations; + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; - const wgsl = ` + const wgsl = ` @group(0) @binding(0) var input : array>; @@ -51,85 +50,85 @@ fn atomicLoad(atomic_ptr: ptr, read_write>) -> T } `; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - // Create input buffer with values [map_id(0)..map_id(n)] - const inputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - t.trackForCleanup(inputBuffer); - const data = new arrayType(inputBuffer.getMappedRange()); - data.forEach((_, i) => (data[i] = mapId.f(i, numInvocations))); - inputBuffer.unmap(); - - const outputBuffer = t.device.createBuffer({ - size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ - { binding: 0, resource: { buffer: inputBuffer } }, - { binding: 1, resource: { buffer: outputBuffer } }, - ], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(t.params.dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Both input and output buffer should be the same now - const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - expected.forEach((_, i) => (expected[i] = mapId.f(i, numInvocations))); - t.expectGPUBufferValuesEqual(inputBuffer, expected); - t.expectGPUBufferValuesEqual(outputBuffer, expected); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('load_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-load') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + // Create input buffer with values [map_id(0)..map_id(n)] + const inputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + mappedAtCreation: true + }); + t.trackForCleanup(inputBuffer); + const data = new arrayType(inputBuffer.getMappedRange()); + data.forEach((_, i) => data[i] = mapId.f(i, numInvocations)); + inputBuffer.unmap(); + + const outputBuffer = t.device.createBuffer({ + size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: inputBuffer } }, + { binding: 1, resource: { buffer: outputBuffer } }] + + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(t.params.dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Both input and output buffer should be the same now + const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + expected.forEach((_, i) => expected[i] = mapId.f(i, numInvocations)); + t.expectGPUBufferValuesEqual(inputBuffer, expected); + t.expectGPUBufferValuesEqual(outputBuffer, expected); +}); + +g.test('load_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-load'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicLoad(atomic_ptr: ptr, read_write>) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize; - const wgNumElements = numInvocations; - const scalarType = t.params.scalarType; - const dispatchSize = t.params.dispatchSize; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize; + const wgNumElements = numInvocations; + const scalarType = t.params.scalarType; + const dispatchSize = t.params.dispatchSize; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` var wg: array, ${wgNumElements}>; // Result of each workgroup is written to output[workgroup_id.x] @@ -153,42 +152,41 @@ fn atomicLoad(atomic_ptr: ptr, read_write>) -> T } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - const outputBuffer = t.device.createBuffer({ - size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Expected values should be map_id(0..n) - const expected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * t.params.dispatchSize - ); - - expected.forEach((_, i) => (expected[i] = mapId.f(i, numInvocations))); - - t.expectGPUBufferValuesEqual(outputBuffer, expected); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); + + const arrayType = typedArrayCtor(scalarType); + + const outputBuffer = t.device.createBuffer({ + size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Expected values should be map_id(0..n) + const expected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * t.params.dispatchSize + ); + expected.forEach((_, i) => expected[i] = mapId.f(i, numInvocations)); + + t.expectGPUBufferValuesEqual(outputBuffer, expected); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMax.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMax.spec.js index 74213806fc0..ae058e909c5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMax.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMax.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, max and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, max and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../../gpu_test.js'; import { @@ -17,86 +16,86 @@ import { workgroupSizes, runStorageVariableTest, runWorkgroupVariableTest, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('max_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('max_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicMax(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - // Allocate one extra element to ensure it doesn't get modified - const bufferNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + // Allocate one extra element to ensure it doesn't get modified + const bufferNumElements = 2; - const initValue = 0; - const op = `atomicMax(&output[0], id)`; - const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - expected[0] = numInvocations - 1; + const initValue = 0; + const op = `atomicMax(&output[0], id)`; + const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + expected[0] = numInvocations - 1; - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected }); +}); -g.test('max_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('max_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicMax(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - // Allocate one extra element to ensure it doesn't get modified - const wgNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + // Allocate one extra element to ensure it doesn't get modified + const wgNumElements = 2; - const initValue = 0; - const op = `atomicMax(&wg[0], id)`; + const initValue = 0; + const op = `atomicMax(&wg[0], id)`; - const expected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * t.params.dispatchSize - ).fill(initValue); - for (let d = 0; d < t.params.dispatchSize; ++d) { - const wg = expected.subarray(d * wgNumElements); - wg[0] = t.params.workgroupSize - 1; - } + const expected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * t.params.dispatchSize + ).fill(initValue); + for (let d = 0; d < t.params.dispatchSize; ++d) { + const wg = expected.subarray(d * wgNumElements); + wg[0] = t.params.workgroupSize - 1; + } - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMin.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMin.spec.js index 9f898123ae7..7d6052c2b17 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMin.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicMin.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, min and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, min and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../../gpu_test.js'; import { @@ -17,85 +16,85 @@ import { workgroupSizes, runStorageVariableTest, runWorkgroupVariableTest, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('min_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('min_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicMin(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - // Allocate one extra element to ensure it doesn't get modified - const bufferNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + // Allocate one extra element to ensure it doesn't get modified + const bufferNumElements = 2; - const initValue = t.params.scalarType === 'u32' ? 0xffffffff : 0x7fffffff; - const op = `atomicMin(&output[0], id)`; - const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements).fill(initValue); - expected[0] = 0; + const initValue = t.params.scalarType === 'u32' ? 0xffffffff : 0x7fffffff; + const op = `atomicMin(&output[0], id)`; + const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements).fill(initValue); + expected[0] = 0; - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected }); +}); -g.test('min_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('min_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicMin(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - // Allocate one extra element to ensure it doesn't get modified - const wgNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + // Allocate one extra element to ensure it doesn't get modified + const wgNumElements = 2; - const initValue = t.params.scalarType === 'u32' ? 0xffffffff : 0x7fffffff; - const op = `atomicMin(&wg[0], id)`; + const initValue = t.params.scalarType === 'u32' ? 0xffffffff : 0x7fffffff; + const op = `atomicMin(&wg[0], id)`; - const expected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * t.params.dispatchSize - ).fill(initValue); - for (let d = 0; d < t.params.dispatchSize; ++d) { - const wg = expected.subarray(d * wgNumElements); - wg[0] = 0; - } + const expected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * t.params.dispatchSize + ).fill(initValue); + for (let d = 0; d < t.params.dispatchSize; ++d) { + const wg = expected.subarray(d * wgNumElements); + wg[0] = 0; + } - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicOr.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicOr.spec.js index f707d23b9bf..32c92d21cca 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicOr.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicOr.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, or and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, or and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { GPUTest } from '../../../../../../gpu_test.js'; @@ -19,114 +18,114 @@ import { runStorageVariableTest, runWorkgroupVariableTest, kMapId, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('or_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('or_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicOr(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - // Allocate an output buffer with bitsize of max invocations plus 1 for validation - const bufferNumElements = Math.max(1, numInvocations / 32) + 1; + // Allocate an output buffer with bitsize of max invocations plus 1 for validation + const bufferNumElements = Math.max(1, numInvocations / 32) + 1; - // Start with all bits low, then using atomicOr to set mapped global id bit on. - // Note: Both WGSL and JS will shift left 1 by id modulo 32. - const initValue = 0; + // Start with all bits low, then using atomicOr to set mapped global id bit on. + // Note: Both WGSL and JS will shift left 1 by id modulo 32. + const initValue = 0; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations); // Defines map_id() - const op = ` + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations); // Defines map_id() + const op = ` let i = map_id(u32(id)); atomicOr(&output[i / 32], ${scalarType}(1) << i) `; - const expected = new (typedArrayCtor(scalarType))(bufferNumElements); - for (let id = 0; id < numInvocations; ++id) { - const i = mapId.f(id, numInvocations); - expected[Math.floor(i / 32)] |= 1 << i; - } + const expected = new (typedArrayCtor(scalarType))(bufferNumElements); + for (let id = 0; id < numInvocations; ++id) { + const i = mapId.f(id, numInvocations); + expected[Math.floor(i / 32)] |= 1 << i; + } - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - extra, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected, + extra }); +}); -g.test('or_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('or_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicOr(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize; - // Allocate workgroup array with bitsize of max invocations plus 1 for validation - const wgNumElements = Math.max(1, numInvocations / 32) + 1; + // Allocate workgroup array with bitsize of max invocations plus 1 for validation + const wgNumElements = Math.max(1, numInvocations / 32) + 1; - // Start with all bits low, then using atomicOr to set mapped local id bit on. - // Note: Both WGSL and JS will shift left 1 by id modulo 32. - const initValue = 0; + // Start with all bits low, then using atomicOr to set mapped local id bit on. + // Note: Both WGSL and JS will shift left 1 by id modulo 32. + const initValue = 0; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations); // Defines map_id() - const op = ` + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations); // Defines map_id() + const op = ` let i = map_id(u32(id)); atomicOr(&wg[i / 32], ${scalarType}(1) << i) `; - const expected = new (typedArrayCtor(scalarType))(wgNumElements * t.params.dispatchSize); - for (let d = 0; d < t.params.dispatchSize; ++d) { - for (let id = 0; id < numInvocations; ++id) { - const wg = expected.subarray(d * wgNumElements); - const i = mapId.f(id, numInvocations); - wg[Math.floor(i / 32)] |= 1 << i; - } + const expected = new (typedArrayCtor(scalarType))(wgNumElements * t.params.dispatchSize); + for (let d = 0; d < t.params.dispatchSize; ++d) { + for (let id = 0; id < numInvocations; ++id) { + const wg = expected.subarray(d * wgNumElements); + const i = mapId.f(id, numInvocations); + wg[Math.floor(i / 32)] |= 1 << i; } + } - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - extra, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected, + extra }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicStore.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicStore.spec.js index 0958a35ef94..1b9b7f70bd9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicStore.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicStore.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically stores the value v in the atomic object pointed to by atomic_ptr. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { GPUTest } from '../../../../../../gpu_test.js'; @@ -13,98 +12,97 @@ import { runStorageVariableTest, runWorkgroupVariableTest, typedArrayCtor, - kMapId, -} from './harness.js'; + kMapId } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('store_storage_basic') - .specURL('https://www.w3.org/TR/WGSL/#atomic-store') - .desc( - ` +g.test('store_storage_basic'). +specURL('https://www.w3.org/TR/WGSL/#atomic-store'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicStore(atomic_ptr: ptr, read_write>, v: T) ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - const bufferNumElements = numInvocations; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + const bufferNumElements = numInvocations; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const initValue = 0; - const op = `atomicStore(&output[id], map_id(id))`; - const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - expected.forEach((_, i) => (expected[i] = mapId.f(i, numInvocations))); + const initValue = 0; + const op = `atomicStore(&output[id], map_id(id))`; + const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + expected.forEach((_, i) => expected[i] = mapId.f(i, numInvocations)); - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - extra, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected, + extra }); +}); -g.test('store_workgroup_basic') - .specURL('https://www.w3.org/TR/WGSL/#atomic-store') - .desc( - ` +g.test('store_workgroup_basic'). +specURL('https://www.w3.org/TR/WGSL/#atomic-store'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicStore(atomic_ptr: ptr, read_write>, v: T) ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize; - const wgNumElements = numInvocations; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize; + const wgNumElements = numInvocations; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const initValue = 0; - const op = `atomicStore(&wg[id], map_id(global_id))`; - const expected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * t.params.dispatchSize - ); + const initValue = 0; + const op = `atomicStore(&wg[id], map_id(global_id))`; + const expected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * t.params.dispatchSize + ); + expected.forEach((_, i) => expected[i] = mapId.f(i, numInvocations)); - expected.forEach((_, i) => (expected[i] = mapId.f(i, numInvocations))); - - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - extra, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected, + extra }); +}); -g.test('store_storage_advanced') - .specURL('https://www.w3.org/TR/WGSL/#atomic-store') - .desc( - ` +g.test('store_storage_advanced'). +specURL('https://www.w3.org/TR/WGSL/#atomic-store'). +desc( + ` AS is storage or workgroup T is i32 or u32 @@ -113,22 +111,22 @@ fn atomicStore(atomic_ptr: ptr, read_write>, v: T) Tests that multiple invocations of atomicStore to the same location returns one of the values written. ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` @group(0) @binding(0) var output : array>; @@ -143,61 +141,61 @@ one of the values written. } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - // Output buffer has only 1 element - const outputBuffer = t.device.createBuffer({ - size: 1 * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(t.params.dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Read back the buffer - const outputBufferResult = ( - await t.readGPUBufferRangeTyped(outputBuffer, { - type: arrayType, - typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT, - }) - ).data; - - // All invocations wrote to the output[0], so validate that it contains one - // of the possible computed values. - const expected_one_of = new arrayType(numInvocations); - expected_one_of.forEach((_, i) => (expected_one_of[i] = mapId.f(i, numInvocations))); - - if (!expected_one_of.includes(outputBufferResult[0])) { - t.fail( - `Unexpected value in output[0]: '${outputBufferResult[0]}, expected value to be one of: ${expected_one_of}` - ); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' } }); -g.test('store_workgroup_advanced') - .specURL('https://www.w3.org/TR/WGSL/#atomic-store') - .desc( - ` + const arrayType = typedArrayCtor(scalarType); + + // Output buffer has only 1 element + const outputBuffer = t.device.createBuffer({ + size: 1 * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(t.params.dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Read back the buffer + const outputBufferResult = ( + await t.readGPUBufferRangeTyped(outputBuffer, { + type: arrayType, + typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT + })). + data; + + // All invocations wrote to the output[0], so validate that it contains one + // of the possible computed values. + const expected_one_of = new arrayType(numInvocations); + expected_one_of.forEach((_, i) => expected_one_of[i] = mapId.f(i, numInvocations)); + + if (!expected_one_of.includes(outputBufferResult[0])) { + t.fail( + `Unexpected value in output[0]: '${outputBufferResult[0]}, expected value to be one of: ${expected_one_of}` + ); + } +}); + +g.test('store_workgroup_advanced'). +specURL('https://www.w3.org/TR/WGSL/#atomic-store'). +desc( + ` AS is storage or workgroup T is i32 or u32 @@ -206,23 +204,23 @@ fn atomicStore(atomic_ptr: ptr, read_write>, v: T) Tests that multiple invocations of atomicStore to the same location returns one of the values written. ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(async t => { - const numInvocations = t.params.workgroupSize; - const scalarType = t.params.scalarType; - const dispatchSize = t.params.dispatchSize; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn(async (t) => { + const numInvocations = t.params.workgroupSize; + const scalarType = t.params.scalarType; + const dispatchSize = t.params.dispatchSize; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations, t.params.scalarType); // Defines map_id() - const wgsl = - ` + const wgsl = + ` var wg: atomic<${scalarType}>; // Result of each workgroup is written to output[workgroup_id.x] @@ -249,55 +247,55 @@ one of the values written. } ` + extra; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - const arrayType = typedArrayCtor(scalarType); - - const outputBuffer = t.device.createBuffer({ - size: dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(dispatchSize); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Read back the buffer - const outputBufferResult = ( - await t.readGPUBufferRangeTyped(outputBuffer, { - type: arrayType, - typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT, - }) - ).data; - - // Each dispatch wrote to a single atomic workgroup var that was copied - // to outputBuffer[dispatch]. Validate that each value in the output buffer - // is one of the possible computed values. - const expected_one_of = new arrayType(numInvocations); - expected_one_of.forEach((_, i) => (expected_one_of[i] = mapId.f(i, numInvocations))); - - for (let d = 0; d < dispatchSize; d++) { - if (!expected_one_of.includes(outputBufferResult[d])) { - t.fail( - `Unexpected value in output[d] for dispatch d '${d}': '${outputBufferResult[d]}', expected value to be one of: ${expected_one_of}` - ); - } + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' } }); + + const arrayType = typedArrayCtor(scalarType); + + const outputBuffer = t.device.createBuffer({ + size: dispatchSize * arrayType.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(outputBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(dispatchSize); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Read back the buffer + const outputBufferResult = ( + await t.readGPUBufferRangeTyped(outputBuffer, { + type: arrayType, + typedLength: outputBuffer.size / arrayType.BYTES_PER_ELEMENT + })). + data; + + // Each dispatch wrote to a single atomic workgroup var that was copied + // to outputBuffer[dispatch]. Validate that each value in the output buffer + // is one of the possible computed values. + const expected_one_of = new arrayType(numInvocations); + expected_one_of.forEach((_, i) => expected_one_of[i] = mapId.f(i, numInvocations)); + + for (let d = 0; d < dispatchSize; d++) { + if (!expected_one_of.includes(outputBufferResult[d])) { + t.fail( + `Unexpected value in output[d] for dispatch d '${d}': '${outputBufferResult[d]}', expected value to be one of: ${expected_one_of}` + ); + } + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicSub.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicSub.spec.js index 20847e48d12..47b1ff8ec5a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicSub.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicSub.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, subtract and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, subtract and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../../gpu_test.js'; import { @@ -17,87 +16,86 @@ import { workgroupSizes, runStorageVariableTest, runWorkgroupVariableTest, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('sub_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('sub_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicSub(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - // Allocate one extra element to ensure it doesn't get modified - const bufferNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; + // Allocate one extra element to ensure it doesn't get modified + const bufferNumElements = 2; - const initValue = 0; - const op = `atomicSub(&output[0], 1)`; - const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); - expected[0] = -1 * numInvocations; + const initValue = 0; + const op = `atomicSub(&output[0], 1)`; + const expected = new (typedArrayCtor(t.params.scalarType))(bufferNumElements); + expected[0] = -1 * numInvocations; - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected }); +}); -g.test('sub_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('sub_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicSub(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - // Allocate one extra element to ensure it doesn't get modified - const wgNumElements = 2; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + // Allocate one extra element to ensure it doesn't get modified + const wgNumElements = 2; - const initValue = 0; - const op = `atomicSub(&wg[0], 1)`; + const initValue = 0; + const op = `atomicSub(&wg[0], 1)`; - const expected = new (typedArrayCtor(t.params.scalarType))( - wgNumElements * t.params.dispatchSize - ); + const expected = new (typedArrayCtor(t.params.scalarType))( + wgNumElements * t.params.dispatchSize + ); + for (let d = 0; d < t.params.dispatchSize; ++d) { + const wg = expected.subarray(d * wgNumElements); + wg[0] = -1 * t.params.workgroupSize; + } - for (let d = 0; d < t.params.dispatchSize; ++d) { - const wg = expected.subarray(d * wgNumElements); - wg[0] = -1 * t.params.workgroupSize; - } - - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicXor.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicXor.spec.js index 7ecb7586e90..88d96211b83 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicXor.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/atomicXor.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Atomically read, xor and store value. * Load the original value pointed to by atomic_ptr. @@ -8,8 +8,7 @@ Atomically read, xor and store value. * Store the new value using atomic_ptr. Returns the original value stored in the atomic object. -`; -import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../../common/util/data_tables.js'; import { GPUTest } from '../../../../../../gpu_test.js'; @@ -19,119 +18,118 @@ import { runStorageVariableTest, runWorkgroupVariableTest, kMapId, - typedArrayCtor, -} from './harness.js'; + typedArrayCtor } from +'./harness.js'; export const g = makeTestGroup(GPUTest); -g.test('xor_storage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('xor_storage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicXor(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize * t.params.dispatchSize; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize * t.params.dispatchSize; - // Allocate an output buffer with bitsize of max invocations plus 1 for validation - const bufferNumElements = Math.max(1, numInvocations / 32) + 1; + // Allocate an output buffer with bitsize of max invocations plus 1 for validation + const bufferNumElements = Math.max(1, numInvocations / 32) + 1; - // Start with all bits set to some random value for each u32 in the buffer, then atomicXor each mapped global id bit. - // Note: Both WGSL and JS will shift left 1 by id modulo 32. - const initValue = 0b11000011010110100000111100111100; + // Start with all bits set to some random value for each u32 in the buffer, then atomicXor each mapped global id bit. + // Note: Both WGSL and JS will shift left 1 by id modulo 32. + const initValue = 0b11000011010110100000111100111100; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations); // Defines map_id() - const op = ` + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations); // Defines map_id() + const op = ` let i = map_id(u32(id)); atomicXor(&output[i / 32], ${scalarType}(1) << i) `; - const expected = new (typedArrayCtor(scalarType))(bufferNumElements).fill(initValue); - for (let id = 0; id < numInvocations; ++id) { - const i = mapId.f(id, numInvocations); - expected[Math.floor(i / 32)] ^= 1 << i; - } + const expected = new (typedArrayCtor(scalarType))(bufferNumElements).fill(initValue); + for (let id = 0; id < numInvocations; ++id) { + const i = mapId.f(id, numInvocations); + expected[Math.floor(i / 32)] ^= 1 << i; + } - runStorageVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - bufferNumElements, - initValue, - op, - expected, - extra, - }); + runStorageVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + bufferNumElements, + initValue, + op, + expected, + extra }); +}); -g.test('xor_workgroup') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('xor_workgroup'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` AS is storage or workgroup T is i32 or u32 fn atomicXor(atomic_ptr: ptr, read_write>, v: T) -> T ` - ) - .params(u => - u - .combine('workgroupSize', workgroupSizes) - .combine('dispatchSize', dispatchSizes) - .combine('mapId', keysOf(kMapId)) - .combine('scalarType', ['u32', 'i32']) - ) - .fn(t => { - const numInvocations = t.params.workgroupSize; +). +params((u) => +u. +combine('workgroupSize', workgroupSizes). +combine('dispatchSize', dispatchSizes). +combine('mapId', keysOf(kMapId)). +combine('scalarType', ['u32', 'i32']) +). +fn((t) => { + const numInvocations = t.params.workgroupSize; - // Allocate workgroup array with bitsize of max invocations plus 1 for validation - const wgNumElements = Math.max(1, numInvocations / 32) + 1; + // Allocate workgroup array with bitsize of max invocations plus 1 for validation + const wgNumElements = Math.max(1, numInvocations / 32) + 1; - // Start with all bits set to some random value for each u32 in the buffer, then atomicXor each mapped global id bit. - // Note: Both WGSL and JS will shift left 1 by id modulo 32. - const initValue = 0b11000011010110100000111100111100; + // Start with all bits set to some random value for each u32 in the buffer, then atomicXor each mapped global id bit. + // Note: Both WGSL and JS will shift left 1 by id modulo 32. + const initValue = 0b11000011010110100000111100111100; - const scalarType = t.params.scalarType; - const mapId = kMapId[t.params.mapId]; - const extra = mapId.wgsl(numInvocations); // Defines map_id() - const op = ` + const scalarType = t.params.scalarType; + const mapId = kMapId[t.params.mapId]; + const extra = mapId.wgsl(numInvocations); // Defines map_id() + const op = ` let i = map_id(u32(id)); atomicXor(&wg[i / 32], ${scalarType}(1) << i) `; - const expected = new (typedArrayCtor(scalarType))(wgNumElements * t.params.dispatchSize).fill( - initValue - ); - - for (let d = 0; d < t.params.dispatchSize; ++d) { - for (let id = 0; id < numInvocations; ++id) { - const wg = expected.subarray(d * wgNumElements); - const i = mapId.f(id, numInvocations); - wg[Math.floor(i / 32)] ^= 1 << i; - } + const expected = new (typedArrayCtor(scalarType))(wgNumElements * t.params.dispatchSize).fill( + initValue + ); + for (let d = 0; d < t.params.dispatchSize; ++d) { + for (let id = 0; id < numInvocations; ++id) { + const wg = expected.subarray(d * wgNumElements); + const i = mapId.f(id, numInvocations); + wg[Math.floor(i / 32)] ^= 1 << i; } + } - runWorkgroupVariableTest({ - t, - workgroupSize: t.params.workgroupSize, - dispatchSize: t.params.dispatchSize, - wgNumElements, - initValue, - op, - expected, - extra, - }); + runWorkgroupVariableTest({ + t, + workgroupSize: t.params.workgroupSize, + dispatchSize: t.params.dispatchSize, + wgNumElements, + initValue, + op, + expected, + extra }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/harness.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/harness.js index f5f7d83fcf6..986814d425e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/harness.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/atomics/harness.js @@ -1,6 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../../../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from + +'../../../../../../../common/util/util.js'; + // Use these in combination. export const workgroupSizes = [1, 2, 32, 64]; @@ -11,15 +14,15 @@ export const onlyWorkgroupSizes = [1, 2, 4, 8, 16, 32, 64, 128, 256]; export const kMapId = { passthrough: { - f: (id, max) => id, - wgsl: (max, scalarType = 'u32') => - `fn map_id(id: ${scalarType}) -> ${scalarType} { return id; }`, + f: (id, _max) => id, + wgsl: (_max, scalarType = 'u32') => + `fn map_id(id: ${scalarType}) -> ${scalarType} { return id; }` }, remap: { - f: (id, max) => (((id >>> 0) * 14957) ^ (((id >>> 0) * 26561) >> 2)) % max, + f: (id, max) => ((id >>> 0) * 14957 ^ (id >>> 0) * 26561 >> 2) % max, wgsl: (max, scalarType = 'u32') => - `fn map_id(id: ${scalarType}) -> ${scalarType} { return ((id * 14957) ^ ((id * 26561) >> 2)) % ${max}; }`, - }, + `fn map_id(id: ${scalarType}) -> ${scalarType} { return ((id * 14957) ^ ((id * 26561) >> 2)) % ${max}; }` + } }; export function typedArrayCtor(scalarType) { @@ -44,7 +47,16 @@ export function runStorageVariableTest({ // and `output` is a storage array of atomics. op, expected, // Expected values array to compare against output buffer - extra, // Optional extra WGSL source + extra // Optional extra WGSL source + + + + + + + + + }) { assert(expected.length === bufferNumElements, "'expected' buffer size is incorrect"); @@ -69,14 +81,14 @@ export function runStorageVariableTest({ layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const outputBuffer = t.device.createBuffer({ size: bufferNumElements * arrayType.BYTES_PER_ELEMENT, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, + mappedAtCreation: true }); // Fill with initial value t.trackForCleanup(outputBuffer); @@ -86,7 +98,7 @@ export function runStorageVariableTest({ const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] }); // Run the shader. @@ -113,7 +125,16 @@ export function runWorkgroupVariableTest({ // dispatch 1 to second workgroupSize elements, etc.). op, expected, // Expected values array to compare against output buffer - extra, // Optional extra WGSL source + extra // Optional extra WGSL source + + + + + + + + + }) { assert(expected.length === wgNumElements * dispatchSize, "'expected' buffer size is incorrect"); @@ -160,18 +181,18 @@ export function runWorkgroupVariableTest({ layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const outputBuffer = t.device.createBuffer({ size: wgNumElements * dispatchSize * arrayType.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] }); // Run the shader. @@ -184,4 +205,4 @@ export function runWorkgroupVariableTest({ t.queue.submit([encoder.finish()]); t.expectGPUBufferValuesEqual(outputBuffer, expected); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.cache.js new file mode 100644 index 00000000000..21311e2f878 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.cache.js @@ -0,0 +1,797 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../../../../../common/util/util.js';import { alwaysPass, anyOf } from '../../../../../util/compare.js';import { kBit, kValue } from '../../../../../util/constants.js'; +import { Vector, f16, f32, i32, toVector, u32 } from '../../../../../util/conversion.js'; +import { FP, FPInterval } from '../../../../../util/floating_point.js'; +import { + cartesianProduct, + fullI32Range, + fullU32Range, + isFiniteF16, + isFiniteF32, + isSubnormalNumberF16, + isSubnormalNumberF32, + linearRange, + scalarF16Range, + scalarF32Range } from +'../../../../../util/math.js'; +import { + reinterpretF16AsU16, + reinterpretF32AsI32, + reinterpretF32AsU32, + reinterpretI32AsF32, + reinterpretI32AsU32, + reinterpretU16AsF16, + reinterpretU32AsF32, + reinterpretU32AsI32 } from +'../../../../../util/reinterpret.js'; +import { makeCaseCache } from '../../case_cache.js'; + +const numNaNs = 11; +const f32InfAndNaNInU32 = [ +// Cover NaNs evenly in integer space. +// The positive NaN with the lowest integer representation is the integer +// for infinity, plus one. +// The positive NaN with the highest integer representation is i32.max (!) +...linearRange(kBit.f32.positive.infinity + 1, kBit.i32.positive.max, numNaNs), +// The negative NaN with the lowest integer representation is the integer +// for negative infinity, plus one. +// The negative NaN with the highest integer representation is u32.max (!) +...linearRange(kBit.f32.negative.infinity + 1, kBit.u32.max, numNaNs), +kBit.f32.positive.infinity, +kBit.f32.negative.infinity]; + +const f32InfAndNaNInF32 = f32InfAndNaNInU32.map((u) => reinterpretU32AsF32(u)); +const f32InfAndNaNInI32 = f32InfAndNaNInU32.map((u) => reinterpretU32AsI32(u)); + +const f32ZerosInU32 = [0, kBit.f32.negative.zero]; +const f32ZerosInF32 = f32ZerosInU32.map((u) => reinterpretU32AsF32(u)); +const f32ZerosInI32 = f32ZerosInU32.map((u) => reinterpretU32AsI32(u)); +const f32ZerosInterval = new FPInterval('f32', -0.0, 0.0); + +// f32FiniteRange is a list of finite f32s. fullF32Range() already +// has +0, we only need to add -0. +const f32FiniteRange = [...scalarF32Range(), kValue.f32.negative.zero]; +const f32RangeWithInfAndNaN = [...f32FiniteRange, ...f32InfAndNaNInF32]; + +// F16 values, finite, Inf/NaN, and zeros. Represented in float and u16. +const f16FiniteInF16 = [...scalarF16Range(), kValue.f16.negative.zero]; +const f16FiniteInU16 = f16FiniteInF16.map((u) => reinterpretF16AsU16(u)); + +const f16InfAndNaNInU16 = [ +// Cover NaNs evenly in integer space. +// The positive NaN with the lowest integer representation is the integer +// for infinity, plus one. +// The positive NaN with the highest integer representation is u16 0x7fff i.e. 32767. +...linearRange(kBit.f16.positive.infinity + 1, 32767, numNaNs).map((v) => Math.ceil(v)), +// The negative NaN with the lowest integer representation is the integer +// for negative infinity, plus one. +// The negative NaN with the highest integer representation is u16 0xffff i.e. 65535 +...linearRange(kBit.f16.negative.infinity + 1, 65535, numNaNs).map((v) => Math.floor(v)), +kBit.f16.positive.infinity, +kBit.f16.negative.infinity]; + +const f16InfAndNaNInF16 = f16InfAndNaNInU16.map((u) => reinterpretU16AsF16(u)); + +const f16ZerosInU16 = [kBit.f16.negative.zero, 0]; + +// f16 interval that match +/-0.0. +const f16ZerosInterval = new FPInterval('f16', -0.0, 0.0); + +/** + * @returns an u32 whose lower and higher 16bits are the two elements of the + * given array of two u16 respectively, in little-endian. + */ +function u16x2ToU32(u16x2) { + assert(u16x2.length === 2); + // Create a DataView with 4 bytes buffer. + const buffer = new ArrayBuffer(4); + const view = new DataView(buffer); + // Enforce little-endian. + view.setUint16(0, u16x2[0], true); + view.setUint16(2, u16x2[1], true); + return view.getUint32(0, true); +} + +/** + * @returns an array of two u16, respectively the lower and higher 16bits of + * given u32 in little-endian. + */ +function u32ToU16x2(u32) { + // Create a DataView with 4 bytes buffer. + const buffer = new ArrayBuffer(4); + const view = new DataView(buffer); + // Enforce little-endian. + view.setUint32(0, u32, true); + return [view.getUint16(0, true), view.getUint16(2, true)]; +} + +/** + * @returns a vec2 from an array of two u16, each reinterpreted as f16. + */ +function u16x2ToVec2F16(u16x2) { + assert(u16x2.length === 2); + return toVector(u16x2.map(reinterpretU16AsF16), f16); +} + +/** + * @returns a vec4 from an array of four u16, each reinterpreted as f16. + */ +function u16x4ToVec4F16(u16x4) { + assert(u16x4.length === 4); + return toVector(u16x4.map(reinterpretU16AsF16), f16); +} + +/** + * @returns true if and only if a given u32 can bitcast to a vec2 with all elements + * being finite f16 values. + */ +function canU32BitcastToFiniteVec2F16(u32) { + return u32ToU16x2(u32). + map((u16) => isFiniteF16(reinterpretU16AsF16(u16))). + reduce((a, b) => a && b, true); +} + +/** + * @returns an array of N elements with the i-th element being an array of len elements + * [a_i, a_((i+1)%N), ..., a_((i+len-1)%N)], for the input array of N element [a_1, ... a_N] + * and the given len. For example, slidingSlice([1, 2, 3], 2) result in + * [[1, 2], [2, 3], [3, 1]]. + * This helper function is used for generating vector cases from scalar values array. + */ +function slidingSlice(input, len) { + const result = []; + for (let i = 0; i < input.length; i++) { + const sub = []; + for (let j = 0; j < len; j++) { + sub.push(input[(i + j) % input.length]); + } + result.push(sub); + } + return result; +} + +// vec2 interesting (zeros, Inf, and NaN) values for testing cases. +// vec2 values that has at least one Inf/NaN f16 element, reinterpreted as u32/i32. +const f16Vec2InfAndNaNInU32 = [ +...cartesianProduct(f16InfAndNaNInU16, [...f16InfAndNaNInU16, ...f16FiniteInU16]), +...cartesianProduct(f16FiniteInU16, f16InfAndNaNInU16)]. +map(u16x2ToU32); +const f16Vec2InfAndNaNInI32 = f16Vec2InfAndNaNInU32.map((u) => reinterpretU32AsI32(u)); +// vec2 values with two f16 0.0 element, reinterpreted as u32/i32. +const f16Vec2ZerosInU32 = cartesianProduct(f16ZerosInU16, f16ZerosInU16).map(u16x2ToU32); +const f16Vec2ZerosInI32 = f16Vec2ZerosInU32.map((u) => reinterpretU32AsI32(u)); + +// i32/u32/f32 range for bitcasting to vec2 +// u32 values for bitcasting to vec2 finite, Inf, and NaN. +const u32RangeForF16Vec2FiniteInfNaN = [ +...fullU32Range(), +...f16Vec2ZerosInU32, +...f16Vec2InfAndNaNInU32]; + +// u32 values for bitcasting to finite only vec2, used for constant evaluation. +const u32RangeForF16Vec2Finite = u32RangeForF16Vec2FiniteInfNaN.filter( + canU32BitcastToFiniteVec2F16 +); +// i32 values for bitcasting to vec2 finite, zeros, Inf, and NaN. +const i32RangeForF16Vec2FiniteInfNaN = [ +...fullI32Range(), +...f16Vec2ZerosInI32, +...f16Vec2InfAndNaNInI32]; + +// i32 values for bitcasting to finite only vec2, used for constant evaluation. +const i32RangeForF16Vec2Finite = i32RangeForF16Vec2FiniteInfNaN.filter((u) => +canU32BitcastToFiniteVec2F16(reinterpretI32AsU32(u)) +); +// f32 values with finite/Inf/NaN f32, for bitcasting to vec2 finite, zeros, Inf, and NaN. +const f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN = [ +...f32RangeWithInfAndNaN, +...u32RangeForF16Vec2FiniteInfNaN.map(reinterpretU32AsF32)]; + +// Finite f32 values for bitcasting to finite only vec2, used for constant evaluation. +const f32FiniteRangeForF16Vec2Finite = f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN. +filter(isFiniteF32). +filter((u) => canU32BitcastToFiniteVec2F16(reinterpretF32AsU32(u))); + +// vec2 cases for bitcasting to i32/u32/f32, by combining f16 values into pairs +const f16Vec2FiniteInU16x2 = slidingSlice(f16FiniteInU16, 2); +const f16Vec2FiniteInfNanInU16x2 = slidingSlice([...f16FiniteInU16, ...f16InfAndNaNInU16], 2); +// vec4 cases for bitcasting to vec2, by combining f16 values 4-by-4 +const f16Vec2FiniteInU16x4 = slidingSlice(f16FiniteInU16, 4); +const f16Vec2FiniteInfNanInU16x4 = slidingSlice([...f16FiniteInU16, ...f16InfAndNaNInU16], 4); + +// alwaysPass comparator for i32/u32/f32 cases. For f32/f16 we also use unbound interval, which +// allow per-element unbounded expectation for vector. +const anyF32 = alwaysPass('any f32'); +const anyI32 = alwaysPass('any i32'); +const anyU32 = alwaysPass('any u32'); + +// Unbounded FPInterval +const f32UnboundedInterval = FP.f32.constants().unboundedInterval; +const f16UnboundedInterval = FP.f16.constants().unboundedInterval; + +// i32 and u32 cases for bitcasting to f32. +// i32 cases for bitcasting to f32 finite, zeros, Inf, and NaN. +const i32RangeForF32FiniteInfNaN = [ +...fullI32Range(), +...f32ZerosInI32, +...f32InfAndNaNInI32]; + +// i32 cases for bitcasting to f32 finite only. +const i32RangeForF32Finite = i32RangeForF32FiniteInfNaN.filter((i) => +isFiniteF32(reinterpretI32AsF32(i)) +); +// u32 cases for bitcasting to f32 finite, zeros, Inf, and NaN. +const u32RangeForF32FiniteInfNaN = [ +...fullU32Range(), +...f32ZerosInU32, +...f32InfAndNaNInU32]; + +// u32 cases for bitcasting to f32 finite only. +const u32RangeForF32Finite = u32RangeForF32FiniteInfNaN.filter((u) => +isFiniteF32(reinterpretU32AsF32(u)) +); + +/** + * @returns a Comparator for checking if a f32 value is a valid + * bitcast conversion from f32. + */ +function bitcastF32ToF32Comparator(f) { + if (!isFiniteF32(f)) return anyF32; + const acceptable = [f, ...(isSubnormalNumberF32(f) ? f32ZerosInF32 : [])]; + return anyOf(...acceptable.map(f32)); +} + +/** + * @returns a Comparator for checking if a u32 value is a valid + * bitcast conversion from f32. + */ +function bitcastF32ToU32Comparator(f) { + if (!isFiniteF32(f)) return anyU32; + const acceptable = [ + reinterpretF32AsU32(f), + ...(isSubnormalNumberF32(f) ? f32ZerosInU32 : [])]; + + return anyOf(...acceptable.map(u32)); +} + +/** + * @returns a Comparator for checking if a i32 value is a valid + * bitcast conversion from f32. + */ +function bitcastF32ToI32Comparator(f) { + if (!isFiniteF32(f)) return anyI32; + const acceptable = [ + reinterpretF32AsI32(f), + ...(isSubnormalNumberF32(f) ? f32ZerosInI32 : [])]; + + return anyOf(...acceptable.map(i32)); +} + +/** + * @returns a Comparator for checking if a f32 value is a valid + * bitcast conversion from i32. + */ +function bitcastI32ToF32Comparator(i) { + const f = reinterpretI32AsF32(i); + if (!isFiniteF32(f)) return anyI32; + // Positive or negative zero bit pattern map to any zero. + if (f32ZerosInI32.includes(i)) return anyOf(...f32ZerosInF32.map(f32)); + const acceptable = [f, ...(isSubnormalNumberF32(f) ? f32ZerosInF32 : [])]; + return anyOf(...acceptable.map(f32)); +} + +/** + * @returns a Comparator for checking if a f32 value is a valid + * bitcast conversion from u32. + */ +function bitcastU32ToF32Comparator(u) { + const f = reinterpretU32AsF32(u); + if (!isFiniteF32(f)) return anyU32; + // Positive or negative zero bit pattern map to any zero. + if (f32ZerosInU32.includes(u)) return anyOf(...f32ZerosInF32.map(f32)); + const acceptable = [f, ...(isSubnormalNumberF32(f) ? f32ZerosInF32 : [])]; + return anyOf(...acceptable.map(f32)); +} + +/** + * @returns an array of expected f16 FPInterval for the given bitcasted f16 value, which may be + * subnormal, Inf, or NaN. Test cases that bitcasted to vector of f16 use this function to get + * per-element expectation and build vector expectation using cartesianProduct. + */ +function generateF16ExpectationIntervals(bitcastedF16Value) { + // If the bitcasted f16 value is inf or nan, the result is unbounded + if (!isFiniteF16(bitcastedF16Value)) { + return [f16UnboundedInterval]; + } + // If the casted f16 value is +/-0.0, the result can be one of both. Note that in JS -0.0 === 0.0. + if (bitcastedF16Value === 0.0) { + return [f16ZerosInterval]; + } + const exactInterval = FP.f16.toInterval(bitcastedF16Value); + // If the casted f16 value is subnormal, it also may be flushed to +/-0.0. + return [exactInterval, ...(isSubnormalNumberF16(bitcastedF16Value) ? [f16ZerosInterval] : [])]; +} + +/** + * @returns a Comparator for checking if a f16 value is a valid + * bitcast conversion from f16. + */ +function bitcastF16ToF16Comparator(f) { + if (!isFiniteF16(f)) return anyOf(f16UnboundedInterval); + return anyOf(...generateF16ExpectationIntervals(f)); +} + +/** + * @returns a Comparator for checking if a vec2 is a valid bitcast + * conversion from u32. + */ +function bitcastU32ToVec2F16Comparator(u) { + const bitcastedVec2F16InU16x2 = u32ToU16x2(u).map(reinterpretU16AsF16); + // Generate expection for vec2 f16 result, by generating expected intervals for each elements and + // then do cartesian product. + const expectedIntervalsCombination = cartesianProduct( + ...bitcastedVec2F16InU16x2.map(generateF16ExpectationIntervals) + ); + return anyOf(...expectedIntervalsCombination); +} + +/** + * @returns a Comparator for checking if a vec2 value is a valid + * bitcast conversion from i32. + */ +function bitcastI32ToVec2F16Comparator(i) { + const bitcastedVec2F16InU16x2 = u32ToU16x2(reinterpretI32AsU32(i)).map(reinterpretU16AsF16); + // Generate expection for vec2 f16 result, by generating expected intervals for each elements and + // then do cartesian product. + const expectedIntervalsCombination = cartesianProduct( + ...bitcastedVec2F16InU16x2.map(generateF16ExpectationIntervals) + ); + return anyOf(...expectedIntervalsCombination); +} + +/** + * @returns a Comparator for checking if a vec2 value is a valid + * bitcast conversion from f32. + */ +function bitcastF32ToVec2F16Comparator(f) { + // If input f32 is not finite, it can be evaluated to any value and thus any result f16 vec2 is + // possible. + if (!isFiniteF32(f)) { + return anyOf([f16UnboundedInterval, f16UnboundedInterval]); + } + const bitcastedVec2F16InU16x2 = u32ToU16x2(reinterpretF32AsU32(f)).map(reinterpretU16AsF16); + // Generate expection for vec2 f16 result, by generating expected intervals for each elements and + // then do cartesian product. + const expectedIntervalsCombination = cartesianProduct( + ...bitcastedVec2F16InU16x2.map(generateF16ExpectationIntervals) + ); + return anyOf(...expectedIntervalsCombination); +} + +/** + * @returns a Comparator for checking if a vec4 is a valid + * bitcast conversion from vec2. + */ +function bitcastVec2U32ToVec4F16Comparator(u32x2) { + assert(u32x2.length === 2); + const bitcastedVec4F16InU16x4 = u32x2.flatMap(u32ToU16x2).map(reinterpretU16AsF16); + // Generate expection for vec4 f16 result, by generating expected intervals for each elements and + // then do cartesian product. + const expectedIntervalsCombination = cartesianProduct( + ...bitcastedVec4F16InU16x4.map(generateF16ExpectationIntervals) + ); + return anyOf(...expectedIntervalsCombination); +} + +/** + * @returns a Comparator for checking if a vec4 is a valid + * bitcast conversion from vec2. + */ +function bitcastVec2I32ToVec4F16Comparator(i32x2) { + assert(i32x2.length === 2); + const bitcastedVec4F16InU16x4 = i32x2. + map(reinterpretI32AsU32). + flatMap(u32ToU16x2). + map(reinterpretU16AsF16); + // Generate expection for vec4 f16 result, by generating expected intervals for each elements and + // then do cartesian product. + const expectedIntervalsCombination = cartesianProduct( + ...bitcastedVec4F16InU16x4.map(generateF16ExpectationIntervals) + ); + return anyOf(...expectedIntervalsCombination); +} + +/** + * @returns a Comparator for checking if a vec4 is a valid + * bitcast conversion from vec2. + */ +function bitcastVec2F32ToVec4F16Comparator(f32x2) { + assert(f32x2.length === 2); + const bitcastedVec4F16InU16x4 = f32x2. + map(reinterpretF32AsU32). + flatMap(u32ToU16x2). + map(reinterpretU16AsF16); + // Generate expection for vec4 f16 result, by generating expected intervals for each elements and + // then do cartesian product. + const expectedIntervalsCombination = cartesianProduct( + ...bitcastedVec4F16InU16x4.map(generateF16ExpectationIntervals) + ); + return anyOf(...expectedIntervalsCombination); +} + +// Structure that store the expectations of a single 32bit scalar/element bitcasted from two f16. + + + + + + + +/** + * @returns the array of possible 16bits, represented in u16, that bitcasted + * from a given finite f16 represented in u16, handling the possible subnormal + * flushing. Used to build up 32bits or larger results. + */ +function possibleBitsInU16FromFiniteF16InU16(f16InU16) { + const h = reinterpretU16AsF16(f16InU16); + assert(isFiniteF16(h)); + return [f16InU16, ...(isSubnormalNumberF16(h) ? f16ZerosInU16 : [])]; +} + +/** + * @returns the expectation for a single 32bit scalar bitcasted from given pair of + * f16, result in ExpectionFor32BitsScalarFromF16x2. + */ +function possible32BitScalarIntervalsFromF16x2( +f16x2InU16x2, +type) +{ + assert(f16x2InU16x2.length === 2); + let reinterpretFromU32; + let expectationsForValue; + let unboundedExpectations; + if (type === 'u32') { + reinterpretFromU32 = (x) => x; + expectationsForValue = (x) => [u32(x)]; + // Scalar expectation can not express "unbounded" for i32 and u32, so use 0 here as a + // placeholder, and the possibleExpectations should be ignored if the result is unbounded. + unboundedExpectations = [u32(0)]; + } else if (type === 'i32') { + reinterpretFromU32 = (x) => reinterpretU32AsI32(x); + expectationsForValue = (x) => [i32(x)]; + // Scalar expectation can not express "unbounded" for i32 and u32, so use 0 here as a + // placeholder, and the possibleExpectations should be ignored if the result is unbounded. + unboundedExpectations = [i32(0)]; + } else { + assert(type === 'f32'); + reinterpretFromU32 = (x) => reinterpretU32AsF32(x); + expectationsForValue = (x) => { + // Handle the possible Inf/NaN/zeros and subnormal cases for f32 result. + if (!isFiniteF32(x)) { + return [f32UnboundedInterval]; + } + // If the casted f16 value is +/-0.0, the result can be one of both. Note that in JS -0.0 === 0.0. + if (x === 0.0) { + return [f32ZerosInterval]; + } + const exactInterval = FP.f32.toInterval(x); + // If the casted f16 value is subnormal, it also may be flushed to +/-0.0. + return [exactInterval, ...(isSubnormalNumberF32(x) ? [f32ZerosInterval] : [])]; + }; + unboundedExpectations = [f32UnboundedInterval]; + } + // Return unbounded expection if f16 Inf/NaN occurs + if ( + !isFiniteF16(reinterpretU16AsF16(f16x2InU16x2[0])) || + !isFiniteF16(reinterpretU16AsF16(f16x2InU16x2[1]))) + { + return { possibleExpectations: unboundedExpectations, isUnbounded: true }; + } + const possibleU16Bits = f16x2InU16x2.map(possibleBitsInU16FromFiniteF16InU16); + const possibleExpectations = cartesianProduct(...possibleU16Bits).flatMap( + (possibleBitsU16x2) => { + assert(possibleBitsU16x2.length === 2); + return expectationsForValue(reinterpretFromU32(u16x2ToU32(possibleBitsU16x2))); + } + ); + return { possibleExpectations, isUnbounded: false }; +} + +/** + * @returns a Comparator for checking if a u32 value is a valid + * bitcast conversion from vec2 f16. + */ +function bitcastVec2F16ToU32Comparator(vec2F16InU16x2) { + assert(vec2F16InU16x2.length === 2); + const expectations = possible32BitScalarIntervalsFromF16x2(vec2F16InU16x2, 'u32'); + // Return alwaysPass if result is expected unbounded. + if (expectations.isUnbounded) { + return anyU32; + } + return anyOf(...expectations.possibleExpectations); +} + +/** + * @returns a Comparator for checking if a i32 value is a valid + * bitcast conversion from vec2 f16. + */ +function bitcastVec2F16ToI32Comparator(vec2F16InU16x2) { + assert(vec2F16InU16x2.length === 2); + const expectations = possible32BitScalarIntervalsFromF16x2(vec2F16InU16x2, 'i32'); + // Return alwaysPass if result is expected unbounded. + if (expectations.isUnbounded) { + return anyI32; + } + return anyOf(...expectations.possibleExpectations); +} + +/** + * @returns a Comparator for checking if a i32 value is a valid + * bitcast conversion from vec2 f16. + */ +function bitcastVec2F16ToF32Comparator(vec2F16InU16x2) { + assert(vec2F16InU16x2.length === 2); + const expectations = possible32BitScalarIntervalsFromF16x2(vec2F16InU16x2, 'f32'); + // Return alwaysPass if result is expected unbounded. + if (expectations.isUnbounded) { + return anyF32; + } + return anyOf(...expectations.possibleExpectations); +} + +/** + * @returns a Comparator for checking if a vec2 u32 value is a valid + * bitcast conversion from vec4 f16. + */ +function bitcastVec4F16ToVec2U32Comparator(vec4F16InU16x4) { + assert(vec4F16InU16x4.length === 4); + const expectationsPerElement = [vec4F16InU16x4.slice(0, 2), vec4F16InU16x4.slice(2, 4)].map((e) => + possible32BitScalarIntervalsFromF16x2(e, 'u32') + ); + // Return alwaysPass if any element is expected unbounded. Although it may be only one unbounded + // element in the result vector, currently we don't have a way to build a comparator that expect + // only one element of i32/u32 vector unbounded. + if (expectationsPerElement.map((e) => e.isUnbounded).reduce((a, b) => a || b, false)) { + return alwaysPass('any vec2'); + } + return anyOf( + ...cartesianProduct(...expectationsPerElement.map((e) => e.possibleExpectations)).map( + (e) => new Vector(e) + ) + ); +} + +/** + * @returns a Comparator for checking if a vec2 i32 value is a valid + * bitcast conversion from vec4 f16. + */ +function bitcastVec4F16ToVec2I32Comparator(vec4F16InU16x4) { + assert(vec4F16InU16x4.length === 4); + const expectationsPerElement = [vec4F16InU16x4.slice(0, 2), vec4F16InU16x4.slice(2, 4)].map((e) => + possible32BitScalarIntervalsFromF16x2(e, 'i32') + ); + // Return alwaysPass if any element is expected unbounded. Although it may be only one unbounded + // element in the result vector, currently we don't have a way to build a comparator that expect + // only one element of i32/u32 vector unbounded. + if (expectationsPerElement.map((e) => e.isUnbounded).reduce((a, b) => a || b, false)) { + return alwaysPass('any vec2'); + } + return anyOf( + ...cartesianProduct(...expectationsPerElement.map((e) => e.possibleExpectations)).map( + (e) => new Vector(e) + ) + ); +} + +/** + * @returns a Comparator for checking if a vec2 f32 value is a valid + * bitcast conversion from vec4 f16. + */ +function bitcastVec4F16ToVec2F32Comparator(vec4F16InU16x4) { + assert(vec4F16InU16x4.length === 4); + const expectationsPerElement = [vec4F16InU16x4.slice(0, 2), vec4F16InU16x4.slice(2, 4)].map((e) => + possible32BitScalarIntervalsFromF16x2(e, 'f32') + ); + return anyOf( + ...cartesianProduct(...expectationsPerElement.map((e) => e.possibleExpectations)).map((e) => [ + e[0], + e[1]] + ) + ); +} + +export const d = makeCaseCache('bitcast', { + // Identity Cases + i32_to_i32: () => fullI32Range().map((e) => ({ input: i32(e), expected: i32(e) })), + u32_to_u32: () => fullU32Range().map((e) => ({ input: u32(e), expected: u32(e) })), + f32_inf_nan_to_f32: () => + f32RangeWithInfAndNaN.map((e) => ({ + input: f32(e), + expected: bitcastF32ToF32Comparator(e) + })), + f32_to_f32: () => + f32FiniteRange.map((e) => ({ input: f32(e), expected: bitcastF32ToF32Comparator(e) })), + f16_inf_nan_to_f16: () => + [...f16FiniteInF16, ...f16InfAndNaNInF16].map((e) => ({ + input: f16(e), + expected: bitcastF16ToF16Comparator(e) + })), + f16_to_f16: () => + f16FiniteInF16.map((e) => ({ input: f16(e), expected: bitcastF16ToF16Comparator(e) })), + + // i32,u32,f32 to different i32,u32,f32 + i32_to_u32: () => fullI32Range().map((e) => ({ input: i32(e), expected: u32(e) })), + i32_to_f32: () => + i32RangeForF32Finite.map((e) => ({ + input: i32(e), + expected: bitcastI32ToF32Comparator(e) + })), + i32_to_f32_inf_nan: () => + i32RangeForF32FiniteInfNaN.map((e) => ({ + input: i32(e), + expected: bitcastI32ToF32Comparator(e) + })), + u32_to_i32: () => fullU32Range().map((e) => ({ input: u32(e), expected: i32(e) })), + u32_to_f32: () => + u32RangeForF32Finite.map((e) => ({ + input: u32(e), + expected: bitcastU32ToF32Comparator(e) + })), + u32_to_f32_inf_nan: () => + u32RangeForF32FiniteInfNaN.map((e) => ({ + input: u32(e), + expected: bitcastU32ToF32Comparator(e) + })), + f32_inf_nan_to_i32: () => + f32RangeWithInfAndNaN.map((e) => ({ + input: f32(e), + expected: bitcastF32ToI32Comparator(e) + })), + f32_to_i32: () => + f32FiniteRange.map((e) => ({ input: f32(e), expected: bitcastF32ToI32Comparator(e) })), + + f32_inf_nan_to_u32: () => + f32RangeWithInfAndNaN.map((e) => ({ + input: f32(e), + expected: bitcastF32ToU32Comparator(e) + })), + f32_to_u32: () => + f32FiniteRange.map((e) => ({ input: f32(e), expected: bitcastF32ToU32Comparator(e) })), + + // i32,u32,f32 to vec2 + u32_to_vec2_f16_inf_nan: () => + u32RangeForF16Vec2FiniteInfNaN.map((e) => ({ + input: u32(e), + expected: bitcastU32ToVec2F16Comparator(e) + })), + u32_to_vec2_f16: () => + u32RangeForF16Vec2Finite.map((e) => ({ + input: u32(e), + expected: bitcastU32ToVec2F16Comparator(e) + })), + i32_to_vec2_f16_inf_nan: () => + i32RangeForF16Vec2FiniteInfNaN.map((e) => ({ + input: i32(e), + expected: bitcastI32ToVec2F16Comparator(e) + })), + i32_to_vec2_f16: () => + i32RangeForF16Vec2Finite.map((e) => ({ + input: i32(e), + expected: bitcastI32ToVec2F16Comparator(e) + })), + f32_inf_nan_to_vec2_f16_inf_nan: () => + f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN.map((e) => ({ + input: f32(e), + expected: bitcastF32ToVec2F16Comparator(e) + })), + f32_to_vec2_f16: () => + f32FiniteRangeForF16Vec2Finite.map((e) => ({ + input: f32(e), + expected: bitcastF32ToVec2F16Comparator(e) + })), + + // vec2, vec2, vec2 to vec4 + vec2_i32_to_vec4_f16_inf_nan: () => + slidingSlice(i32RangeForF16Vec2FiniteInfNaN, 2).map((e) => ({ + input: toVector(e, i32), + expected: bitcastVec2I32ToVec4F16Comparator(e) + })), + vec2_i32_to_vec4_f16: () => + slidingSlice(i32RangeForF16Vec2Finite, 2).map((e) => ({ + input: toVector(e, i32), + expected: bitcastVec2I32ToVec4F16Comparator(e) + })), + vec2_u32_to_vec4_f16_inf_nan: () => + slidingSlice(u32RangeForF16Vec2FiniteInfNaN, 2).map((e) => ({ + input: toVector(e, u32), + expected: bitcastVec2U32ToVec4F16Comparator(e) + })), + vec2_u32_to_vec4_f16: () => + slidingSlice(u32RangeForF16Vec2Finite, 2).map((e) => ({ + input: toVector(e, u32), + expected: bitcastVec2U32ToVec4F16Comparator(e) + })), + vec2_f32_inf_nan_to_vec4_f16_inf_nan: () => + slidingSlice(f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN, 2).map((e) => ({ + input: toVector(e, f32), + expected: bitcastVec2F32ToVec4F16Comparator(e) + })), + vec2_f32_to_vec4_f16: () => + slidingSlice(f32FiniteRangeForF16Vec2Finite, 2).map((e) => ({ + input: toVector(e, f32), + expected: bitcastVec2F32ToVec4F16Comparator(e) + })), + + // vec2 to i32, u32, f32 + vec2_f16_to_u32: () => + f16Vec2FiniteInU16x2.map((e) => ({ + input: u16x2ToVec2F16(e), + expected: bitcastVec2F16ToU32Comparator(e) + })), + vec2_f16_inf_nan_to_u32: () => + f16Vec2FiniteInfNanInU16x2.map((e) => ({ + input: u16x2ToVec2F16(e), + expected: bitcastVec2F16ToU32Comparator(e) + })), + vec2_f16_to_i32: () => + f16Vec2FiniteInU16x2.map((e) => ({ + input: u16x2ToVec2F16(e), + expected: bitcastVec2F16ToI32Comparator(e) + })), + vec2_f16_inf_nan_to_i32: () => + f16Vec2FiniteInfNanInU16x2.map((e) => ({ + input: u16x2ToVec2F16(e), + expected: bitcastVec2F16ToI32Comparator(e) + })), + vec2_f16_to_f32_finite: () => + f16Vec2FiniteInU16x2. + filter((u16x2) => isFiniteF32(reinterpretU32AsF32(u16x2ToU32(u16x2)))). + map((e) => ({ + input: u16x2ToVec2F16(e), + expected: bitcastVec2F16ToF32Comparator(e) + })), + vec2_f16_inf_nan_to_f32: () => + f16Vec2FiniteInfNanInU16x2.map((e) => ({ + input: u16x2ToVec2F16(e), + expected: bitcastVec2F16ToF32Comparator(e) + })), + + // vec4 to vec2 of i32, u32, f32 + vec4_f16_to_vec2_u32: () => + f16Vec2FiniteInU16x4.map((e) => ({ + input: u16x4ToVec4F16(e), + expected: bitcastVec4F16ToVec2U32Comparator(e) + })), + vec4_f16_inf_nan_to_vec2_u32: () => + f16Vec2FiniteInfNanInU16x4.map((e) => ({ + input: u16x4ToVec4F16(e), + expected: bitcastVec4F16ToVec2U32Comparator(e) + })), + vec4_f16_to_vec2_i32: () => + f16Vec2FiniteInU16x4.map((e) => ({ + input: u16x4ToVec4F16(e), + expected: bitcastVec4F16ToVec2I32Comparator(e) + })), + vec4_f16_inf_nan_to_vec2_i32: () => + f16Vec2FiniteInfNanInU16x4.map((e) => ({ + input: u16x4ToVec4F16(e), + expected: bitcastVec4F16ToVec2I32Comparator(e) + })), + vec4_f16_to_vec2_f32_finite: () => + f16Vec2FiniteInU16x4. + filter( + (u16x4) => + isFiniteF32(reinterpretU32AsF32(u16x2ToU32(u16x4.slice(0, 2)))) && + isFiniteF32(reinterpretU32AsF32(u16x2ToU32(u16x4.slice(2, 4)))) + ). + map((e) => ({ + input: u16x4ToVec4F16(e), + expected: bitcastVec4F16ToVec2F32Comparator(e) + })), + vec4_f16_inf_nan_to_vec2_f32: () => + f16Vec2FiniteInfNanInU16x4.map((e) => ({ + input: u16x4ToVec4F16(e), + expected: bitcastVec4F16ToVec2F32Comparator(e) + })) +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.spec.js index 0165d0121e3..d39ed4f6ce1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/bitcast.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'bitcast' builtin function @const @must_use fn bitcast(e: T ) -> T @@ -20,826 +20,24 @@ Reinterpretation of bits. Beware non-normal f32 values. T is i32, u32, f32 `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; -import { assert } from '../../../../../../common/util/util.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { alwaysPass, anyOf } from '../../../../../util/compare.js'; -import { kBit, kValue } from '../../../../../util/constants.js'; -import { - reinterpretI32AsF32, - reinterpretI32AsU32, - reinterpretF32AsI32, - reinterpretF32AsU32, - reinterpretU32AsF32, - reinterpretU32AsI32, - reinterpretU16AsF16, - reinterpretF16AsU16, - f32, - i32, - u32, - f16, - TypeF32, - TypeI32, - TypeU32, - TypeF16, - TypeVec, - Vector, - toVector, -} from '../../../../../util/conversion.js'; -import { FPInterval, FP } from '../../../../../util/floating_point.js'; -import { - fullF32Range, - fullI32Range, - fullU32Range, - fullF16Range, - linearRange, - isSubnormalNumberF32, - isSubnormalNumberF16, - cartesianProduct, - isFiniteF32, - isFiniteF16, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeI32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; +import { d } from './bitcast.cache.js'; import { builtinWithPredeclaration } from './builtin.js'; export const g = makeTestGroup(GPUTest); -const numNaNs = 11; -const f32InfAndNaNInU32 = [ - // Cover NaNs evenly in integer space. - // The positive NaN with the lowest integer representation is the integer - // for infinity, plus one. - // The positive NaN with the highest integer representation is i32.max (!) - ...linearRange(kBit.f32.positive.infinity + 1, kBit.i32.positive.max, numNaNs), - // The negative NaN with the lowest integer representation is the integer - // for negative infinity, plus one. - // The negative NaN with the highest integer representation is u32.max (!) - ...linearRange(kBit.f32.negative.infinity + 1, kBit.u32.max, numNaNs), - kBit.f32.positive.infinity, - kBit.f32.negative.infinity, -]; - -const f32InfAndNaNInF32 = f32InfAndNaNInU32.map(u => reinterpretU32AsF32(u)); -const f32InfAndNaNInI32 = f32InfAndNaNInU32.map(u => reinterpretU32AsI32(u)); - -const f32ZerosInU32 = [0, kBit.f32.negative.zero]; -const f32ZerosInF32 = f32ZerosInU32.map(u => reinterpretU32AsF32(u)); -const f32ZerosInI32 = f32ZerosInU32.map(u => reinterpretU32AsI32(u)); -const f32ZerosInterval = new FPInterval('f32', -0.0, 0.0); - -// f32FiniteRange is a list of finite f32s. fullF32Range() already -// has +0, we only need to add -0. -const f32FiniteRange = [...fullF32Range(), kValue.f32.negative.zero]; -const f32RangeWithInfAndNaN = [...f32FiniteRange, ...f32InfAndNaNInF32]; - -// F16 values, finite, Inf/NaN, and zeros. Represented in float and u16. -const f16FiniteInF16 = [...fullF16Range(), kValue.f16.negative.zero]; -const f16FiniteInU16 = f16FiniteInF16.map(u => reinterpretF16AsU16(u)); - -const f16InfAndNaNInU16 = [ - // Cover NaNs evenly in integer space. - // The positive NaN with the lowest integer representation is the integer - // for infinity, plus one. - // The positive NaN with the highest integer representation is u16 0x7fff i.e. 32767. - ...linearRange(kBit.f16.positive.infinity + 1, 32767, numNaNs).map(v => Math.ceil(v)), - // The negative NaN with the lowest integer representation is the integer - // for negative infinity, plus one. - // The negative NaN with the highest integer representation is u16 0xffff i.e. 65535 - ...linearRange(kBit.f16.negative.infinity + 1, 65535, numNaNs).map(v => Math.floor(v)), - kBit.f16.positive.infinity, - kBit.f16.negative.infinity, -]; - -const f16InfAndNaNInF16 = f16InfAndNaNInU16.map(u => reinterpretU16AsF16(u)); - -const f16ZerosInU16 = [kBit.f16.negative.zero, 0]; - -// f16 interval that match +/-0.0. -const f16ZerosInterval = new FPInterval('f16', -0.0, 0.0); - -/** - * @returns an u32 whose lower and higher 16bits are the two elements of the - * given array of two u16 respectively, in little-endian. - */ -function u16x2ToU32(u16x2) { - assert(u16x2.length === 2); - // Create a DataView with 4 bytes buffer. - const buffer = new ArrayBuffer(4); - const view = new DataView(buffer); - // Enforce little-endian. - view.setUint16(0, u16x2[0], true); - view.setUint16(2, u16x2[1], true); - return view.getUint32(0, true); -} - -/** - * @returns an array of two u16, respectively the lower and higher 16bits of - * given u32 in little-endian. - */ -function u32ToU16x2(u32) { - // Create a DataView with 4 bytes buffer. - const buffer = new ArrayBuffer(4); - const view = new DataView(buffer); - // Enforce little-endian. - view.setUint32(0, u32, true); - return [view.getUint16(0, true), view.getUint16(2, true)]; -} - -/** - * @returns a vec2 from an array of two u16, each reinterpreted as f16. - */ -function u16x2ToVec2F16(u16x2) { - assert(u16x2.length === 2); - return toVector(u16x2.map(reinterpretU16AsF16), f16); -} - -/** - * @returns a vec4 from an array of four u16, each reinterpreted as f16. - */ -function u16x4ToVec4F16(u16x4) { - assert(u16x4.length === 4); - return toVector(u16x4.map(reinterpretU16AsF16), f16); -} - -/** - * @returns true if and only if a given u32 can bitcast to a vec2 with all elements - * being finite f16 values. - */ -function canU32BitcastToFiniteVec2F16(u32) { - return u32ToU16x2(u32) - .map(u16 => isFiniteF16(reinterpretU16AsF16(u16))) - .reduce((a, b) => a && b, true); -} - -/** - * @returns an array of N elements with the i-th element being an array of len elements - * [a_i, a_((i+1)%N), ..., a_((i+len-1)%N)], for the input array of N element [a_1, ... a_N] - * and the given len. For example, slidingSlice([1, 2, 3], 2) result in - * [[1, 2], [2, 3], [3, 1]]. - * This helper function is used for generating vector cases from scalar values array. - */ -function slidingSlice(input, len) { - const result = []; - for (let i = 0; i < input.length; i++) { - const sub = []; - for (let j = 0; j < len; j++) { - sub.push(input[(i + j) % input.length]); - } - result.push(sub); - } - return result; -} - -// vec2 interesting (zeros, Inf, and NaN) values for testing cases. -// vec2 values that has at least one Inf/NaN f16 element, reinterpreted as u32/i32. -const f16Vec2InfAndNaNInU32 = [ - ...cartesianProduct(f16InfAndNaNInU16, [...f16InfAndNaNInU16, ...f16FiniteInU16]), - ...cartesianProduct(f16FiniteInU16, f16InfAndNaNInU16), -].map(u16x2ToU32); -const f16Vec2InfAndNaNInI32 = f16Vec2InfAndNaNInU32.map(u => reinterpretU32AsI32(u)); -// vec2 values with two f16 0.0 element, reinterpreted as u32/i32. -const f16Vec2ZerosInU32 = cartesianProduct(f16ZerosInU16, f16ZerosInU16).map(u16x2ToU32); -const f16Vec2ZerosInI32 = f16Vec2ZerosInU32.map(u => reinterpretU32AsI32(u)); - -// i32/u32/f32 range for bitcasting to vec2 -// u32 values for bitcasting to vec2 finite, Inf, and NaN. -const u32RangeForF16Vec2FiniteInfNaN = [ - ...fullU32Range(), - ...f16Vec2ZerosInU32, - ...f16Vec2InfAndNaNInU32, -]; - -// u32 values for bitcasting to finite only vec2, used for constant evaluation. -const u32RangeForF16Vec2Finite = u32RangeForF16Vec2FiniteInfNaN.filter( - canU32BitcastToFiniteVec2F16 -); - -// i32 values for bitcasting to vec2 finite, zeros, Inf, and NaN. -const i32RangeForF16Vec2FiniteInfNaN = [ - ...fullI32Range(), - ...f16Vec2ZerosInI32, - ...f16Vec2InfAndNaNInI32, -]; - -// i32 values for bitcasting to finite only vec2, used for constant evaluation. -const i32RangeForF16Vec2Finite = i32RangeForF16Vec2FiniteInfNaN.filter(u => - canU32BitcastToFiniteVec2F16(reinterpretI32AsU32(u)) -); - -// f32 values with finite/Inf/NaN f32, for bitcasting to vec2 finite, zeros, Inf, and NaN. -const f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN = [ - ...f32RangeWithInfAndNaN, - ...u32RangeForF16Vec2FiniteInfNaN.map(reinterpretU32AsF32), -]; - -// Finite f32 values for bitcasting to finite only vec2, used for constant evaluation. -const f32FiniteRangeForF16Vec2Finite = f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN - .filter(isFiniteF32) - .filter(u => canU32BitcastToFiniteVec2F16(reinterpretF32AsU32(u))); - -// vec2 cases for bitcasting to i32/u32/f32, by combining f16 values into pairs -const f16Vec2FiniteInU16x2 = slidingSlice(f16FiniteInU16, 2); -const f16Vec2FiniteInfNanInU16x2 = slidingSlice([...f16FiniteInU16, ...f16InfAndNaNInU16], 2); -// vec4 cases for bitcasting to vec2, by combining f16 values 4-by-4 -const f16Vec2FiniteInU16x4 = slidingSlice(f16FiniteInU16, 4); -const f16Vec2FiniteInfNanInU16x4 = slidingSlice([...f16FiniteInU16, ...f16InfAndNaNInU16], 4); - -// alwaysPass comparator for i32/u32/f32 cases. For f32/f16 we also use unbound interval, which -// allow per-element unbounded expectation for vector. -const anyF32 = alwaysPass('any f32'); -const anyI32 = alwaysPass('any i32'); -const anyU32 = alwaysPass('any u32'); - -// Unbounded FPInterval -const f32UnboundedInterval = FP.f32.constants().unboundedInterval; -const f16UnboundedInterval = FP.f16.constants().unboundedInterval; - -// i32 and u32 cases for bitcasting to f32. -// i32 cases for bitcasting to f32 finite, zeros, Inf, and NaN. -const i32RangeForF32FiniteInfNaN = [...fullI32Range(), ...f32ZerosInI32, ...f32InfAndNaNInI32]; - -// i32 cases for bitcasting to f32 finite only. -const i32RangeForF32Finite = i32RangeForF32FiniteInfNaN.filter(i => - isFiniteF32(reinterpretI32AsF32(i)) -); - -// u32 cases for bitcasting to f32 finite, zeros, Inf, and NaN. -const u32RangeForF32FiniteInfNaN = [...fullU32Range(), ...f32ZerosInU32, ...f32InfAndNaNInU32]; - -// u32 cases for bitcasting to f32 finite only. -const u32RangeForF32Finite = u32RangeForF32FiniteInfNaN.filter(u => - isFiniteF32(reinterpretU32AsF32(u)) -); - -/** - * @returns a Comparator for checking if a f32 value is a valid - * bitcast conversion from f32. - */ -function bitcastF32ToF32Comparator(f) { - if (!isFiniteF32(f)) return anyF32; - const acceptable = [f, ...(isSubnormalNumberF32(f) ? f32ZerosInF32 : [])]; - return anyOf(...acceptable.map(f32)); -} - -/** - * @returns a Comparator for checking if a u32 value is a valid - * bitcast conversion from f32. - */ -function bitcastF32ToU32Comparator(f) { - if (!isFiniteF32(f)) return anyU32; - const acceptable = [reinterpretF32AsU32(f), ...(isSubnormalNumberF32(f) ? f32ZerosInU32 : [])]; - - return anyOf(...acceptable.map(u32)); -} - -/** - * @returns a Comparator for checking if a i32 value is a valid - * bitcast conversion from f32. - */ -function bitcastF32ToI32Comparator(f) { - if (!isFiniteF32(f)) return anyI32; - const acceptable = [reinterpretF32AsI32(f), ...(isSubnormalNumberF32(f) ? f32ZerosInI32 : [])]; - - return anyOf(...acceptable.map(i32)); -} - -/** - * @returns a Comparator for checking if a f32 value is a valid - * bitcast conversion from i32. - */ -function bitcastI32ToF32Comparator(i) { - const f = reinterpretI32AsF32(i); - if (!isFiniteF32(f)) return anyI32; - // Positive or negative zero bit pattern map to any zero. - if (f32ZerosInI32.includes(i)) return anyOf(...f32ZerosInF32.map(f32)); - const acceptable = [f, ...(isSubnormalNumberF32(f) ? f32ZerosInF32 : [])]; - return anyOf(...acceptable.map(f32)); -} - -/** - * @returns a Comparator for checking if a f32 value is a valid - * bitcast conversion from u32. - */ -function bitcastU32ToF32Comparator(u) { - const f = reinterpretU32AsF32(u); - if (!isFiniteF32(f)) return anyU32; - // Positive or negative zero bit pattern map to any zero. - if (f32ZerosInU32.includes(u)) return anyOf(...f32ZerosInF32.map(f32)); - const acceptable = [f, ...(isSubnormalNumberF32(f) ? f32ZerosInF32 : [])]; - return anyOf(...acceptable.map(f32)); -} - -/** - * @returns an array of expected f16 FPInterval for the given bitcasted f16 value, which may be - * subnormal, Inf, or NaN. Test cases that bitcasted to vector of f16 use this function to get - * per-element expectation and build vector expectation using cartesianProduct. - */ -function generateF16ExpectationIntervals(bitcastedF16Value) { - // If the bitcasted f16 value is inf or nan, the result is unbounded - if (!isFiniteF16(bitcastedF16Value)) { - return [f16UnboundedInterval]; - } - // If the casted f16 value is +/-0.0, the result can be one of both. Note that in JS -0.0 === 0.0. - if (bitcastedF16Value === 0.0) { - return [f16ZerosInterval]; - } - const exactInterval = FP.f16.toInterval(bitcastedF16Value); - // If the casted f16 value is subnormal, it also may be flushed to +/-0.0. - return [exactInterval, ...(isSubnormalNumberF16(bitcastedF16Value) ? [f16ZerosInterval] : [])]; -} - -/** - * @returns a Comparator for checking if a f16 value is a valid - * bitcast conversion from f16. - */ -function bitcastF16ToF16Comparator(f) { - if (!isFiniteF16(f)) return anyOf(f16UnboundedInterval); - return anyOf(...generateF16ExpectationIntervals(f)); -} - -/** - * @returns a Comparator for checking if a vec2 is a valid bitcast - * conversion from u32. - */ -function bitcastU32ToVec2F16Comparator(u) { - const bitcastedVec2F16InU16x2 = u32ToU16x2(u).map(reinterpretU16AsF16); - // Generate expection for vec2 f16 result, by generating expected intervals for each elements and - // then do cartesian product. - const expectedIntervalsCombination = cartesianProduct( - ...bitcastedVec2F16InU16x2.map(generateF16ExpectationIntervals) - ); - - return anyOf(...expectedIntervalsCombination); -} - -/** - * @returns a Comparator for checking if a vec2 value is a valid - * bitcast conversion from i32. - */ -function bitcastI32ToVec2F16Comparator(i) { - const bitcastedVec2F16InU16x2 = u32ToU16x2(reinterpretI32AsU32(i)).map(reinterpretU16AsF16); - // Generate expection for vec2 f16 result, by generating expected intervals for each elements and - // then do cartesian product. - const expectedIntervalsCombination = cartesianProduct( - ...bitcastedVec2F16InU16x2.map(generateF16ExpectationIntervals) - ); - - return anyOf(...expectedIntervalsCombination); -} - -/** - * @returns a Comparator for checking if a vec2 value is a valid - * bitcast conversion from f32. - */ -function bitcastF32ToVec2F16Comparator(f) { - // If input f32 is not finite, it can be evaluated to any value and thus any result f16 vec2 is - // possible. - if (!isFiniteF32(f)) { - return anyOf([f16UnboundedInterval, f16UnboundedInterval]); - } - const bitcastedVec2F16InU16x2 = u32ToU16x2(reinterpretF32AsU32(f)).map(reinterpretU16AsF16); - // Generate expection for vec2 f16 result, by generating expected intervals for each elements and - // then do cartesian product. - const expectedIntervalsCombination = cartesianProduct( - ...bitcastedVec2F16InU16x2.map(generateF16ExpectationIntervals) - ); - - return anyOf(...expectedIntervalsCombination); -} - -/** - * @returns a Comparator for checking if a vec4 is a valid - * bitcast conversion from vec2. - */ -function bitcastVec2U32ToVec4F16Comparator(u32x2) { - assert(u32x2.length === 2); - const bitcastedVec4F16InU16x4 = u32x2.flatMap(u32ToU16x2).map(reinterpretU16AsF16); - // Generate expection for vec4 f16 result, by generating expected intervals for each elements and - // then do cartesian product. - const expectedIntervalsCombination = cartesianProduct( - ...bitcastedVec4F16InU16x4.map(generateF16ExpectationIntervals) - ); - - return anyOf(...expectedIntervalsCombination); -} - -/** - * @returns a Comparator for checking if a vec4 is a valid - * bitcast conversion from vec2. - */ -function bitcastVec2I32ToVec4F16Comparator(i32x2) { - assert(i32x2.length === 2); - const bitcastedVec4F16InU16x4 = i32x2 - .map(reinterpretI32AsU32) - .flatMap(u32ToU16x2) - .map(reinterpretU16AsF16); - // Generate expection for vec4 f16 result, by generating expected intervals for each elements and - // then do cartesian product. - const expectedIntervalsCombination = cartesianProduct( - ...bitcastedVec4F16InU16x4.map(generateF16ExpectationIntervals) - ); - - return anyOf(...expectedIntervalsCombination); -} - -/** - * @returns a Comparator for checking if a vec4 is a valid - * bitcast conversion from vec2. - */ -function bitcastVec2F32ToVec4F16Comparator(f32x2) { - assert(f32x2.length === 2); - const bitcastedVec4F16InU16x4 = f32x2 - .map(reinterpretF32AsU32) - .flatMap(u32ToU16x2) - .map(reinterpretU16AsF16); - // Generate expection for vec4 f16 result, by generating expected intervals for each elements and - // then do cartesian product. - const expectedIntervalsCombination = cartesianProduct( - ...bitcastedVec4F16InU16x4.map(generateF16ExpectationIntervals) - ); - - return anyOf(...expectedIntervalsCombination); -} - -// Structure that store the expectations of a single 32bit scalar/element bitcasted from two f16. - -/** - * @returns the array of possible 16bits, represented in u16, that bitcasted - * from a given finite f16 represented in u16, handling the possible subnormal - * flushing. Used to build up 32bits or larger results. - */ -function possibleBitsInU16FromFiniteF16InU16(f16InU16) { - const h = reinterpretU16AsF16(f16InU16); - assert(isFiniteF16(h)); - return [f16InU16, ...(isSubnormalNumberF16(h) ? f16ZerosInU16 : [])]; -} - -/** - * @returns the expectation for a single 32bit scalar bitcasted from given pair of - * f16, result in ExpectionFor32BitsScalarFromF16x2. - */ -function possible32BitScalarIntervalsFromF16x2(f16x2InU16x2, type) { - assert(f16x2InU16x2.length === 2); - let reinterpretFromU32; - let expectationsForValue; - let unboundedExpectations; - if (type === 'u32') { - reinterpretFromU32 = x => x; - expectationsForValue = x => [u32(x)]; - // Scalar expectation can not express "unbounded" for i32 and u32, so use 0 here as a - // placeholder, and the possibleExpectations should be ignored if the result is unbounded. - unboundedExpectations = [u32(0)]; - } else if (type === 'i32') { - reinterpretFromU32 = x => reinterpretU32AsI32(x); - expectationsForValue = x => [i32(x)]; - // Scalar expectation can not express "unbounded" for i32 and u32, so use 0 here as a - // placeholder, and the possibleExpectations should be ignored if the result is unbounded. - unboundedExpectations = [i32(0)]; - } else { - assert(type === 'f32'); - reinterpretFromU32 = x => reinterpretU32AsF32(x); - expectationsForValue = x => { - // Handle the possible Inf/NaN/zeros and subnormal cases for f32 result. - if (!isFiniteF32(x)) { - return [f32UnboundedInterval]; - } - // If the casted f16 value is +/-0.0, the result can be one of both. Note that in JS -0.0 === 0.0. - if (x === 0.0) { - return [f32ZerosInterval]; - } - const exactInterval = FP.f32.toInterval(x); - // If the casted f16 value is subnormal, it also may be flushed to +/-0.0. - return [exactInterval, ...(isSubnormalNumberF32(x) ? [f32ZerosInterval] : [])]; - }; - unboundedExpectations = [f32UnboundedInterval]; - } - // Return unbounded expection if f16 Inf/NaN occurs - if ( - !isFiniteF16(reinterpretU16AsF16(f16x2InU16x2[0])) || - !isFiniteF16(reinterpretU16AsF16(f16x2InU16x2[1])) - ) { - return { possibleExpectations: unboundedExpectations, isUnbounded: true }; - } - const possibleU16Bits = f16x2InU16x2.map(possibleBitsInU16FromFiniteF16InU16); - const possibleExpectations = cartesianProduct(...possibleU16Bits).flatMap(possibleBitsU16x2 => { - assert(possibleBitsU16x2.length === 2); - return expectationsForValue(reinterpretFromU32(u16x2ToU32(possibleBitsU16x2))); - }); - - return { possibleExpectations, isUnbounded: false }; -} - -/** - * @returns a Comparator for checking if a u32 value is a valid - * bitcast conversion from vec2 f16. - */ -function bitcastVec2F16ToU32Comparator(vec2F16InU16x2) { - assert(vec2F16InU16x2.length === 2); - const expectations = possible32BitScalarIntervalsFromF16x2(vec2F16InU16x2, 'u32'); - // Return alwaysPass if result is expected unbounded. - if (expectations.isUnbounded) { - return anyU32; - } - return anyOf(...expectations.possibleExpectations); -} - -/** - * @returns a Comparator for checking if a i32 value is a valid - * bitcast conversion from vec2 f16. - */ -function bitcastVec2F16ToI32Comparator(vec2F16InU16x2) { - assert(vec2F16InU16x2.length === 2); - const expectations = possible32BitScalarIntervalsFromF16x2(vec2F16InU16x2, 'i32'); - // Return alwaysPass if result is expected unbounded. - if (expectations.isUnbounded) { - return anyI32; - } - return anyOf(...expectations.possibleExpectations); -} - -/** - * @returns a Comparator for checking if a i32 value is a valid - * bitcast conversion from vec2 f16. - */ -function bitcastVec2F16ToF32Comparator(vec2F16InU16x2) { - assert(vec2F16InU16x2.length === 2); - const expectations = possible32BitScalarIntervalsFromF16x2(vec2F16InU16x2, 'f32'); - // Return alwaysPass if result is expected unbounded. - if (expectations.isUnbounded) { - return anyF32; - } - return anyOf(...expectations.possibleExpectations); -} - -/** - * @returns a Comparator for checking if a vec2 u32 value is a valid - * bitcast conversion from vec4 f16. - */ -function bitcastVec4F16ToVec2U32Comparator(vec4F16InU16x4) { - assert(vec4F16InU16x4.length === 4); - const expectationsPerElement = [vec4F16InU16x4.slice(0, 2), vec4F16InU16x4.slice(2, 4)].map(e => - possible32BitScalarIntervalsFromF16x2(e, 'u32') - ); - - // Return alwaysPass if any element is expected unbounded. Although it may be only one unbounded - // element in the result vector, currently we don't have a way to build a comparator that expect - // only one element of i32/u32 vector unbounded. - if (expectationsPerElement.map(e => e.isUnbounded).reduce((a, b) => a || b, false)) { - return alwaysPass('any vec2'); - } - return anyOf( - ...cartesianProduct(...expectationsPerElement.map(e => e.possibleExpectations)).map( - e => new Vector(e) - ) - ); -} - -/** - * @returns a Comparator for checking if a vec2 i32 value is a valid - * bitcast conversion from vec4 f16. - */ -function bitcastVec4F16ToVec2I32Comparator(vec4F16InU16x4) { - assert(vec4F16InU16x4.length === 4); - const expectationsPerElement = [vec4F16InU16x4.slice(0, 2), vec4F16InU16x4.slice(2, 4)].map(e => - possible32BitScalarIntervalsFromF16x2(e, 'i32') - ); - - // Return alwaysPass if any element is expected unbounded. Although it may be only one unbounded - // element in the result vector, currently we don't have a way to build a comparator that expect - // only one element of i32/u32 vector unbounded. - if (expectationsPerElement.map(e => e.isUnbounded).reduce((a, b) => a || b, false)) { - return alwaysPass('any vec2'); - } - return anyOf( - ...cartesianProduct(...expectationsPerElement.map(e => e.possibleExpectations)).map( - e => new Vector(e) - ) - ); -} - -/** - * @returns a Comparator for checking if a vec2 f32 value is a valid - * bitcast conversion from vec4 f16. - */ -function bitcastVec4F16ToVec2F32Comparator(vec4F16InU16x4) { - assert(vec4F16InU16x4.length === 4); - const expectationsPerElement = [vec4F16InU16x4.slice(0, 2), vec4F16InU16x4.slice(2, 4)].map(e => - possible32BitScalarIntervalsFromF16x2(e, 'f32') - ); - - return anyOf( - ...cartesianProduct(...expectationsPerElement.map(e => e.possibleExpectations)).map(e => [ - e[0], - e[1], - ]) - ); -} - -export const d = makeCaseCache('bitcast', { - // Identity Cases - i32_to_i32: () => fullI32Range().map(e => ({ input: i32(e), expected: i32(e) })), - u32_to_u32: () => fullU32Range().map(e => ({ input: u32(e), expected: u32(e) })), - f32_inf_nan_to_f32: () => - f32RangeWithInfAndNaN.map(e => ({ - input: f32(e), - expected: bitcastF32ToF32Comparator(e), - })), - f32_to_f32: () => - f32FiniteRange.map(e => ({ input: f32(e), expected: bitcastF32ToF32Comparator(e) })), - f16_inf_nan_to_f16: () => - [...f16FiniteInF16, ...f16InfAndNaNInF16].map(e => ({ - input: f16(e), - expected: bitcastF16ToF16Comparator(e), - })), - f16_to_f16: () => - f16FiniteInF16.map(e => ({ input: f16(e), expected: bitcastF16ToF16Comparator(e) })), - - // i32,u32,f32 to different i32,u32,f32 - i32_to_u32: () => fullI32Range().map(e => ({ input: i32(e), expected: u32(e) })), - i32_to_f32: () => - i32RangeForF32Finite.map(e => ({ - input: i32(e), - expected: bitcastI32ToF32Comparator(e), - })), - i32_to_f32_inf_nan: () => - i32RangeForF32FiniteInfNaN.map(e => ({ - input: i32(e), - expected: bitcastI32ToF32Comparator(e), - })), - u32_to_i32: () => fullU32Range().map(e => ({ input: u32(e), expected: i32(e) })), - u32_to_f32: () => - u32RangeForF32Finite.map(e => ({ - input: u32(e), - expected: bitcastU32ToF32Comparator(e), - })), - u32_to_f32_inf_nan: () => - u32RangeForF32FiniteInfNaN.map(e => ({ - input: u32(e), - expected: bitcastU32ToF32Comparator(e), - })), - f32_inf_nan_to_i32: () => - f32RangeWithInfAndNaN.map(e => ({ - input: f32(e), - expected: bitcastF32ToI32Comparator(e), - })), - f32_to_i32: () => - f32FiniteRange.map(e => ({ input: f32(e), expected: bitcastF32ToI32Comparator(e) })), - - f32_inf_nan_to_u32: () => - f32RangeWithInfAndNaN.map(e => ({ - input: f32(e), - expected: bitcastF32ToU32Comparator(e), - })), - f32_to_u32: () => - f32FiniteRange.map(e => ({ input: f32(e), expected: bitcastF32ToU32Comparator(e) })), - - // i32,u32,f32 to vec2 - u32_to_vec2_f16_inf_nan: () => - u32RangeForF16Vec2FiniteInfNaN.map(e => ({ - input: u32(e), - expected: bitcastU32ToVec2F16Comparator(e), - })), - u32_to_vec2_f16: () => - u32RangeForF16Vec2Finite.map(e => ({ - input: u32(e), - expected: bitcastU32ToVec2F16Comparator(e), - })), - i32_to_vec2_f16_inf_nan: () => - i32RangeForF16Vec2FiniteInfNaN.map(e => ({ - input: i32(e), - expected: bitcastI32ToVec2F16Comparator(e), - })), - i32_to_vec2_f16: () => - i32RangeForF16Vec2Finite.map(e => ({ - input: i32(e), - expected: bitcastI32ToVec2F16Comparator(e), - })), - f32_inf_nan_to_vec2_f16_inf_nan: () => - f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN.map(e => ({ - input: f32(e), - expected: bitcastF32ToVec2F16Comparator(e), - })), - f32_to_vec2_f16: () => - f32FiniteRangeForF16Vec2Finite.map(e => ({ - input: f32(e), - expected: bitcastF32ToVec2F16Comparator(e), - })), - - // vec2, vec2, vec2 to vec4 - vec2_i32_to_vec4_f16_inf_nan: () => - slidingSlice(i32RangeForF16Vec2FiniteInfNaN, 2).map(e => ({ - input: toVector(e, i32), - expected: bitcastVec2I32ToVec4F16Comparator(e), - })), - vec2_i32_to_vec4_f16: () => - slidingSlice(i32RangeForF16Vec2Finite, 2).map(e => ({ - input: toVector(e, i32), - expected: bitcastVec2I32ToVec4F16Comparator(e), - })), - vec2_u32_to_vec4_f16_inf_nan: () => - slidingSlice(u32RangeForF16Vec2FiniteInfNaN, 2).map(e => ({ - input: toVector(e, u32), - expected: bitcastVec2U32ToVec4F16Comparator(e), - })), - vec2_u32_to_vec4_f16: () => - slidingSlice(u32RangeForF16Vec2Finite, 2).map(e => ({ - input: toVector(e, u32), - expected: bitcastVec2U32ToVec4F16Comparator(e), - })), - vec2_f32_inf_nan_to_vec4_f16_inf_nan: () => - slidingSlice(f32RangeWithInfAndNaNForF16Vec2FiniteInfNaN, 2).map(e => ({ - input: toVector(e, f32), - expected: bitcastVec2F32ToVec4F16Comparator(e), - })), - vec2_f32_to_vec4_f16: () => - slidingSlice(f32FiniteRangeForF16Vec2Finite, 2).map(e => ({ - input: toVector(e, f32), - expected: bitcastVec2F32ToVec4F16Comparator(e), - })), - - // vec2 to i32, u32, f32 - vec2_f16_to_u32: () => - f16Vec2FiniteInU16x2.map(e => ({ - input: u16x2ToVec2F16(e), - expected: bitcastVec2F16ToU32Comparator(e), - })), - vec2_f16_inf_nan_to_u32: () => - f16Vec2FiniteInfNanInU16x2.map(e => ({ - input: u16x2ToVec2F16(e), - expected: bitcastVec2F16ToU32Comparator(e), - })), - vec2_f16_to_i32: () => - f16Vec2FiniteInU16x2.map(e => ({ - input: u16x2ToVec2F16(e), - expected: bitcastVec2F16ToI32Comparator(e), - })), - vec2_f16_inf_nan_to_i32: () => - f16Vec2FiniteInfNanInU16x2.map(e => ({ - input: u16x2ToVec2F16(e), - expected: bitcastVec2F16ToI32Comparator(e), - })), - vec2_f16_to_f32_finite: () => - f16Vec2FiniteInU16x2 - .filter(u16x2 => isFiniteF32(reinterpretU32AsF32(u16x2ToU32(u16x2)))) - .map(e => ({ - input: u16x2ToVec2F16(e), - expected: bitcastVec2F16ToF32Comparator(e), - })), - vec2_f16_inf_nan_to_f32: () => - f16Vec2FiniteInfNanInU16x2.map(e => ({ - input: u16x2ToVec2F16(e), - expected: bitcastVec2F16ToF32Comparator(e), - })), - - // vec4 to vec2 of i32, u32, f32 - vec4_f16_to_vec2_u32: () => - f16Vec2FiniteInU16x4.map(e => ({ - input: u16x4ToVec4F16(e), - expected: bitcastVec4F16ToVec2U32Comparator(e), - })), - vec4_f16_inf_nan_to_vec2_u32: () => - f16Vec2FiniteInfNanInU16x4.map(e => ({ - input: u16x4ToVec4F16(e), - expected: bitcastVec4F16ToVec2U32Comparator(e), - })), - vec4_f16_to_vec2_i32: () => - f16Vec2FiniteInU16x4.map(e => ({ - input: u16x4ToVec4F16(e), - expected: bitcastVec4F16ToVec2I32Comparator(e), - })), - vec4_f16_inf_nan_to_vec2_i32: () => - f16Vec2FiniteInfNanInU16x4.map(e => ({ - input: u16x4ToVec4F16(e), - expected: bitcastVec4F16ToVec2I32Comparator(e), - })), - vec4_f16_to_vec2_f32_finite: () => - f16Vec2FiniteInU16x4 - .filter( - u16x4 => - isFiniteF32(reinterpretU32AsF32(u16x2ToU32(u16x4.slice(0, 2)))) && - isFiniteF32(reinterpretU32AsF32(u16x2ToU32(u16x4.slice(2, 4)))) - ) - .map(e => ({ - input: u16x4ToVec4F16(e), - expected: bitcastVec4F16ToVec2F32Comparator(e), - })), - vec4_f16_inf_nan_to_vec2_f32: () => - f16Vec2FiniteInfNanInU16x4.map(e => ({ - input: u16x4ToVec4F16(e), - expected: bitcastVec4F16ToVec2F32Comparator(e), - })), -}); - /** * @returns a ShaderBuilder that generates a call to bitcast, * using appropriate destination type, which optionally can be * a WGSL type alias. */ function bitcastBuilder(canonicalDestType, params) { - const destType = params.vectorize - ? `vec${params.vectorize}<${canonicalDestType}>` - : canonicalDestType; + const destType = params.vectorize ? + `vec${params.vectorize}<${canonicalDestType}>` : + canonicalDestType; return builtinWithPredeclaration( `bitcast<${destType}>`, @@ -848,440 +46,422 @@ function bitcastBuilder(canonicalDestType, params) { } // Identity cases -g.test('i32_to_i32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast i32 to i32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get('i32_to_i32'); - await run(t, bitcastBuilder('i32', t.params), [TypeI32], TypeI32, t.params, cases); - }); +g.test('i32_to_i32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast i32 to i32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get('i32_to_i32'); + await run(t, bitcastBuilder('i32', t.params), [TypeI32], TypeI32, t.params, cases); +}); -g.test('u32_to_u32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast u32 to u32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get('u32_to_u32'); - await run(t, bitcastBuilder('u32', t.params), [TypeU32], TypeU32, t.params, cases); - }); +g.test('u32_to_u32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast u32 to u32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get('u32_to_u32'); + await run(t, bitcastBuilder('u32', t.params), [TypeU32], TypeU32, t.params, cases); +}); -g.test('f32_to_f32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast f32 to f32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'f32_to_f32' : 'f32_inf_nan_to_f32' - ); - - await run(t, bitcastBuilder('f32', t.params), [TypeF32], TypeF32, t.params, cases); - }); +g.test('f32_to_f32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast f32 to f32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'f32_to_f32' : 'f32_inf_nan_to_f32' + ); + await run(t, bitcastBuilder('f32', t.params), [TypeF32], TypeF32, t.params, cases); +}); // To i32 from u32, f32 -g.test('u32_to_i32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast u32 to i32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get('u32_to_i32'); - await run(t, bitcastBuilder('i32', t.params), [TypeU32], TypeI32, t.params, cases); - }); +g.test('u32_to_i32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast u32 to i32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get('u32_to_i32'); + await run(t, bitcastBuilder('i32', t.params), [TypeU32], TypeI32, t.params, cases); +}); -g.test('f32_to_i32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast f32 to i32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'f32_to_i32' : 'f32_inf_nan_to_i32' - ); - - await run(t, bitcastBuilder('i32', t.params), [TypeF32], TypeI32, t.params, cases); - }); +g.test('f32_to_i32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast f32 to i32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'f32_to_i32' : 'f32_inf_nan_to_i32' + ); + await run(t, bitcastBuilder('i32', t.params), [TypeF32], TypeI32, t.params, cases); +}); // To u32 from i32, f32 -g.test('i32_to_u32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast i32 to u32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get('i32_to_u32'); - await run(t, bitcastBuilder('u32', t.params), [TypeI32], TypeU32, t.params, cases); - }); +g.test('i32_to_u32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast i32 to u32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get('i32_to_u32'); + await run(t, bitcastBuilder('u32', t.params), [TypeI32], TypeU32, t.params, cases); +}); -g.test('f32_to_u32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast f32 to i32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'f32_to_u32' : 'f32_inf_nan_to_u32' - ); - - await run(t, bitcastBuilder('u32', t.params), [TypeF32], TypeU32, t.params, cases); - }); +g.test('f32_to_u32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast f32 to i32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'f32_to_u32' : 'f32_inf_nan_to_u32' + ); + await run(t, bitcastBuilder('u32', t.params), [TypeF32], TypeU32, t.params, cases); +}); // To f32 from i32, u32 -g.test('i32_to_f32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast i32 to f32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'i32_to_f32' : 'i32_to_f32_inf_nan' - ); +g.test('i32_to_f32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast i32 to f32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'i32_to_f32' : 'i32_to_f32_inf_nan' + ); + await run(t, bitcastBuilder('f32', t.params), [TypeI32], TypeF32, t.params, cases); +}); - await run(t, bitcastBuilder('f32', t.params), [TypeI32], TypeF32, t.params, cases); - }); - -g.test('u32_to_f32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast u32 to f32 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'u32_to_f32' : 'u32_to_f32_inf_nan' - ); - - await run(t, bitcastBuilder('f32', t.params), [TypeU32], TypeF32, t.params, cases); - }); +g.test('u32_to_f32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast u32 to f32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'u32_to_f32' : 'u32_to_f32_inf_nan' + ); + await run(t, bitcastBuilder('f32', t.params), [TypeU32], TypeF32, t.params, cases); +}); // 16 bit types // f16 cases // f16: Identity -g.test('f16_to_f16') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast f16 to f16 tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('vectorize', [undefined, 2, 3, 4]) - .combine('alias', [false, true]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'f16_to_f16' : 'f16_inf_nan_to_f16' - ); - - await run(t, bitcastBuilder('f16', t.params), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16_to_f16'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast f16 to f16 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('vectorize', [undefined, 2, 3, 4]). +combine('alias', [false, true]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'f16_to_f16' : 'f16_inf_nan_to_f16' + ); + await run(t, bitcastBuilder('f16', t.params), [TypeF16], TypeF16, t.params, cases); +}); // f16: 32-bit scalar numeric to vec2 -g.test('i32_to_vec2h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast i32 to vec2h tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'i32_to_vec2_f16' : 'i32_to_vec2_f16_inf_nan' - ); +g.test('i32_to_vec2h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast i32 to vec2h tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'i32_to_vec2_f16' : 'i32_to_vec2_f16_inf_nan' + ); + await run( + t, + bitcastBuilder('vec2', t.params), + [TypeI32], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); - await run( - t, - bitcastBuilder('vec2', t.params), - [TypeI32], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); +g.test('u32_to_vec2h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast u32 to vec2h tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'u32_to_vec2_f16' : 'u32_to_vec2_f16_inf_nan' + ); + await run( + t, + bitcastBuilder('vec2', t.params), + [TypeU32], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); -g.test('u32_to_vec2h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast u32 to vec2h tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'u32_to_vec2_f16' : 'u32_to_vec2_f16_inf_nan' - ); - - await run( - t, - bitcastBuilder('vec2', t.params), - [TypeU32], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); - -g.test('f32_to_vec2h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast u32 to vec2h tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'f32_to_vec2_f16' : 'f32_inf_nan_to_vec2_f16_inf_nan' - ); - - await run( - t, - bitcastBuilder('vec2', t.params), - [TypeF32], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); +g.test('f32_to_vec2h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast u32 to vec2h tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'f32_to_vec2_f16' : 'f32_inf_nan_to_vec2_f16_inf_nan' + ); + await run( + t, + bitcastBuilder('vec2', t.params), + [TypeF32], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); // f16: vec2<32-bit scalar numeric> to vec4 -g.test('vec2i_to_vec4h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec2i to vec4h tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec2_i32_to_vec4_f16' : 'vec2_i32_to_vec4_f16_inf_nan' - ); +g.test('vec2i_to_vec4h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec2i to vec4h tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec2_i32_to_vec4_f16' : 'vec2_i32_to_vec4_f16_inf_nan' + ); + await run( + t, + bitcastBuilder('vec4', t.params), + [TypeVec(2, TypeI32)], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); - await run( - t, - bitcastBuilder('vec4', t.params), - [TypeVec(2, TypeI32)], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); +g.test('vec2u_to_vec4h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec2u to vec4h tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec2_u32_to_vec4_f16' : 'vec2_u32_to_vec4_f16_inf_nan' + ); + await run( + t, + bitcastBuilder('vec4', t.params), + [TypeVec(2, TypeU32)], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); -g.test('vec2u_to_vec4h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec2u to vec4h tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec2_u32_to_vec4_f16' : 'vec2_u32_to_vec4_f16_inf_nan' - ); - - await run( - t, - bitcastBuilder('vec4', t.params), - [TypeVec(2, TypeU32)], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); - -g.test('vec2f_to_vec4h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec2f to vec2h tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' - ? 'vec2_f32_to_vec4_f16' - : 'vec2_f32_inf_nan_to_vec4_f16_inf_nan' - ); - - await run( - t, - bitcastBuilder('vec4', t.params), - [TypeVec(2, TypeF32)], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); +g.test('vec2f_to_vec4h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec2f to vec2h tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? + 'vec2_f32_to_vec4_f16' : + 'vec2_f32_inf_nan_to_vec4_f16_inf_nan' + ); + await run( + t, + bitcastBuilder('vec4', t.params), + [TypeVec(2, TypeF32)], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); // f16: vec2 to 32-bit scalar numeric -g.test('vec2h_to_i32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec2h to i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec2_f16_to_i32' : 'vec2_f16_inf_nan_to_i32' - ); +g.test('vec2h_to_i32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec2h to i32 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec2_f16_to_i32' : 'vec2_f16_inf_nan_to_i32' + ); + await run(t, bitcastBuilder('i32', t.params), [TypeVec(2, TypeF16)], TypeI32, t.params, cases); +}); - await run(t, bitcastBuilder('i32', t.params), [TypeVec(2, TypeF16)], TypeI32, t.params, cases); - }); +g.test('vec2h_to_u32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec2h to u32 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec2_f16_to_u32' : 'vec2_f16_inf_nan_to_u32' + ); + await run(t, bitcastBuilder('u32', t.params), [TypeVec(2, TypeF16)], TypeU32, t.params, cases); +}); -g.test('vec2h_to_u32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec2h to u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec2_f16_to_u32' : 'vec2_f16_inf_nan_to_u32' - ); - - await run(t, bitcastBuilder('u32', t.params), [TypeVec(2, TypeF16)], TypeU32, t.params, cases); - }); - -g.test('vec2h_to_f32') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec2h to f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec2_f16_to_f32_finite' : 'vec2_f16_inf_nan_to_f32' - ); - - await run(t, bitcastBuilder('f32', t.params), [TypeVec(2, TypeF16)], TypeF32, t.params, cases); - }); +g.test('vec2h_to_f32'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec2h to f32 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec2_f16_to_f32_finite' : 'vec2_f16_inf_nan_to_f32' + ); + await run(t, bitcastBuilder('f32', t.params), [TypeVec(2, TypeF16)], TypeF32, t.params, cases); +}); // f16: vec4 to vec2<32-bit scalar numeric> -g.test('vec4h_to_vec2i') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec4h to vec2i tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec4_f16_to_vec2_i32' : 'vec4_f16_inf_nan_to_vec2_i32' - ); +g.test('vec4h_to_vec2i'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec4h to vec2i tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec4_f16_to_vec2_i32' : 'vec4_f16_inf_nan_to_vec2_i32' + ); + await run( + t, + bitcastBuilder('vec2', t.params), + [TypeVec(4, TypeF16)], + TypeVec(2, TypeI32), + t.params, + cases + ); +}); - await run( - t, - bitcastBuilder('vec2', t.params), - [TypeVec(4, TypeF16)], - TypeVec(2, TypeI32), - t.params, - cases - ); - }); +g.test('vec4h_to_vec2u'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec4h to vec2u tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? 'vec4_f16_to_vec2_u32' : 'vec4_f16_inf_nan_to_vec2_u32' + ); + await run( + t, + bitcastBuilder('vec2', t.params), + [TypeVec(4, TypeF16)], + TypeVec(2, TypeU32), + t.params, + cases + ); +}); -g.test('vec4h_to_vec2u') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec4h to vec2u tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' ? 'vec4_f16_to_vec2_u32' : 'vec4_f16_inf_nan_to_vec2_u32' - ); - - await run( - t, - bitcastBuilder('vec2', t.params), - [TypeVec(4, TypeF16)], - TypeVec(2, TypeU32), - t.params, - cases - ); - }); - -g.test('vec4h_to_vec2f') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`bitcast vec4h to vec2f tests`) - .params(u => u.combine('inputSource', allInputSources).combine('alias', [false, true])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - // Infinities and NaNs are errors in const-eval. - t.params.inputSource === 'const' - ? 'vec4_f16_to_vec2_f32_finite' - : 'vec4_f16_inf_nan_to_vec2_f32' - ); - - await run( - t, - bitcastBuilder('vec2', t.params), - [TypeVec(4, TypeF16)], - TypeVec(2, TypeF32), - t.params, - cases - ); - }); +g.test('vec4h_to_vec2f'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`bitcast vec4h to vec2f tests`). +params((u) => u.combine('inputSource', allInputSources).combine('alias', [false, true])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + // Infinities and NaNs are errors in const-eval. + t.params.inputSource === 'const' ? + 'vec4_f16_to_vec2_f32_finite' : + 'vec4_f16_inf_nan_to_vec2_f32' + ); + await run( + t, + bitcastBuilder('vec2', t.params), + [TypeVec(4, TypeF16)], + TypeVec(2, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/builtin.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/builtin.js index 54b9bcc3f37..cd3e52298c0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/builtin.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/builtin.js @@ -1,25 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { - abstractFloatShaderBuilder, - basicExpressionBuilder, - basicExpressionWithPredeclarationBuilder, -} from '../../expression.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { abstractFloatShaderBuilder, basicExpressionBuilder, + basicExpressionWithPredeclarationBuilder } from + +'../../expression.js'; /* @returns a ShaderBuilder that calls the builtin with the given name */ export function builtin(name) { - return basicExpressionBuilder(values => `${name}(${values.join(', ')})`); + return basicExpressionBuilder((values) => `${name}(${values.join(', ')})`); } /* @returns a ShaderBuilder that calls the builtin with the given name that returns AbstractFloats */ export function abstractBuiltin(name) { - return abstractFloatShaderBuilder(values => `${name}(${values.join(', ')})`); + return abstractFloatShaderBuilder((values) => `${name}(${values.join(', ')})`); } /* @returns a ShaderBuilder that calls the builtin with the given name and has given predeclaration */ export function builtinWithPredeclaration(name, predeclaration) { return basicExpressionWithPredeclarationBuilder( - values => `${name}(${values.join(', ')})`, + (values) => `${name}(${values.join(', ')})`, predeclaration ); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.cache.js new file mode 100644 index 00000000000..9faa6b89726 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.cache.js @@ -0,0 +1,25 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +const kSmallMagnitudeTestValues = [0.1, 0.9, 1.0, 1.1, 1.9, -0.1, -0.9, -1.0, -1.1, -1.9]; + +// See https://github.com/gpuweb/cts/issues/2766 for details +const kIssue2766Value = { + f32: 0x8000_0000, + f16: 0x8000 +}; + +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...kSmallMagnitudeTestValues, kIssue2766Value[trait], ...FP[trait].scalarRange()], + 'unfiltered', + FP[trait].ceilInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('ceil', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.spec.js index e8d9bedc8dd..f634fcdcbec 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ceil.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'ceil' builtin function S is AbstractFloat, f32, f16 @@ -8,91 +8,45 @@ T is S or vecN @const fn ceil(e: T ) -> T Returns the ceiling of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './ceil.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('ceil', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // Small positive numbers - 0.1, - 0.9, - 1.0, - 1.1, - 1.9, - // Small negative numbers - -0.1, - -0.9, - -1.0, - -1.1, - -1.9, - 0x80000000, // https://github.com/gpuweb/cts/issues/2766 - ...fullF32Range(), - ], +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - 'unfiltered', - FP.f32.ceilInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // Small positive numbers - 0.1, - 0.9, - 1.0, - 1.1, - 1.9, - // Small negative numbers - -0.1, - -0.9, - -1.0, - -1.1, - -1.9, - 0x8000, // https://github.com/gpuweb/cts/issues/2766 - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.ceilInterval - ); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('ceil'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('ceil'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('ceil'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('ceil'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.cache.js new file mode 100644 index 00000000000..189518963df --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.cache.js @@ -0,0 +1,96 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../../util/constants.js';import { TypeI32, TypeU32 } from '../../../../../util/conversion.js';import { FP } from '../../../../../util/floating_point.js'; + +import { makeCaseCache } from '../../case_cache.js'; + +const u32Values = [0, 1, 2, 3, 0x70000000, 0x80000000, kValue.u32.max]; + +const i32Values = [ +kValue.i32.negative.min, +-3, +-2, +-1, +0, +1, +2, +3, +0x70000000, +kValue.i32.positive.max]; + + +/** @returns a set of clamp test cases from an ascending list of integer values */ +function generateIntegerTestCases( +test_values, +type, +stage) +{ + return test_values.flatMap((low) => + test_values.flatMap((high) => + stage === 'const' && low > high ? + [] : + test_values.map((e) => ({ + input: [type.create(e), type.create(low), type.create(high)], + expected: type.create(Math.min(Math.max(e, low), high)) + })) + ) + ); +} + +function generateFloatTestCases( +test_values, +trait, +stage) +{ + return test_values.flatMap((low) => + test_values.flatMap((high) => + stage === 'const' && low > high ? + [] : + test_values.flatMap((e) => { + const c = FP[trait].makeScalarTripleToIntervalCase( + e, + low, + high, + stage === 'const' ? 'finite' : 'unfiltered', + ...FP[trait].clampIntervals + ); + return c === undefined ? [] : [c]; + }) + ) + ); +} + +// Cases: [f32|f16|abstract]_[non_]const +// abstract_non_const is empty and unused +const fp_cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return generateFloatTestCases( + FP[trait].sparseScalarRange(), + trait, + nonConst ? 'non_const' : 'const' + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('clamp', { + u32_non_const: () => { + return generateIntegerTestCases(u32Values, TypeU32, 'non_const'); + }, + u32_const: () => { + return generateIntegerTestCases(u32Values, TypeU32, 'const'); + }, + i32_non_const: () => { + return generateIntegerTestCases(i32Values, TypeI32, 'non_const'); + }, + i32_const: () => { + return generateIntegerTestCases(i32Values, TypeI32, 'const'); + }, + ...fp_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.spec.js index 49559fc382b..51ff607c6db 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/clamp.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'clamp' builtin function S is AbstractInt, i32, or u32 @@ -13,164 +13,93 @@ T is S or vecN @const clamp(e: T , low: T , high: T) -> T Returns either min(max(e,low),high), or the median of the three values e, low, high. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; import { - TypeF32, - TypeF16, - TypeI32, - TypeU32, TypeAbstractFloat, -} from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { sparseF32Range, sparseF16Range, sparseF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; + TypeF16, + TypeF32, + TypeI32, + TypeU32 } from +'../../../../../util/conversion.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './clamp.cache.js'; export const g = makeTestGroup(GPUTest); -const u32Values = [0, 1, 2, 3, 0x70000000, 0x80000000, kValue.u32.max]; +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`abstract int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const i32Values = [ - kValue.i32.negative.min, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 0x70000000, - kValue.i32.positive.max, -]; - -export const d = makeCaseCache('clamp', { - u32_non_const: () => { - return generateIntegerTestCases(u32Values, TypeU32, 'non-const'); - }, - u32_const: () => { - return generateIntegerTestCases(u32Values, TypeU32, 'const'); - }, - i32_non_const: () => { - return generateIntegerTestCases(i32Values, TypeI32, 'non-const'); - }, - i32_const: () => { - return generateIntegerTestCases(i32Values, TypeI32, 'const'); - }, - f32_const: () => { - return generateFloatTestCases(sparseF32Range(), 'f32', 'const'); - }, - f32_non_const: () => { - return generateFloatTestCases(sparseF32Range(), 'f32', 'non-const'); - }, - f16_const: () => { - return generateFloatTestCases(sparseF16Range(), 'f16', 'const'); - }, - f16_non_const: () => { - return generateFloatTestCases(sparseF16Range(), 'f16', 'non-const'); - }, - abstract: () => { - return generateFloatTestCases(sparseF64Range(), 'abstract', 'const'); - }, +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, builtin('clamp'), [TypeU32, TypeU32, TypeU32], TypeU32, t.params, cases); }); -/** @returns a set of clamp test cases from an ascending list of integer values */ -function generateIntegerTestCases(test_values, type, stage) { - return test_values.flatMap(low => - test_values.flatMap(high => - stage === 'const' && low > high - ? [] - : test_values.map(e => ({ - input: [type.create(e), type.create(low), type.create(high)], - expected: type.create(Math.min(Math.max(e, low), high)), - })) - ) +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'i32_const' : 'i32_non_const'); + await run(t, builtin('clamp'), [TypeI32, TypeI32, TypeI32], TypeI32, t.params, cases); +}); + +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract_const'); + await run( + t, + abstractBuiltin('clamp'), + [TypeAbstractFloat, TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases ); -} +}); -function generateFloatTestCases(test_values, trait, stage) { - return test_values.flatMap(low => - test_values.flatMap(high => - stage === 'const' && low > high - ? [] - : test_values.flatMap(e => { - const c = FP[trait].makeScalarTripleToIntervalCase( - e, - low, - high, - stage === 'const' ? 'finite' : 'unfiltered', - ...FP[trait].clampIntervals - ); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('clamp'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); +}); - return c === undefined ? [] : [c]; - }) - ) - ); -} - -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`abstract int tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, builtin('clamp'), [TypeU32, TypeU32, TypeU32], TypeU32, t.params, cases); - }); - -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'i32_const' : 'i32_non_const'); - await run(t, builtin('clamp'), [TypeI32, TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('clamp'), - [TypeAbstractFloat, TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('clamp'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('clamp'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('clamp'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.cache.js new file mode 100644 index 00000000000..3e24070aad3 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.cache.js @@ -0,0 +1,22 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [ + // Well-defined accuracy range + ...linearRange(-Math.PI, Math.PI, 100), + ...FP[trait].scalarRange()], + + 'unfiltered', + FP[trait].cosInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('cos', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.spec.js index c82efe4fd46..4e2edf6e2f8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cos.spec.js @@ -1,81 +1,57 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'cos' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn cos(e: T ) -> T Returns the cosine of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './cos.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('cos', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // Well-defined accuracy range - ...linearRange(-Math.PI, Math.PI, 1000), - ...fullF32Range(), - ], +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - 'unfiltered', - FP.f32.cosInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // Well-defined accuracy range - ...linearRange(-Math.PI, Math.PI, 1000), - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.cosInterval - ); - }, -}); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` f32 tests TODO(#792): Decide what the ground-truth is for these tests. [1] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('cos'), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('cos'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('cos'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('cos'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.cache.js new file mode 100644 index 00000000000..fca56714d1d --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.cache.js @@ -0,0 +1,19 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].coshInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('cosh', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.spec.js index e478587408c..756f23dcbdc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cosh.spec.js @@ -1,63 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'cosh' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn cosh(e: T ) -> T Returns the hyperbolic cosine of e. Component-wise when T is a vector -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './cosh.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('cosh', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'finite', FP.f32.coshInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.coshInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'finite', FP.f16.coshInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.coshInterval); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('cosh'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('cosh'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('cosh'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('cosh'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countLeadingZeros.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countLeadingZeros.spec.js index 51a7a5ee1ee..8622bef96e5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countLeadingZeros.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countLeadingZeros.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'countLeadingZeros' builtin function S is i32 or u32 @@ -10,8 +10,7 @@ The number of consecutive 0 bits starting from the most significant bit of e, when T is a scalar type. Component-wise when T is a vector. Also known as "clz" in some languages. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeU32, u32Bits, u32, TypeI32, i32Bits, i32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; @@ -20,228 +19,232 @@ import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('countLeadingZeros'), [TypeU32], TypeU32, cfg, [ - // Zero - { input: u32Bits(0b00000000000000000000000000000000), expected: u32(32) }, +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('countLeadingZeros'), [TypeU32], TypeU32, cfg, [ + // Zero + { input: u32Bits(0b00000000000000000000000000000000), expected: u32(32) }, - // One - { input: u32Bits(0b00000000000000000000000000000001), expected: u32(31) }, + // One + { input: u32Bits(0b00000000000000000000000000000001), expected: u32(31) }, - // 0's after leading 1 - { input: u32Bits(0b00000000000000000000000000000010), expected: u32(30) }, - { input: u32Bits(0b00000000000000000000000000000100), expected: u32(29) }, - { input: u32Bits(0b00000000000000000000000000001000), expected: u32(28) }, - { input: u32Bits(0b00000000000000000000000000010000), expected: u32(27) }, - { input: u32Bits(0b00000000000000000000000000100000), expected: u32(26) }, - { input: u32Bits(0b00000000000000000000000001000000), expected: u32(25) }, - { input: u32Bits(0b00000000000000000000000010000000), expected: u32(24) }, - { input: u32Bits(0b00000000000000000000000100000000), expected: u32(23) }, - { input: u32Bits(0b00000000000000000000001000000000), expected: u32(22) }, - { input: u32Bits(0b00000000000000000000010000000000), expected: u32(21) }, - { input: u32Bits(0b00000000000000000000100000000000), expected: u32(20) }, - { input: u32Bits(0b00000000000000000001000000000000), expected: u32(19) }, - { input: u32Bits(0b00000000000000000010000000000000), expected: u32(18) }, - { input: u32Bits(0b00000000000000000100000000000000), expected: u32(17) }, - { input: u32Bits(0b00000000000000001000000000000000), expected: u32(16) }, - { input: u32Bits(0b00000000000000010000000000000000), expected: u32(15) }, - { input: u32Bits(0b00000000000000100000000000000000), expected: u32(14) }, - { input: u32Bits(0b00000000000001000000000000000000), expected: u32(13) }, - { input: u32Bits(0b00000000000010000000000000000000), expected: u32(12) }, - { input: u32Bits(0b00000000000100000000000000000000), expected: u32(11) }, - { input: u32Bits(0b00000000001000000000000000000000), expected: u32(10) }, - { input: u32Bits(0b00000000010000000000000000000000), expected: u32(9) }, - { input: u32Bits(0b00000000100000000000000000000000), expected: u32(8) }, - { input: u32Bits(0b00000001000000000000000000000000), expected: u32(7) }, - { input: u32Bits(0b00000010000000000000000000000000), expected: u32(6) }, - { input: u32Bits(0b00000100000000000000000000000000), expected: u32(5) }, - { input: u32Bits(0b00001000000000000000000000000000), expected: u32(4) }, - { input: u32Bits(0b00010000000000000000000000000000), expected: u32(3) }, - { input: u32Bits(0b00100000000000000000000000000000), expected: u32(2) }, - { input: u32Bits(0b01000000000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b10000000000000000000000000000000), expected: u32(0) }, + // 0's after leading 1 + { input: u32Bits(0b00000000000000000000000000000010), expected: u32(30) }, + { input: u32Bits(0b00000000000000000000000000000100), expected: u32(29) }, + { input: u32Bits(0b00000000000000000000000000001000), expected: u32(28) }, + { input: u32Bits(0b00000000000000000000000000010000), expected: u32(27) }, + { input: u32Bits(0b00000000000000000000000000100000), expected: u32(26) }, + { input: u32Bits(0b00000000000000000000000001000000), expected: u32(25) }, + { input: u32Bits(0b00000000000000000000000010000000), expected: u32(24) }, + { input: u32Bits(0b00000000000000000000000100000000), expected: u32(23) }, + { input: u32Bits(0b00000000000000000000001000000000), expected: u32(22) }, + { input: u32Bits(0b00000000000000000000010000000000), expected: u32(21) }, + { input: u32Bits(0b00000000000000000000100000000000), expected: u32(20) }, + { input: u32Bits(0b00000000000000000001000000000000), expected: u32(19) }, + { input: u32Bits(0b00000000000000000010000000000000), expected: u32(18) }, + { input: u32Bits(0b00000000000000000100000000000000), expected: u32(17) }, + { input: u32Bits(0b00000000000000001000000000000000), expected: u32(16) }, + { input: u32Bits(0b00000000000000010000000000000000), expected: u32(15) }, + { input: u32Bits(0b00000000000000100000000000000000), expected: u32(14) }, + { input: u32Bits(0b00000000000001000000000000000000), expected: u32(13) }, + { input: u32Bits(0b00000000000010000000000000000000), expected: u32(12) }, + { input: u32Bits(0b00000000000100000000000000000000), expected: u32(11) }, + { input: u32Bits(0b00000000001000000000000000000000), expected: u32(10) }, + { input: u32Bits(0b00000000010000000000000000000000), expected: u32(9) }, + { input: u32Bits(0b00000000100000000000000000000000), expected: u32(8) }, + { input: u32Bits(0b00000001000000000000000000000000), expected: u32(7) }, + { input: u32Bits(0b00000010000000000000000000000000), expected: u32(6) }, + { input: u32Bits(0b00000100000000000000000000000000), expected: u32(5) }, + { input: u32Bits(0b00001000000000000000000000000000), expected: u32(4) }, + { input: u32Bits(0b00010000000000000000000000000000), expected: u32(3) }, + { input: u32Bits(0b00100000000000000000000000000000), expected: u32(2) }, + { input: u32Bits(0b01000000000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b10000000000000000000000000000000), expected: u32(0) }, - // 1's after leading 1 - { input: u32Bits(0b00000000000000000000000000000011), expected: u32(30) }, - { input: u32Bits(0b00000000000000000000000000000111), expected: u32(29) }, - { input: u32Bits(0b00000000000000000000000000001111), expected: u32(28) }, - { input: u32Bits(0b00000000000000000000000000011111), expected: u32(27) }, - { input: u32Bits(0b00000000000000000000000000111111), expected: u32(26) }, - { input: u32Bits(0b00000000000000000000000001111111), expected: u32(25) }, - { input: u32Bits(0b00000000000000000000000011111111), expected: u32(24) }, - { input: u32Bits(0b00000000000000000000000111111111), expected: u32(23) }, - { input: u32Bits(0b00000000000000000000001111111111), expected: u32(22) }, - { input: u32Bits(0b00000000000000000000011111111111), expected: u32(21) }, - { input: u32Bits(0b00000000000000000000111111111111), expected: u32(20) }, - { input: u32Bits(0b00000000000000000001111111111111), expected: u32(19) }, - { input: u32Bits(0b00000000000000000011111111111111), expected: u32(18) }, - { input: u32Bits(0b00000000000000000111111111111111), expected: u32(17) }, - { input: u32Bits(0b00000000000000001111111111111111), expected: u32(16) }, - { input: u32Bits(0b00000000000000011111111111111111), expected: u32(15) }, - { input: u32Bits(0b00000000000000111111111111111111), expected: u32(14) }, - { input: u32Bits(0b00000000000001111111111111111111), expected: u32(13) }, - { input: u32Bits(0b00000000000011111111111111111111), expected: u32(12) }, - { input: u32Bits(0b00000000000111111111111111111111), expected: u32(11) }, - { input: u32Bits(0b00000000001111111111111111111111), expected: u32(10) }, - { input: u32Bits(0b00000000011111111111111111111111), expected: u32(9) }, - { input: u32Bits(0b00000000111111111111111111111111), expected: u32(8) }, - { input: u32Bits(0b00000001111111111111111111111111), expected: u32(7) }, - { input: u32Bits(0b00000011111111111111111111111111), expected: u32(6) }, - { input: u32Bits(0b00000111111111111111111111111111), expected: u32(5) }, - { input: u32Bits(0b00001111111111111111111111111111), expected: u32(4) }, - { input: u32Bits(0b00011111111111111111111111111111), expected: u32(3) }, - { input: u32Bits(0b00111111111111111111111111111111), expected: u32(2) }, - { input: u32Bits(0b01111111111111111111111111111111), expected: u32(1) }, - { input: u32Bits(0b11111111111111111111111111111111), expected: u32(0) }, + // 1's after leading 1 + { input: u32Bits(0b00000000000000000000000000000011), expected: u32(30) }, + { input: u32Bits(0b00000000000000000000000000000111), expected: u32(29) }, + { input: u32Bits(0b00000000000000000000000000001111), expected: u32(28) }, + { input: u32Bits(0b00000000000000000000000000011111), expected: u32(27) }, + { input: u32Bits(0b00000000000000000000000000111111), expected: u32(26) }, + { input: u32Bits(0b00000000000000000000000001111111), expected: u32(25) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32(24) }, + { input: u32Bits(0b00000000000000000000000111111111), expected: u32(23) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32(22) }, + { input: u32Bits(0b00000000000000000000011111111111), expected: u32(21) }, + { input: u32Bits(0b00000000000000000000111111111111), expected: u32(20) }, + { input: u32Bits(0b00000000000000000001111111111111), expected: u32(19) }, + { input: u32Bits(0b00000000000000000011111111111111), expected: u32(18) }, + { input: u32Bits(0b00000000000000000111111111111111), expected: u32(17) }, + { input: u32Bits(0b00000000000000001111111111111111), expected: u32(16) }, + { input: u32Bits(0b00000000000000011111111111111111), expected: u32(15) }, + { input: u32Bits(0b00000000000000111111111111111111), expected: u32(14) }, + { input: u32Bits(0b00000000000001111111111111111111), expected: u32(13) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32(12) }, + { input: u32Bits(0b00000000000111111111111111111111), expected: u32(11) }, + { input: u32Bits(0b00000000001111111111111111111111), expected: u32(10) }, + { input: u32Bits(0b00000000011111111111111111111111), expected: u32(9) }, + { input: u32Bits(0b00000000111111111111111111111111), expected: u32(8) }, + { input: u32Bits(0b00000001111111111111111111111111), expected: u32(7) }, + { input: u32Bits(0b00000011111111111111111111111111), expected: u32(6) }, + { input: u32Bits(0b00000111111111111111111111111111), expected: u32(5) }, + { input: u32Bits(0b00001111111111111111111111111111), expected: u32(4) }, + { input: u32Bits(0b00011111111111111111111111111111), expected: u32(3) }, + { input: u32Bits(0b00111111111111111111111111111111), expected: u32(2) }, + { input: u32Bits(0b01111111111111111111111111111111), expected: u32(1) }, + { input: u32Bits(0b11111111111111111111111111111111), expected: u32(0) }, - // random after leading 1 - { input: u32Bits(0b00000000000000000000000000000110), expected: u32(29) }, - { input: u32Bits(0b00000000000000000000000000001101), expected: u32(28) }, - { input: u32Bits(0b00000000000000000000000000011101), expected: u32(27) }, - { input: u32Bits(0b00000000000000000000000000111001), expected: u32(26) }, - { input: u32Bits(0b00000000000000000000000001101111), expected: u32(25) }, - { input: u32Bits(0b00000000000000000000000011111111), expected: u32(24) }, - { input: u32Bits(0b00000000000000000000000111101111), expected: u32(23) }, - { input: u32Bits(0b00000000000000000000001111111111), expected: u32(22) }, - { input: u32Bits(0b00000000000000000000011111110001), expected: u32(21) }, - { input: u32Bits(0b00000000000000000000111011011101), expected: u32(20) }, - { input: u32Bits(0b00000000000000000001101101111111), expected: u32(19) }, - { input: u32Bits(0b00000000000000000011111111011111), expected: u32(18) }, - { input: u32Bits(0b00000000000000000101111001110101), expected: u32(17) }, - { input: u32Bits(0b00000000000000001101111011110111), expected: u32(16) }, - { input: u32Bits(0b00000000000000011111111111110011), expected: u32(15) }, - { input: u32Bits(0b00000000000000111111111110111111), expected: u32(14) }, - { input: u32Bits(0b00000000000001111111011111111111), expected: u32(13) }, - { input: u32Bits(0b00000000000011111111111111111111), expected: u32(12) }, - { input: u32Bits(0b00000000000111110101011110111111), expected: u32(11) }, - { input: u32Bits(0b00000000001111101111111111110111), expected: u32(10) }, - { input: u32Bits(0b00000000011111111111010000101111), expected: u32(9) }, - { input: u32Bits(0b00000000111111111111001111111011), expected: u32(8) }, - { input: u32Bits(0b00000001111111011111101111111111), expected: u32(7) }, - { input: u32Bits(0b00000011101011111011110111111011), expected: u32(6) }, - { input: u32Bits(0b00000111111110111111111111111111), expected: u32(5) }, - { input: u32Bits(0b00001111000000011011011110111111), expected: u32(4) }, - { input: u32Bits(0b00011110101111011111111111111111), expected: u32(3) }, - { input: u32Bits(0b00110110111111100111111110111101), expected: u32(2) }, - { input: u32Bits(0b01010111111101111111011111011111), expected: u32(1) }, - { input: u32Bits(0b11100010011110101101101110101111), expected: u32(0) }, - ]); - }); + // random after leading 1 + { input: u32Bits(0b00000000000000000000000000000110), expected: u32(29) }, + { input: u32Bits(0b00000000000000000000000000001101), expected: u32(28) }, + { input: u32Bits(0b00000000000000000000000000011101), expected: u32(27) }, + { input: u32Bits(0b00000000000000000000000000111001), expected: u32(26) }, + { input: u32Bits(0b00000000000000000000000001101111), expected: u32(25) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32(24) }, + { input: u32Bits(0b00000000000000000000000111101111), expected: u32(23) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32(22) }, + { input: u32Bits(0b00000000000000000000011111110001), expected: u32(21) }, + { input: u32Bits(0b00000000000000000000111011011101), expected: u32(20) }, + { input: u32Bits(0b00000000000000000001101101111111), expected: u32(19) }, + { input: u32Bits(0b00000000000000000011111111011111), expected: u32(18) }, + { input: u32Bits(0b00000000000000000101111001110101), expected: u32(17) }, + { input: u32Bits(0b00000000000000001101111011110111), expected: u32(16) }, + { input: u32Bits(0b00000000000000011111111111110011), expected: u32(15) }, + { input: u32Bits(0b00000000000000111111111110111111), expected: u32(14) }, + { input: u32Bits(0b00000000000001111111011111111111), expected: u32(13) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32(12) }, + { input: u32Bits(0b00000000000111110101011110111111), expected: u32(11) }, + { input: u32Bits(0b00000000001111101111111111110111), expected: u32(10) }, + { input: u32Bits(0b00000000011111111111010000101111), expected: u32(9) }, + { input: u32Bits(0b00000000111111111111001111111011), expected: u32(8) }, + { input: u32Bits(0b00000001111111011111101111111111), expected: u32(7) }, + { input: u32Bits(0b00000011101011111011110111111011), expected: u32(6) }, + { input: u32Bits(0b00000111111110111111111111111111), expected: u32(5) }, + { input: u32Bits(0b00001111000000011011011110111111), expected: u32(4) }, + { input: u32Bits(0b00011110101111011111111111111111), expected: u32(3) }, + { input: u32Bits(0b00110110111111100111111110111101), expected: u32(2) }, + { input: u32Bits(0b01010111111101111111011111011111), expected: u32(1) }, + { input: u32Bits(0b11100010011110101101101110101111), expected: u32(0) }] + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('countLeadingZeros'), [TypeI32], TypeI32, cfg, [ - // Zero - { input: i32Bits(0b00000000000000000000000000000000), expected: i32(32) }, +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('countLeadingZeros'), [TypeI32], TypeI32, cfg, [ + // Zero + { input: i32Bits(0b00000000000000000000000000000000), expected: i32(32) }, - // One - { input: i32Bits(0b00000000000000000000000000000001), expected: i32(31) }, + // One + { input: i32Bits(0b00000000000000000000000000000001), expected: i32(31) }, - // 0's after leading 1 - { input: i32Bits(0b00000000000000000000000000000010), expected: i32(30) }, - { input: i32Bits(0b00000000000000000000000000000100), expected: i32(29) }, - { input: i32Bits(0b00000000000000000000000000001000), expected: i32(28) }, - { input: i32Bits(0b00000000000000000000000000010000), expected: i32(27) }, - { input: i32Bits(0b00000000000000000000000000100000), expected: i32(26) }, - { input: i32Bits(0b00000000000000000000000001000000), expected: i32(25) }, - { input: i32Bits(0b00000000000000000000000010000000), expected: i32(24) }, - { input: i32Bits(0b00000000000000000000000100000000), expected: i32(23) }, - { input: i32Bits(0b00000000000000000000001000000000), expected: i32(22) }, - { input: i32Bits(0b00000000000000000000010000000000), expected: i32(21) }, - { input: i32Bits(0b00000000000000000000100000000000), expected: i32(20) }, - { input: i32Bits(0b00000000000000000001000000000000), expected: i32(19) }, - { input: i32Bits(0b00000000000000000010000000000000), expected: i32(18) }, - { input: i32Bits(0b00000000000000000100000000000000), expected: i32(17) }, - { input: i32Bits(0b00000000000000001000000000000000), expected: i32(16) }, - { input: i32Bits(0b00000000000000010000000000000000), expected: i32(15) }, - { input: i32Bits(0b00000000000000100000000000000000), expected: i32(14) }, - { input: i32Bits(0b00000000000001000000000000000000), expected: i32(13) }, - { input: i32Bits(0b00000000000010000000000000000000), expected: i32(12) }, - { input: i32Bits(0b00000000000100000000000000000000), expected: i32(11) }, - { input: i32Bits(0b00000000001000000000000000000000), expected: i32(10) }, - { input: i32Bits(0b00000000010000000000000000000000), expected: i32(9) }, - { input: i32Bits(0b00000000100000000000000000000000), expected: i32(8) }, - { input: i32Bits(0b00000001000000000000000000000000), expected: i32(7) }, - { input: i32Bits(0b00000010000000000000000000000000), expected: i32(6) }, - { input: i32Bits(0b00000100000000000000000000000000), expected: i32(5) }, - { input: i32Bits(0b00001000000000000000000000000000), expected: i32(4) }, - { input: i32Bits(0b00010000000000000000000000000000), expected: i32(3) }, - { input: i32Bits(0b00100000000000000000000000000000), expected: i32(2) }, - { input: i32Bits(0b01000000000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b10000000000000000000000000000000), expected: i32(0) }, + // 0's after leading 1 + { input: i32Bits(0b00000000000000000000000000000010), expected: i32(30) }, + { input: i32Bits(0b00000000000000000000000000000100), expected: i32(29) }, + { input: i32Bits(0b00000000000000000000000000001000), expected: i32(28) }, + { input: i32Bits(0b00000000000000000000000000010000), expected: i32(27) }, + { input: i32Bits(0b00000000000000000000000000100000), expected: i32(26) }, + { input: i32Bits(0b00000000000000000000000001000000), expected: i32(25) }, + { input: i32Bits(0b00000000000000000000000010000000), expected: i32(24) }, + { input: i32Bits(0b00000000000000000000000100000000), expected: i32(23) }, + { input: i32Bits(0b00000000000000000000001000000000), expected: i32(22) }, + { input: i32Bits(0b00000000000000000000010000000000), expected: i32(21) }, + { input: i32Bits(0b00000000000000000000100000000000), expected: i32(20) }, + { input: i32Bits(0b00000000000000000001000000000000), expected: i32(19) }, + { input: i32Bits(0b00000000000000000010000000000000), expected: i32(18) }, + { input: i32Bits(0b00000000000000000100000000000000), expected: i32(17) }, + { input: i32Bits(0b00000000000000001000000000000000), expected: i32(16) }, + { input: i32Bits(0b00000000000000010000000000000000), expected: i32(15) }, + { input: i32Bits(0b00000000000000100000000000000000), expected: i32(14) }, + { input: i32Bits(0b00000000000001000000000000000000), expected: i32(13) }, + { input: i32Bits(0b00000000000010000000000000000000), expected: i32(12) }, + { input: i32Bits(0b00000000000100000000000000000000), expected: i32(11) }, + { input: i32Bits(0b00000000001000000000000000000000), expected: i32(10) }, + { input: i32Bits(0b00000000010000000000000000000000), expected: i32(9) }, + { input: i32Bits(0b00000000100000000000000000000000), expected: i32(8) }, + { input: i32Bits(0b00000001000000000000000000000000), expected: i32(7) }, + { input: i32Bits(0b00000010000000000000000000000000), expected: i32(6) }, + { input: i32Bits(0b00000100000000000000000000000000), expected: i32(5) }, + { input: i32Bits(0b00001000000000000000000000000000), expected: i32(4) }, + { input: i32Bits(0b00010000000000000000000000000000), expected: i32(3) }, + { input: i32Bits(0b00100000000000000000000000000000), expected: i32(2) }, + { input: i32Bits(0b01000000000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b10000000000000000000000000000000), expected: i32(0) }, - // 1's after leading 1 - { input: i32Bits(0b00000000000000000000000000000011), expected: i32(30) }, - { input: i32Bits(0b00000000000000000000000000000111), expected: i32(29) }, - { input: i32Bits(0b00000000000000000000000000001111), expected: i32(28) }, - { input: i32Bits(0b00000000000000000000000000011111), expected: i32(27) }, - { input: i32Bits(0b00000000000000000000000000111111), expected: i32(26) }, - { input: i32Bits(0b00000000000000000000000001111111), expected: i32(25) }, - { input: i32Bits(0b00000000000000000000000011111111), expected: i32(24) }, - { input: i32Bits(0b00000000000000000000000111111111), expected: i32(23) }, - { input: i32Bits(0b00000000000000000000001111111111), expected: i32(22) }, - { input: i32Bits(0b00000000000000000000011111111111), expected: i32(21) }, - { input: i32Bits(0b00000000000000000000111111111111), expected: i32(20) }, - { input: i32Bits(0b00000000000000000001111111111111), expected: i32(19) }, - { input: i32Bits(0b00000000000000000011111111111111), expected: i32(18) }, - { input: i32Bits(0b00000000000000000111111111111111), expected: i32(17) }, - { input: i32Bits(0b00000000000000001111111111111111), expected: i32(16) }, - { input: i32Bits(0b00000000000000011111111111111111), expected: i32(15) }, - { input: i32Bits(0b00000000000000111111111111111111), expected: i32(14) }, - { input: i32Bits(0b00000000000001111111111111111111), expected: i32(13) }, - { input: i32Bits(0b00000000000011111111111111111111), expected: i32(12) }, - { input: i32Bits(0b00000000000111111111111111111111), expected: i32(11) }, - { input: i32Bits(0b00000000001111111111111111111111), expected: i32(10) }, - { input: i32Bits(0b00000000011111111111111111111111), expected: i32(9) }, - { input: i32Bits(0b00000000111111111111111111111111), expected: i32(8) }, - { input: i32Bits(0b00000001111111111111111111111111), expected: i32(7) }, - { input: i32Bits(0b00000011111111111111111111111111), expected: i32(6) }, - { input: i32Bits(0b00000111111111111111111111111111), expected: i32(5) }, - { input: i32Bits(0b00001111111111111111111111111111), expected: i32(4) }, - { input: i32Bits(0b00011111111111111111111111111111), expected: i32(3) }, - { input: i32Bits(0b00111111111111111111111111111111), expected: i32(2) }, - { input: i32Bits(0b01111111111111111111111111111111), expected: i32(1) }, - { input: i32Bits(0b11111111111111111111111111111111), expected: i32(0) }, + // 1's after leading 1 + { input: i32Bits(0b00000000000000000000000000000011), expected: i32(30) }, + { input: i32Bits(0b00000000000000000000000000000111), expected: i32(29) }, + { input: i32Bits(0b00000000000000000000000000001111), expected: i32(28) }, + { input: i32Bits(0b00000000000000000000000000011111), expected: i32(27) }, + { input: i32Bits(0b00000000000000000000000000111111), expected: i32(26) }, + { input: i32Bits(0b00000000000000000000000001111111), expected: i32(25) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32(24) }, + { input: i32Bits(0b00000000000000000000000111111111), expected: i32(23) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32(22) }, + { input: i32Bits(0b00000000000000000000011111111111), expected: i32(21) }, + { input: i32Bits(0b00000000000000000000111111111111), expected: i32(20) }, + { input: i32Bits(0b00000000000000000001111111111111), expected: i32(19) }, + { input: i32Bits(0b00000000000000000011111111111111), expected: i32(18) }, + { input: i32Bits(0b00000000000000000111111111111111), expected: i32(17) }, + { input: i32Bits(0b00000000000000001111111111111111), expected: i32(16) }, + { input: i32Bits(0b00000000000000011111111111111111), expected: i32(15) }, + { input: i32Bits(0b00000000000000111111111111111111), expected: i32(14) }, + { input: i32Bits(0b00000000000001111111111111111111), expected: i32(13) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32(12) }, + { input: i32Bits(0b00000000000111111111111111111111), expected: i32(11) }, + { input: i32Bits(0b00000000001111111111111111111111), expected: i32(10) }, + { input: i32Bits(0b00000000011111111111111111111111), expected: i32(9) }, + { input: i32Bits(0b00000000111111111111111111111111), expected: i32(8) }, + { input: i32Bits(0b00000001111111111111111111111111), expected: i32(7) }, + { input: i32Bits(0b00000011111111111111111111111111), expected: i32(6) }, + { input: i32Bits(0b00000111111111111111111111111111), expected: i32(5) }, + { input: i32Bits(0b00001111111111111111111111111111), expected: i32(4) }, + { input: i32Bits(0b00011111111111111111111111111111), expected: i32(3) }, + { input: i32Bits(0b00111111111111111111111111111111), expected: i32(2) }, + { input: i32Bits(0b01111111111111111111111111111111), expected: i32(1) }, + { input: i32Bits(0b11111111111111111111111111111111), expected: i32(0) }, - // random after leading 1 - { input: i32Bits(0b00000000000000000000000000000110), expected: i32(29) }, - { input: i32Bits(0b00000000000000000000000000001101), expected: i32(28) }, - { input: i32Bits(0b00000000000000000000000000011101), expected: i32(27) }, - { input: i32Bits(0b00000000000000000000000000111001), expected: i32(26) }, - { input: i32Bits(0b00000000000000000000000001101111), expected: i32(25) }, - { input: i32Bits(0b00000000000000000000000011111111), expected: i32(24) }, - { input: i32Bits(0b00000000000000000000000111101111), expected: i32(23) }, - { input: i32Bits(0b00000000000000000000001111111111), expected: i32(22) }, - { input: i32Bits(0b00000000000000000000011111110001), expected: i32(21) }, - { input: i32Bits(0b00000000000000000000111011011101), expected: i32(20) }, - { input: i32Bits(0b00000000000000000001101101111111), expected: i32(19) }, - { input: i32Bits(0b00000000000000000011111111011111), expected: i32(18) }, - { input: i32Bits(0b00000000000000000101111001110101), expected: i32(17) }, - { input: i32Bits(0b00000000000000001101111011110111), expected: i32(16) }, - { input: i32Bits(0b00000000000000011111111111110011), expected: i32(15) }, - { input: i32Bits(0b00000000000000111111111110111111), expected: i32(14) }, - { input: i32Bits(0b00000000000001111111011111111111), expected: i32(13) }, - { input: i32Bits(0b00000000000011111111111111111111), expected: i32(12) }, - { input: i32Bits(0b00000000000111110101011110111111), expected: i32(11) }, - { input: i32Bits(0b00000000001111101111111111110111), expected: i32(10) }, - { input: i32Bits(0b00000000011111111111010000101111), expected: i32(9) }, - { input: i32Bits(0b00000000111111111111001111111011), expected: i32(8) }, - { input: i32Bits(0b00000001111111011111101111111111), expected: i32(7) }, - { input: i32Bits(0b00000011101011111011110111111011), expected: i32(6) }, - { input: i32Bits(0b00000111111110111111111111111111), expected: i32(5) }, - { input: i32Bits(0b00001111000000011011011110111111), expected: i32(4) }, - { input: i32Bits(0b00011110101111011111111111111111), expected: i32(3) }, - { input: i32Bits(0b00110110111111100111111110111101), expected: i32(2) }, - { input: i32Bits(0b01010111111101111111011111011111), expected: i32(1) }, - { input: i32Bits(0b11100010011110101101101110101111), expected: i32(0) }, - ]); - }); + // random after leading 1 + { input: i32Bits(0b00000000000000000000000000000110), expected: i32(29) }, + { input: i32Bits(0b00000000000000000000000000001101), expected: i32(28) }, + { input: i32Bits(0b00000000000000000000000000011101), expected: i32(27) }, + { input: i32Bits(0b00000000000000000000000000111001), expected: i32(26) }, + { input: i32Bits(0b00000000000000000000000001101111), expected: i32(25) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32(24) }, + { input: i32Bits(0b00000000000000000000000111101111), expected: i32(23) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32(22) }, + { input: i32Bits(0b00000000000000000000011111110001), expected: i32(21) }, + { input: i32Bits(0b00000000000000000000111011011101), expected: i32(20) }, + { input: i32Bits(0b00000000000000000001101101111111), expected: i32(19) }, + { input: i32Bits(0b00000000000000000011111111011111), expected: i32(18) }, + { input: i32Bits(0b00000000000000000101111001110101), expected: i32(17) }, + { input: i32Bits(0b00000000000000001101111011110111), expected: i32(16) }, + { input: i32Bits(0b00000000000000011111111111110011), expected: i32(15) }, + { input: i32Bits(0b00000000000000111111111110111111), expected: i32(14) }, + { input: i32Bits(0b00000000000001111111011111111111), expected: i32(13) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32(12) }, + { input: i32Bits(0b00000000000111110101011110111111), expected: i32(11) }, + { input: i32Bits(0b00000000001111101111111111110111), expected: i32(10) }, + { input: i32Bits(0b00000000011111111111010000101111), expected: i32(9) }, + { input: i32Bits(0b00000000111111111111001111111011), expected: i32(8) }, + { input: i32Bits(0b00000001111111011111101111111111), expected: i32(7) }, + { input: i32Bits(0b00000011101011111011110111111011), expected: i32(6) }, + { input: i32Bits(0b00000111111110111111111111111111), expected: i32(5) }, + { input: i32Bits(0b00001111000000011011011110111111), expected: i32(4) }, + { input: i32Bits(0b00011110101111011111111111111111), expected: i32(3) }, + { input: i32Bits(0b00110110111111100111111110111101), expected: i32(2) }, + { input: i32Bits(0b01010111111101111111011111011111), expected: i32(1) }, + { input: i32Bits(0b11100010011110101101101110101111), expected: i32(0) }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countOneBits.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countOneBits.spec.js index b6a82da5e5f..500b02ba615 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countOneBits.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countOneBits.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'countOneBits' builtin function S is i32 or u32 @@ -9,8 +9,7 @@ T is S or vecN The number of 1 bits in the representation of e. Also known as "population count". Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeU32, u32Bits, u32, TypeI32, i32Bits, i32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; @@ -19,228 +18,232 @@ import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('countOneBits'), [TypeU32], TypeU32, cfg, [ - // Zero - { input: u32Bits(0b00000000000000000000000000000000), expected: u32(0) }, +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('countOneBits'), [TypeU32], TypeU32, cfg, [ + // Zero + { input: u32Bits(0b00000000000000000000000000000000), expected: u32(0) }, - // One - { input: u32Bits(0b00000000000000000000000000000001), expected: u32(1) }, + // One + { input: u32Bits(0b00000000000000000000000000000001), expected: u32(1) }, - // 0's after leading 1 - { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000000100), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000001000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000010000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000100000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000001000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000010000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000100000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000001000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000010000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000100000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000001000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000010000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000000100000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000001000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000010000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000000100000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000001000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000010000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000000100000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000001000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000010000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000000100000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000001000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000010000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00000100000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00001000000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00010000000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b00100000000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b01000000000000000000000000000000), expected: u32(1) }, - { input: u32Bits(0b10000000000000000000000000000000), expected: u32(1) }, + // 0's after leading 1 + { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000000100), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000001000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000010000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000100000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000001000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000010000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000100000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000001000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000010000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000100000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000001000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000010000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000000100000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000001000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000010000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000000100000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000001000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000010000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000000100000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000001000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000010000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000000100000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000001000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000010000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00000100000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00001000000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00010000000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b00100000000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b01000000000000000000000000000000), expected: u32(1) }, + { input: u32Bits(0b10000000000000000000000000000000), expected: u32(1) }, - // 1's after leading 1 - { input: u32Bits(0b00000000000000000000000000000011), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000000111), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000001111), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000011111), expected: u32(5) }, - { input: u32Bits(0b00000000000000000000000000111111), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000001111111), expected: u32(7) }, - { input: u32Bits(0b00000000000000000000000011111111), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000000111111111), expected: u32(9) }, - { input: u32Bits(0b00000000000000000000001111111111), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000011111111111), expected: u32(11) }, - { input: u32Bits(0b00000000000000000000111111111111), expected: u32(12) }, - { input: u32Bits(0b00000000000000000001111111111111), expected: u32(13) }, - { input: u32Bits(0b00000000000000000011111111111111), expected: u32(14) }, - { input: u32Bits(0b00000000000000000111111111111111), expected: u32(15) }, - { input: u32Bits(0b00000000000000001111111111111111), expected: u32(16) }, - { input: u32Bits(0b00000000000000011111111111111111), expected: u32(17) }, - { input: u32Bits(0b00000000000000111111111111111111), expected: u32(18) }, - { input: u32Bits(0b00000000000001111111111111111111), expected: u32(19) }, - { input: u32Bits(0b00000000000011111111111111111111), expected: u32(20) }, - { input: u32Bits(0b00000000000111111111111111111111), expected: u32(21) }, - { input: u32Bits(0b00000000001111111111111111111111), expected: u32(22) }, - { input: u32Bits(0b00000000011111111111111111111111), expected: u32(23) }, - { input: u32Bits(0b00000000111111111111111111111111), expected: u32(24) }, - { input: u32Bits(0b00000001111111111111111111111111), expected: u32(25) }, - { input: u32Bits(0b00000011111111111111111111111111), expected: u32(26) }, - { input: u32Bits(0b00000111111111111111111111111111), expected: u32(27) }, - { input: u32Bits(0b00001111111111111111111111111111), expected: u32(28) }, - { input: u32Bits(0b00011111111111111111111111111111), expected: u32(29) }, - { input: u32Bits(0b00111111111111111111111111111111), expected: u32(30) }, - { input: u32Bits(0b01111111111111111111111111111111), expected: u32(31) }, - { input: u32Bits(0b11111111111111111111111111111111), expected: u32(32) }, + // 1's after leading 1 + { input: u32Bits(0b00000000000000000000000000000011), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000000111), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000001111), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000011111), expected: u32(5) }, + { input: u32Bits(0b00000000000000000000000000111111), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000001111111), expected: u32(7) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000000111111111), expected: u32(9) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000011111111111), expected: u32(11) }, + { input: u32Bits(0b00000000000000000000111111111111), expected: u32(12) }, + { input: u32Bits(0b00000000000000000001111111111111), expected: u32(13) }, + { input: u32Bits(0b00000000000000000011111111111111), expected: u32(14) }, + { input: u32Bits(0b00000000000000000111111111111111), expected: u32(15) }, + { input: u32Bits(0b00000000000000001111111111111111), expected: u32(16) }, + { input: u32Bits(0b00000000000000011111111111111111), expected: u32(17) }, + { input: u32Bits(0b00000000000000111111111111111111), expected: u32(18) }, + { input: u32Bits(0b00000000000001111111111111111111), expected: u32(19) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32(20) }, + { input: u32Bits(0b00000000000111111111111111111111), expected: u32(21) }, + { input: u32Bits(0b00000000001111111111111111111111), expected: u32(22) }, + { input: u32Bits(0b00000000011111111111111111111111), expected: u32(23) }, + { input: u32Bits(0b00000000111111111111111111111111), expected: u32(24) }, + { input: u32Bits(0b00000001111111111111111111111111), expected: u32(25) }, + { input: u32Bits(0b00000011111111111111111111111111), expected: u32(26) }, + { input: u32Bits(0b00000111111111111111111111111111), expected: u32(27) }, + { input: u32Bits(0b00001111111111111111111111111111), expected: u32(28) }, + { input: u32Bits(0b00011111111111111111111111111111), expected: u32(29) }, + { input: u32Bits(0b00111111111111111111111111111111), expected: u32(30) }, + { input: u32Bits(0b01111111111111111111111111111111), expected: u32(31) }, + { input: u32Bits(0b11111111111111111111111111111111), expected: u32(32) }, - // random after leading 1 - { input: u32Bits(0b00000000000000000000000000000110), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000001101), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000011101), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000111001), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000001101111), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000011111111), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000000111101111), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000001111111111), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000011111110001), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000111011011101), expected: u32(9) }, - { input: u32Bits(0b00000000000000000001101101111111), expected: u32(11) }, - { input: u32Bits(0b00000000000000000011111111011111), expected: u32(13) }, - { input: u32Bits(0b00000000000000000101111001110101), expected: u32(10) }, - { input: u32Bits(0b00000000000000001101111011110111), expected: u32(13) }, - { input: u32Bits(0b00000000000000011111111111110011), expected: u32(15) }, - { input: u32Bits(0b00000000000000111111111110111111), expected: u32(17) }, - { input: u32Bits(0b00000000000001111111011111111111), expected: u32(18) }, - { input: u32Bits(0b00000000000011111111111111111111), expected: u32(20) }, - { input: u32Bits(0b00000000000111110101011110111111), expected: u32(17) }, - { input: u32Bits(0b00000000001111101111111111110111), expected: u32(20) }, - { input: u32Bits(0b00000000011111111111010000101111), expected: u32(17) }, - { input: u32Bits(0b00000000111111111111001111111011), expected: u32(21) }, - { input: u32Bits(0b00000001111111011111101111111111), expected: u32(23) }, - { input: u32Bits(0b00000011101011111011110111111011), expected: u32(21) }, - { input: u32Bits(0b00000111111110111111111111111111), expected: u32(26) }, - { input: u32Bits(0b00001111000000011011011110111111), expected: u32(18) }, - { input: u32Bits(0b00011110101111011111111111111111), expected: u32(26) }, - { input: u32Bits(0b00110110111111100111111110111101), expected: u32(24) }, - { input: u32Bits(0b01010111111101111111011111011111), expected: u32(26) }, - { input: u32Bits(0b11100010011110101101101110101111), expected: u32(21) }, - ]); - }); + // random after leading 1 + { input: u32Bits(0b00000000000000000000000000000110), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000001101), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000011101), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000111001), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000001101111), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000000111101111), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000011111110001), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000111011011101), expected: u32(9) }, + { input: u32Bits(0b00000000000000000001101101111111), expected: u32(11) }, + { input: u32Bits(0b00000000000000000011111111011111), expected: u32(13) }, + { input: u32Bits(0b00000000000000000101111001110101), expected: u32(10) }, + { input: u32Bits(0b00000000000000001101111011110111), expected: u32(13) }, + { input: u32Bits(0b00000000000000011111111111110011), expected: u32(15) }, + { input: u32Bits(0b00000000000000111111111110111111), expected: u32(17) }, + { input: u32Bits(0b00000000000001111111011111111111), expected: u32(18) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32(20) }, + { input: u32Bits(0b00000000000111110101011110111111), expected: u32(17) }, + { input: u32Bits(0b00000000001111101111111111110111), expected: u32(20) }, + { input: u32Bits(0b00000000011111111111010000101111), expected: u32(17) }, + { input: u32Bits(0b00000000111111111111001111111011), expected: u32(21) }, + { input: u32Bits(0b00000001111111011111101111111111), expected: u32(23) }, + { input: u32Bits(0b00000011101011111011110111111011), expected: u32(21) }, + { input: u32Bits(0b00000111111110111111111111111111), expected: u32(26) }, + { input: u32Bits(0b00001111000000011011011110111111), expected: u32(18) }, + { input: u32Bits(0b00011110101111011111111111111111), expected: u32(26) }, + { input: u32Bits(0b00110110111111100111111110111101), expected: u32(24) }, + { input: u32Bits(0b01010111111101111111011111011111), expected: u32(26) }, + { input: u32Bits(0b11100010011110101101101110101111), expected: u32(21) }] + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('countOneBits'), [TypeI32], TypeI32, cfg, [ - // Zero - { input: i32Bits(0b00000000000000000000000000000000), expected: i32(0) }, +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('countOneBits'), [TypeI32], TypeI32, cfg, [ + // Zero + { input: i32Bits(0b00000000000000000000000000000000), expected: i32(0) }, - // One - { input: i32Bits(0b00000000000000000000000000000001), expected: i32(1) }, + // One + { input: i32Bits(0b00000000000000000000000000000001), expected: i32(1) }, - // 0's after leading 1 - { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000000100), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000001000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000010000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000100000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000001000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000010000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000100000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000001000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000010000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000100000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000001000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000010000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000000100000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000001000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000010000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000000100000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000001000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000010000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000000100000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000001000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000010000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000000100000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000001000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000010000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00000100000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00001000000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00010000000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b00100000000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b01000000000000000000000000000000), expected: i32(1) }, - { input: i32Bits(0b10000000000000000000000000000000), expected: i32(1) }, + // 0's after leading 1 + { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000000100), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000001000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000010000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000100000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000001000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000010000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000100000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000001000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000010000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000100000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000001000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000010000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000000100000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000001000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000010000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000000100000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000001000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000010000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000000100000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000001000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000010000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000000100000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000001000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000010000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00000100000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00001000000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00010000000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b00100000000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b01000000000000000000000000000000), expected: i32(1) }, + { input: i32Bits(0b10000000000000000000000000000000), expected: i32(1) }, - // 1's after leading 1 - { input: i32Bits(0b00000000000000000000000000000011), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000000111), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000001111), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000011111), expected: i32(5) }, - { input: i32Bits(0b00000000000000000000000000111111), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000001111111), expected: i32(7) }, - { input: i32Bits(0b00000000000000000000000011111111), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000000111111111), expected: i32(9) }, - { input: i32Bits(0b00000000000000000000001111111111), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000011111111111), expected: i32(11) }, - { input: i32Bits(0b00000000000000000000111111111111), expected: i32(12) }, - { input: i32Bits(0b00000000000000000001111111111111), expected: i32(13) }, - { input: i32Bits(0b00000000000000000011111111111111), expected: i32(14) }, - { input: i32Bits(0b00000000000000000111111111111111), expected: i32(15) }, - { input: i32Bits(0b00000000000000001111111111111111), expected: i32(16) }, - { input: i32Bits(0b00000000000000011111111111111111), expected: i32(17) }, - { input: i32Bits(0b00000000000000111111111111111111), expected: i32(18) }, - { input: i32Bits(0b00000000000001111111111111111111), expected: i32(19) }, - { input: i32Bits(0b00000000000011111111111111111111), expected: i32(20) }, - { input: i32Bits(0b00000000000111111111111111111111), expected: i32(21) }, - { input: i32Bits(0b00000000001111111111111111111111), expected: i32(22) }, - { input: i32Bits(0b00000000011111111111111111111111), expected: i32(23) }, - { input: i32Bits(0b00000000111111111111111111111111), expected: i32(24) }, - { input: i32Bits(0b00000001111111111111111111111111), expected: i32(25) }, - { input: i32Bits(0b00000011111111111111111111111111), expected: i32(26) }, - { input: i32Bits(0b00000111111111111111111111111111), expected: i32(27) }, - { input: i32Bits(0b00001111111111111111111111111111), expected: i32(28) }, - { input: i32Bits(0b00011111111111111111111111111111), expected: i32(29) }, - { input: i32Bits(0b00111111111111111111111111111111), expected: i32(30) }, - { input: i32Bits(0b01111111111111111111111111111111), expected: i32(31) }, - { input: i32Bits(0b11111111111111111111111111111111), expected: i32(32) }, + // 1's after leading 1 + { input: i32Bits(0b00000000000000000000000000000011), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000000111), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000001111), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000011111), expected: i32(5) }, + { input: i32Bits(0b00000000000000000000000000111111), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000001111111), expected: i32(7) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000000111111111), expected: i32(9) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000011111111111), expected: i32(11) }, + { input: i32Bits(0b00000000000000000000111111111111), expected: i32(12) }, + { input: i32Bits(0b00000000000000000001111111111111), expected: i32(13) }, + { input: i32Bits(0b00000000000000000011111111111111), expected: i32(14) }, + { input: i32Bits(0b00000000000000000111111111111111), expected: i32(15) }, + { input: i32Bits(0b00000000000000001111111111111111), expected: i32(16) }, + { input: i32Bits(0b00000000000000011111111111111111), expected: i32(17) }, + { input: i32Bits(0b00000000000000111111111111111111), expected: i32(18) }, + { input: i32Bits(0b00000000000001111111111111111111), expected: i32(19) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32(20) }, + { input: i32Bits(0b00000000000111111111111111111111), expected: i32(21) }, + { input: i32Bits(0b00000000001111111111111111111111), expected: i32(22) }, + { input: i32Bits(0b00000000011111111111111111111111), expected: i32(23) }, + { input: i32Bits(0b00000000111111111111111111111111), expected: i32(24) }, + { input: i32Bits(0b00000001111111111111111111111111), expected: i32(25) }, + { input: i32Bits(0b00000011111111111111111111111111), expected: i32(26) }, + { input: i32Bits(0b00000111111111111111111111111111), expected: i32(27) }, + { input: i32Bits(0b00001111111111111111111111111111), expected: i32(28) }, + { input: i32Bits(0b00011111111111111111111111111111), expected: i32(29) }, + { input: i32Bits(0b00111111111111111111111111111111), expected: i32(30) }, + { input: i32Bits(0b01111111111111111111111111111111), expected: i32(31) }, + { input: i32Bits(0b11111111111111111111111111111111), expected: i32(32) }, - // random after leading 1 - { input: i32Bits(0b00000000000000000000000000000110), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000001101), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000011101), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000111001), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000001101111), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000011111111), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000000111101111), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000001111111111), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000011111110001), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000111011011101), expected: i32(9) }, - { input: i32Bits(0b00000000000000000001101101111111), expected: i32(11) }, - { input: i32Bits(0b00000000000000000011111111011111), expected: i32(13) }, - { input: i32Bits(0b00000000000000000101111001110101), expected: i32(10) }, - { input: i32Bits(0b00000000000000001101111011110111), expected: i32(13) }, - { input: i32Bits(0b00000000000000011111111111110011), expected: i32(15) }, - { input: i32Bits(0b00000000000000111111111110111111), expected: i32(17) }, - { input: i32Bits(0b00000000000001111111011111111111), expected: i32(18) }, - { input: i32Bits(0b00000000000011111111111111111111), expected: i32(20) }, - { input: i32Bits(0b00000000000111110101011110111111), expected: i32(17) }, - { input: i32Bits(0b00000000001111101111111111110111), expected: i32(20) }, - { input: i32Bits(0b00000000011111111111010000101111), expected: i32(17) }, - { input: i32Bits(0b00000000111111111111001111111011), expected: i32(21) }, - { input: i32Bits(0b00000001111111011111101111111111), expected: i32(23) }, - { input: i32Bits(0b00000011101011111011110111111011), expected: i32(21) }, - { input: i32Bits(0b00000111111110111111111111111111), expected: i32(26) }, - { input: i32Bits(0b00001111000000011011011110111111), expected: i32(18) }, - { input: i32Bits(0b00011110101111011111111111111111), expected: i32(26) }, - { input: i32Bits(0b00110110111111100111111110111101), expected: i32(24) }, - { input: i32Bits(0b01010111111101111111011111011111), expected: i32(26) }, - { input: i32Bits(0b11100010011110101101101110101111), expected: i32(21) }, - ]); - }); + // random after leading 1 + { input: i32Bits(0b00000000000000000000000000000110), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000001101), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000011101), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000111001), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000001101111), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000000111101111), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000011111110001), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000111011011101), expected: i32(9) }, + { input: i32Bits(0b00000000000000000001101101111111), expected: i32(11) }, + { input: i32Bits(0b00000000000000000011111111011111), expected: i32(13) }, + { input: i32Bits(0b00000000000000000101111001110101), expected: i32(10) }, + { input: i32Bits(0b00000000000000001101111011110111), expected: i32(13) }, + { input: i32Bits(0b00000000000000011111111111110011), expected: i32(15) }, + { input: i32Bits(0b00000000000000111111111110111111), expected: i32(17) }, + { input: i32Bits(0b00000000000001111111011111111111), expected: i32(18) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32(20) }, + { input: i32Bits(0b00000000000111110101011110111111), expected: i32(17) }, + { input: i32Bits(0b00000000001111101111111111110111), expected: i32(20) }, + { input: i32Bits(0b00000000011111111111010000101111), expected: i32(17) }, + { input: i32Bits(0b00000000111111111111001111111011), expected: i32(21) }, + { input: i32Bits(0b00000001111111011111101111111111), expected: i32(23) }, + { input: i32Bits(0b00000011101011111011110111111011), expected: i32(21) }, + { input: i32Bits(0b00000111111110111111111111111111), expected: i32(26) }, + { input: i32Bits(0b00001111000000011011011110111111), expected: i32(18) }, + { input: i32Bits(0b00011110101111011111111111111111), expected: i32(26) }, + { input: i32Bits(0b00110110111111100111111110111101), expected: i32(24) }, + { input: i32Bits(0b01010111111101111111011111011111), expected: i32(26) }, + { input: i32Bits(0b11100010011110101101101110101111), expected: i32(21) }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countTrailingZeros.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countTrailingZeros.spec.js index e0a0421702d..ca3f78ee051 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countTrailingZeros.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/countTrailingZeros.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'countTrailingZeros' builtin function S is i32 or u32 @@ -10,8 +10,7 @@ The number of consecutive 0 bits starting from the least significant bit of e, when T is a scalar type. Component-wise when T is a vector. Also known as "ctz" in some languages. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { i32, i32Bits, TypeI32, u32, TypeU32, u32Bits } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; @@ -20,228 +19,232 @@ import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('countTrailingZeros'), [TypeU32], TypeU32, cfg, [ - // Zero - { input: u32Bits(0b00000000000000000000000000000000), expected: u32(32) }, +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('countTrailingZeros'), [TypeU32], TypeU32, cfg, [ + // Zero + { input: u32Bits(0b00000000000000000000000000000000), expected: u32(32) }, - // High bit - { input: u32Bits(0b10000000000000000000000000000000), expected: u32(31) }, + // High bit + { input: u32Bits(0b10000000000000000000000000000000), expected: u32(31) }, - // 0's before trailing 1 - { input: u32Bits(0b00000000000000000000000000000001), expected: u32(0) }, - { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000000100), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000001000), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000010000), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000100000), expected: u32(5) }, - { input: u32Bits(0b00000000000000000000000001000000), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000010000000), expected: u32(7) }, - { input: u32Bits(0b00000000000000000000000100000000), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000001000000000), expected: u32(9) }, - { input: u32Bits(0b00000000000000000000010000000000), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000100000000000), expected: u32(11) }, - { input: u32Bits(0b00000000000000000001000000000000), expected: u32(12) }, - { input: u32Bits(0b00000000000000000010000000000000), expected: u32(13) }, - { input: u32Bits(0b00000000000000000100000000000000), expected: u32(14) }, - { input: u32Bits(0b00000000000000001000000000000000), expected: u32(15) }, - { input: u32Bits(0b00000000000000010000000000000000), expected: u32(16) }, - { input: u32Bits(0b00000000000000100000000000000000), expected: u32(17) }, - { input: u32Bits(0b00000000000001000000000000000000), expected: u32(18) }, - { input: u32Bits(0b00000000000010000000000000000000), expected: u32(19) }, - { input: u32Bits(0b00000000000100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b00000000001000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b00000000010000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b00000000100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b00000001000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b00000010000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b00000100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b00001000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b00010000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b00100000000000000000000000000000), expected: u32(29) }, - { input: u32Bits(0b01000000000000000000000000000000), expected: u32(30) }, + // 0's before trailing 1 + { input: u32Bits(0b00000000000000000000000000000001), expected: u32(0) }, + { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000000100), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000001000), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000010000), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000100000), expected: u32(5) }, + { input: u32Bits(0b00000000000000000000000001000000), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000010000000), expected: u32(7) }, + { input: u32Bits(0b00000000000000000000000100000000), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000001000000000), expected: u32(9) }, + { input: u32Bits(0b00000000000000000000010000000000), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000100000000000), expected: u32(11) }, + { input: u32Bits(0b00000000000000000001000000000000), expected: u32(12) }, + { input: u32Bits(0b00000000000000000010000000000000), expected: u32(13) }, + { input: u32Bits(0b00000000000000000100000000000000), expected: u32(14) }, + { input: u32Bits(0b00000000000000001000000000000000), expected: u32(15) }, + { input: u32Bits(0b00000000000000010000000000000000), expected: u32(16) }, + { input: u32Bits(0b00000000000000100000000000000000), expected: u32(17) }, + { input: u32Bits(0b00000000000001000000000000000000), expected: u32(18) }, + { input: u32Bits(0b00000000000010000000000000000000), expected: u32(19) }, + { input: u32Bits(0b00000000000100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b00000000001000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b00000000010000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b00000000100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b00000001000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b00000010000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b00000100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b00001000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b00010000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b00100000000000000000000000000000), expected: u32(29) }, + { input: u32Bits(0b01000000000000000000000000000000), expected: u32(30) }, - // 1's before trailing 1 - { input: u32Bits(0b11111111111111111111111111111111), expected: u32(0) }, - { input: u32Bits(0b11111111111111111111111111111110), expected: u32(1) }, - { input: u32Bits(0b11111111111111111111111111111100), expected: u32(2) }, - { input: u32Bits(0b11111111111111111111111111111000), expected: u32(3) }, - { input: u32Bits(0b11111111111111111111111111110000), expected: u32(4) }, - { input: u32Bits(0b11111111111111111111111111100000), expected: u32(5) }, - { input: u32Bits(0b11111111111111111111111111000000), expected: u32(6) }, - { input: u32Bits(0b11111111111111111111111110000000), expected: u32(7) }, - { input: u32Bits(0b11111111111111111111111100000000), expected: u32(8) }, - { input: u32Bits(0b11111111111111111111111000000000), expected: u32(9) }, - { input: u32Bits(0b11111111111111111111110000000000), expected: u32(10) }, - { input: u32Bits(0b11111111111111111111100000000000), expected: u32(11) }, - { input: u32Bits(0b11111111111111111111000000000000), expected: u32(12) }, - { input: u32Bits(0b11111111111111111110000000000000), expected: u32(13) }, - { input: u32Bits(0b11111111111111111100000000000000), expected: u32(14) }, - { input: u32Bits(0b11111111111111111000000000000000), expected: u32(15) }, - { input: u32Bits(0b11111111111111110000000000000000), expected: u32(16) }, - { input: u32Bits(0b11111111111111100000000000000000), expected: u32(17) }, - { input: u32Bits(0b11111111111111000000000000000000), expected: u32(18) }, - { input: u32Bits(0b11111111111110000000000000000000), expected: u32(19) }, - { input: u32Bits(0b11111111111100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b11111111111000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b11111111110000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b11111111100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b11111111000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b11111110000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b11111100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b11111000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b11110000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b11100000000000000000000000000000), expected: u32(29) }, - { input: u32Bits(0b11000000000000000000000000000000), expected: u32(30) }, + // 1's before trailing 1 + { input: u32Bits(0b11111111111111111111111111111111), expected: u32(0) }, + { input: u32Bits(0b11111111111111111111111111111110), expected: u32(1) }, + { input: u32Bits(0b11111111111111111111111111111100), expected: u32(2) }, + { input: u32Bits(0b11111111111111111111111111111000), expected: u32(3) }, + { input: u32Bits(0b11111111111111111111111111110000), expected: u32(4) }, + { input: u32Bits(0b11111111111111111111111111100000), expected: u32(5) }, + { input: u32Bits(0b11111111111111111111111111000000), expected: u32(6) }, + { input: u32Bits(0b11111111111111111111111110000000), expected: u32(7) }, + { input: u32Bits(0b11111111111111111111111100000000), expected: u32(8) }, + { input: u32Bits(0b11111111111111111111111000000000), expected: u32(9) }, + { input: u32Bits(0b11111111111111111111110000000000), expected: u32(10) }, + { input: u32Bits(0b11111111111111111111100000000000), expected: u32(11) }, + { input: u32Bits(0b11111111111111111111000000000000), expected: u32(12) }, + { input: u32Bits(0b11111111111111111110000000000000), expected: u32(13) }, + { input: u32Bits(0b11111111111111111100000000000000), expected: u32(14) }, + { input: u32Bits(0b11111111111111111000000000000000), expected: u32(15) }, + { input: u32Bits(0b11111111111111110000000000000000), expected: u32(16) }, + { input: u32Bits(0b11111111111111100000000000000000), expected: u32(17) }, + { input: u32Bits(0b11111111111111000000000000000000), expected: u32(18) }, + { input: u32Bits(0b11111111111110000000000000000000), expected: u32(19) }, + { input: u32Bits(0b11111111111100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b11111111111000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b11111111110000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b11111111100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b11111111000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b11111110000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b11111100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b11111000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b11110000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b11100000000000000000000000000000), expected: u32(29) }, + { input: u32Bits(0b11000000000000000000000000000000), expected: u32(30) }, - // random before trailing 1 - { input: u32Bits(0b11110000001111111101111010001111), expected: u32(0) }, - { input: u32Bits(0b11011110111111100101110011110010), expected: u32(1) }, - { input: u32Bits(0b11110111011011111111010000111100), expected: u32(2) }, - { input: u32Bits(0b11010011011101111111010011101000), expected: u32(3) }, - { input: u32Bits(0b11010111110111110001111110110000), expected: u32(4) }, - { input: u32Bits(0b11111101111101111110101111100000), expected: u32(5) }, - { input: u32Bits(0b11111001111011111001111011000000), expected: u32(6) }, - { input: u32Bits(0b11001110110111110111111010000000), expected: u32(7) }, - { input: u32Bits(0b11101111011111101110101100000000), expected: u32(8) }, - { input: u32Bits(0b11111101111011111111111000000000), expected: u32(9) }, - { input: u32Bits(0b10011111011101110110110000000000), expected: u32(10) }, - { input: u32Bits(0b11111111101101111011100000000000), expected: u32(11) }, - { input: u32Bits(0b11111011010110111011000000000000), expected: u32(12) }, - { input: u32Bits(0b00111101010000111010000000000000), expected: u32(13) }, - { input: u32Bits(0b11111011110001101100000000000000), expected: u32(14) }, - { input: u32Bits(0b10111111010111111000000000000000), expected: u32(15) }, - { input: u32Bits(0b11011101111010110000000000000000), expected: u32(16) }, - { input: u32Bits(0b01110100110110100000000000000000), expected: u32(17) }, - { input: u32Bits(0b11100111001011000000000000000000), expected: u32(18) }, - { input: u32Bits(0b11111001110110000000000000000000), expected: u32(19) }, - { input: u32Bits(0b00110100100100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b11111010011000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b00000010110000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b11100111100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b00101101000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b11011010000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b11010100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b10111000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b01110000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b10100000000000000000000000000000), expected: u32(29) }, - ]); - }); + // random before trailing 1 + { input: u32Bits(0b11110000001111111101111010001111), expected: u32(0) }, + { input: u32Bits(0b11011110111111100101110011110010), expected: u32(1) }, + { input: u32Bits(0b11110111011011111111010000111100), expected: u32(2) }, + { input: u32Bits(0b11010011011101111111010011101000), expected: u32(3) }, + { input: u32Bits(0b11010111110111110001111110110000), expected: u32(4) }, + { input: u32Bits(0b11111101111101111110101111100000), expected: u32(5) }, + { input: u32Bits(0b11111001111011111001111011000000), expected: u32(6) }, + { input: u32Bits(0b11001110110111110111111010000000), expected: u32(7) }, + { input: u32Bits(0b11101111011111101110101100000000), expected: u32(8) }, + { input: u32Bits(0b11111101111011111111111000000000), expected: u32(9) }, + { input: u32Bits(0b10011111011101110110110000000000), expected: u32(10) }, + { input: u32Bits(0b11111111101101111011100000000000), expected: u32(11) }, + { input: u32Bits(0b11111011010110111011000000000000), expected: u32(12) }, + { input: u32Bits(0b00111101010000111010000000000000), expected: u32(13) }, + { input: u32Bits(0b11111011110001101100000000000000), expected: u32(14) }, + { input: u32Bits(0b10111111010111111000000000000000), expected: u32(15) }, + { input: u32Bits(0b11011101111010110000000000000000), expected: u32(16) }, + { input: u32Bits(0b01110100110110100000000000000000), expected: u32(17) }, + { input: u32Bits(0b11100111001011000000000000000000), expected: u32(18) }, + { input: u32Bits(0b11111001110110000000000000000000), expected: u32(19) }, + { input: u32Bits(0b00110100100100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b11111010011000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b00000010110000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b11100111100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b00101101000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b11011010000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b11010100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b10111000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b01110000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b10100000000000000000000000000000), expected: u32(29) }] + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('countTrailingZeros'), [TypeI32], TypeI32, cfg, [ - // Zero - { input: i32Bits(0b00000000000000000000000000000000), expected: i32(32) }, +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('countTrailingZeros'), [TypeI32], TypeI32, cfg, [ + // Zero + { input: i32Bits(0b00000000000000000000000000000000), expected: i32(32) }, - // High bit - { input: i32Bits(0b10000000000000000000000000000000), expected: i32(31) }, + // High bit + { input: i32Bits(0b10000000000000000000000000000000), expected: i32(31) }, - // 0's before trailing 1 - { input: i32Bits(0b00000000000000000000000000000001), expected: i32(0) }, - { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000000100), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000001000), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000010000), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000100000), expected: i32(5) }, - { input: i32Bits(0b00000000000000000000000001000000), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000010000000), expected: i32(7) }, - { input: i32Bits(0b00000000000000000000000100000000), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000001000000000), expected: i32(9) }, - { input: i32Bits(0b00000000000000000000010000000000), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000100000000000), expected: i32(11) }, - { input: i32Bits(0b00000000000000000001000000000000), expected: i32(12) }, - { input: i32Bits(0b00000000000000000010000000000000), expected: i32(13) }, - { input: i32Bits(0b00000000000000000100000000000000), expected: i32(14) }, - { input: i32Bits(0b00000000000000001000000000000000), expected: i32(15) }, - { input: i32Bits(0b00000000000000010000000000000000), expected: i32(16) }, - { input: i32Bits(0b00000000000000100000000000000000), expected: i32(17) }, - { input: i32Bits(0b00000000000001000000000000000000), expected: i32(18) }, - { input: i32Bits(0b00000000000010000000000000000000), expected: i32(19) }, - { input: i32Bits(0b00000000000100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b00000000001000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b00000000010000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b00000000100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b00000001000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b00000010000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b00000100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b00001000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b00010000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b00100000000000000000000000000000), expected: i32(29) }, - { input: i32Bits(0b01000000000000000000000000000000), expected: i32(30) }, + // 0's before trailing 1 + { input: i32Bits(0b00000000000000000000000000000001), expected: i32(0) }, + { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000000100), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000001000), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000010000), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000100000), expected: i32(5) }, + { input: i32Bits(0b00000000000000000000000001000000), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000010000000), expected: i32(7) }, + { input: i32Bits(0b00000000000000000000000100000000), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000001000000000), expected: i32(9) }, + { input: i32Bits(0b00000000000000000000010000000000), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000100000000000), expected: i32(11) }, + { input: i32Bits(0b00000000000000000001000000000000), expected: i32(12) }, + { input: i32Bits(0b00000000000000000010000000000000), expected: i32(13) }, + { input: i32Bits(0b00000000000000000100000000000000), expected: i32(14) }, + { input: i32Bits(0b00000000000000001000000000000000), expected: i32(15) }, + { input: i32Bits(0b00000000000000010000000000000000), expected: i32(16) }, + { input: i32Bits(0b00000000000000100000000000000000), expected: i32(17) }, + { input: i32Bits(0b00000000000001000000000000000000), expected: i32(18) }, + { input: i32Bits(0b00000000000010000000000000000000), expected: i32(19) }, + { input: i32Bits(0b00000000000100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b00000000001000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b00000000010000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b00000000100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b00000001000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b00000010000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b00000100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b00001000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b00010000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b00100000000000000000000000000000), expected: i32(29) }, + { input: i32Bits(0b01000000000000000000000000000000), expected: i32(30) }, - // 1's before trailing 1 - { input: i32Bits(0b11111111111111111111111111111111), expected: i32(0) }, - { input: i32Bits(0b11111111111111111111111111111110), expected: i32(1) }, - { input: i32Bits(0b11111111111111111111111111111100), expected: i32(2) }, - { input: i32Bits(0b11111111111111111111111111111000), expected: i32(3) }, - { input: i32Bits(0b11111111111111111111111111110000), expected: i32(4) }, - { input: i32Bits(0b11111111111111111111111111100000), expected: i32(5) }, - { input: i32Bits(0b11111111111111111111111111000000), expected: i32(6) }, - { input: i32Bits(0b11111111111111111111111110000000), expected: i32(7) }, - { input: i32Bits(0b11111111111111111111111100000000), expected: i32(8) }, - { input: i32Bits(0b11111111111111111111111000000000), expected: i32(9) }, - { input: i32Bits(0b11111111111111111111110000000000), expected: i32(10) }, - { input: i32Bits(0b11111111111111111111100000000000), expected: i32(11) }, - { input: i32Bits(0b11111111111111111111000000000000), expected: i32(12) }, - { input: i32Bits(0b11111111111111111110000000000000), expected: i32(13) }, - { input: i32Bits(0b11111111111111111100000000000000), expected: i32(14) }, - { input: i32Bits(0b11111111111111111000000000000000), expected: i32(15) }, - { input: i32Bits(0b11111111111111110000000000000000), expected: i32(16) }, - { input: i32Bits(0b11111111111111100000000000000000), expected: i32(17) }, - { input: i32Bits(0b11111111111111000000000000000000), expected: i32(18) }, - { input: i32Bits(0b11111111111110000000000000000000), expected: i32(19) }, - { input: i32Bits(0b11111111111100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b11111111111000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b11111111110000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b11111111100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b11111111000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b11111110000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b11111100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b11111000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b11110000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b11100000000000000000000000000000), expected: i32(29) }, - { input: i32Bits(0b11000000000000000000000000000000), expected: i32(30) }, + // 1's before trailing 1 + { input: i32Bits(0b11111111111111111111111111111111), expected: i32(0) }, + { input: i32Bits(0b11111111111111111111111111111110), expected: i32(1) }, + { input: i32Bits(0b11111111111111111111111111111100), expected: i32(2) }, + { input: i32Bits(0b11111111111111111111111111111000), expected: i32(3) }, + { input: i32Bits(0b11111111111111111111111111110000), expected: i32(4) }, + { input: i32Bits(0b11111111111111111111111111100000), expected: i32(5) }, + { input: i32Bits(0b11111111111111111111111111000000), expected: i32(6) }, + { input: i32Bits(0b11111111111111111111111110000000), expected: i32(7) }, + { input: i32Bits(0b11111111111111111111111100000000), expected: i32(8) }, + { input: i32Bits(0b11111111111111111111111000000000), expected: i32(9) }, + { input: i32Bits(0b11111111111111111111110000000000), expected: i32(10) }, + { input: i32Bits(0b11111111111111111111100000000000), expected: i32(11) }, + { input: i32Bits(0b11111111111111111111000000000000), expected: i32(12) }, + { input: i32Bits(0b11111111111111111110000000000000), expected: i32(13) }, + { input: i32Bits(0b11111111111111111100000000000000), expected: i32(14) }, + { input: i32Bits(0b11111111111111111000000000000000), expected: i32(15) }, + { input: i32Bits(0b11111111111111110000000000000000), expected: i32(16) }, + { input: i32Bits(0b11111111111111100000000000000000), expected: i32(17) }, + { input: i32Bits(0b11111111111111000000000000000000), expected: i32(18) }, + { input: i32Bits(0b11111111111110000000000000000000), expected: i32(19) }, + { input: i32Bits(0b11111111111100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b11111111111000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b11111111110000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b11111111100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b11111111000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b11111110000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b11111100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b11111000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b11110000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b11100000000000000000000000000000), expected: i32(29) }, + { input: i32Bits(0b11000000000000000000000000000000), expected: i32(30) }, - // random before trailing 1 - { input: i32Bits(0b11110000001111111101111010001111), expected: i32(0) }, - { input: i32Bits(0b11011110111111100101110011110010), expected: i32(1) }, - { input: i32Bits(0b11110111011011111111010000111100), expected: i32(2) }, - { input: i32Bits(0b11010011011101111111010011101000), expected: i32(3) }, - { input: i32Bits(0b11010111110111110001111110110000), expected: i32(4) }, - { input: i32Bits(0b11111101111101111110101111100000), expected: i32(5) }, - { input: i32Bits(0b11111001111011111001111011000000), expected: i32(6) }, - { input: i32Bits(0b11001110110111110111111010000000), expected: i32(7) }, - { input: i32Bits(0b11101111011111101110101100000000), expected: i32(8) }, - { input: i32Bits(0b11111101111011111111111000000000), expected: i32(9) }, - { input: i32Bits(0b10011111011101110110110000000000), expected: i32(10) }, - { input: i32Bits(0b11111111101101111011100000000000), expected: i32(11) }, - { input: i32Bits(0b11111011010110111011000000000000), expected: i32(12) }, - { input: i32Bits(0b00111101010000111010000000000000), expected: i32(13) }, - { input: i32Bits(0b11111011110001101100000000000000), expected: i32(14) }, - { input: i32Bits(0b10111111010111111000000000000000), expected: i32(15) }, - { input: i32Bits(0b11011101111010110000000000000000), expected: i32(16) }, - { input: i32Bits(0b01110100110110100000000000000000), expected: i32(17) }, - { input: i32Bits(0b11100111001011000000000000000000), expected: i32(18) }, - { input: i32Bits(0b11111001110110000000000000000000), expected: i32(19) }, - { input: i32Bits(0b00110100100100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b11111010011000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b00000010110000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b11100111100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b00101101000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b11011010000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b11010100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b10111000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b01110000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b10100000000000000000000000000000), expected: i32(29) }, - ]); - }); + // random before trailing 1 + { input: i32Bits(0b11110000001111111101111010001111), expected: i32(0) }, + { input: i32Bits(0b11011110111111100101110011110010), expected: i32(1) }, + { input: i32Bits(0b11110111011011111111010000111100), expected: i32(2) }, + { input: i32Bits(0b11010011011101111111010011101000), expected: i32(3) }, + { input: i32Bits(0b11010111110111110001111110110000), expected: i32(4) }, + { input: i32Bits(0b11111101111101111110101111100000), expected: i32(5) }, + { input: i32Bits(0b11111001111011111001111011000000), expected: i32(6) }, + { input: i32Bits(0b11001110110111110111111010000000), expected: i32(7) }, + { input: i32Bits(0b11101111011111101110101100000000), expected: i32(8) }, + { input: i32Bits(0b11111101111011111111111000000000), expected: i32(9) }, + { input: i32Bits(0b10011111011101110110110000000000), expected: i32(10) }, + { input: i32Bits(0b11111111101101111011100000000000), expected: i32(11) }, + { input: i32Bits(0b11111011010110111011000000000000), expected: i32(12) }, + { input: i32Bits(0b00111101010000111010000000000000), expected: i32(13) }, + { input: i32Bits(0b11111011110001101100000000000000), expected: i32(14) }, + { input: i32Bits(0b10111111010111111000000000000000), expected: i32(15) }, + { input: i32Bits(0b11011101111010110000000000000000), expected: i32(16) }, + { input: i32Bits(0b01110100110110100000000000000000), expected: i32(17) }, + { input: i32Bits(0b11100111001011000000000000000000), expected: i32(18) }, + { input: i32Bits(0b11111001110110000000000000000000), expected: i32(19) }, + { input: i32Bits(0b00110100100100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b11111010011000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b00000010110000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b11100111100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b00101101000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b11011010000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b11010100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b10111000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b01110000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b10100000000000000000000000000000), expected: i32(29) }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.cache.js new file mode 100644 index 00000000000..12cee9a67fa --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.cache.js @@ -0,0 +1,24 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract]_[non_]const +// abstract_non_const is empty and not used +const cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return FP[trait].generateVectorPairToVectorCases( + FP[trait].vectorRange(3), + FP[trait].vectorRange(3), + nonConst ? 'unfiltered' : 'finite', + FP[trait].crossInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('cross', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.spec.js index 22a07688c17..f192ac89470 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/cross.spec.js @@ -1,114 +1,68 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'cross' builtin function T is AbstractFloat, f32, or f16 @const fn cross(e1: vec3 ,e2: vec3) -> vec3 Returns the cross product of e1 and e2. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeAbstractFloat, TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { sparseVectorF64Range, vectorF16Range, vectorF32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './cross.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('cross', { - f32_const: () => { - return FP.f32.generateVectorPairToVectorCases( - vectorF32Range(3), - vectorF32Range(3), - 'finite', - FP.f32.crossInterval - ); - }, - f32_non_const: () => { - return FP.f32.generateVectorPairToVectorCases( - vectorF32Range(3), - vectorF32Range(3), - 'unfiltered', - FP.f32.crossInterval - ); - }, - f16_const: () => { - return FP.f16.generateVectorPairToVectorCases( - vectorF16Range(3), - vectorF16Range(3), - 'finite', - FP.f16.crossInterval - ); - }, - f16_non_const: () => { - return FP.f16.generateVectorPairToVectorCases( - vectorF16Range(3), - vectorF16Range(3), - 'unfiltered', - FP.f16.crossInterval - ); - }, - abstract: () => { - return FP.abstract.generateVectorPairToVectorCases( - sparseVectorF64Range(3), - sparseVectorF64Range(3), - 'finite', - FP.abstract.crossInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_const'); + await run( + t, + abstractBuiltin('cross'), + [TypeVec(3, TypeAbstractFloat), TypeVec(3, TypeAbstractFloat)], + TypeVec(3, TypeAbstractFloat), + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('cross'), - [TypeVec(3, TypeAbstractFloat), TypeVec(3, TypeAbstractFloat)], - TypeVec(3, TypeAbstractFloat), - t.params, - cases - ); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run( + t, + builtin('cross'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], + TypeVec(3, TypeF32), + t.params, + cases + ); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run( - t, - builtin('cross'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], - TypeVec(3, TypeF32), - t.params, - cases - ); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run( - t, - builtin('cross'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], - TypeVec(3, TypeF16), - t.params, - cases - ); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run( + t, + builtin('cross'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], + TypeVec(3, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.cache.js new file mode 100644 index 00000000000..c9d3faca94a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.cache.js @@ -0,0 +1,23 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract]_[non_]const +// abstract_non_const is empty and not used +const cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].degreesInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('degrees', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.spec.js index 818d0d8adea..4e3d42b6d6b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/degrees.spec.js @@ -1,90 +1,63 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'degrees' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn degrees(e1: T ) -> T Converts radians to degrees, approximating e1 × 180 ÷ π. Component-wise when T is a vector -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF16Range, fullF32Range, fullF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './degrees.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('degrees', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'finite', FP.f32.degreesInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases( - fullF32Range(), - 'unfiltered', - FP.f32.degreesInterval - ); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'finite', FP.f16.degreesInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases( - fullF16Range(), - 'unfiltered', - FP.f16.degreesInterval - ); - }, - abstract: () => { - return FP.abstract.generateScalarToIntervalCases( - fullF64Range(), - 'finite', - FP.abstract.degreesInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract_const'); + await run( + t, + abstractBuiltin('degrees'), + [TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('degrees'), - [TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('degrees'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('degrees'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('degrees'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('degrees'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.cache.js new file mode 100644 index 00000000000..729d86ad795 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.cache.js @@ -0,0 +1,84 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Accuracy for determinant is only defined for e, where e is an integer and +// |e| < quadroot(2**21) [~38], +// due to computational complexity of calculating the general solution for 4x4, +// so custom matrices are used. +// +// Note: For 2x2 and 3x3 the limits are squareroot and cuberoot instead of +// quadroot, but using the tighter 4x4 limits for all cases for simplicity. +const kDeterminantValues = [-38, -10, -5, -1, 0, 1, 5, 10, 38]; + +const kDeterminantMatrixValues = { + 2: kDeterminantValues.map((f, idx) => [ + [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], + [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx]] + ), + 3: kDeterminantValues.map((f, idx) => [ + [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], + [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], + [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx]] + ), + 4: kDeterminantValues.map((f, idx) => [ + [ + idx % 16 === 0 ? f : idx, + idx % 16 === 1 ? f : -idx, + idx % 16 === 2 ? f : idx, + idx % 16 === 3 ? f : -idx], + + [ + idx % 16 === 4 ? f : -idx, + idx % 16 === 5 ? f : idx, + idx % 16 === 6 ? f : -idx, + idx % 16 === 7 ? f : idx], + + [ + idx % 16 === 8 ? f : idx, + idx % 16 === 9 ? f : -idx, + idx % 16 === 10 ? f : idx, + idx % 16 === 11 ? f : -idx], + + [ + idx % 16 === 12 ? f : -idx, + idx % 16 === 13 ? f : idx, + idx % 16 === 14 ? f : -idx, + idx % 16 === 15 ? f : idx]] + + ) +}; + +// Cases: f32_matDxD_[non_]const +const f32_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`f32_mat${dim}x${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixToScalarCases( + kDeterminantMatrixValues[dim], + nonConst ? 'unfiltered' : 'finite', + FP.f32.determinantInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: f16_matDxD_[non_]const +const f16_cases = [2, 3, 4]. +flatMap((dim) => +[true, false].map((nonConst) => ({ + [`f16_mat${dim}x${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f16.generateMatrixToScalarCases( + kDeterminantMatrixValues[dim], + nonConst ? 'unfiltered' : 'finite', + FP.f16.determinantInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('determinant', { + ...f32_cases, + ...f16_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.spec.js index 9f4ca71e685..1791ed754ee 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/determinant.spec.js @@ -1,145 +1,54 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'determinant' builtin function T is AbstractFloat, f32, or f16 @const determinant(e: matCxC ) -> T Returns the determinant of e. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeMat } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeMat } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './determinant.cache.js'; export const g = makeTestGroup(GPUTest); -// Accuracy for determinant is only defined for e, where e is an integer and -// |e| < quadroot(2**21) [~38], -// due to computational complexity of calculating the general solution for 4x4, -// so custom matrices are used. -// -// Note: For 2x2 and 3x3 the limits are squareroot and cuberoot instead of -// quadroot, but using the tighter 4x4 limits for all cases for simplicity. -const kDeterminantValues = [-38, -10, -5, -1, 0, 1, 5, 10, 38]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`abstract float tests`). +params((u) => u.combine('inputSource', allInputSources).combine('dimension', [2, 3, 4])). +unimplemented(); -const kDeterminantMatrixValues = { - 2: kDeterminantValues.map((f, idx) => [ - [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], - [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx], - ]), - - 3: kDeterminantValues.map((f, idx) => [ - [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], - [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], - [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx], - ]), - - 4: kDeterminantValues.map((f, idx) => [ - [ - idx % 16 === 0 ? f : idx, - idx % 16 === 1 ? f : -idx, - idx % 16 === 2 ? f : idx, - idx % 16 === 3 ? f : -idx, - ], - - [ - idx % 16 === 4 ? f : -idx, - idx % 16 === 5 ? f : idx, - idx % 16 === 6 ? f : -idx, - idx % 16 === 7 ? f : idx, - ], - - [ - idx % 16 === 8 ? f : idx, - idx % 16 === 9 ? f : -idx, - idx % 16 === 10 ? f : idx, - idx % 16 === 11 ? f : -idx, - ], - - [ - idx % 16 === 12 ? f : -idx, - idx % 16 === 13 ? f : idx, - idx % 16 === 14 ? f : -idx, - idx % 16 === 15 ? f : idx, - ], - ]), -}; - -// Cases: f32_matDxD_[non_]const -const f32_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`f32_mat${dim}x${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixToScalarCases( - kDeterminantMatrixValues[dim], - nonConst ? 'unfiltered' : 'finite', - FP.f32.determinantInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_matDxD_[non_]const -const f16_cases = [2, 3, 4] - .flatMap(dim => - [true, false].map(nonConst => ({ - [`f16_mat${dim}x${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixToScalarCases( - kDeterminantMatrixValues[dim], - nonConst ? 'unfiltered' : 'finite', - FP.f16.determinantInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('determinant', { - ...f32_cases, - ...f16_cases, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f32 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f32_mat${dim}x${dim}_const` : + `f32_mat${dim}x${dim}_non_const` + ); + await run(t, builtin('determinant'), [TypeMat(dim, dim, TypeF32)], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('dimension', [2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f32_mat${dim}x${dim}_const` - : `f32_mat${dim}x${dim}_non_const` - ); - - await run(t, builtin('determinant'), [TypeMat(dim, dim, TypeF32)], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const dim = t.params.dim; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f16_mat${dim}x${dim}_const` - : `f16_mat${dim}x${dim}_non_const` - ); - - await run(t, builtin('determinant'), [TypeMat(dim, dim, TypeF16)], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f16 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('dim', [2, 3, 4])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const dim = t.params.dim; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f16_mat${dim}x${dim}_const` : + `f16_mat${dim}x${dim}_non_const` + ); + await run(t, builtin('determinant'), [TypeMat(dim, dim, TypeF16)], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.cache.js new file mode 100644 index 00000000000..faeab44a9b0 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.cache.js @@ -0,0 +1,41 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_[non_]const +const scalar_cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarPairToIntervalCases( + FP[trait].scalarRange(), + FP[trait].scalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].distanceInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: [f32|f16]_vecN_[non_]const +const vec_cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateVectorPairToIntervalCases( + FP[trait].sparseVectorRange(dim), + FP[trait].sparseVectorRange(dim), + nonConst ? 'unfiltered' : 'finite', + FP[trait].distanceInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('distance', { + ...scalar_cases, + ...vec_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.spec.js index b03ec5bd9f1..72f6b686c24 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/distance.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'distance' builtin function S is AbstractFloat, f32, f16 @@ -8,239 +8,158 @@ T is S or vecN @const fn distance(e1: T ,e2: T ) -> f32 Returns the distance between e1 and e2 (e.g. length(e1-e2)). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - fullF32Range, - fullF16Range, - sparseVectorF32Range, - sparseVectorF16Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './distance.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_vecN_[non_]const -const f32_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorPairToIntervalCases( - sparseVectorF32Range(n), - sparseVectorF32Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f32.distanceInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -// Cases: f16_vecN_[non_]const -const f16_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorPairToIntervalCases( - sparseVectorF16Range(n), - sparseVectorF16Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f16.distanceInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('distance', { - f32_const: () => { - return FP.f32.generateScalarPairToIntervalCases( - fullF32Range(), - fullF32Range(), - 'finite', - FP.f32.distanceInterval - ); - }, - f32_non_const: () => { - return FP.f32.generateScalarPairToIntervalCases( - fullF32Range(), - fullF32Range(), - 'unfiltered', - FP.f32.distanceInterval - ); - }, - ...f32_vec_cases, - f16_const: () => { - return FP.f16.generateScalarPairToIntervalCases( - fullF16Range(), - fullF16Range(), - 'finite', - FP.f16.distanceInterval - ); - }, - f16_non_const: () => { - return FP.f16.generateScalarPairToIntervalCases( - fullF16Range(), - fullF16Range(), - 'unfiltered', - FP.f16.distanceInterval - ); - }, - ...f16_vec_cases, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('distance'), [TypeF32, TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run( + t, + builtin('distance'), + [TypeVec(2, TypeF32), TypeVec(2, TypeF32)], + TypeF32, + t.params, + cases + ); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('distance'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run( + t, + builtin('distance'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], + TypeF32, + t.params, + cases + ); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run( + t, + builtin('distance'), + [TypeVec(4, TypeF32), TypeVec(4, TypeF32)], + TypeF32, + t.params, + cases + ); +}); - await run( - t, - builtin('distance'), - [TypeVec(2, TypeF32), TypeVec(2, TypeF32)], - TypeF32, - t.params, - cases - ); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('distance'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run( + t, + builtin('distance'), + [TypeVec(2, TypeF16), TypeVec(2, TypeF16)], + TypeF16, + t.params, + cases + ); +}); - await run( - t, - builtin('distance'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], - TypeF32, - t.params, - cases - ); - }); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run( + t, + builtin('distance'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], + TypeF16, + t.params, + cases + ); +}); -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run( - t, - builtin('distance'), - [TypeVec(4, TypeF32), TypeVec(4, TypeF32)], - TypeF32, - t.params, - cases - ); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('distance'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run( - t, - builtin('distance'), - [TypeVec(2, TypeF16), TypeVec(2, TypeF16)], - TypeF16, - t.params, - cases - ); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run( - t, - builtin('distance'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], - TypeF16, - t.params, - cases - ); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run( - t, - builtin('distance'), - [TypeVec(4, TypeF16), TypeVec(4, TypeF16)], - TypeF16, - t.params, - cases - ); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run( + t, + builtin('distance'), + [TypeVec(4, TypeF16), TypeVec(4, TypeF16)], + TypeF16, + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.cache.js new file mode 100644 index 00000000000..56d12bef598 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.cache.js @@ -0,0 +1,24 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_vecN_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((N) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${N}_${nonConst ? 'non_const' : 'const'}`]: () => { + // vec3 and vec4 require calculating all possible permutations, so their runtime is much + // longer per test, so only using sparse vectors for them. + return FP[trait].generateVectorPairToIntervalCases( + N === 2 ? FP[trait].vectorRange(2) : FP[trait].sparseVectorRange(N), + N === 2 ? FP[trait].vectorRange(2) : FP[trait].sparseVectorRange(N), + nonConst ? 'unfiltered' : 'finite', + FP[trait].dotInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('dot', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.spec.js index 0c4a04ea842..c23848f11f4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dot.spec.js @@ -1,189 +1,158 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dot' builtin function T is AbstractInt, AbstractFloat, i32, u32, f32, or f16 @const fn dot(e1: vecN,e2: vecN) -> T Returns the dot product of e1 and e2. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { sparseVectorF32Range, vectorF32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './dot.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: [f32|f16]_vecN_[non_]const -const cases = ['f32', 'f16'] - .flatMap(trait => - [2, 3, 4].flatMap(N => - [true, false].map(nonConst => ({ - [`${trait}_vec${N}_${nonConst ? 'non_const' : 'const'}`]: () => { - // vec3 and vec4 require calculating all possible permutations, so their runtime is much - // longer per test, so only using sparse vectors for them. - return FP[trait].generateVectorPairToIntervalCases( - N === 2 ? vectorF32Range(2) : sparseVectorF32Range(N), - N === 2 ? vectorF32Range(2) : sparseVectorF32Range(N), - nonConst ? 'unfiltered' : 'finite', - FP[trait].dotInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`abstract int tests`). +params((u) => u.combine('inputSource', allInputSources)). +unimplemented(); -export const d = makeCaseCache('dot', cases); +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`i32 tests`). +params((u) => u.combine('inputSource', allInputSources)). +unimplemented(); -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`abstract int tests`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`u32 tests`). +params((u) => u.combine('inputSource', allInputSources)). +unimplemented(); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`abstract float test`). +params((u) => u.combine('inputSource', allInputSources)). +unimplemented(); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run( + t, + builtin('dot'), + [TypeVec(2, TypeF32), TypeVec(2, TypeF32)], + TypeF32, + t.params, + cases + ); +}); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`abstract float test`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run( + t, + builtin('dot'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], + TypeF32, + t.params, + cases + ); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run( + t, + builtin('dot'), + [TypeVec(4, TypeF32), TypeVec(4, TypeF32)], + TypeF32, + t.params, + cases + ); +}); - await run( - t, - builtin('dot'), - [TypeVec(2, TypeF32), TypeVec(2, TypeF32)], - TypeF32, - t.params, - cases - ); - }); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run( + t, + builtin('dot'), + [TypeVec(2, TypeF16), TypeVec(2, TypeF16)], + TypeF16, + t.params, + cases + ); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run( + t, + builtin('dot'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], + TypeF16, + t.params, + cases + ); +}); - await run( - t, - builtin('dot'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], - TypeF32, - t.params, - cases - ); - }); - -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run( - t, - builtin('dot'), - [TypeVec(4, TypeF32), TypeVec(4, TypeF32)], - TypeF32, - t.params, - cases - ); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run( - t, - builtin('dot'), - [TypeVec(2, TypeF16), TypeVec(2, TypeF16)], - TypeF16, - t.params, - cases - ); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run( - t, - builtin('dot'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], - TypeF16, - t.params, - cases - ); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run( - t, - builtin('dot'), - [TypeVec(4, TypeF16), TypeVec(4, TypeF16)], - TypeF16, - t.params, - cases - ); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#vector-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run( + t, + builtin('dot'), + [TypeVec(4, TypeF16), TypeVec(4, TypeF16)], + TypeF16, + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdx.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdx.spec.js index c4d5413b701..9d595f7d236 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdx.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdx.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dpdx' builtin function T is f32 or vecN @@ -8,15 +8,16 @@ fn dpdx(e:T) -> T Partial derivative of e with respect to window x coordinates. The result is the same as either dpdxFine(e) or dpdxCoarse(e). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxCoarse.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxCoarse.spec.js index 8b37d1982bd..db31f42df16 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxCoarse.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxCoarse.spec.js @@ -1,21 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dpdxCoarse' builtin function T is f32 or vecN fn dpdxCoarse(e:T) ->T Returns the partial derivative of e with respect to window x coordinates using local differences. This may result in fewer unique positions that dpdxFine(e). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxFine.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxFine.spec.js index 57c1f49b477..5eaf7924391 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxFine.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdxFine.spec.js @@ -1,20 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dpdxFine' builtin function T is f32 or vecN fn dpdxFine(e:T) ->T Returns the partial derivative of e with respect to window x coordinates. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdy.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdy.spec.js index 9e9debdf582..edba9b14c14 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdy.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdy.spec.js @@ -1,21 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dpdy' builtin function T is f32 or vecN fn dpdy(e:T) ->T Partial derivative of e with respect to window y coordinates. The result is the same as either dpdyFine(e) or dpdyCoarse(e). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyCoarse.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyCoarse.spec.js index f477a883305..f002a587b6b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyCoarse.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyCoarse.spec.js @@ -1,21 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dpdyCoarse' builtin function T is f32 or vecN fn dpdyCoarse(e:T) ->T Returns the partial derivative of e with respect to window y coordinates using local differences. This may result in fewer unique positions that dpdyFine(e). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 test`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 test`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyFine.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyFine.spec.js index dc986daeec8..405914acf19 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyFine.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/dpdyFine.spec.js @@ -1,20 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'dpdyFine' builtin function T is f32 or vecN fn dpdyFine(e:T) ->T Returns the partial derivative of e with respect to window y coordinates. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.cache.js new file mode 100644 index 00000000000..6fff05ae768 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.cache.js @@ -0,0 +1,40 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../../util/constants.js';import { FP } from '../../../../../util/floating_point.js';import { biasedRange, linearRange } from '../../../../../util/math.js'; +import { makeCaseCache } from '../../case_cache.js'; + +// floor(ln(max f32 value)) = 88, so exp(88) will be within range of a f32, but exp(89) will not +// floor(ln(max f64 value)) = 709, so exp(709) can be handled by the testing framework, but exp(710) will misbehave +const f32_inputs = [ +0, // Returns 1 by definition +-89, // Returns subnormal value +kValue.f32.negative.min, // Closest to returning 0 as possible +...biasedRange(kValue.f32.negative.max, -88, 100), +...biasedRange(kValue.f32.positive.min, 88, 100), +...linearRange(89, 709, 10) // Overflows f32, but not f64 +]; + +// floor(ln(max f16 value)) = 11, so exp(11) will be within range of a f16, but exp(12) will not +const f16_inputs = [ +0, // Returns 1 by definition +-12, // Returns subnormal value +kValue.f16.negative.min, // Closest to returning 0 as possible +...biasedRange(kValue.f16.negative.max, -11, 100), +...biasedRange(kValue.f16.positive.min, 11, 100), +...linearRange(12, 709, 10) // Overflows f16, but not f64 +]; + +export const d = makeCaseCache('exp', { + f32_const: () => { + return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.expInterval); + }, + f32_non_const: () => { + return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.expInterval); + }, + f16_const: () => { + return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.expInterval); + }, + f16_non_const: () => { + return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.expInterval); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.spec.js index cc71398ef9f..e06613beb26 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp.spec.js @@ -1,85 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'exp' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn exp(e1: T ) -> T Returns the natural exponentiation of e1 (e.g. e^e1). Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './exp.cache.js'; export const g = makeTestGroup(GPUTest); -// floor(ln(max f32 value)) = 88, so exp(88) will be within range of a f32, but exp(89) will not -// floor(ln(max f64 value)) = 709, so exp(709) can be handled by the testing framework, but exp(710) will misbehave -const f32_inputs = [ - 0, // Returns 1 by definition - -89, // Returns subnormal value - kValue.f32.negative.min, // Closest to returning 0 as possible - ...biasedRange(kValue.f32.negative.max, -88, 100), - ...biasedRange(kValue.f32.positive.min, 88, 100), - ...linearRange(89, 709, 10), // Overflows f32, but not f64 -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -// floor(ln(max f16 value)) = 11, so exp(11) will be within range of a f16, but exp(12) will not -const f16_inputs = [ - 0, // Returns 1 by definition - -12, // Returns subnormal value - kValue.f16.negative.min, // Closest to returning 0 as possible - ...biasedRange(kValue.f16.negative.max, -11, 100), - ...biasedRange(kValue.f16.positive.min, 11, 100), - ...linearRange(12, 709, 10), // Overflows f16, but not f64 -]; - -export const d = makeCaseCache('exp', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.expInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.expInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.expInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.expInterval); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('exp'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('exp'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('exp'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('exp'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.cache.js new file mode 100644 index 00000000000..df2b9edd41a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.cache.js @@ -0,0 +1,40 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../../util/constants.js';import { FP } from '../../../../../util/floating_point.js';import { biasedRange, linearRange } from '../../../../../util/math.js'; +import { makeCaseCache } from '../../case_cache.js'; + +// floor(log2(max f32 value)) = 127, so exp2(127) will be within range of a f32, but exp2(128) will not +// floor(ln(max f64 value)) = 1023, so exp2(1023) can be handled by the testing framework, but exp2(1024) will misbehave +const f32_inputs = [ +0, // Returns 1 by definition +-128, // Returns subnormal value +kValue.f32.negative.min, // Closest to returning 0 as possible +...biasedRange(kValue.f32.negative.max, -127, 100), +...biasedRange(kValue.f32.positive.min, 127, 100), +...linearRange(128, 1023, 10) // Overflows f32, but not f64 +]; + +// floor(log2(max f16 value)) = 15, so exp2(15) will be within range of a f16, but exp2(15) will not +const f16_inputs = [ +0, // Returns 1 by definition +-16, // Returns subnormal value +kValue.f16.negative.min, // Closest to returning 0 as possible +...biasedRange(kValue.f16.negative.max, -15, 100), +...biasedRange(kValue.f16.positive.min, 15, 100), +...linearRange(16, 1023, 10) // Overflows f16, but not f64 +]; + +export const d = makeCaseCache('exp2', { + f32_const: () => { + return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.exp2Interval); + }, + f32_non_const: () => { + return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.exp2Interval); + }, + f16_const: () => { + return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.exp2Interval); + }, + f16_non_const: () => { + return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.exp2Interval); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.spec.js index 59fe1646bef..04f381730c6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/exp2.spec.js @@ -1,85 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'exp2' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn exp2(e: T ) -> T Returns 2 raised to the power e (e.g. 2^e). Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './exp2.cache.js'; export const g = makeTestGroup(GPUTest); -// floor(log2(max f32 value)) = 127, so exp2(127) will be within range of a f32, but exp2(128) will not -// floor(ln(max f64 value)) = 1023, so exp2(1023) can be handled by the testing framework, but exp2(1024) will misbehave -const f32_inputs = [ - 0, // Returns 1 by definition - -128, // Returns subnormal value - kValue.f32.negative.min, // Closest to returning 0 as possible - ...biasedRange(kValue.f32.negative.max, -127, 100), - ...biasedRange(kValue.f32.positive.min, 127, 100), - ...linearRange(128, 1023, 10), // Overflows f32, but not f64 -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -// floor(log2(max f16 value)) = 15, so exp2(15) will be within range of a f16, but exp2(15) will not -const f16_inputs = [ - 0, // Returns 1 by definition - -16, // Returns subnormal value - kValue.f16.negative.min, // Closest to returning 0 as possible - ...biasedRange(kValue.f16.negative.max, -15, 100), - ...biasedRange(kValue.f16.positive.min, 15, 100), - ...linearRange(16, 1023, 10), // Overflows f16, but not f64 -]; - -export const d = makeCaseCache('exp2', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.exp2Interval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.exp2Interval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.exp2Interval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.exp2Interval); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('exp2'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('exp2'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('exp2'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('exp2'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/extractBits.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/extractBits.spec.js index cc6b466092f..3faccc58a7b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/extractBits.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/extractBits.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'extractBits' builtin function T is u32 or vecN @@ -31,8 +31,7 @@ The result is 0 if c is 0. Otherwise, bits 0..c-1 of the result are copied from bits o..o+c-1 of e. Other bits of the result are the same as bit c-1 of the result. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { i32Bits, @@ -43,296 +42,296 @@ import { vec2, vec3, vec4, - TypeVec, -} from '../../../../../util/conversion.js'; + TypeVec } from +'../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('width', [1, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('width', [1, 2, 3, 4])). +fn(async (t) => { + const cfg = t.params; - const T = t.params.width === 1 ? TypeU32 : TypeVec(t.params.width, TypeU32); + const T = t.params.width === 1 ? TypeU32 : TypeVec(t.params.width, TypeU32); - const V = (x, y, z, w) => { - y = y === undefined ? x : y; - z = z === undefined ? x : z; - w = w === undefined ? x : w; + const V = (x, y, z, w) => { + y = y === undefined ? x : y; + z = z === undefined ? x : z; + w = w === undefined ? x : w; - switch (t.params.width) { - case 1: - return u32Bits(x); - case 2: - return vec2(u32Bits(x), u32Bits(y)); - case 3: - return vec3(u32Bits(x), u32Bits(y), u32Bits(z)); - default: - return vec4(u32Bits(x), u32Bits(y), u32Bits(z), u32Bits(w)); - } - }; + switch (t.params.width) { + case 1: + return u32Bits(x); + case 2: + return vec2(u32Bits(x), u32Bits(y)); + case 3: + return vec3(u32Bits(x), u32Bits(y), u32Bits(z)); + default: + return vec4(u32Bits(x), u32Bits(y), u32Bits(z), u32Bits(w)); + } + }; - const all_1 = V(0b11111111111111111111111111111111); - const all_0 = V(0b00000000000000000000000000000000); - const low_1 = V(0b00000000000000000000000000000001); - const high_1 = V(0b10000000000000000000000000000000); - const pattern = V( - 0b00000000000111011100000000000000, - 0b11111111111000000011111111111111, - 0b00000000010101010101000000000000, - 0b00000000001010101010100000000000 - ); + const all_1 = V(0b11111111111111111111111111111111); + const all_0 = V(0b00000000000000000000000000000000); + const low_1 = V(0b00000000000000000000000000000001); + const high_1 = V(0b10000000000000000000000000000000); + const pattern = V( + 0b00000000000111011100000000000000, + 0b11111111111000000011111111111111, + 0b00000000010101010101000000000000, + 0b00000000001010101010100000000000 + ); - const cases = [ - { input: [all_0, u32(0), u32(32)], expected: all_0 }, - { input: [all_0, u32(1), u32(10)], expected: all_0 }, - { input: [all_0, u32(2), u32(5)], expected: all_0 }, - { input: [all_0, u32(0), u32(1)], expected: all_0 }, - { input: [all_0, u32(31), u32(1)], expected: all_0 }, + const cases = [ + { input: [all_0, u32(0), u32(32)], expected: all_0 }, + { input: [all_0, u32(1), u32(10)], expected: all_0 }, + { input: [all_0, u32(2), u32(5)], expected: all_0 }, + { input: [all_0, u32(0), u32(1)], expected: all_0 }, + { input: [all_0, u32(31), u32(1)], expected: all_0 }, - { input: [all_1, u32(0), u32(32)], expected: all_1 }, + { input: [all_1, u32(0), u32(32)], expected: all_1 }, + { + input: [all_1, u32(1), u32(10)], + expected: V(0b00000000000000000000001111111111) + }, + { + input: [all_1, u32(2), u32(5)], + expected: V(0b00000000000000000000000000011111) + }, + { input: [all_1, u32(0), u32(1)], expected: low_1 }, + { input: [all_1, u32(31), u32(1)], expected: low_1 }, + + // Patterns + { input: [pattern, u32(0), u32(32)], expected: pattern }, + { + input: [pattern, u32(1), u32(31)], + expected: V( + 0b00000000000011101110000000000000, + 0b01111111111100000001111111111111, + 0b00000000001010101010100000000000, + 0b00000000000101010101010000000000 + ) + }, + { + input: [pattern, u32(14), u32(18)], + expected: V( + 0b00000000000000000000000001110111, + 0b00000000000000111111111110000000, + 0b00000000000000000000000101010101, + 0b00000000000000000000000010101010 + ) + }, + { + input: [pattern, u32(14), u32(7)], + expected: V( + 0b00000000000000000000000001110111, + 0b00000000000000000000000000000000, + 0b00000000000000000000000001010101, + 0b00000000000000000000000000101010 + ) + }, + { + input: [pattern, u32(14), u32(4)], + expected: V( + 0b00000000000000000000000000000111, + 0b00000000000000000000000000000000, + 0b00000000000000000000000000000101, + 0b00000000000000000000000000001010 + ) + }, + { + input: [pattern, u32(14), u32(3)], + expected: V( + 0b00000000000000000000000000000111, + 0b00000000000000000000000000000000, + 0b00000000000000000000000000000101, + 0b00000000000000000000000000000010 + ) + }, + { + input: [pattern, u32(18), u32(3)], + expected: V( + 0b00000000000000000000000000000111, + 0b00000000000000000000000000000000, + 0b00000000000000000000000000000101, + 0b00000000000000000000000000000010 + ) + }, + { input: [low_1, u32(0), u32(1)], expected: low_1 }, + { input: [high_1, u32(31), u32(1)], expected: low_1 }, + + // Zero count + { input: [all_1, u32(0), u32(0)], expected: all_0 }, + { input: [all_0, u32(0), u32(0)], expected: all_0 }, + { input: [low_1, u32(0), u32(0)], expected: all_0 }, + { input: [high_1, u32(31), u32(0)], expected: all_0 }, + { input: [pattern, u32(0), u32(0)], expected: all_0 }]; + + + if (t.params.inputSource !== 'const') { + cases.push( + ...[ + // End overflow + { input: [low_1, u32(0), u32(99)], expected: low_1 }, + { input: [high_1, u32(31), u32(99)], expected: low_1 }, + { input: [pattern, u32(0), u32(99)], expected: pattern }, { - input: [all_1, u32(1), u32(10)], - expected: V(0b00000000000000000000001111111111), - }, - { - input: [all_1, u32(2), u32(5)], - expected: V(0b00000000000000000000000000011111), - }, - { input: [all_1, u32(0), u32(1)], expected: low_1 }, - { input: [all_1, u32(31), u32(1)], expected: low_1 }, - - // Patterns - { input: [pattern, u32(0), u32(32)], expected: pattern }, - { - input: [pattern, u32(1), u32(31)], - expected: V( - 0b00000000000011101110000000000000, - 0b01111111111100000001111111111111, - 0b00000000001010101010100000000000, - 0b00000000000101010101010000000000 - ), - }, - { - input: [pattern, u32(14), u32(18)], + input: [pattern, u32(14), u32(99)], expected: V( 0b00000000000000000000000001110111, 0b00000000000000111111111110000000, 0b00000000000000000000000101010101, 0b00000000000000000000000010101010 - ), - }, - { - input: [pattern, u32(14), u32(7)], - expected: V( - 0b00000000000000000000000001110111, - 0b00000000000000000000000000000000, - 0b00000000000000000000000001010101, - 0b00000000000000000000000000101010 - ), - }, - { - input: [pattern, u32(14), u32(4)], - expected: V( - 0b00000000000000000000000000000111, - 0b00000000000000000000000000000000, - 0b00000000000000000000000000000101, - 0b00000000000000000000000000001010 - ), - }, - { - input: [pattern, u32(14), u32(3)], - expected: V( - 0b00000000000000000000000000000111, - 0b00000000000000000000000000000000, - 0b00000000000000000000000000000101, - 0b00000000000000000000000000000010 - ), - }, - { - input: [pattern, u32(18), u32(3)], - expected: V( - 0b00000000000000000000000000000111, - 0b00000000000000000000000000000000, - 0b00000000000000000000000000000101, - 0b00000000000000000000000000000010 - ), - }, - { input: [low_1, u32(0), u32(1)], expected: low_1 }, - { input: [high_1, u32(31), u32(1)], expected: low_1 }, + ) + }] - // Zero count - { input: [all_1, u32(0), u32(0)], expected: all_0 }, - { input: [all_0, u32(0), u32(0)], expected: all_0 }, - { input: [low_1, u32(0), u32(0)], expected: all_0 }, - { input: [high_1, u32(31), u32(0)], expected: all_0 }, - { input: [pattern, u32(0), u32(0)], expected: all_0 }, - ]; - - if (t.params.inputSource !== 'const') { - cases.push( - ...[ - // End overflow - { input: [low_1, u32(0), u32(99)], expected: low_1 }, - { input: [high_1, u32(31), u32(99)], expected: low_1 }, - { input: [pattern, u32(0), u32(99)], expected: pattern }, - { - input: [pattern, u32(14), u32(99)], - expected: V( - 0b00000000000000000000000001110111, - 0b00000000000000111111111110000000, - 0b00000000000000000000000101010101, - 0b00000000000000000000000010101010 - ), - }, - ] - ); - } - - await run(t, builtin('extractBits'), [T, TypeU32, TypeU32], T, cfg, cases); - }); - -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('width', [1, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - - const T = t.params.width === 1 ? TypeI32 : TypeVec(t.params.width, TypeI32); - - const V = (x, y, z, w) => { - y = y === undefined ? x : y; - z = z === undefined ? x : z; - w = w === undefined ? x : w; - - switch (t.params.width) { - case 1: - return i32Bits(x); - case 2: - return vec2(i32Bits(x), i32Bits(y)); - case 3: - return vec3(i32Bits(x), i32Bits(y), i32Bits(z)); - default: - return vec4(i32Bits(x), i32Bits(y), i32Bits(z), i32Bits(w)); - } - }; - - const all_1 = V(0b11111111111111111111111111111111); - const all_0 = V(0b00000000000000000000000000000000); - const low_1 = V(0b00000000000000000000000000000001); - const high_1 = V(0b10000000000000000000000000000000); - const pattern = V( - 0b00000000000111011100000000000000, - 0b11111111111000000011111111111111, - 0b00000000010101010101000000000000, - 0b00000000001010101010100000000000 ); + } - const cases = [ - { input: [all_0, u32(0), u32(32)], expected: all_0 }, - { input: [all_0, u32(1), u32(10)], expected: all_0 }, - { input: [all_0, u32(2), u32(5)], expected: all_0 }, - { input: [all_0, u32(0), u32(1)], expected: all_0 }, - { input: [all_0, u32(31), u32(1)], expected: all_0 }, + await run(t, builtin('extractBits'), [T, TypeU32, TypeU32], T, cfg, cases); +}); - { input: [all_1, u32(0), u32(32)], expected: all_1 }, - { input: [all_1, u32(1), u32(10)], expected: all_1 }, - { input: [all_1, u32(2), u32(5)], expected: all_1 }, - { input: [all_1, u32(0), u32(1)], expected: all_1 }, - { input: [all_1, u32(31), u32(1)], expected: all_1 }, +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => u.combine('inputSource', allInputSources).combine('width', [1, 2, 3, 4])). +fn(async (t) => { + const cfg = t.params; - // Patterns - { input: [pattern, u32(0), u32(32)], expected: pattern }, + const T = t.params.width === 1 ? TypeI32 : TypeVec(t.params.width, TypeI32); + + const V = (x, y, z, w) => { + y = y === undefined ? x : y; + z = z === undefined ? x : z; + w = w === undefined ? x : w; + + switch (t.params.width) { + case 1: + return i32Bits(x); + case 2: + return vec2(i32Bits(x), i32Bits(y)); + case 3: + return vec3(i32Bits(x), i32Bits(y), i32Bits(z)); + default: + return vec4(i32Bits(x), i32Bits(y), i32Bits(z), i32Bits(w)); + } + }; + + const all_1 = V(0b11111111111111111111111111111111); + const all_0 = V(0b00000000000000000000000000000000); + const low_1 = V(0b00000000000000000000000000000001); + const high_1 = V(0b10000000000000000000000000000000); + const pattern = V( + 0b00000000000111011100000000000000, + 0b11111111111000000011111111111111, + 0b00000000010101010101000000000000, + 0b00000000001010101010100000000000 + ); + + const cases = [ + { input: [all_0, u32(0), u32(32)], expected: all_0 }, + { input: [all_0, u32(1), u32(10)], expected: all_0 }, + { input: [all_0, u32(2), u32(5)], expected: all_0 }, + { input: [all_0, u32(0), u32(1)], expected: all_0 }, + { input: [all_0, u32(31), u32(1)], expected: all_0 }, + + { input: [all_1, u32(0), u32(32)], expected: all_1 }, + { input: [all_1, u32(1), u32(10)], expected: all_1 }, + { input: [all_1, u32(2), u32(5)], expected: all_1 }, + { input: [all_1, u32(0), u32(1)], expected: all_1 }, + { input: [all_1, u32(31), u32(1)], expected: all_1 }, + + // Patterns + { input: [pattern, u32(0), u32(32)], expected: pattern }, + { + input: [pattern, u32(1), u32(31)], + expected: V( + 0b00000000000011101110000000000000, + 0b11111111111100000001111111111111, + 0b00000000001010101010100000000000, + 0b00000000000101010101010000000000 + ) + }, + { + input: [pattern, u32(14), u32(18)], + expected: V( + 0b00000000000000000000000001110111, + 0b11111111111111111111111110000000, + 0b00000000000000000000000101010101, + 0b00000000000000000000000010101010 + ) + }, + { + input: [pattern, u32(14), u32(7)], + expected: V( + 0b11111111111111111111111111110111, + 0b00000000000000000000000000000000, + 0b11111111111111111111111111010101, + 0b00000000000000000000000000101010 + ) + }, + { + input: [pattern, u32(14), u32(4)], + expected: V( + 0b00000000000000000000000000000111, + 0b00000000000000000000000000000000, + 0b00000000000000000000000000000101, + 0b11111111111111111111111111111010 + ) + }, + { + input: [pattern, u32(14), u32(3)], + expected: V( + 0b11111111111111111111111111111111, + 0b00000000000000000000000000000000, + 0b11111111111111111111111111111101, + 0b00000000000000000000000000000010 + ) + }, + { + input: [pattern, u32(18), u32(3)], + expected: V( + 0b11111111111111111111111111111111, + 0b00000000000000000000000000000000, + 0b11111111111111111111111111111101, + 0b00000000000000000000000000000010 + ) + }, + { input: [low_1, u32(0), u32(1)], expected: all_1 }, + { input: [high_1, u32(31), u32(1)], expected: all_1 }, + + // Zero count + { input: [all_1, u32(0), u32(0)], expected: all_0 }, + { input: [all_0, u32(0), u32(0)], expected: all_0 }, + { input: [low_1, u32(0), u32(0)], expected: all_0 }, + { input: [high_1, u32(31), u32(0)], expected: all_0 }, + { input: [pattern, u32(0), u32(0)], expected: all_0 }]; + + + if (t.params.inputSource !== 'const') { + cases.push( + ...[ + // End overflow + { input: [low_1, u32(0), u32(99)], expected: low_1 }, + { input: [high_1, u32(31), u32(99)], expected: all_1 }, + { input: [pattern, u32(0), u32(99)], expected: pattern }, { - input: [pattern, u32(1), u32(31)], - expected: V( - 0b00000000000011101110000000000000, - 0b11111111111100000001111111111111, - 0b00000000001010101010100000000000, - 0b00000000000101010101010000000000 - ), - }, - { - input: [pattern, u32(14), u32(18)], + input: [pattern, u32(14), u32(99)], expected: V( 0b00000000000000000000000001110111, 0b11111111111111111111111110000000, 0b00000000000000000000000101010101, 0b00000000000000000000000010101010 - ), - }, - { - input: [pattern, u32(14), u32(7)], - expected: V( - 0b11111111111111111111111111110111, - 0b00000000000000000000000000000000, - 0b11111111111111111111111111010101, - 0b00000000000000000000000000101010 - ), - }, - { - input: [pattern, u32(14), u32(4)], - expected: V( - 0b00000000000000000000000000000111, - 0b00000000000000000000000000000000, - 0b00000000000000000000000000000101, - 0b11111111111111111111111111111010 - ), - }, - { - input: [pattern, u32(14), u32(3)], - expected: V( - 0b11111111111111111111111111111111, - 0b00000000000000000000000000000000, - 0b11111111111111111111111111111101, - 0b00000000000000000000000000000010 - ), - }, - { - input: [pattern, u32(18), u32(3)], - expected: V( - 0b11111111111111111111111111111111, - 0b00000000000000000000000000000000, - 0b11111111111111111111111111111101, - 0b00000000000000000000000000000010 - ), - }, - { input: [low_1, u32(0), u32(1)], expected: all_1 }, - { input: [high_1, u32(31), u32(1)], expected: all_1 }, + ) + }] - // Zero count - { input: [all_1, u32(0), u32(0)], expected: all_0 }, - { input: [all_0, u32(0), u32(0)], expected: all_0 }, - { input: [low_1, u32(0), u32(0)], expected: all_0 }, - { input: [high_1, u32(31), u32(0)], expected: all_0 }, - { input: [pattern, u32(0), u32(0)], expected: all_0 }, - ]; + ); + } - if (t.params.inputSource !== 'const') { - cases.push( - ...[ - // End overflow - { input: [low_1, u32(0), u32(99)], expected: low_1 }, - { input: [high_1, u32(31), u32(99)], expected: all_1 }, - { input: [pattern, u32(0), u32(99)], expected: pattern }, - { - input: [pattern, u32(14), u32(99)], - expected: V( - 0b00000000000000000000000001110111, - 0b11111111111111111111111110000000, - 0b00000000000000000000000101010101, - 0b00000000000000000000000010101010 - ), - }, - ] - ); - } - - await run(t, builtin('extractBits'), [T, TypeU32, TypeU32], T, cfg, cases); - }); + await run(t, builtin('extractBits'), [T, TypeU32, TypeU32], T, cfg, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.cache.js new file mode 100644 index 00000000000..cd3b559955b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.cache.js @@ -0,0 +1,98 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf } from '../../../../../util/compare.js';import { toVector } from '../../../../../util/conversion.js'; +import { FP } from '../../../../../util/floating_point.js'; +import { cartesianProduct } from '../../../../../util/math.js'; + +import { makeCaseCache } from '../../case_cache.js'; + + +// Using a bespoke implementation of make*Case and generate*Cases here +// since faceForwardIntervals is the only builtin with the API signature +// (vec, vec, vec) -> vec +// +// Additionally faceForward has significant complexities around it due to the +// fact that `dot` is calculated in it s operation, but the result of dot isn't +// used to calculate the builtin's result. + +/** + * @returns a Case for `faceForward` + * @param kind what kind of floating point numbers being operated on + * @param x the `x` param for the case + * @param y the `y` param for the case + * @param z the `z` param for the case + * @param check what interval checking to apply + * */ +function makeCase( +kind, +x, +y, +z, +check) +{ + const fp = FP[kind]; + x = x.map(fp.quantize); + y = y.map(fp.quantize); + z = z.map(fp.quantize); + + const results = FP[kind].faceForwardIntervals(x, y, z); + if (check === 'finite' && results.some((r) => r === undefined)) { + return undefined; + } + + // Stripping the undefined results, since undefined is used to signal that an OOB + // could occur within the calculation that isn't reflected in the result + // intervals. + const define_results = results.filter((r) => r !== undefined); + + return { + input: [ + toVector(x, fp.scalarBuilder), + toVector(y, fp.scalarBuilder), + toVector(z, fp.scalarBuilder)], + + expected: anyOf(...define_results) + }; +} + +/** + * @returns an array of Cases for `faceForward` + * @param kind what kind of floating point numbers being operated on + * @param xs array of inputs to try for the `x` param + * @param ys array of inputs to try for the `y` param + * @param zs array of inputs to try for the `z` param + * @param check what interval checking to apply + */ +function generateCases( +kind, +xs, +ys, +zs, +check) +{ + // Cannot use `cartesianProduct` here due to heterogeneous param types + return cartesianProduct(xs, ys, zs). + map((e) => makeCase(kind, e[0], e[1], e[2], check)). + filter((c) => c !== undefined); +} + +// Cases: [f32|f16]_vecN_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return generateCases( + trait, + FP[trait].sparseVectorRange(dim), + FP[trait].sparseVectorRange(dim), + FP[trait].sparseVectorRange(dim), + nonConst ? 'unfiltered' : 'finite' + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('faceForward', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.spec.js index 125fd0ec2b4..ab96642124d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/faceForward.spec.js @@ -1,251 +1,140 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'faceForward' builtin function T is vecN, vecN, or vecN @const fn faceForward(e1: T ,e2: T ,e3: T ) -> T Returns e1 if dot(e2,e3) is negative, and -e1 otherwise. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { anyOf } from '../../../../../util/compare.js'; -import { toVector, TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - cartesianProduct, - sparseVectorF32Range, - sparseVectorF16Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './faceForward.cache.js'; export const g = makeTestGroup(GPUTest); -// Using a bespoke implementation of make*Case and generate*Cases here -// since faceForwardIntervals is the only builtin with the API signature -// (vec, vec, vec) -> vec -// -// Additionally faceForward has significant complexities around it due to the -// fact that `dot` is calculated in it s operation, but the result of dot isn't -// used to calculate the builtin's result. +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +unimplemented(); -/** - * @returns a Case for `faceForward` - * @param kind what kind of floating point numbers being operated on - * @param x the `x` param for the case - * @param y the `y` param for the case - * @param z the `z` param for the case - * @param check what interval checking to apply - * */ -function makeCase(kind, x, y, z, check) { - const fp = FP[kind]; - x = x.map(fp.quantize); - y = y.map(fp.quantize); - z = z.map(fp.quantize); - - const results = FP[kind].faceForwardIntervals(x, y, z); - if (check === 'finite' && results.some(r => r === undefined)) { - return undefined; - } - - // Stripping the undefined results, since undefined is used to signal that an OOB - // could occur within the calculation that isn't reflected in the result - // intervals. - const define_results = results.filter(r => r !== undefined); - - return { - input: [ - toVector(x, fp.scalarBuilder), - toVector(y, fp.scalarBuilder), - toVector(z, fp.scalarBuilder), - ], - - expected: anyOf(...define_results), - }; -} - -/** - * @returns an array of Cases for `faceForward` - * @param kind what kind of floating point numbers being operated on - * @param xs array of inputs to try for the `x` param - * @param ys array of inputs to try for the `y` param - * @param zs array of inputs to try for the `z` param - * @param check what interval checking to apply - */ -function generateCases(kind, xs, ys, zs, check) { - // Cannot use `cartesianProduct` here due to heterogeneous param types - return cartesianProduct(xs, ys, zs) - .map(e => makeCase(kind, e[0], e[1], e[2], check)) - .filter(c => c !== undefined); -} - -// Cases: f32_vecN_[non_]const -const f32_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return generateCases( - 'f32', - sparseVectorF32Range(n), - sparseVectorF32Range(n), - sparseVectorF32Range(n), - nonConst ? 'unfiltered' : 'finite' - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_vecN_[non_]const -const f16_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return generateCases( - 'f16', - sparseVectorF16Range(n), - sparseVectorF16Range(n), - sparseVectorF16Range(n), - nonConst ? 'unfiltered' : 'finite' - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('faceForward', { - ...f32_vec_cases, - ...f16_vec_cases, +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run( + t, + builtin('faceForward'), + [TypeVec(2, TypeF32), TypeVec(2, TypeF32), TypeVec(2, TypeF32)], + TypeVec(2, TypeF32), + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .unimplemented(); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run( + t, + builtin('faceForward'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32), TypeVec(3, TypeF32)], + TypeVec(3, TypeF32), + t.params, + cases + ); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run( + t, + builtin('faceForward'), + [TypeVec(4, TypeF32), TypeVec(4, TypeF32), TypeVec(4, TypeF32)], + TypeVec(4, TypeF32), + t.params, + cases + ); +}); - await run( - t, - builtin('faceForward'), - [TypeVec(2, TypeF32), TypeVec(2, TypeF32), TypeVec(2, TypeF32)], - TypeVec(2, TypeF32), - t.params, - cases - ); - }); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run( + t, + builtin('faceForward'), + [TypeVec(2, TypeF16), TypeVec(2, TypeF16), TypeVec(2, TypeF16)], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run( + t, + builtin('faceForward'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16), TypeVec(3, TypeF16)], + TypeVec(3, TypeF16), + t.params, + cases + ); +}); - await run( - t, - builtin('faceForward'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32), TypeVec(3, TypeF32)], - TypeVec(3, TypeF32), - t.params, - cases - ); - }); - -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run( - t, - builtin('faceForward'), - [TypeVec(4, TypeF32), TypeVec(4, TypeF32), TypeVec(4, TypeF32)], - TypeVec(4, TypeF32), - t.params, - cases - ); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run( - t, - builtin('faceForward'), - [TypeVec(2, TypeF16), TypeVec(2, TypeF16), TypeVec(2, TypeF16)], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run( - t, - builtin('faceForward'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16), TypeVec(3, TypeF16)], - TypeVec(3, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run( - t, - builtin('faceForward'), - [TypeVec(4, TypeF16), TypeVec(4, TypeF16), TypeVec(4, TypeF16)], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run( + t, + builtin('faceForward'), + [TypeVec(4, TypeF16), TypeVec(4, TypeF16), TypeVec(4, TypeF16)], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstLeadingBit.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstLeadingBit.spec.js index c5d58bfb397..fd6b6359f12 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstLeadingBit.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstLeadingBit.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'firstLeadingBit' builtin function T is u32 or vecN @@ -14,8 +14,7 @@ T is i32 or vecN For scalar T, the result is: -1 if e is 0 or -1. Otherwise the position of the most significant bit in e that is different from e’s sign bit. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { i32, i32Bits, TypeI32, u32, TypeU32, u32Bits } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; @@ -24,324 +23,328 @@ import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('firstLeadingBit'), [TypeU32], TypeU32, cfg, [ - // Zero - { input: u32Bits(0b00000000000000000000000000000000), expected: u32(-1) }, +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('firstLeadingBit'), [TypeU32], TypeU32, cfg, [ + // Zero + { input: u32Bits(0b00000000000000000000000000000000), expected: u32(-1) }, - // One - { input: u32Bits(0b00000000000000000000000000000001), expected: u32(0) }, + // One + { input: u32Bits(0b00000000000000000000000000000001), expected: u32(0) }, - // 0's after leading 1 - { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000000100), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000001000), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000010000), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000100000), expected: u32(5) }, - { input: u32Bits(0b00000000000000000000000001000000), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000010000000), expected: u32(7) }, - { input: u32Bits(0b00000000000000000000000100000000), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000001000000000), expected: u32(9) }, - { input: u32Bits(0b00000000000000000000010000000000), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000100000000000), expected: u32(11) }, - { input: u32Bits(0b00000000000000000001000000000000), expected: u32(12) }, - { input: u32Bits(0b00000000000000000010000000000000), expected: u32(13) }, - { input: u32Bits(0b00000000000000000100000000000000), expected: u32(14) }, - { input: u32Bits(0b00000000000000001000000000000000), expected: u32(15) }, - { input: u32Bits(0b00000000000000010000000000000000), expected: u32(16) }, - { input: u32Bits(0b00000000000000100000000000000000), expected: u32(17) }, - { input: u32Bits(0b00000000000001000000000000000000), expected: u32(18) }, - { input: u32Bits(0b00000000000010000000000000000000), expected: u32(19) }, - { input: u32Bits(0b00000000000100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b00000000001000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b00000000010000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b00000000100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b00000001000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b00000010000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b00000100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b00001000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b00010000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b00100000000000000000000000000000), expected: u32(29) }, - { input: u32Bits(0b01000000000000000000000000000000), expected: u32(30) }, - { input: u32Bits(0b10000000000000000000000000000000), expected: u32(31) }, + // 0's after leading 1 + { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000000100), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000001000), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000010000), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000100000), expected: u32(5) }, + { input: u32Bits(0b00000000000000000000000001000000), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000010000000), expected: u32(7) }, + { input: u32Bits(0b00000000000000000000000100000000), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000001000000000), expected: u32(9) }, + { input: u32Bits(0b00000000000000000000010000000000), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000100000000000), expected: u32(11) }, + { input: u32Bits(0b00000000000000000001000000000000), expected: u32(12) }, + { input: u32Bits(0b00000000000000000010000000000000), expected: u32(13) }, + { input: u32Bits(0b00000000000000000100000000000000), expected: u32(14) }, + { input: u32Bits(0b00000000000000001000000000000000), expected: u32(15) }, + { input: u32Bits(0b00000000000000010000000000000000), expected: u32(16) }, + { input: u32Bits(0b00000000000000100000000000000000), expected: u32(17) }, + { input: u32Bits(0b00000000000001000000000000000000), expected: u32(18) }, + { input: u32Bits(0b00000000000010000000000000000000), expected: u32(19) }, + { input: u32Bits(0b00000000000100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b00000000001000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b00000000010000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b00000000100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b00000001000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b00000010000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b00000100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b00001000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b00010000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b00100000000000000000000000000000), expected: u32(29) }, + { input: u32Bits(0b01000000000000000000000000000000), expected: u32(30) }, + { input: u32Bits(0b10000000000000000000000000000000), expected: u32(31) }, - // 1's after leading 1 - { input: u32Bits(0b00000000000000000000000000000011), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000000111), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000001111), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000011111), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000111111), expected: u32(5) }, - { input: u32Bits(0b00000000000000000000000001111111), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000011111111), expected: u32(7) }, - { input: u32Bits(0b00000000000000000000000111111111), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000001111111111), expected: u32(9) }, - { input: u32Bits(0b00000000000000000000011111111111), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000111111111111), expected: u32(11) }, - { input: u32Bits(0b00000000000000000001111111111111), expected: u32(12) }, - { input: u32Bits(0b00000000000000000011111111111111), expected: u32(13) }, - { input: u32Bits(0b00000000000000000111111111111111), expected: u32(14) }, - { input: u32Bits(0b00000000000000001111111111111111), expected: u32(15) }, - { input: u32Bits(0b00000000000000011111111111111111), expected: u32(16) }, - { input: u32Bits(0b00000000000000111111111111111111), expected: u32(17) }, - { input: u32Bits(0b00000000000001111111111111111111), expected: u32(18) }, - { input: u32Bits(0b00000000000011111111111111111111), expected: u32(19) }, - { input: u32Bits(0b00000000000111111111111111111111), expected: u32(20) }, - { input: u32Bits(0b00000000001111111111111111111111), expected: u32(21) }, - { input: u32Bits(0b00000000011111111111111111111111), expected: u32(22) }, - { input: u32Bits(0b00000000111111111111111111111111), expected: u32(23) }, - { input: u32Bits(0b00000001111111111111111111111111), expected: u32(24) }, - { input: u32Bits(0b00000011111111111111111111111111), expected: u32(25) }, - { input: u32Bits(0b00000111111111111111111111111111), expected: u32(26) }, - { input: u32Bits(0b00001111111111111111111111111111), expected: u32(27) }, - { input: u32Bits(0b00011111111111111111111111111111), expected: u32(28) }, - { input: u32Bits(0b00111111111111111111111111111111), expected: u32(29) }, - { input: u32Bits(0b01111111111111111111111111111111), expected: u32(30) }, - { input: u32Bits(0b11111111111111111111111111111111), expected: u32(31) }, + // 1's after leading 1 + { input: u32Bits(0b00000000000000000000000000000011), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000000111), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000001111), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000011111), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000111111), expected: u32(5) }, + { input: u32Bits(0b00000000000000000000000001111111), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32(7) }, + { input: u32Bits(0b00000000000000000000000111111111), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32(9) }, + { input: u32Bits(0b00000000000000000000011111111111), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000111111111111), expected: u32(11) }, + { input: u32Bits(0b00000000000000000001111111111111), expected: u32(12) }, + { input: u32Bits(0b00000000000000000011111111111111), expected: u32(13) }, + { input: u32Bits(0b00000000000000000111111111111111), expected: u32(14) }, + { input: u32Bits(0b00000000000000001111111111111111), expected: u32(15) }, + { input: u32Bits(0b00000000000000011111111111111111), expected: u32(16) }, + { input: u32Bits(0b00000000000000111111111111111111), expected: u32(17) }, + { input: u32Bits(0b00000000000001111111111111111111), expected: u32(18) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32(19) }, + { input: u32Bits(0b00000000000111111111111111111111), expected: u32(20) }, + { input: u32Bits(0b00000000001111111111111111111111), expected: u32(21) }, + { input: u32Bits(0b00000000011111111111111111111111), expected: u32(22) }, + { input: u32Bits(0b00000000111111111111111111111111), expected: u32(23) }, + { input: u32Bits(0b00000001111111111111111111111111), expected: u32(24) }, + { input: u32Bits(0b00000011111111111111111111111111), expected: u32(25) }, + { input: u32Bits(0b00000111111111111111111111111111), expected: u32(26) }, + { input: u32Bits(0b00001111111111111111111111111111), expected: u32(27) }, + { input: u32Bits(0b00011111111111111111111111111111), expected: u32(28) }, + { input: u32Bits(0b00111111111111111111111111111111), expected: u32(29) }, + { input: u32Bits(0b01111111111111111111111111111111), expected: u32(30) }, + { input: u32Bits(0b11111111111111111111111111111111), expected: u32(31) }, - // random after leading 1 - { input: u32Bits(0b00000000000000000000000000000110), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000001101), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000011101), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000111001), expected: u32(5) }, - { input: u32Bits(0b00000000000000000000000001101111), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000011111111), expected: u32(7) }, - { input: u32Bits(0b00000000000000000000000111101111), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000001111111111), expected: u32(9) }, - { input: u32Bits(0b00000000000000000000011111110001), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000111011011101), expected: u32(11) }, - { input: u32Bits(0b00000000000000000001101101111111), expected: u32(12) }, - { input: u32Bits(0b00000000000000000011111111011111), expected: u32(13) }, - { input: u32Bits(0b00000000000000000101111001110101), expected: u32(14) }, - { input: u32Bits(0b00000000000000001101111011110111), expected: u32(15) }, - { input: u32Bits(0b00000000000000011111111111110011), expected: u32(16) }, - { input: u32Bits(0b00000000000000111111111110111111), expected: u32(17) }, - { input: u32Bits(0b00000000000001111111011111111111), expected: u32(18) }, - { input: u32Bits(0b00000000000011111111111111111111), expected: u32(19) }, - { input: u32Bits(0b00000000000111110101011110111111), expected: u32(20) }, - { input: u32Bits(0b00000000001111101111111111110111), expected: u32(21) }, - { input: u32Bits(0b00000000011111111111010000101111), expected: u32(22) }, - { input: u32Bits(0b00000000111111111111001111111011), expected: u32(23) }, - { input: u32Bits(0b00000001111111011111101111111111), expected: u32(24) }, - { input: u32Bits(0b00000011101011111011110111111011), expected: u32(25) }, - { input: u32Bits(0b00000111111110111111111111111111), expected: u32(26) }, - { input: u32Bits(0b00001111000000011011011110111111), expected: u32(27) }, - { input: u32Bits(0b00011110101111011111111111111111), expected: u32(28) }, - { input: u32Bits(0b00110110111111100111111110111101), expected: u32(29) }, - { input: u32Bits(0b01010111111101111111011111011111), expected: u32(30) }, - { input: u32Bits(0b11100010011110101101101110101111), expected: u32(31) }, - ]); - }); + // random after leading 1 + { input: u32Bits(0b00000000000000000000000000000110), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000001101), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000011101), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000111001), expected: u32(5) }, + { input: u32Bits(0b00000000000000000000000001101111), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32(7) }, + { input: u32Bits(0b00000000000000000000000111101111), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32(9) }, + { input: u32Bits(0b00000000000000000000011111110001), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000111011011101), expected: u32(11) }, + { input: u32Bits(0b00000000000000000001101101111111), expected: u32(12) }, + { input: u32Bits(0b00000000000000000011111111011111), expected: u32(13) }, + { input: u32Bits(0b00000000000000000101111001110101), expected: u32(14) }, + { input: u32Bits(0b00000000000000001101111011110111), expected: u32(15) }, + { input: u32Bits(0b00000000000000011111111111110011), expected: u32(16) }, + { input: u32Bits(0b00000000000000111111111110111111), expected: u32(17) }, + { input: u32Bits(0b00000000000001111111011111111111), expected: u32(18) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32(19) }, + { input: u32Bits(0b00000000000111110101011110111111), expected: u32(20) }, + { input: u32Bits(0b00000000001111101111111111110111), expected: u32(21) }, + { input: u32Bits(0b00000000011111111111010000101111), expected: u32(22) }, + { input: u32Bits(0b00000000111111111111001111111011), expected: u32(23) }, + { input: u32Bits(0b00000001111111011111101111111111), expected: u32(24) }, + { input: u32Bits(0b00000011101011111011110111111011), expected: u32(25) }, + { input: u32Bits(0b00000111111110111111111111111111), expected: u32(26) }, + { input: u32Bits(0b00001111000000011011011110111111), expected: u32(27) }, + { input: u32Bits(0b00011110101111011111111111111111), expected: u32(28) }, + { input: u32Bits(0b00110110111111100111111110111101), expected: u32(29) }, + { input: u32Bits(0b01010111111101111111011111011111), expected: u32(30) }, + { input: u32Bits(0b11100010011110101101101110101111), expected: u32(31) }] + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('firstLeadingBit'), [TypeI32], TypeI32, cfg, [ - // Zero - { input: i32Bits(0b00000000000000000000000000000000), expected: i32(-1) }, +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('firstLeadingBit'), [TypeI32], TypeI32, cfg, [ + // Zero + { input: i32Bits(0b00000000000000000000000000000000), expected: i32(-1) }, - // Negative One - { input: i32Bits(0b11111111111111111111111111111111), expected: i32(-1) }, + // Negative One + { input: i32Bits(0b11111111111111111111111111111111), expected: i32(-1) }, - // One - { input: i32Bits(0b00000000000000000000000000000001), expected: i32(0) }, + // One + { input: i32Bits(0b00000000000000000000000000000001), expected: i32(0) }, - // Positive: 0's after leading 1 - { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000000100), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000001000), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000010000), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000100000), expected: i32(5) }, - { input: i32Bits(0b00000000000000000000000001000000), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000010000000), expected: i32(7) }, - { input: i32Bits(0b00000000000000000000000100000000), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000001000000000), expected: i32(9) }, - { input: i32Bits(0b00000000000000000000010000000000), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000100000000000), expected: i32(11) }, - { input: i32Bits(0b00000000000000000001000000000000), expected: i32(12) }, - { input: i32Bits(0b00000000000000000010000000000000), expected: i32(13) }, - { input: i32Bits(0b00000000000000000100000000000000), expected: i32(14) }, - { input: i32Bits(0b00000000000000001000000000000000), expected: i32(15) }, - { input: i32Bits(0b00000000000000010000000000000000), expected: i32(16) }, - { input: i32Bits(0b00000000000000100000000000000000), expected: i32(17) }, - { input: i32Bits(0b00000000000001000000000000000000), expected: i32(18) }, - { input: i32Bits(0b00000000000010000000000000000000), expected: i32(19) }, - { input: i32Bits(0b00000000000100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b00000000001000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b00000000010000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b00000000100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b00000001000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b00000010000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b00000100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b00001000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b00010000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b00100000000000000000000000000000), expected: i32(29) }, - { input: i32Bits(0b01000000000000000000000000000000), expected: i32(30) }, + // Positive: 0's after leading 1 + { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000000100), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000001000), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000010000), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000100000), expected: i32(5) }, + { input: i32Bits(0b00000000000000000000000001000000), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000010000000), expected: i32(7) }, + { input: i32Bits(0b00000000000000000000000100000000), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000001000000000), expected: i32(9) }, + { input: i32Bits(0b00000000000000000000010000000000), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000100000000000), expected: i32(11) }, + { input: i32Bits(0b00000000000000000001000000000000), expected: i32(12) }, + { input: i32Bits(0b00000000000000000010000000000000), expected: i32(13) }, + { input: i32Bits(0b00000000000000000100000000000000), expected: i32(14) }, + { input: i32Bits(0b00000000000000001000000000000000), expected: i32(15) }, + { input: i32Bits(0b00000000000000010000000000000000), expected: i32(16) }, + { input: i32Bits(0b00000000000000100000000000000000), expected: i32(17) }, + { input: i32Bits(0b00000000000001000000000000000000), expected: i32(18) }, + { input: i32Bits(0b00000000000010000000000000000000), expected: i32(19) }, + { input: i32Bits(0b00000000000100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b00000000001000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b00000000010000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b00000000100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b00000001000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b00000010000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b00000100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b00001000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b00010000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b00100000000000000000000000000000), expected: i32(29) }, + { input: i32Bits(0b01000000000000000000000000000000), expected: i32(30) }, - // Negative: 0's after leading 0 - { input: i32Bits(0b11111111111111111111111111111110), expected: i32(0) }, - { input: i32Bits(0b11111111111111111111111111111100), expected: i32(1) }, - { input: i32Bits(0b11111111111111111111111111111000), expected: i32(2) }, - { input: i32Bits(0b11111111111111111111111111110000), expected: i32(3) }, - { input: i32Bits(0b11111111111111111111111111100000), expected: i32(4) }, - { input: i32Bits(0b11111111111111111111111111000000), expected: i32(5) }, - { input: i32Bits(0b11111111111111111111111110000000), expected: i32(6) }, - { input: i32Bits(0b11111111111111111111111100000000), expected: i32(7) }, - { input: i32Bits(0b11111111111111111111111000000000), expected: i32(8) }, - { input: i32Bits(0b11111111111111111111110000000000), expected: i32(9) }, - { input: i32Bits(0b11111111111111111111100000000000), expected: i32(10) }, - { input: i32Bits(0b11111111111111111111000000000000), expected: i32(11) }, - { input: i32Bits(0b11111111111111111110000000000000), expected: i32(12) }, - { input: i32Bits(0b11111111111111111100000000000000), expected: i32(13) }, - { input: i32Bits(0b11111111111111111000000000000000), expected: i32(14) }, - { input: i32Bits(0b11111111111111110000000000000000), expected: i32(15) }, - { input: i32Bits(0b11111111111111100000000000000000), expected: i32(16) }, - { input: i32Bits(0b11111111111111000000000000000000), expected: i32(17) }, - { input: i32Bits(0b11111111111110000000000000000000), expected: i32(18) }, - { input: i32Bits(0b11111111111100000000000000000000), expected: i32(19) }, - { input: i32Bits(0b11111111111000000000000000000000), expected: i32(20) }, - { input: i32Bits(0b11111111110000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b11111111100000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b11111111000000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b11111110000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b11111100000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b11111000000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b11110000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b11100000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b11000000000000000000000000000000), expected: i32(29) }, - { input: i32Bits(0b10000000000000000000000000000000), expected: i32(30) }, + // Negative: 0's after leading 0 + { input: i32Bits(0b11111111111111111111111111111110), expected: i32(0) }, + { input: i32Bits(0b11111111111111111111111111111100), expected: i32(1) }, + { input: i32Bits(0b11111111111111111111111111111000), expected: i32(2) }, + { input: i32Bits(0b11111111111111111111111111110000), expected: i32(3) }, + { input: i32Bits(0b11111111111111111111111111100000), expected: i32(4) }, + { input: i32Bits(0b11111111111111111111111111000000), expected: i32(5) }, + { input: i32Bits(0b11111111111111111111111110000000), expected: i32(6) }, + { input: i32Bits(0b11111111111111111111111100000000), expected: i32(7) }, + { input: i32Bits(0b11111111111111111111111000000000), expected: i32(8) }, + { input: i32Bits(0b11111111111111111111110000000000), expected: i32(9) }, + { input: i32Bits(0b11111111111111111111100000000000), expected: i32(10) }, + { input: i32Bits(0b11111111111111111111000000000000), expected: i32(11) }, + { input: i32Bits(0b11111111111111111110000000000000), expected: i32(12) }, + { input: i32Bits(0b11111111111111111100000000000000), expected: i32(13) }, + { input: i32Bits(0b11111111111111111000000000000000), expected: i32(14) }, + { input: i32Bits(0b11111111111111110000000000000000), expected: i32(15) }, + { input: i32Bits(0b11111111111111100000000000000000), expected: i32(16) }, + { input: i32Bits(0b11111111111111000000000000000000), expected: i32(17) }, + { input: i32Bits(0b11111111111110000000000000000000), expected: i32(18) }, + { input: i32Bits(0b11111111111100000000000000000000), expected: i32(19) }, + { input: i32Bits(0b11111111111000000000000000000000), expected: i32(20) }, + { input: i32Bits(0b11111111110000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b11111111100000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b11111111000000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b11111110000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b11111100000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b11111000000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b11110000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b11100000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b11000000000000000000000000000000), expected: i32(29) }, + { input: i32Bits(0b10000000000000000000000000000000), expected: i32(30) }, - // Positive: 1's after leading 1 - { input: i32Bits(0b00000000000000000000000000000011), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000000111), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000001111), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000011111), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000111111), expected: i32(5) }, - { input: i32Bits(0b00000000000000000000000001111111), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000011111111), expected: i32(7) }, - { input: i32Bits(0b00000000000000000000000111111111), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000001111111111), expected: i32(9) }, - { input: i32Bits(0b00000000000000000000011111111111), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000111111111111), expected: i32(11) }, - { input: i32Bits(0b00000000000000000001111111111111), expected: i32(12) }, - { input: i32Bits(0b00000000000000000011111111111111), expected: i32(13) }, - { input: i32Bits(0b00000000000000000111111111111111), expected: i32(14) }, - { input: i32Bits(0b00000000000000001111111111111111), expected: i32(15) }, - { input: i32Bits(0b00000000000000011111111111111111), expected: i32(16) }, - { input: i32Bits(0b00000000000000111111111111111111), expected: i32(17) }, - { input: i32Bits(0b00000000000001111111111111111111), expected: i32(18) }, - { input: i32Bits(0b00000000000011111111111111111111), expected: i32(19) }, - { input: i32Bits(0b00000000000111111111111111111111), expected: i32(20) }, - { input: i32Bits(0b00000000001111111111111111111111), expected: i32(21) }, - { input: i32Bits(0b00000000011111111111111111111111), expected: i32(22) }, - { input: i32Bits(0b00000000111111111111111111111111), expected: i32(23) }, - { input: i32Bits(0b00000001111111111111111111111111), expected: i32(24) }, - { input: i32Bits(0b00000011111111111111111111111111), expected: i32(25) }, - { input: i32Bits(0b00000111111111111111111111111111), expected: i32(26) }, - { input: i32Bits(0b00001111111111111111111111111111), expected: i32(27) }, - { input: i32Bits(0b00011111111111111111111111111111), expected: i32(28) }, - { input: i32Bits(0b00111111111111111111111111111111), expected: i32(29) }, - { input: i32Bits(0b01111111111111111111111111111111), expected: i32(30) }, + // Positive: 1's after leading 1 + { input: i32Bits(0b00000000000000000000000000000011), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000000111), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000001111), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000011111), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000111111), expected: i32(5) }, + { input: i32Bits(0b00000000000000000000000001111111), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32(7) }, + { input: i32Bits(0b00000000000000000000000111111111), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32(9) }, + { input: i32Bits(0b00000000000000000000011111111111), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000111111111111), expected: i32(11) }, + { input: i32Bits(0b00000000000000000001111111111111), expected: i32(12) }, + { input: i32Bits(0b00000000000000000011111111111111), expected: i32(13) }, + { input: i32Bits(0b00000000000000000111111111111111), expected: i32(14) }, + { input: i32Bits(0b00000000000000001111111111111111), expected: i32(15) }, + { input: i32Bits(0b00000000000000011111111111111111), expected: i32(16) }, + { input: i32Bits(0b00000000000000111111111111111111), expected: i32(17) }, + { input: i32Bits(0b00000000000001111111111111111111), expected: i32(18) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32(19) }, + { input: i32Bits(0b00000000000111111111111111111111), expected: i32(20) }, + { input: i32Bits(0b00000000001111111111111111111111), expected: i32(21) }, + { input: i32Bits(0b00000000011111111111111111111111), expected: i32(22) }, + { input: i32Bits(0b00000000111111111111111111111111), expected: i32(23) }, + { input: i32Bits(0b00000001111111111111111111111111), expected: i32(24) }, + { input: i32Bits(0b00000011111111111111111111111111), expected: i32(25) }, + { input: i32Bits(0b00000111111111111111111111111111), expected: i32(26) }, + { input: i32Bits(0b00001111111111111111111111111111), expected: i32(27) }, + { input: i32Bits(0b00011111111111111111111111111111), expected: i32(28) }, + { input: i32Bits(0b00111111111111111111111111111111), expected: i32(29) }, + { input: i32Bits(0b01111111111111111111111111111111), expected: i32(30) }, - // Negative: 1's after leading 0 - { input: i32Bits(0b11111111111111111111111111111101), expected: i32(1) }, - { input: i32Bits(0b11111111111111111111111111111011), expected: i32(2) }, - { input: i32Bits(0b11111111111111111111111111110111), expected: i32(3) }, - { input: i32Bits(0b11111111111111111111111111101111), expected: i32(4) }, - { input: i32Bits(0b11111111111111111111111111011111), expected: i32(5) }, - { input: i32Bits(0b11111111111111111111111110111111), expected: i32(6) }, - { input: i32Bits(0b11111111111111111111111101111111), expected: i32(7) }, - { input: i32Bits(0b11111111111111111111111011111111), expected: i32(8) }, - { input: i32Bits(0b11111111111111111111110111111111), expected: i32(9) }, - { input: i32Bits(0b11111111111111111111101111111111), expected: i32(10) }, - { input: i32Bits(0b11111111111111111111011111111111), expected: i32(11) }, - { input: i32Bits(0b11111111111111111110111111111111), expected: i32(12) }, - { input: i32Bits(0b11111111111111111101111111111111), expected: i32(13) }, - { input: i32Bits(0b11111111111111111011111111111111), expected: i32(14) }, - { input: i32Bits(0b11111111111111110111111111111111), expected: i32(15) }, - { input: i32Bits(0b11111111111111101111111111111111), expected: i32(16) }, - { input: i32Bits(0b11111111111111011111111111111111), expected: i32(17) }, - { input: i32Bits(0b11111111111110111111111111111111), expected: i32(18) }, - { input: i32Bits(0b11111111111101111111111111111111), expected: i32(19) }, - { input: i32Bits(0b11111111111011111111111111111111), expected: i32(20) }, - { input: i32Bits(0b11111111110111111111111111111111), expected: i32(21) }, - { input: i32Bits(0b11111111101111111111111111111111), expected: i32(22) }, - { input: i32Bits(0b11111111011111111111111111111111), expected: i32(23) }, - { input: i32Bits(0b11111110111111111111111111111111), expected: i32(24) }, - { input: i32Bits(0b11111101111111111111111111111111), expected: i32(25) }, - { input: i32Bits(0b11111011111111111111111111111111), expected: i32(26) }, - { input: i32Bits(0b11110111111111111111111111111111), expected: i32(27) }, - { input: i32Bits(0b11101111111111111111111111111111), expected: i32(28) }, - { input: i32Bits(0b11011111111111111111111111111111), expected: i32(29) }, - { input: i32Bits(0b10111111111111111111111111111111), expected: i32(30) }, + // Negative: 1's after leading 0 + { input: i32Bits(0b11111111111111111111111111111101), expected: i32(1) }, + { input: i32Bits(0b11111111111111111111111111111011), expected: i32(2) }, + { input: i32Bits(0b11111111111111111111111111110111), expected: i32(3) }, + { input: i32Bits(0b11111111111111111111111111101111), expected: i32(4) }, + { input: i32Bits(0b11111111111111111111111111011111), expected: i32(5) }, + { input: i32Bits(0b11111111111111111111111110111111), expected: i32(6) }, + { input: i32Bits(0b11111111111111111111111101111111), expected: i32(7) }, + { input: i32Bits(0b11111111111111111111111011111111), expected: i32(8) }, + { input: i32Bits(0b11111111111111111111110111111111), expected: i32(9) }, + { input: i32Bits(0b11111111111111111111101111111111), expected: i32(10) }, + { input: i32Bits(0b11111111111111111111011111111111), expected: i32(11) }, + { input: i32Bits(0b11111111111111111110111111111111), expected: i32(12) }, + { input: i32Bits(0b11111111111111111101111111111111), expected: i32(13) }, + { input: i32Bits(0b11111111111111111011111111111111), expected: i32(14) }, + { input: i32Bits(0b11111111111111110111111111111111), expected: i32(15) }, + { input: i32Bits(0b11111111111111101111111111111111), expected: i32(16) }, + { input: i32Bits(0b11111111111111011111111111111111), expected: i32(17) }, + { input: i32Bits(0b11111111111110111111111111111111), expected: i32(18) }, + { input: i32Bits(0b11111111111101111111111111111111), expected: i32(19) }, + { input: i32Bits(0b11111111111011111111111111111111), expected: i32(20) }, + { input: i32Bits(0b11111111110111111111111111111111), expected: i32(21) }, + { input: i32Bits(0b11111111101111111111111111111111), expected: i32(22) }, + { input: i32Bits(0b11111111011111111111111111111111), expected: i32(23) }, + { input: i32Bits(0b11111110111111111111111111111111), expected: i32(24) }, + { input: i32Bits(0b11111101111111111111111111111111), expected: i32(25) }, + { input: i32Bits(0b11111011111111111111111111111111), expected: i32(26) }, + { input: i32Bits(0b11110111111111111111111111111111), expected: i32(27) }, + { input: i32Bits(0b11101111111111111111111111111111), expected: i32(28) }, + { input: i32Bits(0b11011111111111111111111111111111), expected: i32(29) }, + { input: i32Bits(0b10111111111111111111111111111111), expected: i32(30) }, - // Positive: random after leading 1 - { input: i32Bits(0b00000000000000000000000000000110), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000001101), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000011101), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000111001), expected: i32(5) }, - { input: i32Bits(0b00000000000000000000000001101111), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000011111111), expected: i32(7) }, - { input: i32Bits(0b00000000000000000000000111101111), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000001111111111), expected: i32(9) }, - { input: i32Bits(0b00000000000000000000011111110001), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000111011011101), expected: i32(11) }, - { input: i32Bits(0b00000000000000000001101101111111), expected: i32(12) }, - { input: i32Bits(0b00000000000000000011111111011111), expected: i32(13) }, - { input: i32Bits(0b00000000000000000101111001110101), expected: i32(14) }, - { input: i32Bits(0b00000000000000001101111011110111), expected: i32(15) }, - { input: i32Bits(0b00000000000000011111111111110011), expected: i32(16) }, - { input: i32Bits(0b00000000000000111111111110111111), expected: i32(17) }, - { input: i32Bits(0b00000000000001111111011111111111), expected: i32(18) }, - { input: i32Bits(0b00000000000011111111111111111111), expected: i32(19) }, - { input: i32Bits(0b00000000000111110101011110111111), expected: i32(20) }, - { input: i32Bits(0b00000000001111101111111111110111), expected: i32(21) }, - { input: i32Bits(0b00000000011111111111010000101111), expected: i32(22) }, - { input: i32Bits(0b00000000111111111111001111111011), expected: i32(23) }, - { input: i32Bits(0b00000001111111011111101111111111), expected: i32(24) }, - { input: i32Bits(0b00000011101011111011110111111011), expected: i32(25) }, - { input: i32Bits(0b00000111111110111111111111111111), expected: i32(26) }, - { input: i32Bits(0b00001111000000011011011110111111), expected: i32(27) }, - { input: i32Bits(0b00011110101111011111111111111111), expected: i32(28) }, - { input: i32Bits(0b00110110111111100111111110111101), expected: i32(29) }, - { input: i32Bits(0b01010111111101111111011111011111), expected: i32(30) }, + // Positive: random after leading 1 + { input: i32Bits(0b00000000000000000000000000000110), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000001101), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000011101), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000111001), expected: i32(5) }, + { input: i32Bits(0b00000000000000000000000001101111), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32(7) }, + { input: i32Bits(0b00000000000000000000000111101111), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32(9) }, + { input: i32Bits(0b00000000000000000000011111110001), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000111011011101), expected: i32(11) }, + { input: i32Bits(0b00000000000000000001101101111111), expected: i32(12) }, + { input: i32Bits(0b00000000000000000011111111011111), expected: i32(13) }, + { input: i32Bits(0b00000000000000000101111001110101), expected: i32(14) }, + { input: i32Bits(0b00000000000000001101111011110111), expected: i32(15) }, + { input: i32Bits(0b00000000000000011111111111110011), expected: i32(16) }, + { input: i32Bits(0b00000000000000111111111110111111), expected: i32(17) }, + { input: i32Bits(0b00000000000001111111011111111111), expected: i32(18) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32(19) }, + { input: i32Bits(0b00000000000111110101011110111111), expected: i32(20) }, + { input: i32Bits(0b00000000001111101111111111110111), expected: i32(21) }, + { input: i32Bits(0b00000000011111111111010000101111), expected: i32(22) }, + { input: i32Bits(0b00000000111111111111001111111011), expected: i32(23) }, + { input: i32Bits(0b00000001111111011111101111111111), expected: i32(24) }, + { input: i32Bits(0b00000011101011111011110111111011), expected: i32(25) }, + { input: i32Bits(0b00000111111110111111111111111111), expected: i32(26) }, + { input: i32Bits(0b00001111000000011011011110111111), expected: i32(27) }, + { input: i32Bits(0b00011110101111011111111111111111), expected: i32(28) }, + { input: i32Bits(0b00110110111111100111111110111101), expected: i32(29) }, + { input: i32Bits(0b01010111111101111111011111011111), expected: i32(30) }, - // Negative: random after leading 0 - { input: i32Bits(0b11111111111111111111111111111010), expected: i32(2) }, - { input: i32Bits(0b11111111111111111111111111110110), expected: i32(3) }, - { input: i32Bits(0b11111111111111111111111111101101), expected: i32(4) }, - { input: i32Bits(0b11111111111111111111111111011101), expected: i32(5) }, - { input: i32Bits(0b11111111111111111111111110111001), expected: i32(6) }, - { input: i32Bits(0b11111111111111111111111101101111), expected: i32(7) }, - { input: i32Bits(0b11111111111111111111111011111111), expected: i32(8) }, - { input: i32Bits(0b11111111111111111111110111101111), expected: i32(9) }, - { input: i32Bits(0b11111111111111111111101111111111), expected: i32(10) }, - { input: i32Bits(0b11111111111111111111011111110001), expected: i32(11) }, - { input: i32Bits(0b11111111111111111110111011011101), expected: i32(12) }, - { input: i32Bits(0b11111111111111111101101101111111), expected: i32(13) }, - { input: i32Bits(0b11111111111111111011111111011111), expected: i32(14) }, - { input: i32Bits(0b11111111111111110101111001110101), expected: i32(15) }, - { input: i32Bits(0b11111111111111101101111011110111), expected: i32(16) }, - { input: i32Bits(0b11111111111111011111111111110011), expected: i32(17) }, - { input: i32Bits(0b11111111111110111111111110111111), expected: i32(18) }, - { input: i32Bits(0b11111111111101111111011111111111), expected: i32(19) }, - { input: i32Bits(0b11111111111011111111111111111111), expected: i32(20) }, - { input: i32Bits(0b11111111110111110101011110111111), expected: i32(21) }, - { input: i32Bits(0b11111111101111101111111111110111), expected: i32(22) }, - { input: i32Bits(0b11111111011111111111010000101111), expected: i32(23) }, - { input: i32Bits(0b11111110111111111111001111111011), expected: i32(24) }, - { input: i32Bits(0b11111101111111011111101111111111), expected: i32(25) }, - { input: i32Bits(0b11111011101011111011110111111011), expected: i32(26) }, - { input: i32Bits(0b11110111111110111111111111111111), expected: i32(27) }, - { input: i32Bits(0b11101111000000011011011110111111), expected: i32(28) }, - { input: i32Bits(0b11011110101111011111111111111111), expected: i32(29) }, - { input: i32Bits(0b10110110111111100111111110111101), expected: i32(30) }, - ]); - }); + // Negative: random after leading 0 + { input: i32Bits(0b11111111111111111111111111111010), expected: i32(2) }, + { input: i32Bits(0b11111111111111111111111111110110), expected: i32(3) }, + { input: i32Bits(0b11111111111111111111111111101101), expected: i32(4) }, + { input: i32Bits(0b11111111111111111111111111011101), expected: i32(5) }, + { input: i32Bits(0b11111111111111111111111110111001), expected: i32(6) }, + { input: i32Bits(0b11111111111111111111111101101111), expected: i32(7) }, + { input: i32Bits(0b11111111111111111111111011111111), expected: i32(8) }, + { input: i32Bits(0b11111111111111111111110111101111), expected: i32(9) }, + { input: i32Bits(0b11111111111111111111101111111111), expected: i32(10) }, + { input: i32Bits(0b11111111111111111111011111110001), expected: i32(11) }, + { input: i32Bits(0b11111111111111111110111011011101), expected: i32(12) }, + { input: i32Bits(0b11111111111111111101101101111111), expected: i32(13) }, + { input: i32Bits(0b11111111111111111011111111011111), expected: i32(14) }, + { input: i32Bits(0b11111111111111110101111001110101), expected: i32(15) }, + { input: i32Bits(0b11111111111111101101111011110111), expected: i32(16) }, + { input: i32Bits(0b11111111111111011111111111110011), expected: i32(17) }, + { input: i32Bits(0b11111111111110111111111110111111), expected: i32(18) }, + { input: i32Bits(0b11111111111101111111011111111111), expected: i32(19) }, + { input: i32Bits(0b11111111111011111111111111111111), expected: i32(20) }, + { input: i32Bits(0b11111111110111110101011110111111), expected: i32(21) }, + { input: i32Bits(0b11111111101111101111111111110111), expected: i32(22) }, + { input: i32Bits(0b11111111011111111111010000101111), expected: i32(23) }, + { input: i32Bits(0b11111110111111111111001111111011), expected: i32(24) }, + { input: i32Bits(0b11111101111111011111101111111111), expected: i32(25) }, + { input: i32Bits(0b11111011101011111011110111111011), expected: i32(26) }, + { input: i32Bits(0b11110111111110111111111111111111), expected: i32(27) }, + { input: i32Bits(0b11101111000000011011011110111111), expected: i32(28) }, + { input: i32Bits(0b11011110101111011111111111111111), expected: i32(29) }, + { input: i32Bits(0b10110110111111100111111110111101), expected: i32(30) }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstTrailingBit.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstTrailingBit.spec.js index 29c46690b6a..73071c38085 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstTrailingBit.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/firstTrailingBit.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'firstTrailingBit' builtin function S is i32, u32 @@ -10,8 +10,7 @@ For scalar T, the result is: T(-1) if e is zero. Otherwise the position of the least significant 1 bit in e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { i32, i32Bits, TypeI32, u32, TypeU32, u32Bits } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; @@ -20,228 +19,232 @@ import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('firstTrailingBit'), [TypeU32], TypeU32, cfg, [ - // Zero - { input: u32Bits(0b00000000000000000000000000000000), expected: u32(-1) }, +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('firstTrailingBit'), [TypeU32], TypeU32, cfg, [ + // Zero + { input: u32Bits(0b00000000000000000000000000000000), expected: u32(-1) }, - // High bit - { input: u32Bits(0b10000000000000000000000000000000), expected: u32(31) }, + // High bit + { input: u32Bits(0b10000000000000000000000000000000), expected: u32(31) }, - // 0's before trailing 1 - { input: u32Bits(0b00000000000000000000000000000001), expected: u32(0) }, - { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, - { input: u32Bits(0b00000000000000000000000000000100), expected: u32(2) }, - { input: u32Bits(0b00000000000000000000000000001000), expected: u32(3) }, - { input: u32Bits(0b00000000000000000000000000010000), expected: u32(4) }, - { input: u32Bits(0b00000000000000000000000000100000), expected: u32(5) }, - { input: u32Bits(0b00000000000000000000000001000000), expected: u32(6) }, - { input: u32Bits(0b00000000000000000000000010000000), expected: u32(7) }, - { input: u32Bits(0b00000000000000000000000100000000), expected: u32(8) }, - { input: u32Bits(0b00000000000000000000001000000000), expected: u32(9) }, - { input: u32Bits(0b00000000000000000000010000000000), expected: u32(10) }, - { input: u32Bits(0b00000000000000000000100000000000), expected: u32(11) }, - { input: u32Bits(0b00000000000000000001000000000000), expected: u32(12) }, - { input: u32Bits(0b00000000000000000010000000000000), expected: u32(13) }, - { input: u32Bits(0b00000000000000000100000000000000), expected: u32(14) }, - { input: u32Bits(0b00000000000000001000000000000000), expected: u32(15) }, - { input: u32Bits(0b00000000000000010000000000000000), expected: u32(16) }, - { input: u32Bits(0b00000000000000100000000000000000), expected: u32(17) }, - { input: u32Bits(0b00000000000001000000000000000000), expected: u32(18) }, - { input: u32Bits(0b00000000000010000000000000000000), expected: u32(19) }, - { input: u32Bits(0b00000000000100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b00000000001000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b00000000010000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b00000000100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b00000001000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b00000010000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b00000100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b00001000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b00010000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b00100000000000000000000000000000), expected: u32(29) }, - { input: u32Bits(0b01000000000000000000000000000000), expected: u32(30) }, + // 0's before trailing 1 + { input: u32Bits(0b00000000000000000000000000000001), expected: u32(0) }, + { input: u32Bits(0b00000000000000000000000000000010), expected: u32(1) }, + { input: u32Bits(0b00000000000000000000000000000100), expected: u32(2) }, + { input: u32Bits(0b00000000000000000000000000001000), expected: u32(3) }, + { input: u32Bits(0b00000000000000000000000000010000), expected: u32(4) }, + { input: u32Bits(0b00000000000000000000000000100000), expected: u32(5) }, + { input: u32Bits(0b00000000000000000000000001000000), expected: u32(6) }, + { input: u32Bits(0b00000000000000000000000010000000), expected: u32(7) }, + { input: u32Bits(0b00000000000000000000000100000000), expected: u32(8) }, + { input: u32Bits(0b00000000000000000000001000000000), expected: u32(9) }, + { input: u32Bits(0b00000000000000000000010000000000), expected: u32(10) }, + { input: u32Bits(0b00000000000000000000100000000000), expected: u32(11) }, + { input: u32Bits(0b00000000000000000001000000000000), expected: u32(12) }, + { input: u32Bits(0b00000000000000000010000000000000), expected: u32(13) }, + { input: u32Bits(0b00000000000000000100000000000000), expected: u32(14) }, + { input: u32Bits(0b00000000000000001000000000000000), expected: u32(15) }, + { input: u32Bits(0b00000000000000010000000000000000), expected: u32(16) }, + { input: u32Bits(0b00000000000000100000000000000000), expected: u32(17) }, + { input: u32Bits(0b00000000000001000000000000000000), expected: u32(18) }, + { input: u32Bits(0b00000000000010000000000000000000), expected: u32(19) }, + { input: u32Bits(0b00000000000100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b00000000001000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b00000000010000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b00000000100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b00000001000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b00000010000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b00000100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b00001000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b00010000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b00100000000000000000000000000000), expected: u32(29) }, + { input: u32Bits(0b01000000000000000000000000000000), expected: u32(30) }, - // 1's before trailing 1 - { input: u32Bits(0b11111111111111111111111111111111), expected: u32(0) }, - { input: u32Bits(0b11111111111111111111111111111110), expected: u32(1) }, - { input: u32Bits(0b11111111111111111111111111111100), expected: u32(2) }, - { input: u32Bits(0b11111111111111111111111111111000), expected: u32(3) }, - { input: u32Bits(0b11111111111111111111111111110000), expected: u32(4) }, - { input: u32Bits(0b11111111111111111111111111100000), expected: u32(5) }, - { input: u32Bits(0b11111111111111111111111111000000), expected: u32(6) }, - { input: u32Bits(0b11111111111111111111111110000000), expected: u32(7) }, - { input: u32Bits(0b11111111111111111111111100000000), expected: u32(8) }, - { input: u32Bits(0b11111111111111111111111000000000), expected: u32(9) }, - { input: u32Bits(0b11111111111111111111110000000000), expected: u32(10) }, - { input: u32Bits(0b11111111111111111111100000000000), expected: u32(11) }, - { input: u32Bits(0b11111111111111111111000000000000), expected: u32(12) }, - { input: u32Bits(0b11111111111111111110000000000000), expected: u32(13) }, - { input: u32Bits(0b11111111111111111100000000000000), expected: u32(14) }, - { input: u32Bits(0b11111111111111111000000000000000), expected: u32(15) }, - { input: u32Bits(0b11111111111111110000000000000000), expected: u32(16) }, - { input: u32Bits(0b11111111111111100000000000000000), expected: u32(17) }, - { input: u32Bits(0b11111111111111000000000000000000), expected: u32(18) }, - { input: u32Bits(0b11111111111110000000000000000000), expected: u32(19) }, - { input: u32Bits(0b11111111111100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b11111111111000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b11111111110000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b11111111100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b11111111000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b11111110000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b11111100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b11111000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b11110000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b11100000000000000000000000000000), expected: u32(29) }, - { input: u32Bits(0b11000000000000000000000000000000), expected: u32(30) }, + // 1's before trailing 1 + { input: u32Bits(0b11111111111111111111111111111111), expected: u32(0) }, + { input: u32Bits(0b11111111111111111111111111111110), expected: u32(1) }, + { input: u32Bits(0b11111111111111111111111111111100), expected: u32(2) }, + { input: u32Bits(0b11111111111111111111111111111000), expected: u32(3) }, + { input: u32Bits(0b11111111111111111111111111110000), expected: u32(4) }, + { input: u32Bits(0b11111111111111111111111111100000), expected: u32(5) }, + { input: u32Bits(0b11111111111111111111111111000000), expected: u32(6) }, + { input: u32Bits(0b11111111111111111111111110000000), expected: u32(7) }, + { input: u32Bits(0b11111111111111111111111100000000), expected: u32(8) }, + { input: u32Bits(0b11111111111111111111111000000000), expected: u32(9) }, + { input: u32Bits(0b11111111111111111111110000000000), expected: u32(10) }, + { input: u32Bits(0b11111111111111111111100000000000), expected: u32(11) }, + { input: u32Bits(0b11111111111111111111000000000000), expected: u32(12) }, + { input: u32Bits(0b11111111111111111110000000000000), expected: u32(13) }, + { input: u32Bits(0b11111111111111111100000000000000), expected: u32(14) }, + { input: u32Bits(0b11111111111111111000000000000000), expected: u32(15) }, + { input: u32Bits(0b11111111111111110000000000000000), expected: u32(16) }, + { input: u32Bits(0b11111111111111100000000000000000), expected: u32(17) }, + { input: u32Bits(0b11111111111111000000000000000000), expected: u32(18) }, + { input: u32Bits(0b11111111111110000000000000000000), expected: u32(19) }, + { input: u32Bits(0b11111111111100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b11111111111000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b11111111110000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b11111111100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b11111111000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b11111110000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b11111100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b11111000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b11110000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b11100000000000000000000000000000), expected: u32(29) }, + { input: u32Bits(0b11000000000000000000000000000000), expected: u32(30) }, - // random before trailing 1 - { input: u32Bits(0b11110000001111111101111010001111), expected: u32(0) }, - { input: u32Bits(0b11011110111111100101110011110010), expected: u32(1) }, - { input: u32Bits(0b11110111011011111111010000111100), expected: u32(2) }, - { input: u32Bits(0b11010011011101111111010011101000), expected: u32(3) }, - { input: u32Bits(0b11010111110111110001111110110000), expected: u32(4) }, - { input: u32Bits(0b11111101111101111110101111100000), expected: u32(5) }, - { input: u32Bits(0b11111001111011111001111011000000), expected: u32(6) }, - { input: u32Bits(0b11001110110111110111111010000000), expected: u32(7) }, - { input: u32Bits(0b11101111011111101110101100000000), expected: u32(8) }, - { input: u32Bits(0b11111101111011111111111000000000), expected: u32(9) }, - { input: u32Bits(0b10011111011101110110110000000000), expected: u32(10) }, - { input: u32Bits(0b11111111101101111011100000000000), expected: u32(11) }, - { input: u32Bits(0b11111011010110111011000000000000), expected: u32(12) }, - { input: u32Bits(0b00111101010000111010000000000000), expected: u32(13) }, - { input: u32Bits(0b11111011110001101100000000000000), expected: u32(14) }, - { input: u32Bits(0b10111111010111111000000000000000), expected: u32(15) }, - { input: u32Bits(0b11011101111010110000000000000000), expected: u32(16) }, - { input: u32Bits(0b01110100110110100000000000000000), expected: u32(17) }, - { input: u32Bits(0b11100111001011000000000000000000), expected: u32(18) }, - { input: u32Bits(0b11111001110110000000000000000000), expected: u32(19) }, - { input: u32Bits(0b00110100100100000000000000000000), expected: u32(20) }, - { input: u32Bits(0b11111010011000000000000000000000), expected: u32(21) }, - { input: u32Bits(0b00000010110000000000000000000000), expected: u32(22) }, - { input: u32Bits(0b11100111100000000000000000000000), expected: u32(23) }, - { input: u32Bits(0b00101101000000000000000000000000), expected: u32(24) }, - { input: u32Bits(0b11011010000000000000000000000000), expected: u32(25) }, - { input: u32Bits(0b11010100000000000000000000000000), expected: u32(26) }, - { input: u32Bits(0b10111000000000000000000000000000), expected: u32(27) }, - { input: u32Bits(0b01110000000000000000000000000000), expected: u32(28) }, - { input: u32Bits(0b10100000000000000000000000000000), expected: u32(29) }, - ]); - }); + // random before trailing 1 + { input: u32Bits(0b11110000001111111101111010001111), expected: u32(0) }, + { input: u32Bits(0b11011110111111100101110011110010), expected: u32(1) }, + { input: u32Bits(0b11110111011011111111010000111100), expected: u32(2) }, + { input: u32Bits(0b11010011011101111111010011101000), expected: u32(3) }, + { input: u32Bits(0b11010111110111110001111110110000), expected: u32(4) }, + { input: u32Bits(0b11111101111101111110101111100000), expected: u32(5) }, + { input: u32Bits(0b11111001111011111001111011000000), expected: u32(6) }, + { input: u32Bits(0b11001110110111110111111010000000), expected: u32(7) }, + { input: u32Bits(0b11101111011111101110101100000000), expected: u32(8) }, + { input: u32Bits(0b11111101111011111111111000000000), expected: u32(9) }, + { input: u32Bits(0b10011111011101110110110000000000), expected: u32(10) }, + { input: u32Bits(0b11111111101101111011100000000000), expected: u32(11) }, + { input: u32Bits(0b11111011010110111011000000000000), expected: u32(12) }, + { input: u32Bits(0b00111101010000111010000000000000), expected: u32(13) }, + { input: u32Bits(0b11111011110001101100000000000000), expected: u32(14) }, + { input: u32Bits(0b10111111010111111000000000000000), expected: u32(15) }, + { input: u32Bits(0b11011101111010110000000000000000), expected: u32(16) }, + { input: u32Bits(0b01110100110110100000000000000000), expected: u32(17) }, + { input: u32Bits(0b11100111001011000000000000000000), expected: u32(18) }, + { input: u32Bits(0b11111001110110000000000000000000), expected: u32(19) }, + { input: u32Bits(0b00110100100100000000000000000000), expected: u32(20) }, + { input: u32Bits(0b11111010011000000000000000000000), expected: u32(21) }, + { input: u32Bits(0b00000010110000000000000000000000), expected: u32(22) }, + { input: u32Bits(0b11100111100000000000000000000000), expected: u32(23) }, + { input: u32Bits(0b00101101000000000000000000000000), expected: u32(24) }, + { input: u32Bits(0b11011010000000000000000000000000), expected: u32(25) }, + { input: u32Bits(0b11010100000000000000000000000000), expected: u32(26) }, + { input: u32Bits(0b10111000000000000000000000000000), expected: u32(27) }, + { input: u32Bits(0b01110000000000000000000000000000), expected: u32(28) }, + { input: u32Bits(0b10100000000000000000000000000000), expected: u32(29) }] + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; - await run(t, builtin('firstTrailingBit'), [TypeI32], TypeI32, cfg, [ - // Zero - { input: i32Bits(0b00000000000000000000000000000000), expected: i32(-1) }, +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + await run(t, builtin('firstTrailingBit'), [TypeI32], TypeI32, cfg, [ + // Zero + { input: i32Bits(0b00000000000000000000000000000000), expected: i32(-1) }, - // High bit - { input: i32Bits(0b10000000000000000000000000000000), expected: i32(31) }, + // High bit + { input: i32Bits(0b10000000000000000000000000000000), expected: i32(31) }, - // 0's before trailing 1 - { input: i32Bits(0b00000000000000000000000000000001), expected: i32(0) }, - { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, - { input: i32Bits(0b00000000000000000000000000000100), expected: i32(2) }, - { input: i32Bits(0b00000000000000000000000000001000), expected: i32(3) }, - { input: i32Bits(0b00000000000000000000000000010000), expected: i32(4) }, - { input: i32Bits(0b00000000000000000000000000100000), expected: i32(5) }, - { input: i32Bits(0b00000000000000000000000001000000), expected: i32(6) }, - { input: i32Bits(0b00000000000000000000000010000000), expected: i32(7) }, - { input: i32Bits(0b00000000000000000000000100000000), expected: i32(8) }, - { input: i32Bits(0b00000000000000000000001000000000), expected: i32(9) }, - { input: i32Bits(0b00000000000000000000010000000000), expected: i32(10) }, - { input: i32Bits(0b00000000000000000000100000000000), expected: i32(11) }, - { input: i32Bits(0b00000000000000000001000000000000), expected: i32(12) }, - { input: i32Bits(0b00000000000000000010000000000000), expected: i32(13) }, - { input: i32Bits(0b00000000000000000100000000000000), expected: i32(14) }, - { input: i32Bits(0b00000000000000001000000000000000), expected: i32(15) }, - { input: i32Bits(0b00000000000000010000000000000000), expected: i32(16) }, - { input: i32Bits(0b00000000000000100000000000000000), expected: i32(17) }, - { input: i32Bits(0b00000000000001000000000000000000), expected: i32(18) }, - { input: i32Bits(0b00000000000010000000000000000000), expected: i32(19) }, - { input: i32Bits(0b00000000000100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b00000000001000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b00000000010000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b00000000100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b00000001000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b00000010000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b00000100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b00001000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b00010000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b00100000000000000000000000000000), expected: i32(29) }, - { input: i32Bits(0b01000000000000000000000000000000), expected: i32(30) }, + // 0's before trailing 1 + { input: i32Bits(0b00000000000000000000000000000001), expected: i32(0) }, + { input: i32Bits(0b00000000000000000000000000000010), expected: i32(1) }, + { input: i32Bits(0b00000000000000000000000000000100), expected: i32(2) }, + { input: i32Bits(0b00000000000000000000000000001000), expected: i32(3) }, + { input: i32Bits(0b00000000000000000000000000010000), expected: i32(4) }, + { input: i32Bits(0b00000000000000000000000000100000), expected: i32(5) }, + { input: i32Bits(0b00000000000000000000000001000000), expected: i32(6) }, + { input: i32Bits(0b00000000000000000000000010000000), expected: i32(7) }, + { input: i32Bits(0b00000000000000000000000100000000), expected: i32(8) }, + { input: i32Bits(0b00000000000000000000001000000000), expected: i32(9) }, + { input: i32Bits(0b00000000000000000000010000000000), expected: i32(10) }, + { input: i32Bits(0b00000000000000000000100000000000), expected: i32(11) }, + { input: i32Bits(0b00000000000000000001000000000000), expected: i32(12) }, + { input: i32Bits(0b00000000000000000010000000000000), expected: i32(13) }, + { input: i32Bits(0b00000000000000000100000000000000), expected: i32(14) }, + { input: i32Bits(0b00000000000000001000000000000000), expected: i32(15) }, + { input: i32Bits(0b00000000000000010000000000000000), expected: i32(16) }, + { input: i32Bits(0b00000000000000100000000000000000), expected: i32(17) }, + { input: i32Bits(0b00000000000001000000000000000000), expected: i32(18) }, + { input: i32Bits(0b00000000000010000000000000000000), expected: i32(19) }, + { input: i32Bits(0b00000000000100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b00000000001000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b00000000010000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b00000000100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b00000001000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b00000010000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b00000100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b00001000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b00010000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b00100000000000000000000000000000), expected: i32(29) }, + { input: i32Bits(0b01000000000000000000000000000000), expected: i32(30) }, - // 1's before trailing 1 - { input: i32Bits(0b11111111111111111111111111111111), expected: i32(0) }, - { input: i32Bits(0b11111111111111111111111111111110), expected: i32(1) }, - { input: i32Bits(0b11111111111111111111111111111100), expected: i32(2) }, - { input: i32Bits(0b11111111111111111111111111111000), expected: i32(3) }, - { input: i32Bits(0b11111111111111111111111111110000), expected: i32(4) }, - { input: i32Bits(0b11111111111111111111111111100000), expected: i32(5) }, - { input: i32Bits(0b11111111111111111111111111000000), expected: i32(6) }, - { input: i32Bits(0b11111111111111111111111110000000), expected: i32(7) }, - { input: i32Bits(0b11111111111111111111111100000000), expected: i32(8) }, - { input: i32Bits(0b11111111111111111111111000000000), expected: i32(9) }, - { input: i32Bits(0b11111111111111111111110000000000), expected: i32(10) }, - { input: i32Bits(0b11111111111111111111100000000000), expected: i32(11) }, - { input: i32Bits(0b11111111111111111111000000000000), expected: i32(12) }, - { input: i32Bits(0b11111111111111111110000000000000), expected: i32(13) }, - { input: i32Bits(0b11111111111111111100000000000000), expected: i32(14) }, - { input: i32Bits(0b11111111111111111000000000000000), expected: i32(15) }, - { input: i32Bits(0b11111111111111110000000000000000), expected: i32(16) }, - { input: i32Bits(0b11111111111111100000000000000000), expected: i32(17) }, - { input: i32Bits(0b11111111111111000000000000000000), expected: i32(18) }, - { input: i32Bits(0b11111111111110000000000000000000), expected: i32(19) }, - { input: i32Bits(0b11111111111100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b11111111111000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b11111111110000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b11111111100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b11111111000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b11111110000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b11111100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b11111000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b11110000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b11100000000000000000000000000000), expected: i32(29) }, - { input: i32Bits(0b11000000000000000000000000000000), expected: i32(30) }, + // 1's before trailing 1 + { input: i32Bits(0b11111111111111111111111111111111), expected: i32(0) }, + { input: i32Bits(0b11111111111111111111111111111110), expected: i32(1) }, + { input: i32Bits(0b11111111111111111111111111111100), expected: i32(2) }, + { input: i32Bits(0b11111111111111111111111111111000), expected: i32(3) }, + { input: i32Bits(0b11111111111111111111111111110000), expected: i32(4) }, + { input: i32Bits(0b11111111111111111111111111100000), expected: i32(5) }, + { input: i32Bits(0b11111111111111111111111111000000), expected: i32(6) }, + { input: i32Bits(0b11111111111111111111111110000000), expected: i32(7) }, + { input: i32Bits(0b11111111111111111111111100000000), expected: i32(8) }, + { input: i32Bits(0b11111111111111111111111000000000), expected: i32(9) }, + { input: i32Bits(0b11111111111111111111110000000000), expected: i32(10) }, + { input: i32Bits(0b11111111111111111111100000000000), expected: i32(11) }, + { input: i32Bits(0b11111111111111111111000000000000), expected: i32(12) }, + { input: i32Bits(0b11111111111111111110000000000000), expected: i32(13) }, + { input: i32Bits(0b11111111111111111100000000000000), expected: i32(14) }, + { input: i32Bits(0b11111111111111111000000000000000), expected: i32(15) }, + { input: i32Bits(0b11111111111111110000000000000000), expected: i32(16) }, + { input: i32Bits(0b11111111111111100000000000000000), expected: i32(17) }, + { input: i32Bits(0b11111111111111000000000000000000), expected: i32(18) }, + { input: i32Bits(0b11111111111110000000000000000000), expected: i32(19) }, + { input: i32Bits(0b11111111111100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b11111111111000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b11111111110000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b11111111100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b11111111000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b11111110000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b11111100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b11111000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b11110000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b11100000000000000000000000000000), expected: i32(29) }, + { input: i32Bits(0b11000000000000000000000000000000), expected: i32(30) }, - // random before trailing 1 - { input: i32Bits(0b11110000001111111101111010001111), expected: i32(0) }, - { input: i32Bits(0b11011110111111100101110011110010), expected: i32(1) }, - { input: i32Bits(0b11110111011011111111010000111100), expected: i32(2) }, - { input: i32Bits(0b11010011011101111111010011101000), expected: i32(3) }, - { input: i32Bits(0b11010111110111110001111110110000), expected: i32(4) }, - { input: i32Bits(0b11111101111101111110101111100000), expected: i32(5) }, - { input: i32Bits(0b11111001111011111001111011000000), expected: i32(6) }, - { input: i32Bits(0b11001110110111110111111010000000), expected: i32(7) }, - { input: i32Bits(0b11101111011111101110101100000000), expected: i32(8) }, - { input: i32Bits(0b11111101111011111111111000000000), expected: i32(9) }, - { input: i32Bits(0b10011111011101110110110000000000), expected: i32(10) }, - { input: i32Bits(0b11111111101101111011100000000000), expected: i32(11) }, - { input: i32Bits(0b11111011010110111011000000000000), expected: i32(12) }, - { input: i32Bits(0b00111101010000111010000000000000), expected: i32(13) }, - { input: i32Bits(0b11111011110001101100000000000000), expected: i32(14) }, - { input: i32Bits(0b10111111010111111000000000000000), expected: i32(15) }, - { input: i32Bits(0b11011101111010110000000000000000), expected: i32(16) }, - { input: i32Bits(0b01110100110110100000000000000000), expected: i32(17) }, - { input: i32Bits(0b11100111001011000000000000000000), expected: i32(18) }, - { input: i32Bits(0b11111001110110000000000000000000), expected: i32(19) }, - { input: i32Bits(0b00110100100100000000000000000000), expected: i32(20) }, - { input: i32Bits(0b11111010011000000000000000000000), expected: i32(21) }, - { input: i32Bits(0b00000010110000000000000000000000), expected: i32(22) }, - { input: i32Bits(0b11100111100000000000000000000000), expected: i32(23) }, - { input: i32Bits(0b00101101000000000000000000000000), expected: i32(24) }, - { input: i32Bits(0b11011010000000000000000000000000), expected: i32(25) }, - { input: i32Bits(0b11010100000000000000000000000000), expected: i32(26) }, - { input: i32Bits(0b10111000000000000000000000000000), expected: i32(27) }, - { input: i32Bits(0b01110000000000000000000000000000), expected: i32(28) }, - { input: i32Bits(0b10100000000000000000000000000000), expected: i32(29) }, - ]); - }); + // random before trailing 1 + { input: i32Bits(0b11110000001111111101111010001111), expected: i32(0) }, + { input: i32Bits(0b11011110111111100101110011110010), expected: i32(1) }, + { input: i32Bits(0b11110111011011111111010000111100), expected: i32(2) }, + { input: i32Bits(0b11010011011101111111010011101000), expected: i32(3) }, + { input: i32Bits(0b11010111110111110001111110110000), expected: i32(4) }, + { input: i32Bits(0b11111101111101111110101111100000), expected: i32(5) }, + { input: i32Bits(0b11111001111011111001111011000000), expected: i32(6) }, + { input: i32Bits(0b11001110110111110111111010000000), expected: i32(7) }, + { input: i32Bits(0b11101111011111101110101100000000), expected: i32(8) }, + { input: i32Bits(0b11111101111011111111111000000000), expected: i32(9) }, + { input: i32Bits(0b10011111011101110110110000000000), expected: i32(10) }, + { input: i32Bits(0b11111111101101111011100000000000), expected: i32(11) }, + { input: i32Bits(0b11111011010110111011000000000000), expected: i32(12) }, + { input: i32Bits(0b00111101010000111010000000000000), expected: i32(13) }, + { input: i32Bits(0b11111011110001101100000000000000), expected: i32(14) }, + { input: i32Bits(0b10111111010111111000000000000000), expected: i32(15) }, + { input: i32Bits(0b11011101111010110000000000000000), expected: i32(16) }, + { input: i32Bits(0b01110100110110100000000000000000), expected: i32(17) }, + { input: i32Bits(0b11100111001011000000000000000000), expected: i32(18) }, + { input: i32Bits(0b11111001110110000000000000000000), expected: i32(19) }, + { input: i32Bits(0b00110100100100000000000000000000), expected: i32(20) }, + { input: i32Bits(0b11111010011000000000000000000000), expected: i32(21) }, + { input: i32Bits(0b00000010110000000000000000000000), expected: i32(22) }, + { input: i32Bits(0b11100111100000000000000000000000), expected: i32(23) }, + { input: i32Bits(0b00101101000000000000000000000000), expected: i32(24) }, + { input: i32Bits(0b11011010000000000000000000000000), expected: i32(25) }, + { input: i32Bits(0b11010100000000000000000000000000), expected: i32(26) }, + { input: i32Bits(0b10111000000000000000000000000000), expected: i32(27) }, + { input: i32Bits(0b01110000000000000000000000000000), expected: i32(28) }, + { input: i32Bits(0b10100000000000000000000000000000), expected: i32(29) }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.cache.js new file mode 100644 index 00000000000..a15ef4c952f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.cache.js @@ -0,0 +1,26 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +const kSmallMagnitudeTestValues = [0.1, 0.9, 1.0, 1.1, 1.9, -0.1, -0.9, -1.0, -1.1, -1.9]; + +// See https://github.com/gpuweb/cts/issues/2766 for details +const kIssue2766Value = { + abstract: 0x8000_0000_0000_0000, + f32: 0x8000_0000, + f16: 0x8000 +}; + +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...kSmallMagnitudeTestValues, kIssue2766Value[trait], ...FP[trait].scalarRange()], + 'unfiltered', + FP[trait].floorInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('floor', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.spec.js index edde8ce867e..dbb2704de20 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/floor.spec.js @@ -1,97 +1,56 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'floor' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn floor(e: T ) -> T Returns the floor of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; -import { allInputSources, run } from '../../expression.js'; +import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; +import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; -import { builtin } from './builtin.js'; +import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './floor.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('floor', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // Small positive numbers - 0.1, - 0.9, - 1.0, - 1.1, - 1.9, - // Small negative numbers - -0.1, - -0.9, - -1.0, - -1.1, - -1.9, - 0x80000000, // https://github.com/gpuweb/cts/issues/2766 - ...fullF32Range(), - ], - - 'unfiltered', - FP.f32.floorInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // Small positive numbers - 0.1, - 0.9, - 1.0, - 1.1, - 1.9, - // Small negative numbers - -0.1, - -0.9, - -1.0, - -1.1, - -1.9, - 0x8000, // https://github.com/gpuweb/cts/issues/2766 - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.floorInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run(t, abstractBuiltin('floor'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('floor'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('floor'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('floor'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('floor'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.cache.js new file mode 100644 index 00000000000..c4da19cfa84 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.cache.js @@ -0,0 +1,25 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract]_[non_]const +// abstract_non_const is empty and not used +const cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return FP[trait].generateScalarTripleToIntervalCases( + FP[trait].sparseScalarRange(), + FP[trait].sparseScalarRange(), + FP[trait].sparseScalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].fmaInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('fma', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.spec.js index ee4e4ef8590..b9f114ee404 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fma.spec.js @@ -1,108 +1,63 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'fma' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn fma(e1: T ,e2: T ,e3: T ) -> T Returns e1 * e2 + e3. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeAbstractFloat } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { sparseF32Range, sparseF16Range, sparseF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './fma.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('fma', { - f32_const: () => { - return FP.f32.generateScalarTripleToIntervalCases( - sparseF32Range(), - sparseF32Range(), - sparseF32Range(), - 'finite', - FP.f32.fmaInterval - ); - }, - f32_non_const: () => { - return FP.f32.generateScalarTripleToIntervalCases( - sparseF32Range(), - sparseF32Range(), - sparseF32Range(), - 'unfiltered', - FP.f32.fmaInterval - ); - }, - f16_const: () => { - return FP.f16.generateScalarTripleToIntervalCases( - sparseF16Range(), - sparseF16Range(), - sparseF16Range(), - 'finite', - FP.f16.fmaInterval - ); - }, - f16_non_const: () => { - return FP.f16.generateScalarTripleToIntervalCases( - sparseF16Range(), - sparseF16Range(), - sparseF16Range(), - 'unfiltered', - FP.f16.fmaInterval - ); - }, - abstract: () => { - return FP.abstract.generateScalarTripleToIntervalCases( - sparseF64Range(), - sparseF64Range(), - sparseF64Range(), - 'finite', - FP.abstract.fmaInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract_const'); + await run( + t, + abstractBuiltin('fma'), + [TypeAbstractFloat, TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('fma'), - [TypeAbstractFloat, TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('fma'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('fma'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('fma'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('fma'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.cache.js new file mode 100644 index 00000000000..fbb92874530 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.cache.js @@ -0,0 +1,45 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +const kCommonValues = [ +0.5, // 0.5 -> 0.5 +0.9, // ~0.9 -> ~0.9 +1, // 1 -> 0 +2, // 2 -> 0 +1.11, // ~1.11 -> ~0.11 +-0.1, // ~-0.1 -> ~0.9 +-0.5, // -0.5 -> 0.5 +-0.9, // ~-0.9 -> ~0.1 +-1, // -1 -> 0 +-2, // -2 -> 0 +-1.11 // ~-1.11 -> ~0.89 +]; + +const kTraitSpecificValues = { + f32: [ + 10.0001, // ~10.0001 -> ~0.0001 + -10.0001, // -10.0001 -> ~0.9999 + 0x8000_0000 // https://github.com/gpuweb/cts/issues/2766 + ], + f16: [ + 10.0078125, // 10.0078125 -> 0.0078125 + -10.0078125, // -10.0078125 -> 0.9921875 + 658.5, // 658.5 -> 0.5 + 0x8000 // https://github.com/gpuweb/cts/issues/2766 + ] +}; + +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...kCommonValues, ...kTraitSpecificValues[trait], ...FP[trait].scalarRange()], + 'unfiltered', + FP[trait].fractInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('fract', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.spec.js index f03da3bf0e6..c5a649bd17a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fract.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'fract' builtin function S is AbstractFloat, f32, f16 @@ -8,93 +8,45 @@ T is S or vecN @const fn fract(e: T ) -> T Returns the fractional part of e, computed as e - floor(e). Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './fract.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('fract', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - 0.5, // 0.5 -> 0.5 - 0.9, // ~0.9 -> ~0.9 - 1, // 1 -> 0 - 2, // 2 -> 0 - 1.11, // ~1.11 -> ~0.11 - 10.0001, // ~10.0001 -> ~0.0001 - -0.1, // ~-0.1 -> ~0.9 - -0.5, // -0.5 -> 0.5 - -0.9, // ~-0.9 -> ~0.1 - -1, // -1 -> 0 - -2, // -2 -> 0 - -1.11, // ~-1.11 -> ~0.89 - -10.0001, // -10.0001 -> ~0.9999 - 0x80000000, // https://github.com/gpuweb/cts/issues/2766 - ...fullF32Range(), - ], +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - 'unfiltered', - FP.f32.fractInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - 0.5, // 0.5 -> 0.5 - 0.9, // ~0.9 -> ~0.9 - 1, // 1 -> 0 - 2, // 2 -> 0 - 1.11, // ~1.11 -> ~0.11 - 10.0078125, // 10.0078125 -> 0.0078125 - -0.1, // ~-0.1 -> ~0.9 - -0.5, // -0.5 -> 0.5 - -0.9, // ~-0.9 -> ~0.1 - -1, // -1 -> 0 - -2, // -2 -> 0 - -1.11, // ~-1.11 -> ~0.89 - -10.0078125, // -10.0078125 -> 0.9921875 - 658.5, // 658.5 -> 0.5 - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.fractInterval - ); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('fract'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('fract'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('fract'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('fract'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.cache.js new file mode 100644 index 00000000000..2de29328383 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.cache.js @@ -0,0 +1,95 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { skipUndefined } from '../../../../../util/compare.js';import { i32, toVector } from '../../../../../util/conversion.js';import { FP } from '../../../../../util/floating_point.js'; +import { frexp } from '../../../../../util/math.js'; + +import { makeCaseCache } from '../../case_cache.js'; + +/* @returns a fract Case for a given scalar or vector input */ +function makeCaseFract(v, trait) { + const fp = FP[trait]; + let toInput; + let toOutput; + if (v instanceof Array) { + // Input is vector + toInput = (n) => toVector(n, fp.scalarBuilder); + toOutput = (n) => toVector(n, fp.scalarBuilder); + } else { + // Input is scalar, also wrap it in an array. + v = [v]; + toInput = (n) => fp.scalarBuilder(n[0]); + toOutput = (n) => fp.scalarBuilder(n[0]); + } + + v = v.map(fp.quantize); + if (v.some((e) => e !== 0 && fp.isSubnormal(e))) { + return { input: toInput(v), expected: skipUndefined(undefined) }; + } + + const fs = v.map((e) => { + return frexp(e, trait).fract; + }); + + return { input: toInput(v), expected: toOutput(fs) }; +} + +/* @returns an exp Case for a given scalar or vector input */ +function makeCaseExp(v, trait) { + const fp = FP[trait]; + let toInput; + let toOutput; + if (v instanceof Array) { + // Input is vector + toInput = (n) => toVector(n, fp.scalarBuilder); + toOutput = (n) => toVector(n, i32); + } else { + // Input is scalar, also wrap it in an array. + v = [v]; + toInput = (n) => fp.scalarBuilder(n[0]); + toOutput = (n) => i32(n[0]); + } + + v = v.map(fp.quantize); + if (v.some((e) => e !== 0 && fp.isSubnormal(e))) { + return { input: toInput(v), expected: skipUndefined(undefined) }; + } + + const fs = v.map((e) => { + return frexp(e, trait).exp; + }); + + return { input: toInput(v), expected: toOutput(fs) }; +} + +// Cases: [f32|f16]_vecN_[exp|whole] +const vec_cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +['exp', 'fract'].map((portion) => ({ + [`${trait}_vec${dim}_${portion}`]: () => { + return FP[trait]. + vectorRange(dim). + map((v) => portion === 'exp' ? makeCaseExp(v, trait) : makeCaseFract(v, trait)); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: [f32|f16]_[exp|whole] +const scalar_cases = ['f32', 'f16']. +flatMap((trait) => +['exp', 'fract'].map((portion) => ({ + [`${trait}_${portion}`]: () => { + return FP[trait]. + scalarRange(). + map((v) => portion === 'exp' ? makeCaseExp(v, trait) : makeCaseFract(v, trait)); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('frexp', { + ...scalar_cases, + ...vec_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.spec.js index 4c37f33f29b..10fa6e72d2f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/frexp.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'frexp' builtin function S is f32 or f16 @@ -13,152 +13,46 @@ Returns the result_struct for the appropriate overload. The magnitude of the significand is in the range of [0.5, 1.0) or 0. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { skipUndefined } from '../../../../../util/compare.js'; -import { - i32, - toVector, - TypeF32, - TypeF16, - TypeI32, - TypeVec, -} from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - frexp, - fullF16Range, - fullF32Range, - vectorF16Range, - vectorF32Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeI32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, basicExpressionBuilder, run } from '../../expression.js'; +import { d } from './frexp.cache.js'; + export const g = makeTestGroup(GPUTest); /* @returns an ShaderBuilder that evaluates frexp and returns .fract from the result structure */ function fractBuilder() { - return basicExpressionBuilder(value => `frexp(${value}).fract`); + return basicExpressionBuilder((value) => `frexp(${value}).fract`); } /* @returns an ShaderBuilder that evaluates frexp and returns .exp from the result structure */ function expBuilder() { - return basicExpressionBuilder(value => `frexp(${value}).exp`); + return basicExpressionBuilder((value) => `frexp(${value}).exp`); } +g.test('f32_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` +T is f32 -/* @returns a fract Case for a given scalar or vector input */ -function makeVectorCaseFract(v, trait) { - const fp = FP[trait]; - let toInput; - let toOutput; - if (v instanceof Array) { - // Input is vector - toInput = n => toVector(n, fp.scalarBuilder); - toOutput = n => toVector(n, fp.scalarBuilder); - } else { - // Input is scalar, also wrap it in an array. - v = [v]; - toInput = n => fp.scalarBuilder(n[0]); - toOutput = n => fp.scalarBuilder(n[0]); - } - - v = v.map(fp.quantize); - if (v.some(e => e !== 0 && fp.isSubnormal(e))) { - return { input: toInput(v), expected: skipUndefined(undefined) }; - } - - const fs = v.map(e => { - return frexp(e, trait).fract; - }); - - return { input: toInput(v), expected: toOutput(fs) }; +struct __frexp_result_f32 { + fract : f32, // fract part + exp : i32 // exponent part } - -/* @returns an exp Case for a given scalar or vector input */ -function makeVectorCaseExp(v, trait) { - const fp = FP[trait]; - let toInput; - let toOutput; - if (v instanceof Array) { - // Input is vector - toInput = n => toVector(n, fp.scalarBuilder); - toOutput = n => toVector(n, i32); - } else { - // Input is scalar, also wrap it in an array. - v = [v]; - toInput = n => fp.scalarBuilder(n[0]); - toOutput = n => i32(n[0]); - } - - v = v.map(fp.quantize); - if (v.some(e => e !== 0 && fp.isSubnormal(e))) { - return { input: toInput(v), expected: skipUndefined(undefined) }; - } - - const fs = v.map(e => { - return frexp(e, trait).exp; - }); - - return { input: toInput(v), expected: toOutput(fs) }; -} - -export const d = makeCaseCache('frexp', { - f32_fract: () => { - return fullF32Range().map(v => makeVectorCaseFract(v, 'f32')); - }, - f32_exp: () => { - return fullF32Range().map(v => makeVectorCaseExp(v, 'f32')); - }, - f32_vec2_fract: () => { - return vectorF32Range(2).map(v => makeVectorCaseFract(v, 'f32')); - }, - f32_vec2_exp: () => { - return vectorF32Range(2).map(v => makeVectorCaseExp(v, 'f32')); - }, - f32_vec3_fract: () => { - return vectorF32Range(3).map(v => makeVectorCaseFract(v, 'f32')); - }, - f32_vec3_exp: () => { - return vectorF32Range(3).map(v => makeVectorCaseExp(v, 'f32')); - }, - f32_vec4_fract: () => { - return vectorF32Range(4).map(v => makeVectorCaseFract(v, 'f32')); - }, - f32_vec4_exp: () => { - return vectorF32Range(4).map(v => makeVectorCaseExp(v, 'f32')); - }, - f16_fract: () => { - return fullF16Range().map(v => makeVectorCaseFract(v, 'f16')); - }, - f16_exp: () => { - return fullF16Range().map(v => makeVectorCaseExp(v, 'f16')); - }, - f16_vec2_fract: () => { - return vectorF16Range(2).map(v => makeVectorCaseFract(v, 'f16')); - }, - f16_vec2_exp: () => { - return vectorF16Range(2).map(v => makeVectorCaseExp(v, 'f16')); - }, - f16_vec3_fract: () => { - return vectorF16Range(3).map(v => makeVectorCaseFract(v, 'f16')); - }, - f16_vec3_exp: () => { - return vectorF16Range(3).map(v => makeVectorCaseExp(v, 'f16')); - }, - f16_vec4_fract: () => { - return vectorF16Range(4).map(v => makeVectorCaseFract(v, 'f16')); - }, - f16_vec4_exp: () => { - return vectorF16Range(4).map(v => makeVectorCaseExp(v, 'f16')); - }, +` +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_fract'); + await run(t, fractBuilder(), [TypeF32], TypeF32, t.params, cases); }); -g.test('f32_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is f32 struct __frexp_result_f32 { @@ -166,35 +60,17 @@ struct __frexp_result_f32 { exp : i32 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_fract'); - await run(t, fractBuilder(), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_exp'); + await run(t, expBuilder(), [TypeF32], TypeI32, t.params, cases); +}); -g.test('f32_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` -T is f32 - -struct __frexp_result_f32 { - fract : f32, // fract part - exp : i32 // exponent part -} -` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_exp'); - await run(t, expBuilder(), [TypeF32], TypeI32, t.params, cases); - }); - -g.test('f32_vec2_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec2_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __frexp_result_vec2_f32 { @@ -202,17 +78,17 @@ struct __frexp_result_vec2_f32 { exp : vec2 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec2_fract'); - await run(t, fractBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec2_fract'); + await run(t, fractBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); +}); -g.test('f32_vec2_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec2_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __frexp_result_vec2_f32 { @@ -220,17 +96,17 @@ struct __frexp_result_vec2_f32 { exp : vec2 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec2_exp'); - await run(t, expBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeI32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec2_exp'); + await run(t, expBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeI32), t.params, cases); +}); -g.test('f32_vec3_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec3_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __frexp_result_vec3_f32 { @@ -238,17 +114,17 @@ struct __frexp_result_vec3_f32 { exp : vec3 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec3_fract'); - await run(t, fractBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec3_fract'); + await run(t, fractBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); +}); -g.test('f32_vec3_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec3_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __frexp_result_vec3_f32 { @@ -256,17 +132,17 @@ struct __frexp_result_vec3_f32 { exp : vec3 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec3_exp'); - await run(t, expBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeI32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec3_exp'); + await run(t, expBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeI32), t.params, cases); +}); -g.test('f32_vec4_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec4_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __frexp_result_vec4_f32 { @@ -274,17 +150,17 @@ struct __frexp_result_vec4_f32 { exp : vec4 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec4_fract'); - await run(t, fractBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec4_fract'); + await run(t, fractBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); +}); -g.test('f32_vec4_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec4_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __frexp_result_vec4_f32 { @@ -292,17 +168,17 @@ struct __frexp_result_vec4_f32 { exp : vec4 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec4_exp'); - await run(t, expBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeI32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec4_exp'); + await run(t, expBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeI32), t.params, cases); +}); -g.test('f16_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is f16 struct __frexp_result_f16 { @@ -310,20 +186,20 @@ struct __frexp_result_f16 { exp : i32 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_fract'); - await run(t, fractBuilder(), [TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_fract'); + await run(t, fractBuilder(), [TypeF16], TypeF16, t.params, cases); +}); -g.test('f16_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is f16 struct __frexp_result_f16 { @@ -331,20 +207,20 @@ struct __frexp_result_f16 { exp : i32 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_exp'); - await run(t, expBuilder(), [TypeF16], TypeI32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_exp'); + await run(t, expBuilder(), [TypeF16], TypeI32, t.params, cases); +}); -g.test('f16_vec2_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec2_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __frexp_result_vec2_f16 { @@ -352,20 +228,20 @@ struct __frexp_result_vec2_f16 { exp : vec2 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_vec2_fract'); - await run(t, fractBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_vec2_fract'); + await run(t, fractBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); +}); -g.test('f16_vec2_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec2_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __frexp_result_vec2_f16 { @@ -373,20 +249,20 @@ struct __frexp_result_vec2_f16 { exp : vec2 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_vec2_exp'); - await run(t, expBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeI32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_vec2_exp'); + await run(t, expBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeI32), t.params, cases); +}); -g.test('f16_vec3_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec3_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __frexp_result_vec3_f16 { @@ -394,20 +270,20 @@ struct __frexp_result_vec3_f16 { exp : vec3 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_vec3_fract'); - await run(t, fractBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_vec3_fract'); + await run(t, fractBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); +}); -g.test('f16_vec3_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec3_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __frexp_result_vec3_f16 { @@ -415,20 +291,20 @@ struct __frexp_result_vec3_f16 { exp : vec3 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_vec3_exp'); - await run(t, expBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeI32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_vec3_exp'); + await run(t, expBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeI32), t.params, cases); +}); -g.test('f16_vec4_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec4_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __frexp_result_vec4_f16 { @@ -436,20 +312,20 @@ struct __frexp_result_vec4_f16 { exp : vec4 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_vec4_fract'); - await run(t, fractBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_vec4_fract'); + await run(t, fractBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); +}); -g.test('f16_vec4_exp') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec4_exp'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __frexp_result_vec4_f16 { @@ -457,12 +333,12 @@ struct __frexp_result_vec4_f16 { exp : vec4 // exponent part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16_vec4_exp'); - await run(t, expBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeI32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16_vec4_exp'); + await run(t, expBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeI32), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidth.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidth.spec.js index ee33a68ab49..2ec40557bbb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidth.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidth.spec.js @@ -1,20 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'fwidth' builtin function T is f32 or vecN fn fwidth(e:T) ->T Returns abs(dpdx(e)) + abs(dpdy(e)). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthCoarse.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthCoarse.spec.js index d5df428ebcf..21c4cce9239 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthCoarse.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthCoarse.spec.js @@ -1,20 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'fwidthCoarse' builtin function T is f32 or vecN fn fwidthCoarse(e:T) ->T Returns abs(dpdxCoarse(e)) + abs(dpdyCoarse(e)). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthFine.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthFine.spec.js index 0bd0ad33d33..637967371e9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthFine.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/fwidthFine.spec.js @@ -1,20 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'fwidthFine' builtin function T is f32 or vecN fn fwidthFine(e:T) ->T Returns abs(dpdxFine(e)) + abs(dpdyFine(e)). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { allInputSources } from '../../expression.js'; export const g = makeTestGroup(GPUTest); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#derivative-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/insertBits.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/insertBits.spec.js index 262aaa199aa..1af24a51899 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/insertBits.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/insertBits.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'insertBits' builtin function S is i32 or u32 @@ -16,8 +16,7 @@ The result is e if c is 0. Otherwise, bits o..o+c-1 of the result are copied from bits 0..c-1 of newbits. Other bits of the result are copied from e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { i32Bits, @@ -28,360 +27,360 @@ import { vec2, vec3, vec4, - TypeVec, -} from '../../../../../util/conversion.js'; + TypeVec } from +'../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('integer') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`integer tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('signed', [false, true]) - .combine('width', [1, 2, 3, 4]) - ) - .fn(async t => { - const cfg = t.params; - const scalarType = t.params.signed ? TypeI32 : TypeU32; - const T = t.params.width === 1 ? scalarType : TypeVec(t.params.width, scalarType); +g.test('integer'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`integer tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('signed', [false, true]). +combine('width', [1, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; + const scalarType = t.params.signed ? TypeI32 : TypeU32; + const T = t.params.width === 1 ? scalarType : TypeVec(t.params.width, scalarType); - const V = (x, y, z, w) => { - y = y === undefined ? x : y; - z = z === undefined ? x : z; - w = w === undefined ? x : w; + const V = (x, y, z, w) => { + y = y === undefined ? x : y; + z = z === undefined ? x : z; + w = w === undefined ? x : w; - if (t.params.signed) { - switch (t.params.width) { - case 1: - return i32Bits(x); - case 2: - return vec2(i32Bits(x), i32Bits(y)); - case 3: - return vec3(i32Bits(x), i32Bits(y), i32Bits(z)); - default: - return vec4(i32Bits(x), i32Bits(y), i32Bits(z), i32Bits(w)); - } - } else { - switch (t.params.width) { - case 1: - return u32Bits(x); - case 2: - return vec2(u32Bits(x), u32Bits(y)); - case 3: - return vec3(u32Bits(x), u32Bits(y), u32Bits(z)); - default: - return vec4(u32Bits(x), u32Bits(y), u32Bits(z), u32Bits(w)); - } + if (t.params.signed) { + switch (t.params.width) { + case 1: + return i32Bits(x); + case 2: + return vec2(i32Bits(x), i32Bits(y)); + case 3: + return vec3(i32Bits(x), i32Bits(y), i32Bits(z)); + default: + return vec4(i32Bits(x), i32Bits(y), i32Bits(z), i32Bits(w)); } - }; + } else { + switch (t.params.width) { + case 1: + return u32Bits(x); + case 2: + return vec2(u32Bits(x), u32Bits(y)); + case 3: + return vec3(u32Bits(x), u32Bits(y), u32Bits(z)); + default: + return vec4(u32Bits(x), u32Bits(y), u32Bits(z), u32Bits(w)); + } + } + }; - const all_1 = V(0b11111111111111111111111111111111); - const all_0 = V(0b00000000000000000000000000000000); - const low_1 = V(0b00000000000000000000000000000001); - const low_0 = V(0b11111111111111111111111111111110); - const high_1 = V(0b10000000000000000000000000000000); - const high_0 = V(0b01111111111111111111111111111111); - const pattern = V( + const all_1 = V(0b11111111111111111111111111111111); + const all_0 = V(0b00000000000000000000000000000000); + const low_1 = V(0b00000000000000000000000000000001); + const low_0 = V(0b11111111111111111111111111111110); + const high_1 = V(0b10000000000000000000000000000000); + const high_0 = V(0b01111111111111111111111111111111); + const pattern = V( + 0b10001001010100100010010100100010, + 0b11001110001100111000110011100011, + 0b10101010101010101010101010101010, + 0b01010101010101010101010101010101 + ); + + const cases = [ + { input: [all_0, all_0, u32(0), u32(32)], expected: all_0 }, + { input: [all_0, all_0, u32(1), u32(10)], expected: all_0 }, + { input: [all_0, all_0, u32(2), u32(5)], expected: all_0 }, + { input: [all_0, all_0, u32(0), u32(1)], expected: all_0 }, + { input: [all_0, all_0, u32(31), u32(1)], expected: all_0 }, + + { input: [all_0, all_1, u32(0), u32(32)], expected: all_1 }, + { input: [all_1, all_0, u32(0), u32(32)], expected: all_0 }, + { input: [all_0, all_1, u32(0), u32(1)], expected: low_1 }, + { input: [all_1, all_0, u32(0), u32(1)], expected: low_0 }, + { input: [all_0, all_1, u32(31), u32(1)], expected: high_1 }, + { input: [all_1, all_0, u32(31), u32(1)], expected: high_0 }, + { input: [all_0, all_1, u32(1), u32(10)], expected: V(0b00000000000000000000011111111110) }, + { input: [all_1, all_0, u32(1), u32(10)], expected: V(0b11111111111111111111100000000001) }, + { input: [all_0, all_1, u32(2), u32(5)], expected: V(0b00000000000000000000000001111100) }, + { input: [all_1, all_0, u32(2), u32(5)], expected: V(0b11111111111111111111111110000011) }, + + // Patterns + { input: [all_0, pattern, u32(0), u32(32)], expected: pattern }, + { input: [all_1, pattern, u32(0), u32(32)], expected: pattern }, + { + input: [all_0, pattern, u32(1), u32(31)], + expected: V( + 0b00010010101001000100101001000100, + 0b10011100011001110001100111000110, + 0b01010101010101010101010101010100, + 0b10101010101010101010101010101010 + ) + }, + { + input: [all_1, pattern, u32(1), u32(31)], + expected: V( + 0b00010010101001000100101001000101, + 0b10011100011001110001100111000111, + 0b01010101010101010101010101010101, + 0b10101010101010101010101010101011 + ) + }, + { + input: [all_0, pattern, u32(14), u32(18)], + expected: V( + 0b10001001010010001000000000000000, + 0b11100011001110001100000000000000, + 0b10101010101010101000000000000000, + 0b01010101010101010100000000000000 + ) + }, + { + input: [all_1, pattern, u32(14), u32(18)], + expected: V( + 0b10001001010010001011111111111111, + 0b11100011001110001111111111111111, + 0b10101010101010101011111111111111, + 0b01010101010101010111111111111111 + ) + }, + { + input: [all_0, pattern, u32(14), u32(7)], + expected: V( + 0b00000000000010001000000000000000, + 0b00000000000110001100000000000000, + 0b00000000000010101000000000000000, + 0b00000000000101010100000000000000 + ) + }, + { + input: [all_1, pattern, u32(14), u32(7)], + expected: V( + 0b11111111111010001011111111111111, + 0b11111111111110001111111111111111, + 0b11111111111010101011111111111111, + 0b11111111111101010111111111111111 + ) + }, + { + input: [all_0, pattern, u32(14), u32(4)], + expected: V( + 0b00000000000000001000000000000000, + 0b00000000000000001100000000000000, + 0b00000000000000101000000000000000, + 0b00000000000000010100000000000000 + ) + }, + { + input: [all_1, pattern, u32(14), u32(4)], + expected: V( + 0b11111111111111001011111111111111, + 0b11111111111111001111111111111111, + 0b11111111111111101011111111111111, + 0b11111111111111010111111111111111 + ) + }, + { + input: [all_0, pattern, u32(14), u32(3)], + expected: V( + 0b00000000000000001000000000000000, + 0b00000000000000001100000000000000, + 0b00000000000000001000000000000000, + 0b00000000000000010100000000000000 + ) + }, + { + input: [all_1, pattern, u32(14), u32(3)], + expected: V( + 0b11111111111111101011111111111111, + 0b11111111111111101111111111111111, + 0b11111111111111101011111111111111, + 0b11111111111111110111111111111111 + ) + }, + { + input: [all_0, pattern, u32(18), u32(3)], + expected: V( + 0b00000000000010000000000000000000, + 0b00000000000011000000000000000000, + 0b00000000000010000000000000000000, + 0b00000000000101000000000000000000 + ) + }, + { + input: [all_1, pattern, u32(18), u32(3)], + expected: V( + 0b11111111111010111111111111111111, + 0b11111111111011111111111111111111, + 0b11111111111010111111111111111111, + 0b11111111111101111111111111111111 + ) + }, + { + input: [pattern, all_0, u32(1), u32(31)], + expected: V( + 0b00000000000000000000000000000000, + 0b00000000000000000000000000000001, + 0b00000000000000000000000000000000, + 0b00000000000000000000000000000001 + ) + }, + { + input: [pattern, all_1, u32(1), u32(31)], + expected: V( + 0b11111111111111111111111111111110, + 0b11111111111111111111111111111111, + 0b11111111111111111111111111111110, + 0b11111111111111111111111111111111 + ) + }, + { + input: [pattern, all_0, u32(14), u32(18)], + expected: V( + 0b00000000000000000010010100100010, + 0b00000000000000000000110011100011, + 0b00000000000000000010101010101010, + 0b00000000000000000001010101010101 + ) + }, + { + input: [pattern, all_1, u32(14), u32(18)], + expected: V( + 0b11111111111111111110010100100010, + 0b11111111111111111100110011100011, + 0b11111111111111111110101010101010, + 0b11111111111111111101010101010101 + ) + }, + { + input: [pattern, all_0, u32(14), u32(7)], + expected: V( + 0b10001001010000000010010100100010, + 0b11001110001000000000110011100011, + 0b10101010101000000010101010101010, + 0b01010101010000000001010101010101 + ) + }, + { + input: [pattern, all_1, u32(14), u32(7)], + expected: V( + 0b10001001010111111110010100100010, + 0b11001110001111111100110011100011, + 0b10101010101111111110101010101010, + 0b01010101010111111101010101010101 + ) + }, + { + input: [pattern, all_0, u32(14), u32(4)], + expected: V( + 0b10001001010100000010010100100010, + 0b11001110001100000000110011100011, + 0b10101010101010000010101010101010, + 0b01010101010101000001010101010101 + ) + }, + { + input: [pattern, all_1, u32(14), u32(4)], + expected: V( + 0b10001001010100111110010100100010, + 0b11001110001100111100110011100011, + 0b10101010101010111110101010101010, + 0b01010101010101111101010101010101 + ) + }, + { + input: [pattern, all_0, u32(14), u32(3)], + expected: V( 0b10001001010100100010010100100010, - 0b11001110001100111000110011100011, + 0b11001110001100100000110011100011, + 0b10101010101010100010101010101010, + 0b01010101010101000001010101010101 + ) + }, + { + input: [pattern, all_1, u32(14), u32(3)], + expected: V( + 0b10001001010100111110010100100010, + 0b11001110001100111100110011100011, + 0b10101010101010111110101010101010, + 0b01010101010101011101010101010101 + ) + }, + { + input: [pattern, all_0, u32(18), u32(3)], + expected: V( + 0b10001001010000100010010100100010, + 0b11001110001000111000110011100011, + 0b10101010101000101010101010101010, + 0b01010101010000010101010101010101 + ) + }, + { + input: [pattern, all_1, u32(18), u32(3)], + expected: V( + 0b10001001010111100010010100100010, + 0b11001110001111111000110011100011, + 0b10101010101111101010101010101010, + 0b01010101010111010101010101010101 + ) + }, + { + input: [pattern, pattern, u32(18), u32(3)], + expected: V( + 0b10001001010010100010010100100010, + 0b11001110001011111000110011100011, 0b10101010101010101010101010101010, 0b01010101010101010101010101010101 + ) + }, + { + input: [pattern, pattern, u32(14), u32(7)], + expected: V( + 0b10001001010010001010010100100010, + 0b11001110001110001100110011100011, + 0b10101010101010101010101010101010, + 0b01010101010101010101010101010101 + ) + }, + + // Zero count + { input: [pattern, all_1, u32(0), u32(0)], expected: pattern }, + { input: [pattern, all_1, u32(1), u32(0)], expected: pattern }, + { input: [pattern, all_1, u32(2), u32(0)], expected: pattern }, + { input: [pattern, all_1, u32(31), u32(0)], expected: pattern }, + { input: [pattern, all_1, u32(32), u32(0)], expected: pattern }, + { input: [pattern, all_1, u32(0), u32(0)], expected: pattern }]; + + + if (t.params.inputSource !== 'const') { + cases.push( + ...[ + // Start overflow + { input: [all_0, pattern, u32(50), u32(3)], expected: all_0 }, + { input: [all_1, pattern, u32(50), u32(3)], expected: all_1 }, + { input: [pattern, pattern, u32(50), u32(3)], expected: pattern }, + + // End overflow + { input: [all_0, pattern, u32(0), u32(99)], expected: pattern }, + { input: [all_1, pattern, u32(0), u32(99)], expected: pattern }, + { input: [all_0, low_1, u32(31), u32(99)], expected: high_1 }, + { + input: [pattern, pattern, u32(20), u32(99)], + expected: V( + 0b01010010001000100010010100100010, + 0b11001110001100111000110011100011, + 0b10101010101010101010101010101010, + 0b01010101010101010101010101010101 + ) + }] + ); + } - const cases = [ - { input: [all_0, all_0, u32(0), u32(32)], expected: all_0 }, - { input: [all_0, all_0, u32(1), u32(10)], expected: all_0 }, - { input: [all_0, all_0, u32(2), u32(5)], expected: all_0 }, - { input: [all_0, all_0, u32(0), u32(1)], expected: all_0 }, - { input: [all_0, all_0, u32(31), u32(1)], expected: all_0 }, - - { input: [all_0, all_1, u32(0), u32(32)], expected: all_1 }, - { input: [all_1, all_0, u32(0), u32(32)], expected: all_0 }, - { input: [all_0, all_1, u32(0), u32(1)], expected: low_1 }, - { input: [all_1, all_0, u32(0), u32(1)], expected: low_0 }, - { input: [all_0, all_1, u32(31), u32(1)], expected: high_1 }, - { input: [all_1, all_0, u32(31), u32(1)], expected: high_0 }, - { input: [all_0, all_1, u32(1), u32(10)], expected: V(0b00000000000000000000011111111110) }, - { input: [all_1, all_0, u32(1), u32(10)], expected: V(0b11111111111111111111100000000001) }, - { input: [all_0, all_1, u32(2), u32(5)], expected: V(0b00000000000000000000000001111100) }, - { input: [all_1, all_0, u32(2), u32(5)], expected: V(0b11111111111111111111111110000011) }, - - // Patterns - { input: [all_0, pattern, u32(0), u32(32)], expected: pattern }, - { input: [all_1, pattern, u32(0), u32(32)], expected: pattern }, - { - input: [all_0, pattern, u32(1), u32(31)], - expected: V( - 0b00010010101001000100101001000100, - 0b10011100011001110001100111000110, - 0b01010101010101010101010101010100, - 0b10101010101010101010101010101010 - ), - }, - { - input: [all_1, pattern, u32(1), u32(31)], - expected: V( - 0b00010010101001000100101001000101, - 0b10011100011001110001100111000111, - 0b01010101010101010101010101010101, - 0b10101010101010101010101010101011 - ), - }, - { - input: [all_0, pattern, u32(14), u32(18)], - expected: V( - 0b10001001010010001000000000000000, - 0b11100011001110001100000000000000, - 0b10101010101010101000000000000000, - 0b01010101010101010100000000000000 - ), - }, - { - input: [all_1, pattern, u32(14), u32(18)], - expected: V( - 0b10001001010010001011111111111111, - 0b11100011001110001111111111111111, - 0b10101010101010101011111111111111, - 0b01010101010101010111111111111111 - ), - }, - { - input: [all_0, pattern, u32(14), u32(7)], - expected: V( - 0b00000000000010001000000000000000, - 0b00000000000110001100000000000000, - 0b00000000000010101000000000000000, - 0b00000000000101010100000000000000 - ), - }, - { - input: [all_1, pattern, u32(14), u32(7)], - expected: V( - 0b11111111111010001011111111111111, - 0b11111111111110001111111111111111, - 0b11111111111010101011111111111111, - 0b11111111111101010111111111111111 - ), - }, - { - input: [all_0, pattern, u32(14), u32(4)], - expected: V( - 0b00000000000000001000000000000000, - 0b00000000000000001100000000000000, - 0b00000000000000101000000000000000, - 0b00000000000000010100000000000000 - ), - }, - { - input: [all_1, pattern, u32(14), u32(4)], - expected: V( - 0b11111111111111001011111111111111, - 0b11111111111111001111111111111111, - 0b11111111111111101011111111111111, - 0b11111111111111010111111111111111 - ), - }, - { - input: [all_0, pattern, u32(14), u32(3)], - expected: V( - 0b00000000000000001000000000000000, - 0b00000000000000001100000000000000, - 0b00000000000000001000000000000000, - 0b00000000000000010100000000000000 - ), - }, - { - input: [all_1, pattern, u32(14), u32(3)], - expected: V( - 0b11111111111111101011111111111111, - 0b11111111111111101111111111111111, - 0b11111111111111101011111111111111, - 0b11111111111111110111111111111111 - ), - }, - { - input: [all_0, pattern, u32(18), u32(3)], - expected: V( - 0b00000000000010000000000000000000, - 0b00000000000011000000000000000000, - 0b00000000000010000000000000000000, - 0b00000000000101000000000000000000 - ), - }, - { - input: [all_1, pattern, u32(18), u32(3)], - expected: V( - 0b11111111111010111111111111111111, - 0b11111111111011111111111111111111, - 0b11111111111010111111111111111111, - 0b11111111111101111111111111111111 - ), - }, - { - input: [pattern, all_0, u32(1), u32(31)], - expected: V( - 0b00000000000000000000000000000000, - 0b00000000000000000000000000000001, - 0b00000000000000000000000000000000, - 0b00000000000000000000000000000001 - ), - }, - { - input: [pattern, all_1, u32(1), u32(31)], - expected: V( - 0b11111111111111111111111111111110, - 0b11111111111111111111111111111111, - 0b11111111111111111111111111111110, - 0b11111111111111111111111111111111 - ), - }, - { - input: [pattern, all_0, u32(14), u32(18)], - expected: V( - 0b00000000000000000010010100100010, - 0b00000000000000000000110011100011, - 0b00000000000000000010101010101010, - 0b00000000000000000001010101010101 - ), - }, - { - input: [pattern, all_1, u32(14), u32(18)], - expected: V( - 0b11111111111111111110010100100010, - 0b11111111111111111100110011100011, - 0b11111111111111111110101010101010, - 0b11111111111111111101010101010101 - ), - }, - { - input: [pattern, all_0, u32(14), u32(7)], - expected: V( - 0b10001001010000000010010100100010, - 0b11001110001000000000110011100011, - 0b10101010101000000010101010101010, - 0b01010101010000000001010101010101 - ), - }, - { - input: [pattern, all_1, u32(14), u32(7)], - expected: V( - 0b10001001010111111110010100100010, - 0b11001110001111111100110011100011, - 0b10101010101111111110101010101010, - 0b01010101010111111101010101010101 - ), - }, - { - input: [pattern, all_0, u32(14), u32(4)], - expected: V( - 0b10001001010100000010010100100010, - 0b11001110001100000000110011100011, - 0b10101010101010000010101010101010, - 0b01010101010101000001010101010101 - ), - }, - { - input: [pattern, all_1, u32(14), u32(4)], - expected: V( - 0b10001001010100111110010100100010, - 0b11001110001100111100110011100011, - 0b10101010101010111110101010101010, - 0b01010101010101111101010101010101 - ), - }, - { - input: [pattern, all_0, u32(14), u32(3)], - expected: V( - 0b10001001010100100010010100100010, - 0b11001110001100100000110011100011, - 0b10101010101010100010101010101010, - 0b01010101010101000001010101010101 - ), - }, - { - input: [pattern, all_1, u32(14), u32(3)], - expected: V( - 0b10001001010100111110010100100010, - 0b11001110001100111100110011100011, - 0b10101010101010111110101010101010, - 0b01010101010101011101010101010101 - ), - }, - { - input: [pattern, all_0, u32(18), u32(3)], - expected: V( - 0b10001001010000100010010100100010, - 0b11001110001000111000110011100011, - 0b10101010101000101010101010101010, - 0b01010101010000010101010101010101 - ), - }, - { - input: [pattern, all_1, u32(18), u32(3)], - expected: V( - 0b10001001010111100010010100100010, - 0b11001110001111111000110011100011, - 0b10101010101111101010101010101010, - 0b01010101010111010101010101010101 - ), - }, - { - input: [pattern, pattern, u32(18), u32(3)], - expected: V( - 0b10001001010010100010010100100010, - 0b11001110001011111000110011100011, - 0b10101010101010101010101010101010, - 0b01010101010101010101010101010101 - ), - }, - { - input: [pattern, pattern, u32(14), u32(7)], - expected: V( - 0b10001001010010001010010100100010, - 0b11001110001110001100110011100011, - 0b10101010101010101010101010101010, - 0b01010101010101010101010101010101 - ), - }, - - // Zero count - { input: [pattern, all_1, u32(0), u32(0)], expected: pattern }, - { input: [pattern, all_1, u32(1), u32(0)], expected: pattern }, - { input: [pattern, all_1, u32(2), u32(0)], expected: pattern }, - { input: [pattern, all_1, u32(31), u32(0)], expected: pattern }, - { input: [pattern, all_1, u32(32), u32(0)], expected: pattern }, - { input: [pattern, all_1, u32(0), u32(0)], expected: pattern }, - ]; - - if (t.params.inputSource !== 'const') { - cases.push( - ...[ - // Start overflow - { input: [all_0, pattern, u32(50), u32(3)], expected: all_0 }, - { input: [all_1, pattern, u32(50), u32(3)], expected: all_1 }, - { input: [pattern, pattern, u32(50), u32(3)], expected: pattern }, - - // End overflow - { input: [all_0, pattern, u32(0), u32(99)], expected: pattern }, - { input: [all_1, pattern, u32(0), u32(99)], expected: pattern }, - { input: [all_0, low_1, u32(31), u32(99)], expected: high_1 }, - { - input: [pattern, pattern, u32(20), u32(99)], - expected: V( - 0b01010010001000100010010100100010, - 0b11001110001100111000110011100011, - 0b10101010101010101010101010101010, - 0b01010101010101010101010101010101 - ), - }, - ] - ); - } - - await run(t, builtin('insertBits'), [T, T, TypeU32, TypeU32], T, cfg, cases); - }); + await run(t, builtin('insertBits'), [T, T, TypeU32, TypeU32], T, cfg, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.cache.js new file mode 100644 index 00000000000..8d8a9254972 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.cache.js @@ -0,0 +1,31 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../../util/constants.js';import { FP } from '../../../../../util/floating_point.js';import { biasedRange, linearRange } from '../../../../../util/math.js'; +import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('inverseSqrt', { + f32: () => { + return FP.f32.generateScalarToIntervalCases( + [ + // 0 < x <= 1 linearly spread + ...linearRange(kValue.f32.positive.min, 1, 100), + // 1 <= x < 2^32, biased towards 1 + ...biasedRange(1, 2 ** 32, 1000)], + + 'unfiltered', + FP.f32.inverseSqrtInterval + ); + }, + f16: () => { + return FP.f16.generateScalarToIntervalCases( + [ + // 0 < x <= 1 linearly spread + ...linearRange(kValue.f16.positive.min, 1, 100), + // 1 <= x < 2^15, biased towards 1 + ...biasedRange(1, 2 ** 15, 1000)], + + 'unfiltered', + FP.f16.inverseSqrtInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.spec.js index 74ef5c1c03c..d72b14e2e6e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/inversesqrt.spec.js @@ -1,78 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'inverseSqrt' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn inverseSqrt(e: T ) -> T Returns the reciprocal of sqrt(e). Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './inversesqrt.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('inverseSqrt', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // 0 < x <= 1 linearly spread - ...linearRange(kValue.f32.positive.min, 1, 100), - // 1 <= x < 2^32, biased towards 1 - ...biasedRange(1, 2 ** 32, 1000), - ], +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - 'unfiltered', - FP.f32.inverseSqrtInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // 0 < x <= 1 linearly spread - ...linearRange(kValue.f16.positive.min, 1, 100), - // 1 <= x < 2^15, biased towards 1 - ...biasedRange(1, 2 ** 15, 1000), - ], - - 'unfiltered', - FP.f16.inverseSqrtInterval - ); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('inverseSqrt'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('inverseSqrt'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('inverseSqrt'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('inverseSqrt'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.cache.js new file mode 100644 index 00000000000..1c04b45ec25 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.cache.js @@ -0,0 +1,61 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../../../../../common/util/util.js';import { anyOf } from '../../../../../util/compare.js';import { i32 } from '../../../../../util/conversion.js'; +import { FP } from '../../../../../util/floating_point.js'; +import { biasedRange, quantizeToI32, sparseI32Range } from '../../../../../util/math.js'; + +import { makeCaseCache } from '../../case_cache.js'; + +const bias = { + f32: 127, + f16: 15 +}; + +// ldexpInterval's return interval doesn't cover the flush-to-zero cases when e2 + bias <= 0, thus +// special examination is required. +// See the comment block on ldexpInterval for more details +// e2 is an integer (i32) while e1 is float. +const makeCase = (trait, e1, e2) => { + const FPTrait = FP[trait]; + e1 = FPTrait.quantize(e1); + // e2 should be in i32 range for the convinience. + assert(-2147483648 <= e2 && e2 <= 2147483647, 'e2 should be in i32 range'); + e2 = quantizeToI32(e2); + + const expected = FPTrait.ldexpInterval(e1, e2); + + // Result may be zero if e2 + bias <= 0 + if (e2 + bias[trait] <= 0) { + return { + input: [FPTrait.scalarBuilder(e1), i32(e2)], + expected: anyOf(expected, FPTrait.constants().zeroInterval) + }; + } + + return { input: [FPTrait.scalarBuilder(e1), i32(e2)], expected }; +}; + +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (nonConst) { + return FP[trait]. + sparseScalarRange(). + flatMap((e1) => sparseI32Range().map((e2) => makeCase(trait, e1, e2))); + } + // const + return FP[trait]. + sparseScalarRange(). + flatMap((e1) => + biasedRange(-bias[trait] - 10, bias[trait] + 1, 10).flatMap((e2) => + FP[trait].isFinite(e1 * 2 ** quantizeToI32(e2)) ? makeCase(trait, e1, e2) : [] + ) + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('ldexp', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.spec.js index 49a846c8587..0935b09eecb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/ldexp.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'ldexp' builtin function S is AbstractFloat, f32, f16 @@ -12,105 +12,48 @@ I is K or vecN, where @const fn ldexp(e1: T ,e2: I ) -> T Returns e1 * 2^e2. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; -import { assert } from '../../../../../../common/util/util.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { anyOf } from '../../../../../util/compare.js'; -import { i32, TypeF32, TypeF16, TypeI32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - biasedRange, - fullF32Range, - fullF16Range, - fullI32Range, - quantizeToI32, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeI32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './ldexp.cache.js'; export const g = makeTestGroup(GPUTest); -const bias = { - f32: 127, - f16: 15, -}; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` +` +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -// ldexpInterval's return interval doesn't cover the flush-to-zero cases when e2 + bias <= 0, thus -// special examination is required. -// See the comment block on ldexpInterval for more details -// e2 is an integer (i32) while e1 is float. -const makeCase = (trait, e1, e2) => { - const FPTrait = FP[trait]; - e1 = FPTrait.quantize(e1); - // e2 should be in i32 range for the convinience. - assert(-2147483648 <= e2 && e2 <= 2147483647, 'e2 should be in i32 range'); - e2 = quantizeToI32(e2); - - const expected = FPTrait.ldexpInterval(e1, e2); - - // Result may be zero if e2 + bias <= 0 - if (e2 + bias[trait] <= 0) { - return { - input: [FPTrait.scalarBuilder(e1), i32(e2)], - expected: anyOf(expected, FPTrait.constants().zeroInterval), - }; - } - - return { input: [FPTrait.scalarBuilder(e1), i32(e2)], expected }; -}; - -export const d = makeCaseCache('ldexp', { - f32_non_const: () => { - return fullF32Range().flatMap(e1 => fullI32Range().map(e2 => makeCase('f32', e1, e2))); - }, - f32_const: () => { - return fullF32Range().flatMap(e1 => - biasedRange(-bias.f32 - 10, bias.f32 + 1, 10).flatMap(e2 => - FP.f32.isFinite(e1 * 2 ** quantizeToI32(e2)) ? makeCase('f32', e1, e2) : [] - ) - ); - }, - f16_non_const: () => { - return fullF16Range().flatMap(e1 => fullI32Range().map(e2 => makeCase('f16', e1, e2))); - }, - f16_const: () => { - return fullF16Range().flatMap(e1 => - biasedRange(-bias.f16 - 10, bias.f16 + 1, 10).flatMap(e2 => - FP.f16.isFinite(e1 * 2 ** quantizeToI32(e2)) ? makeCase('f16', e1, e2) : [] - ) - ); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('ldexp'), [TypeF32, TypeI32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` -` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('ldexp'), [TypeF32, TypeI32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('ldexp'), [TypeF16, TypeI32], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('ldexp'), [TypeF16, TypeI32], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.cache.js new file mode 100644 index 00000000000..f1bbfeb0951 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.cache.js @@ -0,0 +1,37 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_[non_]const +const scalar_cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].lengthInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: [f32|f16]_vecN_[non_]const +const vec_cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateVectorToIntervalCases( + FP[trait].vectorRange(dim), + nonConst ? 'unfiltered' : 'finite', + FP[trait].lengthInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('length', { + ...scalar_cases, + ...vec_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.spec.js index f82db383cdb..ee4138312bc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/length.spec.js @@ -1,183 +1,122 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'length' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn length(e: T ) -> f32 Returns the length of e (e.g. abs(e) if T is a scalar, or sqrt(e[0]^2 + e[1]^2 + ...) if T is a vector). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - fullF32Range, - fullF16Range, - vectorF32Range, - vectorF16Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './length.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_vecN_[non_]const -const f32_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorToIntervalCases( - vectorF32Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f32.lengthInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -// Cases: f16_vecN_[non_]const -const f16_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorToIntervalCases( - vectorF16Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f16.lengthInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('length', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - fullF32Range(), - 'unfiltered', - FP.f32.lengthInterval - ); - }, - ...f32_vec_cases, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - fullF16Range(), - 'unfiltered', - FP.f16.lengthInterval - ); - }, - ...f16_vec_cases, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('length'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run(t, builtin('length'), [TypeVec(2, TypeF32)], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('length'), [TypeF32], TypeF32, t.params, cases); - }); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run(t, builtin('length'), [TypeVec(3, TypeF32)], TypeF32, t.params, cases); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run(t, builtin('length'), [TypeVec(4, TypeF32)], TypeF32, t.params, cases); +}); - await run(t, builtin('length'), [TypeVec(2, TypeF32)], TypeF32, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('length'), [TypeF16], TypeF16, t.params, cases); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run(t, builtin('length'), [TypeVec(2, TypeF16)], TypeF16, t.params, cases); +}); - await run(t, builtin('length'), [TypeVec(3, TypeF32)], TypeF32, t.params, cases); - }); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run(t, builtin('length'), [TypeVec(3, TypeF16)], TypeF16, t.params, cases); +}); -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run(t, builtin('length'), [TypeVec(4, TypeF32)], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('length'), [TypeF16], TypeF16, t.params, cases); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run(t, builtin('length'), [TypeVec(2, TypeF16)], TypeF16, t.params, cases); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run(t, builtin('length'), [TypeVec(3, TypeF16)], TypeF16, t.params, cases); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run(t, builtin('length'), [TypeVec(4, TypeF16)], TypeF16, t.params, cases); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run(t, builtin('length'), [TypeVec(4, TypeF16)], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.cache.js new file mode 100644 index 00000000000..c71324eb1c3 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.cache.js @@ -0,0 +1,26 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { biasedRange, linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// log's accuracy is defined in three regions { [0, 0.5), [0.5, 2.0], (2.0, +∞] } +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [ + ...linearRange(FP[trait].constants().positive.min, 0.5, 20), + ...linearRange(0.5, 2.0, 20), + ...biasedRange(2.0, 2 ** 32, 1000), + ...FP[trait].scalarRange()], + + nonConst ? 'unfiltered' : 'finite', + FP[trait].logInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('log', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.spec.js index 25f18610867..b49df93f568 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log.spec.js @@ -1,85 +1,57 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'log' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn log(e: T ) -> T Returns the natural logarithm of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, fullF32Range, fullF16Range, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './log.cache.js'; export const g = makeTestGroup(GPUTest); -// log's accuracy is defined in three regions { [0, 0.5), [0.5, 2.0], (2.0, +∞] } -const f32_inputs = [ - ...linearRange(kValue.f32.positive.min, 0.5, 20), - ...linearRange(0.5, 2.0, 20), - ...biasedRange(2.0, 2 ** 32, 1000), - ...fullF32Range(), -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f16_inputs = [ - ...linearRange(kValue.f16.positive.min, 0.5, 20), - ...linearRange(0.5, 2.0, 20), - ...biasedRange(2.0, 2 ** 32, 1000), - ...fullF16Range(), -]; - -export const d = makeCaseCache('log', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.logInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.logInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.logInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.logInterval); - }, -}); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` f32 tests TODO(#792): Decide what the ground-truth is for these tests. [1] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('log'), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('log'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('log'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('log'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.cache.js new file mode 100644 index 00000000000..f12e8308173 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.cache.js @@ -0,0 +1,26 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { biasedRange, linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// log2's accuracy is defined in three regions { [0, 0.5), [0.5, 2.0], (2.0, +∞] } +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [ + ...linearRange(FP[trait].constants().positive.min, 0.5, 20), + ...linearRange(0.5, 2.0, 20), + ...biasedRange(2.0, 2 ** 32, 1000), + ...FP[trait].scalarRange()], + + nonConst ? 'unfiltered' : 'finite', + FP[trait].log2Interval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('log2', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.spec.js index e8ab356cf77..8fd0dfec1cf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/log2.spec.js @@ -1,85 +1,57 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'log2' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn log2(e: T ) -> T Returns the base-2 logarithm of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { biasedRange, fullF32Range, fullF16Range, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './log2.cache.js'; export const g = makeTestGroup(GPUTest); -// log2's accuracy is defined in three regions { [0, 0.5), [0.5, 2.0], (2.0, +∞] } -const f32_inputs = [ - ...linearRange(kValue.f32.positive.min, 0.5, 20), - ...linearRange(0.5, 2.0, 20), - ...biasedRange(2.0, 2 ** 32, 1000), - ...fullF32Range(), -]; +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -const f16_inputs = [ - ...linearRange(kValue.f16.positive.min, 0.5, 20), - ...linearRange(0.5, 2.0, 20), - ...biasedRange(2.0, 2 ** 32, 1000), - ...fullF16Range(), -]; - -export const d = makeCaseCache('log2', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'finite', FP.f32.log2Interval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(f32_inputs, 'unfiltered', FP.f32.log2Interval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'finite', FP.f16.log2Interval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(f16_inputs, 'unfiltered', FP.f16.log2Interval); - }, -}); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` f32 tests TODO(#792): Decide what the ground-truth is for these tests. [1] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('log2'), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('log2'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('log2'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('log2'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.cache.js new file mode 100644 index 00000000000..afb67586a38 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.cache.js @@ -0,0 +1,18 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarPairToIntervalCases( + FP[trait].scalarRange(), + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].maxInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('max', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.spec.js index e7e7250fe51..d5674b63b13 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/max.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'max' builtin function S is AbstractInt, i32, or u32 @@ -16,30 +16,31 @@ If one operand is a NaN, the other is returned. If both operands are NaNs, a NaN is returned. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { - i32, - TypeF32, + TypeAbstractFloat, TypeF16, + TypeF32, TypeI32, TypeU32, - u32, - TypeAbstractFloat, -} from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, sparseF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; + i32, + u32 } from +'../../../../../util/conversion.js'; + import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './max.cache.js'; /** Generate set of max test cases from list of interesting values */ -function generateTestCases(values, makeCase) { +function generateTestCases( +values, +makeCase) +{ const cases = new Array(); - values.forEach(e => { - values.forEach(f => { + values.forEach((e) => { + values.forEach((f) => { cases.push(makeCase(e, f)); }); }); @@ -48,104 +49,89 @@ function generateTestCases(values, makeCase) { export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('max', { - f32: () => { - return FP.f32.generateScalarPairToIntervalCases( - fullF32Range(), - fullF32Range(), - 'unfiltered', - FP.f32.maxInterval - ); - }, - f16: () => { - return FP.f16.generateScalarPairToIntervalCases( - fullF16Range(), - fullF16Range(), - 'unfiltered', - FP.f16.maxInterval - ); - }, - abstract: () => { - return FP.abstract.generateScalarPairToIntervalCases( - sparseF64Range(), - sparseF64Range(), - 'unfiltered', - FP.abstract.maxInterval - ); - }, +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`abstract int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const makeCase = (x, y) => { + return { input: [u32(x), u32(y)], expected: u32(Math.max(x, y)) }; + }; + + const test_values = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff]; + const cases = generateTestCases(test_values, makeCase); + + await run(t, builtin('max'), [TypeU32, TypeU32], TypeU32, t.params, cases); }); -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`abstract int tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const makeCase = (x, y) => { + return { input: [i32(x), i32(y)], expected: i32(Math.max(x, y)) }; + }; -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const makeCase = (x, y) => { - return { input: [u32(x), u32(y)], expected: u32(Math.max(x, y)) }; - }; + const test_values = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000]; + const cases = generateTestCases(test_values, makeCase); - const test_values = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff]; - const cases = generateTestCases(test_values, makeCase); + await run(t, builtin('max'), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); - await run(t, builtin('max'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run( + t, + abstractBuiltin('max'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const makeCase = (x, y) => { - return { input: [i32(x), i32(y)], expected: i32(Math.max(x, y)) }; - }; +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('max'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); - const test_values = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000]; - const cases = generateTestCases(test_values, makeCase); - - await run(t, builtin('max'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('max'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('max'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('max'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('max'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.cache.js new file mode 100644 index 00000000000..f77b544f3f6 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.cache.js @@ -0,0 +1,18 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarPairToIntervalCases( + FP[trait].scalarRange(), + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].minInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('min', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.spec.js index 814211697af..bf9116fa5ff 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/min.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'min' builtin function S is AbstractInt, i32, or u32 @@ -15,136 +15,122 @@ Returns e2 if e2 is less than e1, and e1 otherwise. If one operand is a NaN, the other is returned. If both operands are NaNs, a NaN is returned. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { - i32, - TypeF32, + TypeAbstractFloat, TypeF16, + TypeF32, TypeI32, TypeU32, - u32, - TypeAbstractFloat, -} from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, sparseF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; + i32, + u32 } from +'../../../../../util/conversion.js'; + import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './min.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('min', { - f32: () => { - return FP.f32.generateScalarPairToIntervalCases( - fullF32Range(), - fullF32Range(), - 'unfiltered', - FP.f32.minInterval - ); - }, - f16: () => { - return FP.f16.generateScalarPairToIntervalCases( - fullF16Range(), - fullF16Range(), - 'unfiltered', - FP.f16.minInterval - ); - }, - abstract: () => { - return FP.abstract.generateScalarPairToIntervalCases( - sparseF64Range(), - sparseF64Range(), - 'unfiltered', - FP.abstract.minInterval - ); - }, -}); - /** Generate set of min test cases from list of interesting values */ -function generateTestCases(values, makeCase) { +function generateTestCases( +values, +makeCase) +{ const cases = new Array(); - values.forEach(e => { - values.forEach(f => { + values.forEach((e) => { + values.forEach((f) => { cases.push(makeCase(e, f)); }); }); return cases; } -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`abstract int tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`abstract int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const makeCase = (x, y) => { - return { input: [u32(x), u32(y)], expected: u32(Math.min(x, y)) }; - }; +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const makeCase = (x, y) => { + return { input: [u32(x), u32(y)], expected: u32(Math.min(x, y)) }; + }; - const test_values = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff]; - const cases = generateTestCases(test_values, makeCase); + const test_values = [0, 1, 2, 0x70000000, 0x80000000, 0xffffffff]; + const cases = generateTestCases(test_values, makeCase); - await run(t, builtin('min'), [TypeU32, TypeU32], TypeU32, t.params, cases); - }); + await run(t, builtin('min'), [TypeU32, TypeU32], TypeU32, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const makeCase = (x, y) => { - return { input: [i32(x), i32(y)], expected: i32(Math.min(x, y)) }; - }; +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const makeCase = (x, y) => { + return { input: [i32(x), i32(y)], expected: i32(Math.min(x, y)) }; + }; - const test_values = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000]; - const cases = generateTestCases(test_values, makeCase); + const test_values = [-0x70000000, -2, -1, 0, 1, 2, 0x70000000]; + const cases = generateTestCases(test_values, makeCase); - await run(t, builtin('min'), [TypeI32, TypeI32], TypeI32, t.params, cases); - }); + await run(t, builtin('min'), [TypeI32, TypeI32], TypeI32, t.params, cases); +}); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('min'), - [TypeAbstractFloat, TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run( + t, + abstractBuiltin('min'), + [TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('min'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('min'), [TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('min'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('min'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.cache.js new file mode 100644 index 00000000000..88579af0ad5 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.cache.js @@ -0,0 +1,51 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract]_[non_]const +// abstract_non_const is empty and unused +const scalar_cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return FP[trait].generateScalarTripleToIntervalCases( + FP[trait].sparseScalarRange(), + FP[trait].sparseScalarRange(), + FP[trait].sparseScalarRange(), + nonConst ? 'unfiltered' : 'finite', + ...FP[trait].mixIntervals + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: [f32|f16]_vecN_scalar_[non_]const +// abstract_vecN_non_const is empty and unused +const vec_scalar_cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return FP[trait].generateVectorPairScalarToVectorComponentWiseCase( + FP[trait].sparseVectorRange(dim), + FP[trait].sparseVectorRange(dim), + FP[trait].sparseScalarRange(), + nonConst ? 'unfiltered' : 'finite', + ...FP[trait].mixIntervals + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('mix', { + ...scalar_cases, + ...vec_scalar_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.spec.js index 5f58060330b..7a6d93eaa6c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/mix.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'mix' builtin function S is AbstractFloat, f32, f16 @@ -14,263 +14,222 @@ T2 is vecN Returns the component-wise linear blend of e1 and e2, using scalar blending factor e3 for each component. Same as mix(e1,e2,T2(e3)). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeVec, TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - sparseF32Range, - sparseF16Range, - sparseVectorF32Range, - sparseVectorF16Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; -import { allInputSources, run } from '../../expression.js'; +import { TypeAbstractFloat, TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; +import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; -import { builtin } from './builtin.js'; +import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './mix.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_vecN_scalar_[non_]const -const f32_vec_scalar_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorPairScalarToVectorComponentWiseCase( - sparseVectorF32Range(n), - sparseVectorF32Range(n), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite', - ...FP.f32.mixIntervals - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_vecN_scalar_[non_]const -const f16_vec_scalar_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_scalar_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorPairScalarToVectorComponentWiseCase( - sparseVectorF16Range(n), - sparseVectorF16Range(n), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite', - ...FP.f16.mixIntervals - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('mix', { - f32_const: () => { - return FP.f32.generateScalarTripleToIntervalCases( - sparseF32Range(), - sparseF32Range(), - sparseF32Range(), - 'finite', - ...FP.f32.mixIntervals - ); - }, - f32_non_const: () => { - return FP.f32.generateScalarTripleToIntervalCases( - sparseF32Range(), - sparseF32Range(), - sparseF32Range(), - 'unfiltered', - ...FP.f32.mixIntervals - ); - }, - ...f32_vec_scalar_cases, - f16_const: () => { - return FP.f16.generateScalarTripleToIntervalCases( - sparseF16Range(), - sparseF16Range(), - sparseF16Range(), - 'finite', - ...FP.f16.mixIntervals - ); - }, - f16_non_const: () => { - return FP.f16.generateScalarTripleToIntervalCases( - sparseF16Range(), - sparseF16Range(), - sparseF16Range(), - 'unfiltered', - ...FP.f16.mixIntervals - ); - }, - ...f16_vec_scalar_cases, +g.test('abstract_float_matching'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract_float test with matching third param`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract_const'); + await run( + t, + abstractBuiltin('mix'), + [TypeAbstractFloat, TypeAbstractFloat, TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); }); -g.test('abstract_float_matching') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract_float test with matching third param`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('abstract_float_nonmatching_vec2'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract_float tests with two vec2 params and scalar third param`). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec2_scalar_const'); + await run( + t, + abstractBuiltin('mix'), + [TypeVec(2, TypeAbstractFloat), TypeVec(2, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(2, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_float_nonmatching_vec2') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract_float tests with two vec2 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('abstract_float_nonmatching_vec3'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract_float tests with two vec3 params and scalar third param`). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec3_scalar_const'); + await run( + t, + abstractBuiltin('mix'), + [TypeVec(3, TypeAbstractFloat), TypeVec(3, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(3, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_float_nonmatching_vec3') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract_float tests with two vec3 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('abstract_float_nonmatching_vec4'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract_float tests with two vec4 params and scalar third param`). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec4_scalar_const'); + await run( + t, + abstractBuiltin('mix'), + [TypeVec(4, TypeAbstractFloat), TypeVec(4, TypeAbstractFloat), TypeAbstractFloat], + TypeVec(4, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_float_nonmatching_vec4') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract_float tests with two vec4 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .unimplemented(); +g.test('f32_matching'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 test with matching third param`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('mix'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); +}); -g.test('f32_matching') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 test with matching third param`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('mix'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); - }); +g.test('f32_nonmatching_vec2'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests with two vec2 params and scalar third param`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_scalar_const' : 'f32_vec2_scalar_non_const' + ); + await run( + t, + builtin('mix'), + [TypeVec(2, TypeF32), TypeVec(2, TypeF32), TypeF32], + TypeVec(2, TypeF32), + t.params, + cases + ); +}); -g.test('f32_nonmatching_vec2') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests with two vec2 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_scalar_const' : 'f32_vec2_scalar_non_const' - ); +g.test('f32_nonmatching_vec3'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests with two vec3 params and scalar third param`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_scalar_const' : 'f32_vec3_scalar_non_const' + ); + await run( + t, + builtin('mix'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32), TypeF32], + TypeVec(3, TypeF32), + t.params, + cases + ); +}); - await run( - t, - builtin('mix'), - [TypeVec(2, TypeF32), TypeVec(2, TypeF32), TypeF32], - TypeVec(2, TypeF32), - t.params, - cases - ); - }); +g.test('f32_nonmatching_vec4'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests with two vec4 params and scalar third param`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_scalar_const' : 'f32_vec4_scalar_non_const' + ); + await run( + t, + builtin('mix'), + [TypeVec(4, TypeF32), TypeVec(4, TypeF32), TypeF32], + TypeVec(4, TypeF32), + t.params, + cases + ); +}); -g.test('f32_nonmatching_vec3') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests with two vec3 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_scalar_const' : 'f32_vec3_scalar_non_const' - ); +g.test('f16_matching'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 test with matching third param`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('mix'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); +}); - await run( - t, - builtin('mix'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32), TypeF32], - TypeVec(3, TypeF32), - t.params, - cases - ); - }); +g.test('f16_nonmatching_vec2'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests with two vec2 params and scalar third param`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_scalar_const' : 'f16_vec2_scalar_non_const' + ); + await run( + t, + builtin('mix'), + [TypeVec(2, TypeF16), TypeVec(2, TypeF16), TypeF16], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); -g.test('f32_nonmatching_vec4') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests with two vec4 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_scalar_const' : 'f32_vec4_scalar_non_const' - ); +g.test('f16_nonmatching_vec3'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests with two vec3 params and scalar third param`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_scalar_const' : 'f16_vec3_scalar_non_const' + ); + await run( + t, + builtin('mix'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16), TypeF16], + TypeVec(3, TypeF16), + t.params, + cases + ); +}); - await run( - t, - builtin('mix'), - [TypeVec(4, TypeF32), TypeVec(4, TypeF32), TypeF32], - TypeVec(4, TypeF32), - t.params, - cases - ); - }); - -g.test('f16_matching') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 test with matching third param`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('mix'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); - }); - -g.test('f16_nonmatching_vec2') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests with two vec2 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_scalar_const' : 'f16_vec2_scalar_non_const' - ); - - await run( - t, - builtin('mix'), - [TypeVec(2, TypeF16), TypeVec(2, TypeF16), TypeF16], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_nonmatching_vec3') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests with two vec3 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_scalar_const' : 'f16_vec3_scalar_non_const' - ); - - await run( - t, - builtin('mix'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16), TypeF16], - TypeVec(3, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_nonmatching_vec4') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests with two vec4 params and scalar third param`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_scalar_const' : 'f16_vec4_scalar_non_const' - ); - - await run( - t, - builtin('mix'), - [TypeVec(4, TypeF16), TypeVec(4, TypeF16), TypeF16], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); +g.test('f16_nonmatching_vec4'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests with two vec4 params and scalar third param`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_scalar_const' : 'f16_vec4_scalar_non_const' + ); + await run( + t, + builtin('mix'), + [TypeVec(4, TypeF16), TypeVec(4, TypeF16), TypeF16], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.cache.js new file mode 100644 index 00000000000..63f90ec346b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.cache.js @@ -0,0 +1,75 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { toVector } from '../../../../../util/conversion.js';import { FP } from '../../../../../util/floating_point.js'; +import { makeCaseCache } from '../../case_cache.js'; + +/** @returns a fract Case for a scalar vector input */ +function makeScalarCaseFract(kind, n) { + const fp = FP[kind]; + n = fp.quantize(n); + const result = fp.modfInterval(n).fract; + + return { input: fp.scalarBuilder(n), expected: result }; +} + +/** @returns a whole Case for a scalar vector input */ +function makeScalarCaseWhole(kind, n) { + const fp = FP[kind]; + n = fp.quantize(n); + const result = fp.modfInterval(n).whole; + + return { input: fp.scalarBuilder(n), expected: result }; +} + +/** @returns a fract Case for a given vector input */ +function makeVectorCaseFract(kind, v) { + const fp = FP[kind]; + v = v.map(fp.quantize); + const fs = v.map((e) => { + return fp.modfInterval(e).fract; + }); + + return { input: toVector(v, fp.scalarBuilder), expected: fs }; +} + +/** @returns a whole Case for a given vector input */ +function makeVectorCaseWhole(kind, v) { + const fp = FP[kind]; + v = v.map(fp.quantize); + const ws = v.map((e) => { + return fp.modfInterval(e).whole; + }); + + return { input: toVector(v, fp.scalarBuilder), expected: ws }; +} + +// Cases: [f32|f16|abstract]_[fract|whole] +const scalar_cases = ['f32', 'f16', 'abstract']. +flatMap((kind) => +['whole', 'fract'].map((portion) => ({ + [`${kind}_${portion}`]: () => { + const makeCase = portion === 'whole' ? makeScalarCaseWhole : makeScalarCaseFract; + return FP[kind].scalarRange().map(makeCase.bind(null, kind)); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: [f32|f16|abstract]_vecN_[fract|whole] +const vec_cases = ['f32', 'f16', 'abstract']. +flatMap((kind) => +[2, 3, 4].flatMap((n) => +['whole', 'fract'].map((portion) => ({ + [`${kind}_vec${n}_${portion}`]: () => { + const makeCase = portion === 'whole' ? makeVectorCaseWhole : makeVectorCaseFract; + return FP[kind].vectorRange(n).map(makeCase.bind(null, kind)); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('modf', { + ...scalar_cases, + ...vec_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.spec.js index 190c02ec86e..2c88c8bb9cb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/modf.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'modf' builtin function T is f32 or f16 or AbstractFloat @@ -16,155 +16,64 @@ Splits the components of |e| into fractional and whole number parts. The |i|'th component of the whole and fractional parts equal the whole and fractional parts of modf(e[i]). Returns the result_struct for the given type. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { - toVector, - TypeAbstractFloat, - TypeF16, - TypeF32, - TypeVec, -} from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - fullF16Range, - fullF32Range, - fullF64Range, - vectorF16Range, - vectorF32Range, - vectorF64Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeAbstractFloat, TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { abstractFloatShaderBuilder, allInputSources, basicExpressionBuilder, onlyConstInputSource, - run, -} from '../../expression.js'; + run } from + +'../../expression.js'; + +import { d } from './modf.cache.js'; export const g = makeTestGroup(GPUTest); /** @returns an ShaderBuilder that evaluates modf and returns .whole from the result structure */ function wholeBuilder() { - return basicExpressionBuilder(value => `modf(${value}).whole`); + return basicExpressionBuilder((value) => `modf(${value}).whole`); } /** @returns an ShaderBuilder that evaluates modf and returns .fract from the result structure */ function fractBuilder() { - return basicExpressionBuilder(value => `modf(${value}).fract`); + return basicExpressionBuilder((value) => `modf(${value}).fract`); } /** @returns an ShaderBuilder that evaluates modf and returns .whole from the result structure for AbstractFloats */ function abstractWholeBuilder() { - return abstractFloatShaderBuilder(value => `modf(${value}).whole`); + return abstractFloatShaderBuilder((value) => `modf(${value}).whole`); } /** @returns an ShaderBuilder that evaluates modf and returns .fract from the result structure for AbstractFloats */ function abstractFractBuilder() { - return abstractFloatShaderBuilder(value => `modf(${value}).fract`); + return abstractFloatShaderBuilder((value) => `modf(${value}).fract`); } -/** @returns a fract Case for a scalar vector input */ -function makeScalarCaseFract(kind, n) { - const fp = FP[kind]; - n = fp.quantize(n); - const result = fp.modfInterval(n).fract; +g.test('f32_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` +T is f32 - return { input: fp.scalarBuilder(n), expected: result }; +struct __modf_result_f32 { + fract : f32, // fractional part + whole : f32 // whole part } - -/** @returns a whole Case for a scalar vector input */ -function makeScalarCaseWhole(kind, n) { - const fp = FP[kind]; - n = fp.quantize(n); - const result = fp.modfInterval(n).whole; - - return { input: fp.scalarBuilder(n), expected: result }; -} - -/** @returns a fract Case for a given vector input */ -function makeVectorCaseFract(kind, v) { - const fp = FP[kind]; - v = v.map(fp.quantize); - const fs = v.map(e => { - return fp.modfInterval(e).fract; - }); - - return { input: toVector(v, fp.scalarBuilder), expected: fs }; -} - -/** @returns a whole Case for a given vector input */ -function makeVectorCaseWhole(kind, v) { - const fp = FP[kind]; - v = v.map(fp.quantize); - const ws = v.map(e => { - return fp.modfInterval(e).whole; - }); - - return { input: toVector(v, fp.scalarBuilder), expected: ws }; -} - -const scalar_range = { - f32: fullF32Range(), - f16: fullF16Range(), - abstract: fullF64Range(), -}; - -const vector_range = { - f32: { - 2: vectorF32Range(2), - 3: vectorF32Range(3), - 4: vectorF32Range(4), - }, - f16: { - 2: vectorF16Range(2), - 3: vectorF16Range(3), - 4: vectorF16Range(4), - }, - abstract: { - 2: vectorF64Range(2), - 3: vectorF64Range(3), - 4: vectorF64Range(4), - }, -}; - -// Cases: [f32|f16|abstract]_[fract|whole] -const scalar_cases = ['f32', 'f16', 'abstract'] - .flatMap(kind => - ['whole', 'fract'].map(portion => ({ - [`${kind}_${portion}`]: () => { - const makeCase = portion === 'whole' ? makeScalarCaseWhole : makeScalarCaseFract; - return scalar_range[kind].map(makeCase.bind(null, kind)); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: [f32|f16|abstract]_vecN_[fract|whole] -const vec_cases = ['f32', 'f16', 'abstract'] - .flatMap(kind => - [2, 3, 4].flatMap(n => - ['whole', 'fract'].map(portion => ({ - [`${kind}_vec${n}_${portion}`]: () => { - const makeCase = portion === 'whole' ? makeVectorCaseWhole : makeVectorCaseFract; - return vector_range[kind][n].map(makeCase.bind(null, kind)); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('modf', { - ...scalar_cases, - ...vec_cases, +` +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_fract'); + await run(t, fractBuilder(), [TypeF32], TypeF32, t.params, cases); }); -g.test('f32_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is f32 struct __modf_result_f32 { @@ -172,35 +81,17 @@ struct __modf_result_f32 { whole : f32 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_fract'); - await run(t, fractBuilder(), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_whole'); + await run(t, wholeBuilder(), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` -T is f32 - -struct __modf_result_f32 { - fract : f32, // fractional part - whole : f32 // whole part -} -` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_whole'); - await run(t, wholeBuilder(), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f32_vec2_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec2_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __modf_result_vec2_f32 { @@ -208,17 +99,17 @@ struct __modf_result_vec2_f32 { whole : vec2 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec2_fract'); - await run(t, fractBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec2_fract'); + await run(t, fractBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); +}); -g.test('f32_vec2_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec2_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __modf_result_vec2_f32 { @@ -226,17 +117,17 @@ struct __modf_result_vec2_f32 { whole : vec2 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec2_whole'); - await run(t, wholeBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec2_whole'); + await run(t, wholeBuilder(), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); +}); -g.test('f32_vec3_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec3_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __modf_result_vec3_f32 { @@ -244,17 +135,17 @@ struct __modf_result_vec3_f32 { whole : vec3 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec3_fract'); - await run(t, fractBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec3_fract'); + await run(t, fractBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); +}); -g.test('f32_vec3_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec3_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __modf_result_vec3_f32 { @@ -262,17 +153,17 @@ struct __modf_result_vec3_f32 { whole : vec3 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec3_whole'); - await run(t, wholeBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec3_whole'); + await run(t, wholeBuilder(), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); +}); -g.test('f32_vec4_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec4_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __modf_result_vec4_f32 { @@ -280,17 +171,17 @@ struct __modf_result_vec4_f32 { whole : vec4 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec4_fract'); - await run(t, fractBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec4_fract'); + await run(t, fractBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); +}); -g.test('f32_vec4_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32_vec4_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __modf_result_vec4_f32 { @@ -298,17 +189,17 @@ struct __modf_result_vec4_f32 { whole : vec4 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get('f32_vec4_whole'); - await run(t, wholeBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get('f32_vec4_whole'); + await run(t, wholeBuilder(), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); +}); -g.test('f16_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is f16 struct __modf_result_f16 { @@ -316,20 +207,20 @@ struct __modf_result_f16 { whole : f16 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_fract'); - await run(t, fractBuilder(), [TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_fract'); + await run(t, fractBuilder(), [TypeF16], TypeF16, t.params, cases); +}); -g.test('f16_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is f16 struct __modf_result_f16 { @@ -337,20 +228,20 @@ struct __modf_result_f16 { whole : f16 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_whole'); - await run(t, wholeBuilder(), [TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_whole'); + await run(t, wholeBuilder(), [TypeF16], TypeF16, t.params, cases); +}); -g.test('f16_vec2_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec2_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __modf_result_vec2_f16 { @@ -358,20 +249,20 @@ struct __modf_result_vec2_f16 { whole : vec2 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_vec2_fract'); - await run(t, fractBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_vec2_fract'); + await run(t, fractBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); +}); -g.test('f16_vec2_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec2_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __modf_result_vec2_f16 { @@ -379,20 +270,20 @@ struct __modf_result_vec2_f16 { whole : vec2 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_vec2_whole'); - await run(t, wholeBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_vec2_whole'); + await run(t, wholeBuilder(), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); +}); -g.test('f16_vec3_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec3_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __modf_result_vec3_f16 { @@ -400,20 +291,20 @@ struct __modf_result_vec3_f16 { whole : vec3 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_vec3_fract'); - await run(t, fractBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_vec3_fract'); + await run(t, fractBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); +}); -g.test('f16_vec3_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec3_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __modf_result_vec3_f16 { @@ -421,20 +312,20 @@ struct __modf_result_vec3_f16 { whole : vec3 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_vec3_whole'); - await run(t, wholeBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_vec3_whole'); + await run(t, wholeBuilder(), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); +}); -g.test('f16_vec4_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec4_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __modf_result_vec4_f16 { @@ -442,20 +333,20 @@ struct __modf_result_vec4_f16 { whole : vec4 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_vec4_fract'); - await run(t, fractBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_vec4_fract'); + await run(t, fractBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); +}); -g.test('f16_vec4_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f16_vec4_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __modf_result_vec4_f16 { @@ -463,20 +354,20 @@ struct __modf_result_vec4_f16 { whole : vec4 // whole part } ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16_vec4_whole'); - await run(t, wholeBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16_vec4_whole'); + await run(t, wholeBuilder(), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); +}); -g.test('abstract_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is AbstractFloat struct __modf_result_abstract { @@ -484,17 +375,17 @@ struct __modf_result_abstract { whole : AbstractFloat // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_fract'); - await run(t, abstractFractBuilder(), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_fract'); + await run(t, abstractFractBuilder(), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); +}); -g.test('abstract_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is AbstractFloat struct __modf_result_abstract { @@ -502,17 +393,17 @@ struct __modf_result_abstract { whole : AbstractFloat // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_whole'); - await run(t, abstractWholeBuilder(), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_whole'); + await run(t, abstractWholeBuilder(), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); +}); -g.test('abstract_vec2_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_vec2_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __modf_result_vec2_abstract { @@ -520,24 +411,24 @@ struct __modf_result_vec2_abstract { whole : vec2 // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_vec2_fract'); - await run( - t, - abstractFractBuilder(), - [TypeVec(2, TypeAbstractFloat)], - TypeVec(2, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec2_fract'); + await run( + t, + abstractFractBuilder(), + [TypeVec(2, TypeAbstractFloat)], + TypeVec(2, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_vec2_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_vec2_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec2 struct __modf_result_vec2_abstract { @@ -545,24 +436,24 @@ struct __modf_result_vec2_abstract { whole : vec2 // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_vec2_whole'); - await run( - t, - abstractWholeBuilder(), - [TypeVec(2, TypeAbstractFloat)], - TypeVec(2, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec2_whole'); + await run( + t, + abstractWholeBuilder(), + [TypeVec(2, TypeAbstractFloat)], + TypeVec(2, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_vec3_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_vec3_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __modf_result_vec3_abstract { @@ -570,24 +461,24 @@ struct __modf_result_vec3_abstract { whole : vec3 // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_vec3_fract'); - await run( - t, - abstractFractBuilder(), - [TypeVec(3, TypeAbstractFloat)], - TypeVec(3, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec3_fract'); + await run( + t, + abstractFractBuilder(), + [TypeVec(3, TypeAbstractFloat)], + TypeVec(3, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_vec3_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_vec3_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec3 struct __modf_result_vec3_abstract { @@ -595,24 +486,24 @@ struct __modf_result_vec3_abstract { whole : vec3 // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_vec3_whole'); - await run( - t, - abstractWholeBuilder(), - [TypeVec(3, TypeAbstractFloat)], - TypeVec(3, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec3_whole'); + await run( + t, + abstractWholeBuilder(), + [TypeVec(3, TypeAbstractFloat)], + TypeVec(3, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_vec4_fract') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_vec4_fract'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __modf_result_vec4_abstract { @@ -620,24 +511,24 @@ struct __modf_result_vec4_abstract { whole : vec4 // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_vec4_fract'); - await run( - t, - abstractFractBuilder(), - [TypeVec(4, TypeAbstractFloat)], - TypeVec(4, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec4_fract'); + await run( + t, + abstractFractBuilder(), + [TypeVec(4, TypeAbstractFloat)], + TypeVec(4, TypeAbstractFloat), + t.params, + cases + ); +}); -g.test('abstract_vec4_whole') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('abstract_vec4_whole'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` T is vec4 struct __modf_result_vec4_abstract { @@ -645,16 +536,16 @@ struct __modf_result_vec4_abstract { whole : vec4 // whole part } ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract_vec4_whole'); - await run( - t, - abstractWholeBuilder(), - [TypeVec(4, TypeAbstractFloat)], - TypeVec(4, TypeAbstractFloat), - t.params, - cases - ); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract_vec4_whole'); + await run( + t, + abstractWholeBuilder(), + [TypeVec(4, TypeAbstractFloat)], + TypeVec(4, TypeAbstractFloat), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.cache.js new file mode 100644 index 00000000000..decd583a70f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_vecN_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateVectorToVectorCases( + FP[trait].vectorRange(dim), + nonConst ? 'unfiltered' : 'finite', + FP[trait].normalizeInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('normalize', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.spec.js index 418e7065856..ce13fea99b8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/normalize.spec.js @@ -1,142 +1,100 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'normalize' builtin function T is AbstractFloat, f32, or f16 @const fn normalize(e: vecN ) -> vecN Returns a unit vector in the same direction as e. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { vectorF32Range, vectorF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './normalize.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_vecN_[non_]const -const f32_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorToVectorCases( - vectorF32Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f32.normalizeInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -// Cases: f16_vecN_[non_]const -const f16_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorToVectorCases( - vectorF16Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f16.normalizeInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('normalize', { - ...f32_vec_cases, - ...f16_vec_cases, +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run(t, builtin('normalize'), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run(t, builtin('normalize'), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run(t, builtin('normalize'), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); +}); - await run(t, builtin('normalize'), [TypeVec(2, TypeF32)], TypeVec(2, TypeF32), t.params, cases); - }); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run(t, builtin('normalize'), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run(t, builtin('normalize'), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); +}); - await run(t, builtin('normalize'), [TypeVec(3, TypeF32)], TypeVec(3, TypeF32), t.params, cases); - }); - -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run(t, builtin('normalize'), [TypeVec(4, TypeF32)], TypeVec(4, TypeF32), t.params, cases); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run(t, builtin('normalize'), [TypeVec(2, TypeF16)], TypeVec(2, TypeF16), t.params, cases); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run(t, builtin('normalize'), [TypeVec(3, TypeF16)], TypeVec(3, TypeF16), t.params, cases); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run(t, builtin('normalize'), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run(t, builtin('normalize'), [TypeVec(4, TypeF16)], TypeVec(4, TypeF16), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.cache.js new file mode 100644 index 00000000000..ca204e03b6d --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.cache.js @@ -0,0 +1,55 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf, skipUndefined } from '../../../../../util/compare.js';import { f32, pack2x16float, u32, vec2 } from '../../../../../util/conversion.js';import { cartesianProduct, quantizeToF32, scalarF32Range } from '../../../../../util/math.js'; + +import { makeCaseCache } from '../../case_cache.js'; + +// pack2x16float has somewhat unusual behaviour, specifically around how it is +// supposed to behave when values go OOB and when they are considered to have +// gone OOB, so has its own bespoke implementation. + +/** + * @returns a Case for `pack2x16float` + * @param param0 first param for the case + * @param param1 second param for the case + * @param filter_undefined should inputs that cause an undefined expectation be + * filtered out, needed for const-eval + */ +function makeCase(param0, param1, filter_undefined) { + param0 = quantizeToF32(param0); + param1 = quantizeToF32(param1); + + const results = pack2x16float(param0, param1); + if (filter_undefined && results.some((r) => r === undefined)) { + return undefined; + } + + return { + input: [vec2(f32(param0), f32(param1))], + expected: anyOf( + ...results.map((r) => r === undefined ? skipUndefined(undefined) : skipUndefined(u32(r))) + ) + }; +} + +/** + * @returns an array of Cases for `pack2x16float` + * @param param0s array of inputs to try for the first param + * @param param1s array of inputs to try for the second param + * @param filter_undefined should inputs that cause an undefined expectation be + * filtered out, needed for const-eval + */ +function generateCases(param0s, param1s, filter_undefined) { + return cartesianProduct(param0s, param1s). + map((e) => makeCase(e[0], e[1], filter_undefined)). + filter((c) => c !== undefined); +} + +export const d = makeCaseCache('pack2x16float', { + f32_const: () => { + return generateCases(scalarF32Range(), scalarF32Range(), true); + }, + f32_non_const: () => { + return generateCases(scalarF32Range(), scalarF32Range(), false); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.spec.js index 591a78eed24..317966986b8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16float.spec.js @@ -1,89 +1,28 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Converts two floating point values to half-precision floating point numbers, and then combines them into one u32 value. Component e[i] of the input is converted to a IEEE-754 binary16 value, which is then placed in bits 16 × i through 16 × i + 15 of the result. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { anyOf, skipUndefined } from '../../../../../util/compare.js'; -import { - f32, - pack2x16float, - TypeF32, - TypeU32, - TypeVec, - u32, - vec2, -} from '../../../../../util/conversion.js'; -import { cartesianProduct, fullF32Range, quantizeToF32 } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './pack2x16float.cache.js'; export const g = makeTestGroup(GPUTest); -// pack2x16float has somewhat unusual behaviour, specifically around how it is -// supposed to behave when values go OOB and when they are considered to have -// gone OOB, so has its own bespoke implementation. - -/** - * @returns a Case for `pack2x16float` - * @param param0 first param for the case - * @param param1 second param for the case - * @param filter_undefined should inputs that cause an undefined expectation be - * filtered out, needed for const-eval - */ -function makeCase(param0, param1, filter_undefined) { - param0 = quantizeToF32(param0); - param1 = quantizeToF32(param1); - - const results = pack2x16float(param0, param1); - if (filter_undefined && results.some(r => r === undefined)) { - return undefined; - } - - return { - input: [vec2(f32(param0), f32(param1))], - expected: anyOf( - ...results.map(r => (r === undefined ? skipUndefined(undefined) : skipUndefined(u32(r)))) - ), - }; -} - -/** - * @returns an array of Cases for `pack2x16float` - * @param param0s array of inputs to try for the first param - * @param param1s array of inputs to try for the second param - * @param filter_undefined should inputs that cause an undefined expectation be - * filtered out, needed for const-eval - */ -function generateCases(param0s, param1s, filter_undefined) { - return cartesianProduct(param0s, param1s) - .map(e => makeCase(e[0], e[1], filter_undefined)) - .filter(c => c !== undefined); -} - -export const d = makeCaseCache('pack2x16float', { - f32_const: () => { - return generateCases(fullF32Range(), fullF32Range(), true); - }, - f32_non_const: () => { - return generateCases(fullF32Range(), fullF32Range(), false); - }, -}); - -g.test('pack') - .specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions') - .desc( - ` +g.test('pack'). +specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions'). +desc( + ` @const fn pack2x16float(e: vec2) -> u32 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('pack2x16float'), [TypeVec(2, TypeF32)], TypeU32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('pack2x16float'), [TypeVec(2, TypeF32)], TypeU32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16snorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16snorm.spec.js index 7f6b72bb027..eb73eb4cb38 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16snorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16snorm.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Converts two normalized floating point values to 16-bit signed integers, and then combines them into one u32 value. Component e[i] of the input is converted to a 16-bit twos complement integer value ⌊ 0.5 + 32767 × min(1, max(-1, e[i])) ⌋ which is then placed in bits 16 × i through 16 × i + 15 of the result. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { kValue } from '../../../../../util/constants.js'; import { @@ -16,38 +15,42 @@ import { TypeU32, TypeVec, u32, - vec2, -} from '../../../../../util/conversion.js'; + vec2 } from +'../../../../../util/conversion.js'; import { quantizeToF32, vectorF32Range } from '../../../../../util/math.js'; + import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('pack') - .specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions') - .desc( - ` +g.test('pack'). +specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions'). +desc( + ` @const fn pack2x16snorm(e: vec2) -> u32 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const makeCase = (x, y) => { - x = quantizeToF32(x); - y = quantizeToF32(y); - return { input: [vec2(f32(x), f32(y))], expected: u32(pack2x16snorm(x, y)) }; - }; +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const makeCase = (x, y) => { + x = quantizeToF32(x); + y = quantizeToF32(y); + return { input: [vec2(f32(x), f32(y))], expected: u32(pack2x16snorm(x, y)) }; + }; - // Returns a value normalized to [-1, 1]. - const normalizeF32 = n => { - return n / kValue.f32.positive.max; - }; + // Returns a value normalized to [-1, 1]. + const normalizeF32 = (n) => { + return n / kValue.f32.positive.max; + }; - const cases = vectorF32Range(2).flatMap(v => { - return [makeCase(...v), makeCase(...v.map(normalizeF32))]; - }); + const cases = vectorF32Range(2).flatMap((v) => { + return [ + makeCase(...v), + makeCase(...v.map(normalizeF32))]; - await run(t, builtin('pack2x16snorm'), [TypeVec(2, TypeF32)], TypeU32, t.params, cases); }); + + await run(t, builtin('pack2x16snorm'), [TypeVec(2, TypeF32)], TypeU32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16unorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16unorm.spec.js index 5819c25618b..2648353ada8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16unorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack2x16unorm.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Converts two normalized floating point values to 16-bit unsigned integers, and then combines them into one u32 value. Component e[i] of the input is converted to a 16-bit unsigned integer value ⌊ 0.5 + 65535 × min(1, max(0, e[i])) ⌋ which is then placed in bits 16 × i through 16 × i + 15 of the result. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { kValue } from '../../../../../util/constants.js'; import { @@ -16,38 +15,42 @@ import { TypeU32, TypeVec, u32, - vec2, -} from '../../../../../util/conversion.js'; + vec2 } from +'../../../../../util/conversion.js'; import { quantizeToF32, vectorF32Range } from '../../../../../util/math.js'; + import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('pack') - .specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions') - .desc( - ` +g.test('pack'). +specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions'). +desc( + ` @const fn pack2x16unorm(e: vec2) -> u32 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const makeCase = (x, y) => { - x = quantizeToF32(x); - y = quantizeToF32(y); - return { input: [vec2(f32(x), f32(y))], expected: u32(pack2x16unorm(x, y)) }; - }; +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const makeCase = (x, y) => { + x = quantizeToF32(x); + y = quantizeToF32(y); + return { input: [vec2(f32(x), f32(y))], expected: u32(pack2x16unorm(x, y)) }; + }; - // Returns a value normalized to [0, 1]. - const normalizeF32 = n => { - return n > 0 ? n / kValue.f32.positive.max : n / kValue.f32.negative.min; - }; + // Returns a value normalized to [0, 1]. + const normalizeF32 = (n) => { + return n > 0 ? n / kValue.f32.positive.max : n / kValue.f32.negative.min; + }; - const cases = vectorF32Range(2).flatMap(v => { - return [makeCase(...v), makeCase(...v.map(normalizeF32))]; - }); + const cases = vectorF32Range(2).flatMap((v) => { + return [ + makeCase(...v), + makeCase(...v.map(normalizeF32))]; - await run(t, builtin('pack2x16unorm'), [TypeVec(2, TypeF32)], TypeU32, t.params, cases); }); + + await run(t, builtin('pack2x16unorm'), [TypeVec(2, TypeF32)], TypeU32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8snorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8snorm.spec.js index f2696b8d6fe..6668427241c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8snorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8snorm.spec.js @@ -1,57 +1,61 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Converts four normalized floating point values to 8-bit signed integers, and then combines them into one u32 value. Component e[i] of the input is converted to an 8-bit twos complement integer value ⌊ 0.5 + 127 × min(1, max(-1, e[i])) ⌋ which is then placed in bits 8 × i through 8 × i + 7 of the result. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { kValue } from '../../../../../util/constants.js'; import { f32, pack4x8snorm, + TypeF32, TypeU32, TypeVec, u32, - vec4, -} from '../../../../../util/conversion.js'; + vec4 } from +'../../../../../util/conversion.js'; import { quantizeToF32, vectorF32Range } from '../../../../../util/math.js'; + import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('pack') - .specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions') - .desc( - ` +g.test('pack'). +specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions'). +desc( + ` @const fn pack4x8snorm(e: vec4) -> u32 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const makeCase = vals => { - const vals_f32 = new Array(4); - for (const idx in vals) { - vals[idx] = quantizeToF32(vals[idx]); - vals_f32[idx] = f32(vals[idx]); - } +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const makeCase = (vals) => { + const vals_f32 = new Array(4); + for (const idx in vals) { + vals[idx] = quantizeToF32(vals[idx]); + vals_f32[idx] = f32(vals[idx]); + } - return { input: [vec4(...vals_f32)], expected: u32(pack4x8snorm(...vals)) }; - }; + return { input: [vec4(...vals_f32)], expected: u32(pack4x8snorm(...vals)) }; + }; - // Returns a value normalized to [-1, 1]. - const normalizeF32 = n => { - return n / kValue.f32.positive.max; - }; + // Returns a value normalized to [-1, 1]. + const normalizeF32 = (n) => { + return n / kValue.f32.positive.max; + }; - const cases = vectorF32Range(4).flatMap(v => { - return [makeCase(v), makeCase(v.map(normalizeF32))]; - }); + const cases = vectorF32Range(4).flatMap((v) => { + return [ + makeCase(v), + makeCase(v.map(normalizeF32))]; - await run(t, builtin('pack4x8snorm'), [TypeVec(4, TypeF32)], TypeU32, t.params, cases); }); + + await run(t, builtin('pack4x8snorm'), [TypeVec(4, TypeF32)], TypeU32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8unorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8unorm.spec.js index c12cf779445..8c23e47719b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8unorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pack4x8unorm.spec.js @@ -1,57 +1,61 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Converts four normalized floating point values to 8-bit unsigned integers, and then combines them into one u32 value. Component e[i] of the input is converted to an 8-bit unsigned integer value ⌊ 0.5 + 255 × min(1, max(0, e[i])) ⌋ which is then placed in bits 8 × i through 8 × i + 7 of the result. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { kValue } from '../../../../../util/constants.js'; import { f32, pack4x8unorm, + TypeF32, TypeU32, TypeVec, u32, - vec4, -} from '../../../../../util/conversion.js'; + vec4 } from +'../../../../../util/conversion.js'; import { quantizeToF32, vectorF32Range } from '../../../../../util/math.js'; + import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('pack') - .specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions') - .desc( - ` +g.test('pack'). +specURL('https://www.w3.org/TR/WGSL/#pack-builtin-functions'). +desc( + ` @const fn pack4x8unorm(e: vec4) -> u32 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const makeCase = vals => { - const vals_f32 = new Array(4); - for (const idx in vals) { - vals[idx] = quantizeToF32(vals[idx]); - vals_f32[idx] = f32(vals[idx]); - } +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const makeCase = (vals) => { + const vals_f32 = new Array(4); + for (const idx in vals) { + vals[idx] = quantizeToF32(vals[idx]); + vals_f32[idx] = f32(vals[idx]); + } - return { input: [vec4(...vals_f32)], expected: u32(pack4x8unorm(...vals)) }; - }; + return { input: [vec4(...vals_f32)], expected: u32(pack4x8unorm(...vals)) }; + }; - // Returns a value normalized to [0, 1]. - const normalizeF32 = n => { - return n > 0 ? n / kValue.f32.positive.max : n / kValue.f32.negative.min; - }; + // Returns a value normalized to [0, 1]. + const normalizeF32 = (n) => { + return n > 0 ? n / kValue.f32.positive.max : n / kValue.f32.negative.min; + }; - const cases = vectorF32Range(4).flatMap(v => { - return [makeCase(v), makeCase(v.map(normalizeF32))]; - }); + const cases = vectorF32Range(4).flatMap((v) => { + return [ + makeCase(v), + makeCase(v.map(normalizeF32))]; - await run(t, builtin('pack4x8unorm'), [TypeVec(4, TypeF32)], TypeU32, t.params, cases); }); + + await run(t, builtin('pack4x8unorm'), [TypeVec(4, TypeF32)], TypeU32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.cache.js new file mode 100644 index 00000000000..b166e35b630 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarPairToIntervalCases( + FP[trait].scalarRange(), + FP[trait].scalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].powInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('pow', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.spec.js index 29ebde32908..3b677b9cb13 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/pow.spec.js @@ -1,83 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'pow' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn pow(e1: T ,e2: T ) -> T Returns e1 raised to the power e2. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './pow.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('pow', { - f32_const: () => { - return FP.f32.generateScalarPairToIntervalCases( - fullF32Range(), - fullF32Range(), - 'finite', - FP.f32.powInterval - ); - }, - f32_non_const: () => { - return FP.f32.generateScalarPairToIntervalCases( - fullF32Range(), - fullF32Range(), - 'unfiltered', - FP.f32.powInterval - ); - }, - f16_const: () => { - return FP.f16.generateScalarPairToIntervalCases( - fullF16Range(), - fullF16Range(), - 'finite', - FP.f16.powInterval - ); - }, - f16_non_const: () => { - return FP.f16.generateScalarPairToIntervalCases( - fullF16Range(), - fullF16Range(), - 'unfiltered', - FP.f16.powInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('pow'), [TypeF32, TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('pow'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('pow'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('pow'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.cache.js new file mode 100644 index 00000000000..1613f451434 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.cache.js @@ -0,0 +1,41 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../../util/constants.js';import { FP } from '../../../../../util/floating_point.js';import { scalarF16Range, scalarF32Range } from '../../../../../util/math.js'; +import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('quantizeToF16', { + f32_const: () => { + return FP.f32.generateScalarToIntervalCases( + [ + kValue.f16.negative.min, + kValue.f16.negative.max, + kValue.f16.negative.subnormal.min, + kValue.f16.negative.subnormal.max, + kValue.f16.positive.subnormal.min, + kValue.f16.positive.subnormal.max, + kValue.f16.positive.min, + kValue.f16.positive.max, + ...scalarF16Range()], + + 'finite', + FP.f32.quantizeToF16Interval + ); + }, + f32_non_const: () => { + return FP.f32.generateScalarToIntervalCases( + [ + kValue.f16.negative.min, + kValue.f16.negative.max, + kValue.f16.negative.subnormal.min, + kValue.f16.negative.subnormal.max, + kValue.f16.positive.subnormal.min, + kValue.f16.positive.subnormal.max, + kValue.f16.positive.min, + kValue.f16.positive.max, + ...scalarF32Range()], + + 'unfiltered', + FP.f32.quantizeToF16Interval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.spec.js index d0f37bd0479..40f5b2f132e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/quantizeToF16.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'quantizeToF16' builtin function T is f32 or vecN @@ -8,64 +8,23 @@ T is f32 or vecN Quantizes a 32-bit floating point value e as if e were converted to a IEEE 754 binary16 value, and then converted back to a IEEE 754 binary32 value. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { kValue } from '../../../../../util/constants.js'; import { TypeF32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF16Range, fullF32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './quantizeToF16.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('quantizeToF16', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases( - [ - kValue.f16.negative.min, - kValue.f16.negative.max, - kValue.f16.negative.subnormal.min, - kValue.f16.negative.subnormal.max, - kValue.f16.positive.subnormal.min, - kValue.f16.positive.subnormal.max, - kValue.f16.positive.min, - kValue.f16.positive.max, - ...fullF16Range(), - ], - - 'finite', - FP.f32.quantizeToF16Interval - ); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases( - [ - kValue.f16.negative.min, - kValue.f16.negative.max, - kValue.f16.negative.subnormal.min, - kValue.f16.negative.subnormal.max, - kValue.f16.positive.subnormal.min, - kValue.f16.positive.subnormal.max, - kValue.f16.positive.min, - kValue.f16.positive.max, - ...fullF32Range(), - ], - - 'unfiltered', - FP.f32.quantizeToF16Interval - ); - }, -}); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('quantizeToF16'), [TypeF32], TypeF32, t.params, cases); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('quantizeToF16'), [TypeF32], TypeF32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.cache.js new file mode 100644 index 00000000000..582338e976a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.cache.js @@ -0,0 +1,17 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].radiansInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('radians', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.spec.js index 3da132557e0..480cd55d5c3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/radians.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'radians' builtin function S is AbstractFloat, f32, f16 @@ -8,78 +8,57 @@ T is S or vecN @const fn radians(e1: T ) -> T Converts degrees to radians, approximating e1 * π / 180. Component-wise when T is a vector -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF16Range, fullF32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './radians.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('radians', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - fullF32Range(), - 'unfiltered', - FP.f32.radiansInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - fullF16Range(), - 'unfiltered', - FP.f16.radiansInterval - ); - }, - abstract: () => { - return FP.abstract.generateScalarToIntervalCases( - fullF16Range(), - 'unfiltered', - FP.abstract.radiansInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run( + t, + abstractBuiltin('radians'), + [TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('radians'), - [TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('radians'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('radians'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('radians'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('radians'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.cache.js new file mode 100644 index 00000000000..dbde2133063 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.cache.js @@ -0,0 +1,22 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_vecN_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateVectorPairToVectorCases( + FP[trait].sparseVectorRange(dim), + FP[trait].sparseVectorRange(dim), + nonConst ? 'unfiltered' : 'finite', + FP[trait].reflectInterval + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('reflect', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.spec.js index 9d93cfd7b5b..a6a59f07104 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reflect.spec.js @@ -1,187 +1,141 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'reflect' builtin function T is vecN, vecN, or vecN @const fn reflect(e1: T, e2: T ) -> T For the incident vector e1 and surface orientation e2, returns the reflection direction e1-2*dot(e2,e1)*e2. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { sparseVectorF32Range, sparseVectorF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './reflect.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_vecN_[non_]const -const f32_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateVectorPairToVectorCases( - sparseVectorF32Range(n), - sparseVectorF32Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f32.reflectInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +unimplemented(); -// Cases: f16_vecN_[non_]const -const f16_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateVectorPairToVectorCases( - sparseVectorF16Range(n), - sparseVectorF16Range(n), - nonConst ? 'unfiltered' : 'finite', - FP.f16.reflectInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('reflect', { - ...f32_vec_cases, - ...f16_vec_cases, +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run( + t, + builtin('reflect'), + [TypeVec(2, TypeF32), TypeVec(2, TypeF32)], + TypeVec(2, TypeF32), + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .unimplemented(); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run( + t, + builtin('reflect'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], + TypeVec(3, TypeF32), + t.params, + cases + ); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run( + t, + builtin('reflect'), + [TypeVec(4, TypeF32), TypeVec(4, TypeF32)], + TypeVec(4, TypeF32), + t.params, + cases + ); +}); - await run( - t, - builtin('reflect'), - [TypeVec(2, TypeF32), TypeVec(2, TypeF32)], - TypeVec(2, TypeF32), - t.params, - cases - ); - }); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run( + t, + builtin('reflect'), + [TypeVec(2, TypeF16), TypeVec(2, TypeF16)], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run( + t, + builtin('reflect'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], + TypeVec(3, TypeF16), + t.params, + cases + ); +}); - await run( - t, - builtin('reflect'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32)], - TypeVec(3, TypeF32), - t.params, - cases - ); - }); - -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run( - t, - builtin('reflect'), - [TypeVec(4, TypeF32), TypeVec(4, TypeF32)], - TypeVec(4, TypeF32), - t.params, - cases - ); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run( - t, - builtin('reflect'), - [TypeVec(2, TypeF16), TypeVec(2, TypeF16)], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run( - t, - builtin('reflect'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16)], - TypeVec(3, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run( - t, - builtin('reflect'), - [TypeVec(4, TypeF16), TypeVec(4, TypeF16)], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run( + t, + builtin('reflect'), + [TypeVec(4, TypeF16), TypeVec(4, TypeF16)], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.cache.js new file mode 100644 index 00000000000..6b2c4b182e9 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.cache.js @@ -0,0 +1,89 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { toVector } from '../../../../../util/conversion.js';import { FP } from '../../../../../util/floating_point.js'; + +import { makeCaseCache } from '../../case_cache.js'; + + +// Using a bespoke implementation of make*Case and generate*Cases here +// since refract is the only builtin with the API signature +// (vec, vec, scalar) -> vec + +/** + * @returns a Case for `refract` + * @param kind what type of floating point numbers to operate on + * @param i the `i` param for the case + * @param s the `s` param for the case + * @param r the `r` param for the case + * @param check what interval checking to apply + * */ +function makeCase( +kind, +i, +s, +r, +check) +{ + const fp = FP[kind]; + i = i.map(fp.quantize); + s = s.map(fp.quantize); + r = fp.quantize(r); + + const vectors = fp.refractInterval(i, s, r); + if (check === 'finite' && vectors.some((e) => !e.isFinite())) { + return undefined; + } + + return { + input: [toVector(i, fp.scalarBuilder), toVector(s, fp.scalarBuilder), fp.scalarBuilder(r)], + expected: fp.refractInterval(i, s, r) + }; +} + +/** + * @returns an array of Cases for `refract` + * @param kind what type of floating point numbers to operate on + * @param param_is array of inputs to try for the `i` param + * @param param_ss array of inputs to try for the `s` param + * @param param_rs array of inputs to try for the `r` param + * @param check what interval checking to apply + */ +function generateCases( +kind, +param_is, +param_ss, +param_rs, +check) +{ + // Cannot use `cartesianProduct` here due to heterogeneous param types + return param_is. + flatMap((i) => { + return param_ss.flatMap((s) => { + return param_rs.map((r) => { + return makeCase(kind, i, s, r, check); + }); + }); + }). + filter((c) => c !== undefined); +} + +// Cases: [f32|f16]_vecN_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[2, 3, 4].flatMap((dim) => +[true, false].map((nonConst) => ({ + [`${trait}_vec${dim}_${nonConst ? 'non_const' : 'const'}`]: () => { + return generateCases( + trait, + FP[trait].sparseVectorRange(dim), + FP[trait].sparseVectorRange(dim), + FP[trait].sparseScalarRange(), + nonConst ? 'unfiltered' : 'finite' + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('refract', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.spec.js index 53e77288d00..90e39fa2522 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/refract.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'refract' builtin function T is vecN @@ -10,238 +10,135 @@ For the incident vector e1 and surface normal e2, and the ratio of indices of refraction e3, let k = 1.0 -e3*e3* (1.0 - dot(e2,e1) * dot(e2,e1)). If k < 0.0, returns the refraction vector 0.0, otherwise return the refraction vector e3*e1- (e3* dot(e2,e1) + sqrt(k)) *e2. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { toVector, TypeF32, TypeF16, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - sparseVectorF32Range, - sparseVectorF16Range, - sparseF32Range, - sparseF16Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32, TypeVec } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './refract.cache.js'; export const g = makeTestGroup(GPUTest); -// Using a bespoke implementation of make*Case and generate*Cases here -// since refract is the only builtin with the API signature -// (vec, vec, scalar) -> vec +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])). +unimplemented(); -/** - * @returns a Case for `refract` - * @param kind what type of floating point numbers to operate on - * @param i the `i` param for the case - * @param s the `s` param for the case - * @param r the `r` param for the case - * @param check what interval checking to apply - * */ -function makeCase(kind, i, s, r, check) { - const fp = FP[kind]; - i = i.map(fp.quantize); - s = s.map(fp.quantize); - r = fp.quantize(r); - - const vectors = fp.refractInterval(i, s, r); - if (check === 'finite' && vectors.some(e => !e.isFinite())) { - return undefined; - } - - return { - input: [toVector(i, fp.scalarBuilder), toVector(s, fp.scalarBuilder), fp.scalarBuilder(r)], - expected: fp.refractInterval(i, s, r), - }; -} - -/** - * @returns an array of Cases for `refract` - * @param kind what type of floating point numbers to operate on - * @param param_is array of inputs to try for the `i` param - * @param param_ss array of inputs to try for the `s` param - * @param param_rs array of inputs to try for the `r` param - * @param check what interval checking to apply - */ -function generateCases(kind, param_is, param_ss, param_rs, check) { - // Cannot use `cartesianProduct` here due to heterogeneous param types - return param_is - .flatMap(i => { - return param_ss.flatMap(s => { - return param_rs.map(r => { - return makeCase(kind, i, s, r, check); - }); - }); - }) - .filter(c => c !== undefined); -} - -// Cases: f32_vecN_[non_]const -const f32_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f32_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return generateCases( - 'f32', - sparseVectorF32Range(n), - sparseVectorF32Range(n), - sparseF32Range(), - nonConst ? 'unfiltered' : 'finite' - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_vecN_[non_]const -const f16_vec_cases = [2, 3, 4] - .flatMap(n => - [true, false].map(nonConst => ({ - [`f16_vec${n}_${nonConst ? 'non_const' : 'const'}`]: () => { - return generateCases( - 'f16', - sparseVectorF16Range(n), - sparseVectorF16Range(n), - sparseF16Range(), - nonConst ? 'unfiltered' : 'finite' - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('refract', { - ...f32_vec_cases, - ...f16_vec_cases, +g.test('f32_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' + ); + await run( + t, + builtin('refract'), + [TypeVec(2, TypeF32), TypeVec(2, TypeF32), TypeF32], + TypeVec(2, TypeF32), + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [2, 3, 4])) - .unimplemented(); +g.test('f32_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' + ); + await run( + t, + builtin('refract'), + [TypeVec(3, TypeF32), TypeVec(3, TypeF32), TypeF32], + TypeVec(3, TypeF32), + t.params, + cases + ); +}); -g.test('f32_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec2_const' : 'f32_vec2_non_const' - ); +g.test('f32_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f32 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' + ); + await run( + t, + builtin('refract'), + [TypeVec(4, TypeF32), TypeVec(4, TypeF32), TypeF32], + TypeVec(4, TypeF32), + t.params, + cases + ); +}); - await run( - t, - builtin('refract'), - [TypeVec(2, TypeF32), TypeVec(2, TypeF32), TypeF32], - TypeVec(2, TypeF32), - t.params, - cases - ); - }); +g.test('f16_vec2'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec2s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' + ); + await run( + t, + builtin('refract'), + [TypeVec(2, TypeF16), TypeVec(2, TypeF16), TypeF16], + TypeVec(2, TypeF16), + t.params, + cases + ); +}); -g.test('f32_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec3_const' : 'f32_vec3_non_const' - ); +g.test('f16_vec3'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec3s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' + ); + await run( + t, + builtin('refract'), + [TypeVec(3, TypeF16), TypeVec(3, TypeF16), TypeF16], + TypeVec(3, TypeF16), + t.params, + cases + ); +}); - await run( - t, - builtin('refract'), - [TypeVec(3, TypeF32), TypeVec(3, TypeF32), TypeF32], - TypeVec(3, TypeF32), - t.params, - cases - ); - }); - -g.test('f32_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f32 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f32_vec4_const' : 'f32_vec4_non_const' - ); - - await run( - t, - builtin('refract'), - [TypeVec(4, TypeF32), TypeVec(4, TypeF32), TypeF32], - TypeVec(4, TypeF32), - t.params, - cases - ); - }); - -g.test('f16_vec2') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec2s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec2_const' : 'f16_vec2_non_const' - ); - - await run( - t, - builtin('refract'), - [TypeVec(2, TypeF16), TypeVec(2, TypeF16), TypeF16], - TypeVec(2, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_vec3') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec3s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec3_const' : 'f16_vec3_non_const' - ); - - await run( - t, - builtin('refract'), - [TypeVec(3, TypeF16), TypeVec(3, TypeF16), TypeF16], - TypeVec(3, TypeF16), - t.params, - cases - ); - }); - -g.test('f16_vec4') - .specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions') - .desc(`f16 tests using vec4s`) - .params(u => u.combine('inputSource', allInputSources)) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get( - t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' - ); - - await run( - t, - builtin('refract'), - [TypeVec(4, TypeF16), TypeVec(4, TypeF16), TypeF16], - TypeVec(4, TypeF16), - t.params, - cases - ); - }); +g.test('f16_vec4'). +specURL('https://www.w3.org/TR/WGSL/#numeric-builtin-functions'). +desc(`f16 tests using vec4s`). +params((u) => u.combine('inputSource', allInputSources)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get( + t.params.inputSource === 'const' ? 'f16_vec4_const' : 'f16_vec4_non_const' + ); + await run( + t, + builtin('refract'), + [TypeVec(4, TypeF16), TypeVec(4, TypeF16), TypeF16], + TypeVec(4, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reverseBits.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reverseBits.spec.js index 41f72419dfd..fc99867f108 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reverseBits.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/reverseBits.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'reversBits' builtin function S is i32, u32 @@ -8,8 +8,7 @@ T is S or vecN @const fn reverseBits(e: T ) -> T Reverses the bits in e: The bit at position k of the result equals the bit at position 31-k of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeU32, u32Bits, TypeI32, i32Bits } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; @@ -18,794 +17,234 @@ import { builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions') - .desc(`u32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#integer-builtin-functions'). +desc(`u32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; - await run(t, builtin('reverseBits'), [TypeU32], TypeU32, cfg, [ - // Zero - { - input: u32Bits(0b00000000000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000000000), - }, + await run(t, builtin('reverseBits'), [TypeU32], TypeU32, cfg, [ + // Zero + { input: u32Bits(0b00000000000000000000000000000000), expected: u32Bits(0b00000000000000000000000000000000) }, - // One - { - input: u32Bits(0b00000000000000000000000000000001), - expected: u32Bits(0b10000000000000000000000000000000), - }, + // One + { input: u32Bits(0b00000000000000000000000000000001), expected: u32Bits(0b10000000000000000000000000000000) }, - // 0's after leading 1 - { - input: u32Bits(0b00000000000000000000000000000010), - expected: u32Bits(0b01000000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000000100), - expected: u32Bits(0b00100000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000001000), - expected: u32Bits(0b00010000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000010000), - expected: u32Bits(0b00001000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000100000), - expected: u32Bits(0b00000100000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000001000000), - expected: u32Bits(0b00000010000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000010000000), - expected: u32Bits(0b00000001000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000100000000), - expected: u32Bits(0b00000000100000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000001000000000), - expected: u32Bits(0b00000000010000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000010000000000), - expected: u32Bits(0b00000000001000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000100000000000), - expected: u32Bits(0b00000000000100000000000000000000), - }, - { - input: u32Bits(0b00000000000000000001000000000000), - expected: u32Bits(0b00000000000010000000000000000000), - }, - { - input: u32Bits(0b00000000000000000010000000000000), - expected: u32Bits(0b00000000000001000000000000000000), - }, - { - input: u32Bits(0b00000000000000000100000000000000), - expected: u32Bits(0b00000000000000100000000000000000), - }, - { - input: u32Bits(0b00000000000000001000000000000000), - expected: u32Bits(0b00000000000000010000000000000000), - }, - { - input: u32Bits(0b00000000000000010000000000000000), - expected: u32Bits(0b00000000000000001000000000000000), - }, - { - input: u32Bits(0b00000000000000100000000000000000), - expected: u32Bits(0b00000000000000000100000000000000), - }, - { - input: u32Bits(0b00000000000001000000000000000000), - expected: u32Bits(0b00000000000000000010000000000000), - }, - { - input: u32Bits(0b00000000000010000000000000000000), - expected: u32Bits(0b00000000000000000001000000000000), - }, - { - input: u32Bits(0b00000000000100000000000000000000), - expected: u32Bits(0b00000000000000000000100000000000), - }, - { - input: u32Bits(0b00000000001000000000000000000000), - expected: u32Bits(0b00000000000000000000010000000000), - }, - { - input: u32Bits(0b00000000010000000000000000000000), - expected: u32Bits(0b00000000000000000000001000000000), - }, - { - input: u32Bits(0b00000000100000000000000000000000), - expected: u32Bits(0b00000000000000000000000100000000), - }, - { - input: u32Bits(0b00000001000000000000000000000000), - expected: u32Bits(0b00000000000000000000000010000000), - }, - { - input: u32Bits(0b00000010000000000000000000000000), - expected: u32Bits(0b00000000000000000000000001000000), - }, - { - input: u32Bits(0b00000100000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000100000), - }, - { - input: u32Bits(0b00001000000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000010000), - }, - { - input: u32Bits(0b00010000000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000001000), - }, - { - input: u32Bits(0b00100000000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000000100), - }, - { - input: u32Bits(0b01000000000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000000010), - }, - { - input: u32Bits(0b10000000000000000000000000000000), - expected: u32Bits(0b00000000000000000000000000000001), - }, + // 0's after leading 1 + { input: u32Bits(0b00000000000000000000000000000010), expected: u32Bits(0b01000000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000000100), expected: u32Bits(0b00100000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000001000), expected: u32Bits(0b00010000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000010000), expected: u32Bits(0b00001000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000100000), expected: u32Bits(0b00000100000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000001000000), expected: u32Bits(0b00000010000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000010000000), expected: u32Bits(0b00000001000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000100000000), expected: u32Bits(0b00000000100000000000000000000000) }, + { input: u32Bits(0b00000000000000000000001000000000), expected: u32Bits(0b00000000010000000000000000000000) }, + { input: u32Bits(0b00000000000000000000010000000000), expected: u32Bits(0b00000000001000000000000000000000) }, + { input: u32Bits(0b00000000000000000000100000000000), expected: u32Bits(0b00000000000100000000000000000000) }, + { input: u32Bits(0b00000000000000000001000000000000), expected: u32Bits(0b00000000000010000000000000000000) }, + { input: u32Bits(0b00000000000000000010000000000000), expected: u32Bits(0b00000000000001000000000000000000) }, + { input: u32Bits(0b00000000000000000100000000000000), expected: u32Bits(0b00000000000000100000000000000000) }, + { input: u32Bits(0b00000000000000001000000000000000), expected: u32Bits(0b00000000000000010000000000000000) }, + { input: u32Bits(0b00000000000000010000000000000000), expected: u32Bits(0b00000000000000001000000000000000) }, + { input: u32Bits(0b00000000000000100000000000000000), expected: u32Bits(0b00000000000000000100000000000000) }, + { input: u32Bits(0b00000000000001000000000000000000), expected: u32Bits(0b00000000000000000010000000000000) }, + { input: u32Bits(0b00000000000010000000000000000000), expected: u32Bits(0b00000000000000000001000000000000) }, + { input: u32Bits(0b00000000000100000000000000000000), expected: u32Bits(0b00000000000000000000100000000000) }, + { input: u32Bits(0b00000000001000000000000000000000), expected: u32Bits(0b00000000000000000000010000000000) }, + { input: u32Bits(0b00000000010000000000000000000000), expected: u32Bits(0b00000000000000000000001000000000) }, + { input: u32Bits(0b00000000100000000000000000000000), expected: u32Bits(0b00000000000000000000000100000000) }, + { input: u32Bits(0b00000001000000000000000000000000), expected: u32Bits(0b00000000000000000000000010000000) }, + { input: u32Bits(0b00000010000000000000000000000000), expected: u32Bits(0b00000000000000000000000001000000) }, + { input: u32Bits(0b00000100000000000000000000000000), expected: u32Bits(0b00000000000000000000000000100000) }, + { input: u32Bits(0b00001000000000000000000000000000), expected: u32Bits(0b00000000000000000000000000010000) }, + { input: u32Bits(0b00010000000000000000000000000000), expected: u32Bits(0b00000000000000000000000000001000) }, + { input: u32Bits(0b00100000000000000000000000000000), expected: u32Bits(0b00000000000000000000000000000100) }, + { input: u32Bits(0b01000000000000000000000000000000), expected: u32Bits(0b00000000000000000000000000000010) }, + { input: u32Bits(0b10000000000000000000000000000000), expected: u32Bits(0b00000000000000000000000000000001) }, - // 1's after leading 1 - { - input: u32Bits(0b00000000000000000000000000000011), - expected: u32Bits(0b11000000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000000111), - expected: u32Bits(0b11100000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000001111), - expected: u32Bits(0b11110000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000011111), - expected: u32Bits(0b11111000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000111111), - expected: u32Bits(0b11111100000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000001111111), - expected: u32Bits(0b11111110000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000011111111), - expected: u32Bits(0b11111111000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000111111111), - expected: u32Bits(0b11111111100000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000001111111111), - expected: u32Bits(0b11111111110000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000011111111111), - expected: u32Bits(0b11111111111000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000111111111111), - expected: u32Bits(0b11111111111100000000000000000000), - }, - { - input: u32Bits(0b00000000000000000001111111111111), - expected: u32Bits(0b11111111111110000000000000000000), - }, - { - input: u32Bits(0b00000000000000000011111111111111), - expected: u32Bits(0b11111111111111000000000000000000), - }, - { - input: u32Bits(0b00000000000000000111111111111111), - expected: u32Bits(0b11111111111111100000000000000000), - }, - { - input: u32Bits(0b00000000000000001111111111111111), - expected: u32Bits(0b11111111111111110000000000000000), - }, - { - input: u32Bits(0b00000000000000011111111111111111), - expected: u32Bits(0b11111111111111111000000000000000), - }, - { - input: u32Bits(0b00000000000000111111111111111111), - expected: u32Bits(0b11111111111111111100000000000000), - }, - { - input: u32Bits(0b00000000000001111111111111111111), - expected: u32Bits(0b11111111111111111110000000000000), - }, - { - input: u32Bits(0b00000000000011111111111111111111), - expected: u32Bits(0b11111111111111111111000000000000), - }, - { - input: u32Bits(0b00000000000111111111111111111111), - expected: u32Bits(0b11111111111111111111100000000000), - }, - { - input: u32Bits(0b00000000001111111111111111111111), - expected: u32Bits(0b11111111111111111111110000000000), - }, - { - input: u32Bits(0b00000000011111111111111111111111), - expected: u32Bits(0b11111111111111111111111000000000), - }, - { - input: u32Bits(0b00000000111111111111111111111111), - expected: u32Bits(0b11111111111111111111111100000000), - }, - { - input: u32Bits(0b00000001111111111111111111111111), - expected: u32Bits(0b11111111111111111111111110000000), - }, - { - input: u32Bits(0b00000011111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111000000), - }, - { - input: u32Bits(0b00000111111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111100000), - }, - { - input: u32Bits(0b00001111111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111110000), - }, - { - input: u32Bits(0b00011111111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111111000), - }, - { - input: u32Bits(0b00111111111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111111100), - }, - { - input: u32Bits(0b01111111111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111111110), - }, - { - input: u32Bits(0b11111111111111111111111111111111), - expected: u32Bits(0b11111111111111111111111111111111), - }, + // 1's after leading 1 + { input: u32Bits(0b00000000000000000000000000000011), expected: u32Bits(0b11000000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000000111), expected: u32Bits(0b11100000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000001111), expected: u32Bits(0b11110000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000011111), expected: u32Bits(0b11111000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000111111), expected: u32Bits(0b11111100000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000001111111), expected: u32Bits(0b11111110000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32Bits(0b11111111000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000111111111), expected: u32Bits(0b11111111100000000000000000000000) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32Bits(0b11111111110000000000000000000000) }, + { input: u32Bits(0b00000000000000000000011111111111), expected: u32Bits(0b11111111111000000000000000000000) }, + { input: u32Bits(0b00000000000000000000111111111111), expected: u32Bits(0b11111111111100000000000000000000) }, + { input: u32Bits(0b00000000000000000001111111111111), expected: u32Bits(0b11111111111110000000000000000000) }, + { input: u32Bits(0b00000000000000000011111111111111), expected: u32Bits(0b11111111111111000000000000000000) }, + { input: u32Bits(0b00000000000000000111111111111111), expected: u32Bits(0b11111111111111100000000000000000) }, + { input: u32Bits(0b00000000000000001111111111111111), expected: u32Bits(0b11111111111111110000000000000000) }, + { input: u32Bits(0b00000000000000011111111111111111), expected: u32Bits(0b11111111111111111000000000000000) }, + { input: u32Bits(0b00000000000000111111111111111111), expected: u32Bits(0b11111111111111111100000000000000) }, + { input: u32Bits(0b00000000000001111111111111111111), expected: u32Bits(0b11111111111111111110000000000000) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32Bits(0b11111111111111111111000000000000) }, + { input: u32Bits(0b00000000000111111111111111111111), expected: u32Bits(0b11111111111111111111100000000000) }, + { input: u32Bits(0b00000000001111111111111111111111), expected: u32Bits(0b11111111111111111111110000000000) }, + { input: u32Bits(0b00000000011111111111111111111111), expected: u32Bits(0b11111111111111111111111000000000) }, + { input: u32Bits(0b00000000111111111111111111111111), expected: u32Bits(0b11111111111111111111111100000000) }, + { input: u32Bits(0b00000001111111111111111111111111), expected: u32Bits(0b11111111111111111111111110000000) }, + { input: u32Bits(0b00000011111111111111111111111111), expected: u32Bits(0b11111111111111111111111111000000) }, + { input: u32Bits(0b00000111111111111111111111111111), expected: u32Bits(0b11111111111111111111111111100000) }, + { input: u32Bits(0b00001111111111111111111111111111), expected: u32Bits(0b11111111111111111111111111110000) }, + { input: u32Bits(0b00011111111111111111111111111111), expected: u32Bits(0b11111111111111111111111111111000) }, + { input: u32Bits(0b00111111111111111111111111111111), expected: u32Bits(0b11111111111111111111111111111100) }, + { input: u32Bits(0b01111111111111111111111111111111), expected: u32Bits(0b11111111111111111111111111111110) }, + { input: u32Bits(0b11111111111111111111111111111111), expected: u32Bits(0b11111111111111111111111111111111) }, - // random after leading 1 - { - input: u32Bits(0b00000000000000000000000000000110), - expected: u32Bits(0b01100000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000001101), - expected: u32Bits(0b10110000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000011101), - expected: u32Bits(0b10111000000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000000111001), - expected: u32Bits(0b10011100000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000001101111), - expected: u32Bits(0b11110110000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000011111111), - expected: u32Bits(0b11111111000000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000000111101111), - expected: u32Bits(0b11110111100000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000001111111111), - expected: u32Bits(0b11111111110000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000011111110001), - expected: u32Bits(0b10001111111000000000000000000000), - }, - { - input: u32Bits(0b00000000000000000000111011011101), - expected: u32Bits(0b10111011011100000000000000000000), - }, - { - input: u32Bits(0b00000000000000000001101101111111), - expected: u32Bits(0b11111110110110000000000000000000), - }, - { - input: u32Bits(0b00000000000000000011111111011111), - expected: u32Bits(0b11111011111111000000000000000000), - }, - { - input: u32Bits(0b00000000000000000101111001110101), - expected: u32Bits(0b10101110011110100000000000000000), - }, - { - input: u32Bits(0b00000000000000001101111011110111), - expected: u32Bits(0b11101111011110110000000000000000), - }, - { - input: u32Bits(0b00000000000000011111111111110011), - expected: u32Bits(0b11001111111111111000000000000000), - }, - { - input: u32Bits(0b00000000000000111111111110111111), - expected: u32Bits(0b11111101111111111100000000000000), - }, - { - input: u32Bits(0b00000000000001111111011111111111), - expected: u32Bits(0b11111111111011111110000000000000), - }, - { - input: u32Bits(0b00000000000011111111111111111111), - expected: u32Bits(0b11111111111111111111000000000000), - }, - { - input: u32Bits(0b00000000000111110101011110111111), - expected: u32Bits(0b11111101111010101111100000000000), - }, - { - input: u32Bits(0b00000000001111101111111111110111), - expected: u32Bits(0b11101111111111110111110000000000), - }, - { - input: u32Bits(0b00000000011111111111010000101111), - expected: u32Bits(0b11110100001011111111111000000000), - }, - { - input: u32Bits(0b00000000111111111111001111111011), - expected: u32Bits(0b11011111110011111111111100000000), - }, - { - input: u32Bits(0b00000001111111011111101111111111), - expected: u32Bits(0b11111111110111111011111110000000), - }, - { - input: u32Bits(0b00000011101011111011110111111011), - expected: u32Bits(0b11011111101111011111010111000000), - }, - { - input: u32Bits(0b00000111111110111111111111111111), - expected: u32Bits(0b11111111111111111101111111100000), - }, - { - input: u32Bits(0b00001111000000011011011110111111), - expected: u32Bits(0b11111101111011011000000011110000), - }, - { - input: u32Bits(0b00011110101111011111111111111111), - expected: u32Bits(0b11111111111111111011110101111000), - }, - { - input: u32Bits(0b00110110111111100111111110111101), - expected: u32Bits(0b10111101111111100111111101101100), - }, - { - input: u32Bits(0b01010111111101111111011111011111), - expected: u32Bits(0b11111011111011111110111111101010), - }, - { - input: u32Bits(0b11100010011110101101101110101111), - expected: u32Bits(0b11110101110110110101111001000111), - }, - ]); - }); + // random after leading 1 + { input: u32Bits(0b00000000000000000000000000000110), expected: u32Bits(0b01100000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000001101), expected: u32Bits(0b10110000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000011101), expected: u32Bits(0b10111000000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000000111001), expected: u32Bits(0b10011100000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000001101111), expected: u32Bits(0b11110110000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000011111111), expected: u32Bits(0b11111111000000000000000000000000) }, + { input: u32Bits(0b00000000000000000000000111101111), expected: u32Bits(0b11110111100000000000000000000000) }, + { input: u32Bits(0b00000000000000000000001111111111), expected: u32Bits(0b11111111110000000000000000000000) }, + { input: u32Bits(0b00000000000000000000011111110001), expected: u32Bits(0b10001111111000000000000000000000) }, + { input: u32Bits(0b00000000000000000000111011011101), expected: u32Bits(0b10111011011100000000000000000000) }, + { input: u32Bits(0b00000000000000000001101101111111), expected: u32Bits(0b11111110110110000000000000000000) }, + { input: u32Bits(0b00000000000000000011111111011111), expected: u32Bits(0b11111011111111000000000000000000) }, + { input: u32Bits(0b00000000000000000101111001110101), expected: u32Bits(0b10101110011110100000000000000000) }, + { input: u32Bits(0b00000000000000001101111011110111), expected: u32Bits(0b11101111011110110000000000000000) }, + { input: u32Bits(0b00000000000000011111111111110011), expected: u32Bits(0b11001111111111111000000000000000) }, + { input: u32Bits(0b00000000000000111111111110111111), expected: u32Bits(0b11111101111111111100000000000000) }, + { input: u32Bits(0b00000000000001111111011111111111), expected: u32Bits(0b11111111111011111110000000000000) }, + { input: u32Bits(0b00000000000011111111111111111111), expected: u32Bits(0b11111111111111111111000000000000) }, + { input: u32Bits(0b00000000000111110101011110111111), expected: u32Bits(0b11111101111010101111100000000000) }, + { input: u32Bits(0b00000000001111101111111111110111), expected: u32Bits(0b11101111111111110111110000000000) }, + { input: u32Bits(0b00000000011111111111010000101111), expected: u32Bits(0b11110100001011111111111000000000) }, + { input: u32Bits(0b00000000111111111111001111111011), expected: u32Bits(0b11011111110011111111111100000000) }, + { input: u32Bits(0b00000001111111011111101111111111), expected: u32Bits(0b11111111110111111011111110000000) }, + { input: u32Bits(0b00000011101011111011110111111011), expected: u32Bits(0b11011111101111011111010111000000) }, + { input: u32Bits(0b00000111111110111111111111111111), expected: u32Bits(0b11111111111111111101111111100000) }, + { input: u32Bits(0b00001111000000011011011110111111), expected: u32Bits(0b11111101111011011000000011110000) }, + { input: u32Bits(0b00011110101111011111111111111111), expected: u32Bits(0b11111111111111111011110101111000) }, + { input: u32Bits(0b00110110111111100111111110111101), expected: u32Bits(0b10111101111111100111111101101100) }, + { input: u32Bits(0b01010111111101111111011111011111), expected: u32Bits(0b11111011111011111110111111101010) }, + { input: u32Bits(0b11100010011110101101101110101111), expected: u32Bits(0b11110101110110110101111001000111) }] + ); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/2021/WD-WGSL-20210929/#integer-builtin-functions') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cfg = t.params; +g.test('i32'). +specURL('https://www.w3.org/TR/2021/WD-WGSL-20210929/#integer-builtin-functions'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cfg = t.params; - await run(t, builtin('reverseBits'), [TypeI32], TypeI32, cfg, [ - // Zero - { - input: i32Bits(0b00000000000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000000000), - }, + await run(t, builtin('reverseBits'), [TypeI32], TypeI32, cfg, [ + // Zero + { input: i32Bits(0b00000000000000000000000000000000), expected: i32Bits(0b00000000000000000000000000000000) }, - // One - { - input: i32Bits(0b00000000000000000000000000000001), - expected: i32Bits(0b10000000000000000000000000000000), - }, + // One + { input: i32Bits(0b00000000000000000000000000000001), expected: i32Bits(0b10000000000000000000000000000000) }, - // 0's after leading 1 - { - input: i32Bits(0b00000000000000000000000000000010), - expected: i32Bits(0b01000000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000000100), - expected: i32Bits(0b00100000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000001000), - expected: i32Bits(0b00010000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000010000), - expected: i32Bits(0b00001000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000100000), - expected: i32Bits(0b00000100000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000001000000), - expected: i32Bits(0b00000010000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000010000000), - expected: i32Bits(0b00000001000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000100000000), - expected: i32Bits(0b00000000100000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000001000000000), - expected: i32Bits(0b00000000010000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000010000000000), - expected: i32Bits(0b00000000001000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000100000000000), - expected: i32Bits(0b00000000000100000000000000000000), - }, - { - input: i32Bits(0b00000000000000000001000000000000), - expected: i32Bits(0b00000000000010000000000000000000), - }, - { - input: i32Bits(0b00000000000000000010000000000000), - expected: i32Bits(0b00000000000001000000000000000000), - }, - { - input: i32Bits(0b00000000000000000100000000000000), - expected: i32Bits(0b00000000000000100000000000000000), - }, - { - input: i32Bits(0b00000000000000001000000000000000), - expected: i32Bits(0b00000000000000010000000000000000), - }, - { - input: i32Bits(0b00000000000000010000000000000000), - expected: i32Bits(0b00000000000000001000000000000000), - }, - { - input: i32Bits(0b00000000000000100000000000000000), - expected: i32Bits(0b00000000000000000100000000000000), - }, - { - input: i32Bits(0b00000000000001000000000000000000), - expected: i32Bits(0b00000000000000000010000000000000), - }, - { - input: i32Bits(0b00000000000010000000000000000000), - expected: i32Bits(0b00000000000000000001000000000000), - }, - { - input: i32Bits(0b00000000000100000000000000000000), - expected: i32Bits(0b00000000000000000000100000000000), - }, - { - input: i32Bits(0b00000000001000000000000000000000), - expected: i32Bits(0b00000000000000000000010000000000), - }, - { - input: i32Bits(0b00000000010000000000000000000000), - expected: i32Bits(0b00000000000000000000001000000000), - }, - { - input: i32Bits(0b00000000100000000000000000000000), - expected: i32Bits(0b00000000000000000000000100000000), - }, - { - input: i32Bits(0b00000001000000000000000000000000), - expected: i32Bits(0b00000000000000000000000010000000), - }, - { - input: i32Bits(0b00000010000000000000000000000000), - expected: i32Bits(0b00000000000000000000000001000000), - }, - { - input: i32Bits(0b00000100000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000100000), - }, - { - input: i32Bits(0b00001000000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000010000), - }, - { - input: i32Bits(0b00010000000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000001000), - }, - { - input: i32Bits(0b00100000000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000000100), - }, - { - input: i32Bits(0b01000000000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000000010), - }, - { - input: i32Bits(0b10000000000000000000000000000000), - expected: i32Bits(0b00000000000000000000000000000001), - }, + // 0's after leading 1 + { input: i32Bits(0b00000000000000000000000000000010), expected: i32Bits(0b01000000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000000100), expected: i32Bits(0b00100000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000001000), expected: i32Bits(0b00010000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000010000), expected: i32Bits(0b00001000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000100000), expected: i32Bits(0b00000100000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000001000000), expected: i32Bits(0b00000010000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000010000000), expected: i32Bits(0b00000001000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000100000000), expected: i32Bits(0b00000000100000000000000000000000) }, + { input: i32Bits(0b00000000000000000000001000000000), expected: i32Bits(0b00000000010000000000000000000000) }, + { input: i32Bits(0b00000000000000000000010000000000), expected: i32Bits(0b00000000001000000000000000000000) }, + { input: i32Bits(0b00000000000000000000100000000000), expected: i32Bits(0b00000000000100000000000000000000) }, + { input: i32Bits(0b00000000000000000001000000000000), expected: i32Bits(0b00000000000010000000000000000000) }, + { input: i32Bits(0b00000000000000000010000000000000), expected: i32Bits(0b00000000000001000000000000000000) }, + { input: i32Bits(0b00000000000000000100000000000000), expected: i32Bits(0b00000000000000100000000000000000) }, + { input: i32Bits(0b00000000000000001000000000000000), expected: i32Bits(0b00000000000000010000000000000000) }, + { input: i32Bits(0b00000000000000010000000000000000), expected: i32Bits(0b00000000000000001000000000000000) }, + { input: i32Bits(0b00000000000000100000000000000000), expected: i32Bits(0b00000000000000000100000000000000) }, + { input: i32Bits(0b00000000000001000000000000000000), expected: i32Bits(0b00000000000000000010000000000000) }, + { input: i32Bits(0b00000000000010000000000000000000), expected: i32Bits(0b00000000000000000001000000000000) }, + { input: i32Bits(0b00000000000100000000000000000000), expected: i32Bits(0b00000000000000000000100000000000) }, + { input: i32Bits(0b00000000001000000000000000000000), expected: i32Bits(0b00000000000000000000010000000000) }, + { input: i32Bits(0b00000000010000000000000000000000), expected: i32Bits(0b00000000000000000000001000000000) }, + { input: i32Bits(0b00000000100000000000000000000000), expected: i32Bits(0b00000000000000000000000100000000) }, + { input: i32Bits(0b00000001000000000000000000000000), expected: i32Bits(0b00000000000000000000000010000000) }, + { input: i32Bits(0b00000010000000000000000000000000), expected: i32Bits(0b00000000000000000000000001000000) }, + { input: i32Bits(0b00000100000000000000000000000000), expected: i32Bits(0b00000000000000000000000000100000) }, + { input: i32Bits(0b00001000000000000000000000000000), expected: i32Bits(0b00000000000000000000000000010000) }, + { input: i32Bits(0b00010000000000000000000000000000), expected: i32Bits(0b00000000000000000000000000001000) }, + { input: i32Bits(0b00100000000000000000000000000000), expected: i32Bits(0b00000000000000000000000000000100) }, + { input: i32Bits(0b01000000000000000000000000000000), expected: i32Bits(0b00000000000000000000000000000010) }, + { input: i32Bits(0b10000000000000000000000000000000), expected: i32Bits(0b00000000000000000000000000000001) }, - // 1's after leading 1 - { - input: i32Bits(0b00000000000000000000000000000011), - expected: i32Bits(0b11000000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000000111), - expected: i32Bits(0b11100000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000001111), - expected: i32Bits(0b11110000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000011111), - expected: i32Bits(0b11111000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000111111), - expected: i32Bits(0b11111100000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000001111111), - expected: i32Bits(0b11111110000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000011111111), - expected: i32Bits(0b11111111000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000111111111), - expected: i32Bits(0b11111111100000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000001111111111), - expected: i32Bits(0b11111111110000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000011111111111), - expected: i32Bits(0b11111111111000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000111111111111), - expected: i32Bits(0b11111111111100000000000000000000), - }, - { - input: i32Bits(0b00000000000000000001111111111111), - expected: i32Bits(0b11111111111110000000000000000000), - }, - { - input: i32Bits(0b00000000000000000011111111111111), - expected: i32Bits(0b11111111111111000000000000000000), - }, - { - input: i32Bits(0b00000000000000000111111111111111), - expected: i32Bits(0b11111111111111100000000000000000), - }, - { - input: i32Bits(0b00000000000000001111111111111111), - expected: i32Bits(0b11111111111111110000000000000000), - }, - { - input: i32Bits(0b00000000000000011111111111111111), - expected: i32Bits(0b11111111111111111000000000000000), - }, - { - input: i32Bits(0b00000000000000111111111111111111), - expected: i32Bits(0b11111111111111111100000000000000), - }, - { - input: i32Bits(0b00000000000001111111111111111111), - expected: i32Bits(0b11111111111111111110000000000000), - }, - { - input: i32Bits(0b00000000000011111111111111111111), - expected: i32Bits(0b11111111111111111111000000000000), - }, - { - input: i32Bits(0b00000000000111111111111111111111), - expected: i32Bits(0b11111111111111111111100000000000), - }, - { - input: i32Bits(0b00000000001111111111111111111111), - expected: i32Bits(0b11111111111111111111110000000000), - }, - { - input: i32Bits(0b00000000011111111111111111111111), - expected: i32Bits(0b11111111111111111111111000000000), - }, - { - input: i32Bits(0b00000000111111111111111111111111), - expected: i32Bits(0b11111111111111111111111100000000), - }, - { - input: i32Bits(0b00000001111111111111111111111111), - expected: i32Bits(0b11111111111111111111111110000000), - }, - { - input: i32Bits(0b00000011111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111000000), - }, - { - input: i32Bits(0b00000111111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111100000), - }, - { - input: i32Bits(0b00001111111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111110000), - }, - { - input: i32Bits(0b00011111111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111111000), - }, - { - input: i32Bits(0b00111111111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111111100), - }, - { - input: i32Bits(0b01111111111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111111110), - }, - { - input: i32Bits(0b11111111111111111111111111111111), - expected: i32Bits(0b11111111111111111111111111111111), - }, + // 1's after leading 1 + { input: i32Bits(0b00000000000000000000000000000011), expected: i32Bits(0b11000000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000000111), expected: i32Bits(0b11100000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000001111), expected: i32Bits(0b11110000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000011111), expected: i32Bits(0b11111000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000111111), expected: i32Bits(0b11111100000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000001111111), expected: i32Bits(0b11111110000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32Bits(0b11111111000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000111111111), expected: i32Bits(0b11111111100000000000000000000000) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32Bits(0b11111111110000000000000000000000) }, + { input: i32Bits(0b00000000000000000000011111111111), expected: i32Bits(0b11111111111000000000000000000000) }, + { input: i32Bits(0b00000000000000000000111111111111), expected: i32Bits(0b11111111111100000000000000000000) }, + { input: i32Bits(0b00000000000000000001111111111111), expected: i32Bits(0b11111111111110000000000000000000) }, + { input: i32Bits(0b00000000000000000011111111111111), expected: i32Bits(0b11111111111111000000000000000000) }, + { input: i32Bits(0b00000000000000000111111111111111), expected: i32Bits(0b11111111111111100000000000000000) }, + { input: i32Bits(0b00000000000000001111111111111111), expected: i32Bits(0b11111111111111110000000000000000) }, + { input: i32Bits(0b00000000000000011111111111111111), expected: i32Bits(0b11111111111111111000000000000000) }, + { input: i32Bits(0b00000000000000111111111111111111), expected: i32Bits(0b11111111111111111100000000000000) }, + { input: i32Bits(0b00000000000001111111111111111111), expected: i32Bits(0b11111111111111111110000000000000) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32Bits(0b11111111111111111111000000000000) }, + { input: i32Bits(0b00000000000111111111111111111111), expected: i32Bits(0b11111111111111111111100000000000) }, + { input: i32Bits(0b00000000001111111111111111111111), expected: i32Bits(0b11111111111111111111110000000000) }, + { input: i32Bits(0b00000000011111111111111111111111), expected: i32Bits(0b11111111111111111111111000000000) }, + { input: i32Bits(0b00000000111111111111111111111111), expected: i32Bits(0b11111111111111111111111100000000) }, + { input: i32Bits(0b00000001111111111111111111111111), expected: i32Bits(0b11111111111111111111111110000000) }, + { input: i32Bits(0b00000011111111111111111111111111), expected: i32Bits(0b11111111111111111111111111000000) }, + { input: i32Bits(0b00000111111111111111111111111111), expected: i32Bits(0b11111111111111111111111111100000) }, + { input: i32Bits(0b00001111111111111111111111111111), expected: i32Bits(0b11111111111111111111111111110000) }, + { input: i32Bits(0b00011111111111111111111111111111), expected: i32Bits(0b11111111111111111111111111111000) }, + { input: i32Bits(0b00111111111111111111111111111111), expected: i32Bits(0b11111111111111111111111111111100) }, + { input: i32Bits(0b01111111111111111111111111111111), expected: i32Bits(0b11111111111111111111111111111110) }, + { input: i32Bits(0b11111111111111111111111111111111), expected: i32Bits(0b11111111111111111111111111111111) }, - // random after leading 1 - { - input: i32Bits(0b00000000000000000000000000000110), - expected: i32Bits(0b01100000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000001101), - expected: i32Bits(0b10110000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000011101), - expected: i32Bits(0b10111000000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000000111001), - expected: i32Bits(0b10011100000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000001101111), - expected: i32Bits(0b11110110000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000011111111), - expected: i32Bits(0b11111111000000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000000111101111), - expected: i32Bits(0b11110111100000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000001111111111), - expected: i32Bits(0b11111111110000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000011111110001), - expected: i32Bits(0b10001111111000000000000000000000), - }, - { - input: i32Bits(0b00000000000000000000111011011101), - expected: i32Bits(0b10111011011100000000000000000000), - }, - { - input: i32Bits(0b00000000000000000001101101111111), - expected: i32Bits(0b11111110110110000000000000000000), - }, - { - input: i32Bits(0b00000000000000000011111111011111), - expected: i32Bits(0b11111011111111000000000000000000), - }, - { - input: i32Bits(0b00000000000000000101111001110101), - expected: i32Bits(0b10101110011110100000000000000000), - }, - { - input: i32Bits(0b00000000000000001101111011110111), - expected: i32Bits(0b11101111011110110000000000000000), - }, - { - input: i32Bits(0b00000000000000011111111111110011), - expected: i32Bits(0b11001111111111111000000000000000), - }, - { - input: i32Bits(0b00000000000000111111111110111111), - expected: i32Bits(0b11111101111111111100000000000000), - }, - { - input: i32Bits(0b00000000000001111111011111111111), - expected: i32Bits(0b11111111111011111110000000000000), - }, - { - input: i32Bits(0b00000000000011111111111111111111), - expected: i32Bits(0b11111111111111111111000000000000), - }, - { - input: i32Bits(0b00000000000111110101011110111111), - expected: i32Bits(0b11111101111010101111100000000000), - }, - { - input: i32Bits(0b00000000001111101111111111110111), - expected: i32Bits(0b11101111111111110111110000000000), - }, - { - input: i32Bits(0b00000000011111111111010000101111), - expected: i32Bits(0b11110100001011111111111000000000), - }, - { - input: i32Bits(0b00000000111111111111001111111011), - expected: i32Bits(0b11011111110011111111111100000000), - }, - { - input: i32Bits(0b00000001111111011111101111111111), - expected: i32Bits(0b11111111110111111011111110000000), - }, - { - input: i32Bits(0b00000011101011111011110111111011), - expected: i32Bits(0b11011111101111011111010111000000), - }, - { - input: i32Bits(0b00000111111110111111111111111111), - expected: i32Bits(0b11111111111111111101111111100000), - }, - { - input: i32Bits(0b00001111000000011011011110111111), - expected: i32Bits(0b11111101111011011000000011110000), - }, - { - input: i32Bits(0b00011110101111011111111111111111), - expected: i32Bits(0b11111111111111111011110101111000), - }, - { - input: i32Bits(0b00110110111111100111111110111101), - expected: i32Bits(0b10111101111111100111111101101100), - }, - { - input: i32Bits(0b01010111111101111111011111011111), - expected: i32Bits(0b11111011111011111110111111101010), - }, - { - input: i32Bits(0b11100010011110101101101110101111), - expected: i32Bits(0b11110101110110110101111001000111), - }, - ]); - }); + // random after leading 1 + { input: i32Bits(0b00000000000000000000000000000110), expected: i32Bits(0b01100000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000001101), expected: i32Bits(0b10110000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000011101), expected: i32Bits(0b10111000000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000000111001), expected: i32Bits(0b10011100000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000001101111), expected: i32Bits(0b11110110000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000011111111), expected: i32Bits(0b11111111000000000000000000000000) }, + { input: i32Bits(0b00000000000000000000000111101111), expected: i32Bits(0b11110111100000000000000000000000) }, + { input: i32Bits(0b00000000000000000000001111111111), expected: i32Bits(0b11111111110000000000000000000000) }, + { input: i32Bits(0b00000000000000000000011111110001), expected: i32Bits(0b10001111111000000000000000000000) }, + { input: i32Bits(0b00000000000000000000111011011101), expected: i32Bits(0b10111011011100000000000000000000) }, + { input: i32Bits(0b00000000000000000001101101111111), expected: i32Bits(0b11111110110110000000000000000000) }, + { input: i32Bits(0b00000000000000000011111111011111), expected: i32Bits(0b11111011111111000000000000000000) }, + { input: i32Bits(0b00000000000000000101111001110101), expected: i32Bits(0b10101110011110100000000000000000) }, + { input: i32Bits(0b00000000000000001101111011110111), expected: i32Bits(0b11101111011110110000000000000000) }, + { input: i32Bits(0b00000000000000011111111111110011), expected: i32Bits(0b11001111111111111000000000000000) }, + { input: i32Bits(0b00000000000000111111111110111111), expected: i32Bits(0b11111101111111111100000000000000) }, + { input: i32Bits(0b00000000000001111111011111111111), expected: i32Bits(0b11111111111011111110000000000000) }, + { input: i32Bits(0b00000000000011111111111111111111), expected: i32Bits(0b11111111111111111111000000000000) }, + { input: i32Bits(0b00000000000111110101011110111111), expected: i32Bits(0b11111101111010101111100000000000) }, + { input: i32Bits(0b00000000001111101111111111110111), expected: i32Bits(0b11101111111111110111110000000000) }, + { input: i32Bits(0b00000000011111111111010000101111), expected: i32Bits(0b11110100001011111111111000000000) }, + { input: i32Bits(0b00000000111111111111001111111011), expected: i32Bits(0b11011111110011111111111100000000) }, + { input: i32Bits(0b00000001111111011111101111111111), expected: i32Bits(0b11111111110111111011111110000000) }, + { input: i32Bits(0b00000011101011111011110111111011), expected: i32Bits(0b11011111101111011111010111000000) }, + { input: i32Bits(0b00000111111110111111111111111111), expected: i32Bits(0b11111111111111111101111111100000) }, + { input: i32Bits(0b00001111000000011011011110111111), expected: i32Bits(0b11111101111011011000000011110000) }, + { input: i32Bits(0b00011110101111011111111111111111), expected: i32Bits(0b11111111111111111011110101111000) }, + { input: i32Bits(0b00110110111111100111111110111101), expected: i32Bits(0b10111101111111100111111101101100) }, + { input: i32Bits(0b01010111111101111111011111011111), expected: i32Bits(0b11111011111011111110111111101010) }, + { input: i32Bits(0b11100010011110101101101110101111), expected: i32Bits(0b11110101110110110101111001000111) }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.cache.js new file mode 100644 index 00000000000..12184af16a2 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.cache.js @@ -0,0 +1,24 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// See https://github.com/gpuweb/cts/issues/2766 for details +const kIssue2766Value = { + abstract: 0x8000_0000_0000_0000, + f32: 0x8000_0000, + f16: 0x8000 +}; + +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [kIssue2766Value[trait], ...FP[trait].scalarRange()], + 'unfiltered', + FP[trait].roundInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('round', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.spec.js index d6366e5bba2..570f60ed9e8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/round.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'round' builtin function S is AbstractFloat, f32, f16 @@ -10,67 +10,50 @@ Result is the integer k nearest to e, as a floating point value. When e lies halfway between integers k and k+1, the result is k when k is even, and k+1 when k is odd. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; -import { allInputSources, run } from '../../expression.js'; +import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; +import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; -import { builtin } from './builtin.js'; +import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './round.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('round', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - 0x80000000, // https://github.com/gpuweb/cts/issues/2766, - ...fullF32Range(), - ], - - 'unfiltered', - FP.f32.roundInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - 0x8000, // https://github.com/gpuweb/cts/issues/2766 - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.roundInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run(t, abstractBuiltin('round'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('round'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('round'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('round'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('round'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.cache.js new file mode 100644 index 00000000000..5552284c2e4 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.cache.js @@ -0,0 +1,18 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [...linearRange(0.0, 1.0, 20), ...FP[trait].scalarRange()], + 'unfiltered', + FP[trait].saturateInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('saturate', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.spec.js index f2d997d487d..2b63e330546 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/saturate.spec.js @@ -1,98 +1,62 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'saturate' builtin function S is AbstractFloat, f32, or f16 T is S or vecN @const fn saturate(e: T) -> T Returns clamp(e, 0.0, 1.0). Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF16Range, fullF32Range, fullF64Range, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './saturate.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('saturate', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // Non-clamped values - ...linearRange(0.0, 1.0, 20), - ...fullF32Range(), - ], - - 'unfiltered', - FP.f32.saturateInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // Non-clamped values - ...linearRange(0.0, 1.0, 20), - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.saturateInterval - ); - }, - abstract: () => { - return FP.abstract.generateScalarToIntervalCases( - [ - // Non-clamped values - ...linearRange(0.0, 1.0, 20), - ...fullF64Range(), - ], - - 'unfiltered', - FP.abstract.saturateInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run( + t, + abstractBuiltin('saturate'), + [TypeAbstractFloat], + TypeAbstractFloat, + t.params, + cases + ); +}); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('saturate'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run( - t, - abstractBuiltin('saturate'), - [TypeAbstractFloat], - TypeAbstractFloat, - t.params, - cases - ); - }); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('saturate'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('saturate'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('saturate'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/select.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/select.spec.js index 0718bebefd6..4c681e49cdf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/select.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/select.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'select' builtin function T is scalar, abstract numeric type, or vector @@ -10,10 +10,10 @@ Returns t when cond is true, and f otherwise. T is scalar or abstract numeric type @const fn select(f: vecN, t: vecN, cond: vecN) -> vecN Component-wise selection. Result component i is evaluated as select(f[i],t[i],cond[i]). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { + TypeVec, TypeBool, TypeF32, @@ -30,10 +30,13 @@ import { vec2, vec3, vec4, -} from '../../../../../util/conversion.js'; + abstractFloat, + TypeAbstractFloat } from +'../../../../../util/conversion.js'; + import { run, allInputSources } from '../../expression.js'; -import { builtin } from './builtin.js'; +import { abstractBuiltin, builtin } from './builtin.js'; export const g = makeTestGroup(GPUTest); @@ -41,203 +44,211 @@ function makeBool(n) { return bool((n & 1) === 1); } + + const dataType = { b: { type: TypeBool, - constructor: makeBool, + constructor: makeBool + }, + af: { + type: TypeAbstractFloat, + constructor: abstractFloat }, f: { type: TypeF32, - constructor: f32, + constructor: f32 }, h: { type: TypeF16, - constructor: f16, + constructor: f16 }, i: { type: TypeI32, - constructor: i32, + constructor: i32 }, u: { type: TypeU32, - constructor: u32, - }, + constructor: u32 + } }; -g.test('scalar') - .specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions') - .desc(`scalar tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('component', ['b', 'f', 'h', 'i', 'u']) - .combine('overload', ['scalar', 'vec2', 'vec3', 'vec4']) - ) - .beforeAllSubcases(t => { - if (t.params.component === 'h') { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +g.test('scalar'). +specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions'). +desc(`scalar tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('component', ['b', 'af', 'f', 'h', 'i', 'u']). +combine('overload', ['scalar', 'vec2', 'vec3', 'vec4']) +). +beforeAllSubcases((t) => { + if (t.params.component === 'h') { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); + } + t.skipIf(t.params.component === 'af' && t.params.inputSource !== 'const'); +}). +fn(async (t) => { + const componentType = dataType[t.params.component].type; + const cons = dataType[t.params.component].constructor; + + // Create the scalar values that will be selected from, either as scalars + // or vectors. + // + // Each boolean will select between c[k] and c[k+4]. Those values must + // always compare as different. The tricky case is boolean, where the parity + // has to be different, i.e. c[k]-c[k+4] must be odd. + const c = [0, 1, 2, 3, 5, 6, 7, 8].map((i) => cons(i)); + // Now form vectors that will have different components from each other. + const v2a = vec2(c[0], c[1]); + const v2b = vec2(c[4], c[5]); + const v3a = vec3(c[0], c[1], c[2]); + const v3b = vec3(c[4], c[5], c[6]); + const v4a = vec4(c[0], c[1], c[2], c[3]); + const v4b = vec4(c[4], c[5], c[6], c[7]); + + const overloads = { + scalar: { + type: componentType, + cases: [ + { input: [c[0], c[1], False], expected: c[0] }, + { input: [c[0], c[1], True], expected: c[1] }] + + }, + vec2: { + type: TypeVec(2, componentType), + cases: [ + { input: [v2a, v2b, False], expected: v2a }, + { input: [v2a, v2b, True], expected: v2b }] + + }, + vec3: { + type: TypeVec(3, componentType), + cases: [ + { input: [v3a, v3b, False], expected: v3a }, + { input: [v3a, v3b, True], expected: v3b }] + + }, + vec4: { + type: TypeVec(4, componentType), + cases: [ + { input: [v4a, v4b, False], expected: v4a }, + { input: [v4a, v4b, True], expected: v4b }] + } - }) - .fn(async t => { - const componentType = dataType[t.params.component].type; - const cons = dataType[t.params.component].constructor; + }; + const overload = overloads[t.params.overload]; - // Create the scalar values that will be selected from, either as scalars - // or vectors. - // - // Each boolean will select between c[k] and c[k+4]. Those values must - // always compare as different. The tricky case is boolean, where the parity - // has to be different, i.e. c[k]-c[k+4] must be odd. - const c = [0, 1, 2, 3, 5, 6, 7, 8].map(i => cons(i)); - // Now form vectors that will have different components from each other. - const v2a = vec2(c[0], c[1]); - const v2b = vec2(c[4], c[5]); - const v3a = vec3(c[0], c[1], c[2]); - const v3b = vec3(c[4], c[5], c[6]); - const v4a = vec4(c[0], c[1], c[2], c[3]); - const v4b = vec4(c[4], c[5], c[6], c[7]); + await run( + t, + t.params.component === 'af' ? abstractBuiltin('select') : builtin('select'), + [overload.type, overload.type, TypeBool], + overload.type, + t.params, + overload.cases + ); +}); - const overloads = { - scalar: { - type: componentType, - cases: [ - { input: [c[0], c[1], False], expected: c[0] }, - { input: [c[0], c[1], True], expected: c[1] }, - ], - }, - vec2: { - type: TypeVec(2, componentType), - cases: [ - { input: [v2a, v2b, False], expected: v2a }, - { input: [v2a, v2b, True], expected: v2b }, - ], - }, - vec3: { - type: TypeVec(3, componentType), - cases: [ - { input: [v3a, v3b, False], expected: v3a }, - { input: [v3a, v3b, True], expected: v3b }, - ], - }, - vec4: { - type: TypeVec(4, componentType), - cases: [ - { input: [v4a, v4b, False], expected: v4a }, - { input: [v4a, v4b, True], expected: v4b }, - ], - }, - }; - const overload = overloads[t.params.overload]; +g.test('vector'). +specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions'). +desc(`vector tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('component', ['b', 'af', 'f', 'h', 'i', 'u']). +combine('overload', ['vec2', 'vec3', 'vec4']) +). +beforeAllSubcases((t) => { + if (t.params.component === 'h') { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); + } + t.skipIf(t.params.component === 'af' && t.params.inputSource !== 'const'); +}). +fn(async (t) => { + const componentType = dataType[t.params.component].type; + const cons = dataType[t.params.component].constructor; - await run( - t, - builtin('select'), - [overload.type, overload.type, TypeBool], - overload.type, - t.params, - overload.cases - ); - }); + // Create the scalar values that will be selected from. + // + // Each boolean will select between c[k] and c[k+4]. Those values must + // always compare as different. The tricky case is boolean, where the parity + // has to be different, i.e. c[k]-c[k+4] must be odd. + const c = [0, 1, 2, 3, 5, 6, 7, 8].map((i) => cons(i)); + const T = True; + const F = False; -g.test('vector') - .specURL('https://www.w3.org/TR/WGSL/#logical-builtin-functions') - .desc(`vector tests`) - .params(u => - u - .combine('inputSource', allInputSources) - .combine('component', ['b', 'f', 'h', 'i', 'u']) - .combine('overload', ['vec2', 'vec3', 'vec4']) - ) - .beforeAllSubcases(t => { - if (t.params.component === 'h') { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - } - }) - .fn(async t => { - const componentType = dataType[t.params.component].type; - const cons = dataType[t.params.component].constructor; + let tests; - // Create the scalar values that will be selected from. - // - // Each boolean will select between c[k] and c[k+4]. Those values must - // always compare as different. The tricky case is boolean, where the parity - // has to be different, i.e. c[k]-c[k+4] must be odd. - const c = [0, 1, 2, 3, 5, 6, 7, 8].map(i => cons(i)); - const T = True; - const F = False; - - let tests; - - switch (t.params.overload) { - case 'vec2': { + switch (t.params.overload) { + case 'vec2':{ const a = vec2(c[0], c[1]); const b = vec2(c[4], c[5]); tests = { dataType: TypeVec(2, componentType), boolType: TypeVec(2, TypeBool), cases: [ - { input: [a, b, vec2(F, F)], expected: vec2(a.x, a.y) }, - { input: [a, b, vec2(F, T)], expected: vec2(a.x, b.y) }, - { input: [a, b, vec2(T, F)], expected: vec2(b.x, a.y) }, - { input: [a, b, vec2(T, T)], expected: vec2(b.x, b.y) }, - ], + { input: [a, b, vec2(F, F)], expected: vec2(a.x, a.y) }, + { input: [a, b, vec2(F, T)], expected: vec2(a.x, b.y) }, + { input: [a, b, vec2(T, F)], expected: vec2(b.x, a.y) }, + { input: [a, b, vec2(T, T)], expected: vec2(b.x, b.y) }] + }; break; } - case 'vec3': { + case 'vec3':{ const a = vec3(c[0], c[1], c[2]); const b = vec3(c[4], c[5], c[6]); tests = { dataType: TypeVec(3, componentType), boolType: TypeVec(3, TypeBool), cases: [ - { input: [a, b, vec3(F, F, F)], expected: vec3(a.x, a.y, a.z) }, - { input: [a, b, vec3(F, F, T)], expected: vec3(a.x, a.y, b.z) }, - { input: [a, b, vec3(F, T, F)], expected: vec3(a.x, b.y, a.z) }, - { input: [a, b, vec3(F, T, T)], expected: vec3(a.x, b.y, b.z) }, - { input: [a, b, vec3(T, F, F)], expected: vec3(b.x, a.y, a.z) }, - { input: [a, b, vec3(T, F, T)], expected: vec3(b.x, a.y, b.z) }, - { input: [a, b, vec3(T, T, F)], expected: vec3(b.x, b.y, a.z) }, - { input: [a, b, vec3(T, T, T)], expected: vec3(b.x, b.y, b.z) }, - ], + { input: [a, b, vec3(F, F, F)], expected: vec3(a.x, a.y, a.z) }, + { input: [a, b, vec3(F, F, T)], expected: vec3(a.x, a.y, b.z) }, + { input: [a, b, vec3(F, T, F)], expected: vec3(a.x, b.y, a.z) }, + { input: [a, b, vec3(F, T, T)], expected: vec3(a.x, b.y, b.z) }, + { input: [a, b, vec3(T, F, F)], expected: vec3(b.x, a.y, a.z) }, + { input: [a, b, vec3(T, F, T)], expected: vec3(b.x, a.y, b.z) }, + { input: [a, b, vec3(T, T, F)], expected: vec3(b.x, b.y, a.z) }, + { input: [a, b, vec3(T, T, T)], expected: vec3(b.x, b.y, b.z) }] + }; break; } - case 'vec4': { + case 'vec4':{ const a = vec4(c[0], c[1], c[2], c[3]); const b = vec4(c[4], c[5], c[6], c[7]); tests = { dataType: TypeVec(4, componentType), boolType: TypeVec(4, TypeBool), cases: [ - { input: [a, b, vec4(F, F, F, F)], expected: vec4(a.x, a.y, a.z, a.w) }, - { input: [a, b, vec4(F, F, F, T)], expected: vec4(a.x, a.y, a.z, b.w) }, - { input: [a, b, vec4(F, F, T, F)], expected: vec4(a.x, a.y, b.z, a.w) }, - { input: [a, b, vec4(F, F, T, T)], expected: vec4(a.x, a.y, b.z, b.w) }, - { input: [a, b, vec4(F, T, F, F)], expected: vec4(a.x, b.y, a.z, a.w) }, - { input: [a, b, vec4(F, T, F, T)], expected: vec4(a.x, b.y, a.z, b.w) }, - { input: [a, b, vec4(F, T, T, F)], expected: vec4(a.x, b.y, b.z, a.w) }, - { input: [a, b, vec4(F, T, T, T)], expected: vec4(a.x, b.y, b.z, b.w) }, - { input: [a, b, vec4(T, F, F, F)], expected: vec4(b.x, a.y, a.z, a.w) }, - { input: [a, b, vec4(T, F, F, T)], expected: vec4(b.x, a.y, a.z, b.w) }, - { input: [a, b, vec4(T, F, T, F)], expected: vec4(b.x, a.y, b.z, a.w) }, - { input: [a, b, vec4(T, F, T, T)], expected: vec4(b.x, a.y, b.z, b.w) }, - { input: [a, b, vec4(T, T, F, F)], expected: vec4(b.x, b.y, a.z, a.w) }, - { input: [a, b, vec4(T, T, F, T)], expected: vec4(b.x, b.y, a.z, b.w) }, - { input: [a, b, vec4(T, T, T, F)], expected: vec4(b.x, b.y, b.z, a.w) }, - { input: [a, b, vec4(T, T, T, T)], expected: vec4(b.x, b.y, b.z, b.w) }, - ], + { input: [a, b, vec4(F, F, F, F)], expected: vec4(a.x, a.y, a.z, a.w) }, + { input: [a, b, vec4(F, F, F, T)], expected: vec4(a.x, a.y, a.z, b.w) }, + { input: [a, b, vec4(F, F, T, F)], expected: vec4(a.x, a.y, b.z, a.w) }, + { input: [a, b, vec4(F, F, T, T)], expected: vec4(a.x, a.y, b.z, b.w) }, + { input: [a, b, vec4(F, T, F, F)], expected: vec4(a.x, b.y, a.z, a.w) }, + { input: [a, b, vec4(F, T, F, T)], expected: vec4(a.x, b.y, a.z, b.w) }, + { input: [a, b, vec4(F, T, T, F)], expected: vec4(a.x, b.y, b.z, a.w) }, + { input: [a, b, vec4(F, T, T, T)], expected: vec4(a.x, b.y, b.z, b.w) }, + { input: [a, b, vec4(T, F, F, F)], expected: vec4(b.x, a.y, a.z, a.w) }, + { input: [a, b, vec4(T, F, F, T)], expected: vec4(b.x, a.y, a.z, b.w) }, + { input: [a, b, vec4(T, F, T, F)], expected: vec4(b.x, a.y, b.z, a.w) }, + { input: [a, b, vec4(T, F, T, T)], expected: vec4(b.x, a.y, b.z, b.w) }, + { input: [a, b, vec4(T, T, F, F)], expected: vec4(b.x, b.y, a.z, a.w) }, + { input: [a, b, vec4(T, T, F, T)], expected: vec4(b.x, b.y, a.z, b.w) }, + { input: [a, b, vec4(T, T, T, F)], expected: vec4(b.x, b.y, b.z, a.w) }, + { input: [a, b, vec4(T, T, T, T)], expected: vec4(b.x, b.y, b.z, b.w) }] + }; break; } - } + } - await run( - t, - builtin('select'), - [tests.dataType, tests.dataType, tests.boolType], - tests.dataType, - t.params, - tests.cases - ); - }); + await run( + t, + t.params.component === 'af' ? abstractBuiltin('select') : builtin('select'), + [tests.dataType, tests.dataType, tests.boolType], + tests.dataType, + t.params, + tests.cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.cache.js new file mode 100644 index 00000000000..a090c5c83dc --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.cache.js @@ -0,0 +1,26 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { i32 } from '../../../../../util/conversion.js';import { FP } from '../../../../../util/floating_point.js';import { fullI32Range } from '../../../../../util/math.js'; +import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16|abstract] +const fp_cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].signInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('sign', { + ...fp_cases, + i32: () => + fullI32Range().map((i) => { + const signFunc = (i) => i < 0 ? -1 : i > 0 ? 1 : 0; + return { input: [i32(i)], expected: i32(signFunc(i)) }; + }) +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.spec.js index 4526f52f387..aeddf2b5581 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sign.spec.js @@ -1,77 +1,75 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'sign' builtin function S is AbstractFloat, AbstractInt, i32, f32, f16 T is S or vecN @const fn sign(e: T ) -> T Returns the sign of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { i32, TypeF32, TypeF16, TypeI32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, fullI32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; -import { allInputSources, run } from '../../expression.js'; +import { TypeAbstractFloat, TypeF16, TypeF32, TypeI32 } from '../../../../../util/conversion.js'; +import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; -import { builtin } from './builtin.js'; +import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './sign.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('sign', { - f32: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.signInterval); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.signInterval); - }, - i32: () => - fullI32Range().map(i => { - const signFunc = i => (i < 0 ? -1 : i > 0 ? 1 : 0); - return { input: [i32(i)], expected: i32(signFunc(i)) }; - }), +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#sign-builtin'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run(t, abstractBuiltin('sign'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#sign-builtin') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#sign-builtin'). +desc(`abstract int tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#sign-builtin') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#sign-builtin'). +desc(`i32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('i32'); + await run(t, builtin('sign'), [TypeI32], TypeI32, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#sign-builtin') - .desc(`i32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('i32'); - await run(t, builtin('sign'), [TypeI32], TypeI32, t.params, cases); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#sign-builtin'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('sign'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#sign-builtin') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('sign'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#sign-builtin') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('sign'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#sign-builtin'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('sign'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.cache.js new file mode 100644 index 00000000000..67825c91c6f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.cache.js @@ -0,0 +1,22 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [ + // Well-defined accuracy range + ...linearRange(-Math.PI, Math.PI, 100), + ...FP[trait].scalarRange()], + + 'unfiltered', + FP[trait].sinInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('sin', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.spec.js index 8883c65bad0..76224e1cace 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sin.spec.js @@ -1,81 +1,57 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'sin' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn sin(e: T ) -> T Returns the sine of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './sin.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('sin', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // Well-defined accuracy range - ...linearRange(-Math.PI, Math.PI, 1000), - ...fullF32Range(), - ], +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - 'unfiltered', - FP.f32.sinInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // Well-defined accuracy range - ...linearRange(-Math.PI, Math.PI, 1000), - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.sinInterval - ); - }, -}); - -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc( + ` f32 tests TODO(#792): Decide what the ground-truth is for these tests. [1] ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('sin'), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('sin'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('sin'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('sin'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.cache.js new file mode 100644 index 00000000000..4dadd1e1e3c --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.cache.js @@ -0,0 +1,19 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].sinhInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('sinh', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.spec.js index 62d3f63a16a..ffe701e6161 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sinh.spec.js @@ -1,63 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'sinh' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn sinh(e: T ) -> T Returns the hyperbolic sine of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './sinh.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('sinh', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'finite', FP.f32.sinhInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.sinhInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'finite', FP.f16.sinhInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.sinhInterval); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('sinh'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('sinh'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('sinh'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('sinh'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.cache.js new file mode 100644 index 00000000000..5af2eea9f01 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.cache.js @@ -0,0 +1,21 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarTripleToIntervalCases( + FP[trait].sparseScalarRange(), + FP[trait].sparseScalarRange(), + FP[trait].sparseScalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].smoothStepInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('smoothstep', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.spec.js index 33f29dcdbf9..52bda2bf77e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/smoothstep.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'smoothstep' builtin function S is AbstractFloat, f32, f16 @@ -9,81 +9,45 @@ T is S or vecN Returns the smooth Hermite interpolation between 0 and 1. Component-wise when T is a vector. For scalar T, the result is t * t * (3.0 - 2.0 * t), where t = clamp((x - low) / (high - low), 0.0, 1.0). -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { sparseF32Range, sparseF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './smoothstep.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('smoothstep', { - f32_const: () => { - return FP.f32.generateScalarTripleToIntervalCases( - sparseF32Range(), - sparseF32Range(), - sparseF32Range(), - 'finite', - FP.f32.smoothStepInterval - ); - }, - f32_non_const: () => { - return FP.f32.generateScalarTripleToIntervalCases( - sparseF32Range(), - sparseF32Range(), - sparseF32Range(), - 'unfiltered', - FP.f32.smoothStepInterval - ); - }, - f16_const: () => { - return FP.f16.generateScalarTripleToIntervalCases( - sparseF16Range(), - sparseF16Range(), - sparseF16Range(), - 'finite', - FP.f16.smoothStepInterval - ); - }, - f16_non_const: () => { - return FP.f16.generateScalarTripleToIntervalCases( - sparseF16Range(), - sparseF16Range(), - sparseF16Range(), - 'unfiltered', - FP.f16.smoothStepInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('smoothstep'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('smoothstep'), [TypeF32, TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('smoothstep'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('smoothstep'), [TypeF16, TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.cache.js new file mode 100644 index 00000000000..514a734274b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.cache.js @@ -0,0 +1,19 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16]_[non_]const +const cases = ['f32', 'f16']. +flatMap((trait) => +[true, false].map((nonConst) => ({ + [`${trait}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + nonConst ? 'unfiltered' : 'finite', + FP[trait].sqrtInterval + ); + } +})) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('sqrt', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.spec.js index 1f80ab40ef6..e01df292609 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/sqrt.spec.js @@ -1,63 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'sqrt' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn sqrt(e: T ) -> T Returns the square root of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './sqrt.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('sqrt', { - f32_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'finite', FP.f32.sqrtInterval); - }, - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.sqrtInterval); - }, - f16_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'finite', FP.f16.sqrtInterval); - }, - f16_non_const: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.sqrtInterval); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, builtin('sqrt'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, builtin('sqrt'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); - await run(t, builtin('sqrt'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f16_const' : 'f16_non_const'); + await run(t, builtin('sqrt'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.cache.js new file mode 100644 index 00000000000..96ac3a4f287 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.cache.js @@ -0,0 +1,41 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf } from '../../../../../util/compare.js';import { FP } from '../../../../../util/floating_point.js'; +import { makeCaseCache } from '../../case_cache.js'; + +// stepInterval's return value can't always be interpreted as a single acceptance +// interval, valid result may be 0.0 or 1.0 or both of them, but will never be a +// value in interval (0.0, 1.0). +// See the comment block on stepInterval for more details +const makeCase = (trait, edge, x) => { + const FPTrait = FP[trait]; + edge = FPTrait.quantize(edge); + x = FPTrait.quantize(x); + const expected = FPTrait.stepInterval(edge, x); + + // [0, 0], [1, 1], or [-∞, +∞] cases + if (expected.isPoint() || !expected.isFinite()) { + return { input: [FPTrait.scalarBuilder(edge), FPTrait.scalarBuilder(x)], expected }; + } + + // [0, 1] case, valid result is either 0.0 or 1.0. + const zeroInterval = FPTrait.toInterval(0); + const oneInterval = FPTrait.toInterval(1); + return { + input: [FPTrait.scalarBuilder(edge), FPTrait.scalarBuilder(x)], + expected: anyOf(zeroInterval, oneInterval) + }; +}; + +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait]. + scalarRange(). + flatMap((edge) => FP[trait].scalarRange().map((x) => makeCase(trait, edge, x))); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('step', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.spec.js index 100696aab29..15ab23462f9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/step.spec.js @@ -1,82 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'step' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn step(edge: T ,x: T ) -> T Returns 1.0 if edge ≤ x, and 0.0 otherwise. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { anyOf } from '../../../../../util/compare.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './step.cache.js'; export const g = makeTestGroup(GPUTest); -// stepInterval's return value can't always be interpreted as a single acceptance -// interval, valid result may be 0.0 or 1.0 or both of them, but will never be a -// value in interval (0.0, 1.0). -// See the comment block on stepInterval for more details -const makeCase = (trait, edge, x) => { - const FPTrait = FP[trait]; - edge = FPTrait.quantize(edge); - x = FPTrait.quantize(x); - const expected = FPTrait.stepInterval(edge, x); +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - // [0, 0], [1, 1], or [-∞, +∞] cases - if (expected.isPoint() || !expected.isFinite()) { - return { input: [FPTrait.scalarBuilder(edge), FPTrait.scalarBuilder(x)], expected }; - } - - // [0, 1] case, valid result is either 0.0 or 1.0. - const zeroInterval = FPTrait.toInterval(0); - const oneInterval = FPTrait.toInterval(1); - return { - input: [FPTrait.scalarBuilder(edge), FPTrait.scalarBuilder(x)], - expected: anyOf(zeroInterval, oneInterval), - }; -}; - -export const d = makeCaseCache('step', { - f32: () => { - return fullF32Range().flatMap(edge => fullF32Range().map(x => makeCase('f32', edge, x))); - }, - f16: () => { - return fullF16Range().flatMap(edge => fullF16Range().map(x => makeCase('f16', edge, x))); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('step'), [TypeF32, TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('step'), [TypeF32, TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('step'), [TypeF16, TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('step'), [TypeF16, TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/storageBarrier.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/storageBarrier.spec.js index ac7519ea921..f5f305c1182 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/storageBarrier.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/storageBarrier.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` 'storageBarrier' affects memory and atomic operations in the storage address space. All synchronization functions execute a control barrier with Acquire/Release memory ordering. @@ -13,27 +13,26 @@ functions use the Workgroup memory scope. All synchronization functions have a W execution scope. All synchronization functions must only be used in the compute shader stage. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions'). +desc( + ` All synchronization functions must only be used in the compute shader stage. ` - ) - .params(u => u.combine('stage', ['vertex', 'fragment', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['vertex', 'fragment', 'compute'])). +unimplemented(); -g.test('barrier') - .specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions') - .desc( - ` +g.test('barrier'). +specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions'). +desc( + ` fn storageBarrier() ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.cache.js new file mode 100644 index 00000000000..205cb6d6cfe --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.cache.js @@ -0,0 +1,22 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { linearRange } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + [ + // Well-defined accuracy range + ...linearRange(-Math.PI, Math.PI, 100), + ...FP[trait].scalarRange()], + + 'unfiltered', + FP[trait].tanInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('tan', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.spec.js index 206d62b2e99..335e0e229e4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tan.spec.js @@ -1,75 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'tan' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn tan(e: T ) -> T Returns the tangent of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range, linearRange } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './tan.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('tan', { - f32: () => { - return FP.f32.generateScalarToIntervalCases( - [ - // Defined accuracy range - ...linearRange(-Math.PI, Math.PI, 100), - ...fullF32Range(), - ], +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); - 'unfiltered', - FP.f32.tanInterval - ); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases( - [ - // Defined accuracy range - ...linearRange(-Math.PI, Math.PI, 100), - ...fullF16Range(), - ], - - 'unfiltered', - FP.f16.tanInterval - ); - }, +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('tan'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('tan'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('tan'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('tan'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.cache.js new file mode 100644 index 00000000000..d38767af979 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.cache.js @@ -0,0 +1,17 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16] +const cases = ['f32', 'f16']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].tanhInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('tanh', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.spec.js index b10e9f3f0f3..8e0d6bbe3ea 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/tanh.spec.js @@ -1,57 +1,51 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'tanh' builtin function S is AbstractFloat, f32, f16 T is S or vecN @const fn tanh(e: T ) -> T Returns the hyperbolic tangent of e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; -import { TypeF32, TypeF16 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF16Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; +import { TypeF16, TypeF32 } from '../../../../../util/conversion.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './tanh.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('tanh', { - f32: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.tanhInterval); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases(fullF16Range(), 'unfiltered', FP.f16.tanhInterval); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); + +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('tanh'), [TypeF32], TypeF32, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); - -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('tanh'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('tanh'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('tanh'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureDimension.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureDimension.spec.js index 9a5ef4d829d..8ed1e289ee4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureDimension.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureDimension.spec.js @@ -1,22 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureDimension' builtin function The dimensions of the texture in texels. For textures based on cubes, the results are the dimensions of each face of the cube. Cube faces are square, so the x and y components of the result are equal. If level is outside the range [0, textureNumLevels(t)) then any valid value for the return type may be returned. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled') - .specURL('https://www.w3.org/TR/WGSL/#texturedimensions') - .desc( - ` +g.test('sampled'). +specURL('https://www.w3.org/TR/WGSL/#texturedimensions'). +desc( + ` T: f32, i32, u32 fn textureDimensions(t: texture_1d) -> u32 @@ -39,28 +38,28 @@ Parameters: - The mip level, with level 0 containing a full size version of the texture. - If omitted, the dimensions of level 0 are returned. ` - ) - .params(u => - u - .combine('texture_type', [ - 'texture_1d', - 'texture_2d', - 'texture_2d_array', - 'texture_3d', - 'texture_cube', - 'texture_cube_array', - 'texture_multisampled_2d', - ]) - .beginSubcases() - .combine('sampled_type', ['f32-only', 'i32', 'u32']) - .combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', [ +'texture_1d', +'texture_2d', +'texture_2d_array', +'texture_3d', +'texture_cube', +'texture_cube_array', +'texture_multisampled_2d'] +). +beginSubcases(). +combine('sampled_type', ['f32-only', 'i32', 'u32']). +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('depth') - .specURL('https://www.w3.org/TR/WGSL/#texturedimensions') - .desc( - ` +g.test('depth'). +specURL('https://www.w3.org/TR/WGSL/#texturedimensions'). +desc( + ` fn textureDimensions(t: texture_depth_2d) -> vec2 fn textureDimensions(t: texture_depth_2d, level: u32) -> vec2 fn textureDimensions(t: texture_depth_2d_array) -> vec2 @@ -77,25 +76,25 @@ Parameters: - The mip level, with level 0 containing a full size version of the texture. - If omitted, the dimensions of level 0 are returned. ` - ) - .params(u => - u - .combine('texture_type', [ - 'texture_depth_2d', - 'texture_depth_2d_array', - 'texture_depth_cube', - 'texture_depth_cube_array', - 'texture_depth_multisampled_2d', - ]) - .beginSubcases() - .combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', [ +'texture_depth_2d', +'texture_depth_2d_array', +'texture_depth_cube', +'texture_depth_cube_array', +'texture_depth_multisampled_2d'] +). +beginSubcases(). +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('storage') - .specURL('https://www.w3.org/TR/WGSL/#texturedimensions') - .desc( - ` +g.test('storage'). +specURL('https://www.w3.org/TR/WGSL/#texturedimensions'). +desc( + ` F: rgba8unorm rgba8snorm rgba8uint @@ -122,40 +121,40 @@ fn textureDimensions(t: texture_storage_3d) -> vec3 Parameters: * t: the storage texture ` - ) - .params(u => - u - .combine('texel_format', [ - 'rgba8unorm', - 'rgba8snorm', - 'rgba8uint', - 'rgba8sint', - 'rgba16uint', - 'rgba16sint', - 'rgba16float', - 'r32uint', - 'r32sint', - 'r32float', - 'rg32uint', - 'rg32sint', - 'rg32float', - 'rgba32uint', - 'rgba32sint', - 'rgba32float', - ]) - .beginSubcases() - .combine('access_mode', ['read', 'write', 'read_write']) - ) - .unimplemented(); +). +params((u) => +u. +combine('texel_format', [ +'rgba8unorm', +'rgba8snorm', +'rgba8uint', +'rgba8sint', +'rgba16uint', +'rgba16sint', +'rgba16float', +'r32uint', +'r32sint', +'r32float', +'rg32uint', +'rg32sint', +'rg32float', +'rgba32uint', +'rgba32sint', +'rgba32float'] +). +beginSubcases(). +combine('access_mode', ['read', 'write', 'read_write']) +). +unimplemented(); -g.test('external') - .specURL('https://www.w3.org/TR/WGSL/#texturedimensions') - .desc( - ` +g.test('external'). +specURL('https://www.w3.org/TR/WGSL/#texturedimensions'). +desc( + ` fn textureDimensions(t: texture_external) -> vec2 Parameters: * t: the external texture ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGather.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGather.spec.js index 1ecd1283d1d..162832708f0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGather.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGather.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureGather' builtin function A texture gather operation reads from a 2D, 2D array, cube, or cube array texture, computing a four-component vector as follows: @@ -22,18 +22,17 @@ A texture gather operation reads from a 2D, 2D array, cube, or cube array textur y (umax,vmax) z (umax,vmin) w (umin,vmin) -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('sampled_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` C: i32, u32 T: i32, u32, f32 @@ -55,22 +54,22 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('T', ['f32-only', 'i32', 'u32']) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('T', ['f32-only', 'i32', 'u32']). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('sampled_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` C: i32, u32 T: i32, u32, f32 @@ -85,21 +84,21 @@ Parameters: * s: The sampler type * coords: The texture coordinates ` - ) - .paramsSubcasesOnly(u => - u - .combine('T', ['f32-only', 'i32', 'u32']) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(3)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('T', ['f32-only', 'i32', 'u32']). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(3)) +). +unimplemented(); -g.test('sampled_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('sampled_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` C: i32, u32 T: i32, u32, f32 @@ -122,25 +121,23 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('T', ['f32-only', 'i32', 'u32']) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'offset', - generateOffsets(2) - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('T', ['f32-only', 'i32', 'u32']). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('sampled_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` C: i32, u32 T: i32, u32, f32 @@ -156,23 +153,23 @@ Parameters: * coords: The texture coordinates * array_index: The 0-based texture array index ` - ) - .paramsSubcasesOnly( - u => - u - .combine('T', ['f32-only', 'i32', 'u32']) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(3)) - /* array_index not param'd as out-of-bounds is implementation specific */ - ) - .unimplemented(); +). +paramsSubcasesOnly( + (u) => + u. + combine('T', ['f32-only', 'i32', 'u32']). + combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). + combine('C', ['i32', 'u32']). + combine('C_value', [-1, 0, 1, 2, 3, 4]). + combine('coords', generateCoordBoundaries(3)) + /* array_index not param'd as out-of-bounds is implementation specific */ +). +unimplemented(); -g.test('depth_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('depth_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` fn textureGather(t: texture_depth_2d, s: sampler, coords: vec2) -> vec4 fn textureGather(t: texture_depth_2d, s: sampler, coords: vec2, offset: vec2) -> vec4 @@ -187,19 +184,19 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('depth_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('depth_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` fn textureGather(t: texture_depth_cube, s: sampler, coords: vec3) -> vec4 Parameters: @@ -207,18 +204,18 @@ Parameters: * s: The sampler type * coords: The texture coordinates ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)) +). +unimplemented(); -g.test('depth_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('depth_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` C: i32, u32 fn textureGather(t: texture_depth_2d_array, s: sampler, coords: vec2, array_index: C) -> vec4 @@ -236,23 +233,21 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'offset', - generateOffsets(2) - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('depth_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegather') - .desc( - ` +g.test('depth_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegather'). +desc( + ` C: i32, u32 fn textureGather(t: texture_depth_cube_array, s: sampler, coords: vec3, array_index: C) -> vec4 @@ -263,13 +258,13 @@ Parameters: * coords: The texture coordinates * array_index: The 0-based texture array index ` - ) - .paramsSubcasesOnly( - u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(3)) - /* array_index not param'd as out-of-bounds is implementation specific */ - ) - .unimplemented(); +). +paramsSubcasesOnly( + (u) => + u. + combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). + combine('C', ['i32', 'u32']). + combine('coords', generateCoordBoundaries(3)) + /* array_index not param'd as out-of-bounds is implementation specific */ +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGatherCompare.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGatherCompare.spec.js index ddb24c472e5..d029c8cdf5e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGatherCompare.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureGatherCompare.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureGatherCompare' builtin function A texture gather compare operation performs a depth comparison on four texels in a depth texture and collects the results into a single vector, as follows: @@ -16,18 +16,17 @@ A texture gather compare operation performs a depth comparison on four texels in y (umax,vmax) z (umax,vmin) w (umin,vmin) -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegathercompare') - .desc( - ` +g.test('array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegathercompare'). +desc( + ` C: i32, u32 fn textureGatherCompare(t: texture_depth_2d_array, s: sampler_comparison, coords: vec2, array_index: C, depth_ref: f32) -> vec4 @@ -46,22 +45,22 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegathercompare') - .desc( - ` +g.test('array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegathercompare'). +desc( + ` C: i32, u32 fn textureGatherCompare(t: texture_depth_cube_array, s: sampler_comparison, coords: vec3, array_index: C, depth_ref: f32) -> vec4 @@ -73,21 +72,21 @@ Parameters: * array_index: The 0-based array index. * depth_ref: The reference value to compare the sampled depth value against ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(3)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(3)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) +). +unimplemented(); -g.test('sampled_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegathercompare') - .desc( - ` +g.test('sampled_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegathercompare'). +desc( + ` fn textureGatherCompare(t: texture_depth_2d, s: sampler_comparison, coords: vec2, depth_ref: f32) -> vec4 fn textureGatherCompare(t: texture_depth_2d, s: sampler_comparison, coords: vec2, depth_ref: f32, offset: vec2) -> vec4 @@ -103,20 +102,20 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturegathercompare') - .desc( - ` +g.test('sampled_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturegathercompare'). +desc( + ` fn textureGatherCompare(t: texture_depth_cube, s: sampler_comparison, coords: vec3, depth_ref: f32) -> vec4 Parameters: @@ -125,11 +124,11 @@ Parameters: * coords: The texture coordinates * depth_ref: The reference value to compare the sampled depth value against ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureLoad.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureLoad.spec.js index c11d20554b5..269f841850b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureLoad.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureLoad.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureLoad' builtin function Reads a single texel from a texture without sampling or filtering. @@ -16,18 +16,17 @@ If an out of bounds access occurs, the built-in function returns one of: * The data for some texel within bounds of the texture * A vector (0,0,0,0) or (0,0,0,1) of the appropriate type for non-depth textures * 0.0 for depth textures -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled_1d') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('sampled_1d'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_1d, coords: C, level: C) -> vec4 @@ -37,19 +36,19 @@ Parameters: * coords: The 0-based texel coordinate * level: The mip level, with level 0 containing a full size version of the texture ` - ) - .params(u => - u - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(1)) - .combine('level', [-1, 0, `numlevels-1`, `numlevels`]) - ) - .unimplemented(); +). +params((u) => +u. +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(1)). +combine('level', [-1, 0, `numlevels-1`, `numlevels`]) +). +unimplemented(); -g.test('sampled_2d') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('sampled_2d'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_2d, coords: vec2, level: C) -> vec4 @@ -59,19 +58,19 @@ Parameters: * coords: The 0-based texel coordinate * level: The mip level, with level 0 containing a full size version of the texture ` - ) - .params(u => - u - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(2)) - .combine('level', [-1, 0, `numlevels-1`, `numlevels`]) - ) - .unimplemented(); +). +params((u) => +u. +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(2)). +combine('level', [-1, 0, `numlevels-1`, `numlevels`]) +). +unimplemented(); -g.test('sampled_3d') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('sampled_3d'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_3d, coords: vec3, level: C) -> vec4 @@ -81,19 +80,19 @@ Parameters: * coords: The 0-based texel coordinate * level: The mip level, with level 0 containing a full size version of the texture ` - ) - .params(u => - u - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(3)) - .combine('level', [-1, 0, `numlevels-1`, `numlevels`]) - ) - .unimplemented(); +). +params((u) => +u. +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(3)). +combine('level', [-1, 0, `numlevels-1`, `numlevels`]) +). +unimplemented(); -g.test('multisampled') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('multisampled'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_multisampled_2d, coords: vec2, sample_index: C)-> vec4 @@ -104,21 +103,24 @@ Parameters: * coords: The 0-based texel coordinate * sample_index: The 0-based sample index of the multisampled texture ` - ) - .params(u => - u - .combine('texture_type', ['texture_multisampled_2d', 'texture_depth_multisampled_2d']) - .beginSubcases() - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(2)) - .combine('sample_index', [-1, 0, `sampleCount-1`, `sampleCount`]) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', [ +'texture_multisampled_2d', +'texture_depth_multisampled_2d'] +). +beginSubcases(). +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(2)). +combine('sample_index', [-1, 0, `sampleCount-1`, `sampleCount`]) +). +unimplemented(); -g.test('depth') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('depth'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_depth_2d, coords: vec2, level: C) -> f32 @@ -128,19 +130,19 @@ Parameters: * coords: The 0-based texel coordinate * level: The mip level, with level 0 containing a full size version of the texture ` - ) - .paramsSubcasesOnly(u => - u - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(2)) - .combine('level', [-1, 0, `numlevels-1`, `numlevels`]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(2)). +combine('level', [-1, 0, `numlevels-1`, `numlevels`]) +). +unimplemented(); -g.test('external') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('external'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_external, coords: vec2) -> vec4 @@ -149,16 +151,16 @@ Parameters: * t: The sampled texture to read from * coords: The 0-based texel coordinate ` - ) - .paramsSubcasesOnly(u => - u.combine('C', ['i32', 'u32']).combine('coords', generateCoordBoundaries(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u.combine('C', ['i32', 'u32']).combine('coords', generateCoordBoundaries(2)) +). +unimplemented(); -g.test('arrayed') - .specURL('https://www.w3.org/TR/WGSL/#textureload') - .desc( - ` +g.test('arrayed'). +specURL('https://www.w3.org/TR/WGSL/#textureload'). +desc( + ` C is i32 or u32 fn textureLoad(t: texture_2d_array, coords: vec2, array_index: C, level: C) -> vec4 @@ -170,14 +172,14 @@ Parameters: * array_index: The 0-based texture array index * level: The mip level, with level 0 containing a full size version of the texture ` - ) - .params(u => - u - .combine('texture_type', ['texture_2d_array', 'texture_depth_2d_array']) - .beginSubcases() - .combine('C', ['i32', 'u32']) - .combine('coords', generateCoordBoundaries(2)) - .combine('array_index', [-1, 0, `numlayers-1`, `numlayers`]) - .combine('level', [-1, 0, `numlevels-1`, `numlevels`]) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', ['texture_2d_array', 'texture_depth_2d_array']). +beginSubcases(). +combine('C', ['i32', 'u32']). +combine('coords', generateCoordBoundaries(2)). +combine('array_index', [-1, 0, `numlayers-1`, `numlayers`]). +combine('level', [-1, 0, `numlevels-1`, `numlevels`]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLayers.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLayers.spec.js index 5b0372289da..30eeed0e882 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLayers.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLayers.spec.js @@ -1,19 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureNumLayers' builtin function Returns the number of layers (elements) of an array texture. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled') - .specURL('https://www.w3.org/TR/WGSL/#texturenumlayers') - .desc( - ` +g.test('sampled'). +specURL('https://www.w3.org/TR/WGSL/#texturenumlayers'). +desc( + ` T, a sampled type. fn textureNumLayers(t: texture_2d_array) -> u32 @@ -22,33 +21,35 @@ fn textureNumLayers(t: texture_cube_array) -> u32 Parameters * t The sampled array texture. ` - ) - .params(u => - u - .combine('texture_type', ['texture_2d_array', 'texture_cube_array']) - .beginSubcases() - .combine('sampled_type', ['f32-only', 'i32', 'u32']) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', ['texture_2d_array', 'texture_cube_array']). +beginSubcases(). +combine('sampled_type', ['f32-only', 'i32', 'u32']) +). +unimplemented(); -g.test('arrayed') - .specURL('https://www.w3.org/TR/WGSL/#texturenumlayers') - .desc( - ` +g.test('arrayed'). +specURL('https://www.w3.org/TR/WGSL/#texturenumlayers'). +desc( + ` fn textureNumLayers(t: texture_depth_2d_array) -> u32 fn textureNumLayers(t: texture_depth_cube_array) -> u32 Parameters * t The depth array texture. ` - ) - .params(u => u.combine('texture_type', ['texture_depth_2d_array', 'texture_depth_cube_array'])) - .unimplemented(); +). +params((u) => +u.combine('texture_type', ['texture_depth_2d_array', 'texture_depth_cube_array']) +). +unimplemented(); -g.test('storage') - .specURL('https://www.w3.org/TR/WGSL/#texturenumlayers') - .desc( - ` +g.test('storage'). +specURL('https://www.w3.org/TR/WGSL/#texturenumlayers'). +desc( + ` F: rgba8unorm rgba8snorm rgba8uint @@ -72,28 +73,28 @@ fn textureNumLayers(t: texture_storage_2d_array) -> u32 Parameters * t The sampled storage array texture. ` - ) - .params(u => - u - .beginSubcases() - .combine('texel_format', [ - 'rgba8unorm', - 'rgba8snorm', - 'rgba8uint', - 'rgba8sint', - 'rgba16uint', - 'rgba16sint', - 'rgba16float', - 'r32uint', - 'r32sint', - 'r32float', - 'rg32uint', - 'rg32sint', - 'rg32float', - 'rgba32uint', - 'rgba32sint', - 'rgba32float', - ]) - .combine('access_mode', ['read', 'write', 'read_write']) - ) - .unimplemented(); +). +params((u) => +u. +beginSubcases(). +combine('texel_format', [ +'rgba8unorm', +'rgba8snorm', +'rgba8uint', +'rgba8sint', +'rgba16uint', +'rgba16sint', +'rgba16float', +'r32uint', +'r32sint', +'r32float', +'rg32uint', +'rg32sint', +'rg32float', +'rgba32uint', +'rgba32sint', +'rgba32float'] +). +combine('access_mode', ['read', 'write', 'read_write']) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLevels.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLevels.spec.js index ae59dd99bbe..69af41b79ec 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLevels.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumLevels.spec.js @@ -1,19 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureNumLevels' builtin function Returns the number of mip levels of a texture. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled') - .specURL('https://www.w3.org/TR/WGSL/#texturenumlevels') - .desc( - ` +g.test('sampled'). +specURL('https://www.w3.org/TR/WGSL/#texturenumlevels'). +desc( + ` T, a sampled type. fn textureNumLevels(t: texture_1d) -> u32 @@ -26,26 +25,26 @@ fn textureNumLevels(t: texture_cube_array) -> u32 Parameters * t The sampled array texture. ` - ) - .params(u => - u - .combine('texture_type', [ - 'texture_1d', - 'texture_2d', - 'texture_2d_array', - 'texture_3d', - 'texture_cube', - 'texture_cube_array`', - ]) - .beginSubcases() - .combine('sampled_type', ['f32-only', 'i32', 'u32']) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', [ +'texture_1d', +'texture_2d', +'texture_2d_array', +'texture_3d', +'texture_cube', +'texture_cube_array`'] +). +beginSubcases(). +combine('sampled_type', ['f32-only', 'i32', 'u32']) +). +unimplemented(); -g.test('depth') - .specURL('https://www.w3.org/TR/WGSL/#texturenumlevels') - .desc( - ` +g.test('depth'). +specURL('https://www.w3.org/TR/WGSL/#texturenumlevels'). +desc( + ` fn textureNumLevels(t: texture_depth_2d) -> u32 fn textureNumLevels(t: texture_depth_2d_array) -> u32 fn textureNumLevels(t: texture_depth_cube) -> u32 @@ -54,13 +53,13 @@ fn textureNumLevels(t: texture_depth_cube_array) -> u32 Parameters * t The depth array texture. ` - ) - .params(u => - u.combine('texture_type', [ - 'texture_depth_2d', - 'texture_depth_2d_array', - 'texture_depth_cube', - 'texture_depth_cube_array', - ]) - ) - .unimplemented(); +). +params((u) => +u.combine('texture_type', [ +'texture_depth_2d', +'texture_depth_2d_array', +'texture_depth_cube', +'texture_depth_cube_array'] +) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumSamples.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumSamples.spec.js index 620d1a7e9dc..c192bffe04b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumSamples.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureNumSamples.spec.js @@ -1,19 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureNumSamples' builtin function Returns the number samples per texel in a multisampled texture. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled') - .specURL('https://www.w3.org/TR/WGSL/#texturenumsamples') - .desc( - ` +g.test('sampled'). +specURL('https://www.w3.org/TR/WGSL/#texturenumsamples'). +desc( + ` T, a sampled type. fn textureNumSamples(t: texture_multisampled_2d) -> u32 @@ -21,18 +20,18 @@ fn textureNumSamples(t: texture_multisampled_2d) -> u32 Parameters * t The multisampled texture. ` - ) - .params(u => u.beginSubcases().combine('sampled_type', ['f32-only', 'i32', 'u32'])) - .unimplemented(); +). +params((u) => u.beginSubcases().combine('sampled_type', ['f32-only', 'i32', 'u32'])). +unimplemented(); -g.test('depth') - .specURL('https://www.w3.org/TR/WGSL/#texturenumsamples') - .desc( - ` +g.test('depth'). +specURL('https://www.w3.org/TR/WGSL/#texturenumsamples'). +desc( + ` fn textureNumSamples(t: texture_depth_multisampled_2d) -> u32 Parameters * t The multisampled texture. ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSample.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSample.spec.js index 6d39c22531d..7e4bbd77441 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSample.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSample.spec.js @@ -1,42 +1,41 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Samples a texture. Must only be used in a fragment shader stage. Must only be invoked in uniform control flow. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` Tests that 'textureSample' can only be called in 'fragment' shaders. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('control_flow') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('control_flow'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` Tests that 'textureSample' can only be called in uniform control flow. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('sampled_1d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('sampled_1d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` fn textureSample(t: texture_1d, s: sampler, coords: f32) -> vec4 Parameters: @@ -44,18 +43,18 @@ Parameters: * s The sampler type. * coords The texture coordinates used for sampling. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(1)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(1)) +). +unimplemented(); -g.test('sampled_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('sampled_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` fn textureSample(t: texture_2d, s: sampler, coords: vec2) -> vec4 fn textureSample(t: texture_2d, s: sampler, coords: vec2, offset: vec2) -> vec4 @@ -70,19 +69,19 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('sampled_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` fn textureSample(t: texture_3d, s: sampler, coords: vec3) -> vec4 fn textureSample(t: texture_3d, s: sampler, coords: vec3, offset: vec3) -> vec4 fn textureSample(t: texture_cube, s: sampler, coords: vec3) -> vec4 @@ -98,21 +97,21 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .params(u => - u - .combine('texture_type', ['texture_3d', 'texture_cube']) - .beginSubcases() - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('offset', generateOffsets(3)) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', ['texture_3d', 'texture_cube']). +beginSubcases(). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('offset', generateOffsets(3)) +). +unimplemented(); -g.test('depth_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('depth_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` fn textureSample(t: texture_depth_2d, s: sampler, coords: vec2) -> f32 fn textureSample(t: texture_depth_2d, s: sampler, coords: vec2, offset: vec2) -> f32 @@ -127,19 +126,19 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('sampled_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` C is i32 or u32 fn textureSample(t: texture_2d_array, s: sampler, coords: vec2, array_index: C) -> vec4 @@ -157,24 +156,22 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'offset', - generateOffsets(2) - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('sampled_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` C is i32 or u32 fn textureSample(t: texture_cube_array, s: sampler, coords: vec3, array_index: C) -> vec4 @@ -185,22 +182,22 @@ Parameters: * coords The texture coordinates used for sampling. * array_index The 0-based texture array index to sample. ` - ) - .paramsSubcasesOnly( - u => - u - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - /* array_index not param'd as out-of-bounds is implementation specific */ - ) - .unimplemented(); +). +paramsSubcasesOnly( + (u) => + u. + combine('C', ['i32', 'u32']). + combine('C_value', [-1, 0, 1, 2, 3, 4]). + combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). + combine('coords', generateCoordBoundaries(3)) + /* array_index not param'd as out-of-bounds is implementation specific */ +). +unimplemented(); -g.test('depth_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('depth_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` fn textureSample(t: texture_depth_cube, s: sampler, coords: vec3) -> f32 Parameters: @@ -208,18 +205,18 @@ Parameters: * s The sampler type. * coords The texture coordinates used for sampling. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)) +). +unimplemented(); -g.test('depth_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('depth_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` C is i32 or u32 fn textureSample(t: texture_depth_2d_array, s: sampler, coords: vec2, array_index: C) -> f32 @@ -237,24 +234,22 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'offset', - generateOffsets(2) - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('depth_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesample') - .desc( - ` +g.test('depth_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesample'). +desc( + ` C is i32 or u32 fn textureSample(t: texture_depth_cube_array, s: sampler, coords: vec3, array_index: C) -> f32 @@ -265,14 +260,14 @@ Parameters: * coords The texture coordinates used for sampling. * array_index The 0-based texture array index to sample. ` - ) - .paramsSubcasesOnly( - u => - u - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - /* array_index not param'd as out-of-bounds is implementation specific */ - ) - .unimplemented(); +). +paramsSubcasesOnly( + (u) => + u. + combine('C', ['i32', 'u32']). + combine('C_value', [-1, 0, 1, 2, 3, 4]). + combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). + combine('coords', generateCoordBoundaries(3)) + /* array_index not param'd as out-of-bounds is implementation specific */ +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleBias.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleBias.spec.js index f74b3a0ba0d..7594f3ad5ab 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleBias.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleBias.spec.js @@ -1,43 +1,42 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'textureSampleBias' builtin function Samples a texture with a bias to the mip level. Must only be used in a fragment shader stage. Must only be invoked in uniform control flow. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplebias') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplebias'). +desc( + ` Tests that 'textureSampleBias' can only be called in 'fragment' shaders. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('control_flow') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplebias') - .desc( - ` +g.test('control_flow'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplebias'). +desc( + ` Tests that 'textureSampleBias' can only be called in uniform control flow. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('sampled_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplebias') - .desc( - ` +g.test('sampled_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplebias'). +desc( + ` fn textureSampleBias(t: texture_2d, s: sampler, coords: vec2, bias: f32) -> vec4 fn textureSampleBias(t: texture_2d, s: sampler, coords: vec2, bias: f32, offset: vec2) -> vec4 @@ -53,20 +52,20 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('bias', [-16.1, -16, 0, 1, 15.99, 16]) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('bias', [-16.1, -16, 0, 1, 15.99, 16]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplebias') - .desc( - ` +g.test('sampled_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplebias'). +desc( + ` fn textureSampleBias(t: texture_3d, s: sampler, coords: vec3, bias: f32) -> vec4 fn textureSampleBias(t: texture_3d, s: sampler, coords: vec3, bias: f32, offset: vec3) -> vec4 fn textureSampleBias(t: texture_cube, s: sampler, coords: vec3, bias: f32) -> vec4 @@ -83,22 +82,22 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .params(u => - u - .combine('texture_type', ['texture_3d', 'texture_cube']) - .beginSubcases() - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('bias', [-16.1, -16, 0, 1, 15.99, 16]) - .combine('offset', generateOffsets(3)) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', ['texture_3d', 'texture_cube']). +beginSubcases(). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('bias', [-16.1, -16, 0, 1, 15.99, 16]). +combine('offset', generateOffsets(3)) +). +unimplemented(); -g.test('arrayed_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplebias') - .desc( - ` +g.test('arrayed_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplebias'). +desc( + ` C: i32, u32 fn textureSampleBias(t: texture_2d_array, s: sampler, coords: vec2, array_index: C, bias: f32) -> vec4 @@ -117,29 +116,23 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine('bias', [ - -16.1, - -16, - 0, - 1, - 15.99, - 16, - ]) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('bias', [-16.1, -16, 0, 1, 15.99, 16]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('arrayed_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplebias') - .desc( - ` +g.test('arrayed_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplebias'). +desc( + ` C: i32, u32 fn textureSampleBias(t: texture_cube_array, s: sampler, coords: vec3, array_index: C, bias: f32) -> vec4 @@ -157,20 +150,14 @@ Parameters: - Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine('bias', [ - -16.1, - -16, - 0, - 1, - 15.99, - 16, - ]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('bias', [-16.1, -16, 0, 1, 15.99, 16]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompare.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompare.spec.js index c0a4c2b68aa..9f90e69f633 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompare.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompare.spec.js @@ -1,42 +1,41 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Samples a depth texture and compares the sampled depth values against a reference value. Must only be used in a fragment shader stage. Must only be invoked in uniform control flow. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare'). +desc( + ` Tests that 'textureSampleCompare' can only be called in 'fragment' shaders. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('control_flow') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare') - .desc( - ` +g.test('control_flow'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare'). +desc( + ` Tests that 'textureSampleCompare' can only be called in uniform control flow. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare') - .desc( - ` +g.test('2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare'). +desc( + ` fn textureSampleCompare(t: texture_depth_2d, s: sampler_comparison, coords: vec2, depth_ref: f32) -> f32 fn textureSampleCompare(t: texture_depth_2d, s: sampler_comparison, coords: vec2, depth_ref: f32, offset: vec2) -> f32 @@ -52,20 +51,20 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare') - .desc( - ` +g.test('3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare'). +desc( + ` fn textureSampleCompare(t: texture_depth_cube, s: sampler_comparison, coords: vec3, depth_ref: f32) -> f32 Parameters: @@ -74,19 +73,19 @@ Parameters: * coords The texture coordinates used for sampling. * depth_ref The reference value to compare the sampled depth value against. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) +). +unimplemented(); -g.test('arrayed_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare') - .desc( - ` +g.test('arrayed_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare'). +desc( + ` C is i32 or u32 fn textureSampleCompare(t: texture_depth_2d_array, s: sampler_comparison, coords: vec2, array_index: C, depth_ref: f32) -> f32 @@ -105,25 +104,23 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'depth_ref', - [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */] - ) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('arrayed_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare') - .desc( - ` +g.test('arrayed_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecompare'). +desc( + ` C is i32 or u32 fn textureSampleCompare(t: texture_depth_cube_array, s: sampler_comparison, coords: vec3, array_index: C, depth_ref: f32) -> f32 @@ -135,16 +132,14 @@ Parameters: * array_index: The 0-based texture array index to sample. * depth_ref The reference value to compare the sampled depth value against. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'depth_ref', - [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */] - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompareLevel.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompareLevel.spec.js index 24e7453b6da..f3db871107c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompareLevel.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleCompareLevel.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Samples a depth texture and compares the sampled depth values against a reference value. The textureSampleCompareLevel function is the same as textureSampleCompare, except that: @@ -9,38 +9,37 @@ The textureSampleCompareLevel function is the same as textureSampleCompare, exce * The function does not compute derivatives. * There is no requirement for textureSampleCompareLevel to be invoked in uniform control flow. * textureSampleCompareLevel may be invoked in any shader stage. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel'). +desc( + ` Tests that 'textureSampleCompareLevel' maybe called in any shader stage. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('control_flow') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel') - .desc( - ` +g.test('control_flow'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel'). +desc( + ` Tests that 'textureSampleCompareLevel' maybe called in non-uniform control flow. ` - ) - .params(u => u.combine('stage', ['fragment', 'vertex', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['fragment', 'vertex', 'compute'])). +unimplemented(); -g.test('2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel') - .desc( - ` +g.test('2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel'). +desc( + ` fn textureSampleCompareLevel(t: texture_depth_2d, s: sampler_comparison, coords: vec2, depth_ref: f32) -> f32 fn textureSampleCompareLevel(t: texture_depth_2d, s: sampler_comparison, coords: vec2, depth_ref: f32, offset: vec2) -> f32 @@ -56,20 +55,20 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel') - .desc( - ` +g.test('3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel'). +desc( + ` fn textureSampleCompareLevel(t: texture_depth_cube, s: sampler_comparison, coords: vec3, depth_ref: f32) -> f32 Parameters: @@ -78,19 +77,19 @@ Parameters: * coords The texture coordinates used for sampling. * depth_ref The reference value to compare the sampled depth value against. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) +). +unimplemented(); -g.test('arrayed_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel') - .desc( - ` +g.test('arrayed_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel'). +desc( + ` C is i32 or u32 fn textureSampleCompareLevel(t: texture_depth_2d_array, s: sampler_comparison, coords: vec2, array_index: C, depth_ref: f32) -> f32 @@ -109,25 +108,23 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'depth_ref', - [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */] - ) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('arrayed_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel') - .desc( - ` +g.test('arrayed_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplecomparelevel'). +desc( + ` C is i32 or u32 fn textureSampleCompareLevel(t: texture_depth_cube_array, s: sampler_comparison, coords: vec3, array_index: C, depth_ref: f32) -> f32 @@ -139,16 +136,14 @@ Parameters: * array_index: The 0-based texture array index to sample. * depth_ref The reference value to compare the sampled depth value against. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'depth_ref', - [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */] - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('depth_ref', [-1 /* smaller ref */, 0 /* equal ref */, 1 /* larger ref */]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleGrad.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleGrad.spec.js index bb77a66a272..dcf121f0388 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleGrad.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleGrad.spec.js @@ -1,19 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Samples a texture using explicit gradients. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad') - .desc( - ` +g.test('sampled_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad'). +desc( + ` fn textureSampleGrad(t: texture_2d, s: sampler, coords: vec2, ddx: vec2, ddy: vec2) -> vec4 fn textureSampleGrad(t: texture_2d, s: sampler, coords: vec2, ddx: vec2, ddy: vec2, offset: vec2) -> vec4 @@ -30,19 +29,19 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad') - .desc( - ` +g.test('sampled_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad'). +desc( + ` fn textureSampleGrad(t: texture_3d, s: sampler, coords: vec3, ddx: vec3, ddy: vec3) -> vec4 fn textureSampleGrad(t: texture_3d, s: sampler, coords: vec3, ddx: vec3, ddy: vec3, offset: vec3) -> vec4 fn textureSampleGrad(t: texture_cube, s: sampler, coords: vec3, ddx: vec3, ddy: vec3) -> vec4 @@ -60,19 +59,19 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('offset', generateOffsets(3)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('offset', generateOffsets(3)) +). +unimplemented(); -g.test('sampled_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad') - .desc( - ` +g.test('sampled_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad'). +desc( + ` C is i32 or u32 fn textureSampleGrad(t: texture_2d_array, s: sampler, coords: vec2, array_index: C, ddx: vec2, ddy: vec2) -> vec4 @@ -92,24 +91,22 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine( - 'offset', - generateOffsets(2) - ) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('offset', generateOffsets(2)) +). +unimplemented(); -g.test('sampled_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad') - .desc( - ` +g.test('sampled_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplegrad'). +desc( + ` C is i32 or u32 fn textureSampleGrad(t: texture_cube_array, s: sampler, coords: vec3, array_index: C, ddx: vec3, ddy: vec3) -> vec4 @@ -128,12 +125,12 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(3)) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(3)) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleLevel.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleLevel.spec.js index 5d3b8ca78cf..e2cdfff8038 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleLevel.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureSampleLevel.spec.js @@ -1,22 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Samples a texture. Must only be used in a fragment shader stage. Must only be invoked in uniform control flow. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { generateCoordBoundaries, generateOffsets } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('sampled_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('sampled_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` fn textureSampleLevel(t: texture_2d, s: sampler, coords: vec2, level: f32) -> vec4 fn textureSampleLevel(t: texture_2d, s: sampler, coords: vec2, level: f32, offset: vec2) -> vec4 @@ -36,20 +35,20 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - .combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)). +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('sampled_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('sampled_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` C is i32 or u32 fn textureSampleLevel(t: texture_2d_array, s: sampler, coords: vec2, array_index: C, level: f32) -> vec4 @@ -72,28 +71,23 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine('level', [ - undefined, - 0, - 1, - 'textureNumLevels', - 'textureNumLevels+1', - ]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('sampled_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('sampled_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` fn textureSampleLevel(t: texture_3d, s: sampler, coords: vec3, level: f32) -> vec4 fn textureSampleLevel(t: texture_3d, s: sampler, coords: vec3, level: f32, offset: vec3) -> vec4 fn textureSampleLevel(t: texture_cube, s: sampler, coords: vec3, level: f32) -> vec4 @@ -114,22 +108,22 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .params(u => - u - .combine('texture_type', ['texture_3d', 'texture_cube']) - .beginSubcases() - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('coords', generateCoordBoundaries(3)) - .combine('offset', generateOffsets(3)) - .combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', ['texture_3d', 'texture_cube']). +beginSubcases(). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('coords', generateCoordBoundaries(3)). +combine('offset', generateOffsets(3)). +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('sampled_array_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('sampled_array_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` C is i32 or u32 fn textureSampleLevel(t: texture_cube_array, s: sampler, coords: vec3, array_index: C, level: f32) -> vec4 @@ -151,28 +145,23 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(3)) - .combine('offset', generateOffsets(3)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine('level', [ - undefined, - 0, - 1, - 'textureNumLevels', - 'textureNumLevels+1', - ]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(3)). +combine('offset', generateOffsets(3)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('depth_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('depth_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` C is i32 or u32 fn textureSampleLevel(t: texture_depth_2d, s: sampler, coords: vec2, level: C) -> f32 @@ -194,22 +183,22 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - .combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)). +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('depth_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('depth_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` C is i32 or u32 fn textureSampleLevel(t: texture_depth_2d_array, s: sampler, coords: vec2, array_index: C, level: C) -> f32 @@ -232,28 +221,23 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .paramsSubcasesOnly(u => - u - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(2)) - .combine('offset', generateOffsets(2)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine('level', [ - undefined, - 0, - 1, - 'textureNumLevels', - 'textureNumLevels+1', - ]) - ) - .unimplemented(); +). +paramsSubcasesOnly((u) => +u. +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(2)). +combine('offset', generateOffsets(2)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); -g.test('depth_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel') - .desc( - ` +g.test('depth_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturesamplelevel'). +desc( + ` C is i32 or u32 fn textureSampleLevel(t: texture_depth_cube, s: sampler, coords: vec3, level: C) -> f32 @@ -275,21 +259,16 @@ Parameters: * Each offset component must be at least -8 and at most 7. Values outside of this range will result in a shader-creation error. ` - ) - .params(u => - u - .combine('texture_type', ['texture_depth_cube', 'texture_depth_cube_array']) - .beginSubcases() - .combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - .combine('coords', generateCoordBoundaries(3)) - /* array_index not param'd as out-of-bounds is implementation specific */ .combine('level', [ - undefined, - 0, - 1, - 'textureNumLevels', - 'textureNumLevels+1', - ]) - ) - .unimplemented(); +). +params((u) => +u. +combine('texture_type', ['texture_depth_cube', 'texture_depth_cube_array']). +beginSubcases(). +combine('S', ['clamp-to-edge', 'repeat', 'mirror-repeat']). +combine('C', ['i32', 'u32']). +combine('C_value', [-1, 0, 1, 2, 3, 4]). +combine('coords', generateCoordBoundaries(3)) +/* array_index not param'd as out-of-bounds is implementation specific */. +combine('level', [undefined, 0, 1, 'textureNumLevels', 'textureNumLevels+1']) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureStore.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureStore.spec.js index cd555f429bd..24ee130577f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureStore.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/textureStore.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Writes a single texel to a texture. The channel format T depends on the storage texel format F. @@ -13,8 +13,7 @@ Note: An out-of-bounds access occurs if: If an out-of-bounds access occurs, the built-in function may do any of the following: * not be executed * store value to some in bounds texel -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TexelFormats } from '../../../../types.js'; @@ -22,10 +21,10 @@ import { generateCoordBoundaries } from './utils.js'; export const g = makeTestGroup(GPUTest); -g.test('store_1d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturestore') - .desc( - ` +g.test('store_1d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturestore'). +desc( + ` C is i32 or u32 fn textureStore(t: texture_storage_1d, coords: C, value: vec4) @@ -36,20 +35,20 @@ Parameters: * coords The texture coordinates used for sampling. * value The new texel value ` - ) - .params(u => - u - .combineWithParams(TexelFormats) - .beginSubcases() - .combine('coords', generateCoordBoundaries(1)) - .combine('C', ['i32', 'u32']) - ) - .unimplemented(); +). +params((u) => +u. +combineWithParams(TexelFormats). +beginSubcases(). +combine('coords', generateCoordBoundaries(1)). +combine('C', ['i32', 'u32']) +). +unimplemented(); -g.test('store_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturestore') - .desc( - ` +g.test('store_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturestore'). +desc( + ` C is i32 or u32 fn textureStore(t: texture_storage_2d, coords: vec2, value: vec4) @@ -60,20 +59,20 @@ Parameters: * coords The texture coordinates used for sampling. * value The new texel value ` - ) - .params(u => - u - .combineWithParams(TexelFormats) - .beginSubcases() - .combine('coords', generateCoordBoundaries(2)) - .combine('C', ['i32', 'u32']) - ) - .unimplemented(); +). +params((u) => +u. +combineWithParams(TexelFormats). +beginSubcases(). +combine('coords', generateCoordBoundaries(2)). +combine('C', ['i32', 'u32']) +). +unimplemented(); -g.test('store_array_2d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturestore') - .desc( - ` +g.test('store_array_2d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturestore'). +desc( + ` C is i32 or u32 fn textureStore(t: texture_storage_2d_array, coords: vec2, array_index: C, value: vec4) @@ -85,23 +84,23 @@ Parameters: * coords The texture coordinates used for sampling. * value The new texel value ` - ) - .params( - u => - u - .combineWithParams(TexelFormats) - .beginSubcases() - .combine('coords', generateCoordBoundaries(2)) - .combine('C', ['i32', 'u32']) - .combine('C_value', [-1, 0, 1, 2, 3, 4]) - /* array_index not param'd as out-of-bounds is implementation specific */ - ) - .unimplemented(); +). +params( + (u) => + u. + combineWithParams(TexelFormats). + beginSubcases(). + combine('coords', generateCoordBoundaries(2)). + combine('C', ['i32', 'u32']). + combine('C_value', [-1, 0, 1, 2, 3, 4]) + /* array_index not param'd as out-of-bounds is implementation specific */ +). +unimplemented(); -g.test('store_3d_coords') - .specURL('https://www.w3.org/TR/WGSL/#texturestore') - .desc( - ` +g.test('store_3d_coords'). +specURL('https://www.w3.org/TR/WGSL/#texturestore'). +desc( + ` C is i32 or u32 fn textureStore(t: texture_storage_3d, coords: vec3, value: vec4) @@ -112,12 +111,12 @@ Parameters: * coords The texture coordinates used for sampling. * value The new texel value ` - ) - .params(u => - u - .combineWithParams(TexelFormats) - .beginSubcases() - .combine('coords', generateCoordBoundaries(3)) - .combine('C', ['i32', 'u32']) - ) - .unimplemented(); +). +params((u) => +u. +combineWithParams(TexelFormats). +beginSubcases(). +combine('coords', generateCoordBoundaries(3)). +combine('C', ['i32', 'u32']) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.cache.js new file mode 100644 index 00000000000..a1d6c0d6f6a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.cache.js @@ -0,0 +1,27 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract]_matCxR_[non_]const +// abstract_matCxR_non_const is empty and not used +const cases = ['f32', 'f16', 'abstract']. +flatMap((trait) => +[2, 3, 4].flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`${trait}_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + if (trait === 'abstract' && nonConst) { + return []; + } + return FP[trait].generateMatrixToMatrixCases( + FP[trait].sparseMatrixRange(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP[trait].transposeInterval + ); + } +})) +) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('transpose', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.spec.js index ffcf4535714..5a919d82ec4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/transpose.spec.js @@ -1,155 +1,97 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'transpose' builtin function T is AbstractFloat, f32, or f16 @const transpose(e: matRxC ) -> matCxR Returns the transpose of e. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeAbstractFloat, TypeF16, TypeF32, TypeMat } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { - sparseMatrixF16Range, - sparseMatrixF32Range, - sparseMatrixF64Range, -} from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './transpose.cache.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_matCxR_[non_]const -const f32_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`f32_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixToMatrixCases( - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.transposeInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_matCxR_[non_]const -const f16_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`f16_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f16.generateMatrixToMatrixCases( - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.transposeInterval - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: abstract_matCxR -const abstract_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].map(rows => ({ - [`abstract_mat${cols}x${rows}`]: () => { - return FP.abstract.generateMatrixToMatrixCases( - sparseMatrixF64Range(cols, rows), - 'finite', - FP.abstract.transposeInterval - ); - }, - })) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('transpose', { - ...f32_cases, - ...f16_cases, - ...abstract_cases, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get(`abstract_mat${cols}x${rows}_const`); + await run( + t, + abstractBuiltin('transpose'), + [TypeMat(cols, rows, TypeAbstractFloat)], + TypeMat(rows, cols, TypeAbstractFloat), + t.params, + cases + ); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u - .combine('inputSource', onlyConstInputSource) - .combine('cols', [2, 3, 4]) - .combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get(`abstract_mat${cols}x${rows}`); - await run( - t, - abstractBuiltin('transpose'), - [TypeMat(cols, rows, TypeAbstractFloat)], - TypeMat(rows, cols, TypeAbstractFloat), - t.params, - cases - ); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f32_mat${cols}x${rows}_const` : + `f32_mat${cols}x${rows}_non_const` + ); + await run( + t, + builtin('transpose'), + [TypeMat(cols, rows, TypeF32)], + TypeMat(rows, cols, TypeF32), + t.params, + cases + ); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f32 tests`) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f32_mat${cols}x${rows}_const` - : `f32_mat${cols}x${rows}_non_const` - ); - - await run( - t, - builtin('transpose'), - [TypeMat(cols, rows, TypeF32)], - TypeMat(rows, cols, TypeF32), - t.params, - cases - ); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f16 tests`) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f16_mat${cols}x${rows}_const` - : `f16_mat${cols}x${rows}_non_const` - ); - - await run( - t, - builtin('transpose'), - [TypeMat(cols, rows, TypeF16)], - TypeMat(rows, cols, TypeF16), - t.params, - cases - ); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f16 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f16_mat${cols}x${rows}_const` : + `f16_mat${cols}x${rows}_non_const` + ); + await run( + t, + builtin('transpose'), + [TypeMat(cols, rows, TypeF16)], + TypeMat(rows, cols, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.cache.js new file mode 100644 index 00000000000..33b77ee5d09 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.cache.js @@ -0,0 +1,17 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { makeCaseCache } from '../../case_cache.js'; +// Cases: [f32|f16|abstract] +const cases = ['f32', 'f16', 'abstract']. +map((trait) => ({ + [`${trait}`]: () => { + return FP[trait].generateScalarToIntervalCases( + FP[trait].scalarRange(), + 'unfiltered', + FP[trait].truncInterval + ); + } +})). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('trunc', cases); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.spec.js index 0660e566619..ddd7549a70f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/trunc.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution tests for the 'trunc' builtin function S is AbstractFloat, f32, f16 @@ -8,63 +8,50 @@ T is S or vecN @const fn trunc(e: T ) -> T Returns the nearest whole number whose absolute value is less than or equal to e. Component-wise when T is a vector. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullF32Range, fullF64Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, onlyConstInputSource, run } from '../../expression.js'; import { abstractBuiltin, builtin } from './builtin.js'; +import { d } from './trunc.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('trunc', { - f32: () => { - return FP.f32.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f32.truncInterval); - }, - f16: () => { - return FP.f16.generateScalarToIntervalCases(fullF32Range(), 'unfiltered', FP.f16.truncInterval); - }, - abstract: () => { - return FP.abstract.generateScalarToIntervalCases( - fullF64Range(), - 'unfiltered', - FP.abstract.truncInterval - ); - }, +g.test('abstract_float'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`abstract float tests`). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('abstract'); + await run(t, abstractBuiltin('trunc'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); }); -g.test('abstract_float') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`abstract float tests`) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('abstract'); - await run(t, abstractBuiltin('trunc'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases); - }); +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f32 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, builtin('trunc'), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f32 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, builtin('trunc'), [TypeF32], TypeF32, t.params, cases); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions') - .desc(`f16 tests`) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, builtin('trunc'), [TypeF16], TypeF16, t.params, cases); - }); +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#float-builtin-functions'). +desc(`f16 tests`). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, builtin('trunc'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.cache.js new file mode 100644 index 00000000000..d6415bb6d6f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { fullU32Range } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('unpack2x16float', { + u32_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'finite', + FP.f32.unpack2x16floatInterval + ); + }, + u32_non_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'unfiltered', + FP.f32.unpack2x16floatInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.spec.js index 21cf6729ee3..47fdf10edd7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16float.spec.js @@ -1,49 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Decomposes a 32-bit value into two 16-bit chunks, and reinterpets each chunk as a floating point value. Component i of the result is the f32 representation of v, where v is the interpretation of bits 16×i through 16×i+15 of e as an IEEE-754 binary16 value. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullU32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './unpack2x16float.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unpack2x16float', { - u32_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'finite', - FP.f32.unpack2x16floatInterval - ); - }, - u32_non_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'unfiltered', - FP.f32.unpack2x16floatInterval - ); - }, -}); - -g.test('unpack') - .specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions') - .desc( - ` +g.test('unpack'). +specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions'). +desc( + ` @const fn unpack2x16float(e: u32) -> vec2 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, builtin('unpack2x16float'), [TypeU32], TypeVec(2, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, builtin('unpack2x16float'), [TypeU32], TypeVec(2, TypeF32), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.cache.js new file mode 100644 index 00000000000..f29307ae602 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { fullU32Range } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('unpack2x16snorm', { + u32_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'finite', + FP.f32.unpack2x16snormInterval + ); + }, + u32_non_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'unfiltered', + FP.f32.unpack2x16snormInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.spec.js index 6675690f824..7c832f3d6bd 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16snorm.spec.js @@ -1,49 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Decomposes a 32-bit value into two 16-bit chunks, then reinterprets each chunk as a signed normalized floating point value. Component i of the result is max(v ÷ 32767, -1), where v is the interpretation of bits 16×i through 16×i+15 of e as a twos-complement signed integer. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullU32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './unpack2x16snorm.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unpack2x16snorm', { - u32_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'finite', - FP.f32.unpack2x16snormInterval - ); - }, - u32_non_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'unfiltered', - FP.f32.unpack2x16snormInterval - ); - }, -}); - -g.test('unpack') - .specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions') - .desc( - ` +g.test('unpack'). +specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions'). +desc( + ` @const fn unpack2x16snorm(e: u32) -> vec2 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, builtin('unpack2x16snorm'), [TypeU32], TypeVec(2, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, builtin('unpack2x16snorm'), [TypeU32], TypeVec(2, TypeF32), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.cache.js new file mode 100644 index 00000000000..ba72ff60a7e --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { fullU32Range } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('unpack2x16unorm', { + u32_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'finite', + FP.f32.unpack2x16unormInterval + ); + }, + u32_non_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'unfiltered', + FP.f32.unpack2x16unormInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.spec.js index 9b115299ebd..0f50805c783 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack2x16unorm.spec.js @@ -1,49 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Decomposes a 32-bit value into two 16-bit chunks, then reinterprets each chunk as an unsigned normalized floating point value. Component i of the result is v ÷ 65535, where v is the interpretation of bits 16×i through 16×i+15 of e as an unsigned integer. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullU32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './unpack2x16unorm.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unpack2x16unorm', { - u32_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'finite', - FP.f32.unpack2x16unormInterval - ); - }, - u32_non_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'unfiltered', - FP.f32.unpack2x16unormInterval - ); - }, -}); - -g.test('unpack') - .specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions') - .desc( - ` +g.test('unpack'). +specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions'). +desc( + ` @const fn unpack2x16unorm(e: u32) -> vec2 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, builtin('unpack2x16unorm'), [TypeU32], TypeVec(2, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, builtin('unpack2x16unorm'), [TypeU32], TypeVec(2, TypeF32), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.cache.js new file mode 100644 index 00000000000..aa9331fa490 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { fullU32Range } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('unpack4x8snorm', { + u32_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'finite', + FP.f32.unpack4x8snormInterval + ); + }, + u32_non_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'unfiltered', + FP.f32.unpack4x8snormInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.spec.js index 430316d14f9..f46549c33d7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8snorm.spec.js @@ -1,49 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Decomposes a 32-bit value into four 8-bit chunks, then reinterprets each chunk as a signed normalized floating point value. Component i of the result is max(v ÷ 127, -1), where v is the interpretation of bits 8×i through 8×i+7 of e as a twos-complement signed integer. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullU32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './unpack4x8snorm.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unpack4x8snorm', { - u32_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'finite', - FP.f32.unpack4x8snormInterval - ); - }, - u32_non_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'unfiltered', - FP.f32.unpack4x8snormInterval - ); - }, -}); - -g.test('unpack') - .specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions') - .desc( - ` +g.test('unpack'). +specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions'). +desc( + ` @const fn unpack4x8snorm(e: u32) -> vec4 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, builtin('unpack4x8snorm'), [TypeU32], TypeVec(4, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, builtin('unpack4x8snorm'), [TypeU32], TypeVec(4, TypeF32), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.cache.js new file mode 100644 index 00000000000..c012505d3a7 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.cache.js @@ -0,0 +1,20 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../../util/floating_point.js';import { fullU32Range } from '../../../../../util/math.js';import { makeCaseCache } from '../../case_cache.js'; + +export const d = makeCaseCache('unpack4x8unorm', { + u32_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'finite', + FP.f32.unpack4x8unormInterval + ); + }, + u32_non_const: () => { + return FP.f32.generateU32ToIntervalCases( + fullU32Range(), + 'unfiltered', + FP.f32.unpack4x8unormInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.spec.js index ce465152145..faffee42290 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/unpack4x8unorm.spec.js @@ -1,49 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Decomposes a 32-bit value into four 8-bit chunks, then reinterprets each chunk as an unsigned normalized floating point value. Component i of the result is v ÷ 255, where v is the interpretation of bits 8×i through 8×i+7 of e as an unsigned integer. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; import { TypeF32, TypeU32, TypeVec } from '../../../../../util/conversion.js'; -import { FP } from '../../../../../util/floating_point.js'; -import { fullU32Range } from '../../../../../util/math.js'; -import { makeCaseCache } from '../../case_cache.js'; import { allInputSources, run } from '../../expression.js'; import { builtin } from './builtin.js'; +import { d } from './unpack4x8unorm.cache.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unpack4x8unorm', { - u32_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'finite', - FP.f32.unpack4x8unormInterval - ); - }, - u32_non_const: () => { - return FP.f32.generateU32ToIntervalCases( - fullU32Range(), - 'unfiltered', - FP.f32.unpack4x8unormInterval - ); - }, -}); - -g.test('unpack') - .specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions') - .desc( - ` +g.test('unpack'). +specURL('https://www.w3.org/TR/WGSL/#unpack-builtin-functions'). +desc( + ` @const fn unpack4x8unorm(e: u32) -> vec4 ` - ) - .params(u => u.combine('inputSource', allInputSources)) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, builtin('unpack4x8unorm'), [TypeU32], TypeVec(4, TypeF32), t.params, cases); - }); +). +params((u) => u.combine('inputSource', allInputSources)). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, builtin('unpack4x8unorm'), [TypeU32], TypeVec(4, TypeF32), t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/utils.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/utils.js index cdc7d1a9850..448d369d7f1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/utils.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/utils.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Generates the boundary entries for the given number of dimensions * * @param numDimensions: The number of dimensions to generate for * @returns an array of generated coord boundaries - */ export function generateCoordBoundaries(numDimensions) { - const ret = ['in-bounds']; + */export function generateCoordBoundaries(numDimensions) {const ret = ['in-bounds']; if (numDimensions < 1 || numDimensions > 3) { throw new Error(`invalid numDimensions: ${numDimensions}`); @@ -43,4 +42,4 @@ export function generateOffsets(numDimensions) { ret.push(v); } return ret; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/workgroupBarrier.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/workgroupBarrier.spec.js index 7bc3ecf3a4b..96848767ffe 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/workgroupBarrier.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/call/builtin/workgroupBarrier.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` 'workgroupBarrier' affects memory and atomic operations in the workgroup address space. All synchronization functions execute a control barrier with Acquire/Release memory ordering. @@ -13,27 +13,26 @@ functions use the Workgroup memory scope. All synchronization functions have a W execution scope. All synchronization functions must only be used in the compute shader stage. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions'). +desc( + ` All synchronization functions must only be used in the compute shader stage. ` - ) - .params(u => u.combine('stage', ['vertex', 'fragment', 'compute'])) - .unimplemented(); +). +params((u) => u.combine('stage', ['vertex', 'fragment', 'compute'])). +unimplemented(); -g.test('barrier') - .specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions') - .desc( - ` +g.test('barrier'). +specURL('https://www.w3.org/TR/WGSL/#sync-builtin-functions'). +desc( + ` fn workgroupBarrier() ` - ) - .unimplemented(); +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case.js new file mode 100644 index 00000000000..e361bf370db --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case.js @@ -0,0 +1,247 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Vector, i32, u32 } from '../../../util/conversion.js';import { + + cartesianProduct, + quantizeToI32, + quantizeToU32 } from +'../../../util/math.js'; + + + +/** Case is a single expression test case. */ + + + + + + + +/** CaseList is a list of Cases */ + + +/** + * A function that performs a binary operation on x and y, and returns the expected + * result. + */ + + + + +/** + * @returns a Case for the input params with op applied + * @param scalar scalar param + * @param vector vector param (2, 3, or 4 elements) + * @param op the op to apply to scalar and vector + * @param quantize function to quantize all values in vectors and scalars + * @param scalarize function to convert numbers to Scalars + */ +function makeScalarVectorBinaryToVectorCase( +scalar, +vector, +op, +quantize, +scalarize) +{ + scalar = quantize(scalar); + vector = vector.map(quantize); + const result = vector.map((v) => op(scalar, v)); + if (result.includes(undefined)) { + return undefined; + } + return { + input: [scalarize(scalar), new Vector(vector.map(scalarize))], + expected: new Vector(result.map(scalarize)) + }; +} + +/** + * @returns array of Case for the input params with op applied + * @param scalars array of scalar params + * @param vectors array of vector params (2, 3, or 4 elements) + * @param op the op to apply to each pair of scalar and vector + * @param quantize function to quantize all values in vectors and scalars + * @param scalarize function to convert numbers to Scalars + */ +function generateScalarVectorBinaryToVectorCases( +scalars, +vectors, +op, +quantize, +scalarize) +{ + const cases = new Array(); + scalars.forEach((s) => { + vectors.forEach((v) => { + const c = makeScalarVectorBinaryToVectorCase(s, v, op, quantize, scalarize); + if (c !== undefined) { + cases.push(c); + } + }); + }); + return cases; +} + +/** + * @returns a Case for the input params with op applied + * @param vector vector param (2, 3, or 4 elements) + * @param scalar scalar param + * @param op the op to apply to vector and scalar + * @param quantize function to quantize all values in vectors and scalars + * @param scalarize function to convert numbers to Scalars + */ +function makeVectorScalarBinaryToVectorCase( +vector, +scalar, +op, +quantize, +scalarize) +{ + vector = vector.map(quantize); + scalar = quantize(scalar); + const result = vector.map((v) => op(v, scalar)); + if (result.includes(undefined)) { + return undefined; + } + return { + input: [new Vector(vector.map(scalarize)), scalarize(scalar)], + expected: new Vector(result.map(scalarize)) + }; +} + +/** + * @returns array of Case for the input params with op applied + * @param vectors array of vector params (2, 3, or 4 elements) + * @param scalars array of scalar params + * @param op the op to apply to each pair of vector and scalar + * @param quantize function to quantize all values in vectors and scalars + * @param scalarize function to convert numbers to Scalars + */ +function generateVectorScalarBinaryToVectorCases( +vectors, +scalars, +op, +quantize, +scalarize) +{ + const cases = new Array(); + scalars.forEach((s) => { + vectors.forEach((v) => { + const c = makeVectorScalarBinaryToVectorCase(v, s, op, quantize, scalarize); + if (c !== undefined) { + cases.push(c); + } + }); + }); + return cases; +} + +/** + * @returns array of Case for the input params with op applied + * @param scalars array of scalar params + * @param vectors array of vector params (2, 3, or 4 elements) + * @param op he op to apply to each pair of scalar and vector + */ +export function generateU32VectorBinaryToVectorCases( +scalars, +vectors, +op) +{ + return generateScalarVectorBinaryToVectorCases(scalars, vectors, op, quantizeToU32, u32); +} + +/** + * @returns array of Case for the input params with op applied + * @param vectors array of vector params (2, 3, or 4 elements) + * @param scalars array of scalar params + * @param op he op to apply to each pair of vector and scalar + */ +export function generateVectorU32BinaryToVectorCases( +vectors, +scalars, +op) +{ + return generateVectorScalarBinaryToVectorCases(vectors, scalars, op, quantizeToU32, u32); +} + +/** + * @returns array of Case for the input params with op applied + * @param scalars array of scalar params + * @param vectors array of vector params (2, 3, or 4 elements) + * @param op he op to apply to each pair of scalar and vector + */ +export function generateI32VectorBinaryToVectorCases( +scalars, +vectors, +op) +{ + return generateScalarVectorBinaryToVectorCases(scalars, vectors, op, quantizeToI32, i32); +} + +/** + * @returns array of Case for the input params with op applied + * @param vectors array of vector params (2, 3, or 4 elements) + * @param scalars array of scalar params + * @param op he op to apply to each pair of vector and scalar + */ +export function generateVectorI32BinaryToVectorCases( +vectors, +scalars, +op) +{ + return generateVectorScalarBinaryToVectorCases(vectors, scalars, op, quantizeToI32, i32); +} + +/** + * @returns array of Case for the input params with op applied + * @param param0s array of inputs to try for the first param + * @param param1s array of inputs to try for the second param + * @param op callback called on each pair of inputs to produce each case + * @param quantize function to quantize all values + * @param scalarize function to convert numbers to Scalars + */ +function generateScalarBinaryToScalarCases( +param0s, +param1s, +op, +quantize, +scalarize) +{ + param0s = param0s.map(quantize); + param1s = param1s.map(quantize); + return cartesianProduct(param0s, param1s).reduce((cases, e) => { + const expected = op(e[0], e[1]); + if (expected !== undefined) { + cases.push({ input: [scalarize(e[0]), scalarize(e[1])], expected: scalarize(expected) }); + } + return cases; + }, new Array()); +} + +/** + * @returns an array of Cases for operations over a range of inputs + * @param param0s array of inputs to try for the first param + * @param param1s array of inputs to try for the second param + * @param op callback called on each pair of inputs to produce each case + */ +export function generateBinaryToI32Cases( +param0s, +param1s, +op) +{ + return generateScalarBinaryToScalarCases(param0s, param1s, op, quantizeToI32, i32); +} + +/** + * @returns an array of Cases for operations over a range of inputs + * @param param0s array of inputs to try for the first param + * @param param1s array of inputs to try for the second param + * @param op callback called on each pair of inputs to produce each case + */ +export function generateBinaryToU32Cases( +param0s, +param1s, +op) +{ + return generateScalarBinaryToScalarCases(param0s, param1s, op, quantizeToU32, u32); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case_cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case_cache.js index ee2f36423d6..261c55d762a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case_cache.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/case_cache.js @@ -1,102 +1,131 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { dataCache } from '../../../../common/framework/data_cache.js'; -import { unreachable } from '../../../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { dataCache } from '../../../../common/framework/data_cache.js';import { unreachable } from '../../../../common/util/util.js';import BinaryStream from '../../../util/binary_stream.js'; import { deserializeComparator, serializeComparator } from '../../../util/compare.js'; import { - Scalar, - Vector, - serializeValue, - deserializeValue, Matrix, -} from '../../../util/conversion.js'; + Scalar, + + Vector, + deserializeValue, + serializeValue } from +'../../../util/conversion.js'; import { - deserializeFPInterval, FPInterval, - serializeFPInterval, -} from '../../../util/floating_point.js'; + deserializeFPInterval, + serializeFPInterval } from +'../../../util/floating_point.js'; import { flatten2DArray, unflatten2DArray } from '../../../util/math.js'; -import { isComparator } from './expression.js'; -/** - * SerializedExpectationValue holds the serialized form of an Expectation when - * the Expectation is a Value - * This form can be safely encoded to JSON. - */ +import { isComparator } from './expectation.js';var -/** serializeExpectation() converts an Expectation to a SerializedExpectation */ -export function serializeExpectation(e) { +SerializedExpectationKind = /*#__PURE__*/function (SerializedExpectationKind) {SerializedExpectationKind[SerializedExpectationKind["Value"] = 0] = "Value";SerializedExpectationKind[SerializedExpectationKind["Interval"] = 1] = "Interval";SerializedExpectationKind[SerializedExpectationKind["Interval1DArray"] = 2] = "Interval1DArray";SerializedExpectationKind[SerializedExpectationKind["Interval2DArray"] = 3] = "Interval2DArray";SerializedExpectationKind[SerializedExpectationKind["Array"] = 4] = "Array";SerializedExpectationKind[SerializedExpectationKind["Comparator"] = 5] = "Comparator";return SerializedExpectationKind;}(SerializedExpectationKind || {}); + + + + + + + + +/** serializeExpectation() serializes an Expectation to a BinaryStream */ +export function serializeExpectation(s, e) { if (e instanceof Scalar || e instanceof Vector || e instanceof Matrix) { - return { kind: 'value', value: serializeValue(e) }; + s.writeU8(SerializedExpectationKind.Value); + serializeValue(s, e); + return; } if (e instanceof FPInterval) { - return { kind: 'interval', value: serializeFPInterval(e) }; + s.writeU8(SerializedExpectationKind.Interval); + serializeFPInterval(s, e); + return; } if (e instanceof Array) { if (e[0] instanceof Array) { e = e; const cols = e.length; const rows = e[0].length; - return { - kind: '2d-interval-array', - cols, - rows, - value: flatten2DArray(e).map(serializeFPInterval), - }; + s.writeU8(SerializedExpectationKind.Interval2DArray); + s.writeU16(cols); + s.writeU16(rows); + s.writeArray(flatten2DArray(e), serializeFPInterval); } else { e = e; - return { kind: 'intervals', value: e.map(serializeFPInterval) }; + s.writeU8(SerializedExpectationKind.Interval1DArray); + s.writeArray(e, serializeFPInterval); } + return; } if (isComparator(e)) { - return { kind: 'comparator', value: serializeComparator(e) }; + s.writeU8(SerializedExpectationKind.Comparator); + serializeComparator(s, e); + return; } unreachable(`cannot serialize Expectation ${e}`); } -/** deserializeExpectation() converts a SerializedExpectation to a Expectation */ -export function deserializeExpectation(data) { - switch (data.kind) { - case 'value': - return deserializeValue(data.value); - case 'interval': - return deserializeFPInterval(data.value); - case 'intervals': - return data.value.map(deserializeFPInterval); - case '2d-interval-array': - return unflatten2DArray(data.value.map(deserializeFPInterval), data.cols, data.rows); - case 'comparator': - return deserializeComparator(data.value); +/** deserializeExpectation() deserializes an Expectation from a BinaryStream */ +export function deserializeExpectation(s) { + const kind = s.readU8(); + switch (kind) { + case SerializedExpectationKind.Value:{ + return deserializeValue(s); + } + case SerializedExpectationKind.Interval:{ + return deserializeFPInterval(s); + } + case SerializedExpectationKind.Interval1DArray:{ + return s.readArray(deserializeFPInterval); + } + case SerializedExpectationKind.Interval2DArray:{ + const cols = s.readU16(); + const rows = s.readU16(); + return unflatten2DArray(s.readArray(deserializeFPInterval), cols, rows); + } + case SerializedExpectationKind.Comparator:{ + return deserializeComparator(s); + } + default:{ + unreachable(`invalid serialized expectation kind: ${kind}`); + } } } -/** - * SerializedCase holds the serialized form of a Case. - * This form can be safely encoded to JSON. - */ - -/** serializeCase() converts an Case to a SerializedCase */ -export function serializeCase(c) { - return { - input: c.input instanceof Array ? c.input.map(v => serializeValue(v)) : serializeValue(c.input), - expected: serializeExpectation(c.expected), - }; +/** serializeCase() serializes a Case to a BinaryStream */ +export function serializeCase(s, c) { + s.writeCond(c.input instanceof Array, { + if_true: () => { + // c.input is array + s.writeArray(c.input, serializeValue); + }, + if_false: () => { + // c.input is not array + serializeValue(s, c.input); + } + }); + serializeExpectation(s, c.expected); } -/** serializeCase() converts an SerializedCase to a Case */ -export function deserializeCase(data) { - return { - input: - data.input instanceof Array - ? data.input.map(v => deserializeValue(v)) - : deserializeValue(data.input), - expected: deserializeExpectation(data.expected), - }; +/** deserializeCase() deserializes a Case from a BinaryStream */ +export function deserializeCase(s) { + const input = s.readCond({ + if_true: () => { + // c.input is array + return s.readArray(deserializeValue); + }, + if_false: () => { + // c.input is not array + return deserializeValue(s); + } + }); + const expected = deserializeExpectation(s); + return { input, expected }; } /** CaseListBuilder is a function that builds a CaseList */ + /** * CaseCache is a cache of CaseList. * CaseCache implements the Cacheable interface, so the cases can be pre-built @@ -109,7 +138,7 @@ export class CaseCache { * @param builders a Record of case-list name to case-list builder. */ constructor(name, builders) { - this.path = `webgpu/shader/execution/case-cache/${name}.json`; + this.path = `webgpu/shader/execution/${name}.bin`; this.builders = builders; } @@ -137,28 +166,36 @@ export class CaseCache { * @returns the serialized data. */ serialize(data) { - const serialized = {}; + const maxSize = 32 << 20; // 32MB - max size for a file + const stream = new BinaryStream(new ArrayBuffer(maxSize)); + stream.writeU32(Object.keys(data).length); for (const name in data) { - serialized[name] = data[name].map(c => serializeCase(c)); + stream.writeString(name); + stream.writeArray(data[name], serializeCase); } - return JSON.stringify(serialized); + return stream.buffer(); } /** * deserialize() implements the Cacheable.deserialize interface. * @returns the deserialize data. */ - deserialize(serialized) { - const data = JSON.parse(serialized); + deserialize(array) { + const s = new BinaryStream(array.buffer); const casesByName = {}; - for (const name in data) { - const cases = data[name].map(caseData => deserializeCase(caseData)); + const numRecords = s.readU32(); + for (let i = 0; i < numRecords; i++) { + const name = s.readString(); + const cases = s.readArray(deserializeCase); casesByName[name] = cases; } return casesByName; } + + + } export function makeCaseCache(name, builders) { return new CaseCache(name, builders); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expectation.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expectation.js new file mode 100644 index 00000000000..f5c2726bbac --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expectation.js @@ -0,0 +1,31 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { compare } from '../../../util/compare.js';import { Matrix, Scalar, Vector } from '../../../util/conversion.js'; +import { FPInterval } from '../../../util/floating_point.js'; + + + + + + + + +/** @returns if this Expectation actually a Comparator */ +export function isComparator(e) { + return !( + e instanceof FPInterval || + e instanceof Scalar || + e instanceof Vector || + e instanceof Matrix || + e instanceof Array); + +} + +/** @returns the input if it is already a Comparator, otherwise wraps it in a 'value' comparator */ +export function toComparator(input) { + if (isComparator(input)) { + return input; + } + + return { compare: (got) => compare(got, input), kind: 'value' }; +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expression.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expression.js index 602353daa2e..834d022d077 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expression.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/expression.js @@ -1,46 +1,28 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { globalTestConfig } from '../../../../common/framework/test_config.js'; -import { assert, objectEquals, unreachable } from '../../../../common/util/util.js'; -import { compare } from '../../../util/compare.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { globalTestConfig } from '../../../../common/framework/test_config.js';import { assert, objectEquals, unreachable } from '../../../../common/util/util.js'; + import { kValue } from '../../../util/constants.js'; import { + MatrixType, + ScalarType, - Scalar, - TypeVec, + TypeU32, + TypeVec, + Vector, VectorType, - u32, - i32, - Matrix, - MatrixType, - scalarTypeOf, -} from '../../../util/conversion.js'; -import { FPInterval } from '../../../util/floating_point.js'; -import { cartesianProduct, quantizeToI32, quantizeToU32 } from '../../../util/math.js'; + scalarTypeOf } from +'../../../util/conversion.js'; -/** @returns if this Expectation actually a Comparator */ -export function isComparator(e) { - return !( - e instanceof FPInterval || - e instanceof Scalar || - e instanceof Vector || - e instanceof Matrix || - e instanceof Array - ); -} -/** @returns the input if it is already a Comparator, otherwise wraps it in a 'value' comparator */ -export function toComparator(input) { - if (isComparator(input)) { - return input; - } +import { toComparator } from './expectation.js'; + +/** The input value source */ + - return { compare: got => compare(got, input), kind: 'value' }; -} -/** Case is a single expression test case. */ // Read-write storage buffer @@ -52,6 +34,17 @@ export const onlyConstInputSource = ['const']; /** Configuration for running a expression test */ + + + + + + + + + + + // Helper for returning the stride for a given Type function valueStride(ty) { // AbstractFloats are passed out of the shader via a struct of 2x u32s and @@ -78,7 +71,6 @@ function valueStride(ty) { case 4: return 64; } - break; case 3: switch (ty.rows) { @@ -89,7 +81,6 @@ function valueStride(ty) { case 4: return 96; } - break; case 4: switch (ty.rows) { @@ -100,7 +91,6 @@ function valueStride(ty) { case 4: return 128; } - break; } } @@ -118,7 +108,6 @@ function valueStride(ty) { case 4: return 32; } - break; case 3: switch (ty.rows) { @@ -129,7 +118,6 @@ function valueStride(ty) { case 4: return 64; } - break; case 4: switch (ty.rows) { @@ -140,10 +128,8 @@ function valueStride(ty) { case 4: return 64; } - break; } - unreachable( `Attempted to get stride length for a matrix with dimensions (${ty.cols}x${ty.rows}), which isn't currently handled` ); @@ -166,7 +152,6 @@ function storageType(ty) { ty.kind !== 'abstract-float', `Custom handling is implemented for 'abstract-float' values` ); - if (ty.kind === 'bool') { return TypeU32; } @@ -191,7 +176,6 @@ function fromStorage(ty, expr) { ty.elementType.kind !== 'abstract-float', `AbstractFloat values cannot appear in input storage` ); - assert(ty.elementType.kind !== 'f64', `'No storage type defined for 'f64' values`); if (ty.elementType.kind === 'bool') { return `${expr} != vec${ty.width}(0u)`; @@ -207,7 +191,6 @@ function toStorage(ty, expr) { ty.kind !== 'abstract-float', `AbstractFloat values have custom code for writing to storage` ); - assert(ty.kind !== 'f64', `No storage type defined for 'f64' values`); if (ty.kind === 'bool') { return `select(0u, 1u, ${expr})`; @@ -218,7 +201,6 @@ function toStorage(ty, expr) { ty.elementType.kind !== 'abstract-float', `AbstractFloat values have custom code for writing to storage` ); - assert(ty.elementType.kind !== 'f64', `'No storage type defined for 'f64' values`); if (ty.elementType.kind === 'bool') { return `select(vec${ty.width}(0u), vec${ty.width}(1u), ${expr})`; @@ -229,9 +211,10 @@ function toStorage(ty, expr) { // A Pipeline is a map of WGSL shader source to a built pipeline + /** * Searches for an entry with the given key, adding and returning the result of calling - * @p create if the entry was not found. + * `create` if the entry was not found. * @param map the cache map * @param key the entry's key * @param create the function used to construct a value, if not found in the cache @@ -261,14 +244,14 @@ function getOrCreate(map, key, create) { * @param batch_size override the calculated casesPerBatch. */ export async function run( - t, - shaderBuilder, - parameterTypes, - resultType, - cfg = { inputSource: 'storage_r' }, - cases, - batch_size -) { +t, +shaderBuilder, +parameterTypes, +resultType, +cfg = { inputSource: 'storage_r' }, +cases, +batch_size) +{ // If the 'vectorize' config option was provided, pack the cases into vectors. if (cfg.vectorize !== undefined) { const packed = packScalarsToVector(parameterTypes, resultType, cases, cfg.vectorize); @@ -280,7 +263,7 @@ export async function run( // The size of the input buffer may exceed the maximum buffer binding size, // so chunk the tests up into batches that fit into the limits. We also split // the cases into smaller batches to help with shader compilation performance. - const casesPerBatch = (function () { + const casesPerBatch = function () { if (batch_size) { return batch_size; } @@ -295,16 +278,15 @@ export async function run( // 2k appears to be a sweet-spot when benchmarking. return Math.floor( Math.min(1024 * 2, t.device.limits.maxUniformBufferBindingSize) / - valueStrides(parameterTypes) + valueStrides(parameterTypes) ); - case 'storage_r': case 'storage_rw': return Math.floor( t.device.limits.maxStorageBufferBindingSize / valueStrides(parameterTypes) ); } - })(); + }(); // A cache to hold built shader pipelines. const pipelineCache = new Map(); @@ -324,19 +306,8 @@ export async function run( } }; - for (let i = 0; i < cases.length; i += casesPerBatch) { - const batchCases = cases.slice(i, Math.min(i + casesPerBatch, cases.length)); - - if (batchesInFlight > maxBatchesInFlight) { - await new Promise(resolve => { - // There should only be one batch waiting at a time. - assert(resolvePromiseBlockingBatch === undefined); - resolvePromiseBlockingBatch = resolve; - }); - } - batchesInFlight += 1; - - const checkBatch = submitBatch( + const processBatch = async (batchCases) => { + const checkBatch = await submitBatch( t, shaderBuilder, parameterTypes, @@ -345,10 +316,28 @@ export async function run( cfg.inputSource, pipelineCache ); - checkBatch(); - t.queue.onSubmittedWorkDone().finally(batchFinishedCallback); + void t.queue.onSubmittedWorkDone().finally(batchFinishedCallback); + }; + + const pendingBatches = []; + + for (let i = 0; i < cases.length; i += casesPerBatch) { + const batchCases = cases.slice(i, Math.min(i + casesPerBatch, cases.length)); + + if (batchesInFlight > maxBatchesInFlight) { + await new Promise((resolve) => { + // There should only be one batch waiting at a time. + assert(resolvePromiseBlockingBatch === undefined); + resolvePromiseBlockingBatch = resolve; + }); + } + batchesInFlight += 1; + + pendingBatches.push(processBatch(batchCases)); } + + await Promise.all(pendingBatches); } /** @@ -363,23 +352,23 @@ export async function run( * @param pipelineCache the cache of compute pipelines, shared between batches * @returns a function that checks the results are as expected */ -function submitBatch( - t, - shaderBuilder, - parameterTypes, - resultType, - cases, - inputSource, - pipelineCache -) { +async function submitBatch( +t, +shaderBuilder, +parameterTypes, +resultType, +cases, +inputSource, +pipelineCache) +{ // Construct a buffer to hold the results of the expression tests const outputBufferSize = cases.length * valueStride(resultType); const outputBuffer = t.device.createBuffer({ size: outputBufferSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE }); - const [pipeline, group] = buildPipeline( + const [pipeline, group] = await buildPipeline( t, shaderBuilder, parameterTypes, @@ -404,7 +393,7 @@ function submitBatch( // Return a function that can check the results of the shader return () => { - const checkExpectation = outputData => { + const checkExpectation = (outputData) => { // Read the outputs from the output buffer const outputs = new Array(cases.length); for (let i = 0; i < cases.length; i++) { @@ -434,15 +423,15 @@ function submitBatch( t.expectGPUBufferValuesPassCheck(outputBuffer, checkExpectation, { type: Uint8Array, - typedLength: outputBufferSize, + typedLength: outputBufferSize }); }; } /** - * map is a helper for returning a new array with each element of @p v - * transformed with @p fn. - * If @p v is not an array, then @p fn is called with (v, 0). + * map is a helper for returning a new array with each element of `v` + * transformed with `fn`. + * If `v` is not an array, then `fn` is called with (v, 0). */ function map(v, fn) { if (v instanceof Array) { @@ -460,6 +449,12 @@ function map(v, fn) { * @param inputSource the source of the input values */ + + + + + + /** * Helper that returns the WGSL to declare the output storage buffer for a shader */ @@ -517,10 +512,15 @@ struct Output { /** * Helper that returns the WGSL to declare the values array for a shader */ -function wgslValuesArray(parameterTypes, resultType, cases, expressionBuilder) { +function wgslValuesArray( +parameterTypes, +resultType, +cases, +expressionBuilder) +{ return ` const values = array( - ${cases.map(c => expressionBuilder(map(c.input, v => v.wgsl()))).join(',\n ')} + ${cases.map((c) => expressionBuilder(map(c.input, (v) => v.wgsl()))).join(',\n ')} );`; } @@ -536,7 +536,6 @@ function wgslInputVar(inputSource, count) { case 'uniform': return `@group(0) @binding(1) var inputs : array;`; } - throw new Error(`InputSource ${inputSource} does not use an input var`); } @@ -546,8 +545,8 @@ function wgslInputVar(inputSource, count) { */ function wgslHeader(parameterTypes, resultType) { const usedF16 = - scalarTypeOf(resultType).kind === 'f16' || - parameterTypes.some(ty => scalarTypeOf(ty).kind === 'f16'); + scalarTypeOf(resultType).kind === 'f16' || + parameterTypes.some((ty) => scalarTypeOf(ty).kind === 'f16'); const header = usedF16 ? 'enable f16;\n' : ''; return header; } @@ -557,46 +556,46 @@ function wgslHeader(parameterTypes, resultType) { * given input values. */ + /** * Returns a ShaderBuilder that builds a basic expression test shader. * @param expressionBuilder the expression builder */ function basicExpressionShaderBody( - expressionBuilder, - parameterTypes, - resultType, - cases, - inputSource -) { +expressionBuilder, +parameterTypes, +resultType, +cases, +inputSource) +{ assert( scalarTypeOf(resultType).kind !== 'abstract-float', `abstractFloatShaderBuilder should be used when result type is 'abstract-float` ); - if (inputSource === 'const') { ////////////////////////////////////////////////////////////////////////// // Constant eval ////////////////////////////////////////////////////////////////////////// let body = ''; - if (parameterTypes.some(ty => scalarTypeOf(ty).kind === 'abstract-float')) { + if (parameterTypes.some((ty) => scalarTypeOf(ty).kind === 'abstract-float')) { // Directly assign the expression to the output, to avoid an // intermediate store, which will concretize the value early - body = cases - .map( - (c, i) => - ` outputs[${i}].value = ${toStorage( - resultType, - expressionBuilder(map(c.input, v => v.wgsl())) - )};` - ) - .join('\n '); + body = cases. + map( + (c, i) => + ` outputs[${i}].value = ${toStorage( + resultType, + expressionBuilder(map(c.input, (v) => v.wgsl())) + )};` + ). + join('\n '); } else if (globalTestConfig.unrollConstEvalLoops) { - body = cases - .map((_, i) => { - const value = `values[${i}]`; - return ` outputs[${i}].value = ${toStorage(resultType, value)};`; - }) - .join('\n '); + body = cases. + map((_, i) => { + const value = `values[${i}]`; + return ` outputs[${i}].value = ${toStorage(resultType, value)};`; + }). + join('\n '); } else { body = ` for (var i = 0u; i < ${cases.length}; i++) { @@ -626,9 +625,9 @@ ${body} return ` struct Input { -${parameterTypes - .map((ty, i) => ` @size(${valueStride(ty)}) param${i} : ${storageType(ty)},`) - .join('\n')} +${parameterTypes. + map((ty, i) => ` @size(${valueStride(ty)}) param${i} : ${storageType(ty)},`). + join('\n')} }; ${wgslOutputs(resultType, cases.length)} @@ -650,7 +649,12 @@ fn main() { * @param expressionBuilder the expression builder */ export function basicExpressionBuilder(expressionBuilder) { - return (parameterTypes, resultType, cases, inputSource) => { + return ( + parameterTypes, + resultType, + cases, + inputSource) => + { return `\ ${wgslHeader(parameterTypes, resultType)} @@ -664,8 +668,16 @@ ${basicExpressionShaderBody(expressionBuilder, parameterTypes, resultType, cases * @param expressionBuilder the expression builder * @param predeclaration the predeclaration string */ -export function basicExpressionWithPredeclarationBuilder(expressionBuilder, predeclaration) { - return (parameterTypes, resultType, cases, inputSource) => { +export function basicExpressionWithPredeclarationBuilder( +expressionBuilder, +predeclaration) +{ + return ( + parameterTypes, + resultType, + cases, + inputSource) => + { return `\ ${wgslHeader(parameterTypes, resultType)} @@ -680,7 +692,12 @@ ${basicExpressionShaderBody(expressionBuilder, parameterTypes, resultType, cases * @param op the compound operator */ export function compoundAssignmentBuilder(op) { - return (parameterTypes, resultType, cases, inputSource) => { + return ( + parameterTypes, + resultType, + cases, + inputSource) => + { ////////////////////////////////////////////////////////////////////////// // Input validation ////////////////////////////////////////////////////////////////////////// @@ -700,14 +717,14 @@ export function compoundAssignmentBuilder(op) { ////////////////////////////////////////////////////////////////////////// let body = ''; if (globalTestConfig.unrollConstEvalLoops) { - body = cases - .map((_, i) => { - return ` + body = cases. + map((_, i) => { + return ` var ret_${i} = lhs[${i}]; ret_${i} ${op} rhs[${i}]; outputs[${i}].value = ${storageType(resultType)}(ret_${i});`; - }) - .join('\n '); + }). + join('\n '); } else { body = ` for (var i = 0u; i < ${cases.length}; i++) { @@ -717,17 +734,17 @@ export function compoundAssignmentBuilder(op) { }`; } - const values = cases.map(c => c.input.map(v => v.wgsl())); + const values = cases.map((c) => c.input.map((v) => v.wgsl())); return ` ${wgslHeader(parameterTypes, resultType)} ${wgslOutputs(resultType, cases.length)} const lhs = array( -${values.map(c => `${c[0]}`).join(',\n ')} +${values.map((c) => `${c[0]}`).join(',\n ')} ); const rhs = array( -${values.map(c => `${c[1]}`).join(',\n ')} +${values.map((c) => `${c[1]}`).join(',\n ')} ); @compute @workgroup_size(1) @@ -875,9 +892,9 @@ function abstractFloatCaseBody(expr, resultType, i) { } if (resultType instanceof VectorType) { - return [...Array(resultType.width).keys()] - .map(idx => abstractFloatSnippet(expr, i, `[${idx}]`)) - .join(' \n'); + return [...Array(resultType.width).keys()]. + map((idx) => abstractFloatSnippet(expr, i, `[${idx}]`)). + join(' \n'); } if (resultType instanceof MatrixType) { @@ -902,19 +919,24 @@ function abstractFloatCaseBody(expr, resultType, i) { * @param expressionBuilder an expression builder that will return AbstractFloats */ export function abstractFloatShaderBuilder(expressionBuilder) { - return (parameterTypes, resultType, cases, inputSource) => { + return ( + parameterTypes, + resultType, + cases, + inputSource) => + { assert(inputSource === 'const', 'AbstractFloat results are only defined for const-eval'); assert( scalarTypeOf(resultType).kind === 'abstract-float', `Expected resultType of 'abstract-float', received '${scalarTypeOf(resultType).kind}' instead` ); - const body = cases - .map((c, i) => { - const expr = `${expressionBuilder(map(c.input, v => v.wgsl()))}`; - return abstractFloatCaseBody(expr, resultType, i); - }) - .join('\n '); + const body = cases. + map((c, i) => { + const expr = `${expressionBuilder(map(c.input, (v) => v.wgsl()))}`; + return abstractFloatCaseBody(expr, resultType, i); + }). + join('\n '); return ` ${wgslHeader(parameterTypes, resultType)} @@ -931,7 +953,7 @@ ${body} /** * Constructs and returns a GPUComputePipeline and GPUBindGroup for running a * batch of test cases. If a pre-created pipeline can be found in - * @p pipelineCache, then this may be returned instead of creating a new + * `pipelineCache`, then this may be returned instead of creating a new * pipeline. * @param t the GPUTest * @param shaderBuilder the shader builder @@ -942,18 +964,18 @@ ${body} * @param outputBuffer the buffer that will hold the output values of the tests * @param pipelineCache the cache of compute pipelines, shared between batches */ -function buildPipeline( - t, - shaderBuilder, - parameterTypes, - resultType, - cases, - inputSource, - outputBuffer, - pipelineCache -) { - cases.forEach(c => { - const inputTypes = c.input instanceof Array ? c.input.map(i => i.type) : [c.input.type]; +async function buildPipeline( +t, +shaderBuilder, +parameterTypes, +resultType, +cases, +inputSource, +outputBuffer, +pipelineCache) +{ + cases.forEach((c) => { + const inputTypes = c.input instanceof Array ? c.input.map((i) => i.type) : [c.input.type]; if (!objectEquals(inputTypes, parameterTypes)) { const input_str = `[${inputTypes.join(',')}]`; const param_str = `[${parameterTypes.join(',')}]`; @@ -966,84 +988,84 @@ function buildPipeline( const source = shaderBuilder(parameterTypes, resultType, cases, inputSource); switch (inputSource) { - case 'const': { - // build the shader module - const module = t.device.createShaderModule({ code: source }); - - // build the pipeline - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { module, entryPoint: 'main' }, - }); - - // build the bind group - const group = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], - }); - - return [pipeline, group]; - } - - case 'uniform': - case 'storage_r': - case 'storage_rw': { - // Input values come from a uniform or storage buffer - - // size in bytes of the input buffer - const inputSize = cases.length * valueStrides(parameterTypes); - - // Holds all the parameter values for all cases - const inputData = new Uint8Array(inputSize); - - // Pack all the input parameter values into the inputData buffer - { - const caseStride = valueStrides(parameterTypes); - for (let caseIdx = 0; caseIdx < cases.length; caseIdx++) { - const caseBase = caseIdx * caseStride; - let offset = caseBase; - for (let paramIdx = 0; paramIdx < parameterTypes.length; paramIdx++) { - const params = cases[caseIdx].input; - if (params instanceof Array) { - params[paramIdx].copyTo(inputData, offset); - } else { - params.copyTo(inputData, offset); - } - offset += valueStride(parameterTypes[paramIdx]); - } - } - } - - // build the compute pipeline, if the shader hasn't been compiled already. - const pipeline = getOrCreate(pipelineCache, source, () => { + case 'const':{ // build the shader module const module = t.device.createShaderModule({ code: source }); // build the pipeline - return t.device.createComputePipeline({ + const pipeline = await t.device.createComputePipelineAsync({ layout: 'auto', - compute: { module, entryPoint: 'main' }, + compute: { module, entryPoint: 'main' } }); - }); - // build the input buffer - const inputBuffer = t.makeBufferWithContents( - inputData, - GPUBufferUsage.COPY_SRC | - (inputSource === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE) - ); + // build the bind group + const group = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] + }); - // build the bind group - const group = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [ + return [pipeline, group]; + } + + case 'uniform': + case 'storage_r': + case 'storage_rw':{ + // Input values come from a uniform or storage buffer + + // size in bytes of the input buffer + const inputSize = cases.length * valueStrides(parameterTypes); + + // Holds all the parameter values for all cases + const inputData = new Uint8Array(inputSize); + + // Pack all the input parameter values into the inputData buffer + { + const caseStride = valueStrides(parameterTypes); + for (let caseIdx = 0; caseIdx < cases.length; caseIdx++) { + const caseBase = caseIdx * caseStride; + let offset = caseBase; + for (let paramIdx = 0; paramIdx < parameterTypes.length; paramIdx++) { + const params = cases[caseIdx].input; + if (params instanceof Array) { + params[paramIdx].copyTo(inputData, offset); + } else { + params.copyTo(inputData, offset); + } + offset += valueStride(parameterTypes[paramIdx]); + } + } + } + + // build the compute pipeline, if the shader hasn't been compiled already. + const pipeline = getOrCreate(pipelineCache, source, () => { + // build the shader module + const module = t.device.createShaderModule({ code: source }); + + // build the pipeline + return t.device.createComputePipeline({ + layout: 'auto', + compute: { module, entryPoint: 'main' } + }); + }); + + // build the input buffer + const inputBuffer = t.makeBufferWithContents( + inputData, + GPUBufferUsage.COPY_SRC | ( + inputSource === 'uniform' ? GPUBufferUsage.UNIFORM : GPUBufferUsage.STORAGE) + ); + + // build the bind group + const group = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ { binding: 0, resource: { buffer: outputBuffer } }, - { binding: 1, resource: { buffer: inputBuffer } }, - ], - }); + { binding: 1, resource: { buffer: inputBuffer } }] - return [pipeline, group]; - } + }); + + return [pipeline, group]; + } } } @@ -1054,7 +1076,12 @@ function buildPipeline( * If `cases.length` is not a multiple of `vectorWidth`, then the last scalar * test case value is repeated to fill the vector value. */ -function packScalarsToVector(parameterTypes, resultType, cases, vectorWidth) { +function packScalarsToVector( +parameterTypes, +resultType, +cases, +vectorWidth) +{ // Validate that the parameters and return type are all vectorizable for (let i = 0; i < parameterTypes.length; i++) { const ty = parameterTypes[i]; @@ -1071,10 +1098,10 @@ function packScalarsToVector(parameterTypes, resultType, cases, vectorWidth) { } const packedCases = []; - const packedParameterTypes = parameterTypes.map(p => TypeVec(vectorWidth, p)); + const packedParameterTypes = parameterTypes.map((p) => TypeVec(vectorWidth, p)); const packedResultType = new VectorType(vectorWidth, resultType); - const clampCaseIdx = idx => Math.min(idx, cases.length - 1); + const clampCaseIdx = (idx) => Math.min(idx, cases.length - 1); let caseIdx = 0; while (caseIdx < cases.length) { @@ -1095,7 +1122,7 @@ function packScalarsToVector(parameterTypes, resultType, cases, vectorWidth) { cmp_impls[i] = toComparator(cases[clampCaseIdx(caseIdx + i)].expected).compare; } const comparators = { - compare: got => { + compare: (got) => { let matched = true; const gElements = new Array(vectorWidth); const eElements = new Array(vectorWidth); @@ -1108,10 +1135,10 @@ function packScalarsToVector(parameterTypes, resultType, cases, vectorWidth) { return { matched, got: `${packedResultType}(${gElements.join(', ')})`, - expected: `${packedResultType}(${eElements.join(', ')})`, + expected: `${packedResultType}(${eElements.join(', ')})` }; }, - kind: 'packed', + kind: 'packed' }; // Append the new packed case @@ -1122,176 +1149,6 @@ function packScalarsToVector(parameterTypes, resultType, cases, vectorWidth) { return { cases: packedCases, parameterTypes: packedParameterTypes, - resultType: packedResultType, + resultType: packedResultType }; -} - -/** - * Indicates bounds that acceptance intervals need to be within to avoid inputs - * being filtered out. This is used for const-eval tests, since going OOB will - * cause a validation error not an execution error. - */ - -/** - * @returns array of Case for the input params with op applied - * @param param0s array of inputs to try for the first param - * @param param1s array of inputs to try for the second param - * @param op callback called on each pair of inputs to produce each case - * @param quantize function to quantize all values - * @param scalarize function to convert numbers to Scalars - */ -function generateScalarBinaryToScalarCases(param0s, param1s, op, quantize, scalarize) { - param0s = param0s.map(quantize); - param1s = param1s.map(quantize); - return cartesianProduct(param0s, param1s).reduce((cases, e) => { - const expected = op(e[0], e[1]); - if (expected !== undefined) { - cases.push({ input: [scalarize(e[0]), scalarize(e[1])], expected: scalarize(expected) }); - } - return cases; - }, new Array()); -} - -/** - * @returns an array of Cases for operations over a range of inputs - * @param param0s array of inputs to try for the first param - * @param param1s array of inputs to try for the second param - * @param op callback called on each pair of inputs to produce each case - */ -export function generateBinaryToI32Cases(param0s, param1s, op) { - return generateScalarBinaryToScalarCases(param0s, param1s, op, quantizeToI32, i32); -} - -/** - * @returns an array of Cases for operations over a range of inputs - * @param param0s array of inputs to try for the first param - * @param param1s array of inputs to try for the second param - * @param op callback called on each pair of inputs to produce each case - */ -export function generateBinaryToU32Cases(param0s, param1s, op) { - return generateScalarBinaryToScalarCases(param0s, param1s, op, quantizeToU32, u32); -} - -/** - * @returns a Case for the input params with op applied - * @param scalar scalar param - * @param vector vector param (2, 3, or 4 elements) - * @param op the op to apply to scalar and vector - * @param quantize function to quantize all values in vectors and scalars - * @param scalarize function to convert numbers to Scalars - */ -function makeScalarVectorBinaryToVectorCase(scalar, vector, op, quantize, scalarize) { - scalar = quantize(scalar); - vector = vector.map(quantize); - const result = vector.map(v => op(scalar, v)); - if (result.includes(undefined)) { - return undefined; - } - return { - input: [scalarize(scalar), new Vector(vector.map(scalarize))], - expected: new Vector(result.map(scalarize)), - }; -} - -/** - * @returns array of Case for the input params with op applied - * @param scalars array of scalar params - * @param vectors array of vector params (2, 3, or 4 elements) - * @param op the op to apply to each pair of scalar and vector - * @param quantize function to quantize all values in vectors and scalars - * @param scalarize function to convert numbers to Scalars - */ -function generateScalarVectorBinaryToVectorCases(scalars, vectors, op, quantize, scalarize) { - const cases = new Array(); - scalars.forEach(s => { - vectors.forEach(v => { - const c = makeScalarVectorBinaryToVectorCase(s, v, op, quantize, scalarize); - if (c !== undefined) { - cases.push(c); - } - }); - }); - return cases; -} - -/** - * @returns a Case for the input params with op applied - * @param vector vector param (2, 3, or 4 elements) - * @param scalar scalar param - * @param op the op to apply to vector and scalar - * @param quantize function to quantize all values in vectors and scalars - * @param scalarize function to convert numbers to Scalars - */ -function makeVectorScalarBinaryToVectorCase(vector, scalar, op, quantize, scalarize) { - vector = vector.map(quantize); - scalar = quantize(scalar); - const result = vector.map(v => op(v, scalar)); - if (result.includes(undefined)) { - return undefined; - } - return { - input: [new Vector(vector.map(scalarize)), scalarize(scalar)], - expected: new Vector(result.map(scalarize)), - }; -} - -/** - * @returns array of Case for the input params with op applied - * @param vectors array of vector params (2, 3, or 4 elements) - * @param scalars array of scalar params - * @param op the op to apply to each pair of vector and scalar - * @param quantize function to quantize all values in vectors and scalars - * @param scalarize function to convert numbers to Scalars - */ -function generateVectorScalarBinaryToVectorCases(vectors, scalars, op, quantize, scalarize) { - const cases = new Array(); - scalars.forEach(s => { - vectors.forEach(v => { - const c = makeVectorScalarBinaryToVectorCase(v, s, op, quantize, scalarize); - if (c !== undefined) { - cases.push(c); - } - }); - }); - return cases; -} - -/** - * @returns array of Case for the input params with op applied - * @param scalars array of scalar params - * @param vectors array of vector params (2, 3, or 4 elements) - * @param op he op to apply to each pair of scalar and vector - */ -export function generateU32VectorBinaryToVectorCases(scalars, vectors, op) { - return generateScalarVectorBinaryToVectorCases(scalars, vectors, op, quantizeToU32, u32); -} - -/** - * @returns array of Case for the input params with op applied - * @param vectors array of vector params (2, 3, or 4 elements) - * @param scalars array of scalar params - * @param op he op to apply to each pair of vector and scalar - */ -export function generateVectorU32BinaryToVectorCases(vectors, scalars, op) { - return generateVectorScalarBinaryToVectorCases(vectors, scalars, op, quantizeToU32, u32); -} - -/** - * @returns array of Case for the input params with op applied - * @param scalars array of scalar params - * @param vectors array of vector params (2, 3, or 4 elements) - * @param op he op to apply to each pair of scalar and vector - */ -export function generateI32VectorBinaryToVectorCases(scalars, vectors, op) { - return generateScalarVectorBinaryToVectorCases(scalars, vectors, op, quantizeToI32, i32); -} - -/** - * @returns array of Case for the input params with op applied - * @param vectors array of vector params (2, 3, or 4 elements) - * @param scalars array of scalar params - * @param op he op to apply to each pair of vector and scalar - */ -export function generateVectorI32BinaryToVectorCases(vectors, scalars, op) { - return generateVectorScalarBinaryToVectorCases(vectors, scalars, op, quantizeToI32, i32); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/interval_filter.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/interval_filter.js new file mode 100644 index 00000000000..d70e087a74c --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/interval_filter.js @@ -0,0 +1,9 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** + * Indicates bounds that acceptance intervals need to be within to avoid inputs + * being filtered out. This is used for const-eval tests, since going OOB will + * cause a validation error not an execution error. + */ +// No expectations +export {}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.cache.js new file mode 100644 index 00000000000..97917cb2a32 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.cache.js @@ -0,0 +1,13 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { scalarF64Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/af_arithmetic', { + negation: () => { + return FP.abstract.generateScalarToIntervalCases( + scalarF64Range({ neg_norm: 250, neg_sub: 20, pos_sub: 20, pos_norm: 250 }), + 'unfiltered', + FP.abstract.negationInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.spec.js index faeeb97245e..868057236bf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_arithmetic.spec.js @@ -1,42 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for AbstractFloat arithmetic unary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeAbstractFloat } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { fullF64Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { onlyConstInputSource, run } from '../expression.js'; +import { d } from './af_arithmetic.cache.js'; import { abstractUnary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/af_arithmetic', { - negation: () => { - return FP.abstract.generateScalarToIntervalCases( - fullF64Range({ neg_norm: 250, neg_sub: 20, pos_sub: 20, pos_norm: 250 }), - 'unfiltered', - FP.abstract.negationInterval - ); - }, -}); - -g.test('negation') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('negation'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: -x Accuracy: Correctly rounded ` - ) - .params(u => - u.combine('inputSource', onlyConstInputSource).combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(async t => { - const cases = await d.get('negation'); - await run(t, abstractUnary('-'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases, 1); - }); +). +params((u) => +u. +combine('inputSource', onlyConstInputSource). +combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('negation'); + await run(t, abstractUnary('-'), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases, 1); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.cache.js new file mode 100644 index 00000000000..70d50ca609a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.cache.js @@ -0,0 +1,51 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../util/constants.js';import { abstractFloat } from '../../../../util/conversion.js';import { FP } from '../../../../util/floating_point.js'; +import { + isSubnormalNumberF64, + limitedScalarF64Range, + scalarF64Range } from +'../../../../util/math.js'; +import { reinterpretU64AsF64 } from '../../../../util/reinterpret.js'; +import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/af_assignment', { + abstract: () => { + const inputs = [ + // Values that are useful for debugging the underlying framework/shader code, since it cannot be directly unit tested. + 0, + 0.5, + 0.5, + 1, + -1, + reinterpretU64AsF64(0x7000_0000_0000_0001n), // smallest magnitude negative subnormal with non-zero mantissa + reinterpretU64AsF64(0x0000_0000_0000_0001n), // smallest magnitude positive subnormal with non-zero mantissa + reinterpretU64AsF64(0x600a_aaaa_5555_5555n), // negative subnormal with obvious pattern + reinterpretU64AsF64(0x000a_aaaa_5555_5555n), // positive subnormal with obvious pattern + reinterpretU64AsF64(0x0010_0000_0000_0001n), // smallest magnitude negative normal with non-zero mantissa + reinterpretU64AsF64(0x0010_0000_0000_0001n), // smallest magnitude positive normal with non-zero mantissa + reinterpretU64AsF64(0xf555_5555_aaaa_aaaan), // negative normal with obvious pattern + reinterpretU64AsF64(0x5555_5555_aaaa_aaaan), // positive normal with obvious pattern + reinterpretU64AsF64(0xffef_ffff_ffff_ffffn), // largest magnitude negative normal + reinterpretU64AsF64(0x7fef_ffff_ffff_ffffn), // largest magnitude positive normal + // WebGPU implementation stressing values + ...scalarF64Range()]; + + return inputs.map((f) => { + return { + input: abstractFloat(f), + expected: isSubnormalNumberF64(f) ? abstractFloat(0) : abstractFloat(f) + }; + }); + }, + f32: () => { + return limitedScalarF64Range(kValue.f32.negative.min, kValue.f32.positive.max).map((f) => { + return { input: abstractFloat(f), expected: FP.f32.correctlyRoundedInterval(f) }; + }); + }, + f16: () => { + return limitedScalarF64Range(kValue.f16.negative.min, kValue.f16.positive.max).map((f) => { + return { input: abstractFloat(f), expected: FP.f16.correctlyRoundedInterval(f) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.spec.js index 0428a97e70b..fdd793e1825 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/af_assignment.spec.js @@ -1,117 +1,68 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for assignment of AbstractFloats -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { kValue } from '../../../../util/constants.js'; -import { abstractFloat, TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { - filteredF64Range, - fullF64Range, - isSubnormalNumberF64, - reinterpretU64AsF64, -} from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeAbstractFloat, TypeF16, TypeF32 } from '../../../../util/conversion.js'; import { + abstractFloatShaderBuilder, basicExpressionBuilder, onlyConstInputSource, - run, -} from '../expression.js'; + run } from +'../expression.js'; + +import { d } from './af_assignment.cache.js'; function concrete_assignment() { - return basicExpressionBuilder(value => `${value}`); + return basicExpressionBuilder((value) => `${value}`); } function abstract_assignment() { - return abstractFloatShaderBuilder(value => `${value}`); + return abstractFloatShaderBuilder((value) => `${value}`); } export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/af_assignment', { - abstract: () => { - const inputs = [ - // Values that are useful for debugging the underlying framework/shader code, since it cannot be directly unit tested. - 0, - 0.5, - 0.5, - 1, - -1, - reinterpretU64AsF64(0x7000_0000_0000_0001n), // smallest magnitude negative subnormal with non-zero mantissa - reinterpretU64AsF64(0x0000_0000_0000_0001n), // smallest magnitude positive subnormal with non-zero mantissa - reinterpretU64AsF64(0x600a_aaaa_5555_5555n), // negative subnormal with obvious pattern - reinterpretU64AsF64(0x000a_aaaa_5555_5555n), // positive subnormal with obvious pattern - reinterpretU64AsF64(0x0010_0000_0000_0001n), // smallest magnitude negative normal with non-zero mantissa - reinterpretU64AsF64(0x0010_0000_0000_0001n), // smallest magnitude positive normal with non-zero mantissa - reinterpretU64AsF64(0xf555_5555_aaaa_aaaan), // negative normal with obvious pattern - reinterpretU64AsF64(0x5555_5555_aaaa_aaaan), // positive normal with obvious pattern - reinterpretU64AsF64(0xffef_ffff_ffff_ffffn), // largest magnitude negative normal - reinterpretU64AsF64(0x7fef_ffff_ffff_ffffn), // largest magnitude positive normal - // WebGPU implementation stressing values - ...fullF64Range(), - ]; - - return inputs.map(f => { - return { - input: abstractFloat(f), - expected: isSubnormalNumberF64(f) ? abstractFloat(0) : abstractFloat(f), - }; - }); - }, - f32: () => { - return filteredF64Range(kValue.f32.negative.min, kValue.f32.positive.max).map(f => { - return { input: abstractFloat(f), expected: FP.f32.correctlyRoundedInterval(f) }; - }); - }, - f16: () => { - return filteredF64Range(kValue.f16.negative.min, kValue.f16.positive.max).map(f => { - return { input: abstractFloat(f), expected: FP.f16.correctlyRoundedInterval(f) }; - }); - }, -}); - -g.test('abstract') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion') - .desc( - ` +g.test('abstract'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion'). +desc( + ` testing that extracting abstract floats works ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('abstract'); - await run(t, abstract_assignment(), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases, 1); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('abstract'); + await run(t, abstract_assignment(), [TypeAbstractFloat], TypeAbstractFloat, t.params, cases, 1); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion'). +desc( + ` concretizing to f32 ` - ) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, concrete_assignment(), [TypeAbstractFloat], TypeF32, t.params, cases); - }); +). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, concrete_assignment(), [TypeAbstractFloat], TypeF32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion') - .desc( - ` +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-conversion'). +desc( + ` concretizing to f16 ` - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .params(u => u.combine('inputSource', onlyConstInputSource)) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, concrete_assignment(), [TypeAbstractFloat], TypeF16, t.params, cases); - }); +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +params((u) => u.combine('inputSource', onlyConstInputSource)). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, concrete_assignment(), [TypeAbstractFloat], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.cache.js new file mode 100644 index 00000000000..f0ca9057744 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.cache.js @@ -0,0 +1,54 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { anyOf } from '../../../../util/compare.js';import { bool, f16, f32, i32, u32 } from '../../../../util/conversion.js';import { + fullI32Range, + fullU32Range, + isSubnormalNumberF16, + isSubnormalNumberF32, + scalarF16Range, + scalarF32Range } from +'../../../../util/math.js'; +import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/bool_conversion', { + bool: () => { + return [ + { input: bool(true), expected: bool(true) }, + { input: bool(false), expected: bool(false) }]; + + }, + u32: () => { + return fullU32Range().map((u) => { + return { input: u32(u), expected: u === 0 ? bool(false) : bool(true) }; + }); + }, + i32: () => { + return fullI32Range().map((i) => { + return { input: i32(i), expected: i === 0 ? bool(false) : bool(true) }; + }); + }, + f32: () => { + return scalarF32Range().map((f) => { + const expected = []; + if (f !== 0) { + expected.push(bool(true)); + } + if (isSubnormalNumberF32(f)) { + expected.push(bool(false)); + } + return { input: f32(f), expected: anyOf(...expected) }; + }); + }, + f16: () => { + return scalarF16Range().map((f) => { + const expected = []; + if (f !== 0) { + expected.push(bool(true)); + } + if (isSubnormalNumberF16(f)) { + expected.push(bool(false)); + } + return { input: f16(f), expected: anyOf(...expected) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.spec.js index a56b6850fd3..22ff61aa00d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_conversion.spec.js @@ -1,164 +1,110 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the boolean conversion operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { anyOf } from '../../../../util/compare.js'; -import { - bool, - f32, - f16, - i32, - TypeBool, - TypeF32, - TypeF16, - TypeI32, - TypeU32, - u32, -} from '../../../../util/conversion.js'; -import { - fullF32Range, - fullF16Range, - fullI32Range, - fullU32Range, - isSubnormalNumberF32, - isSubnormalNumberF16, -} from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeF16, TypeF32, TypeI32, TypeU32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './bool_conversion.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/bool_conversion', { - bool: () => { - return [ - { input: bool(true), expected: bool(true) }, - { input: bool(false), expected: bool(false) }, - ]; - }, - u32: () => { - return fullU32Range().map(u => { - return { input: u32(u), expected: u === 0 ? bool(false) : bool(true) }; - }); - }, - i32: () => { - return fullI32Range().map(i => { - return { input: i32(i), expected: i === 0 ? bool(false) : bool(true) }; - }); - }, - f32: () => { - return fullF32Range().map(f => { - const expected = []; - if (f !== 0) { - expected.push(bool(true)); - } - if (isSubnormalNumberF32(f)) { - expected.push(bool(false)); - } - return { input: f32(f), expected: anyOf(...expected) }; - }); - }, - f16: () => { - return fullF16Range().map(f => { - const expected = []; - if (f !== 0) { - expected.push(bool(true)); - } - if (isSubnormalNumberF16(f)) { - expected.push(bool(false)); - } - return { input: f16(f), expected: anyOf(...expected) }; - }); - }, -}); - /** Generate expression builder based on how the test case is to be vectorized */ function vectorizeToExpression(vectorize) { return vectorize === undefined ? unary('bool') : unary(`vec${vectorize}`); } -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` bool(e), where e is a bool Identity operation ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('bool'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('bool'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeBool, t.params, cases); +}); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#bool-builtin') - .desc( - ` +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#bool-builtin'). +desc( + ` bool(e), where e is a u32 Coercion to boolean. The result is false if e is 0, and true otherwise. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('u32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('u32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeBool, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` bool(e), where e is a i32 Coercion to boolean. The result is false if e is 0, and true otherwise. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('i32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('i32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeBool, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` bool(e), where e is a f32 Coercion to boolean. The result is false if e is 0.0 or -0.0, and true otherwise. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeBool, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` bool(e), where e is a f16 Coercion to boolean. The result is false if e is 0.0 or -0.0, and true otherwise. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeBool, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_logical.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_logical.spec.js index fb281d04b50..ac8da84846d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_logical.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/bool_logical.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the boolean unary logical expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { bool, TypeBool } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; @@ -12,21 +11,23 @@ import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -g.test('negation') - .specURL('https://www.w3.org/TR/WGSL/#logical-expr') - .desc( - ` +g.test('negation'). +specURL('https://www.w3.org/TR/WGSL/#logical-expr'). +desc( + ` Expression: !e Logical negation. The result is true when e is false and false when e is true. Component-wise when T is a vector. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = [ - { input: bool(true), expected: bool(false) }, - { input: bool(false), expected: bool(true) }, - ]; +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = [ + { input: bool(true), expected: bool(false) }, + { input: bool(false), expected: bool(true) }]; - await run(t, unary('!'), [TypeBool], TypeBool, t.params, cases); - }); + + await run(t, unary('!'), [TypeBool], TypeBool, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.cache.js new file mode 100644 index 00000000000..5c68b275cb0 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.cache.js @@ -0,0 +1,13 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { scalarF16Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/f16_arithmetic', { + negation: () => { + return FP.f16.generateScalarToIntervalCases( + scalarF16Range({ neg_norm: 250, neg_sub: 20, pos_sub: 20, pos_norm: 250 }), + 'unfiltered', + FP.f16.negationInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.spec.js index 78ce83b4197..fd85be26dd9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_arithmetic.spec.js @@ -1,43 +1,32 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the f16 arithmetic unary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF16 } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { fullF16Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './f16_arithmetic.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/f16_arithmetic', { - negation: () => { - return FP.f16.generateScalarToIntervalCases( - fullF16Range({ neg_norm: 250, neg_sub: 20, pos_sub: 20, pos_norm: 250 }), - 'unfiltered', - FP.f16.negationInterval - ); - }, -}); - -g.test('negation') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('negation'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: -x Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('negation'); - await run(t, unary('-'), [TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('negation'); + await run(t, unary('-'), [TypeF16], TypeF16, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.cache.js new file mode 100644 index 00000000000..e7ffcd20180 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.cache.js @@ -0,0 +1,109 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { bool, f16, i32, u32 } from '../../../../util/conversion.js';import { FP, FPInterval } from '../../../../util/floating_point.js';import { + fullI32Range, + fullU32Range, + scalarF16Range, + scalarF32Range, + sparseMatrixF16Range, + sparseMatrixF32Range } from +'../../../../util/math.js'; +import { makeCaseCache } from '../case_cache.js'; + +const f16FiniteRangeInterval = new FPInterval( + 'f32', + FP.f16.constants().negative.min, + FP.f16.constants().positive.max +); + +// Cases: f32_matCxR_[non_]const +// Note that f32 values may be not exactly representable in f16 and/or out of range. +const f32_mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`f32_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixToMatrixCases( + sparseMatrixF32Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f16.correctlyRoundedMatrix + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: f16_matCxR_[non_]const +const f16_mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`f16_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + // Input matrix is of f16 types, use f16.generateMatrixToMatrixCases. + return FP.f16.generateMatrixToMatrixCases( + sparseMatrixF16Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f16.correctlyRoundedMatrix + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('unary/f16_conversion', { + bool: () => { + return [ + { input: bool(true), expected: f16(1.0) }, + { input: bool(false), expected: f16(0.0) }]; + + }, + u32_non_const: () => { + return [...fullU32Range(), 65504].map((u) => { + return { input: u32(u), expected: FP.f16.correctlyRoundedInterval(u) }; + }); + }, + u32_const: () => { + return [...fullU32Range(), 65504]. + filter((v) => f16FiniteRangeInterval.contains(v)). + map((u) => { + return { input: u32(u), expected: FP.f16.correctlyRoundedInterval(u) }; + }); + }, + i32_non_const: () => { + return [...fullI32Range(), 65504, -65504].map((i) => { + return { input: i32(i), expected: FP.f16.correctlyRoundedInterval(i) }; + }); + }, + i32_const: () => { + return [...fullI32Range(), 65504, -65504]. + filter((v) => f16FiniteRangeInterval.contains(v)). + map((i) => { + return { input: i32(i), expected: FP.f16.correctlyRoundedInterval(i) }; + }); + }, + // Note that f32 values may be not exactly representable in f16 and/or out of range. + f32_non_const: () => { + return FP.f32.generateScalarToIntervalCases( + [...scalarF32Range(), 65535.996, -65535.996], + 'unfiltered', + FP.f16.correctlyRoundedInterval + ); + }, + f32_const: () => { + return FP.f32.generateScalarToIntervalCases( + [...scalarF32Range(), 65535.996, -65535.996], + 'finite', + FP.f16.correctlyRoundedInterval + ); + }, + // All f16 values are exactly representable in f16. + f16: () => { + return scalarF16Range().map((f) => { + return { input: f16(f), expected: FP.f16.correctlyRoundedInterval(f) }; + }); + }, + ...f32_mat_cases, + ...f16_mat_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.spec.js index 169dd8bf424..562b68b3396 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f16_conversion.spec.js @@ -1,136 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the f32 conversion operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { - bool, - f16, - i32, TypeBool, - TypeF32, TypeF16, + TypeF32, TypeI32, TypeMat, - TypeU32, - u32, -} from '../../../../util/conversion.js'; -import { FP, FPInterval } from '../../../../util/floating_point.js'; -import { - fullF32Range, - fullF16Range, - fullI32Range, - fullU32Range, - sparseMatrixF32Range, - sparseMatrixF16Range, -} from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; + TypeU32 } from +'../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './f16_conversion.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -const f16FiniteRangeInterval = new FPInterval( - 'f32', - FP.f16.constants().negative.min, - FP.f16.constants().positive.max -); - -// Cases: f32_matCxR_[non_]const -// Note that f32 values may be not exactly representable in f16 and/or out of range. -const f32_mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`f32_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixToMatrixCases( - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.correctlyRoundedMatrix - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_matCxR_[non_]const -const f16_mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`f16_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - // Input matrix is of f16 types, use f16.generateMatrixToMatrixCases. - return FP.f16.generateMatrixToMatrixCases( - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f16.correctlyRoundedMatrix - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('unary/f16_conversion', { - bool: () => { - return [ - { input: bool(true), expected: f16(1.0) }, - { input: bool(false), expected: f16(0.0) }, - ]; - }, - u32_non_const: () => { - return [...fullU32Range(), 65504].map(u => { - return { input: u32(u), expected: FP.f16.correctlyRoundedInterval(u) }; - }); - }, - u32_const: () => { - return [...fullU32Range(), 65504] - .filter(v => f16FiniteRangeInterval.contains(v)) - .map(u => { - return { input: u32(u), expected: FP.f16.correctlyRoundedInterval(u) }; - }); - }, - i32_non_const: () => { - return [...fullI32Range(), 65504, -65504].map(i => { - return { input: i32(i), expected: FP.f16.correctlyRoundedInterval(i) }; - }); - }, - i32_const: () => { - return [...fullI32Range(), 65504, -65504] - .filter(v => f16FiniteRangeInterval.contains(v)) - .map(i => { - return { input: i32(i), expected: FP.f16.correctlyRoundedInterval(i) }; - }); - }, - // Note that f32 values may be not exactly representable in f16 and/or out of range. - f32_non_const: () => { - return FP.f32.generateScalarToIntervalCases( - [...fullF32Range(), 65535.996, -65535.996], - 'unfiltered', - FP.f16.correctlyRoundedInterval - ); - }, - f32_const: () => { - return FP.f32.generateScalarToIntervalCases( - [...fullF32Range(), 65535.996, -65535.996], - 'finite', - FP.f16.correctlyRoundedInterval - ); - }, - // All f16 values are exactly representable in f16. - f16: () => { - return fullF16Range().map(f => { - return { input: f16(f), expected: FP.f16.correctlyRoundedInterval(f) }; - }); - }, - ...f32_mat_cases, - ...f16_mat_cases, -}); - /** Generate a ShaderBuilder based on how the test case is to be vectorized */ function vectorizeToExpression(vectorize) { return vectorize === undefined ? unary('f16') : unary(`vec${vectorize}`); @@ -141,148 +29,162 @@ function matrixExperession(cols, rows) { return unary(`mat${cols}x${rows}`); } -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f16(e), where e is a bool The result is 1.0 if e is true and 0.0 otherwise ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('bool'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeF16, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('bool'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeF16, t.params, cases); +}); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#bool-builtin') - .desc( - ` +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#bool-builtin'). +desc( + ` f16(e), where e is a u32 Converted to f16, +/-Inf if out of range ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeF16, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'u32_const' : 'u32_non_const'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeF16, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f16(e), where e is a i32 Converted to f16, +/-Inf if out of range ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'i32_const' : 'i32_non_const'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeF16, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'i32_const' : 'i32_non_const'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeF16, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f16(e), where e is a f32 Correctly rounded to f16 ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeF16, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get(t.params.inputSource === 'const' ? 'f32_const' : 'f32_non_const'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeF16, t.params, cases); +}); -g.test('f32_mat') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f32 matrix to f16 matrix tests`) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f32_mat${cols}x${rows}_const` - : `f32_mat${cols}x${rows}_non_const` - ); +g.test('f32_mat'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f32 matrix to f16 matrix tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f32_mat${cols}x${rows}_const` : + `f32_mat${cols}x${rows}_non_const` + ); + await run( + t, + matrixExperession(cols, rows), + [TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); - await run( - t, - matrixExperession(cols, rows), - [TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f16(e), where e is a f16 Identical. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeF16, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeF16, t.params, cases); +}); -g.test('f16_mat') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f16 matrix to f16 matrix tests, expected identical`) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f16_mat${cols}x${rows}_const` - : `f16_mat${cols}x${rows}_non_const` - ); - - await run( - t, - matrixExperession(cols, rows), - [TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF16), - t.params, - cases - ); - }); +g.test('f16_mat'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f16 matrix to f16 matrix tests, expected identical`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f16_mat${cols}x${rows}_const` : + `f16_mat${cols}x${rows}_non_const` + ); + await run( + t, + matrixExperession(cols, rows), + [TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF16), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.cache.js new file mode 100644 index 00000000000..cdd991a4f9b --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.cache.js @@ -0,0 +1,13 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { FP } from '../../../../util/floating_point.js';import { scalarF32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/f32_arithmetic', { + negation: () => { + return FP.f32.generateScalarToIntervalCases( + scalarF32Range({ neg_norm: 250, neg_sub: 20, pos_sub: 20, pos_norm: 250 }), + 'unfiltered', + FP.f32.negationInterval + ); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.spec.js index bbd8c8afc96..bb6861b1d66 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_arithmetic.spec.js @@ -1,40 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the f32 arithmetic unary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { TypeF32 } from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { fullF32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './f32_arithmetic.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/f32_arithmetic', { - negation: () => { - return FP.f32.generateScalarToIntervalCases( - fullF32Range({ neg_norm: 250, neg_sub: 20, pos_sub: 20, pos_norm: 250 }), - 'unfiltered', - FP.f32.negationInterval - ); - }, -}); - -g.test('negation') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('negation'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: -x Accuracy: Correctly rounded ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('negation'); - await run(t, unary('-'), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('negation'); + await run(t, unary('-'), [TypeF32], TypeF32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.cache.js new file mode 100644 index 00000000000..eb8fbe2c790 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.cache.js @@ -0,0 +1,79 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { bool, f16, f32, i32, u32 } from '../../../../util/conversion.js';import { FP } from '../../../../util/floating_point.js';import { + fullI32Range, + fullU32Range, + scalarF16Range, + scalarF32Range, + sparseMatrixF16Range, + sparseMatrixF32Range } from +'../../../../util/math.js'; +import { makeCaseCache } from '../case_cache.js'; + +// Cases: f32_matCxR_[non_]const +const f32_mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`f32_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + return FP.f32.generateMatrixToMatrixCases( + sparseMatrixF32Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f32.correctlyRoundedMatrix + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +// Cases: f16_matCxR_[non_]const +// Note that all f16 values are exactly representable in f32. +const f16_mat_cases = [2, 3, 4]. +flatMap((cols) => +[2, 3, 4].flatMap((rows) => +[true, false].map((nonConst) => ({ + [`f16_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { + // Input matrix is of f16 types, use f16.generateMatrixToMatrixCases. + return FP.f16.generateMatrixToMatrixCases( + sparseMatrixF16Range(cols, rows), + nonConst ? 'unfiltered' : 'finite', + FP.f32.correctlyRoundedMatrix + ); + } +})) +) +). +reduce((a, b) => ({ ...a, ...b }), {}); + +export const d = makeCaseCache('unary/f32_conversion', { + bool: () => { + return [ + { input: bool(true), expected: f32(1.0) }, + { input: bool(false), expected: f32(0.0) }]; + + }, + u32: () => { + return fullU32Range().map((u) => { + return { input: u32(u), expected: FP.f32.correctlyRoundedInterval(u) }; + }); + }, + i32: () => { + return fullI32Range().map((i) => { + return { input: i32(i), expected: FP.f32.correctlyRoundedInterval(i) }; + }); + }, + f32: () => { + return scalarF32Range().map((f) => { + return { input: f32(f), expected: FP.f32.correctlyRoundedInterval(f) }; + }); + }, + // All f16 values are exactly representable in f32. + f16: () => { + return scalarF16Range().map((f) => { + return { input: f16(f), expected: FP.f32.correctlyRoundedInterval(f) }; + }); + }, + ...f32_mat_cases, + ...f16_mat_cases +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.spec.js index b1902e4d51d..6cb4c322949 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/f32_conversion.spec.js @@ -1,107 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the f32 conversion operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; import { - bool, - f32, - f16, - i32, TypeBool, - TypeF32, TypeF16, + TypeF32, TypeI32, TypeMat, - TypeU32, - u32, -} from '../../../../util/conversion.js'; -import { FP } from '../../../../util/floating_point.js'; -import { - fullF32Range, - fullF16Range, - fullI32Range, - fullU32Range, - sparseMatrixF32Range, - sparseMatrixF16Range, -} from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; + TypeU32 } from +'../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './f32_conversion.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -// Cases: f32_matCxR_[non_]const -const f32_mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`f32_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - return FP.f32.generateMatrixToMatrixCases( - sparseMatrixF32Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.correctlyRoundedMatrix - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -// Cases: f16_matCxR_[non_]const -// Note that all f16 values are exactly representable in f32. -const f16_mat_cases = [2, 3, 4] - .flatMap(cols => - [2, 3, 4].flatMap(rows => - [true, false].map(nonConst => ({ - [`f16_mat${cols}x${rows}_${nonConst ? 'non_const' : 'const'}`]: () => { - // Input matrix is of f16 types, use f16.generateMatrixToMatrixCases. - return FP.f16.generateMatrixToMatrixCases( - sparseMatrixF16Range(cols, rows), - nonConst ? 'unfiltered' : 'finite', - FP.f32.correctlyRoundedMatrix - ); - }, - })) - ) - ) - .reduce((a, b) => ({ ...a, ...b }), {}); - -export const d = makeCaseCache('unary/f32_conversion', { - bool: () => { - return [ - { input: bool(true), expected: f32(1.0) }, - { input: bool(false), expected: f32(0.0) }, - ]; - }, - u32: () => { - return fullU32Range().map(u => { - return { input: u32(u), expected: FP.f32.correctlyRoundedInterval(u) }; - }); - }, - i32: () => { - return fullI32Range().map(i => { - return { input: i32(i), expected: FP.f32.correctlyRoundedInterval(i) }; - }); - }, - f32: () => { - return fullF32Range().map(f => { - return { input: f32(f), expected: FP.f32.correctlyRoundedInterval(f) }; - }); - }, - // All f16 values are exactly representable in f32. - f16: () => { - return fullF16Range().map(f => { - return { input: f16(f), expected: FP.f32.correctlyRoundedInterval(f) }; - }); - }, - ...f32_mat_cases, - ...f16_mat_cases, -}); - /** Generate a ShaderBuilder based on how the test case is to be vectorized */ function vectorizeToExpression(vectorize) { return vectorize === undefined ? unary('f32') : unary(`vec${vectorize}`); @@ -112,133 +29,147 @@ function matrixExperession(cols, rows) { return unary(`mat${cols}x${rows}`); } -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f32(e), where e is a bool The result is 1.0 if e is true and 0.0 otherwise ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('bool'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('bool'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeF32, t.params, cases); +}); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#bool-builtin') - .desc( - ` +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#bool-builtin'). +desc( + ` f32(e), where e is a u32 Converted to f32 ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('u32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('u32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeF32, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f32(e), where e is a i32 Converted to f32 ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('i32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('i32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeF32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f32(e), where e is a f32 Identity operation ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeF32, t.params, cases); +}); -g.test('f32_mat') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f32 tests`) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f32_mat${cols}x${rows}_const` - : `f32_mat${cols}x${rows}_non_const` - ); +g.test('f32_mat'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f32 tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f32_mat${cols}x${rows}_const` : + `f32_mat${cols}x${rows}_non_const` + ); + await run( + t, + matrixExperession(cols, rows), + [TypeMat(cols, rows, TypeF32)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); - await run( - t, - matrixExperession(cols, rows), - [TypeMat(cols, rows, TypeF32)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); - -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` f32(e), where e is a f16 Expect the same value, since all f16 values is exactly representable in f32. ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeF32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeF32, t.params, cases); +}); -g.test('f16_mat') - .specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions') - .desc(`f16 matrix to f32 matrix tests`) - .params(u => - u.combine('inputSource', allInputSources).combine('cols', [2, 3, 4]).combine('rows', [2, 3, 4]) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(async t => { - const cols = t.params.cols; - const rows = t.params.rows; - const cases = await d.get( - t.params.inputSource === 'const' - ? `f16_mat${cols}x${rows}_const` - : `f16_mat${cols}x${rows}_non_const` - ); - - await run( - t, - matrixExperession(cols, rows), - [TypeMat(cols, rows, TypeF16)], - TypeMat(cols, rows, TypeF32), - t.params, - cases - ); - }); +g.test('f16_mat'). +specURL('https://www.w3.org/TR/WGSL/#matrix-builtin-functions'). +desc(`f16 matrix to f32 matrix tests`). +params((u) => +u. +combine('inputSource', allInputSources). +combine('cols', [2, 3, 4]). +combine('rows', [2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn(async (t) => { + const cols = t.params.cols; + const rows = t.params.rows; + const cases = await d.get( + t.params.inputSource === 'const' ? + `f16_mat${cols}x${rows}_const` : + `f16_mat${cols}x${rows}_non_const` + ); + await run( + t, + matrixExperession(cols, rows), + [TypeMat(cols, rows, TypeF16)], + TypeMat(cols, rows, TypeF32), + t.params, + cases + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.cache.js new file mode 100644 index 00000000000..84708efa746 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.cache.js @@ -0,0 +1,11 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { i32 } from '../../../../util/conversion.js';import { fullI32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/i32_arithmetic', { + negation: () => { + return fullI32Range().map((e) => { + return { input: i32(e), expected: i32(-e) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.spec.js index d2afcec3acd..56a50f0814d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_arithmetic.spec.js @@ -1,36 +1,28 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the i32 arithmetic unary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { i32, TypeI32 } from '../../../../util/conversion.js'; -import { fullI32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeI32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './i32_arithmetic.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/i32_arithmetic', { - negation: () => { - return fullI32Range().map(e => { - return { input: i32(e), expected: i32(-e) }; - }); - }, -}); - -g.test('negation') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` +g.test('negation'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` Expression: -x ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('negation'); - await run(t, unary('-'), [TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('negation'); + await run(t, unary('-'), [TypeI32], TypeI32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.cache.js new file mode 100644 index 00000000000..00c8dd80194 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.cache.js @@ -0,0 +1,11 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { i32 } from '../../../../util/conversion.js';import { fullI32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/i32_complement', { + complement: () => { + return fullI32Range().map((e) => { + return { input: i32(e), expected: i32(~e) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.spec.js index 25b0bbce6cc..f3f4c71e8bb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_complement.spec.js @@ -1,36 +1,28 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the i32 bitwise complement operation -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { i32, TypeI32 } from '../../../../util/conversion.js'; -import { fullI32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeI32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './i32_complement.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/i32_complement', { - complement: () => { - return fullI32Range().map(e => { - return { input: i32(e), expected: i32(~e) }; - }); - }, -}); - -g.test('i32_complement') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('i32_complement'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` Expression: ~x ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('complement'); - await run(t, unary('~'), [TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('complement'); + await run(t, unary('~'), [TypeI32], TypeI32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.cache.js new file mode 100644 index 00000000000..39abb6a1cc0 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.cache.js @@ -0,0 +1,81 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../util/constants.js';import { bool, f16, f32, i32, u32 } from '../../../../util/conversion.js';import { + fullI32Range, + fullU32Range, + quantizeToF16, + quantizeToF32, + scalarF16Range, + scalarF32Range } from +'../../../../util/math.js'; +import { reinterpretU32AsI32 } from '../../../../util/reinterpret.js'; +import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/i32_conversion', { + bool: () => { + return [ + { input: bool(true), expected: i32(1) }, + { input: bool(false), expected: i32(0) }]; + + }, + u32: () => { + return fullU32Range().map((u) => { + return { input: u32(u), expected: i32(reinterpretU32AsI32(u)) }; + }); + }, + i32: () => { + return fullI32Range().map((i) => { + return { input: i32(i), expected: i32(i) }; + }); + }, + f32: () => { + return scalarF32Range().map((f) => { + // Handles zeros and subnormals + if (Math.abs(f) < 1.0) { + return { input: f32(f), expected: i32(0) }; + } + + if (f <= kValue.i32.negative.min) { + return { input: f32(f), expected: i32(kValue.i32.negative.min) }; + } + + if (f >= kValue.i32.positive.max) { + return { input: f32(f), expected: i32(kValue.i32.positive.max) }; + } + + // All f32 no larger than 2^24 has a precise interger part and a fractional part, just need + // to trunc towards 0 for the result integer. + if (Math.abs(f) <= 2 ** 24) { + return { input: f32(f), expected: i32(Math.trunc(f)) }; + } + + // All f32s between 2 ** 24 and kValue.i32.negative.min/.positive.max are + // integers, so in theory one could use them directly, expect that number + // is actually f64 internally, so they need to be quantized to f32 first. + // Cannot just use trunc here, since that might produce a i32 value that + // is precise in f64, but not in f32. + return { input: f32(f), expected: i32(quantizeToF32(f)) }; + }); + }, + f16: () => { + // Note that finite f16 values are always in range of i32. + return scalarF16Range().map((f) => { + // Handles zeros and subnormals + if (Math.abs(f) < 1.0) { + return { input: f16(f), expected: i32(0) }; + } + + // All f16 no larger than <= 2^12 has a precise interger part and a fractional part, just need + // to trunc towards 0 for the result integer. + if (Math.abs(f) <= 2 ** 12) { + return { input: f16(f), expected: i32(Math.trunc(f)) }; + } + + // All f16s larger than 2 ** 12 are integers, so in theory one could use them directly, expect + // that number is actually f64 internally, so they need to be quantized to f16 first. + // Cannot just use trunc here, since that might produce a i32 value that is precise in f64, + // but not in f16. + return { input: f16(f), expected: i32(quantizeToF16(f)) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.spec.js index b76b7e1466d..797df86bba7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/i32_conversion.spec.js @@ -1,187 +1,106 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the i32 conversion operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { kValue } from '../../../../util/constants.js'; -import { - bool, - f32, - f16, - i32, - reinterpretU32AsI32, - TypeBool, - TypeF32, - TypeF16, - TypeI32, - TypeU32, - u32, -} from '../../../../util/conversion.js'; -import { - fullF32Range, - fullF16Range, - fullI32Range, - fullU32Range, - quantizeToF32, - quantizeToF16, -} from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeF16, TypeF32, TypeI32, TypeU32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './i32_conversion.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/i32_conversion', { - bool: () => { - return [ - { input: bool(true), expected: i32(1) }, - { input: bool(false), expected: i32(0) }, - ]; - }, - u32: () => { - return fullU32Range().map(u => { - return { input: u32(u), expected: i32(reinterpretU32AsI32(u)) }; - }); - }, - i32: () => { - return fullI32Range().map(i => { - return { input: i32(i), expected: i32(i) }; - }); - }, - f32: () => { - return fullF32Range().map(f => { - // Handles zeros and subnormals - if (Math.abs(f) < 1.0) { - return { input: f32(f), expected: i32(0) }; - } - - if (f <= kValue.i32.negative.min) { - return { input: f32(f), expected: i32(kValue.i32.negative.min) }; - } - - if (f >= kValue.i32.positive.max) { - return { input: f32(f), expected: i32(kValue.i32.positive.max) }; - } - - // All f32 no larger than 2^24 has a precise interger part and a fractional part, just need - // to trunc towards 0 for the result integer. - if (Math.abs(f) <= 2 ** 24) { - return { input: f32(f), expected: i32(Math.trunc(f)) }; - } - - // All f32s between 2 ** 24 and kValue.i32.negative.min/.positive.max are - // integers, so in theory one could use them directly, expect that number - // is actually f64 internally, so they need to be quantized to f32 first. - // Cannot just use trunc here, since that might produce a i32 value that - // is precise in f64, but not in f32. - return { input: f32(f), expected: i32(quantizeToF32(f)) }; - }); - }, - f16: () => { - // Note that finite f16 values are always in range of i32. - return fullF16Range().map(f => { - // Handles zeros and subnormals - if (Math.abs(f) < 1.0) { - return { input: f16(f), expected: i32(0) }; - } - - // All f16 no larger than <= 2^12 has a precise interger part and a fractional part, just need - // to trunc towards 0 for the result integer. - if (Math.abs(f) <= 2 ** 12) { - return { input: f16(f), expected: i32(Math.trunc(f)) }; - } - - // All f16s larger than 2 ** 12 are integers, so in theory one could use them directly, expect - // that number is actually f64 internally, so they need to be quantized to f16 first. - // Cannot just use trunc here, since that might produce a i32 value that is precise in f64, - // but not in f16. - return { input: f16(f), expected: i32(quantizeToF16(f)) }; - }); - }, -}); - /** Generate a ShaderBuilder based on how the test case is to be vectorized */ function vectorizeToExpression(vectorize) { return vectorize === undefined ? unary('i32') : unary(`vec${vectorize}`); } -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` i32(e), where e is a bool The result is 1u if e is true and 0u otherwise ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('bool'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('bool'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeI32, t.params, cases); +}); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#bool-builtin') - .desc( - ` +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#bool-builtin'). +desc( + ` i32(e), where e is a u32 Reinterpretation of bits ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('u32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('u32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeI32, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` i32(e), where e is a i32 Identity operation ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('i32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('i32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeI32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` i32(e), where e is a f32 e is converted to i32, rounding towards zero ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeI32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` i32(e), where e is a f16 e is converted to u32, rounding towards zero ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeI32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeI32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.cache.js new file mode 100644 index 00000000000..816093a7db5 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.cache.js @@ -0,0 +1,11 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { u32 } from '../../../../util/conversion.js';import { fullU32Range } from '../../../../util/math.js';import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/u32_complement', { + complement: () => { + return fullU32Range().map((e) => { + return { input: u32(e), expected: u32(~e) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.spec.js index ce189d434d0..214e856c880 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_complement.spec.js @@ -1,36 +1,28 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the u32 bitwise complement operation -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { u32, TypeU32 } from '../../../../util/conversion.js'; -import { fullU32Range } from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeU32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './u32_complement.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/u32_complement', { - complement: () => { - return fullU32Range().map(e => { - return { input: u32(e), expected: u32(~e) }; - }); - }, -}); - -g.test('u32_complement') - .specURL('https://www.w3.org/TR/WGSL/#bit-expr') - .desc( - ` +g.test('u32_complement'). +specURL('https://www.w3.org/TR/WGSL/#bit-expr'). +desc( + ` Expression: ~x ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('complement'); - await run(t, unary('~'), [TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('complement'); + await run(t, unary('~'), [TypeU32], TypeU32, t.params, cases); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.cache.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.cache.js new file mode 100644 index 00000000000..33317a6e918 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.cache.js @@ -0,0 +1,77 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kValue } from '../../../../util/constants.js';import { bool, f16, f32, i32, u32 } from '../../../../util/conversion.js';import { + fullI32Range, + fullU32Range, + quantizeToF16, + quantizeToF32, + scalarF16Range, + scalarF32Range } from +'../../../../util/math.js'; +import { reinterpretI32AsU32 } from '../../../../util/reinterpret.js'; +import { makeCaseCache } from '../case_cache.js'; + +export const d = makeCaseCache('unary/u32_conversion', { + bool: () => { + return [ + { input: bool(true), expected: u32(1) }, + { input: bool(false), expected: u32(0) }]; + + }, + u32: () => { + return fullU32Range().map((u) => { + return { input: u32(u), expected: u32(u) }; + }); + }, + i32: () => { + return fullI32Range().map((i) => { + return { input: i32(i), expected: u32(reinterpretI32AsU32(i)) }; + }); + }, + f32: () => { + return scalarF32Range().map((f) => { + // Handles zeros, subnormals, and negatives + if (f < 1.0) { + return { input: f32(f), expected: u32(0) }; + } + + if (f >= kValue.u32.max) { + return { input: f32(f), expected: u32(kValue.u32.max) }; + } + + // All f32 no larger than 2^24 has a precise interger part and a fractional part, just need + // to trunc towards 0 for the result integer. + if (f <= 2 ** 24) { + return { input: f32(f), expected: u32(Math.floor(f)) }; + } + + // All f32s between 2 ** 24 and kValue.u32.max are integers, so in theory + // one could use them directly, expect that number is actually f64 + // internally, so they need to be quantized to f32 first. + // Cannot just use floor here, since that might produce a u32 value that + // is precise in f64, but not in f32. + return { input: f32(f), expected: u32(quantizeToF32(f)) }; + }); + }, + f16: () => { + // Note that all positive finite f16 values are in range of u32. + return scalarF16Range().map((f) => { + // Handles zeros, subnormals, and negatives + if (f < 1.0) { + return { input: f16(f), expected: u32(0) }; + } + + // All f16 no larger than <= 2^12 has a precise interger part and a fractional part, just need + // to trunc towards 0 for the result integer. + if (f <= 2 ** 12) { + return { input: f16(f), expected: u32(Math.trunc(f)) }; + } + + // All f16s larger than 2 ** 12 are integers, so in theory one could use them directly, expect + // that number is actually f64 internally, so they need to be quantized to f16 first. + // Cannot just use trunc here, since that might produce a u32 value that is precise in f64, + // but not in f16. + return { input: f16(f), expected: u32(quantizeToF16(f)) }; + }); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.spec.js index 573d9478d90..7a9894d7dad 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/u32_conversion.spec.js @@ -1,195 +1,120 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for the u32 conversion operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { GPUTest } from '../../../../gpu_test.js'; -import { kValue } from '../../../../util/constants.js'; -import { - bool, - f32, - f16, - i32, - reinterpretI32AsU32, - TypeBool, - TypeF32, - TypeF16, - TypeI32, - TypeU32, - u32, -} from '../../../../util/conversion.js'; -import { - fullF32Range, - fullF16Range, - fullI32Range, - fullU32Range, - quantizeToF32, - quantizeToF16, -} from '../../../../util/math.js'; -import { makeCaseCache } from '../case_cache.js'; +import { TypeBool, TypeF16, TypeF32, TypeI32, TypeU32 } from '../../../../util/conversion.js'; import { allInputSources, run } from '../expression.js'; +import { d } from './u32_conversion.cache.js'; import { unary } from './unary.js'; export const g = makeTestGroup(GPUTest); -export const d = makeCaseCache('unary/u32_conversion', { - bool: () => { - return [ - { input: bool(true), expected: u32(1) }, - { input: bool(false), expected: u32(0) }, - ]; - }, - u32: () => { - return fullU32Range().map(u => { - return { input: u32(u), expected: u32(u) }; - }); - }, - i32: () => { - return fullI32Range().map(i => { - return { input: i32(i), expected: u32(reinterpretI32AsU32(i)) }; - }); - }, - f32: () => { - return fullF32Range().map(f => { - // Handles zeros, subnormals, and negatives - if (f < 1.0) { - return { input: f32(f), expected: u32(0) }; - } - - if (f >= kValue.u32.max) { - return { input: f32(f), expected: u32(kValue.u32.max) }; - } - - // All f32 no larger than 2^24 has a precise interger part and a fractional part, just need - // to trunc towards 0 for the result integer. - if (f <= 2 ** 24) { - return { input: f32(f), expected: u32(Math.floor(f)) }; - } - - // All f32s between 2 ** 24 and kValue.u32.max are integers, so in theory - // one could use them directly, expect that number is actually f64 - // internally, so they need to be quantized to f32 first. - // Cannot just use floor here, since that might produce a u32 value that - // is precise in f64, but not in f32. - return { input: f32(f), expected: u32(quantizeToF32(f)) }; - }); - }, - f16: () => { - // Note that all positive finite f16 values are in range of u32. - return fullF16Range().map(f => { - // Handles zeros, subnormals, and negatives - if (f < 1.0) { - return { input: f16(f), expected: u32(0) }; - } - - // All f16 no larger than <= 2^12 has a precise interger part and a fractional part, just need - // to trunc towards 0 for the result integer. - if (f <= 2 ** 12) { - return { input: f16(f), expected: u32(Math.trunc(f)) }; - } - - // All f16s larger than 2 ** 12 are integers, so in theory one could use them directly, expect - // that number is actually f64 internally, so they need to be quantized to f16 first. - // Cannot just use trunc here, since that might produce a u32 value that is precise in f64, - // but not in f16. - return { input: f16(f), expected: u32(quantizeToF16(f)) }; - }); - }, -}); - /** Generate a ShaderBuilder based on how the test case is to be vectorized */ function vectorizeToExpression(vectorize) { return vectorize === undefined ? unary('u32') : unary(`vec${vectorize}`); } -g.test('bool') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('bool'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` u32(e), where e is a bool The result is 1u if e is true and 0u otherwise ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('bool'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('bool'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeBool], TypeU32, t.params, cases); +}); -g.test('u32') - .specURL('https://www.w3.org/TR/WGSL/#bool-builtin') - .desc( - ` +g.test('u32'). +specURL('https://www.w3.org/TR/WGSL/#bool-builtin'). +desc( + ` u32(e), where e is a u32 Identity operation ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('u32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('u32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeU32], TypeU32, t.params, cases); +}); -g.test('i32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('i32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` u32(e), where e is a i32 Reinterpretation of bits ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('i32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('i32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeI32], TypeU32, t.params, cases); +}); -g.test('f32') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f32'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` u32(e), where e is a f32 e is converted to u32, rounding towards zero ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .fn(async t => { - const cases = await d.get('f32'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +fn(async (t) => { + const cases = await d.get('f32'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF32], TypeU32, t.params, cases); +}); -g.test('f16') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('f16'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` u32(e), where e is a f16 e is converted to u32, rounding towards zero ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(async t => { - const cases = await d.get('f16'); - await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeU32, t.params, cases); - }); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn(async (t) => { + const cases = await d.get('f16'); + await run(t, vectorizeToExpression(t.params.vectorize), [TypeF16], TypeU32, t.params, cases); +}); -g.test('abstract_int') - .specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function') - .desc( - ` +g.test('abstract_int'). +specURL('https://www.w3.org/TR/WGSL/#value-constructor-builtin-function'). +desc( + ` u32(e), where e is an AbstractInt Identity operation if the e can be represented in u32, otherwise it produces a shader-creation error ` - ) - .params(u => u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4])) - .unimplemented(); +). +params((u) => +u.combine('inputSource', allInputSources).combine('vectorize', [undefined, 2, 3, 4]) +). +unimplemented(); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/unary.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/unary.js index 1bd494f92fc..914d9fed4c6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/unary.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/expression/unary/unary.js @@ -1,13 +1,15 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { abstractFloatShaderBuilder, basicExpressionBuilder } from '../expression.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { abstractFloatShaderBuilder, basicExpressionBuilder } from + +'../expression.js'; /* @returns a ShaderBuilder that evaluates a prefix unary operation */ export function unary(op) { - return basicExpressionBuilder(value => `${op}(${value})`); + return basicExpressionBuilder((value) => `${op}(${value})`); } /* @returns a ShaderBuilder that evaluates a prefix unary operation that returns AbstractFloats */ export function abstractUnary(op) { - return abstractFloatShaderBuilder(value => `${op}(${value})`); -} + return abstractFloatShaderBuilder((value) => `${op}(${value})`); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/float_parse.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/float_parse.spec.js index 19e0476ba1f..076c3d8a0f2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/float_parse.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/float_parse.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for float parsing cases -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { keysOf } from '../../../common/util/data_tables.js'; import { iterRange } from '../../../common/util/util.js'; import { GPUTest } from '../../gpu_test.js'; @@ -22,19 +21,18 @@ function runShaderTest(t, wgsl, expected) { layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); // Allocate a buffer and fill it with 0xdeadbeef words. const outputBuffer = t.makeBufferWithContents( - new Float32Array([...iterRange(expected.length, x => 0xdeadbeef)]), + new Float32Array([...iterRange(expected.length, (_i) => 0xdeadbeef)]), GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC ); - const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] }); // Run the shader. @@ -53,72 +51,72 @@ function runShaderTest(t, wgsl, expected) { const kTestFloats = { small_pos_zero_exp: { src: - '0.' + - '00000000000000000000000000000000000000000000000000' + // 50 - '00000000000000000000000000000000000000000000000000' + // 100 - '00000000000000000000000000000000000000000000000000' + // 150 - '00000000000000000000000000000000000000000000000000' + // 200 - '00000000000000000000000000000000000000000000000000' + // 250 - '00000000000000000000000000000000000000000000000000' + // 300 - '00000000000000000000000000000000000000000000000000' + // 350 - '1e+0', - result: 0.0, + '0.' + + '00000000000000000000000000000000000000000000000000' + // 50 + '00000000000000000000000000000000000000000000000000' + // 100 + '00000000000000000000000000000000000000000000000000' + // 150 + '00000000000000000000000000000000000000000000000000' + // 200 + '00000000000000000000000000000000000000000000000000' + // 250 + '00000000000000000000000000000000000000000000000000' + // 300 + '00000000000000000000000000000000000000000000000000' + // 350 + '1e+0', + result: 0.0 }, small_pos_non_zero_exp: { src: - '0.' + - '00000000000000000000000000000000000000000000000000' + // 50 - '00000000000000000000000000000000000000000000000000' + // 100 - '00000000000000000000000000000000000000000000000000' + // 150 - '00000000000000000000000000000000000000000000000000' + // 200 - '00000000000000000000000000000000000000000000000000' + // 250 - '00000000000000000000000000000000000000000000000000' + // 300 - '00000000000000000000000000000000000000000000000000' + // 350 - '1e+10', - result: 0.0, + '0.' + + '00000000000000000000000000000000000000000000000000' + // 50 + '00000000000000000000000000000000000000000000000000' + // 100 + '00000000000000000000000000000000000000000000000000' + // 150 + '00000000000000000000000000000000000000000000000000' + // 200 + '00000000000000000000000000000000000000000000000000' + // 250 + '00000000000000000000000000000000000000000000000000' + // 300 + '00000000000000000000000000000000000000000000000000' + // 350 + '1e+10', + result: 0.0 }, pos_exp_neg_result: { src: - '0.' + - '00000000000000000000000000000000000000000000000000' + // 50 - '00000000000000000000000000000000000000000000000000' + // 100 - '00000000000000000000000000000000000000000000000000' + // 150 - '00000000000000000000000000000000000000000000000000' + // 200 - '00000000000000000000000000000000000000000000000000' + // 250 - '00000000000000000000000000000000000000000000000000' + // 300 - '00000000000000000000000000000000000000000000000000' + // 350 - '1e+300', - result: 1e-51, + '0.' + + '00000000000000000000000000000000000000000000000000' + // 50 + '00000000000000000000000000000000000000000000000000' + // 100 + '00000000000000000000000000000000000000000000000000' + // 150 + '00000000000000000000000000000000000000000000000000' + // 200 + '00000000000000000000000000000000000000000000000000' + // 250 + '00000000000000000000000000000000000000000000000000' + // 300 + '00000000000000000000000000000000000000000000000000' + // 350 + '1e+300', + result: 1e-51 }, no_exp: { src: - '0.' + - '00000000000000000000000000000000000000000000000000' + // 50 - '00000000000000000000000000000000000000000000000000' + // 100 - '00000000000000000000000000000000000000000000000000' + // 150 - '00000000000000000000000000000000000000000000000000' + // 200 - '00000000000000000000000000000000000000000000000000' + // 250 - '00000000000000000000000000000000000000000000000000' + // 300 - '00000000000000000000000000000000000000000000000000' + // 350 - '1', - result: 0.0, + '0.' + + '00000000000000000000000000000000000000000000000000' + // 50 + '00000000000000000000000000000000000000000000000000' + // 100 + '00000000000000000000000000000000000000000000000000' + // 150 + '00000000000000000000000000000000000000000000000000' + // 200 + '00000000000000000000000000000000000000000000000000' + // 250 + '00000000000000000000000000000000000000000000000000' + // 300 + '00000000000000000000000000000000000000000000000000' + // 350 + '1', + result: 0.0 }, large_number_small_exp: { src: - '1' + - '00000000000000000000000000000000000000000000000000' + // 50 - '00000000000000000000000000000000000000000000000000' + // 100 - '.0e-350', - result: 1e-251, - }, + '1' + + '00000000000000000000000000000000000000000000000000' + // 50 + '00000000000000000000000000000000000000000000000000' + // 100 + '.0e-350', + result: 1e-251 + } }; -g.test('valid') - .desc(`Test that floats are parsed correctly`) - .params(u => u.combine('value', keysOf(kTestFloats))) - .fn(t => { - const data = kTestFloats[t.params.value]; - const wgsl = ` +g.test('valid'). +desc(`Test that floats are parsed correctly`). +params((u) => u.combine('value', keysOf(kTestFloats))). +fn((t) => { + const data = kTestFloats[t.params.value]; + const wgsl = ` struct S { val: f32, } @@ -129,5 +127,5 @@ g.test('valid') buffer = S(${data.src}); } `; - runShaderTest(t, wgsl, new Float32Array([data.result])); - }); + runShaderTest(t, wgsl, new Float32Array([data.result])); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/call.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/call.spec.js index d7c7f5ed076..43897ca432b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/call.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/call.spec.js @@ -1,43 +1,42 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for function calls. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('call_basic') - .desc('Test that flow control enters a called function') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('call_basic'). +desc('Test that flow control enters a called function'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} f(); ${f.expect_order(2)} `, - extra: ` + extra: ` fn f() { ${f.expect_order(1)} -}`, - })); - }); +}` + })); +}); -g.test('call_nested') - .desc('Test that flow control enters a nested function calls') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('call_nested'). +desc('Test that flow control enters a nested function calls'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} a(); ${f.expect_order(6)} `, - extra: ` + extra: ` fn a() { ${f.expect_order(1)} b(); @@ -50,21 +49,21 @@ fn b() { } fn c() { ${f.expect_order(3)} -}`, - })); - }); +}` + })); +}); -g.test('call_repeated') - .desc('Test that flow control enters a nested function calls') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('call_repeated'). +desc('Test that flow control enters a nested function calls'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} a(); ${f.expect_order(10)} `, - extra: ` + extra: ` fn a() { ${f.expect_order(1)} b(); @@ -79,6 +78,6 @@ fn b() { } fn c() { ${f.expect_order(3, 7)} -}`, - })); - }); +}` + })); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/complex.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/complex.spec.js index a5c2f9f9819..33c4fa3b895 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/complex.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/complex.spec.js @@ -1,23 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for interesting complex cases. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('continue_in_switch_in_for_loop') - .desc('Test flow control for a continue statement in a switch, in a for-loop') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('continue_in_switch_in_for_loop'). +desc('Test flow control for a continue statement in a switch, in a for-loop'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < 3; i++) { ${f.expect_order(1, 4, 6)} @@ -39,5 +38,5 @@ g.test('continue_in_switch_in_for_loop') } ${f.expect_order(9)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/eval_order.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/eval_order.spec.js index 5c4aed2ae8a..afba3c3dd07 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/eval_order.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/eval_order.spec.js @@ -1,25 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for expression evaluation order. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('binary_op') - .desc('Test that a binary operator evaluates the LHS then the RHS') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op'). +desc('Test that a binary operator evaluates the LHS then the RHS'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = lhs() + rhs(); ${f.expect_order(3)} `, - extra: ` + extra: ` fn lhs() -> i32 { ${f.expect_order(1)} return 0; @@ -27,60 +26,60 @@ fn lhs() -> i32 { fn rhs() -> i32 { ${f.expect_order(2)} return 0; -}`, - })); - }); +}` + })); +}); -g.test('binary_op_rhs_const') - .desc('Test that a binary operator evaluates the LHS, when the RHS is a constant expression') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_rhs_const'). +desc('Test that a binary operator evaluates the LHS, when the RHS is a constant expression'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = lhs() + rhs(); ${f.expect_order(2)} `, - extra: ` + extra: ` fn lhs() -> i32 { ${f.expect_order(1)} return 0; } fn rhs() -> i32 { return 0; -}`, - })); - }); +}` + })); +}); -g.test('binary_op_lhs_const') - .desc('Test that a binary operator evaluates the RHS, when the LHS is a constant expression') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_lhs_const'). +desc('Test that a binary operator evaluates the RHS, when the LHS is a constant expression'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = lhs() + rhs(); ${f.expect_order(2)} `, - extra: ` + extra: ` fn lhs() -> i32 { return 0; } fn rhs() -> i32 { ${f.expect_order(1)} return 0; -}`, - })); - }); +}` + })); +}); -g.test('binary_op_chain') - .desc('Test that a binary operator chain evaluates left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_chain'). +desc('Test that a binary operator chain evaluates left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = a() + b() - c() * d(); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -96,102 +95,102 @@ fn c() -> i32 { fn d() -> i32 { ${f.expect_order(4)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('binary_op_chain_R_C_C_C') - .desc( - 'Test evaluation order of a binary operator chain with a runtime-expression for the left-most expression' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_chain_R_C_C_C'). +desc( + 'Test evaluation order of a binary operator chain with a runtime-expression for the left-most expression' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = f() + 1 + 2 + 3; ${f.expect_order(2)} `, - extra: ` + extra: ` fn f() -> i32 { ${f.expect_order(1)} return 1; } -`, - })); - }); +` + })); +}); -g.test('binary_op_chain_C_R_C_C') - .desc( - 'Test evaluation order of a binary operator chain with a runtime-expression for the second-left-most-const' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_chain_C_R_C_C'). +desc( + 'Test evaluation order of a binary operator chain with a runtime-expression for the second-left-most-const' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = 1 + f() + 2 + 3; ${f.expect_order(2)} `, - extra: ` + extra: ` fn f() -> i32 { ${f.expect_order(1)} return 1; } - `, - })); - }); + ` + })); +}); -g.test('binary_op_chain_C_C_R_C') - .desc( - 'Test evaluation order of a binary operator chain with a runtime-expression for the second-right-most-const' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_chain_C_C_R_C'). +desc( + 'Test evaluation order of a binary operator chain with a runtime-expression for the second-right-most-const' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = 1 + 2 + f() + 3; ${f.expect_order(2)} `, - extra: ` + extra: ` fn f() -> i32 { ${f.expect_order(1)} return 1; } - `, - })); - }); + ` + })); +}); -g.test('binary_op_chain_C_C_C_R') - .desc( - 'Test evaluation order of a binary operator chain with a runtime-expression for the right-most expression' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_chain_C_C_C_R'). +desc( + 'Test evaluation order of a binary operator chain with a runtime-expression for the right-most expression' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = 1 + 2 + 3 + f(); ${f.expect_order(2)} `, - extra: ` + extra: ` fn f() -> i32 { ${f.expect_order(1)} return 1; } - `, - })); - }); + ` + })); +}); -g.test('binary_op_parenthesized_expr') - .desc('Test that a parenthesized binary operator expression evaluates left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('binary_op_parenthesized_expr'). +desc('Test that a parenthesized binary operator expression evaluates left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let x = (a() + b()) - (c() * d()); ${f.expect_order(5)} let y = a() + (b() - c()) * d(); ${f.expect_order(10)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1, 6)} return 1; @@ -207,21 +206,21 @@ fn c() -> i32 { fn d() -> i32 { ${f.expect_order(4, 9)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('array_index') - .desc('Test that array indices are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('array_index'). +desc('Test that array indices are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>, 8>; ${f.expect_order(0)} let x = arr[a()][b()][c()]; ${f.expect_order(4)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -233,23 +232,23 @@ fn b() -> i32 { fn c() -> i32 { ${f.expect_order(3)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('array_index_lhs_assignment') - .desc( - 'Test that array indices are evaluated left-to-right, when indexing the LHS of an assignment' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('array_index_lhs_assignment'). +desc( + 'Test that array indices are evaluated left-to-right, when indexing the LHS of an assignment' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>, 8>; ${f.expect_order(0)} arr[a()][b()][c()] = ~d(); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -265,23 +264,23 @@ fn c() -> i32 { fn d() -> i32 { ${f.expect_order(4)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('array_index_lhs_member_assignment') - .desc( - 'Test that array indices are evaluated left-to-right, when indexing with member-accessors in the LHS of an assignment' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('array_index_lhs_member_assignment'). +desc( + 'Test that array indices are evaluated left-to-right, when indexing with member-accessors in the LHS of an assignment' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>; ${f.expect_order(0)} arr[a()][b()].member[c()] = d(); ${f.expect_order(5)} `, - extra: ` + extra: ` struct S { member : array, } @@ -300,15 +299,15 @@ fn c() -> i32 { fn d() -> i32 { ${f.expect_order(4)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('array_index_via_ptrs') - .desc('Test that array indices are evaluated in order, when used via pointers') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('array_index_via_ptrs'). +desc('Test that array indices are evaluated in order, when used via pointers'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>, 8>; ${f.expect_order(0)} let p0 = &arr; @@ -321,7 +320,7 @@ g.test('array_index_via_ptrs') ${f.expect_order(7)} let p4 = *p3; `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(2)} return 1; @@ -333,21 +332,21 @@ fn b() -> i32 { fn c() -> i32 { ${f.expect_order(6)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('array_index_via_struct_members') - .desc('Test that array indices are evaluated in order, when accessed via structure members') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('array_index_via_struct_members'). +desc('Test that array indices are evaluated in order, when accessed via structure members'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var x : X; ${f.expect_order(0)} let r = x.y[a()].z[b()].a[c()]; ${f.expect_order(4)} `, - extra: ` + extra: ` struct X { y : array, }; @@ -368,21 +367,21 @@ fn b() -> i32 { fn c() -> i32 { ${f.expect_order(3)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('matrix_index') - .desc('Test that matrix indices are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('matrix_index'). +desc('Test that matrix indices are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var mat : mat4x4; ${f.expect_order(0)} let x = mat[a()][b()]; ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -390,15 +389,15 @@ fn a() -> i32 { fn b() -> i32 { ${f.expect_order(2)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('matrix_index_via_ptr') - .desc('Test that matrix indices are evaluated in order, when used via pointers') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('matrix_index_via_ptr'). +desc('Test that matrix indices are evaluated in order, when used via pointers'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var mat : mat4x4; ${f.expect_order(0)} let p0 = &mat; @@ -408,7 +407,7 @@ g.test('matrix_index_via_ptr') let v = (*p1)[b()]; ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(2)} return 1; @@ -416,22 +415,22 @@ fn a() -> i32 { fn b() -> i32 { ${f.expect_order(4)} return 1; -}`, - })); - }); +}` + })); +}); -g.test('logical_and') - .desc( - 'Test that a chain of logical-AND expressions are evaluated left-to-right, stopping at the first false' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('logical_and'). +desc( + 'Test that a chain of logical-AND expressions are evaluated left-to-right, stopping at the first false' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = a() && b() && c(); ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> bool { ${f.expect_order(1)} return true; @@ -444,22 +443,22 @@ fn c() -> bool { ${f.expect_not_reached()} return true; } -`, - })); - }); +` + })); +}); -g.test('logical_or') - .desc( - 'Test that a chain of logical-OR expressions are evaluated left-to-right, stopping at the first true' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('logical_or'). +desc( + 'Test that a chain of logical-OR expressions are evaluated left-to-right, stopping at the first true' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = a() || b() || c(); ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> bool { ${f.expect_order(1)} return false; @@ -472,22 +471,22 @@ fn c() -> bool { ${f.expect_not_reached()} return true; } -`, - })); - }); +` + })); +}); -g.test('bitwise_and') - .desc( - 'Test that a chain of bitwise-AND expressions are evaluated left-to-right, with no short-circuiting' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('bitwise_and'). +desc( + 'Test that a chain of bitwise-AND expressions are evaluated left-to-right, with no short-circuiting' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = a() & b() & c(); ${f.expect_order(4)} `, - extra: ` + extra: ` fn a() -> bool { ${f.expect_order(1)} return true; @@ -500,22 +499,22 @@ fn c() -> bool { ${f.expect_order(3)} return true; } -`, - })); - }); +` + })); +}); -g.test('bitwise_or') - .desc( - 'Test that a chain of bitwise-OR expressions are evaluated left-to-right, with no short-circuiting' - ) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('bitwise_or'). +desc( + 'Test that a chain of bitwise-OR expressions are evaluated left-to-right, with no short-circuiting' +). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = a() | b() | c(); ${f.expect_order(4)} `, - extra: ` + extra: ` fn a() -> bool { ${f.expect_order(1)} return false; @@ -528,20 +527,20 @@ fn c() -> bool { ${f.expect_order(3)} return true; } -`, - })); - }); +` + })); +}); -g.test('user_fn_args') - .desc('Test user function call arguments are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('user_fn_args'). +desc('Test user function call arguments are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = f(a(), b(), c()); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -557,20 +556,20 @@ fn c() -> i32 { fn f(x : i32, y : i32, z : i32) -> i32 { ${f.expect_order(4)} return x + y + z; -}`, - })); - }); +}` + })); +}); -g.test('nested_fn_args') - .desc('Test user nested call arguments are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('nested_fn_args'). +desc('Test user nested call arguments are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = g(c(a(), b()), f(d(), e())); ${f.expect_order(8)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 0; @@ -598,20 +597,20 @@ fn f(x : i32, y : i32) -> i32 { fn g(x : i32, y : i32) -> i32 { ${f.expect_order(7)} return x + y; -}`, - })); - }); +}` + })); +}); -g.test('builtin_fn_args') - .desc('Test builtin function call arguments are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('builtin_fn_args'). +desc('Test builtin function call arguments are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = mix(a(), b(), c()); ${f.expect_order(4)} `, - extra: ` + extra: ` fn a() -> f32 { ${f.expect_order(1)} return 1; @@ -624,20 +623,20 @@ fn c() -> f32 { ${f.expect_order(3)} return 3; } -`, - })); - }); +` + })); +}); -g.test('nested_builtin_fn_args') - .desc('Test nested builtin function call arguments are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('nested_builtin_fn_args'). +desc('Test nested builtin function call arguments are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let l = mix(a(), mix(b(), c(), d()), e()); ${f.expect_order(6)} `, - extra: ` + extra: ` fn a() -> f32 { ${f.expect_order(1)} return 1; @@ -658,20 +657,20 @@ fn e() -> f32 { ${f.expect_order(5)} return 3; } -`, - })); - }); +` + })); +}); -g.test('1d_array_constructor') - .desc('Test arguments of an array constructor are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('1d_array_constructor'). +desc('Test arguments of an array constructor are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let v = array(a(), b(), c(), d()); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -688,20 +687,20 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('2d_array_constructor') - .desc('Test arguments of a 2D array constructor are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('2d_array_constructor'). +desc('Test arguments of a 2D array constructor are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let v = array(array(a(), b()), array(c(), d())); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -718,20 +717,20 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('vec4_constructor') - .desc('Test arguments of a vector constructor are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('vec4_constructor'). +desc('Test arguments of a vector constructor are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let v = vec4(a(), b(), c(), d()); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -748,20 +747,20 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('nested_vec4_constructor') - .desc('Test arguments of a nested vector constructor are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('nested_vec4_constructor'). +desc('Test arguments of a nested vector constructor are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let v = vec4(a(), vec2(b(), c()), d()); ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -778,20 +777,20 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('struct_constructor') - .desc('Test arguments of a structure constructor are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('struct_constructor'). +desc('Test arguments of a structure constructor are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let v = S(a(), b(), c(), d()); ${f.expect_order(5)} `, - extra: ` + extra: ` struct S { a : i32, b : i32, @@ -814,20 +813,20 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('nested_struct_constructor') - .desc('Test arguments of a nested structure constructor are evaluated left-to-right') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('nested_struct_constructor'). +desc('Test arguments of a nested structure constructor are evaluated left-to-right'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} let v = Y(a(), X(b(), c()), d()); ${f.expect_order(5)} `, - extra: ` + extra: ` struct Y { a : i32, x : X, @@ -853,21 +852,21 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('1d_array_assignment') - .desc('Test LHS of an array element assignment is evaluated before RHS') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('1d_array_assignment'). +desc('Test LHS of an array element assignment is evaluated before RHS'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array; ${f.expect_order(0)} arr[a()] = arr[b()]; ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -876,21 +875,21 @@ fn b() -> i32 { ${f.expect_order(2)} return 2; } -`, - })); - }); +` + })); +}); -g.test('2d_array_assignment') - .desc('Test LHS of 2D-array element assignment is evaluated before RHS') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('2d_array_assignment'). +desc('Test LHS of 2D-array element assignment is evaluated before RHS'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>; ${f.expect_order(0)} arr[a()][b()] = arr[c()][d()]; ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -907,21 +906,21 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('1d_array_compound_assignment') - .desc('Test LHS of an array element compound assignment is evaluated before RHS') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('1d_array_compound_assignment'). +desc('Test LHS of an array element compound assignment is evaluated before RHS'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array; ${f.expect_order(0)} arr[a()] += arr[b()]; ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -930,21 +929,21 @@ fn b() -> i32 { ${f.expect_order(2)} return 2; } -`, - })); - }); +` + })); +}); -g.test('2d_array_compound_assignment') - .desc('Test LHS of a 2D-array element compound assignment is evaluated before RHS') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('2d_array_compound_assignment'). +desc('Test LHS of a 2D-array element compound assignment is evaluated before RHS'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>; ${f.expect_order(0)} arr[a()][b()] += arr[c()][d()]; ${f.expect_order(5)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -961,40 +960,40 @@ fn d() -> i32 { ${f.expect_order(4)} return 2; } -`, - })); - }); +` + })); +}); -g.test('1d_array_increment') - .desc('Test index of an array element increment is evaluated only once') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('1d_array_increment'). +desc('Test index of an array element increment is evaluated only once'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array; ${f.expect_order(0)} arr[a()]++; ${f.expect_order(2)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; } -`, - })); - }); +` + })); +}); -g.test('2d_array_increment') - .desc('Test index of a 2D-array element increment is evaluated only once') - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('2d_array_increment'). +desc('Test index of a 2D-array element increment is evaluated only once'). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` var arr : array, 8>; ${f.expect_order(0)} arr[a()][b()]++; ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -1003,6 +1002,6 @@ fn b() -> i32 { ${f.expect_order(2)} return 1; } -`, - })); - }); +` + })); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/for.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/for.spec.js index 0af28aa8e41..182f1e999ae 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/for.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/for.spec.js @@ -1,40 +1,39 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for for-loops. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('for_basic') - .desc('Test that flow control executes a for-loop body the correct number of times') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('for_basic'). +desc('Test that flow control executes a for-loop body the correct number of times'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(3)}; i++) { ${f.expect_order(1, 2, 3)} } ${f.expect_order(4)} ` - ); - }); + ); +}); -g.test('for_break') - .desc('Test that flow control exits a for-loop when reaching a break statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('for_break'). +desc('Test that flow control exits a for-loop when reaching a break statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(5)}; i++) { ${f.expect_order(1, 3, 5, 7)} @@ -46,17 +45,17 @@ g.test('for_break') } ${f.expect_order(8)} ` - ); - }); + ); +}); -g.test('for_continue') - .desc('Test flow control for a for-loop continue statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('for_continue'). +desc('Test flow control for a for-loop continue statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(5)}; i++) { ${f.expect_order(1, 3, 5, 7, 8)} @@ -68,43 +67,43 @@ g.test('for_continue') } ${f.expect_order(10)} ` - ); - }); + ); +}); -g.test('for_initalizer') - .desc('Test flow control for a for-loop initializer') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('for_initalizer'). +desc('Test flow control for a for-loop initializer'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} for (var i = initializer(); i < ${f.value(3)}; i++) { ${f.expect_order(2, 3, 4)} } ${f.expect_order(5)} `, - extra: ` + extra: ` fn initializer() -> i32 { ${f.expect_order(1)} return ${f.value(0)}; } -`, - })); - }); +` + })); +}); -g.test('for_complex_initalizer') - .desc('Test flow control for a complex for-loop initializer') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('for_complex_initalizer'). +desc('Test flow control for a complex for-loop initializer'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} for (var i = initializer(max(a(), b())); i < ${f.value(5)}; i++) { ${f.expect_order(4, 5, 6)} } ${f.expect_order(7)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return ${f.value(1)}; @@ -117,44 +116,44 @@ fn initializer(v : i32) -> i32 { ${f.expect_order(3)} return v; } -`, - })); - }); +` + })); +}); -g.test('for_condition') - .desc('Test flow control for a for-loop condition') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('for_condition'). +desc('Test flow control for a for-loop condition'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} for (var i = ${f.value(0)}; condition(i); i++) { ${f.expect_order(2, 4, 6)} } ${f.expect_order(8)} `, - extra: ` + extra: ` fn condition(i : i32) -> bool { ${f.expect_order(1, 3, 5, 7)} return i < ${f.value(3)}; } -`, - })); - }); +` + })); +}); -g.test('for_complex_condition') - .desc('Test flow control for a for-loop condition') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('for_complex_condition'). +desc('Test flow control for a for-loop condition'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} for (var i = ${f.value(0)}; condition(i, a() * b()); i++) { ${f.expect_order(4, 8)} } ${f.expect_order(12)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1, 5, 9)} return ${f.value(1)}; @@ -167,44 +166,44 @@ fn condition(i : i32, j : i32) -> bool { ${f.expect_order(3, 7, 11)} return i < j; } -`, - })); - }); +` + })); +}); -g.test('for_continuing') - .desc('Test flow control for a for-loop continuing statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('for_continuing'). +desc('Test flow control for a for-loop continuing statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(3)}; i = cont(i)) { ${f.expect_order(1, 3, 5)} } ${f.expect_order(7)} `, - extra: ` + extra: ` fn cont(i : i32) -> i32 { ${f.expect_order(2, 4, 6)} return i + 1; } -`, - })); - }); +` + })); +}); -g.test('for_complex_continuing') - .desc('Test flow control for a for-loop continuing statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('for_complex_continuing'). +desc('Test flow control for a for-loop continuing statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(3)}; i += cont(a(), b())) { ${f.expect_order(1, 5, 9)} } ${f.expect_order(13)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(2, 6, 10)} return ${f.value(1)}; @@ -217,18 +216,18 @@ fn cont(i : i32, j : i32) -> i32 { ${f.expect_order(4, 8, 12)} return j >> u32(i); } -`, - })); - }); +` + })); +}); -g.test('nested_for_break') - .desc('Test flow control for a for-loop break statement in an outer for-loop') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('nested_for_break'). +desc('Test flow control for a for-loop break statement in an outer for-loop'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(2)}; i++) { ${f.expect_order(1, 5)} @@ -243,17 +242,17 @@ g.test('nested_for_break') } ${f.expect_order(9)} ` - ); - }); + ); +}); -g.test('nested_for_continue') - .desc('Test flow control for a for-loop continue statement in an outer for-loop') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('nested_for_continue'). +desc('Test flow control for a for-loop continue statement in an outer for-loop'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} for (var i = ${f.value(0)}; i < ${f.value(2)}; i++) { ${f.expect_order(1, 5)} @@ -268,5 +267,5 @@ g.test('nested_for_continue') } ${f.expect_order(9)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/harness.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/harness.js index 2d8996cc2d2..bb2869833f4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/harness.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/harness.js @@ -1,11 +1,55 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { Colors } from '../../../../common/util/colors.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Colors } from '../../../../common/util/colors.js'; +/** + * Options for runFlowControlTest() + */ + + + + + + + + + + + + +/** + * The builder interface for the runFlowControlTest() callback. + * This interface is indented to be used to inject WGSL logic into the test + * shader. + * @see runFlowControlTest + */ + + + + + + + + + + + + + + + + + + + + + + + /** * Builds, runs then checks the output of a flow control shader test. * - * @p build_wgsl is a function that's called to build the WGSL shader. + * `build_wgsl` is a function that's called to build the WGSL shader. * This function takes a FlowControlTestBuilder as the single argument, and * returns either a string which is embedded into the WGSL entrypoint function, * or an object of the signature `{ entrypoint: string; extra: string }` which @@ -36,13 +80,27 @@ * string which is embedded into the WGSL entrypoint function, or a structure * with entrypoint-scoped WGSL code and extra module-scope WGSL code. */ -export function runFlowControlTest(t, build_wgsl) { +export function runFlowControlTest( +t, +build_wgsl) +{ const inputData = new Array(); + + + + + + + + + + + const expectations = new Array(); const build_wgsl_result = build_wgsl({ - value: v => { + value: (v) => { if (t.params.preventValueOptimizations) { if (typeof v === 'boolean') { inputData.push(v ? 1 : 0); @@ -59,23 +117,25 @@ export function runFlowControlTest(t, build_wgsl) { kind: 'events', stack: Error().stack, values: expected, - counter: 0, + counter: 0 }); - return `push_output(${expectations.length - 1});`; + // Expectation id starts from 1 to distinguish from initialization 0. + return `push_output(${expectations.length}); // expect_order(${expected.join(', ')})`; }, expect_not_reached: () => { expectations.push({ kind: 'not-reached', - stack: Error().stack, + stack: Error().stack }); - return `push_output(${expectations.length - 1});`; - }, + // Expectation id starts from 1 to distinguish from initialization 0. + return `push_output(${expectations.length}); // expect_not_reached()`; + } }); const built_wgsl = - typeof build_wgsl_result === 'string' - ? { entrypoint: build_wgsl_result, extra: '' } - : build_wgsl_result; + typeof build_wgsl_result === 'string' ? + { entrypoint: build_wgsl_result, extra: '' } : + build_wgsl_result; const main_wgsl = built_wgsl.entrypoint !== undefined ? built_wgsl : built_wgsl.entrypoint; @@ -105,8 +165,8 @@ ${main_wgsl.extra} layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); // If there are no inputs, just put a single value in the buffer to keep @@ -120,15 +180,15 @@ ${main_wgsl.extra} const maxOutputValues = 1000; const outputBuffer = t.device.createBuffer({ size: 4 * (1 + maxOutputValues), - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { binding: 0, resource: { buffer: inputBuffer } }, - { binding: 1, resource: { buffer: outputBuffer } }, - ], + { binding: 0, resource: { buffer: inputBuffer } }, + { binding: 1, resource: { buffer: outputBuffer } }] + }); // Run the shader. @@ -141,91 +201,112 @@ ${main_wgsl.extra} t.queue.submit([encoder.finish()]); t.eventualExpectOK( - t - .readGPUBufferRangeTyped(outputBuffer, { - type: Uint32Array, - typedLength: outputBuffer.size / 4, - }) - .then(outputs => { - // outputs[0] is the number of outputted values - // outputs[1..N] holds the outputted values - const outputCount = outputs.data[0]; - if (outputCount > maxOutputValues) { - return new Error( - `output data count (${outputCount}) exceeds limit of ${maxOutputValues}` + t. + readGPUBufferRangeTyped(outputBuffer, { + type: Uint32Array, + typedLength: outputBuffer.size / 4 + }). + then((outputs) => { + // outputs[0] is the number of outputted values + // outputs[1..N] holds the outputted values + const outputCount = outputs.data[0]; + if (outputCount > maxOutputValues) { + return new Error( + `output data count (${outputCount}) exceeds limit of ${maxOutputValues}` + ); + } + + // returns an Error with the given message and WGSL source + const fail = (err) => Error(`${err}\nWGSL:\n${Colors.dim(Colors.blue(wgsl))}`); + + // returns a string that shows the outputted values to help understand the whole trace. + const print_output_value = () => { + const subarray = outputs.data.subarray(1, outputCount + 1); + return `Output values (length: ${outputCount}): ${subarray.join(', ')}`; + }; + + // returns a colorized string of the expect_order() call, highlighting + // the event number that caused an error. + const expect_order_err = (expectation, err_idx) => { + let out = 'expect_order('; + for (let i = 0; i < expectation.values.length; i++) { + if (i > 0) { + out += ', '; + } + if (i < err_idx) { + out += Colors.green(`${expectation.values[i]}`); + } else if (i > err_idx) { + out += Colors.dim(`${expectation.values[i]}`); + } else { + out += Colors.red(`${expectation.values[i]}`); + } + } + out += ')'; + return out; + }; + + // Each of the outputted values represents an event + // Check that each event is as expected + for (let event = 0; event < outputCount; event++) { + const eventValue = outputs.data[1 + event]; // outputs.data[0] is count + // Expectation id starts from 1, and 0 is invalid value. + if (eventValue === 0) { + return fail( + `outputs.data[${event}] is initial value 0, doesn't refer to any valid expectations)\n${print_output_value()}` ); } - - // returns an Error with the given message and WGSL source - const fail = err => Error(`${err}\nWGSL:\n${Colors.dim(Colors.blue(wgsl))}`); - - // returns a colorized string of the expect_order() call, highlighting - // the event number that caused an error. - const expect_order_err = (expectation, err_idx) => { - let out = 'expect_order('; - for (let i = 0; i < expectation.values.length; i++) { - if (i > 0) { - out += ', '; - } - if (i < err_idx) { - out += Colors.green(`${expectation.values[i]}`); - } else if (i > err_idx) { - out += Colors.dim(`${expectation.values[i]}`); - } else { - out += Colors.red(`${expectation.values[i]}`); - } - } - out += ')'; - return out; - }; - - // Each of the outputted values represents an event - // Check that each event is as expected - for (let event = 0; event < outputCount; event++) { - const expectationIndex = outputs.data[1 + event]; // 0 is count - if (expectationIndex >= expectations.length) { - return fail( - `outputs.data[${event}] value (${expectationIndex}) exceeds number of expectations (${expectations.length})` - ); - } - const expectation = expectations[expectationIndex]; - switch (expectation.kind) { - case 'not-reached': - return fail(`expect_not_reached() reached at event ${event}\n${expectation.stack}`); - case 'events': - if (expectation.counter >= expectation.values.length) { - return fail( - `${expect_order_err( - expectation, - expectation.counter - )}) unexpectedly reached at event ${Colors.red(`${event}`)}\n${expectation.stack}` - ); - } - if (event !== expectation.values[expectation.counter]) { - return fail( - `${expect_order_err(expectation, expectation.counter)} expected event ${ - expectation.values[expectation.counter] - }, got ${event}\n${expectation.stack}` - ); - } - - expectation.counter++; - break; - } + const expectationIndex = eventValue - 1; + if (expectationIndex >= expectations.length) { + return fail( + `outputs.data[${event}] value (${expectationIndex}) exceeds number of expectations (${ + expectations.length + })\n${print_output_value()}` + ); } - - // Finally check that all expect_order() calls were reached - for (const expectation of expectations) { - if (expectation.kind === 'events' && expectation.counter !== expectation.values.length) { + const expectation = expectations[expectationIndex]; + switch (expectation.kind) { + case 'not-reached': return fail( - `${expect_order_err(expectation, expectation.counter)} event ${ + `expect_not_reached() reached at event ${event}\n${print_output_value()}\n${ + expectation.stack + }` + ); + case 'events': + if (expectation.counter >= expectation.values.length) { + return fail( + `${expect_order_err( + expectation, + expectation.counter + )}) unexpectedly reached at event ${Colors.red( + `${event}` + )}\n${print_output_value()}\n${expectation.stack}` + ); + } + if (event !== expectation.values[expectation.counter]) { + return fail( + `${expect_order_err(expectation, expectation.counter)} expected event ${ expectation.values[expectation.counter] - } was not reached\n${expectation.stack}` - ); - } + }, got ${event}\n${print_output_value()}\n${expectation.stack}` + ); + } + + expectation.counter++; + break; } - outputs.cleanup(); - return undefined; - }) + } + + // Finally check that all expect_order() calls were reached + for (const expectation of expectations) { + if (expectation.kind === 'events' && expectation.counter !== expectation.values.length) { + return fail( + `${expect_order_err(expectation, expectation.counter)} event ${ + expectation.values[expectation.counter] + } was not reached\n${expectation.stack}\n${print_output_value()}` + ); + } + } + outputs.cleanup(); + return undefined; + }) ); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/if.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/if.spec.js index 54507da07da..4f48b2beb37 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/if.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/if.spec.js @@ -1,24 +1,23 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for if-statements. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('if_true') - .desc( - "Test that flow control executes the 'true' block of an if statement and not the 'false' block" - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('if_true'). +desc( + "Test that flow control executes the 'true' block of an if statement and not the 'false' block" +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} if (${f.value(true)}) { ${f.expect_order(1)} @@ -27,18 +26,18 @@ g.test('if_true') } ${f.expect_order(2)} ` - ); - }); + ); +}); -g.test('if_false') - .desc( - "Test that flow control executes the 'false' block of an if statement and not the 'true' block" - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('if_false'). +desc( + "Test that flow control executes the 'false' block of an if statement and not the 'true' block" +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} if (${f.value(false)}) { ${f.expect_not_reached()} @@ -47,16 +46,16 @@ g.test('if_false') } ${f.expect_order(2)} ` - ); - }); + ); +}); -g.test('else_if') - .desc("Test that flow control executes the correct 'else if' block of an if statement") - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('else_if'). +desc("Test that flow control executes the correct 'else if' block of an if statement"). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} if (${f.value(false)}) { ${f.expect_not_reached()} @@ -69,16 +68,16 @@ g.test('else_if') } ${f.expect_order(2)} ` - ); - }); + ); +}); -g.test('nested_if_else') - .desc('Test flow control for nested if-else statements') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('nested_if_else'). +desc('Test flow control for nested if-else statements'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} if (${f.value(true)}) { ${f.expect_order(1)} @@ -99,5 +98,5 @@ if (${f.value(true)}) { } ${f.expect_order(6)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/loop.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/loop.spec.js index 3897c6977b8..adb5e0916df 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/loop.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/loop.spec.js @@ -1,23 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for loops. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('loop_break') - .desc('Test that flow control exits a loop when reaching a break statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('loop_break'). +desc('Test that flow control exits a loop when reaching a break statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; loop { @@ -30,17 +29,17 @@ g.test('loop_break') } ${f.expect_order(8)} ` - ); - }); + ); +}); -g.test('loop_continue') - .desc('Test flow control for a loop continue statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('loop_continue'). +desc('Test flow control for a loop continue statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; loop { @@ -58,17 +57,17 @@ g.test('loop_continue') } ${f.expect_order(10)} ` - ); - }); + ); +}); -g.test('loop_continuing_basic') - .desc('Test basic flow control for a loop continuing block') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('loop_continuing_basic'). +desc('Test basic flow control for a loop continuing block'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; loop { @@ -82,17 +81,17 @@ g.test('loop_continuing_basic') } ${f.expect_order(7)} ` - ); - }); + ); +}); -g.test('nested_loops') - .desc('Test flow control for a loop nested in another loop') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('nested_loops'). +desc('Test flow control for a loop nested in another loop'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; loop { @@ -122,5 +121,5 @@ g.test('nested_loops') } ${f.expect_order(23)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/phony.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/phony.spec.js index 1f2628cb044..a21698b57fb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/phony.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/phony.spec.js @@ -1,67 +1,66 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for phony assignments. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('phony_assign_call_basic') - .desc('Test flow control for a phony assigned with a single function call') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('phony_assign_call_basic'). +desc('Test flow control for a phony assigned with a single function call'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} _ = f(); ${f.expect_order(2)} `, - extra: ` + extra: ` fn f() -> i32 { ${f.expect_order(1)} return 1; } -`, - })); - }); +` + })); +}); -g.test('phony_assign_call_must_use') - .desc( - 'Test flow control for a phony assigned with a single function call annotated with @must_use' - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('phony_assign_call_must_use'). +desc( + 'Test flow control for a phony assigned with a single function call annotated with @must_use' +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} _ = f(); ${f.expect_order(2)} `, - extra: ` + extra: ` @must_use fn f() -> i32 { ${f.expect_order(1)} return 1; } -`, - })); - }); +` + })); +}); -g.test('phony_assign_call_nested') - .desc('Test flow control for a phony assigned with nested function calls') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('phony_assign_call_nested'). +desc('Test flow control for a phony assigned with nested function calls'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} _ = c(a(), b()); ${f.expect_order(4)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -74,23 +73,23 @@ fn c(x : i32, y : i32) -> i32 { ${f.expect_order(3)} return x + y; } -`, - })); - }); +` + })); +}); -g.test('phony_assign_call_nested_must_use') - .desc( - 'Test flow control for a phony assigned with nested function calls, all annotated with @must_use' - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('phony_assign_call_nested_must_use'). +desc( + 'Test flow control for a phony assigned with nested function calls, all annotated with @must_use' +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} _ = c(a(), b()); ${f.expect_order(4)} `, - extra: ` + extra: ` @must_use fn a() -> i32 { ${f.expect_order(1)} @@ -106,23 +105,23 @@ fn c(x : i32, y : i32) -> i32 { ${f.expect_order(3)} return x + y; } -`, - })); - }); +` + })); +}); -g.test('phony_assign_call_builtin') - .desc( - 'Test flow control for a phony assigned with a builtin call, with two function calls as arguments' - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest(t, f => ({ - entrypoint: ` +g.test('phony_assign_call_builtin'). +desc( + 'Test flow control for a phony assigned with a builtin call, with two function calls as arguments' +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest(t, (f) => ({ + entrypoint: ` ${f.expect_order(0)} _ = max(a(), b()); ${f.expect_order(3)} `, - extra: ` + extra: ` fn a() -> i32 { ${f.expect_order(1)} return 1; @@ -131,6 +130,6 @@ fn b() -> i32 { ${f.expect_order(2)} return 1; } -`, - })); - }); +` + })); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/return.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/return.spec.js index a6089f1c13e..270e75845ee 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/return.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/return.spec.js @@ -1,57 +1,56 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for return statements. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('return') - .desc("Test that flow control does not execute after a 'return' statement") - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('return'). +desc("Test that flow control does not execute after a 'return' statement"). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} return; ${f.expect_not_reached()} ` - ); - }); + ); +}); -g.test('return_conditional_true') - .desc("Test that flow control does not execute after a 'return' statement in a if (true) block") - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('return_conditional_true'). +desc("Test that flow control does not execute after a 'return' statement in a if (true) block"). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} if (${f.value(true)}) { return; } ${f.expect_not_reached()} ` - ); - }); + ); +}); -g.test('return_conditional_false') - .desc("Test that flow control does not execute after a 'return' statement in a if (false) block") - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('return_conditional_false'). +desc("Test that flow control does not execute after a 'return' statement in a if (false) block"). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} if (${f.value(false)}) { return; } ${f.expect_order(1)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/switch.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/switch.spec.js index 4f34141d33b..09664a067ea 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/switch.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/switch.spec.js @@ -1,22 +1,21 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for switch statements. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('switch') - .desc('Test that flow control executes the correct switch case block') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('switch'). +desc('Test that flow control executes the correct switch case block'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} switch (${f.value(1)}) { case 0: { @@ -38,18 +37,18 @@ g.test('switch') } ${f.expect_order(2)} ` - ); - }); + ); +}); -g.test('switch_multiple_case') - .desc( - 'Test that flow control executes the correct switch case block with multiple cases per block' - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('switch_multiple_case'). +desc( + 'Test that flow control executes the correct switch case block with multiple cases per block' +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} switch (${f.value(2)}) { case 0, 1: { @@ -67,18 +66,18 @@ g.test('switch_multiple_case') } ${f.expect_order(2)} ` - ); - }); + ); +}); -g.test('switch_multiple_case_default') - .desc( - 'Test that flow control executes the correct switch case block with multiple cases per block (combined with default)' - ) - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('switch_multiple_case_default'). +desc( + 'Test that flow control executes the correct switch case block with multiple cases per block (combined with default)' +). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} switch (${f.value(2)}) { case 0, 1: { @@ -103,16 +102,16 @@ g.test('switch_multiple_case_default') } ${f.expect_order(4)} ` - ); - }); + ); +}); -g.test('switch_default') - .desc('Test that flow control executes the switch default block') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('switch_default'). +desc('Test that flow control executes the switch default block'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} switch (${f.value(4)}) { case 0: { @@ -134,16 +133,16 @@ switch (${f.value(4)}) { } ${f.expect_order(2)} ` - ); - }); + ); +}); -g.test('switch_default_only') - .desc('Test that flow control executes the switch default block, which is the only case') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => ` +g.test('switch_default_only'). +desc('Test that flow control executes the switch default block, which is the only case'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => ` ${f.expect_order(0)} switch (${f.value(4)}) { default: { @@ -153,5 +152,5 @@ default: { } ${f.expect_order(2)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/while.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/while.spec.js index c4243095721..f4bbc942ef5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/while.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/flow_control/while.spec.js @@ -1,23 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Flow control tests for while-loops. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { runFlowControlTest } from './harness.js'; export const g = makeTestGroup(GPUTest); -g.test('while_basic') - .desc('Test that flow control executes a while-loop body the correct number of times') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('while_basic'). +desc('Test that flow control executes a while-loop body the correct number of times'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; while (i < ${f.value(5)}) { @@ -26,17 +25,17 @@ g.test('while_basic') } ${f.expect_order(6)} ` - ); - }); + ); +}); -g.test('while_break') - .desc('Test that flow control exits a while-loop when reaching a break statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('while_break'). +desc('Test that flow control exits a while-loop when reaching a break statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; while (i < ${f.value(5)}) { @@ -50,17 +49,17 @@ g.test('while_break') } ${f.expect_order(8)} ` - ); - }); + ); +}); -g.test('while_continue') - .desc('Test flow control for a while-loop continue statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('while_continue'). +desc('Test flow control for a while-loop continue statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; while (i < ${f.value(5)}) { @@ -75,17 +74,17 @@ g.test('while_continue') } ${f.expect_order(10)} ` - ); - }); + ); +}); -g.test('while_nested_break') - .desc('Test that flow control exits a nested while-loop when reaching a break statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('while_nested_break'). +desc('Test that flow control exits a nested while-loop when reaching a break statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; while (i < ${f.value(3)}) { @@ -106,17 +105,17 @@ g.test('while_nested_break') } ${f.expect_order(15)} ` - ); - }); + ); +}); -g.test('while_nested_continue') - .desc('Test flow control for a nested while-loop with a continue statement') - .params(u => u.combine('preventValueOptimizations', [true, false])) - .fn(t => { - runFlowControlTest( - t, - f => - ` +g.test('while_nested_continue'). +desc('Test flow control for a nested while-loop with a continue statement'). +params((u) => u.combine('preventValueOptimizations', [true, false])). +fn((t) => { + runFlowControlTest( + t, + (f) => + ` ${f.expect_order(0)} var i = ${f.value(0)}; while (i < ${f.value(3)}) { @@ -137,5 +136,5 @@ g.test('while_nested_continue') } ${f.expect_order(19)} ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/adjacent.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/adjacent.spec.js new file mode 100644 index 00000000000..c049664e862 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/adjacent.spec.js @@ -0,0 +1,272 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Tests writes from different invocations to adjacent scalars do not interfere. +This is especially interesting when the scalar type is narrower than 32-bits. +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { GPUTest } from '../../../gpu_test.js'; +import { PRNG } from '../../../util/prng.js'; + +export const g = makeTestGroup(GPUTest); + +// Algorithm: with N invocations, N is even: +// srcBuffer: An array of random scalar values. Avoids unsupported values like infinity and NaN. +// resultBuffer: A result array +// pattern: 0|1|2|3 +// Pattern 0: Identity: invocation i: dst[i] = src[i] +// Pattern 1: Try to prevent write coalescing. +// Even elements stay in place. +// Reverse order of odd elements. +// invocation 2k: dst[2k] = src[2k] +// invocation 2k+1: dst[2k+1] = src[N - (2k+1)] +// Example: with N=6 +// dst[0] = src[0] +// dst[1] = src[5] +// dst[2] = src[2] +// dst[3] = src[3] +// dst[4] = src[4] +// dst[5] = src[1] +// Pattern 2: Try to prevent write coalescing. +// Reverse order of even elements. +// Odd elements stay in place. +// invocation 2k: dst[2k] = src[N - 2 - 2k] +// invocation 2k+1: dst[2k+1] = src[2k+1] +// Example: with N=6 +// dst[0] = src[4] +// dst[1] = src[1] +// dst[2] = src[2] +// dst[3] = src[3] +// dst[4] = src[0] +// dst[5] = src[5] +// Pattern 3: Reverse elements: dst[i] = src[N-1-i] +// addressSpace: workgroup|storage +// Where dst is allocated. + + + +const kAddressSpaces = ['workgroup', 'storage']; +const kPatterns = [0, 1, 2, 3]; + + + + + + + + +// For simplicity, make the entire source (and destination) array fit +// in workgroup memory. +// We can count on up to 16384 bytes in workgroup memory. +const kNumValues = 4096; // Assumed even +const kWorkgroupSize = 128; // Use 1-dimensional workgroups. + +/** + * @returns an integer for the bit pattern of a random finite f16 value. + * Consumes values from `prng`. + * + * @param prng - a pseudo-random number generator. + */ +function randomFiniteF16(prng) { + const exponent_bits = 0x7c00; + // With any reasonable random number stream, the average number + // of trips around this loop is < 1 + 1/32 because there are 5 + // exponent bits. + let candidate; + do { + candidate = prng.randomU32() & 0xffff; + // Non-finite f16 values have all 1 bits in the exponent. + } while ((candidate & exponent_bits) === exponent_bits); + return candidate; +} + +/** + * Fills array `arr` with random finite f16 values. + * Consumes values from `prng`. + * + * @param prng - a pseudo-random number generator. + * @param arr - the array to fill. Assume it is already correctly sized. + */ +function fillWithRandomFiniteF16(prng, arr) { + for (let i = 0; i < arr.length; i++) { + arr[i] = randomFiniteF16(prng); + } +} + +/** + * @returns the expression for the destination index, based on `pattern`. + * + * @param i the WGSL string for the source index + * @param pattern the indexing pattern + */ +function getDstIndexExpression(i, pattern) { + switch (pattern) { + case 0: + return `${i}`; + case 1: + // Even elements map to themselves. + // Odd elements map to the reversed order of odd elements. + return `select(${kNumValues} - ${i}, ${i}, (${i} & 1) == 0)`; + case 2: + // Even elements map to the reversed order of odd elements. + // Since N is even, element 0 should get index N-2. (!) + // Odd elements map to themselves. + return `select(${i}, ${kNumValues} - 2 - ${i}, (${i} & 1) == 0)`; + case 3: + return `${kNumValues} - 1 -${i}`; + } +} + +/** + * Computes the reference (correct) result for the given source array and indexing pattern. + * + * @param pattern the indexing pattern + * @param src the source array + * @param dst the array to fill with values transferred from `src` + */ +function computeReference(pattern, src, dst) { + for (let i = 0; i < src.length; i++) { + const isEven = (i & 1) === 0; + switch (pattern) { + case 0: + dst[i] = src[i]; + break; + case 1: + if (isEven) { + dst[i] = src[i]; + } else { + dst[src.length - i] = src[i]; + } + break; + case 2: + if (isEven) { + dst[kNumValues - 2 - i] = src[i]; + } else { + dst[i] = src[i]; + } + break; + case 3: + dst[src.length - 1 - i] = src[i]; + break; + } + } +} + +/** + * @returns the source text for a shader that copies elements from a source + * buffer to a destination buffer, while remapping indices according to the + * specified pattern. + * + * @param p contains the address space and pattern + */ +function makeShaderText(p) { + // When the destination buffer is in 'storage', then write directly to it. + // Otherwise, destination is in workgroup memory, and we need to name the + // output buffer differently. + const dstBuf = p.addressSpace === 'storage' ? 'dst' : 'dstBuf'; + + const parts = []; + + parts.push(` + enable f16; + @group(0) @binding(0) var src: array; + @group(0) @binding(1) var ${dstBuf}: array; + `); + + if (p.addressSpace === 'workgroup') { + parts.push(`var dst: array;`); + } + + parts.push(` + @compute @workgroup_size(${kWorkgroupSize}) + fn adjacent_writes(@builtin(global_invocation_id) gid: vec3u) { + let srcIndex = gid.x; + let dstIndex = ${getDstIndexExpression('srcIndex', p.pattern)}; + dst[dstIndex] = src[srcIndex]; + `); + + if (p.addressSpace === 'workgroup') { + // Copy to the output buffer. + // The barrier is not necessary here, but it should prevent + // the compiler from being clever and optimizing away the + // intermediate write to workgroup memory. + parts.push(` workgroupBarrier();`); + parts.push(` ${dstBuf}[dstIndex] = dst[dstIndex];`); + } + parts.push('}'); + + return parts.join('\n'); +} + +/** + * Runs the test on the GPU, generating random source data and + * checking the results against the expected permutation of that data. + * + * @param t the AdjacentWritesTest specification. + */ +function runTest(t) { + const seed = (t.params.pattern + 1) * t.params.addressSpace.length; + const prng = new PRNG(seed); + + const expected = new Uint16Array(kNumValues); + + const bytesPerScalar = 2; // f16 is 2 bytes wide. + const bufByteSize = kNumValues * bytesPerScalar; + const hostSrcBuf = t.device.createBuffer({ + size: bufByteSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, + mappedAtCreation: true + }); + { + const hostSrcUint16 = new Uint16Array(hostSrcBuf.getMappedRange()); + fillWithRandomFiniteF16(prng, hostSrcUint16); + computeReference(t.params.pattern, hostSrcUint16, expected); + hostSrcBuf.unmap(); + } + + const srcBuf = t.device.createBuffer({ + size: bufByteSize, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE + }); + const dstBuf = t.device.createBuffer({ + size: bufByteSize, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE + }); + + const shaderText = makeShaderText(t.params); + const shader = t.device.createShaderModule({ code: shaderText }); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { module: shader, entryPoint: 'adjacent_writes' } + }); + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { binding: 0, resource: { buffer: srcBuf } }, + { binding: 1, resource: { buffer: dstBuf } }] + + }); + + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToBuffer(hostSrcBuf, 0, srcBuf, 0, bufByteSize); + + const computeEncoder = encoder.beginComputePass(); + computeEncoder.setPipeline(pipeline); + computeEncoder.setBindGroup(0, bindGroup); + computeEncoder.dispatchWorkgroups(kNumValues / kWorkgroupSize); + computeEncoder.end(); + + const commands = encoder.finish(); + t.device.queue.submit([commands]); + + t.expectGPUBufferValuesEqual(dstBuf, expected); +} + +g.test('f16'). +desc( + `Check that writes by different invocations to adjacent f16 values in an array do not interfere with each other.` +). +params((u) => u.combine('addressSpace', kAddressSpaces).combine('pattern', kPatterns)). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => runTest(t)); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/atomicity.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/atomicity.spec.js index 0286cf42d52..175948859d9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/atomicity.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/atomicity.spec.js @@ -1,17 +1,17 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Tests for the atomicity of atomic read-modify-write instructions.`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Tests for the atomicity of atomic read-modify-write instructions.`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { + MemoryModelTester, buildTestShader, TestType, buildResultShader, ResultType, - MemoryType, -} from './memory_model_setup.js'; + MemoryType } from +'./memory_model_setup.js'; export const g = makeTestGroup(GPUTest); @@ -38,7 +38,7 @@ const memoryModelTestParams = { permuteSecond: 419, memStride: 4, aliasedMemory: false, - numBehaviors: 4, + numBehaviors: 4 }; const storageMemoryTestCode = ` @@ -65,39 +65,38 @@ const resultCode = ` } `; -g.test('atomicity') - .desc( - `Checks whether a store on one thread can interrupt an atomic RMW on a second thread. If the read returned by +g.test('atomicity'). +desc( + `Checks whether a store on one thread can interrupt an atomic RMW on a second thread. If the read returned by the RMW instruction is the initial value of memory (0), but the final value in memory is 1, then the atomic write in the second thread occurred in between the read and the write of the RMW. ` - ) - .paramsSimple([ - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: storageMemoryTestCode, - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryTestCode, - }, - ]) - .fn(async t => { - const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); - const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(10, 3); - }); +). +paramsSimple([ +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: storageMemoryTestCode +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryTestCode +}] +). +fn(async (t) => { + const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); + const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader + ); + await memModelTester.run(10, 3); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/barrier.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/barrier.spec.js index dbf90149e3e..f5e41440bb9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/barrier.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/barrier.spec.js @@ -1,18 +1,19 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` -Tests for non-atomic memory synchronization within a workgroup in the presence of a WebGPU barrier`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` +Tests for non-atomic memory synchronization within a workgroup in the presence of a WebGPU barrier`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { + MemoryModelTester, + kAccessValueTypes, buildTestShader, MemoryType, TestType, buildResultShader, - ResultType, -} from './memory_model_setup.js'; + ResultType } from +'./memory_model_setup.js'; export const g = makeTestGroup(GPUTest); @@ -39,182 +40,211 @@ const memoryModelTestParams = { permuteSecond: 419, memStride: 4, aliasedMemory: false, - numBehaviors: 2, + numBehaviors: 2 }; +// The two kinds of non-atomic accesses tested. +// rw: read -> barrier -> write +// wr: write -> barrier -> read +// ww: write -> barrier -> write + + +// Test the non-atomic memory types. +const kMemTypes = [MemoryType.NonAtomicStorageClass, MemoryType.NonAtomicWorkgroupClass]; + const storageMemoryBarrierStoreLoadTestCode = ` - test_locations.value[x_0] = 1u; + test_locations.value[x_0] = 1; workgroupBarrier(); - let r0 = test_locations.value[x_1]; + let r0 = u32(test_locations.value[x_1]); atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r0, r0); `; const workgroupMemoryBarrierStoreLoadTestCode = ` - wg_test_locations[x_0] = 1u; + wg_test_locations[x_0] = 1; workgroupBarrier(); - let r0 = wg_test_locations[x_1]; + let r0 = u32(wg_test_locations[x_1]); atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r0, r0); `; -g.test('workgroup_barrier_store_load') - .desc( - `Checks whether the workgroup barrier properly synchronizes a non-atomic write and read on +const storageMemoryBarrierLoadStoreTestCode = ` + let r0 = u32(test_locations.value[x_0]); + workgroupBarrier(); + test_locations.value[x_1] = 1; + atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_0].r0, r0); +`; + +const workgroupMemoryBarrierLoadStoreTestCode = ` + let r0 = u32(wg_test_locations[x_0]); + workgroupBarrier(); + wg_test_locations[x_1] = 1; + atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_0].r0, r0); +`; + +const storageMemoryBarrierStoreStoreTestCode = ` + test_locations.value[x_0] = 1; + storageBarrier(); + test_locations.value[x_1] = 2; +`; + +const workgroupMemoryBarrierStoreStoreTestCode = ` + wg_test_locations[x_0] = 1; + workgroupBarrier(); + wg_test_locations[x_1] = 2; + workgroupBarrier(); + test_locations.value[shuffled_workgroup * workgroupXSize * stress_params.mem_stride * 2u + x_1] = wg_test_locations[x_1]; +`; + +function getTestCode(p) { + switch (p.accessPair) { + case 'rw': + return p.memType === MemoryType.NonAtomicStorageClass ? + storageMemoryBarrierLoadStoreTestCode : + workgroupMemoryBarrierLoadStoreTestCode; + case 'wr': + return p.memType === MemoryType.NonAtomicStorageClass ? + storageMemoryBarrierStoreLoadTestCode : + workgroupMemoryBarrierStoreLoadTestCode; + case 'ww': + return p.memType === MemoryType.NonAtomicStorageClass ? + storageMemoryBarrierStoreStoreTestCode : + workgroupMemoryBarrierStoreStoreTestCode; + } +} + +g.test('workgroup_barrier_store_load'). +desc( + `Checks whether the workgroup barrier properly synchronizes a non-atomic write and read on separate threads in the same workgroup. Within a workgroup, the barrier should force an invocation after the barrier to read a write from an invocation before the barrier. ` - ) - .paramsSimple([ - { memType: MemoryType.NonAtomicStorageClass, _testCode: storageMemoryBarrierStoreLoadTestCode }, - { - memType: MemoryType.NonAtomicWorkgroupClass, - _testCode: workgroupMemoryBarrierStoreLoadTestCode, - }, - ]) - .fn(async t => { - const resultCode = ` +). +params((u) => +u. +combine('accessValueType', kAccessValueTypes). +combine('memType', kMemTypes). +combine('accessPair', ['wr']) +). +beforeAllSubcases((t) => { + if (t.params.accessValueType === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn(async (t) => { + const resultCode = ` if (r0 == 1u) { atomicAdd(&test_results.seq, 1u); } else if (r0 == 0u) { atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); + const testShader = buildTestShader( + getTestCode(t.params), + t.params.memType, + TestType.IntraWorkgroup + ); + const resultShader = buildResultShader( + resultCode, + TestType.IntraWorkgroup, + ResultType.TwoBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader, + t.params.accessValueType + ); + await memModelTester.run(15, 1); +}); - const resultShader = buildResultShader( - resultCode, - TestType.IntraWorkgroup, - ResultType.TwoBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(15, 1); - }); - -const storageMemoryBarrierLoadStoreTestCode = ` - let r0 = test_locations.value[x_0]; - workgroupBarrier(); - test_locations.value[x_1] = 1u; - atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_0].r0, r0); -`; - -const workgroupMemoryBarrierLoadStoreTestCode = ` - let r0 = wg_test_locations[x_0]; - workgroupBarrier(); - wg_test_locations[x_1] = 1u; - atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_0].r0, r0); -`; - -g.test('workgroup_barrier_load_store') - .desc( - `Checks whether the workgroup barrier properly synchronizes a non-atomic write and read on +g.test('workgroup_barrier_load_store'). +desc( + `Checks whether the workgroup barrier properly synchronizes a non-atomic write and read on separate threads in the same workgroup. Within a workgroup, the barrier should force an invocation before the barrier to not read the write from an invocation after the barrier. ` - ) - .paramsSimple([ - { memType: MemoryType.NonAtomicStorageClass, _testCode: storageMemoryBarrierLoadStoreTestCode }, - { - memType: MemoryType.NonAtomicWorkgroupClass, - _testCode: workgroupMemoryBarrierLoadStoreTestCode, - }, - ]) - .fn(async t => { - const resultCode = ` +). +params((u) => +u. +combine('accessValueType', kAccessValueTypes). +combine('memType', kMemTypes). +combine('accessPair', ['rw']) +). +beforeAllSubcases((t) => { + if (t.params.accessValueType === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn(async (t) => { + const resultCode = ` if (r0 == 0u) { atomicAdd(&test_results.seq, 1u); } else if (r0 == 1u) { atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); + const testShader = buildTestShader( + getTestCode(t.params), + t.params.memType, + TestType.IntraWorkgroup + ); + const resultShader = buildResultShader( + resultCode, + TestType.IntraWorkgroup, + ResultType.TwoBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader, + t.params.accessValueType + ); + await memModelTester.run(12, 1); +}); - const resultShader = buildResultShader( - resultCode, - TestType.IntraWorkgroup, - ResultType.TwoBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(12, 1); - }); - -const storageMemoryBarrierStoreStoreTestCode = ` - test_locations.value[x_0] = 1u; - storageBarrier(); - test_locations.value[x_1] = 2u; -`; - -const workgroupMemoryBarrierStoreStoreTestCode = ` - wg_test_locations[x_0] = 1u; - workgroupBarrier(); - wg_test_locations[x_1] = 2u; - workgroupBarrier(); - test_locations.value[shuffled_workgroup * workgroupXSize * stress_params.mem_stride * 2u + x_1] = wg_test_locations[x_1]; -`; - -g.test('workgroup_barrier_store_store') - .desc( - `Checks whether the workgroup barrier properly synchronizes non-atomic writes on +g.test('workgroup_barrier_store_store'). +desc( + `Checks whether the workgroup barrier properly synchronizes non-atomic writes on separate threads in the same workgroup. Within a workgroup, the barrier should force the value in memory to be the result of the write after the barrier, not the write before. ` - ) - .paramsSimple([ - { - memType: MemoryType.NonAtomicStorageClass, - _testCode: storageMemoryBarrierStoreStoreTestCode, - }, - { - memType: MemoryType.NonAtomicWorkgroupClass, - _testCode: workgroupMemoryBarrierStoreStoreTestCode, - }, - ]) - .fn(async t => { - const resultCode = ` +). +params((u) => +u. +combine('accessValueType', kAccessValueTypes). +combine('memType', kMemTypes). +combine('accessPair', ['ww']) +). +beforeAllSubcases((t) => { + if (t.params.accessValueType === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn(async (t) => { + const resultCode = ` if (mem_x_0 == 2u) { atomicAdd(&test_results.seq, 1u); } else if (mem_x_0 == 1u) { atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const resultShader = buildResultShader( - resultCode, - TestType.IntraWorkgroup, - ResultType.TwoBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(10, 1); - }); + const testShader = buildTestShader( + getTestCode(t.params), + t.params.memType, + TestType.IntraWorkgroup + ); + const resultShader = buildResultShader( + resultCode, + TestType.IntraWorkgroup, + ResultType.TwoBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader, + t.params.accessValueType + ); + await memModelTester.run(10, 1); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/coherence.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/coherence.spec.js index 00dca4f9c7f..725bf4cf009 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/coherence.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/coherence.spec.js @@ -1,20 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests that all threads see a sequentially consistent view of the order of memory accesses to a single memory location. Uses a parallel testing strategy along with stressing -threads to increase coverage of possible bugs.`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +threads to increase coverage of possible bugs.`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { + MemoryModelTester, buildTestShader, MemoryType, TestType, buildResultShader, - ResultType, -} from './memory_model_setup.js'; + ResultType } from +'./memory_model_setup.js'; export const g = makeTestGroup(GPUTest); @@ -41,7 +41,7 @@ const memoryModelTestParams = { permuteSecond: 1, memStride: 1, aliasedMemory: true, - numBehaviors: 4, + numBehaviors: 4 }; const storageMemoryCorrTestCode = ` @@ -92,50 +92,50 @@ const workgroupMemoryCorrRMWTestCode = ` atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r1, r1); `; -g.test('corr') - .desc( - `Ensures two reads on one thread cannot observe an inconsistent view of a write on a second thread. +g.test('corr'). +desc( + `Ensures two reads on one thread cannot observe an inconsistent view of a write on a second thread. The first thread writes the value 1 some location x, and the second thread reads x twice in a row. If the first read returns 1 but the second read returns 0, then there has been a coherence violation. ` - ) - .paramsSimple([ - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCorrTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCorrRMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCorrTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCorrRMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCorrTestCode, - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCorrRMWTestCode, - extraFlags: 'rmw_variant', - }, - ]) - .fn(async t => { - const resultCode = ` +). +paramsSimple([ +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCorrTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCorrRMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCorrTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCorrRMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCorrTestCode +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCorrRMWTestCode, + extraFlags: 'rmw_variant' +}] +). +fn(async (t) => { + const resultCode = ` if ((r0 == 0u && r1 == 0u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 1u && r1 == 1u)) { @@ -146,17 +146,16 @@ g.test('corr') atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); - const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(60, 3); - }); + const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); + const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader + ); + await memModelTester.run(60, 3); +}); const storageMemoryCowwTestCode = ` atomicStore(&test_locations.value[x_0], 1u); @@ -182,65 +181,65 @@ const workgroupMemoryCowwRMWTestCode = ` atomicStore(&test_locations.value[shuffled_workgroup * workgroupXSize * stress_params.mem_stride * 2u + x_0], atomicLoad(&wg_test_locations[x_0])); `; -g.test('coww') - .desc( - `Ensures two writes on one thread do not lead to incoherent results. The thread first writes 1 to +g.test('coww'). +desc( + `Ensures two writes on one thread do not lead to incoherent results. The thread first writes 1 to some location x and then writes 2 to the same location. If the value in memory after the test finishes is 1, then there has been a coherence violation. ` - ) - .paramsSimple([ - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCowwTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCowwRMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: storageMemoryCowwTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: storageMemoryCowwRMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCowwTestCode, - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCowwRMWTestCode, - extraFlags: 'rmw_variant', - }, - ]) - .fn(async t => { - const resultCode = ` +). +paramsSimple([ +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCowwTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCowwRMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: storageMemoryCowwTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: storageMemoryCowwRMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCowwTestCode +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCowwRMWTestCode, + extraFlags: 'rmw_variant' +}] +). +fn(async (t) => { + const resultCode = ` if (mem_x_0 == 2u) { atomicAdd(&test_results.seq, 1u); } else if (mem_x_0 == 1u) { atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); - const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.TwoBehavior); - const params = { - ...memoryModelTestParams, - numBehaviors: 2, - }; - const memModelTester = new MemoryModelTester(t, params, testShader, resultShader); - await memModelTester.run(60, 1); - }); + const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); + const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.TwoBehavior); + const params = { + ...memoryModelTestParams, + numBehaviors: 2 + }; + const memModelTester = new MemoryModelTester(t, params, testShader, resultShader); + await memModelTester.run(60, 1); +}); const storageMemoryCowrTestCode = ` atomicStore(&test_locations.value[x_0], 1u); @@ -288,50 +287,50 @@ const workgroupMemoryCowrRMWTestCode = ` atomicStore(&test_locations.value[shuffled_workgroup * workgroupXSize * stress_params.mem_stride * 2u + x_1], atomicLoad(&wg_test_locations[x_1])); `; -g.test('cowr') - .desc( - `The first thread first writes 1 to some location x and then reads x. The second thread writes 2 to x. +g.test('cowr'). +desc( + `The first thread first writes 1 to some location x and then reads x. The second thread writes 2 to x. If the first thread reads the value 2 and the value in memory at the end of the test is 1, then the read and write on the first thread have been reordered, a coherence violation. ` - ) - .paramsSimple([ - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCowrTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCowrRMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCowrTestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCowrRMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCowrTestCode, - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCowrRMWTestCode, - extraFlags: 'rmw_variant', - }, - ]) - .fn(async t => { - const resultCode = ` +). +paramsSimple([ +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCowrTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCowrRMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCowrTestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCowrRMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCowrTestCode +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCowrRMWTestCode, + extraFlags: 'rmw_variant' +}] +). +fn(async (t) => { + const resultCode = ` if ((r0 == 1u && mem_x_0 == 2u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 1u && mem_x_0 == 1u)) { @@ -342,17 +341,16 @@ g.test('cowr') atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); - const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(60, 3); - }); + const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); + const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader + ); + await memModelTester.run(60, 3); +}); const storageMemoryCorw1TestCode = ` let r0 = atomicLoad(&test_locations.value[x_0]); @@ -373,46 +371,46 @@ const workgroupMemoryCorw1TestCode = ` atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_0].r0, r0); `; -g.test('corw1') - .desc( - `One thread first reads from a memory location x and then writes 1 to x. If the read observes the subsequent +g.test('corw1'). +desc( + `One thread first reads from a memory location x and then writes 1 to x. If the read observes the subsequent write, there has been a coherence violation. ` - ) - .paramsSimple([ - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCorw1TestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCorw1TestCode, - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCorw1TestCode, - }, - ]) - .fn(async t => { - const resultCode = ` +). +paramsSimple([ +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCorw1TestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCorw1TestCode +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCorw1TestCode +}] +). +fn(async (t) => { + const resultCode = ` if (r0 == 0u) { atomicAdd(&test_results.seq, 1u); } else if (r0 == 1u) { atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); - const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.TwoBehavior); - const params = { - ...memoryModelTestParams, - numBehaviors: 2, - }; - const memModelTester = new MemoryModelTester(t, params, testShader, resultShader); - await memModelTester.run(60, 1); - }); + const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); + const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.TwoBehavior); + const params = { + ...memoryModelTestParams, + numBehaviors: 2 + }; + const memModelTester = new MemoryModelTester(t, params, testShader, resultShader); + await memModelTester.run(60, 1); +}); const storageMemoryCorw2TestCode = ` let r0 = atomicLoad(&test_locations.value[x_0]); @@ -460,51 +458,51 @@ const workgroupMemoryCorw2RMWTestCode = ` atomicStore(&test_locations.value[shuffled_workgroup * workgroupXSize * stress_params.mem_stride * 2u + x_1], atomicLoad(&wg_test_locations[x_1])); `; -g.test('corw2') - .desc( - `The first thread reads from some memory location x, and then writes 1 to x. The second thread +g.test('corw2'). +desc( + `The first thread reads from some memory location x, and then writes 1 to x. The second thread writes 2 to x. If the first thread reads the value 2, but the value in memory after the test completes is 1, then the instructions on the first thread have been re-ordered, leading to a coherence violation. ` - ) - .paramsSimple([ - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCorw2TestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.InterWorkgroup, - _testCode: storageMemoryCorw2RMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCorw2TestCode, - }, - { - memType: MemoryType.AtomicStorageClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupStorageMemoryCorw2RMWTestCode, - extraFlags: 'rmw_variant', - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCorw2TestCode, - }, - { - memType: MemoryType.AtomicWorkgroupClass, - testType: TestType.IntraWorkgroup, - _testCode: workgroupMemoryCorw2RMWTestCode, - extraFlags: 'rmw_variant', - }, - ]) - .fn(async t => { - const resultCode = ` +). +paramsSimple([ +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCorw2TestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.InterWorkgroup, + _testCode: storageMemoryCorw2RMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCorw2TestCode +}, +{ + memType: MemoryType.AtomicStorageClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupStorageMemoryCorw2RMWTestCode, + extraFlags: 'rmw_variant' +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCorw2TestCode +}, +{ + memType: MemoryType.AtomicWorkgroupClass, + testType: TestType.IntraWorkgroup, + _testCode: workgroupMemoryCorw2RMWTestCode, + extraFlags: 'rmw_variant' +}] +). +fn(async (t) => { + const resultCode = ` if ((r0 == 0u && mem_x_0 == 2u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 2u && mem_x_0 == 1u)) { @@ -515,14 +513,13 @@ g.test('corw2') atomicAdd(&test_results.weak, 1u); } `; - const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); - const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - resultShader - ); - - await memModelTester.run(60, 3); - }); + const testShader = buildTestShader(t.params._testCode, t.params.memType, t.params.testType); + const resultShader = buildResultShader(resultCode, t.params.testType, ResultType.FourBehavior); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + resultShader + ); + await memModelTester.run(60, 3); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/memory_model_setup.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/memory_model_setup.js index d0daa9a8f3b..c5af0901762 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/memory_model_setup.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/memory_model_setup.js @@ -1,10 +1,72 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { checkElementsPassPredicate } from '../../../util/check_contents.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { checkElementsPassPredicate } from '../../../util/check_contents.js';import { align } from '../../../util/math.js'; + /* All buffer sizes are counted in units of 4-byte words. */ +/** + * The value type loaded and stored from memory. + * This is what the WGSL spec calls 'store type' for the locations being accessed. + * The GPU buffers are sized assuming this type is at most 4 bytes. + * + * 'u32' is the default case; it can be atomically loaded and stored. + * 'f16' is interesting because it is not 32-bits, and can't be the store type + * for atomic accesses. + */ + +export const kAccessValueTypes = ['f16', 'u32']; + /* Parameter values are set heuristically, typically by a time-intensive search. */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** The number of memory locations accessed by a test. Currently, only tests with up to 2 memory locations are supported. */ const numMemLocations = 2; @@ -13,6 +75,45 @@ const numReadOutputs = 2; /** Represents a device buffer and a utility buffer for resetting memory and copying parameters. */ + + + + + + + + + + + + + + + + + + + +/** Specifies the buffers used during a memory model test. */ + + + + + + + + + + + + + + + + + + + /** The number of stress params to add to the stress params buffer. */ const numStressParams = 12; const barrierParamIndex = 0; @@ -34,131 +135,210 @@ const memLocationOffsetIndex = 11; */ const bytesPerWord = 4; +/** + * Returns the shader preamble based on the access value type: + * - enable directives, if necessary + * - the type alias for AccessValueType + */ +function shaderPreamble(accessValueType, constants) { + if (accessValueType === 'f16') { + return `enable f16;\nalias AccessValueTy = f16;\n${constants}\n`; + } + return `alias AccessValueTy = ${accessValueType};\n${constants}\n`; +} + /** * Implements setup code necessary to run a memory model test. A test consists of two parts: * 1.) A test shader that runs a specified memory model litmus test and attempts to reveal a weak (disallowed) behavior. * At a high level, a test shader consists of a set of testing workgroups where every invocation executes the litmus test * on a set of test locations, and a set of stressing workgroups where every invocation accesses a specified memory location * in a random pattern. + * + * The main buffer variables are: + * + * `test_locations`: invocations access entries in this array, trying to + * evoke weak behaviours. + * + * This is array or array>. + * AccessValueTy is either f16 or u32. + * Note that atomic is only used when AccessValueTy is u32. + * + * `results`: holds the observed values, which is where we can see + * whether a weak behaviour was observed. + * + * This is an array>. + * + * The others are used to parameterize and stress the main activity. + * * 2.) A result shader that takes the output of the test shader, which consists of the memory locations accessed during the test * and the results of any reads made during the test, and aggregate the results based on the possible behaviors of the test. + * + * The first two buffer variables are the same buffers as for the test shader: + * + * `test_locations` is the same as `test_locations` from the test shader, + * but is mapped as array. + * + * `read_results` is the same buffer as `results` from the test shader. + * + * The other variables are used to accumulate a summary that counts the weak behaviours stimulated and recorded by the + * test shader. */ export class MemoryModelTester { + + + + + + + + /** Sets up a memory model test by initializing buffers and pipeline layouts. */ - constructor(t, params, testShader, resultShader) { + constructor( + t, + params, + testShader, + resultShader, + accessValueType = 'u32') + { this.test = t; this.params = params; + const workgroupXSize = Math.min(params.workgroupSize, t.device.limits.maxComputeWorkgroupSizeX); + const constants = ` + const kNumBarriers = 1u; // MAINTENANCE_TODO: make barrier not an array + const kMaxWorkgroups = ${params.maxWorkgroups}u; + const kScratchMemorySize = ${params.scratchMemorySize}u; + const kWorkgroupXSize = ${workgroupXSize}u; + `; + testShader = shaderPreamble(accessValueType, constants) + testShader; + resultShader = shaderPreamble(accessValueType, constants) + resultShader; + // set up buffers - const testingThreads = this.params.workgroupSize * this.params.testingWorkgroups; + const testingThreads = workgroupXSize * this.params.testingWorkgroups; const testLocationsSize = - testingThreads * numMemLocations * this.params.memStride * bytesPerWord; + testingThreads * numMemLocations * this.params.memStride * bytesPerWord; const testLocationsBuffer = { deviceBuf: this.test.device.createBuffer({ + label: 'testLocationsBuffer', size: testLocationsSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE }), - srcBuf: this.test.makeBufferWithContents( - new Uint32Array(testLocationsSize).fill(0), - GPUBufferUsage.COPY_SRC - ), - - size: testLocationsSize, + srcBuf: this.test.device.createBuffer({ + label: 'testLocationsSrcBuf', + size: testLocationsSize, + usage: GPUBufferUsage.COPY_SRC + }), + size: testLocationsSize }; const readResultsSize = testingThreads * numReadOutputs * bytesPerWord; const readResultsBuffer = { deviceBuf: this.test.device.createBuffer({ + label: 'readResultsBuffer', size: readResultsSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE }), - srcBuf: this.test.makeBufferWithContents( - new Uint32Array(readResultsSize).fill(0), - GPUBufferUsage.COPY_SRC - ), - - size: readResultsSize, + srcBuf: this.test.device.createBuffer({ + label: 'readResultsSrcBuf', + size: readResultsSize, + usage: GPUBufferUsage.COPY_SRC + }), + size: readResultsSize }; const testResultsSize = this.params.numBehaviors * bytesPerWord; const testResultsBuffer = { deviceBuf: this.test.device.createBuffer({ + label: 'testResultsBuffer', size: testResultsSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }), - srcBuf: this.test.makeBufferWithContents( - new Uint32Array(testResultsSize).fill(0), - GPUBufferUsage.COPY_SRC - ), - - size: testResultsSize, + srcBuf: this.test.device.createBuffer({ + label: 'testResultsSrcBuffer', + size: testResultsSize, + usage: GPUBufferUsage.COPY_SRC + }), + size: testResultsSize }; const shuffledWorkgroupsSize = this.params.maxWorkgroups * bytesPerWord; const shuffledWorkgroupsBuffer = { deviceBuf: this.test.device.createBuffer({ size: shuffledWorkgroupsSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE }), srcBuf: this.test.device.createBuffer({ size: shuffledWorkgroupsSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE }), - size: shuffledWorkgroupsSize, + size: shuffledWorkgroupsSize }; - const barrierSize = bytesPerWord; + // Combine 3 arrays into 1 buffer as we need to keep the number of storage buffers to 4 for compat. + const falseSharingAvoidanceQuantum = 4096; + const barrierSize = align(bytesPerWord, falseSharingAvoidanceQuantum); + const scratchpadSize = align( + this.params.scratchMemorySize * bytesPerWord, + falseSharingAvoidanceQuantum + ); + const scratchMemoryLocationsSize = align( + this.params.maxWorkgroups * bytesPerWord, + falseSharingAvoidanceQuantum + ); + const comboSize = barrierSize + scratchpadSize + scratchMemoryLocationsSize; + + const comboBuffer = this.test.device.createBuffer({ + label: 'comboBuffer', + size: comboSize, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE + }); + const barrierBuffer = { - deviceBuf: this.test.device.createBuffer({ - size: barrierSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, - }), - srcBuf: this.test.makeBufferWithContents( - new Uint32Array(barrierSize).fill(0), - GPUBufferUsage.COPY_SRC - ), - - size: barrierSize, - }; - - const scratchpadSize = this.params.scratchMemorySize * bytesPerWord; - const scratchpadBuffer = { - deviceBuf: this.test.device.createBuffer({ - size: scratchpadSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, - }), - srcBuf: this.test.makeBufferWithContents( - new Uint32Array(scratchpadSize).fill(0), - GPUBufferUsage.COPY_SRC - ), - - size: scratchpadSize, - }; - - const scratchMemoryLocationsSize = this.params.maxWorkgroups * bytesPerWord; - const scratchMemoryLocationsBuffer = { - deviceBuf: this.test.device.createBuffer({ - size: scratchMemoryLocationsSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE, - }), + deviceBuf: comboBuffer, srcBuf: this.test.device.createBuffer({ + label: 'barrierSrcBuf', + size: barrierSize, + usage: GPUBufferUsage.COPY_SRC + }), + size: barrierSize, + offset: 0 + }; + + const scratchpadBuffer = { + deviceBuf: comboBuffer, + srcBuf: this.test.device.createBuffer({ + label: 'scratchpadSrcBuf', + size: scratchpadSize, + usage: GPUBufferUsage.COPY_SRC + }), + size: scratchpadSize, + offset: barrierSize + }; + + const scratchMemoryLocationsBuffer = { + deviceBuf: comboBuffer, + srcBuf: this.test.device.createBuffer({ + label: 'scratchMemoryLocationsSrcBuf', size: scratchMemoryLocationsSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE }), size: scratchMemoryLocationsSize, + offset: barrierSize + scratchpadSize }; const stressParamsSize = numStressParams * bytesPerWord; const stressParamsBuffer = { deviceBuf: this.test.device.createBuffer({ + label: 'stressParamsBuffer', size: stressParamsSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM }), srcBuf: this.test.device.createBuffer({ + label: 'stressParamsSrcBuf', size: stressParamsSize, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE }), - size: stressParamsSize, + size: stressParamsSize }; this.buffers = { @@ -169,74 +349,74 @@ export class MemoryModelTester { barrier: barrierBuffer, scratchpad: scratchpadBuffer, scratchMemoryLocations: scratchMemoryLocationsBuffer, - stressParams: stressParamsBuffer, + stressParams: stressParamsBuffer }; // set up pipeline layouts const testLayout = this.test.device.createBindGroupLayout({ + label: 'testLayout', entries: [ - { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 1, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 2, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'read-only-storage' } }, - { binding: 3, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 4, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 5, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 6, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }, - ], + { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, + { binding: 1, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, + { binding: 2, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'read-only-storage' } }, + { binding: 3, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, + { binding: 4, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }] + }); this.testPipeline = this.test.device.createComputePipeline({ + label: 'testPipeline', layout: this.test.device.createPipelineLayout({ - bindGroupLayouts: [testLayout], + bindGroupLayouts: [testLayout] }), compute: { module: this.test.device.createShaderModule({ - code: testShader, + code: testShader }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); this.testBindGroup = this.test.device.createBindGroup({ + label: 'testBindGroup', entries: [ - { binding: 0, resource: { buffer: this.buffers.testLocations.deviceBuf } }, - { binding: 1, resource: { buffer: this.buffers.readResults.deviceBuf } }, - { binding: 2, resource: { buffer: this.buffers.shuffledWorkgroups.deviceBuf } }, - { binding: 3, resource: { buffer: this.buffers.barrier.deviceBuf } }, - { binding: 4, resource: { buffer: this.buffers.scratchpad.deviceBuf } }, - { binding: 5, resource: { buffer: this.buffers.scratchMemoryLocations.deviceBuf } }, - { binding: 6, resource: { buffer: this.buffers.stressParams.deviceBuf } }, - ], + { binding: 0, resource: { buffer: this.buffers.testLocations.deviceBuf } }, + { binding: 1, resource: { buffer: this.buffers.readResults.deviceBuf } }, + { binding: 2, resource: { buffer: this.buffers.shuffledWorkgroups.deviceBuf } }, + { binding: 3, resource: { buffer: comboBuffer } }, + { binding: 4, resource: { buffer: this.buffers.stressParams.deviceBuf } }], - layout: testLayout, + layout: testLayout }); const resultLayout = this.test.device.createBindGroupLayout({ + label: 'resultLayout', entries: [ - { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 1, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 2, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, - { binding: 3, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }, - ], + { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, + { binding: 1, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, + { binding: 2, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'storage' } }, + { binding: 3, visibility: GPUShaderStage.COMPUTE, buffer: { type: 'uniform' } }] + }); this.resultPipeline = this.test.device.createComputePipeline({ + label: 'resultPipeline', layout: this.test.device.createPipelineLayout({ - bindGroupLayouts: [resultLayout], + bindGroupLayouts: [resultLayout] }), compute: { module: this.test.device.createShaderModule({ - code: resultShader, + code: resultShader }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); this.resultBindGroup = this.test.device.createBindGroup({ + label: 'resultBindGroup', entries: [ - { binding: 0, resource: { buffer: this.buffers.testLocations.deviceBuf } }, - { binding: 1, resource: { buffer: this.buffers.readResults.deviceBuf } }, - { binding: 2, resource: { buffer: this.buffers.testResults.deviceBuf } }, - { binding: 3, resource: { buffer: this.buffers.stressParams.deviceBuf } }, - ], + { binding: 0, resource: { buffer: this.buffers.testLocations.deviceBuf } }, + { binding: 1, resource: { buffer: this.buffers.readResults.deviceBuf } }, + { binding: 2, resource: { buffer: this.buffers.testResults.deviceBuf } }, + { binding: 3, resource: { buffer: this.buffers.stressParams.deviceBuf } }], - layout: resultLayout, + layout: resultLayout }); } @@ -252,7 +432,6 @@ export class MemoryModelTester { this.params.testingWorkgroups, this.params.maxWorkgroups ); - await this.setShuffledWorkgroups(numWorkgroups); await this.setScratchLocations(numWorkgroups); await this.setStressParams(); @@ -284,7 +463,7 @@ export class MemoryModelTester { this.checkWeakIndex(weakIndex), { type: Uint32Array, - typedLength: this.params.numBehaviors, + typedLength: this.params.numBehaviors } ); } @@ -296,7 +475,7 @@ export class MemoryModelTester { const resultPrinter = this.resultPrinter(weakIndex); return function (a) { return checkElementsPassPredicate(a, checkResult, { - predicatePrinter: [{ leftHeader: 'expected ==', getValueForCell: resultPrinter }], + predicatePrinter: [{ leftHeader: 'expected ==', getValueForCell: resultPrinter }] }); }; } @@ -327,8 +506,17 @@ export class MemoryModelTester { } /** Utility method that simplifies copying source buffers to device buffers. */ - copyBufferToBuffer(encoder, buffer) { - encoder.copyBufferToBuffer(buffer.srcBuf, 0, buffer.deviceBuf, 0, buffer.size); + copyBufferToBuffer( + encoder, + buffer) + { + encoder.copyBufferToBuffer( + buffer.srcBuf, + 0, + buffer.deviceBuf, + buffer.offset || 0, + buffer.size + ); } /** Returns a random integer between 0 and the max. */ @@ -401,15 +589,15 @@ export class MemoryModelTester { const workgroupsPerLocation = numWorkgroups / this.params.stressTargetLines; for (let j = 0; j < workgroupsPerLocation; j++) { scratchLocationsArray[i * workgroupsPerLocation + j] = - region * this.params.stressLineSize + locInRegion; + region * this.params.stressLineSize + locInRegion; } if ( - i === this.params.stressTargetLines - 1 && - numWorkgroups % this.params.stressTargetLines !== 0 - ) { + i === this.params.stressTargetLines - 1 && + numWorkgroups % this.params.stressTargetLines !== 0) + { for (let j = 0; j < numWorkgroups % this.params.stressTargetLines; j++) { scratchLocationsArray[numWorkgroups - j - 1] = - region * this.params.stressLineSize + locInRegion; + region * this.params.stressLineSize + locInRegion; } } } @@ -481,20 +669,43 @@ export class MemoryModelTester { /** Defines common data structures used in memory model test shaders. */ const shaderMemStructures = ` struct Memory { - value: array + value: array }; struct AtomicMemory { value: array> }; + struct IndexMemory { + value: array, + }; + + struct AtomicMemoryBarrier { + value: array, kNumBarriers> + }; + + struct IndexMemoryScratchpad { + value: array, + }; + + struct IndexMemoryScratchLocations { + value: array, + }; + struct ReadResult { r0: atomic, r1: atomic, }; struct ReadResults { - value: array + value: array, + }; + + // These arrays are combine into 1 buffer because compat mode only supports 4 storage buffers by default. + struct CombinedData { + barrier: AtomicMemoryBarrier, + scratchpad: IndexMemoryScratchpad, + scratch_locations: IndexMemoryScratchLocations, }; struct StressParamsMemory { @@ -545,32 +756,30 @@ const twoBehaviorTestResultStructure = ` /** Common bindings used in the test shader phase of a test. */ const commonTestShaderBindings = ` @group(0) @binding(1) var results : ReadResults; - @group(0) @binding(2) var shuffled_workgroups : Memory; - @group(0) @binding(3) var barrier : AtomicMemory; - @group(0) @binding(4) var scratchpad : Memory; - @group(0) @binding(5) var scratch_locations : Memory; - @group(0) @binding(6) var stress_params : StressParamsMemory; + @group(0) @binding(2) var shuffled_workgroups : IndexMemory; + @group(0) @binding(3) var combo : CombinedData; + @group(0) @binding(4) var stress_params : StressParamsMemory; `; /** The combined bindings for a test on atomic memory. */ const atomicTestShaderBindings = [ - ` +` @group(0) @binding(0) var test_locations : AtomicMemory; `, - commonTestShaderBindings, -].join('\n'); +commonTestShaderBindings]. +join('\n'); /** The combined bindings for a test on non-atomic memory. */ const nonAtomicTestShaderBindings = [ - ` +` @group(0) @binding(0) var test_locations : Memory; `, - commonTestShaderBindings, -].join('\n'); +commonTestShaderBindings]. +join('\n'); /** Bindings used in the result aggregation phase of the test. */ const resultShaderBindings = ` - @group(0) @binding(0) var test_locations : AtomicMemory; + @group(0) @binding(0) var test_locations : Memory; @group(0) @binding(1) var read_results : ReadResults; @group(0) @binding(2) var test_results : TestResults; @group(0) @binding(3) var stress_params : StressParamsMemory; @@ -591,7 +800,7 @@ const atomicWorkgroupMemory = ` * is large enough to accommodate the maximum memory size needed per workgroup for testing. */ const nonAtomicWorkgroupMemory = ` - var wg_test_locations: array; + var wg_test_locations: array; `; /** @@ -617,12 +826,12 @@ const testShaderFunctions = ` // the barrier but does not overly reduce testing throughput. fn spin(limit: u32) { var i : u32 = 0u; - var bar_val : u32 = atomicAdd(&barrier.value[0], 1u); + var bar_val : u32 = atomicAdd(&combo.barrier.value[0], 1u); loop { if (i == 1024u || bar_val >= limit) { break; } - bar_val = atomicAdd(&barrier.value[0], 0u); + bar_val = atomicAdd(&combo.barrier.value[0], 0u); i = i + 1u; } } @@ -632,44 +841,44 @@ const testShaderFunctions = ` // the compiler optimizing out unused loads, where 100,000 is larger than the maximum number of stress iterations used // in any test. fn do_stress(iterations: u32, pattern: u32, workgroup_id: u32) { - let addr = scratch_locations.value[workgroup_id]; + let addr = combo.scratch_locations.value[workgroup_id]; switch(pattern) { case 0u: { for(var i: u32 = 0u; i < iterations; i = i + 1u) { - scratchpad.value[addr] = i; - scratchpad.value[addr] = i + 1u; + combo.scratchpad.value[addr] = i; + combo.scratchpad.value[addr] = i + 1u; } } case 1u: { for(var i: u32 = 0u; i < iterations; i = i + 1u) { - scratchpad.value[addr] = i; - let tmp1: u32 = scratchpad.value[addr]; + combo.scratchpad.value[addr] = i; + let tmp1: u32 = combo.scratchpad.value[addr]; if (tmp1 > 100000u) { - scratchpad.value[addr] = i; + combo.scratchpad.value[addr] = i; break; } } } case 2u: { for(var i: u32 = 0u; i < iterations; i = i + 1u) { - let tmp1: u32 = scratchpad.value[addr]; + let tmp1: u32 = combo.scratchpad.value[addr]; if (tmp1 > 100000u) { - scratchpad.value[addr] = i; + combo.scratchpad.value[addr] = i; break; } - scratchpad.value[addr] = i; + combo.scratchpad.value[addr] = i; } } case 3u: { for(var i: u32 = 0u; i < iterations; i = i + 1u) { - let tmp1: u32 = scratchpad.value[addr]; + let tmp1: u32 = combo.scratchpad.value[addr]; if (tmp1 > 100000u) { - scratchpad.value[addr] = i; + combo.scratchpad.value[addr] = i; break; } - let tmp2: u32 = scratchpad.value[addr]; + let tmp2: u32 = combo.scratchpad.value[addr]; if (tmp2 > 100000u) { - scratchpad.value[addr] = i; + combo.scratchpad.value[addr] = i; break; } } @@ -686,7 +895,7 @@ const testShaderFunctions = ` */ const shaderEntryPoint = ` // Change to pipeline overridable constant when possible. - const workgroupXSize = 256u; + const workgroupXSize = kWorkgroupXSize; @compute @workgroup_size(workgroupXSize) fn main( @builtin(local_invocation_id) local_invocation_id : vec3, @builtin(workgroup_id) workgroup_id : vec3) { @@ -717,37 +926,37 @@ const testShaderCommonCalculations = ` * If the bounded spin-loop barrier is called, it attempts to wait for all invocations in all workgroups. */ const interWorkgroupTestShaderCode = [ - ` +` let total_ids = workgroupXSize * stress_params.testing_workgroups; let id_0 = shuffled_workgroup * workgroupXSize + local_invocation_id[0]; let new_workgroup = stripe_workgroup(shuffled_workgroup, local_invocation_id[0]); let id_1 = new_workgroup * workgroupXSize + permute_id(local_invocation_id[0], stress_params.permute_first, workgroupXSize); `, - testShaderCommonCalculations, - ` +testShaderCommonCalculations, +` if (stress_params.do_barrier == 1u) { spin(workgroupXSize * stress_params.testing_workgroups); } -`, -].join('\n'); +`]. +join('\n'); /** * An intra-workgroup test calculates two set of memory locations that are guaranteed to be in the same workgroup. * If the bounded spin-loop barrier is called, it attempts to wait for all invocations in the same workgroup. */ const intraWorkgroupTestShaderCode = [ - ` +` let total_ids = workgroupXSize; let id_0 = local_invocation_id[0]; let id_1 = permute_id(local_invocation_id[0], stress_params.permute_first, workgroupXSize); `, - testShaderCommonCalculations, - ` +testShaderCommonCalculations, +` if (stress_params.do_barrier == 1u) { spin(workgroupXSize); } -`, -].join('\n'); +`]. +join('\n'); /** * Tests that operate on storage memory and communicate with invocations in the same workgroup must offset their locations @@ -780,34 +989,39 @@ const testShaderCommonFooter = ` /** * All result shaders must calculate memory locations used in the test. Not all these locations are * used in every result shader, but no result shader uses more than these locations. + * + * Each value read from test_locations is converted from AccessValueTy to u32 + * before storing it in the read result. This assumes u32(AccessValueTy) + * is either an identity function u32(u32) or a value-converting overload such + * as u32(f16). */ const resultShaderCommonCalculations = ` let id_0 = workgroup_id[0] * workgroupXSize + local_invocation_id[0]; let x_0 = id_0 * stress_params.mem_stride * 2u; - let mem_x_0 = atomicLoad(&test_locations.value[x_0]); + let mem_x_0 = u32(test_locations.value[x_0]); let r0 = atomicLoad(&read_results.value[id_0].r0); let r1 = atomicLoad(&read_results.value[id_0].r1); `; /** Common result shader code for an inter-workgroup test. */ const interWorkgroupResultShaderCode = [ - resultShaderCommonCalculations, - ` +resultShaderCommonCalculations, +` let total_ids = workgroupXSize * stress_params.testing_workgroups; let y_0 = permute_id(id_0, stress_params.permute_second, total_ids) * stress_params.mem_stride * 2u + stress_params.location_offset; - let mem_y_0 = atomicLoad(&test_locations.value[y_0]); -`, -].join('\n'); + let mem_y_0 = u32(test_locations.value[y_0]); +`]. +join('\n'); /** Common result shader code for an intra-workgroup test. */ const intraWorkgroupResultShaderCode = [ - resultShaderCommonCalculations, - ` +resultShaderCommonCalculations, +` let total_ids = workgroupXSize; let y_0 = (workgroup_id[0] * workgroupXSize + permute_id(local_invocation_id[0], stress_params.permute_second, total_ids)) * stress_params.mem_stride * 2u + stress_params.location_offset; - let mem_y_0 = atomicLoad(&test_locations.value[y_0]); -`, -].join('\n'); + let mem_y_0 = u32(test_locations.value[y_0]); +`]. +join('\n'); /** Ending bracket for result shaders. */ const resultShaderCommonFooter = ` @@ -816,85 +1030,95 @@ const resultShaderCommonFooter = ` /** The common shader code for test shaders that perform atomic storage class memory litmus tests. */ const storageMemoryAtomicTestShaderCode = [ - shaderMemStructures, - atomicTestShaderBindings, - memoryLocationFunctions, - testShaderFunctions, - shaderEntryPoint, - testShaderCommonHeader, -].join('\n'); +shaderMemStructures, +atomicTestShaderBindings, +memoryLocationFunctions, +testShaderFunctions, +shaderEntryPoint, +testShaderCommonHeader]. +join('\n'); /** The common shader code for test shaders that perform non-atomic storage class memory litmus tests. */ const storageMemoryNonAtomicTestShaderCode = [ - shaderMemStructures, - nonAtomicTestShaderBindings, - memoryLocationFunctions, - testShaderFunctions, - shaderEntryPoint, - testShaderCommonHeader, -].join('\n'); +shaderMemStructures, +nonAtomicTestShaderBindings, +memoryLocationFunctions, +testShaderFunctions, +shaderEntryPoint, +testShaderCommonHeader]. +join('\n'); /** The common shader code for test shaders that perform atomic workgroup class memory litmus tests. */ const workgroupMemoryAtomicTestShaderCode = [ - shaderMemStructures, - atomicTestShaderBindings, - atomicWorkgroupMemory, - memoryLocationFunctions, - testShaderFunctions, - shaderEntryPoint, - testShaderCommonHeader, -].join('\n'); +shaderMemStructures, +atomicTestShaderBindings, +atomicWorkgroupMemory, +memoryLocationFunctions, +testShaderFunctions, +shaderEntryPoint, +testShaderCommonHeader]. +join('\n'); /** The common shader code for test shaders that perform non-atomic workgroup class memory litmus tests. */ const workgroupMemoryNonAtomicTestShaderCode = [ - shaderMemStructures, - nonAtomicTestShaderBindings, - nonAtomicWorkgroupMemory, - memoryLocationFunctions, - testShaderFunctions, - shaderEntryPoint, - testShaderCommonHeader, -].join('\n'); +shaderMemStructures, +nonAtomicTestShaderBindings, +nonAtomicWorkgroupMemory, +memoryLocationFunctions, +testShaderFunctions, +shaderEntryPoint, +testShaderCommonHeader]. +join('\n'); /** The common shader code for all result shaders. */ const resultShaderCommonCode = [ - shaderMemStructures, - resultShaderBindings, - memoryLocationFunctions, - shaderEntryPoint, -].join('\n'); +shaderMemStructures, +resultShaderBindings, +memoryLocationFunctions, +shaderEntryPoint]. +join('\n'); /** * Defines the types of possible memory a test is operating on. Used as part of the process of building shader code from * its composite parts. */ -export let MemoryType; +export let MemoryType = /*#__PURE__*/function (MemoryType) {MemoryType["AtomicStorageClass"] = "atomic_storage";MemoryType["NonAtomicStorageClass"] = "non_atomic_storage";MemoryType["AtomicWorkgroupClass"] = "atomic_workgroup";MemoryType["NonAtomicWorkgroupClass"] = "non_atomic_workgroup";return MemoryType;}({}); + + + + + + + + + /** * Defines the relative positions of two invocations coordinating on a test. Used as part of the process of building shader * code from its composite parts. - */ (function (MemoryType) { - MemoryType['AtomicStorageClass'] = 'atomic_storage'; - MemoryType['NonAtomicStorageClass'] = 'non_atomic_storage'; - MemoryType['AtomicWorkgroupClass'] = 'atomic_workgroup'; - MemoryType['NonAtomicWorkgroupClass'] = 'non_atomic_workgroup'; -})(MemoryType || (MemoryType = {})); -export let TestType; + */ +export let TestType = /*#__PURE__*/function (TestType) {TestType["InterWorkgroup"] = "inter_workgroup";TestType["IntraWorkgroup"] = "intra_workgroup";return TestType;}({}); + + + + + + +/** Defines the number of behaviors a test may have. */ +export let ResultType = /*#__PURE__*/function (ResultType) {ResultType[ResultType["TwoBehavior"] = 0] = "TwoBehavior";ResultType[ResultType["FourBehavior"] = 1] = "FourBehavior";return ResultType;}({}); + + -/** Defines the number of behaviors a test may have. */ (function (TestType) { - TestType['InterWorkgroup'] = 'inter_workgroup'; - TestType['IntraWorkgroup'] = 'intra_workgroup'; -})(TestType || (TestType = {})); -export let ResultType; /** * Given test code that performs the actual sequence of loads and stores, as well as a memory type and test type, returns * a complete test shader. - */ (function (ResultType) { - ResultType[(ResultType['TwoBehavior'] = 0)] = 'TwoBehavior'; - ResultType[(ResultType['FourBehavior'] = 1)] = 'FourBehavior'; -})(ResultType || (ResultType = {})); -export function buildTestShader(testCode, memoryType, testType) { + */ +export function buildTestShader( +testCode, +memoryType, +testType) +{ let memoryTypeCode; let isStorageAS = false; switch (memoryType) { @@ -912,7 +1136,6 @@ export function buildTestShader(testCode, memoryType, testType) { case MemoryType.NonAtomicWorkgroupClass: memoryTypeCode = workgroupMemoryNonAtomicTestShaderCode; } - let testTypeCode; switch (testType) { case TestType.InterWorkgroup: @@ -925,7 +1148,6 @@ export function buildTestShader(testCode, memoryType, testType) { testTypeCode = intraWorkgroupTestShaderCode; } } - return [memoryTypeCode, testTypeCode, testCode, testShaderCommonFooter].join('\n'); } @@ -933,7 +1155,11 @@ export function buildTestShader(testCode, memoryType, testType) { * Given result code that aggregates the possible behaviors of a test across all instances, as well as a test type and * number of behaviors, returns a complete result shader. */ -export function buildResultShader(resultCode, testType, resultType) { +export function buildResultShader( +resultCode, +testType, +resultType) +{ let resultStructure; switch (resultType) { case ResultType.TwoBehavior: @@ -942,7 +1168,6 @@ export function buildResultShader(resultCode, testType, resultType) { case ResultType.FourBehavior: resultStructure = fourBehaviorTestResultStructure; } - let testTypeCode; switch (testType) { case TestType.InterWorkgroup: @@ -951,12 +1176,11 @@ export function buildResultShader(resultCode, testType, resultType) { case TestType.IntraWorkgroup: testTypeCode = intraWorkgroupResultShaderCode; } - return [ - resultStructure, - resultShaderCommonCode, - testTypeCode, - resultCode, - resultShaderCommonFooter, - ].join('\n'); -} + resultStructure, + resultShaderCommonCode, + testTypeCode, + resultCode, + resultShaderCommonFooter]. + join('\n'); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/weak.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/weak.spec.js index a9f7e60ce1a..57458afd7ae 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/weak.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/memory_model/weak.spec.js @@ -1,20 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for properties of the WebGPU memory model involving two memory locations. Specifically, the acquire/release ordering provided by WebGPU's barriers can be used to disallow -weak behaviors in several classic memory model litmus tests.`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +weak behaviors in several classic memory model litmus tests.`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { + MemoryModelTester, buildTestShader, MemoryType, TestType, buildResultShader, - ResultType, -} from './memory_model_setup.js'; + ResultType } from +'./memory_model_setup.js'; export const g = makeTestGroup(GPUTest); @@ -41,7 +41,7 @@ const memoryModelTestParams = { permuteSecond: 419, memStride: 2, aliasedMemory: false, - numBehaviors: 4, + numBehaviors: 4 }; const workgroupMemoryMessagePassingTestCode = ` @@ -66,29 +66,28 @@ const storageMemoryMessagePassingTestCode = ` atomicStore(&results.value[shuffled_workgroup * u32(workgroupXSize) + id_1].r1, r1); `; -g.test('message_passing') - .desc( - `Checks whether two reads on one thread can observe two writes in another thread in a way +g.test('message_passing'). +desc( + `Checks whether two reads on one thread can observe two writes in another thread in a way that is inconsistent with sequential consistency. In the message passing litmus test, one thread writes the value 1 to some location x and then 1 to some location y. The second thread reads y and then x. If the second thread reads y == 1 and x == 0, then sequential consistency has not been respected. The acquire/release semantics of WebGPU's barrier functions should disallow this behavior within a workgroup. ` - ) - .paramsSimple([ - { memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryMessagePassingTestCode }, - { memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryMessagePassingTestCode }, - ]) - .fn(async t => { - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const messagePassingResultShader = buildResultShader( - ` +). +paramsSimple([ +{ memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryMessagePassingTestCode }, +{ memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryMessagePassingTestCode }] +). +fn(async (t) => { + const testShader = buildTestShader( + t.params._testCode, + t.params.memType, + TestType.IntraWorkgroup + ); + const messagePassingResultShader = buildResultShader( + ` if ((r0 == 0u && r1 == 0u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 1u && r1 == 1u)) { @@ -99,19 +98,17 @@ g.test('message_passing') atomicAdd(&test_results.weak, 1u); } `, - TestType.IntraWorkgroup, - ResultType.FourBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - messagePassingResultShader - ); - - await memModelTester.run(40, 3); - }); + TestType.IntraWorkgroup, + ResultType.FourBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + messagePassingResultShader + ); + await memModelTester.run(40, 3); +}); const workgroupMemoryStoreTestCode = ` atomicStore(&wg_test_locations[x_0], 2u); @@ -135,27 +132,26 @@ const storageMemoryStoreTestCode = ` atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r0, r0); `; -g.test('store') - .desc( - `In the store litmus test, one thread writes 2 to some memory location x and then 1 to some memory location +g.test('store'). +desc( + `In the store litmus test, one thread writes 2 to some memory location x and then 1 to some memory location y. A second thread reads the value of y and then writes 1 to x. If the read on the second thread returns 1, but the value of x in memory after the test ends is 2, then there has been a re-ordering which is not allowed when using WebGPU's barriers. ` - ) - .paramsSimple([ - { memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryStoreTestCode }, - { memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryStoreTestCode }, - ]) - .fn(async t => { - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const messagePassingResultShader = buildResultShader( - ` +). +paramsSimple([ +{ memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryStoreTestCode }, +{ memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryStoreTestCode }] +). +fn(async (t) => { + const testShader = buildTestShader( + t.params._testCode, + t.params.memType, + TestType.IntraWorkgroup + ); + const messagePassingResultShader = buildResultShader( + ` if ((r0 == 1u && mem_x_0 == 1u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 0u && mem_x_0 == 2u)) { @@ -166,19 +162,17 @@ g.test('store') atomicAdd(&test_results.weak, 1u); } `, - TestType.IntraWorkgroup, - ResultType.FourBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - messagePassingResultShader - ); - - await memModelTester.run(40, 3); - }); + TestType.IntraWorkgroup, + ResultType.FourBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + messagePassingResultShader + ); + await memModelTester.run(40, 3); +}); const workgroupMemoryLoadBufferTestCode = ` let r0 = atomicLoad(&wg_test_locations[y_0]); @@ -202,26 +196,25 @@ const storageMemoryLoadBufferTestCode = ` atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r1, r1); `; -g.test('load_buffer') - .desc( - `In the load buffer litmus test, one thread reads from memory location y and then writes 1 to memory location x. +g.test('load_buffer'). +desc( + `In the load buffer litmus test, one thread reads from memory location y and then writes 1 to memory location x. A second thread reads from x and then writes 1 to y. If both threads read the value 0, then the loads have been buffered or re-ordered, which is not allowed when used in conjunction with WebGPU's barriers. ` - ) - .paramsSimple([ - { memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryLoadBufferTestCode }, - { memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryLoadBufferTestCode }, - ]) - .fn(async t => { - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const messagePassingResultShader = buildResultShader( - ` +). +paramsSimple([ +{ memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryLoadBufferTestCode }, +{ memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryLoadBufferTestCode }] +). +fn(async (t) => { + const testShader = buildTestShader( + t.params._testCode, + t.params.memType, + TestType.IntraWorkgroup + ); + const messagePassingResultShader = buildResultShader( + ` if ((r0 == 1u && r1 == 0u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 0u && r1 == 1u)) { @@ -232,19 +225,17 @@ g.test('load_buffer') atomicAdd(&test_results.weak, 1u); } `, - TestType.IntraWorkgroup, - ResultType.FourBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - messagePassingResultShader - ); - - await memModelTester.run(40, 3); - }); + TestType.IntraWorkgroup, + ResultType.FourBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + messagePassingResultShader + ); + await memModelTester.run(40, 3); +}); const workgroupMemoryReadTestCode = ` atomicStore(&wg_test_locations[x_0], 1u); @@ -268,28 +259,27 @@ const storageMemoryReadTestCode = ` atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r0, r0); `; -g.test('read') - .desc( - `In the read litmus test, one thread writes 1 to memory location x and then 1 to memory location y. A second thread +g.test('read'). +desc( + `In the read litmus test, one thread writes 1 to memory location x and then 1 to memory location y. A second thread first writes 2 to y and then reads from x. If the value read by the second thread is 0 but the value in memory of y after the test completes is 2, then there has been some re-ordering of instructions disallowed when using WebGPU's barrier. Additionally, both writes to y are RMWs, so that the barrier forces the correct acquire/release memory ordering synchronization. ` - ) - .paramsSimple([ - { memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryReadTestCode }, - { memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryReadTestCode }, - ]) - .fn(async t => { - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const messagePassingResultShader = buildResultShader( - ` +). +paramsSimple([ +{ memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryReadTestCode }, +{ memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryReadTestCode }] +). +fn(async (t) => { + const testShader = buildTestShader( + t.params._testCode, + t.params.memType, + TestType.IntraWorkgroup + ); + const messagePassingResultShader = buildResultShader( + ` if ((r0 == 1u && mem_y_0 == 2u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 0u && mem_y_0 == 1u)) { @@ -300,19 +290,17 @@ g.test('read') atomicAdd(&test_results.weak, 1u); } `, - TestType.IntraWorkgroup, - ResultType.FourBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - messagePassingResultShader - ); - - await memModelTester.run(40, 3); - }); + TestType.IntraWorkgroup, + ResultType.FourBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + messagePassingResultShader + ); + await memModelTester.run(40, 3); +}); const workgroupMemoryStoreBufferTestCode = ` atomicStore(&wg_test_locations[x_0], 1u); @@ -336,27 +324,26 @@ const storageMemoryStoreBufferTestCode = ` atomicStore(&results.value[shuffled_workgroup * workgroupXSize + id_1].r1, r1); `; -g.test('store_buffer') - .desc( - `In the store buffer litmus test, one thread writes 1 to memory location x and then reads from memory location +g.test('store_buffer'). +desc( + `In the store buffer litmus test, one thread writes 1 to memory location x and then reads from memory location y. A second thread writes 1 to y and then reads from x. If both reads return 0, then stores have been buffered or some other re-ordering has occurred that is disallowed by WebGPU's barriers. Additionally, both the read and store to y are RMWs to achieve the necessary synchronization across threads. ` - ) - .paramsSimple([ - { memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryStoreBufferTestCode }, - { memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryStoreBufferTestCode }, - ]) - .fn(async t => { - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const messagePassingResultShader = buildResultShader( - ` +). +paramsSimple([ +{ memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemoryStoreBufferTestCode }, +{ memType: MemoryType.AtomicStorageClass, _testCode: storageMemoryStoreBufferTestCode }] +). +fn(async (t) => { + const testShader = buildTestShader( + t.params._testCode, + t.params.memType, + TestType.IntraWorkgroup + ); + const messagePassingResultShader = buildResultShader( + ` if ((r0 == 1u && r1 == 0u)) { atomicAdd(&test_results.seq0, 1u); } else if ((r0 == 0u && r1 == 1u)) { @@ -367,19 +354,17 @@ g.test('store_buffer') atomicAdd(&test_results.weak, 1u); } `, - TestType.IntraWorkgroup, - ResultType.FourBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - messagePassingResultShader - ); - - await memModelTester.run(40, 3); - }); + TestType.IntraWorkgroup, + ResultType.FourBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + messagePassingResultShader + ); + await memModelTester.run(40, 3); +}); const workgroupMemory2P2WTestCode = ` atomicStore(&wg_test_locations[x_0], 2u); @@ -402,26 +387,25 @@ const storageMemory2P2WTestCode = ` atomicStore(&test_locations.value[x_1], 1u); `; -g.test('2_plus_2_write') - .desc( - `In the 2+2 write litmus test, one thread stores 2 to memory location x and then 1 to memory location y. +g.test('2_plus_2_write'). +desc( + `In the 2+2 write litmus test, one thread stores 2 to memory location x and then 1 to memory location y. A second thread stores 2 to y and then 1 to x. If at the end of the test both memory locations are set to 2, then some disallowed re-ordering has occurred. Both writes to y are RMWs to achieve the required synchronization. ` - ) - .paramsSimple([ - { memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemory2P2WTestCode }, - { memType: MemoryType.AtomicStorageClass, _testCode: storageMemory2P2WTestCode }, - ]) - .fn(async t => { - const testShader = buildTestShader( - t.params._testCode, - t.params.memType, - TestType.IntraWorkgroup - ); - - const messagePassingResultShader = buildResultShader( - ` +). +paramsSimple([ +{ memType: MemoryType.AtomicWorkgroupClass, _testCode: workgroupMemory2P2WTestCode }, +{ memType: MemoryType.AtomicStorageClass, _testCode: storageMemory2P2WTestCode }] +). +fn(async (t) => { + const testShader = buildTestShader( + t.params._testCode, + t.params.memType, + TestType.IntraWorkgroup + ); + const messagePassingResultShader = buildResultShader( + ` if ((mem_x_0 == 1u && mem_y_0 == 2u)) { atomicAdd(&test_results.seq0, 1u); } else if ((mem_x_0 == 2u && mem_y_0 == 1u)) { @@ -432,16 +416,14 @@ g.test('2_plus_2_write') atomicAdd(&test_results.weak, 1u); } `, - TestType.IntraWorkgroup, - ResultType.FourBehavior - ); - - const memModelTester = new MemoryModelTester( - t, - memoryModelTestParams, - testShader, - messagePassingResultShader - ); - - await memModelTester.run(40, 3); - }); + TestType.IntraWorkgroup, + ResultType.FourBehavior + ); + const memModelTester = new MemoryModelTester( + t, + memoryModelTestParams, + testShader, + messagePassingResultShader + ); + await memModelTester.run(40, 3); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/padding.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/padding.spec.js index 40bc330bf4e..56a64d60843 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/padding.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/padding.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for preservation of padding bytes in structures and arrays. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { iterRange } from '../../../common/util/util.js'; import { GPUTest } from '../../gpu_test.js'; @@ -21,19 +20,18 @@ function runShaderTest(t, wgsl, expected) { layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); // Allocate a buffer and fill it with 0xdeadbeef words. const outputBuffer = t.makeBufferWithContents( - new Uint32Array([...iterRange(expected.length, x => 0xdeadbeef)]), + new Uint32Array([...iterRange(expected.length, (_i) => 0xdeadbeef)]), GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC ); - const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] }); // Run the shader. @@ -49,17 +47,17 @@ function runShaderTest(t, wgsl, expected) { t.expectGPUBufferValuesEqual(outputBuffer, expected); } -g.test('struct_implicit') - .desc( - `Test that padding bytes in between structure members are preserved. +g.test('struct_implicit'). +desc( + `Test that padding bytes in between structure members are preserved. This test defines a structure that has implicit padding and creates a read-write storage buffer with that structure type. The shader assigns the whole variable at once, and we then test that data in the padding bytes was preserved. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` struct S { a : u32, // 12 bytes of padding @@ -75,40 +73,31 @@ g.test('struct_implicit') buffer = S(0x12345678, vec3(0xabcdef01), vec2(0x98765432)); } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // a : u32 - 0x12345678, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // b : vec3 - 0xabcdef01, - 0xabcdef01, - 0xabcdef01, - 0xdeadbeef, - // c : vec2 - 0x98765432, - 0x98765432, - 0xdeadbeef, - 0xdeadbeef, - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + // a : u32 + 0x12345678, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // b : vec3 + 0xabcdef01, 0xabcdef01, 0xabcdef01, 0xdeadbeef, + // c : vec2 + 0x98765432, 0x98765432, 0xdeadbeef, 0xdeadbeef] + ) + ); +}); -g.test('struct_explicit') - .desc( - `Test that padding bytes in between structure members are preserved. +g.test('struct_explicit'). +desc( + `Test that padding bytes in between structure members are preserved. This test defines a structure with explicit padding attributes and creates a read-write storage buffer with that structure type. The shader assigns the whole variable at once, and we then test that data in the padding bytes was preserved. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` struct S { a : u32, // 12 bytes of padding @@ -124,40 +113,31 @@ g.test('struct_explicit') buffer = S(0x12345678, 0xabcdef01, 0x98765432); } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // a : u32 - 0x12345678, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // @align(16) @size(20) b : u32 - 0xabcdef01, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // @size(12) c : u32 - 0x98765432, - 0xdeadbeef, - 0xdeadbeef, - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + // a : u32 + 0x12345678, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // @align(16) @size(20) b : u32 + 0xabcdef01, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // @size(12) c : u32 + 0x98765432, 0xdeadbeef, 0xdeadbeef] + ) + ); +}); -g.test('struct_nested') - .desc( - `Test that padding bytes in nested structures are preserved. +g.test('struct_nested'). +desc( + `Test that padding bytes in nested structures are preserved. This test defines a set of nested structures that have padding and creates a read-write storage buffer with the root structure type. The shader assigns the whole variable at once, and we then test that data in the padding bytes was preserved. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` // Size of S1 is 48 bytes. // Alignment of S1 is 16 bytes. struct S1 { @@ -193,119 +173,68 @@ g.test('struct_nested') buffer = S3(); } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // a3 : S1 - // a3.a1 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // a3.b1 : vec3 - 0x00000000, - 0x00000000, - 0x00000000, - 0xdeadbeef, - // a3.c1 : vec2 - 0x00000000, - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, + runShaderTest( + t, + wgsl, + new Uint32Array([ + // a3 : S1 + // a3.a1 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // a3.b1 : vec3 + 0x00000000, 0x00000000, 0x00000000, 0xdeadbeef, + // a3.c1 : vec2 + 0x00000000, 0x00000000, 0xdeadbeef, 0xdeadbeef, - // b3 : S2 - // b3.a2 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // b3.b2 : S1 - // b3.b2.a1 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // b3.b2.b1 : vec3 - 0x00000000, - 0x00000000, - 0x00000000, - 0xdeadbeef, - // b3.b2.c1 : vec2 - 0x00000000, - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - // b3.c2 : S1 - // b3.c2.a1 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // b3.c2.b1 : vec3 - 0x00000000, - 0x00000000, - 0x00000000, - 0xdeadbeef, - // b3.c2.c1 : vec2 - 0x00000000, - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, + // b3 : S2 + // b3.a2 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // b3.b2 : S1 + // b3.b2.a1 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // b3.b2.b1 : vec3 + 0x00000000, 0x00000000, 0x00000000, 0xdeadbeef, + // b3.b2.c1 : vec2 + 0x00000000, 0x00000000, 0xdeadbeef, 0xdeadbeef, + // b3.c2 : S1 + // b3.c2.a1 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // b3.c2.b1 : vec3 + 0x00000000, 0x00000000, 0x00000000, 0xdeadbeef, + // b3.c2.c1 : vec2 + 0x00000000, 0x00000000, 0xdeadbeef, 0xdeadbeef, - // c3 : S2 - // c3.a2 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // c3.b2 : S1 - // c3.b2.a1 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // c3.b2.b1 : vec3 - 0x00000000, - 0x00000000, - 0x00000000, - 0xdeadbeef, - // c3.b2.c1 : vec2 - 0x00000000, - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - // c3.c2 : S1 - // c3.c2.a1 : u32 - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - // c3.c2.b1 : vec3 - 0x00000000, - 0x00000000, - 0x00000000, - 0xdeadbeef, - // c3.c2.c1 : vec2 - 0x00000000, - 0x00000000, - 0xdeadbeef, - 0xdeadbeef, - ]) - ); - }); + // c3 : S2 + // c3.a2 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // c3.b2 : S1 + // c3.b2.a1 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // c3.b2.b1 : vec3 + 0x00000000, 0x00000000, 0x00000000, 0xdeadbeef, + // c3.b2.c1 : vec2 + 0x00000000, 0x00000000, 0xdeadbeef, 0xdeadbeef, + // c3.c2 : S1 + // c3.c2.a1 : u32 + 0x00000000, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, + // c3.c2.b1 : vec3 + 0x00000000, 0x00000000, 0x00000000, 0xdeadbeef, + // c3.c2.c1 : vec2 + 0x00000000, 0x00000000, 0xdeadbeef, 0xdeadbeef] + ) + ); +}); -g.test('array_of_vec3') - .desc( - `Test that padding bytes in between array elements are preserved. +g.test('array_of_vec3'). +desc( + `Test that padding bytes in between array elements are preserved. This test defines creates a read-write storage buffer with type array. The shader assigns the whole variable at once, and we then test that data in the padding bytes was preserved. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` @group(0) @binding(0) var buffer : array, 4>; @compute @workgroup_size(1) @@ -318,45 +247,33 @@ g.test('array_of_vec3') ); } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // buffer[0] - 0x12345678, - 0x12345678, - 0x12345678, - 0xdeadbeef, - // buffer[1] - 0xabcdef01, - 0xabcdef01, - 0xabcdef01, - 0xdeadbeef, - // buffer[2] - 0x98765432, - 0x98765432, - 0x98765432, - 0xdeadbeef, - // buffer[2] - 0x0f0f0f0f, - 0x0f0f0f0f, - 0x0f0f0f0f, - 0xdeadbeef, - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + // buffer[0] + 0x12345678, 0x12345678, 0x12345678, 0xdeadbeef, + // buffer[1] + 0xabcdef01, 0xabcdef01, 0xabcdef01, 0xdeadbeef, + // buffer[2] + 0x98765432, 0x98765432, 0x98765432, 0xdeadbeef, + // buffer[2] + 0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f, 0xdeadbeef] + ) + ); +}); -g.test('array_of_struct') - .desc( - `Test that padding bytes in between array elements are preserved. +g.test('array_of_struct'). +desc( + `Test that padding bytes in between array elements are preserved. This test defines creates a read-write storage buffer with type array, where S is a structure that contains padding bytes. The shader assigns the whole variable at once, and we then test that data in the padding bytes was preserved. ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` struct S { a : u32, b : vec3, @@ -372,48 +289,30 @@ g.test('array_of_struct') ); } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // buffer[0] - 0x12345678, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - 0x0f0f0f0f, - 0x0f0f0f0f, - 0x0f0f0f0f, - 0xdeadbeef, - // buffer[1] - 0xabcdef01, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - 0x7c7c7c7c, - 0x7c7c7c7c, - 0x7c7c7c7c, - 0xdeadbeef, - // buffer[2] - 0x98765432, - 0xdeadbeef, - 0xdeadbeef, - 0xdeadbeef, - 0x18181818, - 0x18181818, - 0x18181818, - 0xdeadbeef, - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + // buffer[0] + 0x12345678, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f, + 0xdeadbeef, + // buffer[1] + 0xabcdef01, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0x7c7c7c7c, 0x7c7c7c7c, 0x7c7c7c7c, + 0xdeadbeef, + // buffer[2] + 0x98765432, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0x18181818, 0x18181818, 0x18181818, + 0xdeadbeef] + ) + ); +}); -g.test('vec3') - .desc( - `Test padding bytes are preserved when assigning to a variable of type vec3 (without a struct). +g.test('vec3'). +desc( + `Test padding bytes are preserved when assigning to a variable of type vec3 (without a struct). ` - ) - .fn(t => { - const wgsl = ` +). +fn((t) => { + const wgsl = ` @group(0) @binding(0) var buffer : vec3; @compute @workgroup_size(1) @@ -421,18 +320,23 @@ g.test('vec3') buffer = vec3(0x12345678, 0xabcdef01, 0x98765432); } `; - runShaderTest(t, wgsl, new Uint32Array([0x12345678, 0xabcdef01, 0x98765432, 0xdeadbeef])); - }); + runShaderTest(t, wgsl, new Uint32Array([0x12345678, 0xabcdef01, 0x98765432, 0xdeadbeef])); +}); -g.test('matCx3') - .desc( - `Test padding bytes are preserved when assigning to a variable of type matCx3. +g.test('matCx3'). +desc( + `Test padding bytes are preserved when assigning to a variable of type matCx3. ` - ) - .params(u => u.combine('columns', [2, 3, 4]).combine('use_struct', [true, false]).beginSubcases()) - .fn(t => { - const cols = t.params.columns; - const wgsl = ` +). +params((u) => +u. +combine('columns', [2, 3, 4]). +combine('use_struct', [true, false]). +beginSubcases() +). +fn((t) => { + const cols = t.params.columns; + const wgsl = ` alias Mat = mat${cols}x3; ${t.params.use_struct ? `struct S { m : Mat } alias Type = S;` : `alias Type = Mat;`} @group(0) @binding(0) var buffer : Type; @@ -446,30 +350,35 @@ g.test('matCx3') buffer = Type(m); } `; - const f_values = new Float32Array(cols * 4); - const u_values = new Uint32Array(f_values.buffer); - for (let c = 0; c < cols; c++) { - f_values[c * 4 + 0] = c * 3 + 1; - f_values[c * 4 + 1] = c * 3 + 2; - f_values[c * 4 + 2] = c * 3 + 3; - u_values[c * 4 + 3] = 0xdeadbeef; - } - runShaderTest(t, wgsl, u_values); - }); + const f_values = new Float32Array(cols * 4); + const u_values = new Uint32Array(f_values.buffer); + for (let c = 0; c < cols; c++) { + f_values[c * 4 + 0] = c * 3 + 1; + f_values[c * 4 + 1] = c * 3 + 2; + f_values[c * 4 + 2] = c * 3 + 3; + u_values[c * 4 + 3] = 0xdeadbeef; + } + runShaderTest(t, wgsl, u_values); +}); -g.test('array_of_matCx3') - .desc( - `Test that padding bytes in between array elements are preserved. +g.test('array_of_matCx3'). +desc( + `Test that padding bytes in between array elements are preserved. This test defines creates a read-write storage buffer with type array, 4>. The shader assigns the whole variable at once, and we then test that data in the padding bytes was preserved. ` - ) - .params(u => u.combine('columns', [2, 3, 4]).combine('use_struct', [true, false]).beginSubcases()) - .fn(t => { - const cols = t.params.columns; - const wgsl = ` +). +params((u) => +u. +combine('columns', [2, 3, 4]). +combine('use_struct', [true, false]). +beginSubcases() +). +fn((t) => { + const cols = t.params.columns; + const wgsl = ` alias Mat = mat${cols}x3; ${t.params.use_struct ? `struct S { m : Mat } alias Type = S;` : `alias Type = Mat;`} @group(0) @binding(0) var buffer : array; @@ -483,15 +392,15 @@ g.test('array_of_matCx3') buffer = array(Type(m), Type(m * 2), Type(m * 3), Type(m * 4)); } `; - const f_values = new Float32Array(cols * 4 * 4); - const u_values = new Uint32Array(f_values.buffer); - for (let i = 0; i < 4; i++) { - for (let c = 0; c < cols; c++) { - f_values[i * (cols * 4) + c * 4 + 0] = (c * 3 + 1) * (i + 1); - f_values[i * (cols * 4) + c * 4 + 1] = (c * 3 + 2) * (i + 1); - f_values[i * (cols * 4) + c * 4 + 2] = (c * 3 + 3) * (i + 1); - u_values[i * (cols * 4) + c * 4 + 3] = 0xdeadbeef; - } + const f_values = new Float32Array(cols * 4 * 4); + const u_values = new Uint32Array(f_values.buffer); + for (let i = 0; i < 4; i++) { + for (let c = 0; c < cols; c++) { + f_values[i * (cols * 4) + c * 4 + 0] = (c * 3 + 1) * (i + 1); + f_values[i * (cols * 4) + c * 4 + 1] = (c * 3 + 2) * (i + 1); + f_values[i * (cols * 4) + c * 4 + 2] = (c * 3 + 3) * (i + 1); + u_values[i * (cols * 4) + c * 4 + 3] = 0xdeadbeef; } - runShaderTest(t, wgsl, u_values); - }); + } + runShaderTest(t, wgsl, u_values); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access.spec.js index 903637ef4d2..8e6cd5c80b3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests to check datatype clamping in shaders is correctly implemented for all indexable types (vectors, matrices, sized/unsized arrays) visible to shaders in various ways. TODO: add tests to check that textureLoad operations stay in-bounds. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert } from '../../../common/util/util.js'; import { GPUTest } from '../../gpu_test.js'; import { align } from '../../util/math.js'; @@ -24,7 +23,14 @@ const kMinI32 = -0x8000_0000; * Non-test bindings are in bind group 1, including: * - `constants.zero`: a dynamically-uniform `0u` value. */ -function runShaderTest(t, stage, testSource, layout, testBindings, dynamicOffsets) { +async function runShaderTest( +t, +stage, +testSource, +layout, +testBindings, +dynamicOffsets) +{ assert(stage === GPUShaderStage.COMPUTE, 'Only know how to deal with compute for now'); // Contains just zero (for now). @@ -32,7 +38,7 @@ function runShaderTest(t, stage, testSource, layout, testBindings, dynamicOffset const resultBuffer = t.device.createBuffer({ size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE }); const source = ` @@ -56,22 +62,22 @@ fn main() { t.debug(source); const module = t.device.createShaderModule({ code: source }); - const pipeline = t.device.createComputePipeline({ + const pipeline = await t.device.createComputePipelineAsync({ layout, - compute: { module, entryPoint: 'main' }, + compute: { module, entryPoint: 'main' } }); const group = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(1), entries: [ - { binding: 0, resource: { buffer: constantsBuffer } }, - { binding: 1, resource: { buffer: resultBuffer } }, - ], + { binding: 0, resource: { buffer: constantsBuffer } }, + { binding: 1, resource: { buffer: resultBuffer } }] + }); const testGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: testBindings, + entries: testBindings }); const encoder = t.device.createCommandEncoder(); @@ -88,7 +94,11 @@ fn main() { } /** Fill an ArrayBuffer with sentinel values, except clear a region to zero. */ -function testFillArrayBuffer(array, type, { zeroByteStart, zeroByteCount }) { +function testFillArrayBuffer( +array, +type, +{ zeroByteStart, zeroByteCount }) +{ const constructor = { u32: Uint32Array, i32: Int32Array, f32: Float32Array }[type]; assert(zeroByteCount % constructor.BYTES_PER_ELEMENT === 0); new constructor(array).fill(42); @@ -99,9 +109,9 @@ function testFillArrayBuffer(array, type, { zeroByteStart, zeroByteCount }) { * Generate a bunch of indexable types (vec, mat, sized/unsized array) for testing. */ -g.test('linear_memory') - .desc( - `For each indexable data type (vec, mat, sized/unsized array, of various scalar types), attempts +g.test('linear_memory'). +desc( + `For each indexable data type (vec, mat, sized/unsized array, of various scalar types), attempts to access (read, write, atomic load/store) a region of memory (buffer or internal) at various (signed/unsigned) indices. Checks that the accesses conform to robust access (OOB reads only return bound memory, OOB writes don't write OOB). @@ -113,234 +123,233 @@ g.test('linear_memory') TODO: Test exprIndexAddon as constexpr. TODO: Test exprIndexAddon as pipeline-overridable constant expression. ` - ) - .params(u => - u - .combineWithParams([ - { addressSpace: 'storage', storageMode: 'read', access: 'read', dynamicOffset: false }, - { - addressSpace: 'storage', - storageMode: 'read_write', - access: 'read', - dynamicOffset: false, - }, - { - addressSpace: 'storage', - storageMode: 'read_write', - access: 'write', - dynamicOffset: false, - }, - { addressSpace: 'storage', storageMode: 'read', access: 'read', dynamicOffset: true }, - { addressSpace: 'storage', storageMode: 'read_write', access: 'read', dynamicOffset: true }, - { - addressSpace: 'storage', - storageMode: 'read_write', - access: 'write', - dynamicOffset: true, - }, - { addressSpace: 'uniform', access: 'read', dynamicOffset: false }, - { addressSpace: 'uniform', access: 'read', dynamicOffset: true }, - { addressSpace: 'private', access: 'read' }, - { addressSpace: 'private', access: 'write' }, - { addressSpace: 'function', access: 'read' }, - { addressSpace: 'function', access: 'write' }, - { addressSpace: 'workgroup', access: 'read' }, - { addressSpace: 'workgroup', access: 'write' }, - ]) - .combineWithParams([ - { containerType: 'array' }, - { containerType: 'matrix' }, - { containerType: 'vector' }, - ]) - .combineWithParams([ - { shadowingMode: 'none' }, - { shadowingMode: 'module-scope' }, - { shadowingMode: 'function-scope' }, - ]) - .expand('isAtomic', p => (supportsAtomics(p) ? [false, true] : [false])) - .beginSubcases() - .expand('baseType', supportedScalarTypes) - .expandWithParams(generateTypes) - ) - .fn(t => { - const { - addressSpace, - storageMode, - access, - dynamicOffset, - isAtomic, - containerType, - baseType, - type, - shadowingMode, - _kTypeInfo, - } = t.params; +). +params((u) => +u. +combineWithParams([ +{ addressSpace: 'storage', storageMode: 'read', access: 'read', dynamicOffset: false }, +{ + addressSpace: 'storage', + storageMode: 'read_write', + access: 'read', + dynamicOffset: false +}, +{ + addressSpace: 'storage', + storageMode: 'read_write', + access: 'write', + dynamicOffset: false +}, +{ addressSpace: 'storage', storageMode: 'read', access: 'read', dynamicOffset: true }, +{ addressSpace: 'storage', storageMode: 'read_write', access: 'read', dynamicOffset: true }, +{ + addressSpace: 'storage', + storageMode: 'read_write', + access: 'write', + dynamicOffset: true +}, +{ addressSpace: 'uniform', access: 'read', dynamicOffset: false }, +{ addressSpace: 'uniform', access: 'read', dynamicOffset: true }, +{ addressSpace: 'private', access: 'read' }, +{ addressSpace: 'private', access: 'write' }, +{ addressSpace: 'function', access: 'read' }, +{ addressSpace: 'function', access: 'write' }, +{ addressSpace: 'workgroup', access: 'read' }, +{ addressSpace: 'workgroup', access: 'write' }] +). +combineWithParams([ +{ containerType: 'array' }, +{ containerType: 'matrix' }, +{ containerType: 'vector' }] +). +combineWithParams([ +{ shadowingMode: 'none' }, +{ shadowingMode: 'module-scope' }, +{ shadowingMode: 'function-scope' }] +). +expand('isAtomic', (p) => supportsAtomics(p) ? [false, true] : [false]). +beginSubcases(). +expand('baseType', supportedScalarTypes). +expandWithParams(generateTypes) +). +fn(async (t) => { + const { + addressSpace, + storageMode, + access, + dynamicOffset, + isAtomic, + containerType, + baseType, + type, + shadowingMode, + _kTypeInfo + } = t.params; - assert(_kTypeInfo !== undefined, 'not an indexable type'); - assert('arrayLength' in _kTypeInfo); + assert(_kTypeInfo !== undefined, 'not an indexable type'); + assert('arrayLength' in _kTypeInfo); - let usesCanary = false; - let globalSource = ''; - let testFunctionSource = ''; - const testBufferSize = 512; - const bufferBindingOffset = 256; - /** Undefined if no buffer binding is needed */ - let bufferBindingSize = undefined; + let usesCanary = false; + let globalSource = ''; + let testFunctionSource = ''; + const testBufferSize = 512; + const bufferBindingOffset = 256; + /** Undefined if no buffer binding is needed */ + let bufferBindingSize = undefined; - // Declare the data that will be accessed to check robust access, as a buffer or a struct - // in the global scope or inside the test function itself. - const structDecl = ` + // Declare the data that will be accessed to check robust access, as a buffer or a struct + // in the global scope or inside the test function itself. + const structDecl = ` struct S { startCanary: array, data: ${type}, endCanary: array, };`; - const testGroupBGLEntires = []; - switch (addressSpace) { - case 'uniform': - case 'storage': - { - assert(_kTypeInfo.layout !== undefined); - const layout = _kTypeInfo.layout; - bufferBindingSize = align(layout.size, layout.alignment); - const qualifiers = addressSpace === 'storage' ? `storage, ${storageMode}` : addressSpace; - globalSource += ` + const testGroupBGLEntires = []; + switch (addressSpace) { + case 'uniform': + case 'storage': + { + assert(_kTypeInfo.layout !== undefined); + const layout = _kTypeInfo.layout; + bufferBindingSize = align(layout.size, layout.alignment); + const qualifiers = addressSpace === 'storage' ? `storage, ${storageMode}` : addressSpace; + globalSource += ` struct TestData { data: ${type}, }; @group(0) @binding(0) var<${qualifiers}> s: TestData;`; - testGroupBGLEntires.push({ - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { - type: - addressSpace === 'uniform' - ? 'uniform' - : storageMode === 'read' - ? 'read-only-storage' - : 'storage', - hasDynamicOffset: dynamicOffset, - }, - }); - } - break; + testGroupBGLEntires.push({ + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { + type: + addressSpace === 'uniform' ? + 'uniform' : + storageMode === 'read' ? + 'read-only-storage' : + 'storage', + hasDynamicOffset: dynamicOffset + } + }); + } + break; - case 'private': - case 'workgroup': - usesCanary = true; - globalSource += structDecl; - globalSource += `var<${addressSpace}> s: S;`; - break; + case 'private': + case 'workgroup': + usesCanary = true; + globalSource += structDecl; + globalSource += `var<${addressSpace}> s: S;`; + break; - case 'function': - usesCanary = true; - globalSource += structDecl; - testFunctionSource += 'var s: S;'; - break; - } + case 'function': + usesCanary = true; + globalSource += structDecl; + testFunctionSource += 'var s: S;'; + break; + } - // Build the test function that will do the tests. + // Build the test function that will do the tests. - // If we use a local canary declared in the shader, initialize it. - if (usesCanary) { - testFunctionSource += ` + // If we use a local canary declared in the shader, initialize it. + if (usesCanary) { + testFunctionSource += ` for (var i = 0u; i < 10u; i = i + 1u) { s.startCanary[i] = 0xFFFFFFFFu; s.endCanary[i] = 0xFFFFFFFFu; }`; - } + } - /** Returns a different number each time, kind of like a `__LINE__` to ID the failing check. */ - const nextErrorReturnValue = (() => { - let errorReturnValue = 0x1000; - return () => { - ++errorReturnValue; - return `0x${errorReturnValue.toString(16)}u`; - }; - })(); + /** Returns a different number each time, kind of like a `__LINE__` to ID the failing check. */ + const nextErrorReturnValue = (() => { + let errorReturnValue = 0x1000; + return () => { + ++errorReturnValue; + return `0x${errorReturnValue.toString(16)}u`; + }; + })(); - // This is here, instead of in subcases, so only a single shader is needed to test many modes. - for (const indexSigned of [false, true]) { - const indicesToTest = indexSigned - ? [ - // Exactly in bounds (should be OK) - '0', - `${_kTypeInfo.arrayLength} - 1`, - // Exactly out of bounds - '-1', - `${_kTypeInfo.arrayLength}`, - // Far out of bounds - '-1000000', - '1000000', - `${kMinI32}`, - `${kMaxI32}`, - ] - : [ - // Exactly in bounds (should be OK) - '0u', - `${_kTypeInfo.arrayLength}u - 1u`, - // Exactly out of bounds - `${_kTypeInfo.arrayLength}u`, - // Far out of bounds - '1000000u', - `${kMaxU32}u`, - `${kMaxI32}u`, - ]; + // This is here, instead of in subcases, so only a single shader is needed to test many modes. + for (const indexSigned of [false, true]) { + const indicesToTest = indexSigned ? + [ + // Exactly in bounds (should be OK) + '0', + `${_kTypeInfo.arrayLength} - 1`, + // Exactly out of bounds + '-1', + `${_kTypeInfo.arrayLength}`, + // Far out of bounds + '-1000000', + '1000000', + `${kMinI32}`, + `${kMaxI32}`] : - const indexTypeLiteral = indexSigned ? '0' : '0u'; - const indexTypeCast = indexSigned ? 'i32' : 'u32'; - for (const exprIndexAddon of [ - '', // No addon - ` + ${indexTypeLiteral}`, // Add a literal 0 - ` + ${indexTypeCast}(constants.zero)`, // Add a uniform 0 - ]) { - // Produce the accesses to the variable. - for (const indexToTest of indicesToTest) { - testFunctionSource += ` + [ + // Exactly in bounds (should be OK) + '0u', + `${_kTypeInfo.arrayLength}u - 1u`, + // Exactly out of bounds + `${_kTypeInfo.arrayLength}u`, + // Far out of bounds + '1000000u', + `${kMaxU32}u`, + `${kMaxI32}u`]; + + + const indexTypeLiteral = indexSigned ? '0' : '0u'; + const indexTypeCast = indexSigned ? 'i32' : 'u32'; + for (const exprIndexAddon of [ + '', // No addon + ` + ${indexTypeLiteral}`, // Add a literal 0 + ` + ${indexTypeCast}(constants.zero)` // Add a uniform 0 + ]) { + // Produce the accesses to the variable. + for (const indexToTest of indicesToTest) { + testFunctionSource += ` { let index = (${indexToTest})${exprIndexAddon};`; - const exprZeroElement = `${_kTypeInfo.elementBaseType}()`; - const exprElement = `s.data[index]`; + const exprZeroElement = `${_kTypeInfo.elementBaseType}()`; + const exprElement = `s.data[index]`; - switch (access) { - case 'read': - { - let exprLoadElement = isAtomic ? `atomicLoad(&${exprElement})` : exprElement; - if (addressSpace === 'uniform' && containerType === 'array') { - // Scalar types will be wrapped in a vec4 to satisfy array element size - // requirements for the uniform address space, so we need an additional index - // accessor expression. - exprLoadElement += '[0]'; - } - let condition = `${exprLoadElement} != ${exprZeroElement}`; - if (containerType === 'matrix') condition = `any(${condition})`; - testFunctionSource += ` + switch (access) { + case 'read': + { + let exprLoadElement = isAtomic ? `atomicLoad(&${exprElement})` : exprElement; + if (addressSpace === 'uniform' && containerType === 'array') { + // Scalar types will be wrapped in a vec4 to satisfy array element size + // requirements for the uniform address space, so we need an additional index + // accessor expression. + exprLoadElement += '[0]'; + } + let condition = `${exprLoadElement} != ${exprZeroElement}`; + if (containerType === 'matrix') condition = `any(${condition})`; + testFunctionSource += ` if (${condition}) { return ${nextErrorReturnValue()}; }`; - } - break; + } + break; - case 'write': - if (isAtomic) { - testFunctionSource += ` + case 'write': + if (isAtomic) { + testFunctionSource += ` atomicStore(&s.data[index], ${exprZeroElement});`; - } else { - testFunctionSource += ` + } else { + testFunctionSource += ` s.data[index] = ${exprZeroElement};`; - } - break; - } - - testFunctionSource += ` - }`; + } + break; } + testFunctionSource += ` + }`; } } + } - // Check that the canaries haven't been modified - if (usesCanary) { - testFunctionSource += ` + // Check that the canaries haven't been modified + if (usesCanary) { + testFunctionSource += ` for (var i = 0u; i < 10u; i = i + 1u) { if (s.startCanary[i] != 0xFFFFFFFFu) { return ${nextErrorReturnValue()}; @@ -349,42 +358,42 @@ struct TestData { return ${nextErrorReturnValue()}; } }`; - } + } - // Shadowing case declarations - let moduleScopeShadowDecls = ''; - let functionScopeShadowDecls = ''; + // Shadowing case declarations + let moduleScopeShadowDecls = ''; + let functionScopeShadowDecls = ''; - switch (shadowingMode) { - case 'module-scope': - // Shadow the builtins likely used by robustness as module-scope variables - moduleScopeShadowDecls = ` + switch (shadowingMode) { + case 'module-scope': + // Shadow the builtins likely used by robustness as module-scope variables + moduleScopeShadowDecls = ` var min = 0; var max = 0; var arrayLength = 0; `; - // Make sure that these are referenced by the function. - // This ensures that compilers don't strip away unused variables. - functionScopeShadowDecls = ` + // Make sure that these are referenced by the function. + // This ensures that compilers don't strip away unused variables. + functionScopeShadowDecls = ` _ = min; _ = max; _ = arrayLength; `; - break; - case 'function-scope': - // Shadow the builtins likely used by robustness as function-scope variables - functionScopeShadowDecls = ` + break; + case 'function-scope': + // Shadow the builtins likely used by robustness as function-scope variables + functionScopeShadowDecls = ` let min = 0; let max = 0; let arrayLength = 0; `; - break; - } + break; + } - // Run the test + // Run the test - // First aggregate the test source - const testSource = ` + // First aggregate the test source + const testSource = ` ${globalSource} ${moduleScopeShadowDecls} @@ -394,79 +403,78 @@ fn runTest() -> u32 { return 0u; }`; - const layout = t.device.createPipelineLayout({ - bindGroupLayouts: [ - t.device.createBindGroupLayout({ - entries: testGroupBGLEntires, - }), - t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { - type: 'uniform', - }, - }, - { - binding: 1, - visibility: GPUShaderStage.COMPUTE, - buffer: { - type: 'storage', - }, - }, - ], - }), - ], + const layout = t.device.createPipelineLayout({ + bindGroupLayouts: [ + t.device.createBindGroupLayout({ + entries: testGroupBGLEntires + }), + t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { + type: 'uniform' + } + }, + { + binding: 1, + visibility: GPUShaderStage.COMPUTE, + buffer: { + type: 'storage' + } + }] + + })] + + }); + + // Run it. + if (bufferBindingSize !== undefined && baseType !== 'bool') { + const expectedData = new ArrayBuffer(testBufferSize); + const bufferBindingEnd = bufferBindingOffset + bufferBindingSize; + testFillArrayBuffer(expectedData, baseType, { + zeroByteStart: bufferBindingOffset, + zeroByteCount: bufferBindingSize }); - // Run it. - if (bufferBindingSize !== undefined && baseType !== 'bool') { - const expectedData = new ArrayBuffer(testBufferSize); - const bufferBindingEnd = bufferBindingOffset + bufferBindingSize; - testFillArrayBuffer(expectedData, baseType, { - zeroByteStart: bufferBindingOffset, - zeroByteCount: bufferBindingSize, - }); + // Create a buffer that contains zeroes in the allowed access area, and 42s everywhere else. + const testBuffer = t.makeBufferWithContents( + new Uint8Array(expectedData), + GPUBufferUsage.COPY_SRC | + GPUBufferUsage.UNIFORM | + GPUBufferUsage.STORAGE | + GPUBufferUsage.COPY_DST + ); - // Create a buffer that contains zeroes in the allowed access area, and 42s everywhere else. - const testBuffer = t.makeBufferWithContents( - new Uint8Array(expectedData), - GPUBufferUsage.COPY_SRC | - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.COPY_DST - ); + // Run the shader, accessing the buffer. + await runShaderTest( + t, + GPUShaderStage.COMPUTE, + testSource, + layout, + [ + { + binding: 0, + resource: { + buffer: testBuffer, + offset: dynamicOffset ? 0 : bufferBindingOffset, + size: bufferBindingSize + } + }], - // Run the shader, accessing the buffer. - runShaderTest( - t, - GPUShaderStage.COMPUTE, - testSource, - layout, - [ - { - binding: 0, - resource: { - buffer: testBuffer, - offset: dynamicOffset ? 0 : bufferBindingOffset, - size: bufferBindingSize, - }, - }, - ], + dynamicOffset ? [bufferBindingOffset] : undefined + ); - dynamicOffset ? [bufferBindingOffset] : undefined - ); - - // Check that content of the buffer outside of the allowed area didn't change. - const expectedBytes = new Uint8Array(expectedData); - t.expectGPUBufferValuesEqual(testBuffer, expectedBytes.subarray(0, bufferBindingOffset), 0); - t.expectGPUBufferValuesEqual( - testBuffer, - expectedBytes.subarray(bufferBindingEnd, testBufferSize), - bufferBindingEnd - ); - } else { - runShaderTest(t, GPUShaderStage.COMPUTE, testSource, layout, []); - } - }); + // Check that content of the buffer outside of the allowed area didn't change. + const expectedBytes = new Uint8Array(expectedData); + t.expectGPUBufferValuesEqual(testBuffer, expectedBytes.subarray(0, bufferBindingOffset), 0); + t.expectGPUBufferValuesEqual( + testBuffer, + expectedBytes.subarray(bufferBindingEnd, testBufferSize), + bufferBindingEnd + ); + } else { + await runShaderTest(t, GPUShaderStage.COMPUTE, testSource, layout, []); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js index 527c69819a9..d6321790085 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Test vertex attributes behave correctly (no crash / data leak) when accessed out of bounds Test coverage: @@ -59,34 +59,51 @@ TODO: Currently firstInstance is not tested, as for drawIndexed it is CPU validated, and for drawIndirect and drawIndexedIndirect it should always be 0. Once there is an extension to allow making them non-zero, it should be added into drawCallTestParameter list. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert } from '../../../common/util/util.js'; import { GPUTest, TextureTestMixin } from '../../gpu_test.js'; // Encapsulates a draw call (either indexed or non-indexed) class DrawCall { + + + // Add a float offset when binding vertex buffer + // Keep instance step mode vertex buffer in range, in order to test vertex step // mode buffer OOB in drawIndexed. Setting true will suppress partialLastNumber // and offsetVertexBuffer for instance step mode vertex buffer. + // Draw + + // DrawIndexed // For generating index buffer in drawIndexed and drawIndexedIndirect // For accessing index buffer in drawIndexed and drawIndexedIndirect + + // Both Draw and DrawIndexed + + constructor({ test, vertexArrays, vertexCount, partialLastNumber, offsetVertexBuffer, - keepInstanceStepModeBufferInRange, + keepInstanceStepModeBufferInRange + + + + + + + }) { this.test = test; @@ -195,7 +212,7 @@ class DrawCall { } const buffer = this.test.device.createBuffer({ size, - usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST, // Ensure that buffer can be used by writeBuffer + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST // Ensure that buffer can be used by writeBuffer }); this.test.device.queue.writeBuffer(buffer, 0, vertexArray.slice(0, length)); return buffer; @@ -204,57 +221,66 @@ class DrawCall { // Create an indirect buffer containing draw call values generateIndirectBuffer() { const indirectArray = new Int32Array([ - this.vertexCount, - this.instanceCount, - this.firstVertex, - this.firstInstance, - ]); - + this.vertexCount, + this.instanceCount, + this.firstVertex, + this.firstInstance] + ); return this.test.makeBufferWithContents(indirectArray, GPUBufferUsage.INDIRECT); } // Create an indirect buffer containing indexed draw call values generateIndexedIndirectBuffer() { const indirectArray = new Int32Array([ - this.indexCount, - this.instanceCount, - this.firstIndex, - this.baseVertex, - this.firstInstance, - ]); - + this.indexCount, + this.instanceCount, + this.firstIndex, + this.baseVertex, + this.firstInstance] + ); return this.test.makeBufferWithContents(indirectArray, GPUBufferUsage.INDIRECT); } } // Parameterize different sized types + + + + + const typeInfoMap = { float32: { wgslType: 'f32', sizeInBytes: 4, - validationFunc: 'return valid(v);', + validationFunc: 'return valid(v);' }, float32x2: { wgslType: 'vec2', sizeInBytes: 8, - validationFunc: 'return valid(v.x) && valid(v.y);', + validationFunc: 'return valid(v.x) && valid(v.y);' }, float32x3: { wgslType: 'vec3', sizeInBytes: 12, - validationFunc: 'return valid(v.x) && valid(v.y) && valid(v.z);', + validationFunc: 'return valid(v.x) && valid(v.y) && valid(v.z);' }, float32x4: { wgslType: 'vec4', sizeInBytes: 16, validationFunc: `return (valid(v.x) && valid(v.y) && valid(v.z) && valid(v.w)) || - (v.x == 0.0 && v.y == 0.0 && v.z == 0.0 && (v.w == 0.0 || v.w == 1.0));`, - }, + (v.x == 0.0 && v.y == 0.0 && v.z == 0.0 && (v.w == 0.0 || v.w == 1.0));` + } }; class F extends TextureTestMixin(GPUTest) { - generateBufferContents(numVertices, attributesPerBuffer, typeInfo, arbitraryValues, bufferCount) { + generateBufferContents( + numVertices, + attributesPerBuffer, + typeInfo, + arbitraryValues, + bufferCount) + { // Make an array big enough for the vertices, attributes, and size of each element const vertexArray = new Float32Array( numVertices * attributesPerBuffer * (typeInfo.sizeInBytes / 4) @@ -274,7 +300,11 @@ class F extends TextureTestMixin(GPUTest) { return bufferContents; } - generateVertexBufferDescriptors(bufferCount, attributesPerBuffer, format) { + generateVertexBufferDescriptors( + bufferCount, + attributesPerBuffer, + format) + { const typeInfo = typeInfoMap[format]; // Vertex buffer descriptors const buffers = []; @@ -284,13 +314,13 @@ class F extends TextureTestMixin(GPUTest) { buffers.push({ arrayStride: attributesPerBuffer * typeInfo.sizeInBytes, stepMode: i === 0 ? 'instance' : 'vertex', - attributes: Array(attributesPerBuffer) - .fill(0) - .map((_, i) => ({ - shaderLocation: currAttribute++, - offset: i * typeInfo.sizeInBytes, - format, - })), + attributes: Array(attributesPerBuffer). + fill(0). + map((_, i) => ({ + shaderLocation: currAttribute++, + offset: i * typeInfo.sizeInBytes, + format + })) }); } } @@ -304,7 +334,15 @@ class F extends TextureTestMixin(GPUTest) { typeInfo, vertexIndexOffset, numVertices, - isIndexed, + isIndexed + + + + + + + + }) { // Create layout and attributes listing let layoutStr = 'struct Attributes {'; @@ -325,7 +363,7 @@ class F extends TextureTestMixin(GPUTest) { ${layoutStr} fn valid(f : f32) -> bool { - return ${validValues.map(v => `f == ${v}.0`).join(' || ')}; + return ${validValues.map((v) => `f == ${v}.0`).join(' || ')}; } fn validationFunc(v : ${typeInfo.wgslType}) -> bool { @@ -336,9 +374,9 @@ class F extends TextureTestMixin(GPUTest) { @builtin(vertex_index) VertexIndex : u32, attributes : Attributes ) -> @builtin(position) vec4 { - var attributesInBounds = ${attributeNames - .map(a => `validationFunc(attributes.${a})`) - .join(' && ')}; + var attributesInBounds = ${attributeNames. + map((a) => `validationFunc(attributes.${a})`). + join(' && ')}; var indexInBoundsCountFromBaseVertex = (VertexIndex >= ${vertexIndexOffset}u && @@ -366,7 +404,16 @@ class F extends TextureTestMixin(GPUTest) { vertexIndexOffset, numVertices, isIndexed, - buffers, + buffers + + + + + + + + + }) { const pipeline = this.device.createRenderPipeline({ layout: 'auto', @@ -379,23 +426,23 @@ class F extends TextureTestMixin(GPUTest) { typeInfo, vertexIndexOffset, numVertices, - isIndexed, - }), + isIndexed + }) }), entryPoint: 'main', - buffers, + buffers }, fragment: { module: this.device.createShaderModule({ code: ` @fragment fn main() -> @location(0) vec4 { return vec4(1.0, 0.0, 0.0, 1.0); - }`, + }` }), entryPoint: 'main', - targets: [{ format: 'rgba8unorm' }], + targets: [{ format: 'rgba8unorm' }] }, - primitive: { topology: 'point-list' }, + primitive: { topology: 'point-list' } }); return pipeline; } @@ -409,7 +456,17 @@ class F extends TextureTestMixin(GPUTest) { numVertices, isIndexed, isIndirect, - drawCall, + drawCall + + + + + + + + + + }) { // Vertex buffer descriptors const buffers = this.generateVertexBufferDescriptors( @@ -427,26 +484,26 @@ class F extends TextureTestMixin(GPUTest) { vertexIndexOffset, numVertices, isIndexed, - buffers, + buffers }); const colorAttachment = this.device.createTexture({ format: 'rgba8unorm', size: { width: 2, height: 1, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const colorAttachmentView = colorAttachment.createView(); const encoder = this.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachmentView, - storeOp: 'store', - clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - }, - ], + { + view: colorAttachmentView, + storeOp: 'store', + clearValue: { r: 0.0, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear' + }] + }); pass.setPipeline(pipeline); @@ -458,93 +515,93 @@ class F extends TextureTestMixin(GPUTest) { // Validate we see green on the left pixel, showing that no failure case is detected this.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ - { coord: { x: 0, y: 0 }, exp: new Uint8Array([0x00, 0xff, 0x00, 0xff]) }, - ]); + { coord: { x: 0, y: 0 }, exp: new Uint8Array([0x00, 0xff, 0x00, 0xff]) }] + ); } } export const g = makeTestGroup(F); -g.test('vertex_buffer_access') - .params( - u => - u - .combineWithParams([ - { indexed: false, indirect: true }, - { indexed: true, indirect: false }, - { indexed: true, indirect: true }, - ]) - .expand('drawCallTestParameter', function* (p) { - if (p.indexed) { - yield* ['baseVertex', 'vertexCountInIndexBuffer']; - if (p.indirect) { - yield* ['indexCount', 'instanceCount', 'firstIndex']; - } - } else if (p.indirect) { - yield* ['vertexCount', 'instanceCount', 'firstVertex']; - } - }) - .combine('type', Object.keys(typeInfoMap)) - .combine('additionalBuffers', [0, 4]) - .combine('partialLastNumber', [false, true]) - .combine('offsetVertexBuffer', [false, true]) - .combine('errorScale', [0, 1, 4, 10 ** 2, 10 ** 4, 10 ** 6]) - .unless(p => p.drawCallTestParameter === 'instanceCount' && p.errorScale > 10 ** 4) // To avoid timeout - ) - .fn(t => { - const p = t.params; - const typeInfo = typeInfoMap[p.type]; - - // Number of vertices to draw - const numVertices = 4; - // Each buffer is bound to this many attributes (2 would mean 2 attributes per buffer) - const attributesPerBuffer = 2; - // Some arbitrary values to fill our buffer with to avoid collisions with other tests - const arbitraryValues = [990, 685, 446, 175]; - - // A valid value is 0 or one in the buffer - const validValues = - p.errorScale === 0 && !p.offsetVertexBuffer && !p.partialLastNumber - ? arbitraryValues // Control case with no OOB access, must read back valid values in buffer - : [0, ...arbitraryValues]; // Testing case with OOB access, can be 0 for OOB data - - // Generate vertex buffer contents. Only the first buffer is instance step mode, all others are vertex step mode - const bufferCount = p.additionalBuffers + 2; // At least one instance step mode and one vertex step mode buffer - const bufferContents = t.generateBufferContents( - numVertices, - attributesPerBuffer, - typeInfo, - arbitraryValues, - bufferCount - ); - - // Mutable draw call - const draw = new DrawCall({ - test: t, - vertexArrays: bufferContents, - vertexCount: numVertices, - partialLastNumber: p.partialLastNumber, - offsetVertexBuffer: p.offsetVertexBuffer, - keepInstanceStepModeBufferInRange: p.indexed && !p.indirect, // keep instance step mode buffer in range for drawIndexed - }); - - // Offset the draw call parameter we are testing by |errorScale| - draw[p.drawCallTestParameter] += p.errorScale; - // Offset the range checks for gl_VertexIndex in the shader if we use BaseVertex - let vertexIndexOffset = 0; - if (p.drawCallTestParameter === 'baseVertex') { - vertexIndexOffset += p.errorScale; +g.test('vertex_buffer_access'). +params( + (u) => + u. + combineWithParams([ + { indexed: false, indirect: true }, + { indexed: true, indirect: false }, + { indexed: true, indirect: true }] + ). + expand('drawCallTestParameter', function* (p) { + if (p.indexed) { + yield* ['baseVertex', 'vertexCountInIndexBuffer']; + if (p.indirect) { + yield* ['indexCount', 'instanceCount', 'firstIndex']; + } + } else if (p.indirect) { + yield* ['vertexCount', 'instanceCount', 'firstVertex']; } + }). + combine('type', Object.keys(typeInfoMap)). + combine('additionalBuffers', [0, 4]). + combine('partialLastNumber', [false, true]). + combine('offsetVertexBuffer', [false, true]). + combine('errorScale', [0, 1, 4, 10 ** 2, 10 ** 4, 10 ** 6]). + unless((p) => p.drawCallTestParameter === 'instanceCount' && p.errorScale > 10 ** 4) // To avoid timeout +). +fn((t) => { + const p = t.params; + const typeInfo = typeInfoMap[p.type]; - t.doTest({ - bufferCount, - attributesPerBuffer, - dataType: p.type, - validValues, - vertexIndexOffset, - numVertices, - isIndexed: p.indexed, - isIndirect: p.indirect, - drawCall: draw, - }); + // Number of vertices to draw + const numVertices = 4; + // Each buffer is bound to this many attributes (2 would mean 2 attributes per buffer) + const attributesPerBuffer = 2; + // Some arbitrary values to fill our buffer with to avoid collisions with other tests + const arbitraryValues = [990, 685, 446, 175]; + + // A valid value is 0 or one in the buffer + const validValues = + p.errorScale === 0 && !p.offsetVertexBuffer && !p.partialLastNumber ? + arbitraryValues // Control case with no OOB access, must read back valid values in buffer + : [0, ...arbitraryValues]; // Testing case with OOB access, can be 0 for OOB data + + // Generate vertex buffer contents. Only the first buffer is instance step mode, all others are vertex step mode + const bufferCount = p.additionalBuffers + 2; // At least one instance step mode and one vertex step mode buffer + const bufferContents = t.generateBufferContents( + numVertices, + attributesPerBuffer, + typeInfo, + arbitraryValues, + bufferCount + ); + + // Mutable draw call + const draw = new DrawCall({ + test: t, + vertexArrays: bufferContents, + vertexCount: numVertices, + partialLastNumber: p.partialLastNumber, + offsetVertexBuffer: p.offsetVertexBuffer, + keepInstanceStepModeBufferInRange: p.indexed && !p.indirect // keep instance step mode buffer in range for drawIndexed }); + + // Offset the draw call parameter we are testing by |errorScale| + draw[p.drawCallTestParameter] += p.errorScale; + // Offset the range checks for gl_VertexIndex in the shader if we use BaseVertex + let vertexIndexOffset = 0; + if (p.drawCallTestParameter === 'baseVertex') { + vertexIndexOffset += p.errorScale; + } + + t.doTest({ + bufferCount, + attributesPerBuffer, + dataType: p.type, + validValues, + vertexIndexOffset, + numVertices, + isIndexed: p.indexed, + isIndirect: p.indirect, + drawCall: draw + }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/compute_builtins.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/compute_builtins.spec.js index 01700647a19..68eebacc05f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/compute_builtins.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/compute_builtins.spec.js @@ -1,104 +1,103 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Test compute shader builtin variables`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Test compute shader builtin variables`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { iterRange } from '../../../../common/util/util.js'; import { GPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(GPUTest); // Test that the values for each input builtin are correct. -g.test('inputs') - .desc(`Test compute shader builtin inputs values`) - .params(u => - u - .combine('method', ['param', 'struct', 'mixed']) - .combine('dispatch', ['direct', 'indirect']) - .combineWithParams([ - { - groupSize: { x: 1, y: 1, z: 1 }, - numGroups: { x: 1, y: 1, z: 1 }, - }, - { - groupSize: { x: 8, y: 4, z: 2 }, - numGroups: { x: 1, y: 1, z: 1 }, - }, - { - groupSize: { x: 1, y: 1, z: 1 }, - numGroups: { x: 8, y: 4, z: 2 }, - }, - { - groupSize: { x: 3, y: 7, z: 5 }, - numGroups: { x: 13, y: 9, z: 11 }, - }, - ]) - .beginSubcases() - ) - .fn(t => { - const invocationsPerGroup = t.params.groupSize.x * t.params.groupSize.y * t.params.groupSize.z; - const totalInvocations = - invocationsPerGroup * t.params.numGroups.x * t.params.numGroups.y * t.params.numGroups.z; +g.test('inputs'). +desc(`Test compute shader builtin inputs values`). +params((u) => +u. +combine('method', ['param', 'struct', 'mixed']). +combine('dispatch', ['direct', 'indirect']). +combineWithParams([ +{ + groupSize: { x: 1, y: 1, z: 1 }, + numGroups: { x: 1, y: 1, z: 1 } +}, +{ + groupSize: { x: 8, y: 4, z: 2 }, + numGroups: { x: 1, y: 1, z: 1 } +}, +{ + groupSize: { x: 1, y: 1, z: 1 }, + numGroups: { x: 8, y: 4, z: 2 } +}, +{ + groupSize: { x: 3, y: 7, z: 5 }, + numGroups: { x: 13, y: 9, z: 11 } +}] +). +beginSubcases() +). +fn((t) => { + const invocationsPerGroup = t.params.groupSize.x * t.params.groupSize.y * t.params.groupSize.z; + const totalInvocations = + invocationsPerGroup * t.params.numGroups.x * t.params.numGroups.y * t.params.numGroups.z; - // Generate the structures, parameters, and builtin expressions used in the shader. - let params = ''; - let structures = ''; - let local_id = ''; - let local_index = ''; - let global_id = ''; - let group_id = ''; - let num_groups = ''; - switch (t.params.method) { - case 'param': - params = ` + // Generate the structures, parameters, and builtin expressions used in the shader. + let params = ''; + let structures = ''; + let local_id = ''; + let local_index = ''; + let global_id = ''; + let group_id = ''; + let num_groups = ''; + switch (t.params.method) { + case 'param': + params = ` @builtin(local_invocation_id) local_id : vec3, @builtin(local_invocation_index) local_index : u32, @builtin(global_invocation_id) global_id : vec3, @builtin(workgroup_id) group_id : vec3, @builtin(num_workgroups) num_groups : vec3, `; - local_id = 'local_id'; - local_index = 'local_index'; - global_id = 'global_id'; - group_id = 'group_id'; - num_groups = 'num_groups'; - break; - case 'struct': - structures = `struct Inputs { + local_id = 'local_id'; + local_index = 'local_index'; + global_id = 'global_id'; + group_id = 'group_id'; + num_groups = 'num_groups'; + break; + case 'struct': + structures = `struct Inputs { @builtin(local_invocation_id) local_id : vec3, @builtin(local_invocation_index) local_index : u32, @builtin(global_invocation_id) global_id : vec3, @builtin(workgroup_id) group_id : vec3, @builtin(num_workgroups) num_groups : vec3, };`; - params = `inputs : Inputs`; - local_id = 'inputs.local_id'; - local_index = 'inputs.local_index'; - global_id = 'inputs.global_id'; - group_id = 'inputs.group_id'; - num_groups = 'inputs.num_groups'; - break; - case 'mixed': - structures = `struct InputsA { + params = `inputs : Inputs`; + local_id = 'inputs.local_id'; + local_index = 'inputs.local_index'; + global_id = 'inputs.global_id'; + group_id = 'inputs.group_id'; + num_groups = 'inputs.num_groups'; + break; + case 'mixed': + structures = `struct InputsA { @builtin(local_invocation_index) local_index : u32, @builtin(global_invocation_id) global_id : vec3, }; struct InputsB { @builtin(workgroup_id) group_id : vec3 };`; - params = `@builtin(local_invocation_id) local_id : vec3, + params = `@builtin(local_invocation_id) local_id : vec3, inputsA : InputsA, inputsB : InputsB, @builtin(num_workgroups) num_groups : vec3,`; - local_id = 'local_id'; - local_index = 'inputsA.local_index'; - global_id = 'inputsA.global_id'; - group_id = 'inputsB.group_id'; - num_groups = 'num_groups'; - break; - } + local_id = 'local_id'; + local_index = 'inputsA.local_index'; + global_id = 'inputsA.global_id'; + group_id = 'inputsB.group_id'; + num_groups = 'num_groups'; + break; + } - // WGSL shader that stores every builtin value to a buffer, for every invocation in the grid. - const wgsl = ` + // WGSL shader that stores every builtin value to a buffer, for every invocation in the grid. + const wgsl = ` struct S { data : array }; @@ -131,61 +130,61 @@ g.test('inputs') } `; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ - code: wgsl, - }), - entryPoint: 'main', - }, - }); - - // Helper to create a `size`-byte buffer with binding number `binding`. - function createBuffer(size, binding) { - const buffer = t.device.createBuffer({ - size, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(buffer); - - bindGroupEntries.push({ - binding, - resource: { - buffer, - }, - }); - - return buffer; + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: wgsl + }), + entryPoint: 'main' } + }); - // Create the output buffers. - const bindGroupEntries = []; - const localIdBuffer = createBuffer(totalInvocations * 16, 0); - const localIndexBuffer = createBuffer(totalInvocations * 4, 1); - const globalIdBuffer = createBuffer(totalInvocations * 16, 2); - const groupIdBuffer = createBuffer(totalInvocations * 16, 3); - const numGroupsBuffer = createBuffer(totalInvocations * 16, 4); + // Helper to create a `size`-byte buffer with binding number `binding`. + function createBuffer(size, binding) { + const buffer = t.device.createBuffer({ + size, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(buffer); - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: bindGroupEntries, + bindGroupEntries.push({ + binding, + resource: { + buffer + } }); - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - switch (t.params.dispatch) { - case 'direct': - pass.dispatchWorkgroups(t.params.numGroups.x, t.params.numGroups.y, t.params.numGroups.z); - break; - case 'indirect': { + return buffer; + } + + // Create the output buffers. + const bindGroupEntries = []; + const localIdBuffer = createBuffer(totalInvocations * 16, 0); + const localIndexBuffer = createBuffer(totalInvocations * 4, 1); + const globalIdBuffer = createBuffer(totalInvocations * 16, 2); + const groupIdBuffer = createBuffer(totalInvocations * 16, 3); + const numGroupsBuffer = createBuffer(totalInvocations * 16, 4); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: bindGroupEntries + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + switch (t.params.dispatch) { + case 'direct': + pass.dispatchWorkgroups(t.params.numGroups.x, t.params.numGroups.y, t.params.numGroups.z); + break; + case 'indirect':{ const dispatchBuffer = t.device.createBuffer({ size: 3 * Uint32Array.BYTES_PER_ELEMENT, usage: GPUBufferUsage.INDIRECT, - mappedAtCreation: true, + mappedAtCreation: true }); t.trackForCleanup(dispatchBuffer); const dispatchData = new Uint32Array(dispatchBuffer.getMappedRange()); @@ -196,99 +195,103 @@ g.test('inputs') pass.dispatchWorkgroupsIndirect(dispatchBuffer, 0); break; } - } + } + pass.end(); + t.queue.submit([encoder.finish()]); - pass.end(); - t.queue.submit([encoder.finish()]); - // Helper to check that the vec3 value at each index of the provided `output` buffer - // matches the expected value for that invocation, as generated by the `getBuiltinValue` - // function. The `name` parameter is the builtin name, used for error messages. - const checkEachIndex = (output, name, getBuiltinValue) => { - // Loop over workgroups. - for (let gz = 0; gz < t.params.numGroups.z; gz++) { - for (let gy = 0; gy < t.params.numGroups.y; gy++) { - for (let gx = 0; gx < t.params.numGroups.x; gx++) { - // Loop over invocations within a group. - for (let lz = 0; lz < t.params.groupSize.z; lz++) { - for (let ly = 0; ly < t.params.groupSize.y; ly++) { - for (let lx = 0; lx < t.params.groupSize.x; lx++) { - const groupIndex = (gz * t.params.numGroups.y + gy) * t.params.numGroups.x + gx; - const localIndex = (lz * t.params.groupSize.y + ly) * t.params.groupSize.x + lx; - const globalIndex = groupIndex * invocationsPerGroup + localIndex; - const expected = getBuiltinValue( - { x: gx, y: gy, z: gz }, - { x: lx, y: ly, z: lz } + + // Helper to check that the vec3 value at each index of the provided `output` buffer + // matches the expected value for that invocation, as generated by the `getBuiltinValue` + // function. The `name` parameter is the builtin name, used for error messages. + const checkEachIndex = ( + output, + name, + getBuiltinValue) => + { + // Loop over workgroups. + for (let gz = 0; gz < t.params.numGroups.z; gz++) { + for (let gy = 0; gy < t.params.numGroups.y; gy++) { + for (let gx = 0; gx < t.params.numGroups.x; gx++) { + // Loop over invocations within a group. + for (let lz = 0; lz < t.params.groupSize.z; lz++) { + for (let ly = 0; ly < t.params.groupSize.y; ly++) { + for (let lx = 0; lx < t.params.groupSize.x; lx++) { + const groupIndex = (gz * t.params.numGroups.y + gy) * t.params.numGroups.x + gx; + const localIndex = (lz * t.params.groupSize.y + ly) * t.params.groupSize.x + lx; + const globalIndex = groupIndex * invocationsPerGroup + localIndex; + const expected = getBuiltinValue( + { x: gx, y: gy, z: gz }, + { x: lx, y: ly, z: lz } + ); + if (output[globalIndex * 4 + 0] !== expected.x) { + return new Error( + `${name}.x failed at group(${gx},${gy},${gz}) local(${lx},${ly},${lz}))\n` + + ` expected: ${expected.x}\n` + + ` got: ${output[globalIndex * 4 + 0]}` + ); + } + if (output[globalIndex * 4 + 1] !== expected.y) { + return new Error( + `${name}.y failed at group(${gx},${gy},${gz}) local(${lx},${ly},${lz}))\n` + + ` expected: ${expected.y}\n` + + ` got: ${output[globalIndex * 4 + 1]}` + ); + } + if (output[globalIndex * 4 + 2] !== expected.z) { + return new Error( + `${name}.z failed at group(${gx},${gy},${gz}) local(${lx},${ly},${lz}))\n` + + ` expected: ${expected.z}\n` + + ` got: ${output[globalIndex * 4 + 2]}` ); - - if (output[globalIndex * 4 + 0] !== expected.x) { - return new Error( - `${name}.x failed at group(${gx},${gy},${gz}) local(${lx},${ly},${lz}))\n` + - ` expected: ${expected.x}\n` + - ` got: ${output[globalIndex * 4 + 0]}` - ); - } - if (output[globalIndex * 4 + 1] !== expected.y) { - return new Error( - `${name}.y failed at group(${gx},${gy},${gz}) local(${lx},${ly},${lz}))\n` + - ` expected: ${expected.y}\n` + - ` got: ${output[globalIndex * 4 + 1]}` - ); - } - if (output[globalIndex * 4 + 2] !== expected.z) { - return new Error( - `${name}.z failed at group(${gx},${gy},${gz}) local(${lx},${ly},${lz}))\n` + - ` expected: ${expected.z}\n` + - ` got: ${output[globalIndex * 4 + 2]}` - ); - } } } } } } } - return undefined; + } + return undefined; + }; + + // Check @builtin(local_invocation_index) values. + t.expectGPUBufferValuesEqual( + localIndexBuffer, + new Uint32Array([...iterRange(totalInvocations, (x) => x % invocationsPerGroup)]) + ); + + // Check @builtin(local_invocation_id) values. + t.expectGPUBufferValuesPassCheck( + localIdBuffer, + (outputData) => checkEachIndex(outputData, 'local_invocation_id', (_, localId) => localId), + { type: Uint32Array, typedLength: totalInvocations * 4 } + ); + + // Check @builtin(global_invocation_id) values. + const getGlobalId = (groupId, localId) => { + return { + x: groupId.x * t.params.groupSize.x + localId.x, + y: groupId.y * t.params.groupSize.y + localId.y, + z: groupId.z * t.params.groupSize.z + localId.z }; + }; + t.expectGPUBufferValuesPassCheck( + globalIdBuffer, + (outputData) => checkEachIndex(outputData, 'global_invocation_id', getGlobalId), + { type: Uint32Array, typedLength: totalInvocations * 4 } + ); - // Check @builtin(local_invocation_index) values. - t.expectGPUBufferValuesEqual( - localIndexBuffer, - new Uint32Array([...iterRange(totalInvocations, x => x % invocationsPerGroup)]) - ); + // Check @builtin(workgroup_id) values. + t.expectGPUBufferValuesPassCheck( + groupIdBuffer, + (outputData) => checkEachIndex(outputData, 'workgroup_id', (groupId, _) => groupId), + { type: Uint32Array, typedLength: totalInvocations * 4 } + ); - // Check @builtin(local_invocation_id) values. - t.expectGPUBufferValuesPassCheck( - localIdBuffer, - outputData => checkEachIndex(outputData, 'local_invocation_id', (_, localId) => localId), - { type: Uint32Array, typedLength: totalInvocations * 4 } - ); - - // Check @builtin(global_invocation_id) values. - const getGlobalId = (groupId, localId) => { - return { - x: groupId.x * t.params.groupSize.x + localId.x, - y: groupId.y * t.params.groupSize.y + localId.y, - z: groupId.z * t.params.groupSize.z + localId.z, - }; - }; - t.expectGPUBufferValuesPassCheck( - globalIdBuffer, - outputData => checkEachIndex(outputData, 'global_invocation_id', getGlobalId), - { type: Uint32Array, typedLength: totalInvocations * 4 } - ); - - // Check @builtin(workgroup_id) values. - t.expectGPUBufferValuesPassCheck( - groupIdBuffer, - outputData => checkEachIndex(outputData, 'workgroup_id', (groupId, _) => groupId), - { type: Uint32Array, typedLength: totalInvocations * 4 } - ); - - // Check @builtin(num_workgroups) values. - t.expectGPUBufferValuesPassCheck( - numGroupsBuffer, - outputData => checkEachIndex(outputData, 'num_workgroups', () => t.params.numGroups), - { type: Uint32Array, typedLength: totalInvocations * 4 } - ); - }); + // Check @builtin(num_workgroups) values. + t.expectGPUBufferValuesPassCheck( + numGroupsBuffer, + (outputData) => checkEachIndex(outputData, 'num_workgroups', () => t.params.numGroups), + { type: Uint32Array, typedLength: totalInvocations * 4 } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/fragment_builtins.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/fragment_builtins.spec.js new file mode 100644 index 00000000000..b7372745597 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/fragment_builtins.spec.js @@ -0,0 +1,781 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Test fragment shader builtin variables and inter-stage variables + +* test builtin(position) +* test interpolation + +The current tests draw a single triangle with clip space coordinates [1, 1], [-3, 1], [1, -3]. +This means they render to all pixels in the textures. To fully test centroid interpolation +probably requires drawing various triangles that only cover certain samples. That is TBD. + +TODO: +* test sample interpolation +* test centroid interpolation +* test front_facing +* test sample_index +* test frag_depth +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { ErrorWithExtra, assert, range, unreachable } from '../../../../common/util/util.js'; + +import { GPUTest } from '../../../gpu_test.js'; +import { getMultisampleFragmentOffsets } from '../../../multisample_info.js'; +import { dotProduct, subtractVectors } from '../../../util/math.js'; +import { TexelView } from '../../../util/texture/texel_view.js'; +import { findFailedPixels } from '../../../util/texture/texture_ok.js'; + +export const g = makeTestGroup(GPUTest); + +const s_deviceToPipelineMap = new WeakMap( + + + + + +); + +/** + * Returns an object of pipelines associated + * by weakmap to a device so we can cache pipelines. + */ +function getPipelinesForDevice(device) { + let pipelines = s_deviceToPipelineMap.get(device); + if (!pipelines) { + pipelines = {}; + s_deviceToPipelineMap.set(device, pipelines); + } + return pipelines; +} + +/** + * Gets a compute pipeline that will copy the given texture if passed + * a dispatch size of texture.width, texture.height + * @param device a device + * @param texture texture the pipeline is needed for. + * @returns A GPUComputePipeline + */ +function getCopyMultisamplePipelineForDevice(device, textures) { + assert(textures.length === 4); + assert(textures[0].sampleCount === textures[1].sampleCount); + assert(textures[0].sampleCount === textures[2].sampleCount); + assert(textures[0].sampleCount === textures[3].sampleCount); + + const pipelineType = textures[0].sampleCount > 1 ? 'texture_multisampled_2d' : 'texture_2d'; + const pipelines = getPipelinesForDevice(device); + let pipeline = pipelines[pipelineType]; + if (!pipeline) { + const isMultisampled = pipelineType === 'texture_multisampled_2d'; + const numSamples = isMultisampled ? 'textureNumSamples(texture0)' : '1u'; + const sampleIndex = isMultisampled ? 'sampleIndex' : '0'; + const module = device.createShaderModule({ + code: ` + @group(0) @binding(0) var texture0: ${pipelineType}; + @group(0) @binding(1) var texture1: ${pipelineType}; + @group(0) @binding(2) var texture2: ${pipelineType}; + @group(0) @binding(3) var texture3: ${pipelineType}; + @group(0) @binding(4) var buffer: array; + + @compute @workgroup_size(1) fn cs(@builtin(global_invocation_id) id: vec3u) { + let numSamples = ${numSamples}; + let dimensions = textureDimensions(texture0); + let sampleIndex = id.x % numSamples; + let tx = id.x / numSamples; + let offset = ((id.y * dimensions.x + tx) * numSamples + sampleIndex) * 4; + let r = vec4u(textureLoad(texture0, vec2u(tx, id.y), ${sampleIndex}) * 255.0); + let g = vec4u(textureLoad(texture1, vec2u(tx, id.y), ${sampleIndex}) * 255.0); + let b = vec4u(textureLoad(texture2, vec2u(tx, id.y), ${sampleIndex}) * 255.0); + let a = vec4u(textureLoad(texture3, vec2u(tx, id.y), ${sampleIndex}) * 255.0); + + // expand rgba8unorm values back to their byte form, add them together + // and cast them to an f32 so we can recover the f32 values we encoded + // in the rgba8unorm texture. + buffer[offset + 0] = bitcast(dot(r, vec4u(0x1000000, 0x10000, 0x100, 0x1))); + buffer[offset + 1] = bitcast(dot(g, vec4u(0x1000000, 0x10000, 0x100, 0x1))); + buffer[offset + 2] = bitcast(dot(b, vec4u(0x1000000, 0x10000, 0x100, 0x1))); + buffer[offset + 3] = bitcast(dot(a, vec4u(0x1000000, 0x10000, 0x100, 0x1))); + } + ` + }); + + pipeline = device.createComputePipeline({ + label: 'copy multisampled texture pipeline', + layout: 'auto', + compute: { + module, + entryPoint: 'cs' + } + }); + + pipelines[pipelineType] = pipeline; + } + return pipeline; +} + +function isTextureSameDimensions(a, b) { + return ( + a.sampleCount === b.sampleCount && + a.width === b.width && + a.height === b.height && + a.depthOrArrayLayers === b.depthOrArrayLayers); + +} + +/** + * Copies a texture (even if multisampled) to a buffer + * @param t a gpu test + * @param texture texture to copy + * @returns buffer with copy of texture, mip level 0, array layer 0. + */ +function copyRGBA8EncodedFloatTexturesToBufferIncludingMultisampledTextures( +t, +textures) +{ + assert(textures.length === 4); + assert(isTextureSameDimensions(textures[0], textures[1])); + assert(isTextureSameDimensions(textures[0], textures[2])); + assert(isTextureSameDimensions(textures[0], textures[3])); + const { width, height, sampleCount } = textures[0]; + + const copyBuffer = t.device.createBuffer({ + size: width * height * sampleCount * 4 * 4, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(copyBuffer); + + const buffer = t.device.createBuffer({ + size: copyBuffer.size, + usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(buffer); + + const pipeline = getCopyMultisamplePipelineForDevice(t.device, textures); + const encoder = t.device.createCommandEncoder(); + + const textureEntries = textures.map( + (texture, i) => ({ binding: i, resource: texture.createView() }) + ); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [...textureEntries, { binding: 4, resource: { buffer: copyBuffer } }] + }); + + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(width * sampleCount, height); + pass.end(); + + encoder.copyBufferToBuffer(copyBuffer, 0, buffer, 0, buffer.size); + + t.device.queue.submit([encoder.finish()]); + + return buffer; +} + +/* column constants */ +const kZ = 2; +const kW = 3; + +/** + * Gets a column of values from an array of arrays. + */ +function getColumn(values, colNum) { + return values.map((v) => v[colNum]); +} + +/** + * Computes the linear interpolation of 3 values from 3 vertices of a triangle + * based on barycentric coordinates + */ +function linearInterpolation(baryCoords, interCoords) { + return dotProduct(baryCoords, interCoords); +} + +/** + * Computes the perspective interpolation of 3 values from 3 vertices of a + * triangle based on barycentric coordinates and their corresponding clip space + * W coordinates. + */ +function perspectiveInterpolation( +barycentricCoords, +clipSpaceTriangleCoords, +interCoords) +{ + const [a, b, c] = barycentricCoords; + const [fa, fb, fc] = interCoords; + const wa = clipSpaceTriangleCoords[0][kW]; + const wb = clipSpaceTriangleCoords[1][kW]; + const wc = clipSpaceTriangleCoords[2][kW]; + + return (a * fa / wa + b * fb / wb + c * fc / wc) / (a / wa + b / wb + c / wc); +} + +/** + * Converts clip space coords to NDC coords + */ +function clipSpaceToNDC(point) { + return point.map((v) => v / point[kW]); +} + +/** + * Converts NDC coords to window coords. + */ +function ndcToWindow(ndcPoint, viewport) { + const [xd, yd, zd] = ndcPoint; + const px = viewport[2]; + const py = viewport[3]; + const ox = viewport[0] + px / 2; + const oy = viewport[1] + py / 2; + const zNear = viewport[4]; + const zFar = viewport[5]; + + return [ + px / 2 * xd + ox, + -py / 2 * yd + oy, + zd * (zFar - zNear) + zNear]; + +} + +/** + * Computes barycentric coordinates of triangle for point p. + * @param trianglePoints points for triangle + * @param p point in triangle (or relative to it) + * @returns barycentric coords of p + */ +function calcBarycentricCoordinates(trianglePoints, p) { + const [a, b, c] = trianglePoints; + + const v0 = subtractVectors(b, a); + const v1 = subtractVectors(c, a); + const v2 = subtractVectors(p, a); + + const dot00 = dotProduct(v0, v0); + const dot01 = dotProduct(v0, v1); + const dot11 = dotProduct(v1, v1); + const dot20 = dotProduct(v2, v0); + const dot21 = dotProduct(v2, v1); + + const denom = 1 / (dot00 * dot11 - dot01 * dot01); + const v = (dot11 * dot20 - dot01 * dot21) * denom; + const w = (dot00 * dot21 - dot01 * dot20) * denom; + const u = 1 - v - w; + + return [u, v, w]; +} + + + + + + + + + + +/** + * For each sample in texture, computes the values that would be provided + * to the shader as `@builtin(position)` if the texture was a render target + * and every point in the texture was inside the triangle. + * @param texture The texture + * @param clipSpacePoints triangle points in clip space + * @returns the expected values for each sample + */ +function generateFragmentInputs({ + width, + height, + nearFar, + sampleCount, + clipSpacePoints, + interpolateFn + + + + + + + +}) { + const expected = new Float32Array(width * height * sampleCount * 4); + + const viewport = [0, 0, width, height, ...nearFar]; + + const ndcPoints = clipSpacePoints.map(clipSpaceToNDC); + const windowPoints = ndcPoints.map((p) => ndcToWindow(p, viewport)); + const windowPoints2D = windowPoints.map((p) => p.slice(0, 2)); + + const fragmentOffsets = getMultisampleFragmentOffsets(sampleCount); + for (let y = 0; y < height; ++y) { + for (let x = 0; x < width; ++x) { + for (let s = 0; s < sampleCount; ++s) { + const fragmentPoint = [x + 0.5, y + 0.5]; + const multisampleOffset = fragmentOffsets[s]; + const sampleFragmentPoint = [x + multisampleOffset[0], y + multisampleOffset[1]]; + const fragmentBarycentricCoords = calcBarycentricCoordinates(windowPoints2D, fragmentPoint); + const sampleBarycentricCoords = calcBarycentricCoordinates( + windowPoints2D, + sampleFragmentPoint + ); + + const output = interpolateFn({ + fragmentPoint, + fragmentBarycentricCoords, + sampleBarycentricCoords, + clipSpacePoints, + ndcPoints, + windowPoints + }); + + const offset = ((y * width + x) * sampleCount + s) * 4; + expected.set(output, offset); + } + } + } + return expected; +} + +/** + * Computes 'builtin(position)` + */ +function computeFragmentPosition({ + fragmentPoint, + fragmentBarycentricCoords, + clipSpacePoints, + windowPoints +}) { + return [ + fragmentPoint[0], + fragmentPoint[1], + linearInterpolation(fragmentBarycentricCoords, getColumn(windowPoints, kZ)), + 1 / + perspectiveInterpolation( + fragmentBarycentricCoords, + clipSpacePoints, + getColumn(clipSpacePoints, kW) + )]; + +} + +/** + * Creates a function that will compute the interpolation of an inter-stage variable. + */ +function createInterStageInterpolationFn( +interStagePoints, +type, +sampling) +{ + return function ({ + fragmentBarycentricCoords, + sampleBarycentricCoords, + clipSpacePoints + }) { + const barycentricCoords = + sampling === 'center' ? fragmentBarycentricCoords : sampleBarycentricCoords; + switch (type) { + case 'perspective': + return interStagePoints[0].map((_, colNum) => + perspectiveInterpolation( + barycentricCoords, + clipSpacePoints, + getColumn(interStagePoints, colNum) + ) + ); + break; + case 'linear': + return interStagePoints[0].map((_, colNum) => + linearInterpolation(barycentricCoords, getColumn(interStagePoints, colNum)) + ); + break; + case 'flat': + return interStagePoints[0]; + break; + default: + unreachable(); + } + }; +} + +/** + * Renders float32 fragment shader inputs values to 4 rgba8unorm textures that + * can be multisampled textures. It stores each of the channels, r, g, b, a of + * the shader input to a separate texture, doing the math required to store the + * float32 value into an rgba8unorm texel. + * + * Note: We could try to store the output to an vec4f storage buffer. + * Unfortunately, using a storage buffer has the issue that we need to compute + * an index with the very thing we're trying to test. Similarly, if we used a + * storage texture we would need to compute texture locations with the things + * we're trying to test. Also, using a storage buffer seems to affect certain + * backends like M1 Mac so it seems better to stick to rgba8unorm here and test + * using a storage buffer in a fragment shader separately. + * + * We can't use rgba32float because it's optional. We can't use rgba16float + * because it's optional in compat. We can't we use rgba32uint as that can't be + * multisampled. + */ +async function renderFragmentShaderInputsTo4TexturesAndReadbackValues( +t, +{ + interpolationType, + interpolationSampling, + sampleCount, + width, + height, + nearFar, + clipSpacePoints, + interStagePoints, + outputCode + + + + + + + + + + +}) +{ + const interpolate = `${interpolationType}${ + interpolationSampling ? `, ${interpolationSampling}` : '' + }`; + const module = t.device.createShaderModule({ + code: ` + struct Uniforms { + resolution: vec2f, + }; + + @group(0) @binding(0) var uni: Uniforms; + + struct Vertex { + @builtin(position) position: vec4f, + @location(0) @interpolate(${interpolate}) interpolatedValue: vec4f, + }; + + @vertex fn vs(@builtin(vertex_index) vNdx: u32) -> Vertex { + let pos = array( + ${clipSpacePoints.map((p) => `vec4f(${p.join(', ')})`).join(', ')} + ); + let interStage = array( + ${interStagePoints.map((p) => `vec4f(${p.join(', ')})`).join(', ')} + ); + var v: Vertex; + v.position = pos[vNdx]; + v.interpolatedValue = interStage[vNdx]; + _ = uni; + return v; + } + + struct FragOut { + @location(0) out0: vec4f, + @location(1) out1: vec4f, + @location(2) out2: vec4f, + @location(3) out3: vec4f, + }; + + fn u32ToRGBAUnorm(u: u32) -> vec4f { + return vec4f( + f32((u >> 24) & 0xFF) / 255.0, + f32((u >> 16) & 0xFF) / 255.0, + f32((u >> 8) & 0xFF) / 255.0, + f32((u >> 0) & 0xFF) / 255.0, + ); + } + + @fragment fn fs(vin: Vertex) -> FragOut { + var f: FragOut; + let v = ${outputCode}; + let u = bitcast(v); + f.out0 = u32ToRGBAUnorm(u[0]); + f.out1 = u32ToRGBAUnorm(u[1]); + f.out2 = u32ToRGBAUnorm(u[2]); + f.out3 = u32ToRGBAUnorm(u[3]); + _ = vin.interpolatedValue; + return f; + } + ` + }); + + const textures = range(4, () => { + const texture = t.device.createTexture({ + size: [width, height], + usage: + GPUTextureUsage.RENDER_ATTACHMENT | + GPUTextureUsage.TEXTURE_BINDING | + GPUTextureUsage.COPY_SRC, + format: 'rgba8unorm', + sampleCount + }); + t.trackForCleanup(texture); + return texture; + }); + + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module, + entryPoint: 'vs' + }, + fragment: { + module, + entryPoint: 'fs', + targets: textures.map(() => ({ format: 'rgba8unorm' })) + }, + multisample: { + count: sampleCount + } + }); + + const uniformBuffer = t.device.createBuffer({ + size: 8, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST + }); + t.trackForCleanup(uniformBuffer); + t.device.queue.writeBuffer(uniformBuffer, 0, new Float32Array([width, height])); + + const viewport = [0, 0, width, height, ...nearFar]; + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: uniformBuffer } }] + }); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: textures.map((texture) => ({ + view: texture.createView(), + loadOp: 'clear', + storeOp: 'store' + })) + }); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.setViewport(viewport[0], viewport[1], viewport[2], viewport[3], viewport[4], viewport[5]); + pass.draw(clipSpacePoints.length); + pass.end(); + t.queue.submit([encoder.finish()]); + + const buffer = copyRGBA8EncodedFloatTexturesToBufferIncludingMultisampledTextures(t, textures); + await buffer.mapAsync(GPUMapMode.READ); + return new Float32Array(buffer.getMappedRange()); +} + +function checkSampleRectsApproximatelyEqual({ + width, + height, + sampleCount, + actual, + expected, + maxFractionalDiff + + + + + + + +}) { + const subrectOrigin = [0, 0, 0]; + const subrectSize = [width, height, 1]; + const areaDesc = { + bytesPerRow: width * sampleCount * 4 * 4, + rowsPerImage: height, + subrectOrigin, + subrectSize + }; + + const format = 'rgba32float'; + const actTexelView = TexelView.fromTextureDataByReference( + format, + new Uint8Array(actual.buffer), + areaDesc + ); + const expTexelView = TexelView.fromTextureDataByReference( + format, + new Uint8Array(expected.buffer), + areaDesc + ); + + const failedPixelsMessage = findFailedPixels( + format, + { x: 0, y: 0, z: 0 }, + { width, height, depthOrArrayLayers: 1 }, + { actTexelView, expTexelView }, + { maxFractionalDiff } + ); + + if (failedPixelsMessage !== undefined) { + const msg = 'Texture level had unexpected contents:\n' + failedPixelsMessage; + return new ErrorWithExtra(msg, () => ({ + expTexelView, + actTexelView + })); + } + + return undefined; +} + +g.test('inputs,position'). +desc( + ` + Test fragment shader builtin(position) values. + ` +). +params((u) => +u // +.combine('nearFar', [[0, 1], [0.25, 0.75]]). +combine('sampleCount', [1, 4]). +combine('interpolation', [ +{ type: 'perspective', sampling: 'center' }, +// MAINTENANCE_TODO: enable these tests. +// { type: 'perspective', sampling: 'centroid' }, +// { type: 'perspective', sampling: 'sample' }, +{ type: 'linear', sampling: 'center' }, +// MAINTENANCE_TODO: enable these tests. +// { type: 'linear', sampling: 'centroid' }, +// { type: 'linear', sampling: 'sample' }, +{ type: 'flat' }] +) +). +beforeAllSubcases((t) => { + const { + interpolation: { type, sampling } + } = t.params; + t.skipIfInterpolationTypeOrSamplingNotSupported({ type, sampling }); +}). +fn(async (t) => { + const { + nearFar, + sampleCount, + interpolation: { type, sampling } + } = t.params; + + const clipSpacePoints = [// ndc values + [0.333, 0.333, 0.333, 0.333], // 1, 1, 1 + [1.0, -3.0, 0.25, 1.0], // 1, -3, 0.25 + [-1.5, 0.5, 0.25, 0.5] // -3, 1, 0.5 + ]; + + const interStagePoints = [ + [1, 2, 3, 4], + [5, 6, 7, 8], + [9, 10, 11, 12]]; + + + const width = 4; + const height = 4; + const actual = await renderFragmentShaderInputsTo4TexturesAndReadbackValues(t, { + interpolationType: type, + interpolationSampling: sampling, + sampleCount, + width, + height, + nearFar, + clipSpacePoints, + interStagePoints, + outputCode: 'vin.position' + }); + + const expected = generateFragmentInputs({ + width, + height, + nearFar, + sampleCount, + clipSpacePoints, + interpolateFn: computeFragmentPosition + }); + + t.expectOK( + checkSampleRectsApproximatelyEqual({ + width, + height, + sampleCount, + actual, + expected, + maxFractionalDiff: 0.000001 + }) + ); +}); + +g.test('inputs,interStage'). +desc( + ` + Test fragment shader inter-stage variable values. + ` +). +params((u) => +u // +.combine('nearFar', [[0, 1], [0.25, 0.75]]). +combine('sampleCount', [1, 4]). +combine('interpolation', [ +{ type: 'perspective', sampling: 'center' }, +// MAINTENANCE_TODO: enable these tests. +// { type: 'perspective', sampling: 'centroid' }, +// { type: 'perspective', sampling: 'sample' }, +{ type: 'linear', sampling: 'center' }, +// MAINTENANCE_TODO: enable these tests. +// { type: 'linear', sampling: 'centroid' }, +// { type: 'linear', sampling: 'sample' }, +{ type: 'flat' }] +) +). +beforeAllSubcases((t) => { + const { + interpolation: { type, sampling } + } = t.params; + t.skipIfInterpolationTypeOrSamplingNotSupported({ type, sampling }); +}). +fn(async (t) => { + const { + nearFar, + sampleCount, + interpolation: { type, sampling } + } = t.params; + + const clipSpacePoints = [// ndc values + [0.333, 0.333, 0.333, 0.333], // 1, 1, 1 + [1.0, -3.0, 0.25, 1.0], // 1, -3, 0.25 + [-1.5, 0.5, 0.25, 0.5] // -3, 1, 0.5 + ]; + + const interStagePoints = [ + [1, 2, 3, 4], + [5, 6, 7, 8], + [9, 10, 11, 12]]; + + + const width = 4; + const height = 4; + const actual = await renderFragmentShaderInputsTo4TexturesAndReadbackValues(t, { + interpolationType: type, + interpolationSampling: sampling, + sampleCount, + width, + height, + nearFar, + clipSpacePoints, + interStagePoints, + outputCode: 'vin.interpolatedValue' + }); + + const expected = generateFragmentInputs({ + width, + height, + nearFar, + sampleCount, + clipSpacePoints, + interpolateFn: createInterStageInterpolationFn(interStagePoints, type, sampling) + }); + + t.expectOK( + checkSampleRectsApproximatelyEqual({ + width, + height, + sampleCount, + actual, + expected, + maxFractionalDiff: 0.00001 + }) + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/shared_structs.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/shared_structs.spec.js index 88bff95442f..4582f615ced 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/shared_structs.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shader_io/shared_structs.spec.js @@ -1,34 +1,33 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Test the shared use of structures containing entry point IO attributes`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Test the shared use of structures containing entry point IO attributes`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest, TextureTestMixin } from '../../../gpu_test.js'; import { checkElementsEqual } from '../../../util/check_contents.js'; export const g = makeTestGroup(TextureTestMixin(GPUTest)); -g.test('shared_with_buffer') - .desc( - `Test sharing an entry point IO struct with a buffer. +g.test('shared_with_buffer'). +desc( + `Test sharing an entry point IO struct with a buffer. This test defines a structure that contains both builtin attributes and layout attributes, and uses that structure as both an entry point input and the store type of a storage buffer. The builtin attributes should be ignored when used for the storage buffer, and the layout attributes should be ignored when used as an entry point IO parameter. ` - ) - .fn(t => { - // Set the dispatch parameters such that we get some interesting (non-zero) built-in variables. - const wgsize = new Uint32Array([8, 4, 2]); - const numGroups = new Uint32Array([4, 2, 8]); +). +fn((t) => { + // Set the dispatch parameters such that we get some interesting (non-zero) built-in variables. + const wgsize = new Uint32Array([8, 4, 2]); + const numGroups = new Uint32Array([4, 2, 8]); - // Pick a single invocation to copy the input structure to the output buffer. - const targetLocalIndex = 13; - const targetGroup = new Uint32Array([2, 1, 5]); + // Pick a single invocation to copy the input structure to the output buffer. + const targetLocalIndex = 13; + const targetGroup = new Uint32Array([2, 1, 5]); - // The test shader defines a structure that contains members decorated with built-in variable - // attributes, and also layout attributes for the storage buffer. - const wgsl = ` + // The test shader defines a structure that contains members decorated with built-in variable + // attributes, and also layout attributes for the storage buffer. + const wgsl = ` struct S { /* byte offset: 0 */ @size(32) @builtin(workgroup_id) group_id : vec3, /* byte offset: 32 */ @builtin(local_invocation_index) local_index : u32, @@ -49,76 +48,76 @@ g.test('shared_with_buffer') } `; - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, - }); - - // Allocate a buffer to hold the output structure. - const bufferNumElements = 32; - const outputBuffer = t.device.createBuffer({ - size: bufferNumElements * Uint32Array.BYTES_PER_ELEMENT, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], - }); - - // Run the shader. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(numGroups[0], numGroups[1], numGroups[2]); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Check the output values. - const checkOutput = outputs => { - if (checkElementsEqual(outputs.slice(0, 3), targetGroup)) { - return new Error( - `group_id comparison failed\n` + - ` expected: ${targetGroup}\n` + - ` got: ${outputs.slice(0, 3)}` - ); - } - if (outputs[8] !== targetLocalIndex) { - return new Error( - `local_index comparison failed\n` + - ` expected: ${targetLocalIndex}\n` + - ` got: ${outputs[8]}` - ); - } - if (checkElementsEqual(outputs.slice(16, 19), numGroups)) { - return new Error( - `numGroups comparison failed\n` + - ` expected: ${numGroups}\n` + - ` got: ${outputs.slice(16, 19)}` - ); - } - return undefined; - }; - t.expectGPUBufferValuesPassCheck(outputBuffer, outputData => checkOutput(outputData), { - type: Uint32Array, - typedLength: bufferNumElements, - }); + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ code: wgsl }), + entryPoint: 'main' + } }); -g.test('shared_between_stages') - .desc( - `Test sharing an entry point IO struct between different pipeline stages. + // Allocate a buffer to hold the output structure. + const bufferNumElements = 32; + const outputBuffer = t.device.createBuffer({ + size: bufferNumElements * Uint32Array.BYTES_PER_ELEMENT, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] + }); + + // Run the shader. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(numGroups[0], numGroups[1], numGroups[2]); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Check the output values. + const checkOutput = (outputs) => { + if (checkElementsEqual(outputs.slice(0, 3), targetGroup)) { + return new Error( + `group_id comparison failed\n` + + ` expected: ${targetGroup}\n` + + ` got: ${outputs.slice(0, 3)}` + ); + } + if (outputs[8] !== targetLocalIndex) { + return new Error( + `local_index comparison failed\n` + + ` expected: ${targetLocalIndex}\n` + + ` got: ${outputs[8]}` + ); + } + if (checkElementsEqual(outputs.slice(16, 19), numGroups)) { + return new Error( + `numGroups comparison failed\n` + + ` expected: ${numGroups}\n` + + ` got: ${outputs.slice(16, 19)}` + ); + } + return undefined; + }; + t.expectGPUBufferValuesPassCheck(outputBuffer, (outputData) => checkOutput(outputData), { + type: Uint32Array, + typedLength: bufferNumElements + }); +}); + +g.test('shared_between_stages'). +desc( + `Test sharing an entry point IO struct between different pipeline stages. This test defines an entry point IO structure, and uses it as both the output of a vertex shader and the input to a fragment shader. ` - ) - .fn(t => { - const size = [31, 31]; - const wgsl = ` +). +fn((t) => { + const size = [31, 31]; + const wgsl = ` struct Interface { @builtin(position) position : vec4, @location(0) color : f32, @@ -148,81 +147,81 @@ g.test('shared_between_stages') } `; - // Set up the render pipeline. - const module = t.device.createShaderModule({ code: wgsl }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module, - entryPoint: 'vert_main', - }, - fragment: { - module, - entryPoint: 'frag_main', - targets: [ - { - format: 'rgba8unorm', - }, - ], - }, - }); + // Set up the render pipeline. + const module = t.device.createShaderModule({ code: wgsl }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module, + entryPoint: 'vert_main' + }, + fragment: { + module, + entryPoint: 'frag_main', + targets: [ + { + format: 'rgba8unorm' + }] - // Draw a red triangle. - const renderTarget = t.device.createTexture({ - size, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - format: 'rgba8unorm', - }); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: renderTarget.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.setPipeline(pipeline); - pass.draw(3); - pass.end(); - t.queue.submit([encoder.finish()]); - - // Test a few points to make sure we rendered a half-red/half-green triangle. - const redPixel = new Uint8Array([255, 0, 0, 255]); - const greenPixel = new Uint8Array([0, 255, 0, 255]); - const blackPixel = new Uint8Array([0, 0, 0, 0]); - t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTarget }, [ - // Red pixels - { coord: { x: 16, y: 15 }, exp: redPixel }, - { coord: { x: 16, y: 8 }, exp: redPixel }, - { coord: { x: 22, y: 20 }, exp: redPixel }, - // Green pixels - { coord: { x: 14, y: 15 }, exp: greenPixel }, - { coord: { x: 14, y: 8 }, exp: greenPixel }, - { coord: { x: 8, y: 20 }, exp: greenPixel }, - // Black pixels - { coord: { x: 2, y: 2 }, exp: blackPixel }, - { coord: { x: 2, y: 28 }, exp: blackPixel }, - { coord: { x: 28, y: 2 }, exp: blackPixel }, - { coord: { x: 28, y: 28 }, exp: blackPixel }, - ]); + } }); -g.test('shared_with_non_entry_point_function') - .desc( - `Test sharing an entry point IO struct with a non entry point function. + // Draw a red triangle. + const renderTarget = t.device.createTexture({ + size, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + format: 'rgba8unorm' + }); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + pass.setPipeline(pipeline); + pass.draw(3); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Test a few points to make sure we rendered a half-red/half-green triangle. + const redPixel = new Uint8Array([255, 0, 0, 255]); + const greenPixel = new Uint8Array([0, 255, 0, 255]); + const blackPixel = new Uint8Array([0, 0, 0, 0]); + t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTarget }, [ + // Red pixels + { coord: { x: 16, y: 15 }, exp: redPixel }, + { coord: { x: 16, y: 8 }, exp: redPixel }, + { coord: { x: 22, y: 20 }, exp: redPixel }, + // Green pixels + { coord: { x: 14, y: 15 }, exp: greenPixel }, + { coord: { x: 14, y: 8 }, exp: greenPixel }, + { coord: { x: 8, y: 20 }, exp: greenPixel }, + // Black pixels + { coord: { x: 2, y: 2 }, exp: blackPixel }, + { coord: { x: 2, y: 28 }, exp: blackPixel }, + { coord: { x: 28, y: 2 }, exp: blackPixel }, + { coord: { x: 28, y: 28 }, exp: blackPixel }] + ); +}); + +g.test('shared_with_non_entry_point_function'). +desc( + `Test sharing an entry point IO struct with a non entry point function. This test defines structures that contain builtin and location attributes, and uses those structures as parameter and return types for entry point functions and regular functions. ` - ) - .fn(t => { - // The test shader defines structures that contain members decorated with built-in variable - // attributes and user-defined IO. These structures are passed to and returned from regular - // functions. - const wgsl = ` +). +fn((t) => { + // The test shader defines structures that contain members decorated with built-in variable + // attributes and user-defined IO. These structures are passed to and returned from regular + // functions. + const wgsl = ` struct Inputs { @builtin(vertex_index) index : u32, @location(0) color : vec4, @@ -256,80 +255,78 @@ g.test('shared_with_non_entry_point_function') } `; - // Set up the render pipeline. - const module = t.device.createShaderModule({ code: wgsl }); - const pipeline = t.device.createRenderPipeline({ - layout: 'auto', - vertex: { - module, - entryPoint: 'vert_main', - buffers: [ - { - attributes: [ - { - shaderLocation: 0, - format: 'float32x4', - offset: 0, - }, - ], - - arrayStride: 4 * Float32Array.BYTES_PER_ELEMENT, - }, - ], - }, - fragment: { - module, - entryPoint: 'frag_main', - targets: [ - { - format: 'rgba8unorm', - }, - ], - }, - }); - - // Draw a triangle. - // The vertex buffer contains the vertex colors (all red). - const vertexBuffer = t.makeBufferWithContents( - new Float32Array([1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0]), - GPUBufferUsage.VERTEX - ); - - const renderTarget = t.device.createTexture({ - size: [31, 31], - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - format: 'rgba8unorm', - }); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ + // Set up the render pipeline. + const module = t.device.createShaderModule({ code: wgsl }); + const pipeline = t.device.createRenderPipeline({ + layout: 'auto', + vertex: { + module, + entryPoint: 'vert_main', + buffers: [ + { + attributes: [ { - view: renderTarget.createView(), - clearValue: [0, 0, 0, 0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.setPipeline(pipeline); - pass.setVertexBuffer(0, vertexBuffer); - pass.draw(3); - pass.end(); - t.queue.submit([encoder.finish()]); + shaderLocation: 0, + format: 'float32x4', + offset: 0 + }], - // Test a few points to make sure we rendered a red triangle. - const redPixel = new Uint8Array([255, 0, 0, 255]); - const blackPixel = new Uint8Array([0, 0, 0, 0]); - t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTarget }, [ - // Red pixels - { coord: { x: 15, y: 15 }, exp: redPixel }, - { coord: { x: 15, y: 8 }, exp: redPixel }, - { coord: { x: 8, y: 20 }, exp: redPixel }, - { coord: { x: 22, y: 20 }, exp: redPixel }, - // Black pixels - { coord: { x: 2, y: 2 }, exp: blackPixel }, - { coord: { x: 2, y: 28 }, exp: blackPixel }, - { coord: { x: 28, y: 2 }, exp: blackPixel }, - { coord: { x: 28, y: 28 }, exp: blackPixel }, - ]); + arrayStride: 4 * Float32Array.BYTES_PER_ELEMENT + }] + + }, + fragment: { + module, + entryPoint: 'frag_main', + targets: [ + { + format: 'rgba8unorm' + }] + + } }); + + // Draw a triangle. + // The vertex buffer contains the vertex colors (all red). + const vertexBuffer = t.makeBufferWithContents( + new Float32Array([1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0]), + GPUBufferUsage.VERTEX + ); + const renderTarget = t.device.createTexture({ + size: [31, 31], + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + format: 'rgba8unorm' + }); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: renderTarget.createView(), + clearValue: [0, 0, 0, 0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + pass.setPipeline(pipeline); + pass.setVertexBuffer(0, vertexBuffer); + pass.draw(3); + pass.end(); + t.queue.submit([encoder.finish()]); + + // Test a few points to make sure we rendered a red triangle. + const redPixel = new Uint8Array([255, 0, 0, 255]); + const blackPixel = new Uint8Array([0, 0, 0, 0]); + t.expectSinglePixelComparisonsAreOkInTexture({ texture: renderTarget }, [ + // Red pixels + { coord: { x: 15, y: 15 }, exp: redPixel }, + { coord: { x: 15, y: 8 }, exp: redPixel }, + { coord: { x: 8, y: 20 }, exp: redPixel }, + { coord: { x: 22, y: 20 }, exp: redPixel }, + // Black pixels + { coord: { x: 2, y: 2 }, exp: blackPixel }, + { coord: { x: 2, y: 28 }, exp: blackPixel }, + { coord: { x: 28, y: 2 }, exp: blackPixel }, + { coord: { x: 28, y: 28 }, exp: blackPixel }] + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shadow.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shadow.spec.js index 47ea93cffc4..1bb04d55099 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shadow.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/shadow.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Execution Tests for shadowing -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { iterRange } from '../../../common/util/util.js'; import { GPUTest } from '../../gpu_test.js'; @@ -21,19 +20,18 @@ function runShaderTest(t, wgsl, expected) { layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); // Allocate a buffer and fill it with 0xdeadbeef words. const outputBuffer = t.makeBufferWithContents( - new Uint32Array([...iterRange(expected.length, x => 0xdeadbeef)]), + new Uint32Array([...iterRange(expected.length, (_i) => 0xdeadbeef)]), GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC ); - const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 0, resource: { buffer: outputBuffer } }], + entries: [{ binding: 0, resource: { buffer: outputBuffer } }] }); // Run the shader. @@ -49,10 +47,10 @@ function runShaderTest(t, wgsl, expected) { t.expectGPUBufferValuesEqual(outputBuffer, expected); } -g.test('declaration') - .desc(`Test that shadowing is handled correctly`) - .fn(t => { - const wgsl = ` +g.test('declaration'). +desc(`Test that shadowing is handled correctly`). +fn((t) => { + const wgsl = ` struct S { my_var_start: u32, my_var_block_shadow: u32, @@ -131,39 +129,39 @@ g.test('declaration') } } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // my_var - 1, // my_var_start - 10, // my_var_block_shadow - 1, // my_var_unshadow - 20, // my_var_param_shadow - 30, // my_var_param_reshadow - 1, // my_var_after_func - // my_const - 100, // my_const_start - 110, // my_const_block_shadow - 100, // my_const_unshadow - 120, // my_const_param_shadow - 130, // my_const_param_reshadow - 100, // my_const_after_func - // my_let - 210, // my_let_block_shadow - 220, // my_let_param_reshadow - 200, // my_let_after_func - // my_func - 300, // my_func_param_shadow - 310, // my_func_shadow - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + // my_var + 1, // my_var_start + 10, // my_var_block_shadow + 1, // my_var_unshadow + 20, // my_var_param_shadow + 30, // my_var_param_reshadow + 1, // my_var_after_func + // my_const + 100, // my_const_start + 110, // my_const_block_shadow + 100, // my_const_unshadow + 120, // my_const_param_shadow + 130, // my_const_param_reshadow + 100, // my_const_after_func + // my_let + 210, // my_let_block_shadow + 220, // my_let_param_reshadow + 200, // my_let_after_func + // my_func + 300, // my_func_param_shadow + 310 // my_func_shadow + ]) + ); +}); -g.test('builtin') - .desc(`Test that shadowing a builtin name is handled correctly`) - .fn(t => { - const wgsl = ` +g.test('builtin'). +desc(`Test that shadowing a builtin name is handled correctly`). +fn((t) => { + const wgsl = ` struct S { my_max_shadow: u32, max_call: u32, @@ -182,21 +180,21 @@ g.test('builtin') buffer.max_call = max(310u, 410u); } `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - // my_max - 400, // my_max_shadow - 410, // max_call - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + // my_max + 400, // my_max_shadow + 410 // max_call + ]) + ); +}); -g.test('for_loop') - .desc(`Test that shadowing is handled correctly with for loops`) - .fn(t => { - const wgsl = ` +g.test('for_loop'). +desc(`Test that shadowing is handled correctly with for loops`). +fn((t) => { + const wgsl = ` struct S { my_idx_before: u32, my_idx_loop: array, @@ -216,22 +214,22 @@ g.test('for_loop') buffer.my_idx_after = my_idx; // 500; }; `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - 500, // my_idx_before - 501, // my_idx_loop[0] - 502, // my_idx_loop[1] - 500, // my_idx_after - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + 500, // my_idx_before + 501, // my_idx_loop[0] + 502, // my_idx_loop[1] + 500 // my_idx_after + ]) + ); +}); -g.test('while') - .desc(`Test that shadowing is handled correctly with while loops`) - .fn(t => { - const wgsl = ` +g.test('while'). +desc(`Test that shadowing is handled correctly with while loops`). +fn((t) => { + const wgsl = ` struct S { my_idx_before: u32, my_idx_loop: array, @@ -255,22 +253,22 @@ g.test('while') buffer.my_idx_after = my_idx; // 1; }; `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - 0, // my_idx_before - 500, // my_idx_loop[0] - 501, // my_idx_loop[1] - 0, // my_idx_after - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + 0, // my_idx_before + 500, // my_idx_loop[0] + 501, // my_idx_loop[1] + 0 // my_idx_after + ]) + ); +}); -g.test('loop') - .desc(`Test that shadowing is handled correctly with loops`) - .fn(t => { - const wgsl = ` +g.test('loop'). +desc(`Test that shadowing is handled correctly with loops`). +fn((t) => { + const wgsl = ` struct S { my_idx_before: u32, my_idx_loop: array, @@ -301,24 +299,24 @@ g.test('loop') buffer.my_idx_after = my_idx; // 1; }; `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - 0, // my_idx_before - 500, // my_idx_loop[0] - 501, // my_idx_loop[1] - 600, // my_idx_continuing[0] - 601, // my_idx_continuing[1] - 0, // my_idx_after - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + 0, // my_idx_before + 500, // my_idx_loop[0] + 501, // my_idx_loop[1] + 600, // my_idx_continuing[0] + 601, // my_idx_continuing[1] + 0 // my_idx_after + ]) + ); +}); -g.test('switch') - .desc(`Test that shadowing is handled correctly with a switch`) - .fn(t => { - const wgsl = ` +g.test('switch'). +desc(`Test that shadowing is handled correctly with a switch`). +fn((t) => { + const wgsl = ` struct S { my_idx_before: u32, my_idx_case: u32, @@ -348,22 +346,22 @@ g.test('switch') buffer.my_idx_after = my_idx; // 1; }; `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - 0, // my_idx_before - 10, // my_idx_case - 20, // my_idx_default - 0, // my_idx_after - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + 0, // my_idx_before + 10, // my_idx_case + 20, // my_idx_default + 0 // my_idx_after + ]) + ); +}); -g.test('if') - .desc(`Test that shadowing is handled correctly with a switch`) - .fn(t => { - const wgsl = ` +g.test('if'). +desc(`Test that shadowing is handled correctly with a switch`). +fn((t) => { + const wgsl = ` struct S { my_idx_before: u32, my_idx_if: u32, @@ -394,15 +392,15 @@ g.test('if') buffer.my_idx_after = my_idx; // 1; }; `; - runShaderTest( - t, - wgsl, - new Uint32Array([ - 0, // my_idx_before - 10, // my_idx_if - 20, // my_idx_elseif - 30, // my_idx_else - 0, // my_idx_after - ]) - ); - }); + runShaderTest( + t, + wgsl, + new Uint32Array([ + 0, // my_idx_before + 10, // my_idx_if + 20, // my_idx_elseif + 30, // my_idx_else + 0 // my_idx_after + ]) + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/statement/increment_decrement.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/statement/increment_decrement.spec.js index 899d488c24c..9ed58742835 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/statement/increment_decrement.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/statement/increment_decrement.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Increment and decrement statement tests. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUTest } from '../../../gpu_test.js'; import { kValue } from '../../../util/constants.js'; @@ -19,7 +18,12 @@ export const g = makeTestGroup(GPUTest); * string which is embedded into the WGSL entrypoint function, or a structure * with entrypoint-scoped WGSL code and extra module-scope WGSL code. */ -export function runStatementTest(t, fmt, values, wgsl_main) { +export function runStatementTest( +t, +fmt, +values, +wgsl_main) +{ const wgsl = ` struct Outputs { data : array<${fmt}>, @@ -44,19 +48,19 @@ fn main() { layout: 'auto', compute: { module: t.device.createShaderModule({ code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const maxOutputValues = 1000; const outputBuffer = t.device.createBuffer({ size: 4 * (1 + maxOutputValues), - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), - entries: [{ binding: 1, resource: { buffer: outputBuffer } }], + entries: [{ binding: 1, resource: { buffer: outputBuffer } }] }); // Run the shader. @@ -71,14 +75,14 @@ fn main() { t.expectGPUBufferValuesEqual(outputBuffer, values); } -g.test('scalar_i32_increment') - .desc('Tests increment of scalar i32 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-9, 11, kValue.i32.negative.min + 1, kValue.i32.positive.max, 1]), - ` +g.test('scalar_i32_increment'). +desc('Tests increment of scalar i32 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-9, 11, kValue.i32.negative.min + 1, kValue.i32.positive.max, 1]), + ` var a: i32 = -10; var b: i32 = 10; var c: i32 = ${kValue.i32.negative.min}; @@ -97,32 +101,32 @@ g.test('scalar_i32_increment') push_output(d); push_output(e); ` - ); - }); + ); +}); -g.test('scalar_i32_increment_overflow') - .desc('Tests increment of scalar i32 values which overflows') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([kValue.i32.negative.min]), - ` +g.test('scalar_i32_increment_overflow'). +desc('Tests increment of scalar i32 values which overflows'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([kValue.i32.negative.min]), + ` var a: i32 = ${kValue.i32.positive.max}; a++; push_output(a); ` - ); - }); + ); +}); -g.test('scalar_u32_increment') - .desc('Tests increment of scalar u32 values') - .fn(t => { - runStatementTest( - t, - 'u32', - new Uint32Array([1, 11, kValue.u32.max]), - ` +g.test('scalar_u32_increment'). +desc('Tests increment of scalar u32 values'). +fn((t) => { + runStatementTest( + t, + 'u32', + new Uint32Array([1, 11, kValue.u32.max]), + ` var a: u32 = 0; var b: u32 = 10; var c: u32 = ${kValue.u32.max - 1}; @@ -135,32 +139,32 @@ g.test('scalar_u32_increment') push_output(b); push_output(c); ` - ); - }); + ); +}); -g.test('scalar_u32_increment_overflow') - .desc('Tests increment of scalar u32 values which overflows') - .fn(t => { - runStatementTest( - t, - 'u32', - new Uint32Array([0]), - ` +g.test('scalar_u32_increment_overflow'). +desc('Tests increment of scalar u32 values which overflows'). +fn((t) => { + runStatementTest( + t, + 'u32', + new Uint32Array([0]), + ` var a: u32 = ${kValue.u32.max}; a++; push_output(a); ` - ); - }); + ); +}); -g.test('scalar_i32_decrement') - .desc('Tests decrement of scalar i32 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-11, 9, kValue.i32.negative.min, kValue.i32.positive.max - 1, -1]), - ` +g.test('scalar_i32_decrement'). +desc('Tests decrement of scalar i32 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-11, 9, kValue.i32.negative.min, kValue.i32.positive.max - 1, -1]), + ` var a: i32 = -10; var b: i32 = 10; var c: i32 = ${kValue.i32.negative.min + 1}; @@ -179,32 +183,32 @@ g.test('scalar_i32_decrement') push_output(d); push_output(e); ` - ); - }); + ); +}); -g.test('scalar_i32_decrement_underflow') - .desc('Tests decrement of scalar i32 values which underflow') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([kValue.i32.positive.max]), - ` +g.test('scalar_i32_decrement_underflow'). +desc('Tests decrement of scalar i32 values which underflow'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([kValue.i32.positive.max]), + ` var a: i32 = ${kValue.i32.negative.min}; a--; push_output(a); ` - ); - }); + ); +}); -g.test('scalar_u32_decrement') - .desc('Tests decrement of scalar u32 values') - .fn(t => { - runStatementTest( - t, - 'u32', - new Uint32Array([0, 9, kValue.u32.max - 1]), - ` +g.test('scalar_u32_decrement'). +desc('Tests decrement of scalar u32 values'). +fn((t) => { + runStatementTest( + t, + 'u32', + new Uint32Array([0, 9, kValue.u32.max - 1]), + ` var a: u32 = 1; var b: u32 = 10; var c: u32 = ${kValue.u32.max}; @@ -217,32 +221,32 @@ g.test('scalar_u32_decrement') push_output(b); push_output(c); ` - ); - }); + ); +}); -g.test('scalar_u32_decrement_underflow') - .desc('Tests decrement of scalar u32 values which underflow') - .fn(t => { - runStatementTest( - t, - 'u32', - new Uint32Array([kValue.u32.max]), - ` +g.test('scalar_u32_decrement_underflow'). +desc('Tests decrement of scalar u32 values which underflow'). +fn((t) => { + runStatementTest( + t, + 'u32', + new Uint32Array([kValue.u32.max]), + ` var a: u32 = 0; a--; push_output(a); ` - ); - }); + ); +}); -g.test('vec2_element_increment') - .desc('Tests increment of ve2 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-9, 11]), - ` +g.test('vec2_element_increment'). +desc('Tests increment of ve2 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-9, 11]), + ` var a = vec2(-10, 10); a.x++; @@ -251,17 +255,17 @@ g.test('vec2_element_increment') push_output(a.x); push_output(a.y); ` - ); - }); + ); +}); -g.test('vec3_element_increment') - .desc('Tests increment of vec3 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-9, 11, kValue.i32.negative.min + 1]), - ` +g.test('vec3_element_increment'). +desc('Tests increment of vec3 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-9, 11, kValue.i32.negative.min + 1]), + ` var a = vec3(-10, 10, ${kValue.i32.negative.min}); a.x++; @@ -272,17 +276,17 @@ g.test('vec3_element_increment') push_output(a.y); push_output(a.z); ` - ); - }); + ); +}); -g.test('vec4_element_increment') - .desc('Tests increment of vec4 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-9, 11, kValue.i32.negative.min + 1, kValue.i32.positive.max]), - ` +g.test('vec4_element_increment'). +desc('Tests increment of vec4 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-9, 11, kValue.i32.negative.min + 1, kValue.i32.positive.max]), + ` var a: vec4 = vec4(-10, 10, ${kValue.i32.negative.min}, ${kValue.i32.positive.max - 1}); a.x++; @@ -295,17 +299,17 @@ g.test('vec4_element_increment') push_output(a.z); push_output(a.w); ` - ); - }); + ); +}); -g.test('vec2_element_decrement') - .desc('Tests decrement of vec2 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-11, 9]), - ` +g.test('vec2_element_decrement'). +desc('Tests decrement of vec2 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-11, 9]), + ` var a = vec2(-10, 10); a.x--; @@ -314,17 +318,17 @@ g.test('vec2_element_decrement') push_output(a.x); push_output(a.y); ` - ); - }); + ); +}); -g.test('vec3_element_decrement') - .desc('Tests decrement of vec3 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-11, 9, kValue.i32.negative.min]), - ` +g.test('vec3_element_decrement'). +desc('Tests decrement of vec3 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-11, 9, kValue.i32.negative.min]), + ` var a = vec3(-10, 10, ${kValue.i32.negative.min + 1}); a.x--; @@ -335,17 +339,17 @@ g.test('vec3_element_decrement') push_output(a.y); push_output(a.z); ` - ); - }); + ); +}); -g.test('vec4_element_decrement') - .desc('Tests decrement of vec4 values') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([-11, 9, kValue.i32.negative.min, kValue.i32.positive.max - 1]), - ` +g.test('vec4_element_decrement'). +desc('Tests decrement of vec4 values'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([-11, 9, kValue.i32.negative.min, kValue.i32.positive.max - 1]), + ` var a: vec4 = vec4(-10, 10, ${kValue.i32.negative.min + 1}, ${kValue.i32.positive.max}); a.x--; @@ -358,20 +362,20 @@ g.test('vec4_element_decrement') push_output(a.z); push_output(a.w); ` - ); - }); + ); +}); -g.test('frexp_exp_increment') - .desc('Tests increment can be used on a frexp field') - .fn(t => { - runStatementTest( - t, - 'i32', - new Int32Array([2]), - ` +g.test('frexp_exp_increment'). +desc('Tests increment can be used on a frexp field'). +fn((t) => { + runStatementTest( + t, + 'i32', + new Int32Array([2]), + ` var a = frexp(1.23); a.exp++; push_output(a.exp); ` - ); - }); + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/zero_init.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/zero_init.spec.js index 98f3edf5209..c7b21d5699e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/zero_init.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/execution/zero_init.spec.js @@ -1,15 +1,27 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Test that variables in the shader are zero initialized`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Test that variables in the shader are zero initialized`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { iterRange, unreachable } from '../../../common/util/util.js'; import { GPUTest } from '../../gpu_test.js'; import { + kVectorContainerTypes, + kMatrixContainerTypes, + supportedScalarTypes, - supportsAtomics, -} from '../types.js'; + supportsAtomics } from +'../types.js'; + + + + + + + + + + function prettyPrint(t) { switch (t.type) { @@ -18,15 +30,14 @@ function prettyPrint(t) { case 'array': return `array<${prettyPrint(t.elementType)}, ${t.length}>`; case 'struct': - return `struct { ${t.members.map(m => prettyPrint(m)).join(', ')} }`; + return `struct { ${t.members.map((m) => prettyPrint(m)).join(', ')} }`; default: return `${t.containerType}<${prettyPrint({ type: 'scalar', scalarType: t.scalarType, - isAtomic: false, + isAtomic: false })}>`; } - break; case 'scalar': if (t.isAtomic) { @@ -37,189 +48,195 @@ function prettyPrint(t) { } export const g = makeTestGroup(GPUTest); -g.test('compute,zero_init') - .desc( - `Test that uninitialized variables in workgroup, private, and function storage classes are initialized to zero.` - ) - .params(u => - u - // Only workgroup, function, and private variables can be declared without data bound to them. - // The implementation's shader translator should ensure these values are initialized. - .combine('addressSpace', ['workgroup', 'private', 'function']) - .expand('workgroupSize', ({ addressSpace }) => { - switch (addressSpace) { - case 'workgroup': - return [ - [1, 1, 1], - [1, 32, 1], - [64, 1, 1], - [1, 1, 48], - [1, 47, 1], - [33, 1, 1], - [1, 1, 63], - [8, 8, 2], - [7, 7, 3], - ]; +g.test('compute,zero_init'). +desc( + `Test that uninitialized variables in workgroup, private, and function storage classes are initialized to zero.` +). +params((u) => +u +// Only workgroup, function, and private variables can be declared without data bound to them. +// The implementation's shader translator should ensure these values are initialized. +.combine('addressSpace', ['workgroup', 'private', 'function']). +expand('workgroupSize', ({ addressSpace }) => { + switch (addressSpace) { + case 'workgroup': + return [ + [1, 1, 1], + [1, 32, 1], + [64, 1, 1], + [1, 1, 48], + [1, 47, 1], + [33, 1, 1], + [1, 1, 63], + [8, 8, 2], + [7, 7, 3]]; - case 'function': - case 'private': - return [[1, 1, 1]]; - } - }) - .beginSubcases() - // Fewer subcases: Only 0 and 2. If double-nested containers work, single-nested should too. - .combine('_containerDepth', [0, 2]) - .expandWithParams(function* (p) { - const kElementCounts = [ - [], // Not used. Depth 0 is always scalars. - [1, 3, 67], // Test something above the workgroup size. - [1, 3], - ]; + case 'function': + case 'private': + return [[1, 1, 1]]; + } +}). +beginSubcases() +// Fewer subcases: Only 0 and 2. If double-nested containers work, single-nested should too. +.combine('_containerDepth', [0, 2]). +expandWithParams(function* (p) { + const kElementCounts = [ + [], // Not used. Depth 0 is always scalars. + [1, 3, 67], // Test something above the workgroup size. + [1, 3]]; - const kMemberCounts = [1, 3]; + const kMemberCounts = [1, 3]; - const memoizedTypes = []; + const memoizedTypes = []; - function generateTypesMemo(depth) { - if (memoizedTypes[depth] === undefined) { - memoizedTypes[depth] = Array.from(generateTypes(depth)); + function generateTypesMemo(depth) { + if (memoizedTypes[depth] === undefined) { + memoizedTypes[depth] = Array.from(generateTypes(depth)); + } + return memoizedTypes[depth]; + } + + function* generateTypes(depth) { + if (depth === 0) { + for (const isAtomic of supportsAtomics({ + ...p, + access: 'read_write', + storageMode: undefined, + containerType: 'scalar' + }) ? + [true, false] : + [false]) { + for (const scalarType of supportedScalarTypes({ isAtomic, ...p })) { + // Fewer subcases: For nested types, skip atomic u32 and non-atomic i32. + if (p._containerDepth > 0) { + if (scalarType === 'u32' && isAtomic) continue; + if (scalarType === 'i32' && !isAtomic) continue; } - return memoizedTypes[depth]; - } - function* generateTypes(depth) { - if (depth === 0) { - for (const isAtomic of supportsAtomics({ - ...p, - access: 'read_write', - storageMode: undefined, - containerType: 'scalar', - }) - ? [true, false] - : [false]) { - for (const scalarType of supportedScalarTypes({ isAtomic, ...p })) { - // Fewer subcases: For nested types, skip atomic u32 and non-atomic i32. - if (p._containerDepth > 0) { - if (scalarType === 'u32' && isAtomic) continue; - if (scalarType === 'i32' && !isAtomic) continue; - } + yield { + type: 'scalar', + scalarType, + isAtomic + }; + if (!isAtomic) { + // Vector types + for (const vectorType of kVectorContainerTypes) { + // Fewer subcases: For nested types, only include + // vec2, vec3, and vec4 + if (p._containerDepth > 0) { + if ( + !( + vectorType === 'vec2' && scalarType === 'u32' || + vectorType === 'vec3' && scalarType === 'i32' || + vectorType === 'vec4' && scalarType === 'f32')) - yield { - type: 'scalar', - scalarType, - isAtomic, - }; - if (!isAtomic) { - // Vector types - for (const vectorType of kVectorContainerTypes) { - // Fewer subcases: For nested types, only include - // vec2, vec3, and vec4 - if (p._containerDepth > 0) { - if ( - !( - (vectorType === 'vec2' && scalarType === 'u32') || - (vectorType === 'vec3' && scalarType === 'i32') || - (vectorType === 'vec4' && scalarType === 'f32') - ) - ) { - continue; - } - } - yield { - type: 'container', - containerType: vectorType, - scalarType, - }; - } - // Matrices can only be f32. - if (scalarType === 'f32') { - for (const matrixType of kMatrixContainerTypes) { - yield { - type: 'container', - containerType: matrixType, - scalarType, - }; - } - } + { + continue; } } + yield { + type: 'container', + containerType: vectorType, + scalarType + }; } - return; - } - - for (const containerType of ['array', 'struct']) { - const innerTypes = generateTypesMemo(depth - 1); - switch (containerType) { - case 'array': - for (const elementCount of kElementCounts[depth]) { - for (const innerType of innerTypes) { - yield { - type: 'container', - containerType, - elementType: innerType, - length: elementCount, - }; - } - } - break; - case 'struct': - for (const memberCount of kMemberCounts) { - const memberIndices = new Array(memberCount); - for (let m = 0; m < memberCount; ++m) { - memberIndices[m] = m; - } - - // Don't generate all possible combinations of inner struct members, - // because that's in the millions. Instead, just round-robin through - // to pick member types. Loop through the types, concatenated forward - // and backward, three times to produce a bounded but variable set of - // types. - const memberTypes = [...innerTypes, ...[...innerTypes].reverse()]; - const seenTypes = new Set(); - let typeIndex = 0; - while (typeIndex < memberTypes.length * 3) { - const prevTypeIndex = typeIndex; - const members = []; - for (const m of memberIndices) { - members[m] = memberTypes[typeIndex % memberTypes.length]; - typeIndex += 1; - } - - const t = { - type: 'container', - containerType, - members, - }; - const serializedT = prettyPrint(t); - if (seenTypes.has(serializedT)) { - // We produced an identical type. shuffle the member indices, - // "revert" typeIndex back to where it was before this loop, and - // shift it by one. This helps ensure we don't loop forever, and - // that we produce a different type on the next iteration. - memberIndices.push(memberIndices.shift()); - typeIndex = prevTypeIndex + 1; - continue; - } - seenTypes.add(serializedT); - yield t; - } - } - break; + // Matrices can only be f32. + if (scalarType === 'f32') { + for (const matrixType of kMatrixContainerTypes) { + yield { + type: 'container', + containerType: matrixType, + scalarType + }; + } } } } + } + return; + } - for (const t of generateTypesMemo(p._containerDepth)) { - yield { - shaderTypeParam: prettyPrint(t), - _type: t, - }; - } - }) - ) - .batch(15) - .fn(t => { - let moduleScope = ` + for (const containerType of ['array', 'struct']) { + const innerTypes = generateTypesMemo(depth - 1); + switch (containerType) { + case 'array': + for (const elementCount of kElementCounts[depth]) { + for (const innerType of innerTypes) { + yield { + type: 'container', + containerType, + elementType: innerType, + length: elementCount + }; + } + } + break; + case 'struct': + for (const memberCount of kMemberCounts) { + const memberIndices = new Array(memberCount); + for (let m = 0; m < memberCount; ++m) { + memberIndices[m] = m; + } + + // Don't generate all possible combinations of inner struct members, + // because that's in the millions. Instead, just round-robin through + // to pick member types. Loop through the types, concatenated forward + // and backward, three times to produce a bounded but variable set of + // types. + const memberTypes = [...innerTypes, ...[...innerTypes].reverse()]; + const seenTypes = new Set(); + let typeIndex = 0; + while (typeIndex < memberTypes.length * 3) { + const prevTypeIndex = typeIndex; + const members = []; + for (const m of memberIndices) { + members[m] = memberTypes[typeIndex % memberTypes.length]; + typeIndex += 1; + } + + const t = { + type: 'container', + containerType, + members + }; + const serializedT = prettyPrint(t); + if (seenTypes.has(serializedT)) { + // We produced an identical type. shuffle the member indices, + // "revert" typeIndex back to where it was before this loop, and + // shift it by one. This helps ensure we don't loop forever, and + // that we produce a different type on the next iteration. + memberIndices.push(memberIndices.shift()); + typeIndex = prevTypeIndex + 1; + continue; + } + seenTypes.add(serializedT); + yield t; + } + } + break; + } + } + } + + for (const t of generateTypesMemo(p._containerDepth)) { + yield { + shaderTypeParam: prettyPrint(t), + _type: t + }; + } +}) +). +batch(15). +fn(async (t) => { + const { workgroupSize } = t.params; + const { maxComputeInvocationsPerWorkgroup } = t.device.limits; + const numWorkgroupInvocations = workgroupSize.reduce((a, b) => a * b); + t.skipIf( + numWorkgroupInvocations > maxComputeInvocationsPerWorkgroup, + `workgroupSize: ${workgroupSize} > maxComputeInvocationsPerWorkgroup: ${maxComputeInvocationsPerWorkgroup}` + ); + + let moduleScope = ` struct Output { failed : atomic } @@ -229,33 +246,37 @@ g.test('compute,zero_init') // unroll the massive loops generated by these tests. @group(0) @binding(1) var zero : u32; `; - let functionScope = ''; + let functionScope = ''; - const declaredStructTypes = new Map(); - const typeDecl = (function ensureType(typeName, type, depth = 0) { - switch (type.type) { - case 'container': - switch (type.containerType) { - case 'array': - return `array<${ensureType( - `${typeName}_ArrayElement`, - type.elementType, - depth + 1 - )}, ${type.length}>`; - case 'struct': { + const declaredStructTypes = new Map(); + const typeDecl = function ensureType( + typeName, + type, + depth = 0) + { + switch (type.type) { + case 'container': + switch (type.containerType) { + case 'array': + return `array<${ensureType( + `${typeName}_ArrayElement`, + type.elementType, + depth + 1 + )}, ${type.length}>`; + case 'struct':{ if (declaredStructTypes.has(type)) { return declaredStructTypes.get(type); } - const members = type.members - .map((member, i) => { - return `\n member${i} : ${ensureType( - `${typeName}_Member${i}`, - member, - depth + 1 - )},`; - }) - .join(''); + const members = type.members. + map((member, i) => { + return `\n member${i} : ${ensureType( + `${typeName}_Member${i}`, + member, + depth + 1 + )},`; + }). + join(''); declaredStructTypes.set(type, typeName); moduleScope += `\nstruct ${typeName} {`; moduleScope += members; @@ -263,87 +284,89 @@ g.test('compute,zero_init') return typeName; } - default: - return `${type.containerType}<${ensureType( - typeName, + default: + return `${type.containerType}<${ensureType( + typeName, + { + type: 'scalar', + scalarType: type.scalarType, + isAtomic: false + }, + depth + 1 + )}>`; + } + break; + case 'scalar': + return type.isAtomic ? `atomic<${type.scalarType}>` : type.scalarType; + } + }('TestType', t.params._type); + + switch (t.params.addressSpace) { + case 'workgroup': + case 'private': + moduleScope += `\nvar<${t.params.addressSpace}> testVar: ${typeDecl};`; + break; + case 'function': + functionScope += `\nvar testVar: ${typeDecl};`; + break; + } + + const checkZeroCode = function checkZero( + value, + type, + depth = 0) + { + switch (type.type) { + case 'container': + switch (type.containerType) { + case 'array': + return `\nfor (var i${depth} = 0u; i${depth} < ${ + type.length + }u + zero; i${depth} = i${depth} + 1u) { + ${checkZero(`${value}[i${depth}]`, type.elementType, depth + 1)} + }`; + case 'struct': + return type.members. + map((member, i) => { + return checkZero(`${value}.member${i}`, member, depth + 1); + }). + join('\n'); + default: + if (type.containerType.indexOf('vec') !== -1) { + const length = type.containerType[3]; + return `\nfor (var i${depth} = 0u; i${depth} < ${length}u + zero; i${depth} = i${depth} + 1u) { + ${checkZero( + `${value}[i${depth}]`, { type: 'scalar', scalarType: type.scalarType, - isAtomic: false, + isAtomic: false }, depth + 1 - )}>`; - } - - break; - case 'scalar': - return type.isAtomic ? `atomic<${type.scalarType}>` : type.scalarType; - } - })('TestType', t.params._type); - - switch (t.params.addressSpace) { - case 'workgroup': - case 'private': - moduleScope += `\nvar<${t.params.addressSpace}> testVar: ${typeDecl};`; - break; - case 'function': - functionScope += `\nvar testVar: ${typeDecl};`; - break; - } - - const checkZeroCode = (function checkZero(value, type, depth = 0) { - switch (type.type) { - case 'container': - switch (type.containerType) { - case 'array': - return `\nfor (var i${depth} = 0u; i${depth} < ${ - type.length - }u + zero; i${depth} = i${depth} + 1u) { - ${checkZero(`${value}[i${depth}]`, type.elementType, depth + 1)} - }`; - case 'struct': - return type.members - .map((member, i) => { - return checkZero(`${value}.member${i}`, member, depth + 1); - }) - .join('\n'); - default: - if (type.containerType.indexOf('vec') !== -1) { - const length = type.containerType[3]; - return `\nfor (var i${depth} = 0u; i${depth} < ${length}u + zero; i${depth} = i${depth} + 1u) { - ${checkZero( - `${value}[i${depth}]`, - { - type: 'scalar', - scalarType: type.scalarType, - isAtomic: false, - }, - depth + 1 - )} + )} }`; - } else if (type.containerType.indexOf('mat') !== -1) { - const cols = type.containerType[3]; - const rows = type.containerType[5]; - return `\nfor (var c${depth} = 0u; c${depth} < ${cols}u + zero; c${depth} = c${depth} + 1u) { + } else if (type.containerType.indexOf('mat') !== -1) { + const cols = type.containerType[3]; + const rows = type.containerType[5]; + return `\nfor (var c${depth} = 0u; c${depth} < ${cols}u + zero; c${depth} = c${depth} + 1u) { for (var r${depth} = 0u; r${depth} < ${rows}u; r${depth} = r${depth} + 1u) { ${checkZero( - `${value}[c${depth}][r${depth}]`, - { - type: 'scalar', - scalarType: type.scalarType, - isAtomic: false, - }, - depth + 1 - )} + `${value}[c${depth}][r${depth}]`, + { + type: 'scalar', + scalarType: type.scalarType, + isAtomic: false + }, + depth + 1 + )} } }`; - } else { - unreachable(); - } - } - - break; - case 'scalar': { + } else { + unreachable(); + } + } + break; + case 'scalar':{ let expected; switch (type.scalarType) { case 'bool': @@ -359,7 +382,6 @@ g.test('compute,zero_init') expected = '0u'; break; } - if (type.isAtomic) { value = `atomicLoad(&${value})`; } @@ -368,10 +390,10 @@ g.test('compute,zero_init') // the tests fail cause with DXGI_ERROR_DEVICE_HUNG on Windows. return `\nif (${value} != ${expected}) { atomicStore(&output.failed, 1u); }`; } - } - })('testVar', t.params._type); + } + }('testVar', t.params._type); - const wgsl = ` + const wgsl = ` ${moduleScope} @compute @workgroup_size(${t.params.workgroupSize}) fn main() { @@ -381,13 +403,13 @@ g.test('compute,zero_init') } `; - if (t.params.addressSpace === 'workgroup') { - // Populate the maximum amount of workgroup memory with known values to - // ensure initialization overrides in another shader. - const wg_memory_limits = t.device.limits.maxComputeWorkgroupStorageSize; - const wg_x_dim = t.device.limits.maxComputeWorkgroupSizeX; + if (t.params.addressSpace === 'workgroup') { + // Populate the maximum amount of workgroup memory with known values to + // ensure initialization overrides in another shader. + const wg_memory_limits = t.device.limits.maxComputeWorkgroupStorageSize; + const wg_x_dim = t.device.limits.maxComputeWorkgroupSizeX; - const wgsl = ` + const wgsl = ` @group(0) @binding(0) var inputs : array; @group(0) @binding(1) var outputs : array; var wg_mem : array; @@ -409,117 +431,116 @@ g.test('compute,zero_init') } `; - const fillLayout = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'read-only-storage' }, - }, - { - binding: 1, - visibility: GPUShaderStage.COMPUTE, - buffer: { type: 'storage' }, - }, - ], - }); + const fillLayout = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'read-only-storage' } + }, + { + binding: 1, + visibility: GPUShaderStage.COMPUTE, + buffer: { type: 'storage' } + }] - const fillPipeline = t.device.createComputePipeline({ - layout: t.device.createPipelineLayout({ bindGroupLayouts: [fillLayout] }), - label: 'Workgroup Fill Pipeline', - compute: { - module: t.device.createShaderModule({ - code: wgsl, - }), - entryPoint: 'fill', - }, - }); + }); - const inputBuffer = t.makeBufferWithContents( - new Uint32Array([...iterRange(wg_memory_limits / 4, x => 0xdeadbeef)]), - GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST - ); - - t.trackForCleanup(inputBuffer); - const outputBuffer = t.device.createBuffer({ - size: wg_memory_limits, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, - }); - t.trackForCleanup(outputBuffer); - - const bg = t.device.createBindGroup({ - layout: fillPipeline.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: { - buffer: inputBuffer, - }, - }, - { - binding: 1, - resource: { - buffer: outputBuffer, - }, - }, - ], - }); - - const e = t.device.createCommandEncoder(); - const p = e.beginComputePass(); - p.setPipeline(fillPipeline); - p.setBindGroup(0, bg); - p.dispatchWorkgroups(1); - p.end(); - t.queue.submit([e.finish()]); - } - - const pipeline = t.device.createComputePipeline({ - layout: 'auto', + const fillPipeline = await t.device.createComputePipelineAsync({ + layout: t.device.createPipelineLayout({ bindGroupLayouts: [fillLayout] }), + label: 'Workgroup Fill Pipeline', compute: { module: t.device.createShaderModule({ - code: wgsl, + code: wgsl }), - entryPoint: 'main', - }, + entryPoint: 'fill' + } }); - const resultBuffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + const inputBuffer = t.makeBufferWithContents( + new Uint32Array([...iterRange(wg_memory_limits / 4, (_i) => 0xdeadbeef)]), + GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST + ); + t.trackForCleanup(inputBuffer); + const outputBuffer = t.device.createBuffer({ + size: wg_memory_limits, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); - t.trackForCleanup(resultBuffer); + t.trackForCleanup(outputBuffer); - const zeroBuffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.UNIFORM, - }); - t.trackForCleanup(zeroBuffer); - - const bindGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), + const bg = t.device.createBindGroup({ + layout: fillPipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: { - buffer: resultBuffer, - }, - }, - { - binding: 1, - resource: { - buffer: zeroBuffer, - }, - }, - ], + { + binding: 0, + resource: { + buffer: inputBuffer + } + }, + { + binding: 1, + resource: { + buffer: outputBuffer + } + }] + }); - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bindGroup); - pass.dispatchWorkgroups(1); - pass.end(); - t.queue.submit([encoder.finish()]); - t.expectGPUBufferValuesEqual(resultBuffer, new Uint32Array([0])); + const e = t.device.createCommandEncoder(); + const p = e.beginComputePass(); + p.setPipeline(fillPipeline); + p.setBindGroup(0, bg); + p.dispatchWorkgroups(1); + p.end(); + t.queue.submit([e.finish()]); + } + + const pipeline = await t.device.createComputePipelineAsync({ + layout: 'auto', + compute: { + module: t.device.createShaderModule({ + code: wgsl + }), + entryPoint: 'main' + } }); + + const resultBuffer = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC + }); + t.trackForCleanup(resultBuffer); + + const zeroBuffer = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.UNIFORM + }); + t.trackForCleanup(zeroBuffer); + + const bindGroup = t.device.createBindGroup({ + layout: pipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: { + buffer: resultBuffer + } + }, + { + binding: 1, + resource: { + buffer: zeroBuffer + } + }] + + }); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatchWorkgroups(1); + pass.end(); + t.queue.submit([encoder.finish()]); + t.expectGPUBufferValuesEqual(resultBuffer, new Uint32Array([0])); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/types.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/types.js index 0c8cf724bb5..5810b8e9f1c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/types.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/types.js @@ -1,127 +1,167 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { keysOf } from '../../common/util/data_tables.js'; -import { assert } from '../../common/util/util.js'; -import { align } from '../util/math.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { keysOf } from '../../common/util/data_tables.js';import { assert } from '../../common/util/util.js';import { align } from '../util/math.js'; const kArrayLength = 3; +// never is the same as "must not" + + + export const HostSharableTypes = ['i32', 'u32', 'f32']; /** Info for each plain scalar type. */ -export const kScalarTypeInfo = { - i32: { layout: { alignment: 4, size: 4 }, supportsAtomics: true, arrayLength: 1, innerLength: 0 }, - u32: { layout: { alignment: 4, size: 4 }, supportsAtomics: true, arrayLength: 1, innerLength: 0 }, - f32: { - layout: { alignment: 4, size: 4 }, - supportsAtomics: false, - arrayLength: 1, - innerLength: 0, - }, - bool: { layout: undefined, supportsAtomics: false, arrayLength: 1, innerLength: 0 }, +export const kScalarTypeInfo = +{ + 'i32': { layout: { alignment: 4, size: 4 }, supportsAtomics: true, arrayLength: 1, innerLength: 0 }, + 'u32': { layout: { alignment: 4, size: 4 }, supportsAtomics: true, arrayLength: 1, innerLength: 0 }, + 'f32': { layout: { alignment: 4, size: 4 }, supportsAtomics: false, arrayLength: 1, innerLength: 0 }, + 'bool': { layout: undefined, supportsAtomics: false, arrayLength: 1, innerLength: 0 } }; /** List of all plain scalar types. */ export const kScalarTypes = keysOf(kScalarTypeInfo); /** Info for each vecN<> container type. */ -export const kVectorContainerTypeInfo = { - vec2: { layout: { alignment: 8, size: 8 }, arrayLength: 2, innerLength: 0 }, - vec3: { layout: { alignment: 16, size: 12 }, arrayLength: 3, innerLength: 0 }, - vec4: { layout: { alignment: 16, size: 16 }, arrayLength: 4, innerLength: 0 }, +export const kVectorContainerTypeInfo = +{ + 'vec2': { layout: { alignment: 8, size: 8 }, arrayLength: 2, innerLength: 0 }, + 'vec3': { layout: { alignment: 16, size: 12 }, arrayLength: 3, innerLength: 0 }, + 'vec4': { layout: { alignment: 16, size: 16 }, arrayLength: 4, innerLength: 0 } }; /** List of all vecN<> container types. */ export const kVectorContainerTypes = keysOf(kVectorContainerTypeInfo); /** Info for each matNxN<> container type. */ -export const kMatrixContainerTypeInfo = { - mat2x2: { layout: { alignment: 8, size: 16 }, arrayLength: 2, innerLength: 2 }, - mat3x2: { layout: { alignment: 8, size: 24 }, arrayLength: 3, innerLength: 2 }, - mat4x2: { layout: { alignment: 8, size: 32 }, arrayLength: 4, innerLength: 2 }, - mat2x3: { layout: { alignment: 16, size: 32 }, arrayLength: 2, innerLength: 3 }, - mat3x3: { layout: { alignment: 16, size: 48 }, arrayLength: 3, innerLength: 3 }, - mat4x3: { layout: { alignment: 16, size: 64 }, arrayLength: 4, innerLength: 3 }, - mat2x4: { layout: { alignment: 16, size: 32 }, arrayLength: 2, innerLength: 4 }, - mat3x4: { layout: { alignment: 16, size: 48 }, arrayLength: 3, innerLength: 4 }, - mat4x4: { layout: { alignment: 16, size: 64 }, arrayLength: 4, innerLength: 4 }, +export const kMatrixContainerTypeInfo = +{ + 'mat2x2': { layout: { alignment: 8, size: 16 }, arrayLength: 2, innerLength: 2 }, + 'mat3x2': { layout: { alignment: 8, size: 24 }, arrayLength: 3, innerLength: 2 }, + 'mat4x2': { layout: { alignment: 8, size: 32 }, arrayLength: 4, innerLength: 2 }, + 'mat2x3': { layout: { alignment: 16, size: 32 }, arrayLength: 2, innerLength: 3 }, + 'mat3x3': { layout: { alignment: 16, size: 48 }, arrayLength: 3, innerLength: 3 }, + 'mat4x3': { layout: { alignment: 16, size: 64 }, arrayLength: 4, innerLength: 3 }, + 'mat2x4': { layout: { alignment: 16, size: 32 }, arrayLength: 2, innerLength: 4 }, + 'mat3x4': { layout: { alignment: 16, size: 48 }, arrayLength: 3, innerLength: 4 }, + 'mat4x4': { layout: { alignment: 16, size: 64 }, arrayLength: 4, innerLength: 4 } }; /** List of all matNxN<> container types. */ export const kMatrixContainerTypes = keysOf(kMatrixContainerTypeInfo); + + + + export const kAccessModeInfo = { read: { read: true, write: false }, write: { read: false, write: true }, - read_write: { read: true, write: true }, + read_write: { read: true, write: true } }; + + + + + + + + + + + + + + + + + + + + + + + export const kAddressSpaceInfo = { storage: { scope: 'module', binding: true, spell: 'must', accessModes: ['read', 'read_write'], - spellAccessMode: 'may', + spellAccessMode: 'may' }, uniform: { scope: 'module', binding: true, spell: 'must', accessModes: ['read'], - spellAccessMode: 'never', + spellAccessMode: 'never' }, private: { scope: 'module', binding: false, spell: 'must', accessModes: ['read_write'], - spellAccessMode: 'never', + spellAccessMode: 'never' }, workgroup: { scope: 'module', binding: false, spell: 'must', accessModes: ['read_write'], - spellAccessMode: 'never', + spellAccessMode: 'never' }, function: { scope: 'function', binding: false, spell: 'may', accessModes: ['read_write'], - spellAccessMode: 'never', + spellAccessMode: 'never' }, handle: { scope: 'module', binding: true, spell: 'never', accessModes: [], - spellAccessMode: 'never', - }, + spellAccessMode: 'never' + } }; /** List of texel formats and their shader representation */ export const TexelFormats = [ - { format: 'rgba8unorm', _shaderType: 'f32' }, - { format: 'rgba8snorm', _shaderType: 'f32' }, - { format: 'rgba8uint', _shaderType: 'u32' }, - { format: 'rgba8sint', _shaderType: 'i32' }, - { format: 'rgba16uint', _shaderType: 'u32' }, - { format: 'rgba16sint', _shaderType: 'i32' }, - { format: 'rgba16float', _shaderType: 'f32' }, - { format: 'r32uint', _shaderType: 'u32' }, - { format: 'r32sint', _shaderType: 'i32' }, - { format: 'r32float', _shaderType: 'f32' }, - { format: 'rg32uint', _shaderType: 'u32' }, - { format: 'rg32sint', _shaderType: 'i32' }, - { format: 'rg32float', _shaderType: 'f32' }, - { format: 'rgba32uint', _shaderType: 'i32' }, - { format: 'rgba32sint', _shaderType: 'i32' }, - { format: 'rgba32float', _shaderType: 'f32' }, -]; +{ format: 'rgba8unorm', _shaderType: 'f32' }, +{ format: 'rgba8snorm', _shaderType: 'f32' }, +{ format: 'rgba8uint', _shaderType: 'u32' }, +{ format: 'rgba8sint', _shaderType: 'i32' }, +{ format: 'rgba16uint', _shaderType: 'u32' }, +{ format: 'rgba16sint', _shaderType: 'i32' }, +{ format: 'rgba16float', _shaderType: 'f32' }, +{ format: 'r32uint', _shaderType: 'u32' }, +{ format: 'r32sint', _shaderType: 'i32' }, +{ format: 'r32float', _shaderType: 'f32' }, +{ format: 'rg32uint', _shaderType: 'u32' }, +{ format: 'rg32sint', _shaderType: 'i32' }, +{ format: 'rg32float', _shaderType: 'f32' }, +{ format: 'rgba32uint', _shaderType: 'i32' }, +{ format: 'rgba32sint', _shaderType: 'i32' }, +{ format: 'rgba32float', _shaderType: 'f32' }]; + /** * Generate a bunch types (vec, mat, sized/unsized array) for testing. */ -export function* generateTypes({ addressSpace, baseType, containerType, isAtomic = false }) { +export function* generateTypes({ + addressSpace, + baseType, + containerType, + isAtomic = false + + + + + + + + +}) { const scalarInfo = kScalarTypeInfo[baseType]; if (isAtomic) { assert(scalarInfo.supportsAtomics, 'type does not support atomics'); @@ -139,8 +179,8 @@ export function* generateTypes({ addressSpace, baseType, containerType, isAtomic type: `${scalarType}`, _kTypeInfo: { elementBaseType: `${scalarType}`, - ...scalarInfo, - }, + ...scalarInfo + } }; } @@ -149,7 +189,7 @@ export function* generateTypes({ addressSpace, baseType, containerType, isAtomic for (const vectorType of kVectorContainerTypes) { yield { type: `${vectorType}<${scalarType}>`, - _kTypeInfo: { elementBaseType: baseType, ...kVectorContainerTypeInfo[vectorType] }, + _kTypeInfo: { elementBaseType: baseType, ...kVectorContainerTypeInfo[vectorType] } }; } } @@ -163,8 +203,8 @@ export function* generateTypes({ addressSpace, baseType, containerType, isAtomic type: `${matrixType}<${scalarType}>`, _kTypeInfo: { elementBaseType: `vec${matrixInfo.innerLength}<${scalarType}>`, - ...matrixInfo, - }, + ...matrixInfo + } }; } } @@ -175,27 +215,27 @@ export function* generateTypes({ addressSpace, baseType, containerType, isAtomic const arrayTypeInfo = { elementBaseType: `${baseType}`, arrayLength: kArrayLength, - layout: scalarInfo.layout - ? { - alignment: scalarInfo.layout.alignment, - size: - addressSpace === 'uniform' - ? // Uniform storage class must have array elements aligned to 16. - kArrayLength * - arrayStride({ - ...scalarInfo.layout, - alignment: 16, - }) - : kArrayLength * arrayStride(scalarInfo.layout), - } - : undefined, + layout: scalarInfo.layout ? + { + alignment: scalarInfo.layout.alignment, + size: + addressSpace === 'uniform' ? + // Uniform storage class must have array elements aligned to 16. + kArrayLength * + arrayStride({ + ...scalarInfo.layout, + alignment: 16 + }) : + kArrayLength * arrayStride(scalarInfo.layout) + } : + undefined }; // Sized if (addressSpace === 'uniform') { yield { type: `array,${kArrayLength}>`, - _kTypeInfo: arrayTypeInfo, + _kTypeInfo: arrayTypeInfo }; } else { yield { type: `array<${scalarType},${kArrayLength}>`, _kTypeInfo: arrayTypeInfo }; @@ -219,12 +259,17 @@ export function* generateTypes({ addressSpace, baseType, containerType, isAtomic } /** Atomic access requires scalar/array container type and storage/workgroup memory. */ -export function supportsAtomics(p) { +export function supportsAtomics(p) + + + + +{ return ( - ((p.addressSpace === 'storage' && p.storageMode === 'read_write') || - p.addressSpace === 'workgroup') && - (p.containerType === 'scalar' || p.containerType === 'array') - ); + (p.addressSpace === 'storage' && p.storageMode === 'read_write' || + p.addressSpace === 'workgroup') && ( + p.containerType === 'scalar' || p.containerType === 'array')); + } /** Generates an iterator of supported base types (i32/u32/f32/bool) */ @@ -241,4 +286,4 @@ export function* supportedScalarTypes(p) { yield scalarType; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/const_assert/const_assert.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/const_assert/const_assert.spec.js index b7b7a89136c..13e7e687f8a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/const_assert/const_assert.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/const_assert/const_assert.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for const_assert`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for const_assert`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -18,6 +17,15 @@ function buildStaticAssert(expr, scope) { return scope === 'module' ? stmt : `fn f() { ${stmt} }`; } + + + + + + + + + const kConditionCases = { any_false: { expr: `any(vec3(false, false, false))`, val: false }, any_true: { expr: `any(vec3(false, true, false))`, val: true }, @@ -36,7 +44,7 @@ const kConditionCases = { variable_false: { expr: `is_false`, val: false }, variable_not_false: { expr: `!is_false`, val: true }, variable_not_true: { expr: `!is_true`, val: false }, - variable_true: { expr: `is_true`, val: true }, + variable_true: { expr: `is_true`, val: true } }; const kConditionConstants = ` @@ -47,147 +55,147 @@ const is_true = true; const is_false = false; `; -g.test('constant_expression_no_assert') - .desc(`Test that const_assert does not assert on a true conditional expression`) - .params(u => - u - .combine('case', keysOf(kConditionCases)) - .combine('scope', ['module', 'function']) - .beginSubcases() - ) - .fn(t => { - const expr = kConditionCases[t.params.case].expr; - const val = kConditionCases[t.params.case].val; - t.expectCompileResult( - true, - kConditionConstants + buildStaticAssert(val ? expr : `!(${expr})`, t.params.scope) - ); - }); +g.test('constant_expression_no_assert'). +desc(`Test that const_assert does not assert on a true conditional expression`). +params((u) => +u. +combine('case', keysOf(kConditionCases)). +combine('scope', ['module', 'function']). +beginSubcases() +). +fn((t) => { + const expr = kConditionCases[t.params.case].expr; + const val = kConditionCases[t.params.case].val; + t.expectCompileResult( + true, + kConditionConstants + buildStaticAssert(val ? expr : `!(${expr})`, t.params.scope) + ); +}); -g.test('constant_expression_assert') - .desc(`Test that const_assert does assert on a false conditional expression`) - .params(u => - u - .combine('case', keysOf(kConditionCases)) - .combine('scope', ['module', 'function']) - .beginSubcases() - ) - .fn(t => { - const expr = kConditionCases[t.params.case].expr; - const val = kConditionCases[t.params.case].val; - t.expectCompileResult( - false, - kConditionConstants + buildStaticAssert(val ? `!(${expr})` : expr, t.params.scope) - ); - }); +g.test('constant_expression_assert'). +desc(`Test that const_assert does assert on a false conditional expression`). +params((u) => +u. +combine('case', keysOf(kConditionCases)). +combine('scope', ['module', 'function']). +beginSubcases() +). +fn((t) => { + const expr = kConditionCases[t.params.case].expr; + const val = kConditionCases[t.params.case].val; + t.expectCompileResult( + false, + kConditionConstants + buildStaticAssert(val ? `!(${expr})` : expr, t.params.scope) + ); +}); -g.test('constant_expression_logical_or_no_assert') - .desc( - `Test that const_assert does not assert on a condition expression that contains a logical-or which evaluates to true` - ) - .params(u => - u - .combine('lhs', keysOf(kConditionCases)) - .combine('rhs', keysOf(kConditionCases)) - .combine('scope', ['module', 'function']) - .beginSubcases() - ) - .fn(t => { - const expr = `(${kConditionCases[t.params.lhs].expr}) || (${ - kConditionCases[t.params.rhs].expr - })`; - const val = kConditionCases[t.params.lhs].val || kConditionCases[t.params.rhs].val; - t.expectCompileResult( - true, - kConditionConstants + buildStaticAssert(val ? expr : `!(${expr})`, t.params.scope) - ); - }); +g.test('constant_expression_logical_or_no_assert'). +desc( + `Test that const_assert does not assert on a condition expression that contains a logical-or which evaluates to true` +). +params((u) => +u. +combine('lhs', keysOf(kConditionCases)). +combine('rhs', keysOf(kConditionCases)). +combine('scope', ['module', 'function']). +beginSubcases() +). +fn((t) => { + const expr = `(${kConditionCases[t.params.lhs].expr}) || (${ + kConditionCases[t.params.rhs].expr + })`; + const val = kConditionCases[t.params.lhs].val || kConditionCases[t.params.rhs].val; + t.expectCompileResult( + true, + kConditionConstants + buildStaticAssert(val ? expr : `!(${expr})`, t.params.scope) + ); +}); -g.test('constant_expression_logical_or_assert') - .desc( - `Test that const_assert does assert on a condition expression that contains a logical-or which evaluates to false` - ) - .params(u => - u - .combine('lhs', keysOf(kConditionCases)) - .combine('rhs', keysOf(kConditionCases)) - .combine('scope', ['module', 'function']) - .beginSubcases() - ) - .fn(t => { - const expr = `(${kConditionCases[t.params.lhs].expr}) || (${ - kConditionCases[t.params.rhs].expr - })`; - const val = kConditionCases[t.params.lhs].val || kConditionCases[t.params.rhs].val; - t.expectCompileResult( - false, - kConditionConstants + buildStaticAssert(val ? `!(${expr})` : expr, t.params.scope) - ); - }); +g.test('constant_expression_logical_or_assert'). +desc( + `Test that const_assert does assert on a condition expression that contains a logical-or which evaluates to false` +). +params((u) => +u. +combine('lhs', keysOf(kConditionCases)). +combine('rhs', keysOf(kConditionCases)). +combine('scope', ['module', 'function']). +beginSubcases() +). +fn((t) => { + const expr = `(${kConditionCases[t.params.lhs].expr}) || (${ + kConditionCases[t.params.rhs].expr + })`; + const val = kConditionCases[t.params.lhs].val || kConditionCases[t.params.rhs].val; + t.expectCompileResult( + false, + kConditionConstants + buildStaticAssert(val ? `!(${expr})` : expr, t.params.scope) + ); +}); -g.test('constant_expression_logical_and_no_assert') - .desc( - `Test that const_assert does not assert on a condition expression that contains a logical-and which evaluates to true` - ) - .params(u => - u - .combine('lhs', keysOf(kConditionCases)) - .combine('rhs', keysOf(kConditionCases)) - .combine('scope', ['module', 'function']) - .beginSubcases() - ) - .fn(t => { - const expr = `(${kConditionCases[t.params.lhs].expr}) && (${ - kConditionCases[t.params.rhs].expr - })`; - const val = kConditionCases[t.params.lhs].val && kConditionCases[t.params.rhs].val; - t.expectCompileResult( - true, - kConditionConstants + buildStaticAssert(val ? expr : `!(${expr})`, t.params.scope) - ); - }); +g.test('constant_expression_logical_and_no_assert'). +desc( + `Test that const_assert does not assert on a condition expression that contains a logical-and which evaluates to true` +). +params((u) => +u. +combine('lhs', keysOf(kConditionCases)). +combine('rhs', keysOf(kConditionCases)). +combine('scope', ['module', 'function']). +beginSubcases() +). +fn((t) => { + const expr = `(${kConditionCases[t.params.lhs].expr}) && (${ + kConditionCases[t.params.rhs].expr + })`; + const val = kConditionCases[t.params.lhs].val && kConditionCases[t.params.rhs].val; + t.expectCompileResult( + true, + kConditionConstants + buildStaticAssert(val ? expr : `!(${expr})`, t.params.scope) + ); +}); -g.test('constant_expression_logical_and_assert') - .desc( - `Test that const_assert does assert on a condition expression that contains a logical-and which evaluates to false` - ) - .params(u => - u - .combine('lhs', keysOf(kConditionCases)) - .combine('rhs', keysOf(kConditionCases)) - .combine('scope', ['module', 'function']) - .beginSubcases() - ) - .fn(t => { - const expr = `(${kConditionCases[t.params.lhs].expr}) && (${ - kConditionCases[t.params.rhs].expr - })`; - const val = kConditionCases[t.params.lhs].val && kConditionCases[t.params.rhs].val; - t.expectCompileResult( - false, - kConditionConstants + buildStaticAssert(val ? `!(${expr})` : expr, t.params.scope) - ); - }); +g.test('constant_expression_logical_and_assert'). +desc( + `Test that const_assert does assert on a condition expression that contains a logical-and which evaluates to false` +). +params((u) => +u. +combine('lhs', keysOf(kConditionCases)). +combine('rhs', keysOf(kConditionCases)). +combine('scope', ['module', 'function']). +beginSubcases() +). +fn((t) => { + const expr = `(${kConditionCases[t.params.lhs].expr}) && (${ + kConditionCases[t.params.rhs].expr + })`; + const val = kConditionCases[t.params.lhs].val && kConditionCases[t.params.rhs].val; + t.expectCompileResult( + false, + kConditionConstants + buildStaticAssert(val ? `!(${expr})` : expr, t.params.scope) + ); +}); -g.test('evaluation_stage') - .desc(`Test that the const_assert expression must be a constant expression.`) - .params(u => - u - .combine('scope', ['module', 'function']) - .combine('stage', ['constant', 'override', 'runtime']) - .beginSubcases() - ) - .fn(t => { - const staticAssert = buildStaticAssert('value', t.params.scope); - switch (t.params.stage) { - case 'constant': - t.expectCompileResult(true, `const value = true;\n${staticAssert}`); - break; - case 'override': - t.expectCompileResult(false, `override value = true;\n${staticAssert}`); - break; - case 'runtime': - t.expectCompileResult(false, `var value = true;\n${staticAssert}`); - break; - } - }); +g.test('evaluation_stage'). +desc(`Test that the const_assert expression must be a constant expression.`). +params((u) => +u. +combine('scope', ['module', 'function']). +combine('stage', ['constant', 'override', 'runtime']). +beginSubcases() +). +fn((t) => { + const staticAssert = buildStaticAssert('value', t.params.scope); + switch (t.params.stage) { + case 'constant': + t.expectCompileResult(true, `const value = true;\n${staticAssert}`); + break; + case 'override': + t.expectCompileResult(false, `override value = true;\n${staticAssert}`); + break; + case 'runtime': + t.expectCompileResult(false, `var value = true;\n${staticAssert}`); + break; + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/const.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/const.spec.js index 547aa93be81..2ab34e65bf5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/const.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/const.spec.js @@ -1,62 +1,61 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for const declarations -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('no_direct_recursion') - .desc('Test that direct recursion of const declarations is rejected') - .params(u => u.combine('target', ['a', 'b'])) - .fn(t => { - const wgsl = ` +g.test('no_direct_recursion'). +desc('Test that direct recursion of const declarations is rejected'). +params((u) => u.combine('target', ['a', 'b'])). +fn((t) => { + const wgsl = ` const a : i32 = 42; const b : i32 = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'a', wgsl); - }); + t.expectCompileResult(t.params.target === 'a', wgsl); +}); -g.test('no_indirect_recursion') - .desc('Test that indirect recursion of const declarations is rejected') - .params(u => u.combine('target', ['a', 'b'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion'). +desc('Test that indirect recursion of const declarations is rejected'). +params((u) => u.combine('target', ['a', 'b'])). +fn((t) => { + const wgsl = ` const a : i32 = 42; const b : i32 = c; const c : i32 = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'a', wgsl); - }); + t.expectCompileResult(t.params.target === 'a', wgsl); +}); -g.test('no_indirect_recursion_via_array_size') - .desc('Test that indirect recursion of const declarations via array size expressions is rejected') - .params(u => u.combine('target', ['a', 'b'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_array_size'). +desc('Test that indirect recursion of const declarations via array size expressions is rejected'). +params((u) => u.combine('target', ['a', 'b'])). +fn((t) => { + const wgsl = ` const a = 4; const b = c[0]; const c = array(4, 4, 4, 4); `; - t.expectCompileResult(t.params.target === 'a', wgsl); - }); + t.expectCompileResult(t.params.target === 'a', wgsl); +}); -g.test('no_indirect_recursion_via_struct_attribute') - .desc('Test that indirect recursion of const declarations via struct members is rejected') - .params(u => - u // - .combine('target', ['a', 'b']) - .combine('attribute', ['align', 'location', 'size']) - ) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_struct_attribute'). +desc('Test that indirect recursion of const declarations via struct members is rejected'). +params((u) => +u // +.combine('target', ['a', 'b']). +combine('attribute', ['align', 'location', 'size']) +). +fn((t) => { + const wgsl = ` struct S { @${t.params.attribute}(${t.params.target}) a : i32 } const a = 4; const b = S(4).a; `; - t.expectCompileResult(t.params.target === 'a', wgsl); - }); + t.expectCompileResult(t.params.target === 'a', wgsl); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/override.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/override.spec.js index 96a26f20fd6..561527a6225 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/override.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/override.spec.js @@ -1,32 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for override declarations -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('no_direct_recursion') - .desc('Test that direct recursion of override declarations is rejected') - .params(u => u.combine('target', ['a', 'b'])) - .fn(t => { - const wgsl = ` +g.test('no_direct_recursion'). +desc('Test that direct recursion of override declarations is rejected'). +params((u) => u.combine('target', ['a', 'b'])). +fn((t) => { + const wgsl = ` override a : i32 = 42; override b : i32 = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'a', wgsl); - }); + t.expectCompileResult(t.params.target === 'a', wgsl); +}); -g.test('no_indirect_recursion') - .desc('Test that indirect recursion of override declarations is rejected') - .params(u => u.combine('target', ['a', 'b'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion'). +desc('Test that indirect recursion of override declarations is rejected'). +params((u) => u.combine('target', ['a', 'b'])). +fn((t) => { + const wgsl = ` override a : i32 = 42; override b : i32 = c; override c : i32 = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'a', wgsl); - }); + t.expectCompileResult(t.params.target === 'a', wgsl); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/ptr_spelling.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/ptr_spelling.spec.js index f06b81188e8..14e578b2440 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/ptr_spelling.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/ptr_spelling.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validate spelling of pointer types. Pointer types may appear. @@ -29,103 +29,106 @@ import { explicitSpaceExpander, accessModeExpander, getVarDeclShader, - supportsWrite, -} from './util.js'; + supportsWrite } from + +'./util.js'; // Address spaces that can hold an i32 variable. -const kNonHandleAddressSpaces = keysOf(kAddressSpaceInfo).filter(as => as !== 'handle'); +const kNonHandleAddressSpaces = keysOf(kAddressSpaceInfo).filter( + (as) => as !== 'handle' +); export const g = makeTestGroup(ShaderValidationTest); -g.test('let_ptr_explicit_type_matches_var') - .desc( - 'Let-declared pointer with explicit type initialized from var with same address space and access mode' - ) - .specURL('https://w3.org/TR#ref-ptr-types') - .params(u => - u // Generate non-handle variables in all valid permutations of address space and access mode. - .combine('addressSpace', kNonHandleAddressSpaces) - .expand('explicitSpace', explicitSpaceExpander) - .combine('explicitAccess', [false, true]) - .expand('accessMode', accessModeExpander) - .combine('stage', ['compute']) // Only need to check compute shaders - // Vary the store type. - .combine('ptrStoreType', ['i32', 'u32']) - ) - .fn(t => { - // Match the address space and access mode. - const prog = getVarDeclShader(t.params, `let p: ${pointerType(t.params)} = &x;`); - const ok = t.params.ptrStoreType === 'i32'; // The store type matches the variable's store type. +g.test('let_ptr_explicit_type_matches_var'). +desc( + 'Let-declared pointer with explicit type initialized from var with same address space and access mode' +). +specURL('https://w3.org/TR#ref-ptr-types'). +params((u) => +u // Generate non-handle variables in all valid permutations of address space and access mode. +.combine('addressSpace', kNonHandleAddressSpaces). +expand('explicitSpace', explicitSpaceExpander). +combine('explicitAccess', [false, true]). +expand('accessMode', accessModeExpander). +combine('stage', ['compute']) // Only need to check compute shaders +// Vary the store type. +.combine('ptrStoreType', ['i32', 'u32']) +). +fn((t) => { + // Match the address space and access mode. + const prog = getVarDeclShader(t.params, `let p: ${pointerType(t.params)} = &x;`); + const ok = t.params.ptrStoreType === 'i32'; // The store type matches the variable's store type. - t.expectCompileResult(ok, prog); - }); + t.expectCompileResult(ok, prog); +}); -g.test('let_ptr_reads') - .desc('Validate reading via ptr when permitted by access mode') - .params(u => - u // Generate non-handle variables in all valid permutations of address space and access mode. - .combine('addressSpace', kNonHandleAddressSpaces) - .expand('explicitSpace', explicitSpaceExpander) - .combine('explicitAccess', [false, true]) - .expand('accessMode', accessModeExpander) - .combine('stage', ['compute']) // Only need to check compute shaders - .combine('inferPtrType', [false, true]) - .combine('ptrStoreType', ['i32']) - ) - .fn(t => { - // Try reading through the pointer. - const typePart = t.params.inferPtrType ? `: ${pointerType(t.params)}` : ''; - const prog = getVarDeclShader(t.params, `let p${typePart} = &x; let read = *p;`); - const ok = true; // We can always read. +g.test('let_ptr_reads'). +desc('Validate reading via ptr when permitted by access mode'). +params((u) => +u // Generate non-handle variables in all valid permutations of address space and access mode. +.combine('addressSpace', kNonHandleAddressSpaces). +expand('explicitSpace', explicitSpaceExpander). +combine('explicitAccess', [false, true]). +expand('accessMode', accessModeExpander). +combine('stage', ['compute']) // Only need to check compute shaders +.combine('inferPtrType', [false, true]). +combine('ptrStoreType', ['i32']) +). +fn((t) => { + // Try reading through the pointer. + const typePart = t.params.inferPtrType ? `: ${pointerType(t.params)}` : ''; + const prog = getVarDeclShader(t.params, `let p${typePart} = &x; let read = *p;`); + const ok = true; // We can always read. - t.expectCompileResult(ok, prog); - }); + t.expectCompileResult(ok, prog); +}); -g.test('let_ptr_writes') - .desc('Validate writing via ptr when permitted by access mode') - .specURL('https://w3.org/TR#ref-ptr-types') - .params(u => - u // Generate non-handle variables in all valid permutations of address space and access mode. - .combine('addressSpace', kNonHandleAddressSpaces) - .expand('explicitSpace', explicitSpaceExpander) - .combine('explicitAccess', [false, true]) - .expand('accessMode', accessModeExpander) - .combine('stage', ['compute']) // Only need to check compute shaders - .combine('inferPtrType', [false, true]) - .combine('ptrStoreType', ['i32']) - ) - .fn(t => { - // Try writing through the pointer. - const typePart = t.params.inferPtrType ? `: ${pointerType(t.params)}` : ''; - const prog = getVarDeclShader(t.params, `let p${typePart} = &x; *p = 42;`); - const ok = supportsWrite(t.params); +g.test('let_ptr_writes'). +desc('Validate writing via ptr when permitted by access mode'). +specURL('https://w3.org/TR#ref-ptr-types'). +params((u) => +u // Generate non-handle variables in all valid permutations of address space and access mode. +.combine('addressSpace', kNonHandleAddressSpaces). +expand('explicitSpace', explicitSpaceExpander). +combine('explicitAccess', [false, true]). +expand('accessMode', accessModeExpander). +combine('stage', ['compute']) // Only need to check compute shaders +.combine('inferPtrType', [false, true]). +combine('ptrStoreType', ['i32']) +). +fn((t) => { + // Try writing through the pointer. + const typePart = t.params.inferPtrType ? `: ${pointerType(t.params)}` : ''; + const prog = getVarDeclShader(t.params, `let p${typePart} = &x; *p = 42;`); + const ok = supportsWrite(t.params); - t.expectCompileResult(ok, prog); - }); + t.expectCompileResult(ok, prog); +}); -g.test('ptr_handle_space_invalid').fn(t => { +g.test('ptr_handle_space_invalid').fn((t) => { t.expectCompileResult(false, 'alias p = ptr;'); }); -g.test('ptr_bad_store_type') - .params(u => u.combine('storeType', ['undeclared', 'clamp', '1'])) - .fn(t => { - t.expectCompileResult(false, `alias p = ptr;`); - }); +g.test('ptr_bad_store_type'). +params((u) => u.combine('storeType', ['undeclared', 'clamp', '1'])). +fn((t) => { + t.expectCompileResult(false, `alias p = ptr;`); +}); -g.test('ptr_address_space_never_uses_access_mode') - .params(u => - u - .combine( - 'addressSpace', - keysOf(kAddressSpaceInfo).filter(i => kAddressSpaceInfo[i].spellAccessMode === 'never') - ) - .combine('accessMode', keysOf(kAccessModeInfo)) - ) - .fn(t => { - const prog = `alias pty = ptr<${t.params.addressSpace},u32,;${t.params.accessMode}>;`; - t.expectCompileResult(false, prog); - }); +g.test('ptr_address_space_never_uses_access_mode'). +params((u) => +u. +combine( + 'addressSpace', + keysOf(kAddressSpaceInfo).filter((i) => kAddressSpaceInfo[i].spellAccessMode === 'never') +). +combine('accessMode', keysOf(kAccessModeInfo)) +). +fn((t) => { + const prog = `alias pty = ptr<${t.params.addressSpace},u32,;${t.params.accessMode}>;`; + t.expectCompileResult(false, prog); +}); const kStoreTypeNotInstantiable = { ptr: 'alias p = ptr>;', @@ -137,14 +140,14 @@ const kStoreTypeNotInstantiable = { privateRTArray: 'alias p = ptr>;', functionRTArray: 'alias p = ptr>;', RTArrayNotLast: 'struct S { a: array, b: i32 } alias p = ptr;', - nestedRTArray: 'struct S { a: array, b: i32 } struct { s: S } alias p = ptr;', + nestedRTArray: 'struct S { a: array, b: i32 } struct { s: S } alias p = ptr;' }; -g.test('ptr_not_instantiable') - .desc( - 'Validate that ptr type must correspond to a variable that could be declared somewhere; test bad cases' - ) - .params(u => u.combine('case', keysOf(kStoreTypeNotInstantiable))) - .fn(t => { - t.expectCompileResult(false, kStoreTypeNotInstantiable[t.params.case]); - }); +g.test('ptr_not_instantiable'). +desc( + 'Validate that ptr type must correspond to a variable that could be declared somewhere; test bad cases' +). +params((u) => u.combine('case', keysOf(kStoreTypeNotInstantiable))). +fn((t) => { + t.expectCompileResult(false, kStoreTypeNotInstantiable[t.params.case]); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/util.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/util.js index 6fee41f7002..23e083b71eb 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/util.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/util.js @@ -1,22 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kAccessModeInfo, kAddressSpaceInfo } from '../../types.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { + + kAccessModeInfo, + kAddressSpaceInfo } from +'../../types.js'; /** An enumerator of shader stages */ + /** The list of all shader stages */ export const kShaderStages = ['vertex', 'fragment', 'compute']; /** * declareEntrypoint emits the WGSL to declare an entry point with the name, stage and body. - * The generated function will have an appropriate return type and return statement, so that @p body + * The generated function will have an appropriate return type and return statement, so that `body` * does not have to change between stage. * @param arg - arg specifies the * optional entry point function name, the shader stage, and the body of the * function, excluding any automatically generated return statements. * @returns the WGSL string for the entry point */ -export function declareEntryPoint(arg) { +export function declareEntryPoint(arg) + + + +{ if (arg.name === undefined) { arg.name = 'main'; } @@ -71,7 +80,10 @@ export function explicitSpaceExpander(p) { * @returns a list of usable access modes under given experiment conditions, or undefined * if none are allowed. */ -export function accessModeExpander(p) { +export function accessModeExpander(p) + + +{ const info = kAddressSpaceInfo[p.addressSpace]; return p.explicitAccess && info.spellAccessMode !== 'never' ? info.accessModes : ['']; } @@ -81,10 +93,15 @@ export function accessModeExpander(p) { * given parameterization */ export function getVarDeclShader( - p, +p, - additionalBody -) { + + + + + +additionalBody) +{ const info = kAddressSpaceInfo[p.addressSpace]; const decl = declareVarX( p.explicitSpace ? p.addressSpace : '', @@ -106,27 +123,41 @@ export function getVarDeclShader( * @returns the WGSL spelling of a pointer type corresponding to a variable * declared with the given parameters. */ -export function pointerType(p) { +export function pointerType(p) + + + + +{ const space = p.explicitSpace ? p.addressSpace : 'function'; const modePart = p.accessMode ? ',' + p.accessMode : ''; return `ptr<${space},${p.ptrStoreType}${modePart}>`; } /** @returns the effective access mode for the given experiment. */ -export function effectiveAccessMode(info, accessMode) { +export function effectiveAccessMode( +info, +accessMode) +{ return accessMode || info.accessModes[0]; // default is first. } /** @returns whether the setup allows reads */ -export function supportsRead(p) { +export function supportsRead(p) + + +{ const info = kAddressSpaceInfo[p.addressSpace]; const mode = effectiveAccessMode(info, p.accessMode); return info.accessModes.includes(mode) && kAccessModeInfo[mode].read; } /** @returns whether the setup allows writes */ -export function supportsWrite(p) { +export function supportsWrite(p) + + +{ const info = kAddressSpaceInfo[p.addressSpace]; const mode = effectiveAccessMode(info, p.accessMode); return info.accessModes.includes(mode) && kAccessModeInfo[mode].write; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/var_access_mode.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/var_access_mode.spec.js index 9ee10da3622..466c9e32cd5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/var_access_mode.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/decl/var_access_mode.spec.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` 7.3 var Declarations The access mode always has a default value, and except for variables in the storage address space, must not be specified in the WGSL source. See §13.3 Address Spaces. -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { kAccessModeInfo, kAddressSpaceInfo } from '../../types.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -16,99 +15,102 @@ import { getVarDeclShader, accessModeExpander, supportsRead, - supportsWrite, -} from './util.js'; + supportsWrite } from + +'./util.js'; // Address spaces that can hold an i32 variable. -const kNonHandleAddressSpaces = keysOf(kAddressSpaceInfo).filter(as => as !== 'handle'); +const kNonHandleAddressSpaces = keysOf(kAddressSpaceInfo).filter( + (as) => as !== 'handle' +); export const g = makeTestGroup(ShaderValidationTest); -g.test('explicit_access_mode') - .desc('Validate uses of an explicit access mode on a var declaration') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls') - .params( - u => - u - .combine('addressSpace', kNonHandleAddressSpaces) - .combine('explicitSpace', [true, false]) - // Only keep cases where: - // *if* the address space must be specified on a var decl (e.g. var) - // then the address space will actually be specified in this test case. - .filter(t => kAddressSpaceInfo[t.addressSpace].spell !== 'must' || t.explicitSpace) - .combine('explicitAccess', [true]) - .combine('accessMode', keysOf(kAccessModeInfo)) - .combine('stage', ['compute']) // Only need to check compute shaders - ) - .fn(t => { - const prog = getVarDeclShader(t.params); - const info = kAddressSpaceInfo[t.params.addressSpace]; +g.test('explicit_access_mode'). +desc('Validate uses of an explicit access mode on a var declaration'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls'). +params( + (u) => + u. + combine('addressSpace', kNonHandleAddressSpaces). + combine('explicitSpace', [true, false]) + // Only keep cases where: + // *if* the address space must be specified on a var decl (e.g. var) + // then the address space will actually be specified in this test case. + .filter((t) => kAddressSpaceInfo[t.addressSpace].spell !== 'must' || t.explicitSpace). + combine('explicitAccess', [true]). + combine('accessMode', keysOf(kAccessModeInfo)). + combine('stage', ['compute']) // Only need to check compute shaders +). +fn((t) => { + const prog = getVarDeclShader(t.params); + const info = kAddressSpaceInfo[t.params.addressSpace]; - const ok = - // The address space must be explicitly specified. - t.params.explicitSpace && - // The address space must allow an access mode to be spelled, and the - // access mode must be in the list of modes for the address space. - info.spellAccessMode !== 'never' && - info.accessModes.includes(t.params.accessMode); + const ok = + // The address space must be explicitly specified. + t.params.explicitSpace && + // The address space must allow an access mode to be spelled, and the + // access mode must be in the list of modes for the address space. + info.spellAccessMode !== 'never' && + info.accessModes.includes(t.params.accessMode); - t.expectCompileResult(ok, prog); - }); + t.expectCompileResult(ok, prog); +}); -g.test('implicit_access_mode') - .desc('Validate an implicit access mode on a var declaration') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls') - .params( - u => - u - .combine('addressSpace', kNonHandleAddressSpaces) - .expand('explicitSpace', explicitSpaceExpander) - .combine('explicitAccess', [false]) - .combine('accessMode', ['']) - .combine('stage', ['compute']) // Only need to check compute shaders - ) - .fn(t => { - const prog = getVarDeclShader(t.params); +g.test('implicit_access_mode'). +desc('Validate an implicit access mode on a var declaration'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls'). +params( + (u) => + u. + combine('addressSpace', kNonHandleAddressSpaces). + expand('explicitSpace', explicitSpaceExpander). + combine('explicitAccess', [false]). + combine('accessMode', ['']). + combine('stage', ['compute']) // Only need to check compute shaders +). +fn((t) => { + const prog = getVarDeclShader(t.params); - // 7.3 var Declarations - // "The access mode always has a default value,.." - const ok = true; + // 7.3 var Declarations + // "The access mode always has a default value,.." + const ok = true; - t.expectCompileResult(ok, prog); - }); + t.expectCompileResult(ok, prog); +}); -g.test('read_access') - .desc('A variable can be read from when the access mode permits') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls') - .params( - u => - u - .combine('addressSpace', kNonHandleAddressSpaces) - .expand('explicitSpace', explicitSpaceExpander) - .combine('explicitAccess', [false, true]) - .expand('accessMode', accessModeExpander) - .combine('stage', ['compute']) // Only need to check compute shaders - ) - .fn(t => { - const prog = getVarDeclShader(t.params, 'let copy = x;'); - const ok = supportsRead(t.params); - t.expectCompileResult(ok, prog); - }); +g.test('read_access'). +desc('A variable can be read from when the access mode permits'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls'). +params( + (u) => + u. + combine('addressSpace', kNonHandleAddressSpaces). + expand('explicitSpace', explicitSpaceExpander). + combine('explicitAccess', [false, true]). + expand('accessMode', accessModeExpander). + combine('stage', ['compute']) // Only need to check compute shaders +). +fn((t) => { + const prog = getVarDeclShader(t.params, 'let copy = x;'); + const ok = supportsRead(t.params); + t.expectCompileResult(ok, prog); +}); -g.test('write_access') - .desc('A variable can be written to when the access mode permits') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls') - .params( - u => - u - .combine('addressSpace', kNonHandleAddressSpaces) - .expand('explicitSpace', explicitSpaceExpander) - .combine('explicitAccess', [false, true]) - .expand('accessMode', accessModeExpander) - .combine('stage', ['compute']) // Only need to check compute shaders - ) - .fn(t => { - const prog = getVarDeclShader(t.params, 'x = 0;'); - const ok = supportsWrite(t.params); - t.expectCompileResult(ok, prog); - }); +g.test('write_access'). +desc('A variable can be written to when the access mode permits'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls'). +params( + (u) => + u. + combine('addressSpace', kNonHandleAddressSpaces). + expand('explicitSpace', explicitSpaceExpander). + combine('explicitAccess', [false, true]). + expand('accessMode', accessModeExpander). + combine('stage', ['compute']) // Only need to check compute shaders +). +fn((t) => { + const prog = getVarDeclShader(t.params, 'x = 0;'); + const ok = supportsWrite(t.params); + t.expectCompileResult(ok, prog); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/access/vector.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/access/vector.spec.js index 59961c89da5..7408ea2b041 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/access/vector.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/access/vector.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for vector accesses -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../../shader_validation_test.js'; @@ -13,30 +12,30 @@ const kCases = { // indexing with literal literal_0: { wgsl: 'let r : T = v[0];', ok: true }, literal_1: { wgsl: 'let r : T = v[1];', ok: true }, - literal_2: { wgsl: 'let r : T = v[2];', ok: width => width > 2 }, - literal_3: { wgsl: 'let r : T = v[3];', ok: width => width > 3 }, + literal_2: { wgsl: 'let r : T = v[2];', ok: (width) => width > 2 }, + literal_3: { wgsl: 'let r : T = v[3];', ok: (width) => width > 3 }, literal_0i: { wgsl: 'let r : T = v[0i];', ok: true }, literal_1i: { wgsl: 'let r : T = v[1i];', ok: true }, - literal_2i: { wgsl: 'let r : T = v[2i];', ok: width => width > 2 }, - literal_3i: { wgsl: 'let r : T = v[3i];', ok: width => width > 3 }, + literal_2i: { wgsl: 'let r : T = v[2i];', ok: (width) => width > 2 }, + literal_3i: { wgsl: 'let r : T = v[3i];', ok: (width) => width > 3 }, literal_0u: { wgsl: 'let r : T = v[0u];', ok: true }, literal_1u: { wgsl: 'let r : T = v[1u];', ok: true }, - literal_2u: { wgsl: 'let r : T = v[2u];', ok: width => width > 2 }, - literal_3u: { wgsl: 'let r : T = v[3u];', ok: width => width > 3 }, + literal_2u: { wgsl: 'let r : T = v[2u];', ok: (width) => width > 2 }, + literal_3u: { wgsl: 'let r : T = v[3u];', ok: (width) => width > 3 }, // indexing with 'const' variable const_0: { wgsl: 'const i = 0; let r : T = v[i];', ok: true }, const_1: { wgsl: 'const i = 1; let r : T = v[i];', ok: true }, - const_2: { wgsl: 'const i = 2; let r : T = v[i];', ok: width => width > 2 }, - const_3: { wgsl: 'const i = 3; let r : T = v[i];', ok: width => width > 3 }, + const_2: { wgsl: 'const i = 2; let r : T = v[i];', ok: (width) => width > 2 }, + const_3: { wgsl: 'const i = 3; let r : T = v[i];', ok: (width) => width > 3 }, const_0i: { wgsl: 'const i = 0i; let r : T = v[i];', ok: true }, const_1i: { wgsl: 'const i = 1i; let r : T = v[i];', ok: true }, - const_2i: { wgsl: 'const i = 2i; let r : T = v[i];', ok: width => width > 2 }, - const_3i: { wgsl: 'const i = 3i; let r : T = v[i];', ok: width => width > 3 }, + const_2i: { wgsl: 'const i = 2i; let r : T = v[i];', ok: (width) => width > 2 }, + const_3i: { wgsl: 'const i = 3i; let r : T = v[i];', ok: (width) => width > 3 }, const_0u: { wgsl: 'const i = 0u; let r : T = v[i];', ok: true }, const_1u: { wgsl: 'const i = 1u; let r : T = v[i];', ok: true }, - const_2u: { wgsl: 'const i = 2u; let r : T = v[i];', ok: width => width > 2 }, - const_3u: { wgsl: 'const i = 3u; let r : T = v[i];', ok: width => width > 3 }, + const_2u: { wgsl: 'const i = 2u; let r : T = v[i];', ok: (width) => width > 2 }, + const_3u: { wgsl: 'const i = 3u; let r : T = v[i];', ok: (width) => width > 3 }, // indexing with 'let' variable let_0: { wgsl: 'let i = 0; let r : T = v[i];', ok: true }, @@ -69,86 +68,86 @@ const kCases = { // indexing with const expression const_expr_0: { wgsl: 'let r : T = v[0 / 2];', ok: true }, const_expr_1: { wgsl: 'let r : T = v[2 / 2];', ok: true }, - const_expr_2: { wgsl: 'let r : T = v[4 / 2];', ok: width => width > 2 }, - const_expr_3: { wgsl: 'let r : T = v[6 / 2];', ok: width => width > 3 }, + const_expr_2: { wgsl: 'let r : T = v[4 / 2];', ok: (width) => width > 2 }, + const_expr_3: { wgsl: 'let r : T = v[6 / 2];', ok: (width) => width > 3 }, const_expr_2_via_trig: { wgsl: 'let r : T = v[i32(tan(1.10714872) + 0.5)];', - ok: width => width > 2, + ok: (width) => width > 2 }, const_expr_3_via_trig: { wgsl: 'let r : T = v[u32(tan(1.24904577) + 0.5)];', - ok: width => width > 3, + ok: (width) => width > 3 }, const_expr_2_via_vec2: { wgsl: 'let r : T = v[vec2(3, 2)[1]];', - ok: width => width > 2, + ok: (width) => width > 2 }, const_expr_3_via_vec2: { wgsl: 'let r : T = v[vec2(3, 2).x];', - ok: width => width > 3, + ok: (width) => width > 3 }, const_expr_2_via_vec2u: { wgsl: 'let r : T = v[vec2u(3, 2)[1]];', - ok: width => width > 2, + ok: (width) => width > 2 }, const_expr_3_via_vec2i: { wgsl: 'let r : T = v[vec2i(3, 2).x];', - ok: width => width > 3, + ok: (width) => width > 3 }, const_expr_2_via_array: { wgsl: 'let r : T = v[array(3, 2)[1]];', - ok: width => width > 2, + ok: (width) => width > 2 }, const_expr_3_via_array: { wgsl: 'let r : T = v[array(3, 2)[0]];', - ok: width => width > 3, + ok: (width) => width > 3 }, const_expr_2_via_struct: { wgsl: 'let r : T = v[S(2).i];', - ok: width => width > 2, + ok: (width) => width > 2 }, const_expr_3_via_struct: { wgsl: 'let r : T = v[S(3).i];', - ok: width => width > 3, + ok: (width) => width > 3 }, // single element convenience name accesses x: { wgsl: 'let r : T = v.x;', ok: true }, y: { wgsl: 'let r : T = v.y;', ok: true }, - z: { wgsl: 'let r : T = v.z;', ok: width => width > 2 }, - w: { wgsl: 'let r : T = v.w;', ok: width => width > 3 }, + z: { wgsl: 'let r : T = v.z;', ok: (width) => width > 2 }, + w: { wgsl: 'let r : T = v.w;', ok: (width) => width > 3 }, r: { wgsl: 'let r : T = v.r;', ok: true }, g: { wgsl: 'let r : T = v.g;', ok: true }, - b: { wgsl: 'let r : T = v.b;', ok: width => width > 2 }, - a: { wgsl: 'let r : T = v.a;', ok: width => width > 3 }, + b: { wgsl: 'let r : T = v.b;', ok: (width) => width > 2 }, + a: { wgsl: 'let r : T = v.a;', ok: (width) => width > 3 }, // swizzles xy: { wgsl: 'let r : vec2 = v.xy;', ok: true }, yx: { wgsl: 'let r : vec2 = v.yx;', ok: true }, xyx: { wgsl: 'let r : vec3 = v.xyx;', ok: true }, - xyz: { wgsl: 'let r : vec3 = v.xyz;', ok: width => width > 2 }, - zyx: { wgsl: 'let r : vec3 = v.zyx;', ok: width => width > 2 }, + xyz: { wgsl: 'let r : vec3 = v.xyz;', ok: (width) => width > 2 }, + zyx: { wgsl: 'let r : vec3 = v.zyx;', ok: (width) => width > 2 }, xyxy: { wgsl: 'let r : vec4 = v.xyxy;', ok: true }, - xyxz: { wgsl: 'let r : vec4 = v.xyxz;', ok: width => width > 2 }, - xyzw: { wgsl: 'let r : vec4 = v.xyzw;', ok: width => width > 3 }, - yxwz: { wgsl: 'let r : vec4 = v.yxwz;', ok: width => width > 3 }, + xyxz: { wgsl: 'let r : vec4 = v.xyxz;', ok: (width) => width > 2 }, + xyzw: { wgsl: 'let r : vec4 = v.xyzw;', ok: (width) => width > 3 }, + yxwz: { wgsl: 'let r : vec4 = v.yxwz;', ok: (width) => width > 3 }, rg: { wgsl: 'let r : vec2 = v.rg;', ok: true }, gr: { wgsl: 'let r : vec2 = v.gr;', ok: true }, rgg: { wgsl: 'let r : vec3 = v.rgg;', ok: true }, - rgb: { wgsl: 'let r : vec3 = v.rgb;', ok: width => width > 2 }, - grb: { wgsl: 'let r : vec3 = v.grb;', ok: width => width > 2 }, - rgbr: { wgsl: 'let r : vec4 = v.rgbr;', ok: width => width > 2 }, - rgba: { wgsl: 'let r : vec4 = v.rgba;', ok: width => width > 3 }, - gbra: { wgsl: 'let r : vec4 = v.gbra;', ok: width => width > 3 }, + rgb: { wgsl: 'let r : vec3 = v.rgb;', ok: (width) => width > 2 }, + grb: { wgsl: 'let r : vec3 = v.grb;', ok: (width) => width > 2 }, + rgbr: { wgsl: 'let r : vec4 = v.rgbr;', ok: (width) => width > 2 }, + rgba: { wgsl: 'let r : vec4 = v.rgba;', ok: (width) => width > 3 }, + gbra: { wgsl: 'let r : vec4 = v.gbra;', ok: (width) => width > 3 }, // swizzle chains xy_yx: { wgsl: 'let r : vec2 = v.xy.yx;', ok: true }, xyx_xxy: { wgsl: 'let r : vec3 = v.xyx.xxy;', ok: true }, - xyz_zyx: { wgsl: 'let r : vec3 = v.xyz.zyx;', ok: width => width > 2 }, + xyz_zyx: { wgsl: 'let r : vec3 = v.xyz.zyx;', ok: (width) => width > 2 }, xyxy_rrgg: { wgsl: 'let r : vec4 = v.xyxy.rrgg;', ok: true }, - rbrg_xyzw: { wgsl: 'let r : vec4 = v.rbrg.xyzw;', ok: width => width > 2 }, - xyxz_rbg_yx: { wgsl: 'let r : vec2 = v.xyxz.rbg.yx;', ok: width => width > 2 }, - wxyz_bga_xy: { wgsl: 'let r : vec2 = v.wxyz.bga.xy;', ok: width => width > 3 }, + rbrg_xyzw: { wgsl: 'let r : vec4 = v.rbrg.xyzw;', ok: (width) => width > 2 }, + xyxz_rbg_yx: { wgsl: 'let r : vec2 = v.xyxz.rbg.yx;', ok: (width) => width > 2 }, + wxyz_bga_xy: { wgsl: 'let r : vec2 = v.wxyz.bga.xy;', ok: (width) => width > 3 }, // error: invalid convenience letterings xq: { wgsl: 'let r : vec2 = v.xq;', ok: false }, @@ -172,27 +171,27 @@ const kCases = { // error: invalid index type float_idx: { wgsl: 'let r : T = v[1.0];', ok: false }, bool_idx: { wgsl: 'let r : T = v[true];', ok: false }, - array_idx: { wgsl: 'let r : T = v[array()];', ok: false }, + array_idx: { wgsl: 'let r : T = v[array()];', ok: false } }; -g.test('vector') - .desc('Tests validation of vector indexed and swizzles') - .params(u => - u - .combine('case', keysOf(kCases)) // - .combine('vector_decl', ['const', 'let', 'var', 'param']) - .combine('vector_width', [2, 3, 4]) - .combine('element_type', ['i32', 'u32', 'f32', 'f16', 'bool']) - ) - .beforeAllSubcases(t => { - if (t.params.element_type === 'f16') { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const c = kCases[t.params.case]; - const enables = t.params.element_type === 'f16' ? 'enable f16;' : ''; - const prefix = `${enables} +g.test('vector'). +desc('Tests validation of vector indexed and swizzles'). +params((u) => +u. +combine('case', keysOf(kCases)) // +.combine('vector_decl', ['const', 'let', 'var', 'param']). +combine('vector_width', [2, 3, 4]). +combine('element_type', ['i32', 'u32', 'f32', 'f16', 'bool']) +). +beforeAllSubcases((t) => { + if (t.params.element_type === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const c = kCases[t.params.case]; + const enables = t.params.element_type === 'f16' ? 'enable f16;' : ''; + const prefix = `${enables} alias T = ${t.params.element_type}; @@ -202,9 +201,9 @@ struct S { @compute @workgroup_size(1) `; - const code = - t.params.vector_decl === 'param' - ? `${prefix} + const code = + t.params.vector_decl === 'param' ? + `${prefix} fn main() { F(vec${t.params.vector_width}()); } @@ -212,13 +211,13 @@ fn main() { fn F(v : vec${t.params.vector_width}) { ${c.wgsl} } -` - : `${prefix} +` : + `${prefix} fn main() { ${t.params.vector_decl} v = vec${t.params.vector_width}(); ${c.wgsl} } `; - const pass = typeof c.ok === 'function' ? c.ok(t.params.vector_width) : c.ok; - t.expectCompileResult(pass, code); - }); + const pass = typeof c.ok === 'function' ? c.ok(t.params.vector_width) : c.ok; + t.expectCompileResult(pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/binary/bitwise_shift.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/binary/bitwise_shift.spec.js index 5c29a1858cd..ff3e1ae5258 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/binary/bitwise_shift.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/binary/bitwise_shift.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for the bitwise shift binary expression operations -`; -import { makeTestGroup } from '../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); @@ -23,145 +22,145 @@ function vectorize(v, size) { } const kLeftShiftCases = [ - // rhs >= bitwidth fails - { lhs: `0u`, rhs: `31u`, pass: true }, - { lhs: `0u`, rhs: `32u`, pass: false }, - { lhs: `0u`, rhs: `33u`, pass: false }, - { lhs: `0u`, rhs: `1000u`, pass: false }, - { lhs: `0u`, rhs: `0xFFFFFFFFu`, pass: false }, +// rhs >= bitwidth fails +{ lhs: `0u`, rhs: `31u`, pass: true }, +{ lhs: `0u`, rhs: `32u`, pass: false }, +{ lhs: `0u`, rhs: `33u`, pass: false }, +{ lhs: `0u`, rhs: `1000u`, pass: false }, +{ lhs: `0u`, rhs: `0xFFFFFFFFu`, pass: false }, - { lhs: `0i`, rhs: `31u`, pass: true }, - { lhs: `0i`, rhs: `32u`, pass: false }, - { lhs: `0i`, rhs: `33u`, pass: false }, - { lhs: `0i`, rhs: `1000u`, pass: false }, - { lhs: `0i`, rhs: `0xFFFFFFFFu`, pass: false }, +{ lhs: `0i`, rhs: `31u`, pass: true }, +{ lhs: `0i`, rhs: `32u`, pass: false }, +{ lhs: `0i`, rhs: `33u`, pass: false }, +{ lhs: `0i`, rhs: `1000u`, pass: false }, +{ lhs: `0i`, rhs: `0xFFFFFFFFu`, pass: false }, - // Signed overflow (sign change) - { lhs: `${0b01000000000000000000000000000000}i`, rhs: `1u`, pass: false }, - { lhs: `${0b01111111111111111111111111111111}i`, rhs: `1u`, pass: false }, - { lhs: `${0b00000000000000000000000000000001}i`, rhs: `31u`, pass: false }, - // Same cases should pass if lhs is unsigned - { lhs: `${0b01000000000000000000000000000000}u`, rhs: `1u`, pass: true }, - { lhs: `${0b01111111111111111111111111111111}u`, rhs: `1u`, pass: true }, - { lhs: `${0b00000000000000000000000000000001}u`, rhs: `31u`, pass: true }, +// Signed overflow (sign change) +{ lhs: `${0b01000000000000000000000000000000}i`, rhs: `1u`, pass: false }, +{ lhs: `${0b01111111111111111111111111111111}i`, rhs: `1u`, pass: false }, +{ lhs: `${0b00000000000000000000000000000001}i`, rhs: `31u`, pass: false }, +// Same cases should pass if lhs is unsigned +{ lhs: `${0b01000000000000000000000000000000}u`, rhs: `1u`, pass: true }, +{ lhs: `${0b01111111111111111111111111111111}u`, rhs: `1u`, pass: true }, +{ lhs: `${0b00000000000000000000000000000001}u`, rhs: `31u`, pass: true }, - // Unsigned overflow - { lhs: `${0b11000000000000000000000000000000}u`, rhs: `1u`, pass: false }, - { lhs: `${0b11111111111111111111111111111111}u`, rhs: `1u`, pass: false }, - { lhs: `${0b11111111111111111111111111111111}u`, rhs: `31u`, pass: false }, - // Same cases should pass if lhs is signed - { lhs: `${signed(0b11000000000000000000000000000000)}i`, rhs: `1u`, pass: true }, - { lhs: `${signed(0b11111111111111111111111111111111)}i`, rhs: `1u`, pass: true }, - { lhs: `${signed(0b11111111111111111111111111111111)}i`, rhs: `31u`, pass: true }, +// Unsigned overflow +{ lhs: `${0b11000000000000000000000000000000}u`, rhs: `1u`, pass: false }, +{ lhs: `${0b11111111111111111111111111111111}u`, rhs: `1u`, pass: false }, +{ lhs: `${0b11111111111111111111111111111111}u`, rhs: `31u`, pass: false }, +// Same cases should pass if lhs is signed +{ lhs: `${signed(0b11000000000000000000000000000000)}i`, rhs: `1u`, pass: true }, +{ lhs: `${signed(0b11111111111111111111111111111111)}i`, rhs: `1u`, pass: true }, +{ lhs: `${signed(0b11111111111111111111111111111111)}i`, rhs: `31u`, pass: true }, - // Shift by negative is an error - { lhs: `1`, rhs: `-1`, pass: false }, - { lhs: `1i`, rhs: `-1`, pass: false }, - { lhs: `1u`, rhs: `-1`, pass: false }, -]; +// Shift by negative is an error +{ lhs: `1`, rhs: `-1`, pass: false }, +{ lhs: `1i`, rhs: `-1`, pass: false }, +{ lhs: `1u`, rhs: `-1`, pass: false }]; -g.test('shift_left_concrete') - .desc('Tests validation of binary left shift of concrete values') - .params(u => - u - .combine('case', kLeftShiftCases) // - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(t => { - const lhs = t.params.case.lhs; - const rhs = t.params.case.rhs; - const vec_size = t.params.vectorize; - const code = ` +g.test('shift_left_concrete'). +desc('Tests validation of binary left shift of concrete values'). +params((u) => +u. +combine('case', kLeftShiftCases) // +.combine('vectorize', [undefined, 2, 3, 4]) +). +fn((t) => { + const lhs = t.params.case.lhs; + const rhs = t.params.case.rhs; + const vec_size = t.params.vectorize; + + const code = ` @compute @workgroup_size(1) fn main() { const r = ${vectorize(lhs, vec_size)} << ${vectorize(rhs, vec_size)}; } `; - t.expectCompileResult(t.params.case.pass, code); - }); + t.expectCompileResult(t.params.case.pass, code); +}); -g.test('shift_left_vec_size_mismatch') - .desc('Tests validation of binary left shift of vectors with mismatched sizes') - .params(u => - u - .combine('vectorize_lhs', [2, 3, 4]) // - .combine('vectorize_rhs', [2, 3, 4]) - ) - .fn(t => { - const lhs = `1`; - const rhs = `1`; - const lhs_vec_size = t.params.vectorize_lhs; - const rhs_vec_size = t.params.vectorize_rhs; - const code = ` +g.test('shift_left_vec_size_mismatch'). +desc('Tests validation of binary left shift of vectors with mismatched sizes'). +params((u) => +u. +combine('vectorize_lhs', [2, 3, 4]) // +.combine('vectorize_rhs', [2, 3, 4]) +). +fn((t) => { + const lhs = `1`; + const rhs = `1`; + const lhs_vec_size = t.params.vectorize_lhs; + const rhs_vec_size = t.params.vectorize_rhs; + const code = ` @compute @workgroup_size(1) fn main() { const r = ${vectorize(lhs, lhs_vec_size)} << ${vectorize(rhs, rhs_vec_size)}; } `; - const pass = lhs_vec_size === rhs_vec_size; - t.expectCompileResult(pass, code); - }); + const pass = lhs_vec_size === rhs_vec_size; + t.expectCompileResult(pass, code); +}); const kRightShiftCases = [ - // rhs >= bitwidth fails - { lhs: `0u`, rhs: `31u`, pass: true }, - { lhs: `0u`, rhs: `32u`, pass: false }, - { lhs: `0u`, rhs: `33u`, pass: false }, - { lhs: `0u`, rhs: `1000u`, pass: false }, - { lhs: `0u`, rhs: `0xFFFFFFFFu`, pass: false }, +// rhs >= bitwidth fails +{ lhs: `0u`, rhs: `31u`, pass: true }, +{ lhs: `0u`, rhs: `32u`, pass: false }, +{ lhs: `0u`, rhs: `33u`, pass: false }, +{ lhs: `0u`, rhs: `1000u`, pass: false }, +{ lhs: `0u`, rhs: `0xFFFFFFFFu`, pass: false }, - { lhs: `0i`, rhs: `31u`, pass: true }, - { lhs: `0i`, rhs: `32u`, pass: false }, - { lhs: `0i`, rhs: `33u`, pass: false }, - { lhs: `0i`, rhs: `1000u`, pass: false }, - { lhs: `0i`, rhs: `0xFFFFFFFFu`, pass: false }, +{ lhs: `0i`, rhs: `31u`, pass: true }, +{ lhs: `0i`, rhs: `32u`, pass: false }, +{ lhs: `0i`, rhs: `33u`, pass: false }, +{ lhs: `0i`, rhs: `1000u`, pass: false }, +{ lhs: `0i`, rhs: `0xFFFFFFFFu`, pass: false }, - // Shift by negative is an error - { lhs: `1`, rhs: `-1`, pass: false }, - { lhs: `1i`, rhs: `-1`, pass: false }, - { lhs: `1u`, rhs: `-1`, pass: false }, -]; +// Shift by negative is an error +{ lhs: `1`, rhs: `-1`, pass: false }, +{ lhs: `1i`, rhs: `-1`, pass: false }, +{ lhs: `1u`, rhs: `-1`, pass: false }]; -g.test('shift_right_concrete') - .desc('Tests validation of binary right shift of concrete values') - .params(u => - u - .combine('case', kRightShiftCases) // - .combine('vectorize', [undefined, 2, 3, 4]) - ) - .fn(t => { - const lhs = t.params.case.lhs; - const rhs = t.params.case.rhs; - const vec_size = t.params.vectorize; - const code = ` +g.test('shift_right_concrete'). +desc('Tests validation of binary right shift of concrete values'). +params((u) => +u. +combine('case', kRightShiftCases) // +.combine('vectorize', [undefined, 2, 3, 4]) +). +fn((t) => { + const lhs = t.params.case.lhs; + const rhs = t.params.case.rhs; + const vec_size = t.params.vectorize; + + const code = ` @compute @workgroup_size(1) fn main() { const r = ${vectorize(lhs, vec_size)} >> ${vectorize(rhs, vec_size)}; } `; - t.expectCompileResult(t.params.case.pass, code); - }); + t.expectCompileResult(t.params.case.pass, code); +}); -g.test('shift_right_vec_size_mismatch') - .desc('Tests validation of binary right shift of vectors with mismatched sizes') - .params(u => - u - .combine('vectorize_lhs', [2, 3, 4]) // - .combine('vectorize_rhs', [2, 3, 4]) - ) - .fn(t => { - const lhs = `1`; - const rhs = `1`; - const lhs_vec_size = t.params.vectorize_lhs; - const rhs_vec_size = t.params.vectorize_rhs; - const code = ` +g.test('shift_right_vec_size_mismatch'). +desc('Tests validation of binary right shift of vectors with mismatched sizes'). +params((u) => +u. +combine('vectorize_lhs', [2, 3, 4]) // +.combine('vectorize_rhs', [2, 3, 4]) +). +fn((t) => { + const lhs = `1`; + const rhs = `1`; + const lhs_vec_size = t.params.vectorize_lhs; + const rhs_vec_size = t.params.vectorize_rhs; + const code = ` @compute @workgroup_size(1) fn main() { const r = ${vectorize(lhs, lhs_vec_size)} >> ${vectorize(rhs, rhs_vec_size)}; } `; - const pass = lhs_vec_size === rhs_vec_size; - t.expectCompileResult(pass, code); - }); + const pass = lhs_vec_size === rhs_vec_size; + t.expectCompileResult(pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/abs.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/abs.spec.js index 0c0ade4df7d..255c8ab2e24 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/abs.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/abs.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'abs'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'abs';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -9,47 +8,47 @@ import { keysOf, objectsToRecord } from '../../../../../../common/util/data_tabl import { TypeF16, elementType, - kAllFloatAndIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllFloatAndIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatAndIntegerScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() never errors ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // abs() should never error - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // abs() should never error + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acos.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acos.spec.js index 788b32cb84f..d7caeca828b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acos.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acos.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'acos'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'acos';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { @@ -21,59 +20,59 @@ import { kMinusTwoToTwo, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = Math.abs(t.params.value) <= 1; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = Math.abs(t.params.value) <= 1; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acosh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acosh.spec.js index b3cb566eec9..037d058fb6e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acosh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/acosh.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'acosh'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'acosh';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -22,60 +21,60 @@ import { kMinusTwoToTwo, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(fullRangeForType(kValuesTypes[u.type]), kMinusTwoToTwo)) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable(Math.acosh(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(fullRangeForType(kValuesTypes[u.type]), kMinusTwoToTwo)) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(Math.acosh(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asin.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asin.spec.js index 5221aff37a2..ec5c51fe15b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asin.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asin.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'asin'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'asin';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { @@ -21,59 +20,59 @@ import { kMinusTwoToTwo, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = Math.abs(t.params.value) <= 1; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = Math.abs(t.params.value) <= 1; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asinh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asinh.spec.js index 6b4af70cb35..ccc73de0fce 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asinh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/asinh.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'asinh'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'asinh';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { linearRange } from '../../../../../util/math.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -22,62 +21,62 @@ import { kConstantAndOverrideStages, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => - unique(fullRangeForType(kValuesTypes[u.type]), linearRange(-2000, 2000, 10)) - ) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable(Math.asinh(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => +unique(fullRangeForType(kValuesTypes[u.type]), linearRange(-2000, 2000, 10)) +) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(Math.asinh(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan.spec.js index e4d280a437e..2cd971e678d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'atan'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'atan';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,9 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; -import { fpTraitsFor } from '../../../../../util/floating_point.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { @@ -22,61 +20,60 @@ import { kMinus3PiTo3Pi, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const smallestPositive = fpTraitsFor(elementType(type)).constants().positive.min; - const expectedResult = Math.abs(Math.cos(t.params.value)) > smallestPositive; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = true; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan2.spec.js index f7048707cbd..e0fded50b14 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atan2.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'atan2'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'atan2';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -13,96 +12,95 @@ import { VectorType, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, - kMinus3PiTo3Pi, + kSparseMinus3PiTo3Pi, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('y', u => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type], 4))) - .expand('x', u => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type], 4))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable( - Math.abs(Math.atan2(t.params.y, t.params.x)), - elementType(type) - ); - - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.y), type.create(t.params.x)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('y', (u) => unique(kSparseMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type], 4))). +expand('x', (u) => unique(kSparseMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type], 4))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable( + Math.abs(Math.atan2(t.params.y, t.params.x)), + elementType(type) + ); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.y), type.create(t.params.x)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument_y') - .desc( - ` +g.test('integer_argument_y'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const yTy = kIntegerArgumentTypes[t.params.type]; - const xTy = yTy instanceof Vector ? new VectorType(yTy.size, TypeF32) : TypeF32; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ yTy === TypeF32, - [yTy.create(1), xTy.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const yTy = kIntegerArgumentTypes[t.params.type]; + const xTy = yTy instanceof Vector ? new VectorType(yTy.size, TypeF32) : TypeF32; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */yTy === TypeF32, + [yTy.create(1), xTy.create(1)], + 'constant' + ); +}); -g.test('integer_argument_x') - .desc( - ` +g.test('integer_argument_x'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const xTy = kIntegerArgumentTypes[t.params.type]; - const yTy = xTy instanceof Vector ? new VectorType(xTy.size, TypeF32) : TypeF32; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ xTy === TypeF32, - [yTy.create(1), xTy.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const xTy = kIntegerArgumentTypes[t.params.type]; + const yTy = xTy instanceof Vector ? new VectorType(xTy.size, TypeF32) : TypeF32; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */xTy === TypeF32, + [yTy.create(1), xTy.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atanh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atanh.spec.js index 10ec7a6d093..e252551219b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atanh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atanh.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'atanh'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'atanh';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { @@ -21,59 +20,59 @@ import { kMinusTwoToTwo, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = Math.abs(t.params.value) < 1; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = Math.abs(t.params.value) < 1; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atomics.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atomics.spec.js index fb3bf6bd404..3d51650c95d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atomics.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/atomics.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for atomic builtins. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -20,52 +19,52 @@ const kAtomicOps = { load: { src: 'atomicLoad(&a)' }, store: { src: 'atomicStore(&a,1)' }, exchange: { src: 'atomicExchange(&a,1)' }, - compareexchangeweak: { src: 'atomicCompareExchangeWeak(&a,1,1)' }, + compareexchangeweak: { src: 'atomicCompareExchangeWeak(&a,1,1)' } }; -g.test('stage') - .specURL('https://www.w3.org/TR/WGSL/#atomic-rmw') - .desc( - ` +g.test('stage'). +specURL('https://www.w3.org/TR/WGSL/#atomic-rmw'). +desc( + ` Atomic built-in functions must not be used in a vertex shader stage. ` - ) - .params(u => - u - .combine('stage', ['fragment', 'vertex', 'compute']) // - .combine('atomicOp', keysOf(kAtomicOps)) - ) - .fn(t => { - const atomicOp = kAtomicOps[t.params.atomicOp].src; - let code = ` +). +params((u) => +u. +combine('stage', ['fragment', 'vertex', 'compute']) // +.combine('atomicOp', keysOf(kAtomicOps)) +). +fn((t) => { + const atomicOp = kAtomicOps[t.params.atomicOp].src; + let code = ` @group(0) @binding(0) var a: atomic; `; - switch (t.params.stage) { - case 'compute': - code += ` + switch (t.params.stage) { + case 'compute': + code += ` @compute @workgroup_size(1,1,1) fn main() { ${atomicOp}; }`; - break; + break; - case 'fragment': - code += ` + case 'fragment': + code += ` @fragment fn main() -> @location(0) vec4 { ${atomicOp}; return vec4(); }`; - break; + break; - case 'vertex': - code += ` + case 'vertex': + code += ` @vertex fn vmain() -> @builtin(position) vec4 { ${atomicOp}; return vec4(); }`; - break; - } + break; + } - const pass = t.params.stage !== 'vertex'; - t.expectCompileResult(pass, code); - }); + const pass = t.params.stage !== 'vertex'; + t.expectCompileResult(pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/bitcast.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/bitcast.spec.js index 06281d06e77..71ef456929d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/bitcast.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/bitcast.spec.js @@ -1,10 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation negative tests for bitcast builtins. -`; -import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { assert } from '../../../../../../common/util/util.js'; import { kBit } from '../../../../../util/constants.js'; import { linearRange } from '../../../../../util/math.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -25,105 +25,205 @@ const kVectorCases = { v4_b0: { width: 4, badIndex: 0 }, v4_b1: { width: 4, badIndex: 1 }, v4_b2: { width: 4, badIndex: 2 }, - v4_b3: { width: 4, badIndex: 3 }, + v4_b3: { width: 4, badIndex: 3 } }; const numNaNs = 4; const f32InfAndNaNInU32 = [ - // Cover NaNs evenly in integer space. - // The positive NaN with the lowest integer representation is the integer - // for infinity, plus one. - // The positive NaN with the highest integer representation is i32.max (!) - ...linearRange(kBit.f32.positive.infinity + 1, kBit.i32.positive.max, numNaNs), - // The negative NaN with the lowest integer representation is the integer - // for negative infinity, plus one. - // The negative NaN with the highest integer representation is u32.max (!) - ...linearRange(kBit.f32.negative.infinity + 1, kBit.u32.max, numNaNs), - kBit.f32.positive.infinity, - kBit.f32.negative.infinity, -]; +// Cover NaNs evenly in integer space. +// The positive NaN with the lowest integer representation is the integer +// for infinity, plus one. +// The positive NaN with the highest integer representation is i32.max (!) +...linearRange(kBit.f32.positive.infinity + 1, kBit.i32.positive.max, numNaNs), +// The negative NaN with the lowest integer representation is the integer +// for negative infinity, plus one. +// The negative NaN with the highest integer representation is u32.max (!) +...linearRange(kBit.f32.negative.infinity + 1, kBit.u32.max, numNaNs), +kBit.f32.positive.infinity, +kBit.f32.negative.infinity]; -g.test('bad_const_to_f32') - .specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation') - .desc( - ` + +g.test('bad_const_to_f32'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` It is a shader-creation error if any const-expression of floating-point type evaluates to NaN or infinity. ` - ) - .params(u => - u - .combine('fromScalarType', ['i32', 'u32']) - .combine('vectorize', keysOf(kVectorCases)) - .beginSubcases() - .combine('bitBadValue', [...f32InfAndNaNInU32]) - ) - .fn(t => { - // For scalar cases, generate code like: - // const f = bitcast(i32(u32(0x7f800000))); - // For vector cases, generate code where one component is bad. In this case - // width=4 and badIndex=2 - // const f = bitcast(vec4<32>(0,0,i32(u32(0x7f800000)),0)); - const vectorize = kVectorCases[t.params.vectorize]; - const width = vectorize.width; - const badIndex = vectorize.badIndex; - const badScalar = `${t.params.fromScalarType}(u32(${t.params.bitBadValue}))`; - const destType = width === 1 ? 'f32' : `vec${width}f`; - const srcType = - width === 1 ? t.params.fromScalarType : `vec${width}<${t.params.fromScalarType}>`; - const components = [...Array(width).keys()] - .map(i => (i === badIndex ? badScalar : '0')) - .join(','); - const code = `const f = bitcast<${destType}>(${srcType}(${components}));`; - t.expectCompileResult(false, code); - }); +). +params((u) => +u. +combine('fromScalarType', ['i32', 'u32']). +combine('vectorize', keysOf(kVectorCases)). +beginSubcases() +// Also validate that testcases without using bad bit can pass the exam +.combine('useBadValue', [true, false]). +expand('bitBadValue', (p) => +p.useBadValue ? [...f32InfAndNaNInU32] : [0] +) +). +fn((t) => { + // For scalar cases, generate code like: + // const f = bitcast(i32(u32(0x7f800000))); + // For vector cases, generate code where one component is bad. In this case + // width=4 and badIndex=2 + // const f = bitcast(vec4<32>(0,0,i32(u32(0x7f800000)),0)); + const vectorize = kVectorCases[t.params.vectorize]; + const width = vectorize.width; + const badIndex = vectorize.badIndex; + const badScalar = `${t.params.fromScalarType}(u32(${t.params.bitBadValue}))`; + const destType = width === 1 ? 'f32' : `vec${width}f`; + const srcType = + width === 1 ? t.params.fromScalarType : `vec${width}<${t.params.fromScalarType}>`; + const components = [...Array(width).keys()]. + map((i) => i === badIndex ? badScalar : '0'). + join(','); + const code = `const f = bitcast<${destType}>(${srcType}(${components}));`; + t.expectCompileResult(!t.params.useBadValue, code); +}); -const f32_matrix_types = [2, 3, 4] - .map(i => [2, 3, 4].map(j => `mat${i}x${j}f`)) - .reduce((a, c) => a.concat(c), []); -const bool_types = ['bool', ...[2, 3, 4].map(i => `vec${i}`)]; +const f16InfAndNaNInU16 = [ +// Cover NaNs evenly in integer space. +// The positive NaN with the lowest integer representation is the integer +// for infinity, plus one. +// The positive NaN with the highest integer representation is i16.max = 32767 +...linearRange(kBit.f16.positive.infinity + 1, 32767, numNaNs), +// The negative NaN with the lowest integer representation is the integer +// for negative infinity, plus one. +// The negative NaN with the highest integer representation is u16.max = 65535 +...linearRange(kBit.f16.negative.infinity + 1, 65535, numNaNs), +kBit.f16.positive.infinity, +kBit.f16.negative.infinity]; -g.test('bad_type_constructible') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc( - ` + +/** + * @returns an u32 whose lower and higher 16bits are the two elements of the + * given array of two u16 respectively, in little-endian. + */ +function u16x2ToU32(u16x2) { + assert(u16x2.length === 2); + // Create a DataView with 4 bytes buffer. + const buffer = new ArrayBuffer(4); + const view = new DataView(buffer); + // Enforce little-endian. + view.setUint16(0, u16x2[0], true); + view.setUint16(2, u16x2[1], true); + return view.getUint32(0, true); +} + +g.test('bad_const_to_f16'). +specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation'). +desc( + ` +It is a shader-creation error if any const-expression of floating-point type evaluates to NaN or infinity. +` +). +params((u) => +u. +combine('fromScalarType', ['i32', 'u32']). +combine('vectorize', keysOf(kVectorCases)) +// Only test valid bitcast to vec2 or vec4 +.filter((p) => kVectorCases[p.vectorize].width % 2 === 0). +beginSubcases() +// Also validate that testcases without using bad bit can pass the exam +.combine('useBadValue', [true, false]). +expand('bitBadValue', (p) => +p.useBadValue ? [...f16InfAndNaNInU16] : [0] +) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + // For width = 2 generate code like: + // const f = bitcast>(i32(u32(0x7f800000))); + // And for width = 4: + // const f = bitcast>(vec2(0,i32(u32(0x7f800000)))); + const vectorize = kVectorCases[t.params.vectorize]; + const width = vectorize.width; + const badIndex = vectorize.badIndex; + + // Only bistcast to vec2 or vec4 is valid. + assert(width === 2 || width === 4); + + // Put the bad f16 bits into lower 16 bits of source element if bad index is 0 or 2, else higher 16 bits. + const badSrcElemBitsInU32 = u16x2ToU32( + badIndex % 2 === 0 ? [t.params.bitBadValue, 0] : [0, t.params.bitBadValue] + ); + const badScalar = `${t.params.fromScalarType}(u32(${badSrcElemBitsInU32}))`; + + const destType = `vec${width}`; + const srcType = width === 2 ? t.params.fromScalarType : `vec2<${t.params.fromScalarType}>`; + const components = [...Array(width / 2).keys()]. + map((i) => i === badIndex >> 1 ? badScalar : '0'). + join(','); + const code = ` + enable f16; + const f = bitcast<${destType}>(${srcType}(${components}));`; + t.expectCompileResult(!t.params.useBadValue, code); +}); + +const f32_matrix_types = [2, 3, 4]. +map((i) => [2, 3, 4].map((j) => `mat${i}x${j}f`)). +reduce((a, c) => a.concat(c), []); +const f16_matrix_types = [2, 3, 4]. +map((i) => [2, 3, 4].map((j) => `mat${i}x${j}`)). +reduce((a, c) => a.concat(c), []); +const bool_types = ['bool', ...[2, 3, 4].map((i) => `vec${i}`)]; + +g.test('bad_type_constructible'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc( + ` Bitcast only applies to concrete numeric scalar or concrete numeric vector. Test constructible types. ` - ) - .params(u => - u - .combine('type', [...f32_matrix_types, ...bool_types, 'array', 'S']) - .combine('direction', ['to', 'from']) - ) - .fn(t => { - const T = t.params.type; - const preamble = T === 'S' ? 'struct S { a:i32 } ' : ''; - // Create a value of type T using zero-construction: T(). - const srcVal = t.params.direction === 'to' ? '0' : `${T}()`; - const destType = t.params.direction === 'to' ? T : 'i32'; - const code = preamble + `const x = bitcast<${destType}>(${srcVal});`; - t.expectCompileResult(false, code); - }); +). +params((u) => +u. +combine('type', [ +...f32_matrix_types, +...f16_matrix_types, +...bool_types, +'array', +'S'] +). +combine('direction', ['to', 'from']) +). +beforeAllSubcases((t) => { + if (t.params.type.includes('f16')) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const T = t.params.type; + const enable_directives = t.params.type.includes('f16') ? 'enable f16;\n' : ''; + const preamble = T === 'S' ? 'struct S { a:i32 } ' : ''; + // Create a value of type T using zero-construction: T(). + const srcVal = t.params.direction === 'to' ? '0' : `${T}()`; + const destType = t.params.direction === 'to' ? T : 'i32'; + const code = enable_directives + preamble + `const x = bitcast<${destType}>(${srcVal});`; + t.expectCompileResult(false, code); +}); -g.test('bad_type_nonconstructible') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc( - ` +g.test('bad_type_nonconstructible'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc( + ` Bitcast only applies to concrete numeric scalar or concrete numeric vector. Test non-constructible types. ` - ) - .params(u => u.combine('var', ['s', 't', 'b', 'p']).combine('direction', ['to', 'from'])) - .fn(t => { - const typeOf = { - s: 'sampler', - t: 'texture_depth_2d', - b: 'array', - p: 'ptr', - }; - const srcVal = t.params.direction === 'to' ? '0' : t.params.var; - const destType = t.params.direction === 'to' ? typeOf[t.params.var] : 'i32'; - const code = ` +). +params((u) => u.combine('var', ['s', 't', 'b', 'p']).combine('direction', ['to', 'from'])). +fn((t) => { + const typeOf = { + s: 'sampler', + t: 'texture_depth_2d', + b: 'array', + p: 'ptr' + }; + const srcVal = t.params.direction === 'to' ? '0' : t.params.var; + const destType = t.params.direction === 'to' ? typeOf[t.params.var] : 'i32'; + const code = ` @group(0) @binding(0) var s: sampler; @group(0) @binding(1) var t: texture_depth_2d; @group(0) @binding(2) var b: array; @@ -134,153 +234,160 @@ Test non-constructible types. let x = bitcast<${destType}>(${srcVal}); } `; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('bad_to_vec3h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc( - ` +g.test('bad_to_vec3h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc( + ` Can't cast numeric type to vec3 because it is 48 bits wide and no other type is that size. ` - ) - .params(u => - u - .combine('other_type', [ - 'bool', - 'u32', - 'i32', - 'f32', - 'vec2', - 'vec3', - 'vec4', - 'vec2u', - 'vec3u', - 'vec4u', - 'vec2i', - 'vec3i', - 'vec4i', - 'vec2f', - 'vec3f', - 'vec4f', - 'vec2h', - 'vec4h', - ]) - .combine('direction', ['to', 'from']) - .combine('type', ['vec3', 'vec3h']) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const src_type = t.params.direction === 'to' ? t.params.type : t.params.other_type; - const dst_type = t.params.direction === 'from' ? t.params.type : t.params.other_type; - const code = ` +). +params((u) => +u. +combine('other_type', [ +'bool', +'u32', +'i32', +'f32', +'vec2', +'vec3', +'vec4', +'vec2u', +'vec3u', +'vec4u', +'vec2i', +'vec3i', +'vec4i', +'vec2f', +'vec3f', +'vec4f', +'vec2h', +'vec4h'] +). +combine('direction', ['to', 'from']). +combine('type', ['vec3', 'vec3h']) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const src_type = t.params.direction === 'to' ? t.params.type : t.params.other_type; + const dst_type = t.params.direction === 'from' ? t.params.type : t.params.other_type; + const code = ` enable f16; @fragment fn main() { var src : ${src_type}; let dst = bitcast<${dst_type}>(src); }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('bad_to_f16') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc( - ` +g.test('bad_to_f16'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc( + ` Can't cast non-16-bit types to f16 because it is 16 bits wide and no other type is that size. ` - ) - .params(u => - u - .combine('other_type', [ - 'bool', - 'u32', - 'i32', - 'f32', - 'vec2', - 'vec3', - 'vec4', - 'vec2u', - 'vec3u', - 'vec4u', - 'vec2i', - 'vec3i', - 'vec4i', - 'vec2f', - 'vec3f', - 'vec4f', - 'vec2h', - 'vec3h', - 'vec4h', - ]) - .combine('direction', ['to', 'from']) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const src_type = t.params.direction === 'to' ? 'f16' : t.params.other_type; - const dst_type = t.params.direction === 'from' ? 'f16' : t.params.other_type; - const code = ` +). +params((u) => +u. +combine('other_type', [ +'bool', +'u32', +'i32', +'f32', +'vec2', +'vec3', +'vec4', +'vec2u', +'vec3u', +'vec4u', +'vec2i', +'vec3i', +'vec4i', +'vec2f', +'vec3f', +'vec4f', +'vec2h', +'vec3h', +'vec4h'] +). +combine('direction', ['to', 'from']) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const src_type = t.params.direction === 'to' ? 'f16' : t.params.other_type; + const dst_type = t.params.direction === 'from' ? 'f16' : t.params.other_type; + const code = ` enable f16; @fragment fn main() { var src : ${src_type}; let dst = bitcast<${dst_type}>(src); }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('valid_vec2h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`Check valid vec2 bitcasts`) - .params(u => - u - .combine('other_type', ['u32', 'i32', 'f32']) - .combine('type', ['vec2', 'vec2h']) - .combine('direction', ['to', 'from']) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const src_type = t.params.direction === 'to' ? t.params.type : t.params.other_type; - const dst_type = t.params.direction === 'from' ? t.params.type : t.params.other_type; - const code = ` +g.test('valid_vec2h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`Check valid vec2 bitcasts`). +params((u) => +u. +combine('other_type', ['u32', 'i32', 'f32']). +combine('type', ['vec2', 'vec2h']). +combine('direction', ['to', 'from']) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const src_type = t.params.direction === 'to' ? t.params.type : t.params.other_type; + const dst_type = t.params.direction === 'from' ? t.params.type : t.params.other_type; + const code = ` enable f16; @fragment fn main() { var src : ${src_type}; let dst = bitcast<${dst_type}>(src); }`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); -g.test('valid_vec4h') - .specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin') - .desc(`Check valid vec2 bitcasts`) - .params(u => - u - .combine('other_type', ['vec2', 'vec2u', 'vec2', 'vec2i', 'vec2', 'vec2f']) - .combine('type', ['vec4', 'vec4h']) - .combine('direction', ['to', 'from']) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const src_type = t.params.direction === 'to' ? t.params.type : t.params.other_type; - const dst_type = t.params.direction === 'from' ? t.params.type : t.params.other_type; - const code = ` +g.test('valid_vec4h'). +specURL('https://www.w3.org/TR/WGSL/#bitcast-builtin'). +desc(`Check valid vec2 bitcasts`). +params((u) => +u. +combine('other_type', [ +'vec2', +'vec2u', +'vec2', +'vec2i', +'vec2', +'vec2f'] +). +combine('type', ['vec4', 'vec4h']). +combine('direction', ['to', 'from']) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const src_type = t.params.direction === 'to' ? t.params.type : t.params.other_type; + const dst_type = t.params.direction === 'from' ? t.params.type : t.params.other_type; + const code = ` enable f16; @fragment fn main() { var src : ${src_type}; let dst = bitcast<${dst_type}>(src); }`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/ceil.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/ceil.spec.js index 80dd07d236f..9d6fb1e30c4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/ceil.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/ceil.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'ceil'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'ceil';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,66 +10,66 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() never errors ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // ceil() should never error - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // ceil() should never error + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/clamp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/clamp.spec.js index 406793612c3..ae83f29898c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/clamp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/clamp.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'clamp'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'clamp';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -9,50 +8,50 @@ import { keysOf, objectsToRecord } from '../../../../../../common/util/data_tabl import { TypeF16, elementType, - kAllFloatAndIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllFloatAndIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatAndIntegerScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('e', u => fullRangeForType(kValuesTypes[u.type], 3)) - .expand('low', u => fullRangeForType(kValuesTypes[u.type], 4)) - .expand('high', u => fullRangeForType(kValuesTypes[u.type], 4)) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = t.params.low <= t.params.high; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.e), type.create(t.params.low), type.create(t.params.high)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('e', (u) => fullRangeForType(kValuesTypes[u.type], 3)). +expand('low', (u) => fullRangeForType(kValuesTypes[u.type], 4)). +expand('high', (u) => fullRangeForType(kValuesTypes[u.type], 4)) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = t.params.low <= t.params.high; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.e), type.create(t.params.low), type.create(t.params.high)], + t.params.stage + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/const_override_validation.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/const_override_validation.js index 273659a8a7c..0b61930d724 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/const_override_validation.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/const_override_validation.js @@ -1,76 +1,103 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../../../../../common/util/util.js'; -import { kValue } from '../../../../../util/constants.js'; -import { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../../../../../common/util/util.js';import { kValue } from '../../../../../util/constants.js';import { + TypeF16, + elementType, elementsOf, - isAbstractType, -} from '../../../../../util/conversion.js'; -import { fullF16Range, fullF32Range, fullF64Range, linearRange } from '../../../../../util/math.js'; + isAbstractType } from +'../../../../../util/conversion.js'; +import { + scalarF16Range, + scalarF32Range, + scalarF64Range, + linearRange } from +'../../../../../util/math.js'; + /// A linear sweep between -2 to 2 export const kMinusTwoToTwo = linearRange(-2, 2, 10); /// An array of values ranging from -3π to 3π, with a focus on multiples of π export const kMinus3PiTo3Pi = [ - -3 * Math.PI, - -2.999 * Math.PI, +-3 * Math.PI, +-2.999 * Math.PI, - -2.501 * Math.PI, - -2.5 * Math.PI, - -2.499 * Math.PI, +-2.501 * Math.PI, +-2.5 * Math.PI, +-2.499 * Math.PI, - -2.001 * Math.PI, - -2.0 * Math.PI, - -1.999 * Math.PI, +-2.001 * Math.PI, +-2.0 * Math.PI, +-1.999 * Math.PI, - -1.501 * Math.PI, - -1.5 * Math.PI, - -1.499 * Math.PI, +-1.501 * Math.PI, +-1.5 * Math.PI, +-1.499 * Math.PI, - -1.001 * Math.PI, - -1.0 * Math.PI, - -0.999 * Math.PI, +-1.001 * Math.PI, +-1.0 * Math.PI, +-0.999 * Math.PI, - -0.501 * Math.PI, - -0.5 * Math.PI, - -0.499 * Math.PI, +-0.501 * Math.PI, +-0.5 * Math.PI, +-0.499 * Math.PI, - -0.001, - 0, - 0.001, +-0.001, +0, +0.001, - 0.499 * Math.PI, - 0.5 * Math.PI, - 0.501 * Math.PI, +0.499 * Math.PI, +0.5 * Math.PI, +0.501 * Math.PI, - 0.999 * Math.PI, - 1.0 * Math.PI, - 1.001 * Math.PI, +0.999 * Math.PI, +1.0 * Math.PI, +1.001 * Math.PI, - 1.499 * Math.PI, - 1.5 * Math.PI, - 1.501 * Math.PI, +1.499 * Math.PI, +1.5 * Math.PI, +1.501 * Math.PI, - 1.999 * Math.PI, - 2.0 * Math.PI, - 2.001 * Math.PI, +1.999 * Math.PI, +2.0 * Math.PI, +2.001 * Math.PI, - 2.499 * Math.PI, - 2.5 * Math.PI, - 2.501 * Math.PI, +2.499 * Math.PI, +2.5 * Math.PI, +2.501 * Math.PI, + +2.999 * Math.PI, +3 * Math.PI]; + + +/// A minimal array of values ranging from -3π to 3π, with a focus on multiples +/// of π. Used when multiple parameters are being passed in, so the number of +/// cases becomes the square or more of this list. +export const kSparseMinus3PiTo3Pi = [ +-3 * Math.PI, +-2.5 * Math.PI, +-2.0 * Math.PI, +-1.5 * Math.PI, +-1.0 * Math.PI, +-0.5 * Math.PI, +0, +0.5 * Math.PI, +Math.PI, +1.5 * Math.PI, +2.0 * Math.PI, +2.5 * Math.PI, +3 * Math.PI]; - 2.999 * Math.PI, - 3 * Math.PI, -]; /// The evaluation stages to test export const kConstantAndOverrideStages = ['constant', 'override']; + + /** - * @returns true if evaluation stage @p stage supports expressions of type @p. + * @returns true if evaluation stage `stage` supports expressions of type @p. */ export function stageSupportsType(stage, type) { if (stage === 'override' && isAbstractType(elementType(type))) { @@ -81,7 +108,7 @@ export function stageSupportsType(stage, type) { } /** - * Runs a validation test to check that evaluation of @p builtin either evaluates with or without + * Runs a validation test to check that evaluation of `builtin` either evaluates with or without * error at shader creation time or pipeline creation time. * @param t the ShaderValidationTest * @param builtin the name of the builtin @@ -89,79 +116,82 @@ export function stageSupportsType(stage, type) { * @param args the arguments to pass to the builtin * @param stage the evaluation stage */ -export function validateConstOrOverrideBuiltinEval(t, builtin, expectedResult, args, stage) { - const elTys = args.map(arg => elementType(arg.type)); - const enables = elTys.some(ty => ty === TypeF16) ? 'enable f16;' : ''; +export function validateConstOrOverrideBuiltinEval( +t, +builtin, +expectedResult, +args, +stage) +{ + const elTys = args.map((arg) => elementType(arg.type)); + const enables = elTys.some((ty) => ty === TypeF16) ? 'enable f16;' : ''; switch (stage) { - case 'constant': { - t.expectCompileResult( - expectedResult, - `${enables} -const v = ${builtin}(${args.map(arg => arg.wgsl()).join(', ')});` - ); - - break; - } - case 'override': { - assert(!elTys.some(ty => isAbstractType(ty))); - const constants = {}; - const overrideDecls = []; - const callArgs = []; - let numOverrides = 0; - for (const arg of args) { - const argOverrides = []; - for (const el of elementsOf(arg)) { - const name = `o${numOverrides++}`; - overrideDecls.push(`override ${name} : ${el.type};`); - argOverrides.push(name); - constants[name] = Number(el.value); - } - callArgs.push(`${arg.type}(${argOverrides.join(', ')})`); + case 'constant':{ + t.expectCompileResult( + expectedResult, + `${enables} +const v = ${builtin}(${args.map((arg) => arg.wgsl()).join(', ')});` + ); + break; } - t.expectPipelineResult({ - expectedResult, - code: `${enables} + case 'override':{ + assert(!elTys.some((ty) => isAbstractType(ty))); + const constants = {}; + const overrideDecls = []; + const callArgs = []; + let numOverrides = 0; + for (const arg of args) { + const argOverrides = []; + for (const el of elementsOf(arg)) { + const name = `o${numOverrides++}`; + overrideDecls.push(`override ${name} : ${el.type};`); + argOverrides.push(name); + constants[name] = Number(el.value); + } + callArgs.push(`${arg.type}(${argOverrides.join(', ')})`); + } + t.expectPipelineResult({ + expectedResult, + code: `${enables} ${overrideDecls.join('\n')} var v = ${builtin}(${callArgs.join(', ')});`, - constants, - reference: ['v'], - }); - break; - } + constants, + reference: ['v'] + }); + break; + } } } -/** @returns a sweep of the representable values for element type of @p type */ +/** @returns a sweep of the representable values for element type of `type` */ export function fullRangeForType(type, count) { if (count === undefined) { count = 25; } switch (elementType(type)?.kind) { case 'abstract-float': - return fullF64Range({ - pos_sub: Math.ceil((count * 1) / 5), - pos_norm: Math.ceil((count * 4) / 5), + return scalarF64Range({ + pos_sub: Math.ceil(count * 1 / 5), + pos_norm: Math.ceil(count * 4 / 5) }); case 'f32': - return fullF32Range({ - pos_sub: Math.ceil((count * 1) / 5), - pos_norm: Math.ceil((count * 4) / 5), + return scalarF32Range({ + pos_sub: Math.ceil(count * 1 / 5), + pos_norm: Math.ceil(count * 4 / 5) }); case 'f16': - return fullF16Range({ - pos_sub: Math.ceil((count * 1) / 5), - pos_norm: Math.ceil((count * 4) / 5), + return scalarF16Range({ + pos_sub: Math.ceil(count * 1 / 5), + pos_norm: Math.ceil(count * 4 / 5) }); case 'i32': - return linearRange(kValue.i32.negative.min, kValue.i32.positive.max, count).map(f => - Math.floor(f) + return linearRange(kValue.i32.negative.min, kValue.i32.positive.max, count).map((f) => + Math.floor(f) ); - case 'u32': - return linearRange(0, kValue.u32.max, count).map(f => Math.floor(f)); + return linearRange(0, kValue.u32.max, count).map((f) => Math.floor(f)); } - unreachable(); } @@ -174,4 +204,4 @@ export function unique(...arrays) { } } return [...set]; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cos.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cos.spec.js index df6fee7feb5..4f3a485b5f4 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cos.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cos.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'cos'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'cos';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { @@ -21,58 +20,58 @@ import { kMinus3PiTo3Pi, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ true, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */true, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cosh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cosh.spec.js index e4f5705f743..27f975252c7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cosh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/cosh.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'cosh'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'cosh';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -20,60 +19,60 @@ import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable(Math.cosh(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(Math.cosh(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/degrees.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/degrees.spec.js index c42518c4d49..10aac98de2c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/degrees.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/degrees.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'degrees'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'degrees';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -20,60 +19,60 @@ import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable((t.params.value * 180) / Math.PI, elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(t.params.value * 180 / Math.PI, elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4I8Packed.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4I8Packed.spec.js new file mode 100644 index 00000000000..6b1f642b4da --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4I8Packed.spec.js @@ -0,0 +1,59 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate dot4I8Packed`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'dot4I8Packed'; +const kGoodArgs = '(1u,2u)'; +const kBadArgs = { + '0args': '()', + '1args': '(1u)', + '3args': '(1u,2u,3u)', + '0i32': '(1i,2u)', + '0f32': '(1f,2u)', + '0bool': '(false,2u)', + '0vec2u': '(vec2u(),2u)', + '1i32': '(1u,2i)', + '1f32': '(1u,2f)', + '1bool': '(1u,true)', + '1vec2u': '(1u,vec2u())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4U8Packed.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4U8Packed.spec.js new file mode 100644 index 00000000000..4ef94671edf --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/dot4U8Packed.spec.js @@ -0,0 +1,59 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate dot4U8Packed`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'dot4U8Packed'; +const kGoodArgs = '(1u,2u)'; +const kBadArgs = { + '0args': '()', + '1args': '(1u)', + '3args': '(1u,2u,3u)', + '0i32': '(1i,2u)', + '0f32': '(1f,2u)', + '0bool': '(false,2u)', + '0vec2u': '(vec2u(),2u)', + '1i32': '(1u,2i)', + '1f32': '(1u,2f)', + '1bool': '(1u,true)', + '1vec2u': '(1u,vec2u())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp.spec.js index 579f9349cc3..74a88161140 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'exp'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'exp';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -12,92 +11,92 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .combine('value', [ - -1e2, - -1e3, - -4, - -3, - -2, - -1, - -1e-1, - -1e-2, - -1e-3, - 0, - 1e-3, - 1e-2, - 1e-1, - 1, - 2, - 3, - 4, - 1e2, - 1e3, - Math.log2(kValue.f16.positive.max) - 0.1, - Math.log2(kValue.f16.positive.max) + 0.1, - Math.log2(kValue.f32.positive.max) - 0.1, - Math.log2(kValue.f32.positive.max) + 0.1, - ]) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable(Math.exp(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +combine('value', [ +-1e2, +-1e3, +-4, +-3, +-2, +-1, +-1e-1, +-1e-2, +-1e-3, +0, +1e-3, +1e-2, +1e-1, +1, +2, +3, +4, +1e2, +1e3, +Math.log2(kValue.f16.positive.max) - 0.1, +Math.log2(kValue.f16.positive.max) + 0.1, +Math.log2(kValue.f32.positive.max) - 0.1, +Math.log2(kValue.f32.positive.max) + 0.1] +) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(Math.exp(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp2.spec.js index 91cee438b1e..c38d5f90ef9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/exp2.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'exp2'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'exp2';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -12,92 +11,92 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .combine('value', [ - -1e2, - -1e3, - -4, - -3, - -2, - -1, - -1e-1, - -1e-2, - -1e-3, - 0, - 1e-3, - 1e-2, - 1e-1, - 1, - 2, - 3, - 4, - 1e2, - 1e3, - Math.log2(kValue.f16.positive.max) - 0.1, - Math.log2(kValue.f16.positive.max) + 0.1, - Math.log2(kValue.f32.positive.max) - 0.1, - Math.log2(kValue.f32.positive.max) + 0.1, - ]) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable(Math.pow(2, t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +combine('value', [ +-1e2, +-1e3, +-4, +-3, +-2, +-1, +-1e-1, +-1e-2, +-1e-3, +0, +1e-3, +1e-2, +1e-1, +1, +2, +3, +4, +1e2, +1e3, +Math.log2(kValue.f16.positive.max) - 0.1, +Math.log2(kValue.f16.positive.max) + 0.1, +Math.log2(kValue.f32.positive.max) - 0.1, +Math.log2(kValue.f32.positive.max) + 0.1] +) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(Math.pow(2, t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/inverseSqrt.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/inverseSqrt.spec.js index f111baeb58d..bb6c089450f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/inverseSqrt.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/inverseSqrt.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'inverseSqrt'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'inverseSqrt';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -22,61 +21,61 @@ import { kMinusTwoToTwo, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = - t.params.value > 0 && isRepresentable(1 / Math.sqrt(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = + t.params.value > 0 && isRepresentable(1 / Math.sqrt(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/length.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/length.spec.js index 97b0ba8f31b..12a28233e55 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/length.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/length.spec.js @@ -1,12 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'length'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'length';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; import { keysOf, objectsToRecord } from '../../../../../../common/util/data_tables.js'; import { + TypeF16, TypeF32, elementType, @@ -14,8 +14,8 @@ import { kAllFloatVector2, kAllFloatVector3, kAllFloatVector4, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -23,183 +23,199 @@ import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); /** * Evaluates the result and information about a call to length(), with a vector - * formed from @p vec of the element type @p type. + * formed from `vec` of the element type `type`. */ -function calculate(vec, type) { +function calculate( +vec, +type) + + + + + + + + + + + + + +{ const squareSum = vec.reduce((prev, curr) => prev + curr * curr, 0); const result = Math.sqrt(squareSum); return { isIntermediateRepresentable: isRepresentable(squareSum, type), isResultRepresentable: isRepresentable(result, type), - result, + result }; } const kScalarTypes = objectsToRecord(kAllFloatScalars); -g.test('scalar') - .desc( - ` +g.test('scalar'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() with the input scalar value always compiles without error ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kScalarTypes)) - .filter(u => stageSupportsType(u.stage, kScalarTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kScalarTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kScalarTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - // We only validate with numbers known to be representable by the type - const expectedResult = true; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kScalarTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kScalarTypes)). +filter((u) => stageSupportsType(u.stage, kScalarTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kScalarTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kScalarTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + // We only validate with numbers known to be representable by the type + const expectedResult = true; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kScalarTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kVec2Types = objectsToRecord(kAllFloatVector2); -g.test('vec2') - .desc( - ` +g.test('vec2'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() with a vec2 compiles with valid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kVec2Types)) - .filter(u => stageSupportsType(u.stage, kVec2Types[u.type])) - .beginSubcases() - .expand('x', u => fullRangeForType(kVec2Types[u.type], 5)) - .expand('y', u => fullRangeForType(kVec2Types[u.type], 5)) - .expand('_result', u => [calculate([u.x, u.y], elementType(kVec2Types[u.type]))]) - .filter(u => u._result.isResultRepresentable === u._result.isIntermediateRepresentable) - ) - .beforeAllSubcases(t => { - if (elementType(kVec2Types[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = t.params._result.isResultRepresentable; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kVec2Types[t.params.type].create([t.params.x, t.params.y])], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kVec2Types)). +filter((u) => stageSupportsType(u.stage, kVec2Types[u.type])). +beginSubcases(). +expand('x', (u) => fullRangeForType(kVec2Types[u.type], 5)). +expand('y', (u) => fullRangeForType(kVec2Types[u.type], 5)). +expand('_result', (u) => [calculate([u.x, u.y], elementType(kVec2Types[u.type]))]). +filter((u) => u._result.isResultRepresentable === u._result.isIntermediateRepresentable) +). +beforeAllSubcases((t) => { + if (elementType(kVec2Types[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = t.params._result.isResultRepresentable; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kVec2Types[t.params.type].create([t.params.x, t.params.y])], + t.params.stage + ); +}); const kVec3Types = objectsToRecord(kAllFloatVector3); -g.test('vec3') - .desc( - ` +g.test('vec3'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() with a vec3 compiles with valid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kVec3Types)) - .filter(u => stageSupportsType(u.stage, kVec3Types[u.type])) - .beginSubcases() - .expand('x', u => fullRangeForType(kVec3Types[u.type], 4)) - .expand('y', u => fullRangeForType(kVec3Types[u.type], 4)) - .expand('z', u => fullRangeForType(kVec3Types[u.type], 4)) - .expand('_result', u => [calculate([u.x, u.y, u.z], elementType(kVec3Types[u.type]))]) - .filter(u => u._result.isResultRepresentable === u._result.isIntermediateRepresentable) - ) - .beforeAllSubcases(t => { - if (elementType(kVec3Types[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = t.params._result.isResultRepresentable; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kVec3Types[t.params.type].create([t.params.x, t.params.y, t.params.z])], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kVec3Types)). +filter((u) => stageSupportsType(u.stage, kVec3Types[u.type])). +beginSubcases(). +expand('x', (u) => fullRangeForType(kVec3Types[u.type], 4)). +expand('y', (u) => fullRangeForType(kVec3Types[u.type], 4)). +expand('z', (u) => fullRangeForType(kVec3Types[u.type], 4)). +expand('_result', (u) => [calculate([u.x, u.y, u.z], elementType(kVec3Types[u.type]))]). +filter((u) => u._result.isResultRepresentable === u._result.isIntermediateRepresentable) +). +beforeAllSubcases((t) => { + if (elementType(kVec3Types[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = t.params._result.isResultRepresentable; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kVec3Types[t.params.type].create([t.params.x, t.params.y, t.params.z])], + t.params.stage + ); +}); const kVec4Types = objectsToRecord(kAllFloatVector4); -g.test('vec4') - .desc( - ` +g.test('vec4'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() with a vec4 compiles with valid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kVec4Types)) - .filter(u => stageSupportsType(u.stage, kVec4Types[u.type])) - .beginSubcases() - .expand('x', u => fullRangeForType(kVec4Types[u.type], 3)) - .expand('y', u => fullRangeForType(kVec4Types[u.type], 3)) - .expand('z', u => fullRangeForType(kVec4Types[u.type], 3)) - .expand('w', u => fullRangeForType(kVec4Types[u.type], 3)) - .expand('_result', u => [calculate([u.x, u.y, u.z, u.w], elementType(kVec4Types[u.type]))]) - .filter(u => u._result.isResultRepresentable === u._result.isIntermediateRepresentable) - ) - .beforeAllSubcases(t => { - if (elementType(kVec4Types[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = t.params._result.isResultRepresentable; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kVec4Types[t.params.type].create([t.params.x, t.params.y, t.params.z, t.params.w])], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kVec4Types)). +filter((u) => stageSupportsType(u.stage, kVec4Types[u.type])). +beginSubcases(). +expand('x', (u) => fullRangeForType(kVec4Types[u.type], 3)). +expand('y', (u) => fullRangeForType(kVec4Types[u.type], 3)). +expand('z', (u) => fullRangeForType(kVec4Types[u.type], 3)). +expand('w', (u) => fullRangeForType(kVec4Types[u.type], 3)). +expand('_result', (u) => [calculate([u.x, u.y, u.z, u.w], elementType(kVec4Types[u.type]))]). +filter((u) => u._result.isResultRepresentable === u._result.isIntermediateRepresentable) +). +beforeAllSubcases((t) => { + if (elementType(kVec4Types[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = t.params._result.isResultRepresentable; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kVec4Types[t.params.type].create([t.params.x, t.params.y, t.params.z, t.params.w])], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log.spec.js index bc9bc15dc60..fb911b41883 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'log'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'log';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,67 +10,67 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = t.params.value > 0; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = t.params.value > 0; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log2.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log2.spec.js index be3e8768e18..4e538fbb776 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log2.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/log2.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'log2'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'log2';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,67 +10,67 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = t.params.value > 0; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = t.params.value > 0; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/modf.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/modf.spec.js index 908ef7a3e41..d3937bc4f34 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/modf.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/modf.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'modf'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'modf';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,67 +10,67 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // Result should always be representable by the type - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // Result should always be representable by the type + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8.spec.js new file mode 100644 index 00000000000..e335321cba3 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8.spec.js @@ -0,0 +1,58 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate pack4xI8`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'pack4xI8'; +const kGoodArgs = '(vec4i())'; +const kBadArgs = { + '0args': '()', + '2args': '(vec4i(),vec4i())', + '0i32': '(1i)', + '0f32': '(1f)', + '0bool': '(false)', + '0vec4u': '(vec4u())', + '0vec4f': '(vec4f())', + '0vec4b': '(vec4())', + '0vec2i': '(vec2i())', + '0vec3i': '(vec3i())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8Clamp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8Clamp.spec.js new file mode 100644 index 00000000000..d3791b2da33 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xI8Clamp.spec.js @@ -0,0 +1,58 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate pack4xI8Clamp`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'pack4xI8Clamp'; +const kGoodArgs = '(vec4i())'; +const kBadArgs = { + '0args': '()', + '2args': '(vec4i(),vec4i())', + '0i32': '(1i)', + '0f32': '(1f)', + '0bool': '(false)', + '0vec4u': '(vec4u())', + '0vec4f': '(vec4f())', + '0vec4b': '(vec4())', + '0vec2i': '(vec2i())', + '0vec3i': '(vec3i())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8.spec.js new file mode 100644 index 00000000000..211c9f9a334 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8.spec.js @@ -0,0 +1,58 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate pack4xU8`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'pack4xU8'; +const kGoodArgs = '(vec4u())'; +const kBadArgs = { + '0args': '()', + '2args': '(vec4u(),vec4u())', + '0i32': '(1i)', + '0f32': '(1f)', + '0bool': '(false)', + '0vec4i': '(vec4i())', + '0vec4f': '(vec4f())', + '0vec4b': '(vec4())', + '0vec2u': '(vec2u())', + '0vec3u': '(vec3u())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8Clamp.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8Clamp.spec.js new file mode 100644 index 00000000000..78aa0ffdf5a --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/pack4xU8Clamp.spec.js @@ -0,0 +1,58 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate pack4xU8Clamp`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'pack4xU8Clamp'; +const kGoodArgs = '(vec4u())'; +const kBadArgs = { + '0args': '()', + '2args': '(vec4u(),vec4u())', + '0i32': '(1i)', + '0f32': '(1f)', + '0bool': '(false)', + '0vec4i': '(vec4i())', + '0vec4f': '(vec4f())', + '0vec4b': '(vec4())', + '0vec2u': '(vec2u())', + '0vec3u': '(vec3u())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/radians.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/radians.spec.js index 1564ae7a581..51e1c451a31 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/radians.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/radians.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'radians'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'radians';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,67 +10,67 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // The result is always smaller than the input, so can't go OOB. - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // The result is always smaller than the input, so can't go OOB. + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/round.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/round.spec.js index 100439a242f..a90c17e10c9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/round.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/round.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'round'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'round';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { fpTraitsFor } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -21,65 +20,65 @@ import { kConstantAndOverrideStages, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => { - const constants = fpTraitsFor(elementType(kValuesTypes[u.type])).constants(); - return unique(fullRangeForType(kValuesTypes[u.type]), [ - constants.negative.min + 0.1, - constants.positive.max - 0.1, - ]); - }) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // Result should always be representable by the type - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => { + const constants = fpTraitsFor(elementType(kValuesTypes[u.type])).constants(); + return unique(fullRangeForType(kValuesTypes[u.type]), [ + constants.negative.min + 0.1, + constants.positive.max - 0.1] + ); +}) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // Result should always be representable by the type + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/saturate.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/saturate.spec.js index d67ccaed853..acf8bb059fe 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/saturate.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/saturate.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'saturate'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'saturate';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,67 +10,67 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // Result should always be representable by the type - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // Result should always be representable by the type + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sign.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sign.spec.js index 7a4cb16419e..7a08bac5f93 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sign.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sign.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'sign'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'sign';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,70 +10,70 @@ import { TypeF32, elementType, kAllFloatAndSignedIntegerScalarsAndVectors, - kAllUnsignedIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllUnsignedIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatAndSignedIntegerScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const expectedResult = true; // Result should always be representable by the type - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const expectedResult = true; // Result should always be representable by the type + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kUnsignedIntegerArgumentTypes = objectsToRecord([ - TypeF32, - ...kAllUnsignedIntegerScalarsAndVectors, -]); +TypeF32, +...kAllUnsignedIntegerScalarsAndVectors] +); -g.test('unsigned_integer_argument') - .desc( - ` +g.test('unsigned_integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kUnsignedIntegerArgumentTypes))) - .fn(t => { - const type = kUnsignedIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kUnsignedIntegerArgumentTypes))). +fn((t) => { + const type = kUnsignedIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sin.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sin.spec.js index c05c8665688..716311f20ce 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sin.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sin.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'sin'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'sin';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; import { @@ -21,58 +20,58 @@ import { kMinus3PiTo3Pi, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ true, - [kValuesTypes[t.params.type].create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */true, + [kValuesTypes[t.params.type].create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sinh.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sinh.spec.js index 388afbddc57..c6541329608 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sinh.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sinh.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'sinh'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'sinh';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -20,60 +19,60 @@ import { fullRangeForType, kConstantAndOverrideStages, stageSupportsType, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => fullRangeForType(kValuesTypes[u.type])) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = isRepresentable(Math.sinh(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => fullRangeForType(kValuesTypes[u.type])) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = isRepresentable(Math.sinh(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sqrt.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sqrt.spec.js index a2c63e12279..4a2f254fef5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sqrt.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/sqrt.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'sqrt'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'sqrt';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { isRepresentable } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -22,61 +21,61 @@ import { kMinusTwoToTwo, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() inputs rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const expectedResult = - t.params.value >= 0 && isRepresentable(Math.sqrt(t.params.value), elementType(type)); - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinusTwoToTwo, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const expectedResult = + t.params.value >= 0 && isRepresentable(Math.sqrt(t.params.value), elementType(type)); + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(1)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(1)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/tan.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/tan.spec.js index 80bbe17cbe5..91cee003edc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/tan.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/tan.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ const builtin = 'tan'; -export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/const builtin = 'tan';export const description = ` Validation tests for the ${builtin}() builtin. `; import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; @@ -11,8 +10,8 @@ import { TypeF32, elementType, kAllFloatScalarsAndVectors, - kAllIntegerScalarsAndVectors, -} from '../../../../../util/conversion.js'; + kAllIntegerScalarsAndVectors } from +'../../../../../util/conversion.js'; import { fpTraitsFor } from '../../../../../util/floating_point.js'; import { ShaderValidationTest } from '../../../shader_validation_test.js'; @@ -22,61 +21,63 @@ import { kMinus3PiTo3Pi, stageSupportsType, unique, - validateConstOrOverrideBuiltinEval, -} from './const_override_validation.js'; + validateConstOrOverrideBuiltinEval } from +'./const_override_validation.js'; export const g = makeTestGroup(ShaderValidationTest); const kValuesTypes = objectsToRecord(kAllFloatScalarsAndVectors); -g.test('values') - .desc( - ` +g.test('values'). +desc( + ` Validates that constant evaluation and override evaluation of ${builtin}() rejects invalid values ` - ) - .params(u => - u - .combine('stage', kConstantAndOverrideStages) - .combine('type', keysOf(kValuesTypes)) - .filter(u => stageSupportsType(u.stage, kValuesTypes[u.type])) - .beginSubcases() - .expand('value', u => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) - ) - .beforeAllSubcases(t => { - if (elementType(kValuesTypes[t.params.type]) === TypeF16) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const type = kValuesTypes[t.params.type]; - const smallestPositive = fpTraitsFor(elementType(type)).constants().positive.min; - const expectedResult = Math.abs(Math.cos(t.params.value)) > smallestPositive; - validateConstOrOverrideBuiltinEval( - t, - builtin, - expectedResult, - [type.create(t.params.value)], - t.params.stage - ); - }); +). +params((u) => +u. +combine('stage', kConstantAndOverrideStages). +combine('type', keysOf(kValuesTypes)). +filter((u) => stageSupportsType(u.stage, kValuesTypes[u.type])). +beginSubcases(). +expand('value', (u) => unique(kMinus3PiTo3Pi, fullRangeForType(kValuesTypes[u.type]))) +). +beforeAllSubcases((t) => { + if (elementType(kValuesTypes[t.params.type]) === TypeF16) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const type = kValuesTypes[t.params.type]; + const fp = fpTraitsFor(elementType(type)); + const smallestPositive = fp.constants().positive.min; + const v = fp.quantize(t.params.value); + const expectedResult = Math.abs(Math.cos(v)) > smallestPositive; + validateConstOrOverrideBuiltinEval( + t, + builtin, + expectedResult, + [type.create(t.params.value)], + t.params.stage + ); +}); const kIntegerArgumentTypes = objectsToRecord([TypeF32, ...kAllIntegerScalarsAndVectors]); -g.test('integer_argument') - .desc( - ` +g.test('integer_argument'). +desc( + ` Validates that scalar and vector integer arguments are rejected by ${builtin}() ` - ) - .params(u => u.combine('type', keysOf(kIntegerArgumentTypes))) - .fn(t => { - const type = kIntegerArgumentTypes[t.params.type]; - validateConstOrOverrideBuiltinEval( - t, - builtin, - /* expectedResult */ type === TypeF32, - [type.create(0)], - 'constant' - ); - }); +). +params((u) => u.combine('type', keysOf(kIntegerArgumentTypes))). +fn((t) => { + const type = kIntegerArgumentTypes[t.params.type]; + validateConstOrOverrideBuiltinEval( + t, + builtin, + /* expectedResult */type === TypeF32, + [type.create(0)], + 'constant' + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xI8.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xI8.spec.js new file mode 100644 index 00000000000..10b22073c72 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xI8.spec.js @@ -0,0 +1,56 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate unpack4xI8`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'unpack4xI8'; +const kGoodArgs = '(1u)'; +const kBadArgs = { + '0args': '()', + '2args': '(1u,2u)', + '0i32': '(1i)', + '0f32': '(1f)', + '0bool': '(false)', + '0vec2u': '(vec2u())', + '0vec3u': '(vec3u())', + '0vec4u': '(vec4u())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xU8.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xU8.spec.js new file mode 100644 index 00000000000..d8a906b74d3 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/expression/call/builtin/unpack4xU8.spec.js @@ -0,0 +1,56 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validate unpack4xU8`;import { makeTestGroup } from '../../../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../../../common/util/data_tables.js'; +import { ShaderValidationTest } from '../../../shader_validation_test.js'; + +const kFeature = 'packed_4x8_integer_dot_product'; +const kFn = 'unpack4xU8'; +const kGoodArgs = '(1u)'; +const kBadArgs = { + '0args': '()', + '2args': '(1u,2u)', + '0i32': '(1i)', + '0f32': '(1f)', + '0bool': '(false)', + '0vec2u': '(vec2u())', + '0vec3u': '(vec3u())', + '0vec4u': '(vec4u())' +}; + +export const g = makeTestGroup(ShaderValidationTest); + +g.test('unsupported'). +desc(`Test absence of ${kFn} when ${kFeature} is not supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.skipIfLanguageFeatureSupported(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(false, code); +}); + +g.test('supported'). +desc(`Test presence of ${kFn} when ${kFeature} is supported.`). +params((u) => u.combine('requires', [false, true])). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + const preamble = t.params.requires ? `requires ${kFeature}; ` : ''; + const code = `${preamble}const c = ${kFn}${kGoodArgs};`; + t.expectCompileResult(true, code); +}); + +g.test('bad_args'). +desc(`Test compilation failure of ${kFn} with bad arguments`). +params((u) => u.combine('arg', keysOf(kBadArgs))). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `const c = ${kFn}${kBadArgs[t.params.arg]};`); +}); + +g.test('must_use'). +desc(`Result of ${kFn} must be used`). +fn((t) => { + t.requireLanguageFeatureOrSkipTestCase(kFeature); + t.expectCompileResult(false, `fn f() { ${kFn}${kGoodArgs}; }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/alias_analysis.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/alias_analysis.spec.js index 45af2c7dfd5..ab5d7c3327b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/alias_analysis.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/alias_analysis.spec.js @@ -1,49 +1,55 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for function alias analysis`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for function alias analysis`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); + + + + + const kUses = { - no_access: { is_write: false, gen: ref => `{ let p = &*&${ref}; }` }, - assign: { is_write: true, gen: ref => `${ref} = 42;` }, - compound_assign_lhs: { is_write: true, gen: ref => `${ref} += 1;` }, - compound_assign_rhs: { is_write: false, gen: ref => `{ var tmp : i32; tmp += ${ref}; }` }, - increment: { is_write: true, gen: ref => `${ref}++;` }, - binary_lhs: { is_write: false, gen: ref => `_ = ${ref} + 1;` }, - binary_rhs: { is_write: false, gen: ref => `_ = 1 + ${ref};` }, - unary_minus: { is_write: false, gen: ref => `_ = -${ref};` }, - bitcast: { is_write: false, gen: ref => `_ = bitcast(${ref});` }, - convert: { is_write: false, gen: ref => `_ = f32(${ref});` }, - builtin_arg: { is_write: false, gen: ref => `_ = abs(${ref});` }, - index_access: { is_write: false, gen: ref => `{ var arr : array; _ = arr[${ref}]; }` }, - let_init: { is_write: false, gen: ref => `{ let tmp = ${ref}; }` }, - var_init: { is_write: false, gen: ref => `{ var tmp = ${ref}; }` }, - return: { is_write: false, gen: ref => `{ return ${ref}; }` }, - switch_cond: { is_write: false, gen: ref => `switch(${ref}) { default { break; } }` }, + no_access: { is_write: false, gen: (ref) => `{ let p = &*&${ref}; }` }, + assign: { is_write: true, gen: (ref) => `${ref} = 42;` }, + compound_assign_lhs: { is_write: true, gen: (ref) => `${ref} += 1;` }, + compound_assign_rhs: { is_write: false, gen: (ref) => `{ var tmp : i32; tmp += ${ref}; }` }, + increment: { is_write: true, gen: (ref) => `${ref}++;` }, + binary_lhs: { is_write: false, gen: (ref) => `_ = ${ref} + 1;` }, + binary_rhs: { is_write: false, gen: (ref) => `_ = 1 + ${ref};` }, + unary_minus: { is_write: false, gen: (ref) => `_ = -${ref};` }, + bitcast: { is_write: false, gen: (ref) => `_ = bitcast(${ref});` }, + convert: { is_write: false, gen: (ref) => `_ = f32(${ref});` }, + builtin_arg: { is_write: false, gen: (ref) => `_ = abs(${ref});` }, + index_access: { is_write: false, gen: (ref) => `{ var arr : array; _ = arr[${ref}]; }` }, + let_init: { is_write: false, gen: (ref) => `{ let tmp = ${ref}; }` }, + var_init: { is_write: false, gen: (ref) => `{ var tmp = ${ref}; }` }, + return: { is_write: false, gen: (ref) => `{ return ${ref}; }` }, + switch_cond: { is_write: false, gen: (ref) => `switch(${ref}) { default { break; } }` } }; + + function shouldPass(aliased, ...uses) { // Expect fail if the pointers are aliased and at least one of the accesses is a write. // If either of the accesses is a "no access" then expect pass. - return !aliased || !uses.some(u => kUses[u].is_write) || uses.includes('no_access'); + return !aliased || !uses.some((u) => kUses[u].is_write) || uses.includes('no_access'); } -g.test('two_pointers') - .desc(`Test aliasing of two pointers passed to a function.`) - .params(u => - u - .combine('address_space', ['private', 'function']) - .combine('a_use', keysOf(kUses)) - .combine('b_use', keysOf(kUses)) - .combine('aliased', [true, false]) - .beginSubcases() - ) - .fn(t => { - const code = ` +g.test('two_pointers'). +desc(`Test aliasing of two pointers passed to a function.`). +params((u) => +u. +combine('address_space', ['private', 'function']). +combine('a_use', keysOf(kUses)). +combine('b_use', keysOf(kUses)). +combine('aliased', [true, false]). +beginSubcases() +). +fn((t) => { + const code = ` ${t.params.address_space === 'private' ? `var x : i32; var y : i32;` : ``} fn callee(pa : ptr<${t.params.address_space}, i32>, @@ -58,20 +64,20 @@ fn caller() { callee(&x, ${t.params.aliased ? `&x` : `&y`}); } `; - t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); - }); + t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); +}); -g.test('one_pointer_one_module_scope') - .desc(`Test aliasing of a pointer with a direct access to a module-scope variable.`) - .params(u => - u - .combine('a_use', keysOf(kUses)) - .combine('b_use', keysOf(kUses)) - .combine('aliased', [true, false]) - .beginSubcases() - ) - .fn(t => { - const code = ` +g.test('one_pointer_one_module_scope'). +desc(`Test aliasing of a pointer with a direct access to a module-scope variable.`). +params((u) => +u. +combine('a_use', keysOf(kUses)). +combine('b_use', keysOf(kUses)). +combine('aliased', [true, false]). +beginSubcases() +). +fn((t) => { + const code = ` var x : i32; var y : i32; @@ -85,20 +91,20 @@ fn caller() { callee(${t.params.aliased ? `&x` : `&y`}); } `; - t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); - }); + t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); +}); -g.test('subcalls') - .desc(`Test aliasing of two pointers passed to a function, and then passed to other functions.`) - .params(u => - u - .combine('a_use', ['no_access', 'assign', 'binary_lhs']) - .combine('b_use', ['no_access', 'assign', 'binary_lhs']) - .combine('aliased', [true, false]) - .beginSubcases() - ) - .fn(t => { - const code = ` +g.test('subcalls'). +desc(`Test aliasing of two pointers passed to a function, and then passed to other functions.`). +params((u) => +u. +combine('a_use', ['no_access', 'assign', 'binary_lhs']). +combine('b_use', ['no_access', 'assign', 'binary_lhs']). +combine('aliased', [true, false]). +beginSubcases() +). +fn((t) => { + const code = ` var x : i32; var y : i32; @@ -126,20 +132,20 @@ fn caller() { callee(&x, ${t.params.aliased ? `&x` : `&y`}); } `; - t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); - }); + t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); +}); -g.test('member_accessors') - .desc(`Test aliasing of two pointers passed to a function and used with member accessors.`) - .params(u => - u - .combine('a_use', ['no_access', 'assign', 'binary_lhs']) - .combine('b_use', ['no_access', 'assign', 'binary_lhs']) - .combine('aliased', [true, false]) - .beginSubcases() - ) - .fn(t => { - const code = ` +g.test('member_accessors'). +desc(`Test aliasing of two pointers passed to a function and used with member accessors.`). +params((u) => +u. +combine('a_use', ['no_access', 'assign', 'binary_lhs']). +combine('b_use', ['no_access', 'assign', 'binary_lhs']). +combine('aliased', [true, false]). +beginSubcases() +). +fn((t) => { + const code = ` struct S { a : i32 } var x : S; @@ -156,14 +162,14 @@ fn caller() { callee(&x, ${t.params.aliased ? `&x` : `&y`}); } `; - t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); - }); + t.expectCompileResult(shouldPass(t.params.aliased, t.params.a_use, t.params.b_use), code); +}); -g.test('same_pointer_read_and_write') - .desc(`Test that we can read from and write to the same pointer.`) - .params(u => u.beginSubcases()) - .fn(t => { - const code = ` +g.test('same_pointer_read_and_write'). +desc(`Test that we can read from and write to the same pointer.`). +params((u) => u.beginSubcases()). +fn((t) => { + const code = ` var v : i32; fn callee(p : ptr) { @@ -174,14 +180,14 @@ fn caller() { callee(&v); } `; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); -g.test('aliasing_inside_function') - .desc(`Test that we can alias pointers inside a function.`) - .params(u => u.beginSubcases()) - .fn(t => { - const code = ` +g.test('aliasing_inside_function'). +desc(`Test that we can alias pointers inside a function.`). +params((u) => u.beginSubcases()). +fn((t) => { + const code = ` var v : i32; fn foo() { @@ -192,5 +198,5 @@ fn foo() { *p2 = 42; } `; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/restrictions.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/restrictions.spec.js index 84167312ac8..94e38837d95 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/restrictions.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/functions/restrictions.spec.js @@ -1,26 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for function restrictions`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for function restrictions`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); + + + + + + const kVertexPosCases = { bare_position: { name: `@builtin(position) vec4f`, value: `vec4f()`, valid: true }, nested_position: { name: `pos_struct`, value: `pos_struct()`, valid: true }, no_bare_position: { name: `vec4f`, value: `vec4f()`, valid: false }, - no_nested_position: { name: `no_pos_struct`, value: `no_pos_struct()`, valid: false }, + no_nested_position: { name: `no_pos_struct`, value: `no_pos_struct()`, valid: false } }; -g.test('vertex_returns_position') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc(`Test that a vertex shader should return position`) - .params(u => u.combine('case', keysOf(kVertexPosCases))) - .fn(t => { - const testcase = kVertexPosCases[t.params.case]; - const code = ` +g.test('vertex_returns_position'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc(`Test that a vertex shader should return position`). +params((u) => u.combine('case', keysOf(kVertexPosCases))). +fn((t) => { + const testcase = kVertexPosCases[t.params.case]; + const code = ` struct pos_struct { @builtin(position) pos : vec4f } @@ -34,28 +39,28 @@ fn main() -> ${testcase.name} { return ${testcase.value}; }`; - t.expectCompileResult(testcase.valid, code); - }); + t.expectCompileResult(testcase.valid, code); +}); -g.test('entry_point_call_target') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc(`Test that an entry point cannot be the target of a function call`) - .params(u => - u - .combine('stage', ['@fragment', '@vertex', '@compute @workgroup_size(1,1,1)']) - .combine('entry_point', ['with', 'without']) - ) - .fn(t => { - const use_attr = t.params.entry_point === 'with'; - let ret_attr = ''; - if (use_attr && t.params.stage === '@vertex') { - ret_attr = '@builtin(position)'; - } - const ret = t.params.stage.indexOf('@vertex') === 0 ? `-> ${ret_attr} vec4f` : ''; - const ret_value = t.params.stage.indexOf('@vertex') === 0 ? `return vec4f();` : ''; - const call = t.params.stage.indexOf('@vertex') === 0 ? 'let tmp = bar();' : 'bar();'; - const stage_attr = use_attr ? t.params.stage : ''; - const code = ` +g.test('entry_point_call_target'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc(`Test that an entry point cannot be the target of a function call`). +params((u) => +u. +combine('stage', ['@fragment', '@vertex', '@compute @workgroup_size(1,1,1)']). +combine('entry_point', ['with', 'without']) +). +fn((t) => { + const use_attr = t.params.entry_point === 'with'; + let ret_attr = ''; + if (use_attr && t.params.stage === '@vertex') { + ret_attr = '@builtin(position)'; + } + const ret = t.params.stage.indexOf('@vertex') === 0 ? `-> ${ret_attr} vec4f` : ''; + const ret_value = t.params.stage.indexOf('@vertex') === 0 ? `return vec4f();` : ''; + const call = t.params.stage.indexOf('@vertex') === 0 ? 'let tmp = bar();' : 'bar();'; + const stage_attr = use_attr ? t.params.stage : ''; + const code = ` ${stage_attr} fn bar() ${ret} { ${ret_value} @@ -65,8 +70,14 @@ fn foo() { ${call} } `; - t.expectCompileResult(!use_attr, code); - }); + t.expectCompileResult(!use_attr, code); +}); + + + + + + const kFunctionRetTypeCases = { // Constructible types, @@ -106,32 +117,32 @@ const kFunctionRetTypeCases = { texture_multisampled: { name: `texture_multisampled_2d`, value: `t_multisampled`, - valid: false, + valid: false }, texture_storage: { name: `texture_storage_2d`, value: `t_storage`, - valid: false, + valid: false }, sampler: { name: `sampler`, value: `s`, valid: false }, sampler_comparison: { name: `sampler_comparison`, value: `s_depth`, valid: false }, - ptr: { name: `ptr>`, value: `&atomic_wg`, valid: false }, + ptr: { name: `ptr>`, value: `&atomic_wg`, valid: false } }; -g.test('function_return_types') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc(`Test that function return types must be constructible`) - .params(u => u.combine('case', keysOf(kFunctionRetTypeCases))) - .beforeAllSubcases(t => { - if (kFunctionRetTypeCases[t.params.case].name === 'f16') { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const testcase = kFunctionRetTypeCases[t.params.case]; - const enable = testcase.name === 'f16' ? 'enable f16;' : ''; - const value = testcase.value === '' ? `${testcase.name}()` : testcase.value; - const code = ` +g.test('function_return_types'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc(`Test that function return types must be constructible`). +params((u) => u.combine('case', keysOf(kFunctionRetTypeCases))). +beforeAllSubcases((t) => { + if (kFunctionRetTypeCases[t.params.case].name === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const testcase = kFunctionRetTypeCases[t.params.case]; + const enable = testcase.name === 'f16' ? 'enable f16;' : ''; + const value = testcase.value === '' ? `${testcase.name}()` : testcase.value; + const code = ` ${enable} struct runtime_array_struct { @@ -176,8 +187,13 @@ fn foo() -> ${testcase.name} { return ${value}; }`; - t.expectCompileResult(testcase.valid, code); - }); + t.expectCompileResult(testcase.valid, code); +}); + + + + + const kFunctionParamTypeCases = { // Constructible types, @@ -218,7 +234,7 @@ const kFunctionParamTypeCases = { texture_depth: { name: `texture_depth_2d`, valid: true }, texture_multisampled: { name: `texture_multisampled_2d`, - valid: true, + valid: true }, texture_storage: { name: `texture_storage_2d`, valid: true }, sampler: { name: `sampler`, valid: true }, @@ -244,22 +260,22 @@ const kFunctionParamTypeCases = { ptr16: { name: `ptr`, valid: false }, // Can't specify access mode ptr17: { name: `ptr`, valid: false }, // Can't specify access mode ptrWorkgroupAtomic: { name: `ptr>`, valid: false }, - ptrWorkgroupNestedAtomic: { name: `ptr,1>>`, valid: false }, + ptrWorkgroupNestedAtomic: { name: `ptr,1>>`, valid: false } }; -g.test('function_parameter_types') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc(`Test validation of user-declared function parameter types`) - .params(u => u.combine('case', keysOf(kFunctionParamTypeCases))) - .beforeAllSubcases(t => { - if (kFunctionParamTypeCases[t.params.case].name === 'f16') { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const testcase = kFunctionParamTypeCases[t.params.case]; - const enable = testcase.name === 'f16' ? 'enable f16;' : ''; - const code = ` +g.test('function_parameter_types'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc(`Test validation of user-declared function parameter types`). +params((u) => u.combine('case', keysOf(kFunctionParamTypeCases))). +beforeAllSubcases((t) => { + if (kFunctionParamTypeCases[t.params.case].name === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const testcase = kFunctionParamTypeCases[t.params.case]; + const enable = testcase.name === 'f16' ? 'enable f16;' : ''; + const code = ` ${enable} struct runtime_array_struct { @@ -280,8 +296,13 @@ struct struct_with_array { fn foo(param : ${testcase.name}) { }`; - t.expectCompileResult(testcase.valid, code); - }); + t.expectCompileResult(testcase.valid, code); +}); + + + + + const kFunctionParamValueCases = { // Values @@ -413,7 +434,7 @@ const kFunctionParamValueCases = { ptr9: { value: `&ro_constructible.b`, matches: [] }, ptr10: { value: `&rw_constructible`, matches: [] }, ptr11: { value: `&uniform_constructible`, matches: [] }, - ptr12: { value: `&ro_constructible`, matches: [] }, + ptr12: { value: `&ro_constructible`, matches: [] } }; function parameterMatches(decl, matches) { @@ -425,29 +446,29 @@ function parameterMatches(decl, matches) { return false; } -g.test('function_parameter_matching') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc( - `Test that function parameter types match function parameter type on user-declared functions` - ) - .params(u => - u - .combine('decl', keysOf(kFunctionParamTypeCases)) - .combine('arg', keysOf(kFunctionParamValueCases)) - .filter(u => { - return kFunctionParamTypeCases[u.decl].valid; - }) - ) - .beforeAllSubcases(t => { - if (kFunctionParamTypeCases[t.params.decl].name === 'f16') { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const param = kFunctionParamTypeCases[t.params.decl]; - const arg = kFunctionParamValueCases[t.params.arg]; - const enable = param.name === 'f16' ? 'enable f16;' : ''; - const code = ` +g.test('function_parameter_matching'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc( + `Test that function parameter types match function parameter type on user-declared functions` +). +params((u) => +u. +combine('decl', keysOf(kFunctionParamTypeCases)). +combine('arg', keysOf(kFunctionParamValueCases)). +filter((u) => { + return kFunctionParamTypeCases[u.decl].valid; +}) +). +beforeAllSubcases((t) => { + if (kFunctionParamTypeCases[t.params.decl].name === 'f16') { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const param = kFunctionParamTypeCases[t.params.decl]; + const arg = kFunctionParamValueCases[t.params.arg]; + const enable = param.name === 'f16' ? 'enable f16;' : ''; + const code = ` ${enable} struct runtime_array_struct { @@ -547,26 +568,26 @@ fn foo() { } `; - t.expectCompileResult(parameterMatches(t.params.decl, arg.matches), code); - }); + t.expectCompileResult(parameterMatches(t.params.decl, arg.matches), code); +}); -g.test('no_direct_recursion') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc(`Test that functions cannot be directly recursive`) - .fn(t => { - const code = ` +g.test('no_direct_recursion'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc(`Test that functions cannot be directly recursive`). +fn((t) => { + const code = ` fn foo() { foo(); }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('no_indirect_recursion') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction') - .desc(`Test that functions cannot be indirectly recursive`) - .fn(t => { - const code = ` +g.test('no_indirect_recursion'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-restriction'). +desc(`Test that functions cannot be indirectly recursive`). +fn((t) => { + const code = ` fn bar() { foo(); } @@ -574,17 +595,17 @@ fn foo() { bar(); }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('param_names_must_differ') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-declaration-sec') - .desc(`Test that function parameters must have different names`) - .params(u => u.combine('p1', ['a', 'b', 'c']).combine('p2', ['a', 'b', 'c'])) - .fn(t => { - const code = `fn foo(${t.params.p1} : u32, ${t.params.p2} : f32) { }`; - t.expectCompileResult(t.params.p1 !== t.params.p2, code); - }); +g.test('param_names_must_differ'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-declaration-sec'). +desc(`Test that function parameters must have different names`). +params((u) => u.combine('p1', ['a', 'b', 'c']).combine('p2', ['a', 'b', 'c'])). +fn((t) => { + const code = `fn foo(${t.params.p1} : u32, ${t.params.p2} : f32) { }`; + t.expectCompileResult(t.params.p1 !== t.params.p2, code); +}); const kParamUseCases = { body: `fn foo(param : u32) { @@ -597,61 +618,68 @@ const kParamUseCases = { override: `override o : u32 = param; fn foo(param : u32) { }`, function: `fn bar() { let tmp = param; } - fn foo(param : u32) { }`, + fn foo(param : u32) { }` }; -g.test('param_scope_is_function_body') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-declaration-sec') - .desc(`Test that function parameters are only in scope in the function body`) - .params(u => u.combine('use', keysOf(kParamUseCases))) - .fn(t => { - t.expectCompileResult(t.params.use === 'body', kParamUseCases[t.params.use]); - }); +g.test('param_scope_is_function_body'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-declaration-sec'). +desc(`Test that function parameters are only in scope in the function body`). +params((u) => u.combine('use', keysOf(kParamUseCases))). +fn((t) => { + t.expectCompileResult(t.params.use === 'body', kParamUseCases[t.params.use]); +}); -g.test('param_number_matches_call') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-calls') - .desc(`Test that function calls have an equal number of arguments as the number of parameters`) - .params(u => - u.combine('num_args', [0, 1, 2, 3, 4, 255]).combine('num_params', [0, 1, 2, 3, 4, 255]) - ) - .fn(t => { - let code = ` +g.test('param_number_matches_call'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-calls'). +desc(`Test that function calls have an equal number of arguments as the number of parameters`). +params((u) => +u. +combine('num_args', [0, 1, 2, 3, 4, 255]). +combine('num_params', [0, 1, 2, 3, 4, 255]) +). +fn((t) => { + let code = ` fn bar(`; - for (let i = 0; i < t.params.num_params; i++) { - code += `p${i} : u32,`; - } - code += `) { }\n`; - code += `fn foo() {\nbar(`; - for (let i = 0; i < t.params.num_args; i++) { - code += `0,`; - } - code += `);\n}`; - t.expectCompileResult(t.params.num_args === t.params.num_params, code); - }); + for (let i = 0; i < t.params.num_params; i++) { + code += `p${i} : u32,`; + } + code += `) { }\n`; + code += `fn foo() {\nbar(`; + for (let i = 0; i < t.params.num_args; i++) { + code += `0,`; + } + code += `);\n}`; + t.expectCompileResult(t.params.num_args === t.params.num_params, code); +}); const kParamsTypes = ['u32', 'i32', 'f32']; + + + + + const kArgValues = { abstract_int: { value: '0', - matches: ['u32', 'i32', 'f32'], + matches: ['u32', 'i32', 'f32'] }, abstract_float: { value: '0.0', - matches: ['f32'], + matches: ['f32'] }, unsigned_int: { value: '0u', - matches: ['u32'], + matches: ['u32'] }, signed_int: { value: '0i', - matches: ['i32'], + matches: ['i32'] }, float: { value: '0f', - matches: ['f32'], - }, + matches: ['f32'] + } }; function checkArgTypeMatch(param_type, arg_matches) { @@ -663,67 +691,67 @@ function checkArgTypeMatch(param_type, arg_matches) { return false; } -g.test('call_arg_types_match_params') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-calls') - .desc(`Test that the argument types match in order`) - .params(u => - u - .combine('num_args', [1, 2, 3]) - .combine('p1_type', kParamsTypes) - .combine('p2_type', kParamsTypes) - .combine('p3_type', kParamsTypes) - .combine('arg1_value', keysOf(kArgValues)) - .combine('arg2_value', keysOf(kArgValues)) - .combine('arg3_value', keysOf(kArgValues)) - ) - .fn(t => { - let code = ` +g.test('call_arg_types_match_params'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#function-calls'). +desc(`Test that the argument types match in order`). +params((u) => +u. +combine('num_args', [1, 2, 3]). +combine('p1_type', kParamsTypes). +combine('p2_type', kParamsTypes). +combine('p3_type', kParamsTypes). +combine('arg1_value', keysOf(kArgValues)). +combine('arg2_value', keysOf(kArgValues)). +combine('arg3_value', keysOf(kArgValues)) +). +fn((t) => { + let code = ` fn bar(`; - for (let i = 0; i < t.params.num_args; i++) { - switch (i) { - case 0: - default: { + for (let i = 0; i < t.params.num_args; i++) { + switch (i) { + case 0: + default:{ code += `p${i} : ${t.params.p1_type},`; break; } - case 1: { + case 1:{ code += `p${i} : ${t.params.p2_type},`; break; } - case 2: { + case 2:{ code += `p${i} : ${t.params.p3_type},`; break; } - } } - code += `) { } + } + code += `) { } fn foo() { bar(`; - for (let i = 0; i < t.params.num_args; i++) { - switch (i) { - case 0: - default: { + for (let i = 0; i < t.params.num_args; i++) { + switch (i) { + case 0: + default:{ code += `${kArgValues[t.params.arg1_value].value},`; break; } - case 1: { + case 1:{ code += `${kArgValues[t.params.arg2_value].value},`; break; } - case 2: { + case 2:{ code += `${kArgValues[t.params.arg3_value].value},`; break; } - } } - code += `);\n}`; + } + code += `);\n}`; - let res = checkArgTypeMatch(t.params.p1_type, kArgValues[t.params.arg1_value].matches); - if (res && t.params.num_args > 1) { - res = checkArgTypeMatch(t.params.p2_type, kArgValues[t.params.arg2_value].matches); - } - if (res && t.params.num_args > 2) { - res = checkArgTypeMatch(t.params.p3_type, kArgValues[t.params.arg3_value].matches); - } - t.expectCompileResult(res, code); - }); + let res = checkArgTypeMatch(t.params.p1_type, kArgValues[t.params.arg1_value].matches); + if (res && t.params.num_args > 1) { + res = checkArgTypeMatch(t.params.p2_type, kArgValues[t.params.arg2_value].matches); + } + if (res && t.params.num_args > 2) { + res = checkArgTypeMatch(t.params.p3_type, kArgValues[t.params.arg3_value].matches); + } + t.expectCompileResult(res, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/align.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/align.spec.js index 9fd1987a756..e0fae5a6930 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/align.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/align.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for @align`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for @align`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,124 +9,124 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { blank: { src: '', - pass: true, + pass: true }, one: { src: '@align(1)', - pass: true, + pass: true }, four_a: { src: '@align(4)', - pass: true, + pass: true }, four_i: { src: '@align(4i)', - pass: true, + pass: true }, four_u: { src: '@align(4u)', - pass: true, + pass: true }, four_hex: { src: '@align(0x4)', - pass: true, + pass: true }, trailing_comma: { src: '@align(4,)', - pass: true, + pass: true }, const_u: { src: '@align(u_val)', - pass: true, + pass: true }, const_i: { src: '@align(i_val)', - pass: true, + pass: true }, const_expr: { src: '@align(i_val + 4 - 6)', - pass: true, + pass: true }, large: { src: '@align(1073741824)', - pass: true, + pass: true }, tabs: { src: '@\talign\t(4)', - pass: true, + pass: true }, comment: { src: '@/*comment*/align/*comment*/(4)', - pass: true, + pass: true }, misspelling: { src: '@malign(4)', - pass: false, + pass: false }, empty: { src: '@align()', - pass: false, + pass: false }, missing_left_paren: { src: '@align 4)', - pass: false, + pass: false }, missing_right_paren: { src: '@align(4', - pass: false, + pass: false }, multiple_values: { src: '@align(4, 2)', - pass: false, + pass: false }, non_power_two: { src: '@align(3)', - pass: false, + pass: false }, const_f: { src: '@align(f_val)', - pass: false, + pass: false }, one_f: { src: '@align(1.0)', - pass: false, + pass: false }, four_f: { src: '@align(4f)', - pass: false, + pass: false }, four_h: { src: '@align(4h)', - pass: false, + pass: false }, no_params: { src: '@align', - pass: false, + pass: false }, zero_a: { src: '@align(0)', - pass: false, + pass: false }, negative: { src: '@align(-4)', - pass: false, + pass: false }, large_no_power_two: { src: '@align(2147483646)', - pass: false, + pass: false }, larger_than_max_i32: { src: '@align(2147483648)', - pass: false, - }, + pass: false + } }; -g.test('parsing') - .desc(`Test that @align is parsed correctly.`) - .params(u => u.combine('align', keysOf(kTests))) - .fn(t => { - const src = kTests[t.params.align].src; - const code = ` +g.test('parsing'). +desc(`Test that @align is parsed correctly.`). +params((u) => u.combine('align', keysOf(kTests))). +fn((t) => { + const src = kTests[t.params.align].src; + const code = ` const i_val: i32 = 4; const u_val: u32 = 4; const f_val: f32 = 4.2; @@ -142,152 +141,152 @@ var uniform_buffer: B; fn main() -> @location(0) vec4 { return vec4(.4, .2, .3, .1); }`; - t.expectCompileResult(kTests[t.params.align].pass, code); - }); + t.expectCompileResult(kTests[t.params.align].pass, code); +}); -g.test('required_alignment') - .desc('Test that the align with an invalid size is an error') - .params(u => - u - .combine('address_space', ['storage', 'uniform']) - .combine('align', [1, 2, 'alignment', 32]) - .combine('type', [ - { name: 'i32', storage: 4, uniform: 4 }, - { name: 'u32', storage: 4, uniform: 4 }, - { name: 'f32', storage: 4, uniform: 4 }, - { name: 'f16', storage: 2, uniform: 2 }, - { name: 'atomic', storage: 4, uniform: 4 }, - { name: 'vec2', storage: 8, uniform: 8 }, - { name: 'vec2', storage: 4, uniform: 4 }, - { name: 'vec3', storage: 16, uniform: 16 }, - { name: 'vec3', storage: 8, uniform: 8 }, - { name: 'vec4', storage: 16, uniform: 16 }, - { name: 'vec4', storage: 8, uniform: 8 }, - { name: 'mat2x2', storage: 8, uniform: 8 }, - { name: 'mat3x2', storage: 8, uniform: 8 }, - { name: 'mat4x2', storage: 8, uniform: 8 }, - { name: 'mat2x2', storage: 4, uniform: 4 }, - { name: 'mat3x2', storage: 4, uniform: 4 }, - { name: 'mat4x2', storage: 4, uniform: 4 }, - { name: 'mat2x3', storage: 16, uniform: 16 }, - { name: 'mat3x3', storage: 16, uniform: 16 }, - { name: 'mat4x3', storage: 16, uniform: 16 }, - { name: 'mat2x3', storage: 8, uniform: 8 }, - { name: 'mat3x3', storage: 8, uniform: 8 }, - { name: 'mat4x3', storage: 8, uniform: 8 }, - { name: 'mat2x4', storage: 16, uniform: 16 }, - { name: 'mat3x4', storage: 16, uniform: 16 }, - { name: 'mat4x4', storage: 16, uniform: 16 }, - { name: 'mat2x4', storage: 8, uniform: 8 }, - { name: 'mat3x4', storage: 8, uniform: 8 }, - { name: 'mat4x4', storage: 8, uniform: 8 }, - { name: 'array, 2>', storage: 8, uniform: 16 }, - { name: 'array, 2>', storage: 8, uniform: 16 }, - { name: 'S', storage: 8, uniform: 16 }, - ]) - .beginSubcases() - ) - .beforeAllSubcases(t => { - if (t.params.type.name.includes('f16')) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - // While this would fail validation, it doesn't fail for any reasons related to alignment. - // Atomics are not allowed in uniform address space as they have to be read_write. - if (t.params.address_space === 'uniform' && t.params.type.name.startsWith('atomic')) { - t.skip('No atomics in uniform address space'); - } +g.test('required_alignment'). +desc('Test that the align with an invalid size is an error'). +params((u) => +u. +combine('address_space', ['storage', 'uniform']). +combine('align', [1, 2, 'alignment', 32]). +combine('type', [ +{ name: 'i32', storage: 4, uniform: 4 }, +{ name: 'u32', storage: 4, uniform: 4 }, +{ name: 'f32', storage: 4, uniform: 4 }, +{ name: 'f16', storage: 2, uniform: 2 }, +{ name: 'atomic', storage: 4, uniform: 4 }, +{ name: 'vec2', storage: 8, uniform: 8 }, +{ name: 'vec2', storage: 4, uniform: 4 }, +{ name: 'vec3', storage: 16, uniform: 16 }, +{ name: 'vec3', storage: 8, uniform: 8 }, +{ name: 'vec4', storage: 16, uniform: 16 }, +{ name: 'vec4', storage: 8, uniform: 8 }, +{ name: 'mat2x2', storage: 8, uniform: 8 }, +{ name: 'mat3x2', storage: 8, uniform: 8 }, +{ name: 'mat4x2', storage: 8, uniform: 8 }, +{ name: 'mat2x2', storage: 4, uniform: 4 }, +{ name: 'mat3x2', storage: 4, uniform: 4 }, +{ name: 'mat4x2', storage: 4, uniform: 4 }, +{ name: 'mat2x3', storage: 16, uniform: 16 }, +{ name: 'mat3x3', storage: 16, uniform: 16 }, +{ name: 'mat4x3', storage: 16, uniform: 16 }, +{ name: 'mat2x3', storage: 8, uniform: 8 }, +{ name: 'mat3x3', storage: 8, uniform: 8 }, +{ name: 'mat4x3', storage: 8, uniform: 8 }, +{ name: 'mat2x4', storage: 16, uniform: 16 }, +{ name: 'mat3x4', storage: 16, uniform: 16 }, +{ name: 'mat4x4', storage: 16, uniform: 16 }, +{ name: 'mat2x4', storage: 8, uniform: 8 }, +{ name: 'mat3x4', storage: 8, uniform: 8 }, +{ name: 'mat4x4', storage: 8, uniform: 8 }, +{ name: 'array, 2>', storage: 8, uniform: 16 }, +{ name: 'array, 2>', storage: 8, uniform: 16 }, +{ name: 'S', storage: 8, uniform: 16 }] +). +beginSubcases() +). +beforeAllSubcases((t) => { + if (t.params.type.name.includes('f16')) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + // While this would fail validation, it doesn't fail for any reasons related to alignment. + // Atomics are not allowed in uniform address space as they have to be read_write. + if (t.params.address_space === 'uniform' && t.params.type.name.startsWith('atomic')) { + t.skip('No atomics in uniform address space'); + } - let code = ''; - if (t.params.type.name.includes('f16')) { - code += 'enable f16;\n'; - } + let code = ''; + if (t.params.type.name.includes('f16')) { + code += 'enable f16;\n'; + } - // Testing the struct case, generate the structf - if (t.params.type.name === 'S') { - code += `struct S { + // Testing the struct case, generate the structf + if (t.params.type.name === 'S') { + code += `struct S { a: mat4x2, // Align 8 b: array, 2>, // Storage align 8, uniform 16 + t.params.address_space === 'storage' ? 2 : 4 + }, 2>, // Storage align 8, uniform 16 } `; - } + } - let align = t.params.align; - if (t.params.align === 'alignment') { - // Alignment value listed in the spec - if (t.params.address_space === 'storage') { - align = `${t.params.type.storage}`; - } else { - align = `${t.params.type.uniform}`; - } - } - - let address_space = 'uniform'; + let align = t.params.align; + if (t.params.align === 'alignment') { + // Alignment value listed in the spec if (t.params.address_space === 'storage') { - // atomics require read_write, not just the default of read - address_space = 'storage, read_write'; + align = `${t.params.type.storage}`; + } else { + align = `${t.params.type.uniform}`; } + } - code += `struct MyStruct { + let address_space = 'uniform'; + if (t.params.address_space === 'storage') { + // atomics require read_write, not just the default of read + address_space = 'storage, read_write'; + } + + code += `struct MyStruct { @align(${align}) a: ${t.params.type.name}, } @group(0) @binding(0) var<${address_space}> a : MyStruct;`; - code += ` + code += ` @fragment fn main() -> @location(0) vec4 { return vec4(.4, .2, .3, .1); }`; - // An array of `vec2` in uniform will not validate because, while the alignment on the array - // itself is fine, the `vec2` element inside the array will have the wrong alignment. Uniform - // requires that inner vec2 to have an align 16 which can only be done by specifying `vec4` - // instead. - const fails = - t.params.address_space === 'uniform' && t.params.type.name.startsWith('array - u - .combine('scope', [ - 'private-var', - 'storage-var', - 'struct-member', - 'fn-decl', - 'fn-param', - 'fn-var', - 'fn-return', - 'while-stmt', - undefined, - ]) - .combine('attribute', [ - { - 'private-var': false, - 'storage-var': false, - 'struct-member': true, - 'fn-decl': false, - 'fn-param': false, - 'fn-var': false, - 'fn-return': false, - 'while-stmt': false, - }, - ]) - .beginSubcases() - ) - .fn(t => { - const scope = t.params.scope; +g.test('placement'). +desc('Tests the locations @align is allowed to appear'). +params((u) => +u. +combine('scope', [ +'private-var', +'storage-var', +'struct-member', +'fn-decl', +'fn-param', +'fn-var', +'fn-return', +'while-stmt', +undefined] +). +combine('attribute', [ +{ + 'private-var': false, + 'storage-var': false, + 'struct-member': true, + 'fn-decl': false, + 'fn-param': false, + 'fn-var': false, + 'fn-return': false, + 'while-stmt': false +}] +). +beginSubcases() +). +fn((t) => { + const scope = t.params.scope; - const attr = '@align(32)'; - const code = ` + const attr = '@align(32)'; + const code = ` ${scope === 'private-var' ? attr : ''} var priv_var : i32; @@ -316,21 +315,21 @@ g.test('placement') } `; - t.expectCompileResult(scope === undefined || t.params.attribute[scope], code); - }); + t.expectCompileResult(scope === undefined || t.params.attribute[scope], code); +}); -g.test('multi_align') - .desc('Tests that align multiple times is an error') - .params(u => u.combine('multi', [true, false])) - .fn(t => { - let code = `struct A { +g.test('multi_align'). +desc('Tests that align multiple times is an error'). +params((u) => u.combine('multi', [true, false])). +fn((t) => { + let code = `struct A { @align(128) `; - if (t.params.multi === true) { - code += '@align(128) '; - } + if (t.params.multi === true) { + code += '@align(128) '; + } - code += `a : i32, + code += `a : i32, } @fragment @@ -338,5 +337,5 @@ g.test('multi_align') return vec4(1., 1., 1., 1.); }`; - t.expectCompileResult(!t.params.multi, code); - }); + t.expectCompileResult(!t.params.multi, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/attribute.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/attribute.spec.js index 618fb719f7c..3d8a1ba9c9f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/attribute.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/attribute.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for attributes`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for attributes`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -13,7 +12,7 @@ const kPossibleValues = { override: 'a_override', user_func: 'a_func()', const_func: 'min(4, 8)', - const: 'a_const', + const: 'a_const' }; const kAttributeUsage = { align: '@align($val)', @@ -22,7 +21,7 @@ const kAttributeUsage = { id: '@id($val)', location: '@location($val)', size: '@size($val)', - workgroup_size: '@workgroup_size($val, $val, $val)', + workgroup_size: '@workgroup_size($val, $val, $val)' }; const kAllowedUsages = { align: ['val', 'expr', 'const', 'const_func'], @@ -31,29 +30,29 @@ const kAllowedUsages = { id: ['val', 'expr', 'const', 'const_func'], location: ['val', 'expr', 'const', 'const_func'], size: ['val', 'expr', 'const', 'const_func'], - workgroup_size: ['val', 'expr', 'const', 'const_func', 'override'], + workgroup_size: ['val', 'expr', 'const', 'const_func', 'override'] }; -g.test('expressions') - .desc(`Tests attributes which allow expressions`) - .params(u => - u.combine('value', keysOf(kPossibleValues)).combine('attribute', keysOf(kAllowedUsages)) - ) - .fn(t => { - const attributes = { - align: '', - binding: '@binding(0) @group(0)', - group: '@binding(1) @group(1)', - id: '@id(2)', - location: '@location(0)', - size: '', - workgroup_size: '@workgroup_size(1)', - }; +g.test('expressions'). +desc(`Tests attributes which allow expressions`). +params((u) => +u.combine('value', keysOf(kPossibleValues)).combine('attribute', keysOf(kAllowedUsages)) +). +fn((t) => { + const attributes = { + align: '', + binding: '@binding(0) @group(0)', + group: '@binding(1) @group(1)', + id: '@id(2)', + location: '@location(0)', + size: '', + workgroup_size: '@workgroup_size(1)' + }; - const val = kPossibleValues[t.params.value]; - attributes[t.params.attribute] = kAttributeUsage[t.params.attribute].replace(/(\$val)/g, val); + const val = kPossibleValues[t.params.value]; + attributes[t.params.attribute] = kAttributeUsage[t.params.attribute].replace(/(\$val)/g, val); - const code = ` + const code = ` fn a_func() -> i32 { return 4; } @@ -83,6 +82,6 @@ ${attributes.workgroup_size} fn compute_main() {} `; - const pass = kAllowedUsages[t.params.attribute].includes(t.params.value); - t.expectCompileResult(pass, code); - }); + const pass = kAllowedUsages[t.params.attribute].includes(t.params.value); + t.expectCompileResult(pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/binary_ops.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/binary_ops.spec.js index 8f5bc12b007..d605a762938 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/binary_ops.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/binary_ops.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for binary ops`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for binary ops`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,81 +9,81 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { and_bool_literal_bool_literal: { src: `let a = true & true;`, - pass: true, + pass: true }, and_bool_expr_bool_expr: { src: `let a = (1 == 2) & (3 == 4);`, - pass: true, + pass: true }, and_bool_literal_bool_expr: { src: `let a = true & (1 == 2);`, - pass: true, + pass: true }, and_bool_expr_bool_literal: { src: `let a = (1 == 2) & true;`, - pass: true, + pass: true }, and_bool_literal_int_literal: { src: `let a = true & 1;`, - pass: false, + pass: false }, and_int_literal_bool_literal: { src: `let a = 1 & true;`, - pass: false, + pass: false }, and_bool_expr_int_literal: { src: `let a = (1 == 2) & 1;`, - pass: false, + pass: false }, and_int_literal_bool_expr: { src: `let a = 1 & (1 == 2);`, - pass: false, + pass: false }, or_bool_literal_bool_literal: { src: `let a = true | true;`, - pass: true, + pass: true }, or_bool_expr_bool_expr: { src: `let a = (1 == 2) | (3 == 4);`, - pass: true, + pass: true }, or_bool_literal_bool_expr: { src: `let a = true | (1 == 2);`, - pass: true, + pass: true }, or_bool_expr_bool_literal: { src: `let a = (1 == 2) | true;`, - pass: true, + pass: true }, or_bool_literal_int_literal: { src: `let a = true | 1;`, - pass: false, + pass: false }, or_int_literal_bool_literal: { src: `let a = 1 | true;`, - pass: false, + pass: false }, or_bool_expr_int_literal: { src: `let a = (1 == 2) | 1;`, - pass: false, + pass: false }, or_int_literal_bool_expr: { src: `let a = 1 | (1 == 2);`, - pass: false, - }, + pass: false + } }; -g.test('all') - .desc('Test that binary operators are validated correctly') - .params(u => u.combine('stmt', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('all'). +desc('Test that binary operators are validated correctly'). +params((u) => u.combine('stmt', keysOf(kTests))). +fn((t) => { + const code = ` @vertex fn vtx() -> @builtin(position) vec4f { ${kTests[t.params.stmt].src} return vec4f(1); } `; - t.expectCompileResult(kTests[t.params.stmt].pass, code); - }); + t.expectCompileResult(kTests[t.params.stmt].pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/blankspace.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/blankspace.spec.js index bdee7324021..e5e07597aed 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/blankspace.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/blankspace.spec.js @@ -1,66 +1,65 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for blankspace handling`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for blankspace handling`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('null_characters') - .desc(`Test that WGSL source containing a null character is rejected.`) - .params(u => - u - .combine('contains_null', [true, false]) - .combine('placement', ['comment', 'delimiter', 'eol']) - .beginSubcases() - ) - .fn(t => { - let code = ''; - if (t.params.placement === 'comment') { - code = `// Here is a ${t.params.contains_null ? '\0' : 'Z'} character`; - } else if (t.params.placement === 'delimiter') { - code = `const${t.params.contains_null ? '\0' : ' '}name : i32 = 0;`; - } else if (t.params.placement === 'eol') { - code = `const name : i32 = 0;${t.params.contains_null ? '\0' : ''}`; - } - t.expectCompileResult(!t.params.contains_null, code); - }); +g.test('null_characters'). +desc(`Test that WGSL source containing a null character is rejected.`). +params((u) => +u. +combine('contains_null', [true, false]). +combine('placement', ['comment', 'delimiter', 'eol']). +beginSubcases() +). +fn((t) => { + let code = ''; + if (t.params.placement === 'comment') { + code = `// Here is a ${t.params.contains_null ? '\0' : 'Z'} character`; + } else if (t.params.placement === 'delimiter') { + code = `const${t.params.contains_null ? '\0' : ' '}name : i32 = 0;`; + } else if (t.params.placement === 'eol') { + code = `const name : i32 = 0;${t.params.contains_null ? '\0' : ''}`; + } + t.expectCompileResult(!t.params.contains_null, code); +}); -g.test('blankspace') - .desc(`Test that all blankspace characters act as delimiters.`) - .params(u => - u - .combine('blankspace', [ - ['\u0020', 'space'], - ['\u0009', 'horizontal_tab'], - ['\u000a', 'line_feed'], - ['\u000b', 'vertical_tab'], - ['\u000c', 'form_feed'], - ['\u000d', 'carriage_return'], - ['\u0085', 'next_line'], - ['\u200e', 'left_to_right_mark'], - ['\u200f', 'right_to_left_mark'], - ['\u2028', 'line_separator'], - ['\u2029', 'paragraph_separator'], - ]) - .beginSubcases() - ) - .fn(t => { - const code = `const${t.params.blankspace[0]}ident : i32 = 0;`; - t.expectCompileResult(true, code); - }); +g.test('blankspace'). +desc(`Test that all blankspace characters act as delimiters.`). +params((u) => +u. +combine('blankspace', [ +['\u0020', 'space'], +['\u0009', 'horizontal_tab'], +['\u000a', 'line_feed'], +['\u000b', 'vertical_tab'], +['\u000c', 'form_feed'], +['\u000d', 'carriage_return'], +['\u0085', 'next_line'], +['\u200e', 'left_to_right_mark'], +['\u200f', 'right_to_left_mark'], +['\u2028', 'line_separator'], +['\u2029', 'paragraph_separator']] +). +beginSubcases() +). +fn((t) => { + const code = `const${t.params.blankspace[0]}ident : i32 = 0;`; + t.expectCompileResult(true, code); +}); -g.test('bom') - .desc( - `Tests that including a BOM causes a shader compile error. +g.test('bom'). +desc( + `Tests that including a BOM causes a shader compile error. Note, per RFC 2632, for protocols which forbit the use of U+FEFF then the BOM is treated as a "ZERO WIDTH NO-BREAK SPACE". The "ZERO WIDTH NO-BREAK SPACE" is not a valid WGSL blankspace code point, so the BOM ends up as a shader compilation error. ` - ) - .params(u => u.combine('include_bom', [true, false])) - .fn(t => { - const code = `${t.params.include_bom ? '\uFEFF' : ''}const name : i32 = 0;`; - t.expectCompileResult(!t.params.include_bom, code); - }); +). +params((u) => u.combine('include_bom', [true, false])). +fn((t) => { + const code = `${t.params.include_bom ? '\uFEFF' : ''}const name : i32 = 0;`; + t.expectCompileResult(!t.params.include_bom, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/break.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/break.spec.js index bc615dde45c..bfdb0fc2791 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/break.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/break.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for break`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for break`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,76 +9,76 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { loop_break: { src: 'loop { break; }', - pass: true, + pass: true }, loop_if_break: { src: 'loop { if true { break; } }', - pass: true, + pass: true }, continuing_break_if: { src: 'loop { continuing { break if (true); } }', - pass: true, + pass: true }, while_break: { src: 'while true { break; }', - pass: true, + pass: true }, while_if_break: { src: 'while true { if true { break; } }', - pass: true, + pass: true }, for_break: { src: 'for (;;) { break; }', - pass: true, + pass: true }, for_if_break: { src: 'for (;;) { if true { break; } }', - pass: true, + pass: true }, switch_case_break: { src: 'switch(1) { default: { break; } }', - pass: true, + pass: true }, switch_case_if_break: { src: 'switch(1) { default: { if true { break; } } }', - pass: true, + pass: true }, break: { src: 'break;', - pass: false, + pass: false }, return_break: { src: 'return break;', - pass: false, + pass: false }, if_break: { src: 'if true { break; }', - pass: false, + pass: false }, continuing_break: { src: 'loop { continuing { break; } }', - pass: false, + pass: false }, continuing_if_break: { src: 'loop { continuing { if (true) { break; } } }', - pass: false, + pass: false }, switch_break: { src: 'switch(1) { break; }', - pass: false, - }, + pass: false + } }; -g.test('placement') - .desc('Test that break placement is validated correctly') - .params(u => u.combine('stmt', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('placement'). +desc('Test that break placement is validated correctly'). +params((u) => u.combine('stmt', keysOf(kTests))). +fn((t) => { + const code = ` @vertex fn vtx() -> @builtin(position) vec4f { ${kTests[t.params.stmt].src} return vec4f(1); } `; - t.expectCompileResult(kTests[t.params.stmt].pass, code); - }); + t.expectCompileResult(kTests[t.params.stmt].pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/builtin.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/builtin.spec.js index 083e1614fbf..4d6dc7652b9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/builtin.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/builtin.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for @builtin`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for @builtin`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,107 +9,107 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { pos: { src: `@builtin(position)`, - pass: true, + pass: true }, trailing_comma: { src: `@builtin(position,)`, - pass: true, + pass: true }, newline_in_attr: { src: `@ \n builtin(position)`, - pass: true, + pass: true }, whitespace_in_attr: { src: `@/* comment */builtin/* comment */\n\n(\t/*comment*/position/*comment*/)`, - pass: true, + pass: true }, invalid_name: { src: `@abuiltin(position)`, - pass: false, + pass: false }, no_params: { src: `@builtin`, - pass: false, + pass: false }, missing_param: { src: `@builtin()`, - pass: false, + pass: false }, missing_parens: { src: `@builtin position`, - pass: false, + pass: false }, missing_lparen: { src: `@builtin position)`, - pass: false, + pass: false }, missing_rparen: { src: `@builtin(position`, - pass: false, + pass: false }, multiple_params: { src: `@builtin(position, frag_depth)`, - pass: false, + pass: false }, ident_param: { src: `@builtin(identifier)`, - pass: false, + pass: false }, number_param: { src: `@builtin(2)`, - pass: false, - }, + pass: false + } }; -g.test('parse') - .desc(`Test that @builtin is parsed correctly.`) - .params(u => u.combine('builtin', keysOf(kTests))) - .fn(t => { - const src = kTests[t.params.builtin].src; - const code = ` +g.test('parse'). +desc(`Test that @builtin is parsed correctly.`). +params((u) => u.combine('builtin', keysOf(kTests))). +fn((t) => { + const src = kTests[t.params.builtin].src; + const code = ` @vertex fn main() -> ${src} vec4 { return vec4(.4, .2, .3, .1); }`; - t.expectCompileResult(kTests[t.params.builtin].pass, code); - }); + t.expectCompileResult(kTests[t.params.builtin].pass, code); +}); -g.test('placement') - .desc('Tests the locations @builtin is allowed to appear') - .params(u => - u - .combine('scope', [ - // The fn-param and fn-ret are part of the shader_io/builtins tests - 'private-var', - 'storage-var', - 'struct-member', - 'non-ep-param', - 'non-ep-ret', - 'fn-decl', - 'fn-var', - 'while-stmt', - undefined, - ]) - .combine('attribute', [ - { - 'private-var': false, - 'storage-var': false, - 'struct-member': true, - 'non-ep-param': false, - 'non-ep-ret': false, - 'fn-decl': false, - 'fn-var': false, - 'fn-return': false, - 'while-stmt': false, - }, - ]) - .beginSubcases() - ) - .fn(t => { - const scope = t.params.scope; +g.test('placement'). +desc('Tests the locations @builtin is allowed to appear'). +params((u) => +u. +combine('scope', [ +// The fn-param and fn-ret are part of the shader_io/builtins tests +'private-var', +'storage-var', +'struct-member', +'non-ep-param', +'non-ep-ret', +'fn-decl', +'fn-var', +'while-stmt', +undefined] +). +combine('attribute', [ +{ + 'private-var': false, + 'storage-var': false, + 'struct-member': true, + 'non-ep-param': false, + 'non-ep-ret': false, + 'fn-decl': false, + 'fn-var': false, + 'fn-return': false, + 'while-stmt': false +}] +). +beginSubcases() +). +fn((t) => { + const scope = t.params.scope; - const attr = '@builtin(vertex_index)'; - const code = ` + const attr = '@builtin(vertex_index)'; + const code = ` ${scope === 'private-var' ? attr : ''} var priv_var : u32; @@ -141,5 +140,5 @@ g.test('placement') } `; - t.expectCompileResult(scope === undefined || t.params.attribute[scope], code); - }); + t.expectCompileResult(scope === undefined || t.params.attribute[scope], code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/comments.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/comments.spec.js index 748e70bb2af..9d23bbe2025 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/comments.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/comments.spec.js @@ -1,15 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for comments`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for comments`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('comments') - .desc(`Test that valid comments are handled correctly, including nesting.`) - .fn(t => { - const code = ` +g.test('comments'). +desc(`Test that valid comments are handled correctly, including nesting.`). +fn((t) => { + const code = ` /** * Here is my shader. * @@ -23,54 +22,54 @@ parameters */) -> @location(0) vec4 { return/*block_comments_delimit_tokens*/vec4(.4, .2, .3, .1); }/* terminated block comments are OK at EOF...*/`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); -g.test('line_comment_eof') - .desc(`Test that line comments can come at EOF.`) - .fn(t => { - const code = ` +g.test('line_comment_eof'). +desc(`Test that line comments can come at EOF.`). +fn((t) => { + const code = ` @fragment fn main() -> @location(0) vec4 { return vec4(.4, .2, .3, .1); } // line comments are OK at EOF...`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); -g.test('line_comment_terminators') - .desc(`Test that line comments are terminated by any blankspace other than space and \t`) - .params(u => - u - .combine('blankspace', [ - [' ', 'space'], - ['\t', 'tab'], - ['\u000a', 'line_feed'], - ['\u000b', 'vertical_tab'], - ['\u000c', 'form_feed'], - ['\u000d', 'carriage_return'], - ['\u000d\u000a', 'carriage_return_line_feed'], - ['\u0085', 'next_line'], - ['\u2028', 'line_separator'], - ['\u2029', 'paragraph_separator'], - ]) - .beginSubcases() - ) - .fn(t => { - const code = `// Line comment${t.params.blankspace[0]}const invalid_outside_comment = should_fail`; +g.test('line_comment_terminators'). +desc(`Test that line comments are terminated by any blankspace other than space and \t`). +params((u) => +u. +combine('blankspace', [ +[' ', 'space'], +['\t', 'tab'], +['\u000a', 'line_feed'], +['\u000b', 'vertical_tab'], +['\u000c', 'form_feed'], +['\u000d', 'carriage_return'], +['\u000d\u000a', 'carriage_return_line_feed'], +['\u0085', 'next_line'], +['\u2028', 'line_separator'], +['\u2029', 'paragraph_separator']] +). +beginSubcases() +). +fn((t) => { + const code = `// Line comment${t.params.blankspace[0]}const invalid_outside_comment = should_fail`; - t.expectCompileResult([' ', '\t'].includes(t.params.blankspace[0]), code); - }); + t.expectCompileResult([' ', '\t'].includes(t.params.blankspace[0]), code); +}); -g.test('unterminated_block_comment') - .desc(`Test that unterminated block comments cause an error`) - .params(u => u.combine('terminated', [true, false]).beginSubcases()) - .fn(t => { - const code = ` +g.test('unterminated_block_comment'). +desc(`Test that unterminated block comments cause an error`). +params((u) => u.combine('terminated', [true, false]).beginSubcases()). +fn((t) => { + const code = ` /** * Unterminated block comment. * ${t.params.terminated ? '*/' : ''}`; - t.expectCompileResult(t.params.terminated, code); - }); + t.expectCompileResult(t.params.terminated, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const.spec.js index 894ab80eb63..fcc431a82a7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const.spec.js @@ -1,31 +1,30 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for @const`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for @const`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('placement') - .desc('Tests @const is not allowed to appear') - .params(u => - u.combine('scope', [ - 'private-var', - 'storage-var', - 'struct-member', - 'fn-decl', - 'fn-param', - 'fn-var', - 'fn-return', - 'while-stmt', - undefined, - ]) - ) - .fn(t => { - const scope = t.params.scope; +g.test('placement'). +desc('Tests @const is not allowed to appear'). +params((u) => +u.combine('scope', [ +'private-var', +'storage-var', +'struct-member', +'fn-decl', +'fn-param', +'fn-var', +'fn-return', +'while-stmt', +undefined] +) +). +fn((t) => { + const scope = t.params.scope; - const attr = '@const'; - const code = ` + const attr = '@const'; + const code = ` ${scope === 'private-var' ? attr : ''} var priv_var : i32; @@ -54,5 +53,5 @@ g.test('placement') } `; - t.expectCompileResult(scope === undefined, code); - }); + t.expectCompileResult(scope === undefined, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const_assert.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const_assert.spec.js index f57412e34e0..ba19057ecc3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const_assert.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/const_assert.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Parser validation tests for const_assert`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Parser validation tests for const_assert`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -15,25 +14,25 @@ const kCases = { condition_on_newline: { code: `const_assert true;`, - pass: true, + pass: true }, multiline_with_parentheses: { code: `const_assert ( true );`, - pass: true, + pass: true }, invalid_expression: { code: `const_assert(1!2);`, pass: false }, no_condition_no_parentheses: { code: `const_assert;`, pass: false }, no_condition_with_parentheses: { code: `const_assert();`, pass: false }, - not_a_boolean: { code: `const_assert 42;`, pass: false }, + not_a_boolean: { code: `const_assert 42;`, pass: false } }; -g.test('parse') - .desc(`Tests that the const_assert statement parses correctly.`) - .params(u => u.combine('case', keysOf(kCases))) - .fn(t => { - const c = kCases[t.params.case]; - t.expectCompileResult(c.pass, c.code); - }); +g.test('parse'). +desc(`Tests that the const_assert statement parses correctly.`). +params((u) => u.combine('case', keysOf(kCases))). +fn((t) => { + const c = kCases[t.params.case]; + t.expectCompileResult(c.pass, c.code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/diagnostic.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/diagnostic.spec.js index 42530a004be..8c05c6607f1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/diagnostic.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/diagnostic.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for diagnostic directive and attribute`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for diagnostic directive and attribute`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -24,40 +23,40 @@ function generateDiagnostic(type, severity, rule) { } const kValidLocations = { - module: diag => `${diag};`, - function: diag => `${diag} fn foo() { }`, - compound: diag => `fn foo() { ${diag} { } }`, - if_stmt: diag => `fn foo() { ${diag} if true { } }`, - if_then: diag => `fn foo() { if true ${diag} { } }`, - if_else: diag => `fn foo() { if true { } else ${diag} { } }`, - switch_stmt: diag => `fn foo() { ${diag} switch 0 { default { } } }`, - switch_body: diag => `fn foo() { switch 0 ${diag} { default { } } }`, - switch_default: diag => `fn foo() { switch 0 { default ${diag} { } } }`, - switch_case: diag => `fn foo() { switch 0 { case 0 ${diag} { } default { } } }`, - loop_stmt: diag => `fn foo() { ${diag} loop { break; } }`, - loop_body: diag => `fn foo() { loop ${diag} { break; } }`, - loop_continuing: diag => `fn foo() { loop { continuing ${diag} { break if true; } } }`, - while_stmt: diag => `fn foo() { ${diag} while true { break; } }`, - while_body: diag => `fn foo() { while true ${diag} { break; } }`, - for_stmt: diag => `fn foo() { ${diag} for (var i = 0; i < 10; i++) { } }`, - for_body: diag => `fn foo() { for (var i = 0; i < 10; i++) ${diag} { } }`, + module: (diag) => `${diag};`, + function: (diag) => `${diag} fn foo() { }`, + compound: (diag) => `fn foo() { ${diag} { } }`, + if_stmt: (diag) => `fn foo() { ${diag} if true { } }`, + if_then: (diag) => `fn foo() { if true ${diag} { } }`, + if_else: (diag) => `fn foo() { if true { } else ${diag} { } }`, + switch_stmt: (diag) => `fn foo() { ${diag} switch 0 { default { } } }`, + switch_body: (diag) => `fn foo() { switch 0 ${diag} { default { } } }`, + switch_default: (diag) => `fn foo() { switch 0 { default ${diag} { } } }`, + switch_case: (diag) => `fn foo() { switch 0 { case 0 ${diag} { } default { } } }`, + loop_stmt: (diag) => `fn foo() { ${diag} loop { break; } }`, + loop_body: (diag) => `fn foo() { loop ${diag} { break; } }`, + loop_continuing: (diag) => `fn foo() { loop { continuing ${diag} { break if true; } } }`, + while_stmt: (diag) => `fn foo() { ${diag} while true { break; } }`, + while_body: (diag) => `fn foo() { while true ${diag} { break; } }`, + for_stmt: (diag) => `fn foo() { ${diag} for (var i = 0; i < 10; i++) { } }`, + for_body: (diag) => `fn foo() { for (var i = 0; i < 10; i++) ${diag} { } }` }; const kInvalidLocations = { - module_var: diag => `${diag} var x : u32;`, - module_const: diag => `${diag} const x = 0;`, - module_override: diag => `${diag} override x : u32;`, - struct: diag => `${diag} struct S { x : u32 }`, - struct_member: diag => ` struct S { ${diag} x : u32 }`, - function_params: diag => `fn foo${diag}() { }`, - function_var: diag => `fn foo() { ${diag} var x = 0; }`, - function_let: diag => `fn foo() { ${diag} let x = 0; }`, - function_const: diag => `fn foo() { ${diag} const x = 0; }`, - pre_else: diag => `fn foo() { if true { } ${diag} else { } }`, - pre_default: diag => `fn foo() { switch 0 { ${diag} default { } } }`, - pre_case: diag => `fn foo() { switch 0 { ${diag} case 0 { } default { } } }`, - pre_continuing: diag => `fn foo() { loop { ${diag} continuing { break if true; } } }`, - pre_for_params: diag => `fn foo() { for ${diag} (var i = 0; i < 10; i++) { } }`, + module_var: (diag) => `${diag} var x : u32;`, + module_const: (diag) => `${diag} const x = 0;`, + module_override: (diag) => `${diag} override x : u32;`, + struct: (diag) => `${diag} struct S { x : u32 }`, + struct_member: (diag) => ` struct S { ${diag} x : u32 }`, + function_params: (diag) => `fn foo${diag}() { }`, + function_var: (diag) => `fn foo() { ${diag} var x = 0; }`, + function_let: (diag) => `fn foo() { ${diag} let x = 0; }`, + function_const: (diag) => `fn foo() { ${diag} const x = 0; }`, + pre_else: (diag) => `fn foo() { if true { } ${diag} else { } }`, + pre_default: (diag) => `fn foo() { switch 0 { ${diag} default { } } }`, + pre_case: (diag) => `fn foo() { switch 0 { ${diag} case 0 { } default { } } }`, + pre_continuing: (diag) => `fn foo() { loop { ${diag} continuing { break if true; } } }`, + pre_for_params: (diag) => `fn foo() { for ${diag} (var i = 0; i < 10; i++) { } }` }; const kNestedLocations = { @@ -65,137 +64,138 @@ const kNestedLocations = { if_stmt: (d1, d2) => `fn foo() { ${d1} if true ${d2} { } }`, switch_stmt: (d1, d2) => `fn foo() { ${d1} switch 0 ${d2} { default { } } }`, switch_body: (d1, d2) => `fn foo() { switch 0 ${d1} { default ${d2} { } } }`, - switch_case: (d1, d2) => `fn foo() { switch 0 { case 0 ${d1} { } default ${d2} { } } }`, + switch_case: (d1, d2) => + `fn foo() { switch 0 { case 0 ${d1} { } default ${d2} { } } }`, loop_stmt: (d1, d2) => `fn foo() { ${d1} loop ${d2} { break; } }`, while_stmt: (d1, d2) => `fn foo() { ${d1} while true ${d2} { break; } }`, - for_stmt: (d1, d2) => `fn foo() { ${d1} for (var i = 0; i < 10; i++) ${d2} { } }`, + for_stmt: (d1, d2) => `fn foo() { ${d1} for (var i = 0; i < 10; i++) ${d2} { } }` }; -g.test('valid_params') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests required accepted diagnostic parameters`) - .params(u => - u - .combine('severity', kSpecDiagnosticSeverities) - .combine('rule', kSpecDiagnosticRules) - .combine('type', kDiagnosticTypes) - ) - .fn(t => { - const diag = generateDiagnostic(t.params.type, t.params.severity, t.params.rule); - let code = ``; - if (t.params.type === 'directive') { - code = kValidLocations['module'](diag); - } else { - code = kValidLocations['function'](diag); - } - t.expectCompileResult(true, code); - }); +g.test('valid_params'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests required accepted diagnostic parameters`). +params((u) => +u. +combine('severity', kSpecDiagnosticSeverities). +combine('rule', kSpecDiagnosticRules). +combine('type', kDiagnosticTypes) +). +fn((t) => { + const diag = generateDiagnostic(t.params.type, t.params.severity, t.params.rule); + let code = ``; + if (t.params.type === 'directive') { + code = kValidLocations['module'](diag); + } else { + code = kValidLocations['function'](diag); + } + t.expectCompileResult(true, code); +}); -g.test('invalid_severity') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests invalid severities are rejected`) - .params(u => u.combine('severity', kBadSeverities).combine('type', kDiagnosticTypes)) - .fn(t => { - const diag = generateDiagnostic(t.params.type, t.params.severity, 'derivative_uniformity'); - let code = ``; - if (t.params.type === 'directive') { - code = kValidLocations['module'](diag); - } else { - code = kValidLocations['function'](diag); - } - t.expectCompileResult(false, code); - }); +g.test('invalid_severity'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests invalid severities are rejected`). +params((u) => u.combine('severity', kBadSeverities).combine('type', kDiagnosticTypes)). +fn((t) => { + const diag = generateDiagnostic(t.params.type, t.params.severity, 'derivative_uniformity'); + let code = ``; + if (t.params.type === 'directive') { + code = kValidLocations['module'](diag); + } else { + code = kValidLocations['function'](diag); + } + t.expectCompileResult(false, code); +}); -g.test('warning_unknown_rule') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests unknown single token rules issue a warning`) - .params(u => u.combine('type', kDiagnosticTypes).combine('rule', kBadSingleTokenRules)) - .fn(t => { - const diag = generateDiagnostic(t.params.type, 'info', t.params.rule); - let code = ``; - if (t.params.type === 'directive') { - code = kValidLocations['module'](diag); - } else { - code = kValidLocations['function'](diag); - } - t.expectCompileWarning(true, code); - }); +g.test('warning_unknown_rule'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests unknown single token rules issue a warning`). +params((u) => u.combine('type', kDiagnosticTypes).combine('rule', kBadSingleTokenRules)). +fn((t) => { + const diag = generateDiagnostic(t.params.type, 'info', t.params.rule); + let code = ``; + if (t.params.type === 'directive') { + code = kValidLocations['module'](diag); + } else { + code = kValidLocations['function'](diag); + } + t.expectCompileWarning(true, code); +}); -g.test('valid_locations') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests valid locations`) - .params(u => u.combine('type', kDiagnosticTypes).combine('location', keysOf(kValidLocations))) - .fn(t => { - const diag = generateDiagnostic(t.params.type, 'info', 'derivative_uniformity'); - const code = kValidLocations[t.params.location](diag); - let res = true; - if (t.params.type === 'directive') { - res = t.params.location === 'module'; - } else { - res = t.params.location !== 'module'; - } - if (res === false) { - t.expectCompileResult(true, kValidLocations[t.params.location]('')); - } - t.expectCompileResult(res, code); - }); +g.test('valid_locations'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests valid locations`). +params((u) => u.combine('type', kDiagnosticTypes).combine('location', keysOf(kValidLocations))). +fn((t) => { + const diag = generateDiagnostic(t.params.type, 'info', 'derivative_uniformity'); + const code = kValidLocations[t.params.location](diag); + let res = true; + if (t.params.type === 'directive') { + res = t.params.location === 'module'; + } else { + res = t.params.location !== 'module'; + } + if (res === false) { + t.expectCompileResult(true, kValidLocations[t.params.location]('')); + } + t.expectCompileResult(res, code); +}); -g.test('invalid_locations') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests invalid locations`) - .params(u => u.combine('type', kDiagnosticTypes).combine('location', keysOf(kInvalidLocations))) - .fn(t => { - const diag = generateDiagnostic(t.params.type, 'info', 'derivative_uniformity'); - t.expectCompileResult(true, kInvalidLocations[t.params.location]('')); - t.expectCompileResult(false, kInvalidLocations[t.params.location](diag)); - }); +g.test('invalid_locations'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests invalid locations`). +params((u) => u.combine('type', kDiagnosticTypes).combine('location', keysOf(kInvalidLocations))). +fn((t) => { + const diag = generateDiagnostic(t.params.type, 'info', 'derivative_uniformity'); + t.expectCompileResult(true, kInvalidLocations[t.params.location]('')); + t.expectCompileResult(false, kInvalidLocations[t.params.location](diag)); +}); -g.test('conflicting_directive') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests conflicts between directives`) - .params(u => u.combine('s1', kSpecDiagnosticSeverities).combine('s2', kSpecDiagnosticSeverities)) - .fn(t => { - const d1 = generateDiagnostic('directive', t.params.s1, 'derivative_uniformity'); - const d2 = generateDiagnostic('directive', t.params.s2, 'derivative_uniformity'); - const code = `${kValidLocations['module'](d1)}\n${kValidLocations['module'](d2)}`; - t.expectCompileResult(t.params.s1 === t.params.s2, code); - }); +g.test('conflicting_directive'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests conflicts between directives`). +params((u) => u.combine('s1', kSpecDiagnosticSeverities).combine('s2', kSpecDiagnosticSeverities)). +fn((t) => { + const d1 = generateDiagnostic('directive', t.params.s1, 'derivative_uniformity'); + const d2 = generateDiagnostic('directive', t.params.s2, 'derivative_uniformity'); + const code = `${kValidLocations['module'](d1)}\n${kValidLocations['module'](d2)}`; + t.expectCompileResult(t.params.s1 === t.params.s2, code); +}); -g.test('conflicting_attribute_same_location') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests conflicts between attributes`) - .params(u => - u - .combine('loc', keysOf(kValidLocations)) - .combine('s1', kSpecDiagnosticSeverities) - .combine('s2', kSpecDiagnosticSeverities) - .filter(u => { - return u.loc !== 'module'; - }) - ) - .fn(t => { - const d1 = generateDiagnostic('attribute', t.params.s1, 'derivative_uniformity'); - const d2 = generateDiagnostic('attribute', t.params.s2, 'derivative_uniformity'); - const diag = d1 + ' ' + d2; - const code = `${kValidLocations[t.params.loc](diag)}`; - t.expectCompileResult(t.params.s1 === t.params.s2, code); - }); +g.test('conflicting_attribute_same_location'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests conflicts between attributes`). +params((u) => +u. +combine('loc', keysOf(kValidLocations)). +combine('s1', kSpecDiagnosticSeverities). +combine('s2', kSpecDiagnosticSeverities). +filter((u) => { + return u.loc !== 'module'; +}) +). +fn((t) => { + const d1 = generateDiagnostic('attribute', t.params.s1, 'derivative_uniformity'); + const d2 = generateDiagnostic('attribute', t.params.s2, 'derivative_uniformity'); + const diag = d1 + ' ' + d2; + const code = `${kValidLocations[t.params.loc](diag)}`; + t.expectCompileResult(t.params.s1 === t.params.s2, code); +}); -g.test('conflicting_attribute_different_location') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics') - .desc(`Tests conflicts between attributes`) - .params(u => - u - .combine('loc', keysOf(kNestedLocations)) - .combine('s1', kSpecDiagnosticSeverities) - .combine('s2', kSpecDiagnosticSeverities) - .filter(u => { - return u.s1 !== u.s2; - }) - ) - .fn(t => { - const d1 = generateDiagnostic('attribute', t.params.s1, 'derivative_uniformity'); - const d2 = generateDiagnostic('attribute', t.params.s2, 'derivative_uniformity'); - const code = `${kNestedLocations[t.params.loc](d1, d2)}`; - t.expectCompileResult(true, code); - }); +g.test('conflicting_attribute_different_location'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#diagnostics'). +desc(`Tests conflicts between attributes`). +params((u) => +u. +combine('loc', keysOf(kNestedLocations)). +combine('s1', kSpecDiagnosticSeverities). +combine('s2', kSpecDiagnosticSeverities). +filter((u) => { + return u.s1 !== u.s2; +}) +). +fn((t) => { + const d1 = generateDiagnostic('attribute', t.params.s1, 'derivative_uniformity'); + const d2 = generateDiagnostic('attribute', t.params.s2, 'derivative_uniformity'); + const code = `${kNestedLocations[t.params.loc](d1, d2)}`; + t.expectCompileResult(true, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/discard.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/discard.spec.js index c2694bda16d..d7e76f6bc6d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/discard.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/discard.spec.js @@ -1,30 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for discard`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for discard`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('placement') - .desc('Test that discard usage is validated') - .params(u => - u.combine('place', ['compute', 'vertex', 'fragment', 'module', 'subfrag', 'subvert', 'subcomp']) - ) - .fn(t => { - const pos = { - module: '', - subvert: '', - subfrag: '', - subcomp: '', - vertex: '', - fragment: '', - compute: '', - }; +g.test('placement'). +desc('Test that discard usage is validated'). +params((u) => +u.combine('place', ['compute', 'vertex', 'fragment', 'module', 'subfrag', 'subvert', 'subcomp']) +). +fn((t) => { + const pos = { + module: '', + subvert: '', + subfrag: '', + subcomp: '', + vertex: '', + fragment: '', + compute: '' + }; - pos[t.params.place] = 'discard;'; + pos[t.params.place] = 'discard;'; - const code = ` + const code = ` ${pos.module} fn subvert() { @@ -61,6 +60,6 @@ fn comp() { } `; - const pass = ['fragment', 'subfrag'].includes(t.params.place); - t.expectCompileResult(pass, code); - }); + const pass = ['fragment', 'subfrag'].includes(t.params.place); + t.expectCompileResult(pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/enable.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/enable.spec.js index 6a94805e900..a95ea54acf9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/enable.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/enable.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Parser validation tests for enable`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Parser validation tests for enable`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -12,60 +11,60 @@ const kCases = { decl_before: { code: `alias i = i32; enable f16;`, - pass: false, + pass: false }, after_decl: { code: `enable f16; alias i = i32;`, - pass: true, + pass: true }, const_assert_before: { code: `const_assert 1 == 1; enable f16;`, - pass: false, + pass: false }, const_assert_after: { code: `enable f16; const_assert 1 == 1;`, - pass: true, + pass: true }, embedded_comment: { code: `/* comment */enable f16;`, - pass: true, + pass: true }, parens: { code: `enable(f16);`, - pass: false, + pass: false }, multi_line: { code: `enable f16;`, - pass: true, + pass: true }, multiple_enables: { code: `enable f16; enable f16;`, - pass: true, + pass: true }, multipe_entries: { code: `enable f16, f16, f16;`, - pass: true, + pass: true }, unknown: { code: `enable unknown;`, - pass: false, - }, + pass: false + } }; -g.test('enable') - .desc(`Tests that enables are validated correctly`) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .params(u => u.combine('case', keysOf(kCases))) - .fn(t => { - const c = kCases[t.params.case]; - t.expectCompileResult(c.pass, c.code); - }); +g.test('enable'). +desc(`Tests that enables are validated correctly`). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +params((u) => u.combine('case', keysOf(kCases))). +fn((t) => { + const c = kCases[t.params.case]; + t.expectCompileResult(c.pass, c.code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/identifiers.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/identifiers.spec.js index 2478ff096a1..d7510cc5b00 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/identifiers.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/identifiers.spec.js @@ -1,409 +1,407 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for identifiers`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for identifiers`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); const kValidIdentifiers = new Set([ - 'foo', - 'Foo', - 'FOO', - '_0', - '_foo0', - '_0foo', - 'foo__0', - 'Δέλτα', - 'réflexion', - 'Кызыл', - '𐰓𐰏𐰇', - '朝焼け', - 'سلام', - '검정', - 'שָׁלוֹם', - 'गुलाबी', - 'փիրուզ', - // Builtin type identifiers: - 'array', - 'atomic', - 'bool', - 'bf16', - 'bitcast', - 'f32', - 'f16', - 'f64', - 'i32', - 'i16', - 'i64', - 'i8', - 'mat2x2', - 'mat2x3', - 'mat2x4', - 'mat3x2', - 'mat3x3', - 'mat3x4', - 'mat4x2', - 'mat4x3', - 'mat4x4', - 'ptr', - 'quat', - 'sampler', - 'sampler_comparison', - 'signed', - 'texture_1d', - 'texture_2d', - 'texture_2d_array', - 'texture_3d', - 'texture_cube', - 'texture_cube_array', - 'texture_multisampled_2d', - 'texture_storage_1d', - 'texture_storage_2d', - 'texture_storage_2d_array', - 'texture_storage_3d', - 'texture_depth_2d', - 'texture_depth_2d_array', - 'texture_depth_cube', - 'texture_depth_cube_array', - 'texture_depth_multisampled_2d', - 'u32', - 'u16', - 'u64', - 'u8', - 'unsigned', - 'vec2', - 'vec3', - 'vec4', -]); - +'foo', +'Foo', +'FOO', +'_0', +'_foo0', +'_0foo', +'foo__0', +'Δέλτα', +'réflexion', +'Кызыл', +'𐰓𐰏𐰇', +'朝焼け', +'سلام', +'검정', +'שָׁלוֹם', +'गुलाबी', +'փիրուզ', +// Builtin type identifiers: +'array', +'atomic', +'bool', +'bf16', +'bitcast', +'f32', +'f16', +'f64', +'i32', +'i16', +'i64', +'i8', +'mat2x2', +'mat2x3', +'mat2x4', +'mat3x2', +'mat3x3', +'mat3x4', +'mat4x2', +'mat4x3', +'mat4x4', +'ptr', +'quat', +'sampler', +'sampler_comparison', +'signed', +'texture_1d', +'texture_2d', +'texture_2d_array', +'texture_3d', +'texture_cube', +'texture_cube_array', +'texture_multisampled_2d', +'texture_storage_1d', +'texture_storage_2d', +'texture_storage_2d_array', +'texture_storage_3d', +'texture_depth_2d', +'texture_depth_2d_array', +'texture_depth_cube', +'texture_depth_cube_array', +'texture_depth_multisampled_2d', +'u32', +'u16', +'u64', +'u8', +'unsigned', +'vec2', +'vec3', +'vec4'] +); const kInvalidIdentifiers = new Set([ - '_', // Single underscore is a syntactic token for phony assignment. - '__', // Leading double underscore is reserved. - '__foo', // Leading double underscore is reserved. - '0foo', // Must start with single underscore or a letter. - // No punctuation: - 'foo.bar', - 'foo-bar', - 'foo+bar', - 'foo#bar', - 'foo!bar', - 'foo\\bar', - 'foo/bar', - 'foo,bar', - 'foo@bar', - 'foo::bar', - // Keywords: - 'alias', - 'break', - 'case', - 'const', - 'const_assert', - 'continue', - 'continuing', - 'default', - 'diagnostic', - 'discard', - 'else', - 'enable', - 'false', - 'fn', - 'for', - 'if', - 'let', - 'loop', - 'override', - 'requires', - 'return', - 'struct', - 'switch', - 'true', - 'var', - 'while', - // Reserved Words - 'NULL', - 'Self', - 'abstract', - 'active', - 'alignas', - 'alignof', - 'as', - 'asm', - 'asm_fragment', - 'async', - 'attribute', - 'auto', - 'await', - 'become', - 'binding_array', - 'cast', - 'catch', - 'class', - 'co_await', - 'co_return', - 'co_yield', - 'coherent', - 'column_major', - 'common', - 'compile', - 'compile_fragment', - 'concept', - 'const_cast', - 'consteval', - 'constexpr', - 'constinit', - 'crate', - 'debugger', - 'decltype', - 'delete', - 'demote', - 'demote_to_helper', - 'do', - 'dynamic_cast', - 'enum', - 'explicit', - 'export', - 'extends', - 'extern', - 'external', - 'fallthrough', - 'filter', - 'final', - 'finally', - 'friend', - 'from', - 'fxgroup', - 'get', - 'goto', - 'groupshared', - 'highp', - 'impl', - 'implements', - 'import', - 'inline', - 'instanceof', - 'interface', - 'layout', - 'lowp', - 'macro', - 'macro_rules', - 'match', - 'mediump', - 'meta', - 'mod', - 'module', - 'move', - 'mut', - 'mutable', - 'namespace', - 'new', - 'nil', - 'noexcept', - 'noinline', - 'nointerpolation', - 'noperspective', - 'null', - 'nullptr', - 'of', - 'operator', - 'package', - 'packoffset', - 'partition', - 'pass', - 'patch', - 'pixelfragment', - 'precise', - 'precision', - 'premerge', - 'priv', - 'protected', - 'pub', - 'public', - 'readonly', - 'ref', - 'regardless', - 'register', - 'reinterpret_cast', - 'require', - 'resource', - 'restrict', - 'self', - 'set', - 'shared', - 'sizeof', - 'smooth', - 'snorm', - 'static', - 'static_assert', - 'static_cast', - 'std', - 'subroutine', - 'super', - 'target', - 'template', - 'this', - 'thread_local', - 'throw', - 'trait', - 'try', - 'type', - 'typedef', - 'typeid', - 'typename', - 'typeof', - 'union', - 'unless', - 'unorm', - 'unsafe', - 'unsized', - 'use', - 'using', - 'varying', - 'virtual', - 'volatile', - 'wgsl', - 'where', - 'with', - 'writeonly', - 'yield', -]); +'_', // Single underscore is a syntactic token for phony assignment. +'__', // Leading double underscore is reserved. +'__foo', // Leading double underscore is reserved. +'0foo', // Must start with single underscore or a letter. +// No punctuation: +'foo.bar', +'foo-bar', +'foo+bar', +'foo#bar', +'foo!bar', +'foo\\bar', +'foo/bar', +'foo,bar', +'foo@bar', +'foo::bar', +// Keywords: +'alias', +'break', +'case', +'const', +'const_assert', +'continue', +'continuing', +'default', +'diagnostic', +'discard', +'else', +'enable', +'false', +'fn', +'for', +'if', +'let', +'loop', +'override', +'requires', +'return', +'struct', +'switch', +'true', +'var', +'while', +// Reserved Words +'NULL', +'Self', +'abstract', +'active', +'alignas', +'alignof', +'as', +'asm', +'asm_fragment', +'async', +'attribute', +'auto', +'await', +'become', +'binding_array', +'cast', +'catch', +'class', +'co_await', +'co_return', +'co_yield', +'coherent', +'column_major', +'common', +'compile', +'compile_fragment', +'concept', +'const_cast', +'consteval', +'constexpr', +'constinit', +'crate', +'debugger', +'decltype', +'delete', +'demote', +'demote_to_helper', +'do', +'dynamic_cast', +'enum', +'explicit', +'export', +'extends', +'extern', +'external', +'fallthrough', +'filter', +'final', +'finally', +'friend', +'from', +'fxgroup', +'get', +'goto', +'groupshared', +'highp', +'impl', +'implements', +'import', +'inline', +'instanceof', +'interface', +'layout', +'lowp', +'macro', +'macro_rules', +'match', +'mediump', +'meta', +'mod', +'module', +'move', +'mut', +'mutable', +'namespace', +'new', +'nil', +'noexcept', +'noinline', +'nointerpolation', +'noperspective', +'null', +'nullptr', +'of', +'operator', +'package', +'packoffset', +'partition', +'pass', +'patch', +'pixelfragment', +'precise', +'precision', +'premerge', +'priv', +'protected', +'pub', +'public', +'readonly', +'ref', +'regardless', +'register', +'reinterpret_cast', +'require', +'resource', +'restrict', +'self', +'set', +'shared', +'sizeof', +'smooth', +'snorm', +'static', +'static_assert', +'static_cast', +'std', +'subroutine', +'super', +'target', +'template', +'this', +'thread_local', +'throw', +'trait', +'try', +'type', +'typedef', +'typeid', +'typename', +'typeof', +'union', +'unless', +'unorm', +'unsafe', +'unsized', +'use', +'using', +'varying', +'virtual', +'volatile', +'wgsl', +'where', +'with', +'writeonly', +'yield'] +); -g.test('module_var_name') - .desc( - `Test that valid identifiers are accepted for names of module-scope 'var's, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const type = t.params.ident === 'i32' ? 'u32' : 'i32'; - const code = `var ${t.params.ident} : ${type};`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('module_var_name'). +desc( + `Test that valid identifiers are accepted for names of module-scope 'var's, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const type = t.params.ident === 'i32' ? 'u32' : 'i32'; + const code = `var ${t.params.ident} : ${type};`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('module_const_name') - .desc( - `Test that valid identifiers are accepted for names of module-scope 'const's, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const type = t.params.ident === 'i32' ? 'u32' : 'i32'; - const code = `const ${t.params.ident} : ${type} = 0;`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('module_const_name'). +desc( + `Test that valid identifiers are accepted for names of module-scope 'const's, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const type = t.params.ident === 'i32' ? 'u32' : 'i32'; + const code = `const ${t.params.ident} : ${type} = 0;`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('override_name') - .desc( - `Test that valid identifiers are accepted for names of 'override's, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const type = t.params.ident === 'i32' ? 'u32' : 'i32'; - const code = `override ${t.params.ident} : ${type} = 0;`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('override_name'). +desc( + `Test that valid identifiers are accepted for names of 'override's, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const type = t.params.ident === 'i32' ? 'u32' : 'i32'; + const code = `override ${t.params.ident} : ${type} = 0;`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('function_name') - .desc( - `Test that valid identifiers are accepted for names of functions, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const code = `fn ${t.params.ident}() {}`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('function_name'). +desc( + `Test that valid identifiers are accepted for names of functions, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const code = `fn ${t.params.ident}() {}`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('struct_name') - .desc( - `Test that valid identifiers are accepted for names of structs, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const type = t.params.ident === 'i32' ? 'u32' : 'i32'; - const code = `struct ${t.params.ident} { i : ${type} }`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('struct_name'). +desc( + `Test that valid identifiers are accepted for names of structs, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const type = t.params.ident === 'i32' ? 'u32' : 'i32'; + const code = `struct ${t.params.ident} { i : ${type} }`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('alias_name') - .desc( - `Test that valid identifiers are accepted for names of aliases, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const type = t.params.ident === 'i32' ? 'u32' : 'i32'; - const code = `alias ${t.params.ident} = ${type};`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('alias_name'). +desc( + `Test that valid identifiers are accepted for names of aliases, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const type = t.params.ident === 'i32' ? 'u32' : 'i32'; + const code = `alias ${t.params.ident} = ${type};`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('function_param_name') - .desc( - `Test that valid identifiers are accepted for names of function parameters, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const type = t.params.ident === 'i32' ? 'u32' : 'i32'; - const code = `fn F(${t.params.ident} : ${type}) {}`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); +g.test('function_param_name'). +desc( + `Test that valid identifiers are accepted for names of function parameters, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const type = t.params.ident === 'i32' ? 'u32' : 'i32'; + const code = `fn F(${t.params.ident} : ${type}) {}`; + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('function_const_name') - .desc( - `Test that valid identifiers are accepted for names of function-scoped 'const's, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const code = `fn F() { +g.test('function_const_name'). +desc( + `Test that valid identifiers are accepted for names of function-scoped 'const's, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const code = `fn F() { const ${t.params.ident} = 1; }`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('function_let_name') - .desc( - `Test that valid identifiers are accepted for names of function-scoped 'let's, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const code = `fn F() { +g.test('function_let_name'). +desc( + `Test that valid identifiers are accepted for names of function-scoped 'let's, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const code = `fn F() { let ${t.params.ident} = 1; }`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('function_var_name') - .desc( - `Test that valid identifiers are accepted for names of function-scoped 'var's, and invalid identifiers are rejected.` - ) - .params(u => - u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() - ) - .fn(t => { - const code = `fn F() { +g.test('function_var_name'). +desc( + `Test that valid identifiers are accepted for names of function-scoped 'var's, and invalid identifiers are rejected.` +). +params((u) => +u.combine('ident', new Set([...kValidIdentifiers, ...kInvalidIdentifiers])).beginSubcases() +). +fn((t) => { + const code = `fn F() { var ${t.params.ident} = 1; }`; - t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); - }); + t.expectCompileResult(kValidIdentifiers.has(t.params.ident), code); +}); -g.test('non_normalized') - .desc(`Test that identifiers are not unicode normalized`) - .fn(t => { - const code = `var \u212b : i32; // \u212b normalizes with NFC to \u00c5 +g.test('non_normalized'). +desc(`Test that identifiers are not unicode normalized`). +fn((t) => { + const code = `var \u212b : i32; // \u212b normalizes with NFC to \u00c5 var \u00c5 : i32;`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/literal.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/literal.spec.js index 3d5b74ccd5b..de1dde69c7d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/literal.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/literal.spec.js @@ -1,298 +1,302 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for literals`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for literals`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('bools') - .desc(`Test that valid bools are accepted.`) - .params(u => u.combine('val', ['true', 'false']).beginSubcases()) - .fn(t => { - const code = `var test = ${t.params.val};`; - t.expectCompileResult(true, t.wrapInEntryPoint(code)); - }); +g.test('bools'). +desc(`Test that valid bools are accepted.`). +params((u) => u.combine('val', ['true', 'false']).beginSubcases()). +fn((t) => { + const code = `var test = ${t.params.val};`; + t.expectCompileResult(true, t.wrapInEntryPoint(code)); +}); const kAbstractIntNonNegative = new Set([ - '0x123', // hex number - '123', // signed number, no suffix - '0', // zero - '0x3f', // hex with 'f' as last character - '2147483647', // max signed int +'0x123', // hex number +'123', // signed number, no suffix +'0', // zero +'0x3f', // hex with 'f' as last character +'2147483647' // max signed int ]); const kAbstractIntNegative = new Set([ - '-0x123', // hex number - '-123', // signed number, no suffix - '-0x3f', // hex with 'f' as last character - '-2147483647', // nagative of max signed int - '-2147483648', // min signed int +'-0x123', // hex number +'-123', // signed number, no suffix +'-0x3f', // hex with 'f' as last character +'-2147483647', // nagative of max signed int +'-2147483648' // min signed int ]); const kI32 = new Set([ - '94i', // signed number - '2147483647i', // max signed int - '-2147483647i', // min parsable signed int - 'i32(-2147483648)', // min signed int +'94i', // signed number +'2147483647i', // max signed int +'-2147483647i', // min parsable signed int +'i32(-2147483648)' // min signed int ]); const kU32 = new Set([ - '42u', // unsigned number - '0u', // min unsigned int - '4294967295u', // max unsigned int +'42u', // unsigned number +'0u', // min unsigned int +'4294967295u' // max unsigned int ]); { const kValidIntegers = new Set([ - ...kAbstractIntNonNegative, - ...kAbstractIntNegative, - ...kI32, - ...kU32, - ]); - + ...kAbstractIntNonNegative, + ...kAbstractIntNegative, + ...kI32, + ...kU32] + ); const kInvalidIntegers = new Set([ - '0123', // Integer does not start with zero - '2147483648i', // max signed int + 1 - '-2147483649i', // min signed int - 1 - '4294967295', // a untyped lhs will be i32, so this is too big - '4294967295i', // max unsigned int with i suffix - '4294967296u', // max unsigned int + 1 - '-1u', // negative unsigned + '0123', // Integer does not start with zero + '2147483648i', // max signed int + 1 + '-2147483649i', // min signed int - 1 + '4294967295', // a untyped lhs will be i32, so this is too big + '4294967295i', // max unsigned int with i suffix + '4294967296u', // max unsigned int + 1 + '-1u' // negative unsigned ]); - g.test('abstract_int') - .desc(`Test that valid integers are accepted, and invalid integers are rejected.`) - .params(u => - u.combine('val', new Set([...kValidIntegers, ...kInvalidIntegers])).beginSubcases() - ) - .fn(t => { - const code = `var test = ${t.params.val};`; - t.expectCompileResult(kValidIntegers.has(t.params.val), t.wrapInEntryPoint(code)); - }); + g.test('abstract_int'). + desc(`Test that valid integers are accepted, and invalid integers are rejected.`). + params((u) => + u.combine('val', new Set([...kValidIntegers, ...kInvalidIntegers])).beginSubcases() + ). + fn((t) => { + const code = `var test = ${t.params.val};`; + t.expectCompileResult(kValidIntegers.has(t.params.val), t.wrapInEntryPoint(code)); + }); } { const kValidI32 = new Set([...kAbstractIntNonNegative, ...kAbstractIntNegative, ...kI32]); const kInvalidI32 = new Set([ - ...kU32, - '2147483648', // max signed int + 1 - '2147483648i', // max signed int + 1 - '-2147483649', // min signed int - 1 - '-2147483649i', // min signed int - 1 - '1.0', // no conversion from float - '1.0f', // no conversion from float - '1.0h', // no conversion from float + ...kU32, + '2147483648', // max signed int + 1 + '2147483648i', // max signed int + 1 + '-2147483649', // min signed int - 1 + '-2147483649i', // min signed int - 1 + '1.0', // no conversion from float + '1.0f', // no conversion from float + '1.0h' // no conversion from float ]); - g.test('i32') - .desc(`Test that valid signed integers are accepted, and invalid signed integers are rejected.`) - .params(u => u.combine('val', new Set([...kValidI32, ...kInvalidI32])).beginSubcases()) - .beforeAllSubcases(t => { - if (t.params.val.includes('h')) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const { val } = t.params; - const code = `var test: i32 = ${val};`; - const extensionList = val.includes('h') ? ['f16'] : []; - t.expectCompileResult(kValidI32.has(val), t.wrapInEntryPoint(code, extensionList)); - }); + g.test('i32'). + desc(`Test that valid signed integers are accepted, and invalid signed integers are rejected.`). + params((u) => u.combine('val', new Set([...kValidI32, ...kInvalidI32])).beginSubcases()). + beforeAllSubcases((t) => { + if (t.params.val.includes('h')) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } + }). + fn((t) => { + const { val } = t.params; + const code = `var test: i32 = ${val};`; + const extensionList = val.includes('h') ? ['f16'] : []; + t.expectCompileResult(kValidI32.has(val), t.wrapInEntryPoint(code, extensionList)); + }); } { const kValidU32 = new Set([ - ...kAbstractIntNonNegative, - ...kU32, - '4294967295', // max unsigned + ...kAbstractIntNonNegative, + ...kU32, + '4294967295' // max unsigned ]); const kInvalidU32 = new Set([ - ...kAbstractIntNegative, - ...kI32, - '4294967296', // max unsigned int + 1 - '4294967296u', // min unsigned int + 1 - '-1', // min unsigned int - 1 - '1.0', // no conversion from float - '1.0f', // no conversion from float - '1.0h', // no conversion from float + ...kAbstractIntNegative, + ...kI32, + '4294967296', // max unsigned int + 1 + '4294967296u', // min unsigned int + 1 + '-1', // min unsigned int - 1 + '1.0', // no conversion from float + '1.0f', // no conversion from float + '1.0h' // no conversion from float ]); - g.test('u32') - .desc( - `Test that valid unsigned integers are accepted, and invalid unsigned integers are rejected.` - ) - .params(u => u.combine('val', new Set([...kValidU32, ...kInvalidU32])).beginSubcases()) - .beforeAllSubcases(t => { - if (t.params.val.includes('h')) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const { val } = t.params; - const code = `var test: u32 = ${val};`; - const extensionList = val.includes('h') ? ['f16'] : []; - t.expectCompileResult(kValidU32.has(val), t.wrapInEntryPoint(code, extensionList)); - }); + g.test('u32'). + desc( + `Test that valid unsigned integers are accepted, and invalid unsigned integers are rejected.` + ). + params((u) => u.combine('val', new Set([...kValidU32, ...kInvalidU32])).beginSubcases()). + beforeAllSubcases((t) => { + if (t.params.val.includes('h')) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } + }). + fn((t) => { + const { val } = t.params; + const code = `var test: u32 = ${val};`; + const extensionList = val.includes('h') ? ['f16'] : []; + t.expectCompileResult(kValidU32.has(val), t.wrapInEntryPoint(code, extensionList)); + }); } const kF32 = new Set([ - '0f', // Zero float - '0.0f', // Zero float - '12.223f', // float value - '12.f', // .f - '.12f', // No leading number with a f - '2.4e+4f', // Positive exponent with f suffix - '2.4e-2f', // Negative exponent with f suffix - '2.e+4f', // Exponent without decimals - '1e-4f', // Exponennt without decimal point - '0x1P+4f', // Hex float no decimal +'0f', // Zero float +'0.0f', // Zero float +'12.223f', // float value +'12.f', // .f +'.12f', // No leading number with a f +'2.4e+4f', // Positive exponent with f suffix +'2.4e-2f', // Negative exponent with f suffix +'2.e+4f', // Exponent without decimals +'1e-4f', // Exponennt without decimal point +'0x1P+4f' // Hex float no decimal ]); const kF16 = new Set([ - '0h', // Zero half - '1h', // Half no decimal - '.1h', // Half no leading value - '1.1e2h', // Exponent half no sign - '1.1E+2h', // Exponent half, plus (uppercase E) - '2.4e-2h', // Exponent half, negative - '0xep2h', // Hexfloat half lower case p - '0xEp-2h', // Hexfloat uppcase hex value - '0x3p+2h', // Hex float half positive exponent - '0x3.2p+2h', // Hex float with decimal half +'0h', // Zero half +'1h', // Half no decimal +'.1h', // Half no leading value +'1.1e2h', // Exponent half no sign +'1.1E+2h', // Exponent half, plus (uppercase E) +'2.4e-2h', // Exponent half, negative +'0xep2h', // Hexfloat half lower case p +'0xEp-2h', // Hexfloat uppcase hex value +'0x3p+2h', // Hex float half positive exponent +'0x3.2p+2h' // Hex float with decimal half ]); const kAbstractFloat = new Set([ - '0.0', // Zero float without suffix - '.0', // Zero float without leading value - '12.', // No decimal points - '00012.', // Leading zeros allowed - '.12', // No leading digits - '1.2e2', // Exponent without sign (lowercase e) - '1.2E2', // Exponent without sign (uppercase e) - '1.2e+2', // positive exponent - '2.4e-2', // Negative exponent - '.1e-2', // Exponent without leading number - '0x.3', // Hex float, lowercase X - '0X.3', // Hex float, uppercase X - '0xa.fp+2', // Hex float, lowercase p - '0xa.fP+2', // Hex float, uppercase p - '0xE.fp+2', // Uppercase E (as hex, but matches non hex exponent char) - '0X1.fp-4', // Hex float negative exponent +'0.0', // Zero float without suffix +'.0', // Zero float without leading value +'12.', // No decimal points +'00012.', // Leading zeros allowed +'.12', // No leading digits +'1.2e2', // Exponent without sign (lowercase e) +'1.2E2', // Exponent without sign (uppercase e) +'1.2e+2', // positive exponent +'2.4e-2', // Negative exponent +'.1e-2', // Exponent without leading number +'0x.3', // Hex float, lowercase X +'0X.3', // Hex float, uppercase X +'0xa.fp+2', // Hex float, lowercase p +'0xa.fP+2', // Hex float, uppercase p +'0xE.fp+2', // Uppercase E (as hex, but matches non hex exponent char) +'0X1.fp-4' // Hex float negative exponent ]); { const kValidFloats = new Set([...kF32, ...kF16, ...kAbstractFloat]); const kInvalidFloats = new Set([ - '.f', // Must have a number - '.e-2', // Exponent without leading values - '1.e&2f', // Exponent invalid sign - '1.ef', // Exponent without value - '1.e+f', // Exponent sign no value - '0x.p2', // Hex float no value - '0x1p', // Hex float missing exponent - '0x1p^', // Hex float invalid exponent - '1.0e+999999999999f', // Too big - '0x1.0p+999999999999f', // Too big hex - '0x1.00000001pf0', // Mantissa too big + '.f', // Must have a number + '.e-2', // Exponent without leading values + '1.e&2f', // Exponent invalid sign + '1.ef', // Exponent without value + '1.e+f', // Exponent sign no value + '0x.p2', // Hex float no value + '0x1p', // Hex float missing exponent + '0x1p^', // Hex float invalid exponent + '1.0e+999999999999f', // Too big + '0x1.0p+999999999999f', // Too big hex + '0x1.00000001pf0' // Mantissa too big ]); const kInvalidF16s = new Set([ - '1.1eh', // Missing exponent value - '1.1e!2h', // Invalid exponent sign - '1.1e+h', // Missing exponent with sign - '1.0e+999999h', // Too large - '0x1.0p+999999h', // Too large hex - '0xf.h', // Having suffix "h" without "p" or "P" - '0x3h', // Having suffix "h" without "p" or "P" + '1.1eh', // Missing exponent value + '1.1e!2h', // Invalid exponent sign + '1.1e+h', // Missing exponent with sign + '1.0e+999999h', // Too large + '0x1.0p+999999h', // Too large hex + '0xf.h', // Having suffix "h" without "p" or "P" + '0x3h' // Having suffix "h" without "p" or "P" ]); - g.test('abstract_float') - .desc(`Test that valid floats are accepted, and invalid floats are rejected`) - .params(u => - u - .combine('val', new Set([...kValidFloats, ...kInvalidFloats, ...kInvalidF16s])) - .beginSubcases() - ) - .beforeAllSubcases(t => { - if (kF16.has(t.params.val) || kInvalidF16s.has(t.params.val)) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const code = `var test = ${t.params.val};`; - const extensionList = kF16.has(t.params.val) || kInvalidF16s.has(t.params.val) ? ['f16'] : []; - t.expectCompileResult( - kValidFloats.has(t.params.val), - t.wrapInEntryPoint(code, extensionList) - ); - }); + g.test('abstract_float'). + desc(`Test that valid floats are accepted, and invalid floats are rejected`). + params((u) => + u. + combine('val', new Set([...kValidFloats, ...kInvalidFloats, ...kInvalidF16s])). + beginSubcases() + ). + beforeAllSubcases((t) => { + if (kF16.has(t.params.val) || kInvalidF16s.has(t.params.val)) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } + }). + fn((t) => { + const code = `var test = ${t.params.val};`; + const extensionList = kF16.has(t.params.val) || kInvalidF16s.has(t.params.val) ? ['f16'] : []; + t.expectCompileResult( + kValidFloats.has(t.params.val), + t.wrapInEntryPoint(code, extensionList) + ); + }); } { const kValidF32 = new Set([ - ...kF32, - ...kAbstractFloat, - '1', // AbstractInt - '-1', // AbstractInt + ...kF32, + ...kAbstractFloat, + '1', // AbstractInt + '-1' // AbstractInt ]); const kInvalidF32 = new Set([ - ...kF16, // no conversion - '1u', // unsigned - '1i', // signed - '1h', // half float - '.f', // Must have a number - '.e-2', // Exponent without leading values - '1.e&2f', // Exponent invalid sign - '1.ef', // Exponent without value - '1.e+f', // Exponent sign no value - '0x.p2', // Hex float no value - '0x1p', // Hex float missing exponent - '0x1p^', // Hex float invalid exponent - '1.0e+999999999999f', // Too big - '0x1.0p+999999999999f', // Too big hex - '0x1.00000001pf0', // Mantissa too big + ...kF16, // no conversion + '1u', // unsigned + '1i', // signed + '1h', // half float + '.f', // Must have a number + '.e-2', // Exponent without leading values + '1.e&2f', // Exponent invalid sign + '1.ef', // Exponent without value + '1.e+f', // Exponent sign no value + '0x.p2', // Hex float no value + '0x1p', // Hex float missing exponent + '0x1p^', // Hex float invalid exponent + '1.0e+999999999999f', // Too big + '0x1.0p+999999999999f', // Too big hex + '0x1.00000001pf0' // Mantissa too big ]); - g.test('f32') - .desc(`Test that valid floats are accepted, and invalid floats are rejected`) - .params(u => u.combine('val', new Set([...kValidF32, ...kInvalidF32])).beginSubcases()) - .beforeAllSubcases(t => { - if (kF16.has(t.params.val)) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const { val } = t.params; - const code = `var test: f32 = ${val};`; - const extensionList = kF16.has(val) ? ['f16'] : []; - t.expectCompileResult(kValidF32.has(val), t.wrapInEntryPoint(code, extensionList)); - }); + g.test('f32'). + desc(`Test that valid floats are accepted, and invalid floats are rejected`). + params((u) => u.combine('val', new Set([...kValidF32, ...kInvalidF32])).beginSubcases()). + beforeAllSubcases((t) => { + if (kF16.has(t.params.val)) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } + }). + fn((t) => { + const { val } = t.params; + const code = `var test: f32 = ${val};`; + const extensionList = kF16.has(val) ? ['f16'] : []; + t.expectCompileResult(kValidF32.has(val), t.wrapInEntryPoint(code, extensionList)); + }); } { const kValidF16 = new Set([ - ...kF16, - ...kAbstractFloat, - '1', // AbstractInt - '-1', // AbstractInt + ...kF16, + ...kAbstractFloat, + '1', // AbstractInt + '-1' // AbstractInt ]); const kInvalidF16 = new Set([ - ...kF32, - '1i', // signed int - '1u', // unsigned int - '1f', // no conversion from f32 to f16 - '1.1eh', // Missing exponent value - '1.1e!2h', // Invalid exponent sign - '1.1e+h', // Missing exponent with sign - '1.0e+999999h', // Too large - '0x1.0p+999999h', // Too large hex + ...kF32, + '1i', // signed int + '1u', // unsigned int + '1f', // no conversion from f32 to f16 + '1.1eh', // Missing exponent value + '1.1e!2h', // Invalid exponent sign + '1.1e+h', // Missing exponent with sign + '1.0e+999999h', // Too large + '0x1.0p+999999h' // Too large hex ]); - g.test('f16') - .desc( - ` + g.test('f16'). + desc( + ` Test that valid half floats are accepted, and invalid half floats are rejected - -TODO: Need to inject the 'enable fp16' into the shader to enable the parsing. ` - ) - .params(u => u.combine('val', new Set([...kValidF16, ...kInvalidF16])).beginSubcases()) - .unimplemented(); -} + ). + params((u) => u.combine('val', new Set([...kValidF16, ...kInvalidF16])).beginSubcases()). + beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); + }). + fn((t) => { + const { val } = t.params; + const code = `var test: f16 = ${val};`; + const extensionList = ['f16']; + t.expectCompileResult(kValidF16.has(val), t.wrapInEntryPoint(code, extensionList)); + }); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/must_use.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/must_use.spec.js index 75191aeab83..2bff48a4ab1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/must_use.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/must_use.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for @must_use`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for @must_use`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -11,51 +10,51 @@ const kMustUseDeclarations = { var: { code: `@must_use @group(0) @binding(0) var x : array;`, - valid: false, + valid: false }, function_no_return: { code: `@must_use fn foo() { }`, - valid: false, + valid: false }, function_scalar_return: { code: `@must_use fn foo() -> u32 { return 0; }`, - valid: true, + valid: true }, function_struct_return: { code: `struct S { x : u32 } @must_use fn foo() -> S { return S(); }`, - valid: true, + valid: true }, function_var: { code: `fn foo() { @must_use var x = 0; }`, - valid: false, + valid: false }, function_call: { code: `fn bar() -> u32 { return 0; } fn foo() { @must_use bar(); }`, - valid: false, + valid: false }, function_parameter: { code: `fn foo(@must_use param : u32) -> u32 { return param; }`, - valid: false, + valid: false }, empty_parameter: { code: `@must_use() fn foo() -> u32 { return 0; }`, - valid: false, + valid: false }, parameter: { code: `@must_use(0) fn foo() -> u32 { return 0; }`, - valid: false, - }, + valid: false + } }; -g.test('declaration') - .desc(`Validate attribute can only be applied to a function declaration with a return type`) - .params(u => u.combine('test', keysOf(kMustUseDeclarations))) - .fn(t => { - const test = kMustUseDeclarations[t.params.test]; - t.expectCompileResult(test.valid, test.code); - }); +g.test('declaration'). +desc(`Validate attribute can only be applied to a function declaration with a return type`). +params((u) => u.combine('test', keysOf(kMustUseDeclarations))). +fn((t) => { + const test = kMustUseDeclarations[t.params.test]; + t.expectCompileResult(test.valid, test.code); +}); const kMustUseCalls = { phony: `_ = bar();`, @@ -63,23 +62,23 @@ const kMustUseCalls = { var: `var tmp = bar();`, condition: `if bar() == 0 { }`, param: `baz(bar());`, - statement: `bar();`, + statement: `bar();` }; -g.test('call') - .desc(`Validate that a call to must_use function cannot be the whole function call statement`) - .params(u => u.combine('use', ['@must_use', '']).combine('call', keysOf(kMustUseCalls))) - .fn(t => { - const test = kMustUseCalls[t.params.call]; - const code = ` +g.test('call'). +desc(`Validate that a call to must_use function cannot be the whole function call statement`). +params((u) => u.combine('use', ['@must_use', '']).combine('call', keysOf(kMustUseCalls))). +fn((t) => { + const test = kMustUseCalls[t.params.call]; + const code = ` fn baz(param : u32) { } ${t.params.use} fn bar() -> u32 { return 0; } fn foo() { ${test} }`; - const res = t.params.call !== 'statement' || t.params.use === ''; - t.expectCompileResult(res, code); - }); + const res = t.params.call !== 'statement' || t.params.use === ''; + t.expectCompileResult(res, code); +}); const kMustUseBuiltinCalls = { // Type constructors @@ -192,18 +191,20 @@ const kMustUseBuiltinCalls = { unpack2x16unorm: `unpack2x16unorm(0)`, unpack2x16float: `unpack2x16float(0)`, // Synchronization - workgroupUniformLoad: `workgroupUniformLoad(&wg_var)`, + workgroupUniformLoad: `workgroupUniformLoad(&wg_var)` }; -g.test('builtin_must_use') - .desc(`Validate must_use built-in functions`) - .params(u => u.combine('call', keysOf(kMustUseBuiltinCalls)).combine('use', [true, false])) - .fn(t => { - let call = kMustUseBuiltinCalls[t.params.call]; - if (t.params.use) { - call = `_ = ${call}`; - } - const code = ` +g.test('builtin_must_use'). +desc(`Validate must_use built-in functions`). +params((u) => +u.combine('call', keysOf(kMustUseBuiltinCalls)).combine('use', [true, false]) +). +fn((t) => { + let call = kMustUseBuiltinCalls[t.params.call]; + if (t.params.use) { + call = `_ = ${call}`; + } + const code = ` struct S { x : u32 } @@ -231,8 +232,8 @@ fn foo() { ${call}; }`; - t.expectCompileResult(t.params.use, code); - }); + t.expectCompileResult(t.params.use, code); +}); const kNoMustUseBuiltinCalls = { atomicLoad: `atomicLoad(&a)`, @@ -244,23 +245,25 @@ const kNoMustUseBuiltinCalls = { atomicOr: `atomicOr(&a, 0)`, atomicXor: `atomicXor(&a, 0)`, atomicExchange: `atomicExchange(&a, 0)`, - atomicCompareExchangeWeak: `atomicCompareExchangeWeak(&a, 0, 0)`, + atomicCompareExchangeWeak: `atomicCompareExchangeWeak(&a, 0, 0)` }; -g.test('builtin_no_must_use') - .desc(`Validate built-in functions without must_use`) - .params(u => u.combine('call', keysOf(kNoMustUseBuiltinCalls)).combine('use', [true, false])) - .fn(t => { - let call = kNoMustUseBuiltinCalls[t.params.call]; - if (t.params.use) { - call = `_ = ${call}`; - } - const code = ` +g.test('builtin_no_must_use'). +desc(`Validate built-in functions without must_use`). +params((u) => +u.combine('call', keysOf(kNoMustUseBuiltinCalls)).combine('use', [true, false]) +). +fn((t) => { + let call = kNoMustUseBuiltinCalls[t.params.call]; + if (t.params.use) { + call = `_ = ${call}`; + } + const code = ` var a : atomic; fn foo() { ${call}; }`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/pipeline_stage.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/pipeline_stage.spec.js index 167d7f875e0..4a94012262d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/pipeline_stage.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/pipeline_stage.spec.js @@ -1,65 +1,64 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for pipeline stage`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for pipeline stage`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); const kValidVertex = new Set(['', '@vertex', '@\tvertex', '@/^comment^/vertex']); const kInvalidVertex = new Set(['@mvertex', '@vertex()', '@vertex )', '@vertex(']); -g.test('vertex_parsing') - .desc(`Test that @vertex is parsed correctly.`) - .params(u => u.combine('val', new Set([...kValidVertex, ...kInvalidVertex]))) - .fn(t => { - const v = t.params.val.replace(/\^/g, '*'); - const r = t.params.val !== '' ? '@builtin(position)' : ''; - const code = ` +g.test('vertex_parsing'). +desc(`Test that @vertex is parsed correctly.`). +params((u) => u.combine('val', new Set([...kValidVertex, ...kInvalidVertex]))). +fn((t) => { + const v = t.params.val.replace(/\^/g, '*'); + const r = t.params.val !== '' ? '@builtin(position)' : ''; + const code = ` ${v} fn main() -> ${r} vec4 { return vec4(.4, .2, .3, .1); }`; - t.expectCompileResult(kValidVertex.has(t.params.val), code); - }); + t.expectCompileResult(kValidVertex.has(t.params.val), code); +}); const kValidFragment = new Set(['', '@fragment', '@\tfragment', '@/^comment^/fragment']); const kInvalidFragment = new Set(['@mfragment', '@fragment()', '@fragment )', '@fragment(']); -g.test('fragment_parsing') - .desc(`Test that @fragment is parsed correctly.`) - .params(u => u.combine('val', new Set([...kValidFragment, ...kInvalidFragment]))) - .fn(t => { - const v = t.params.val.replace(/\^/g, '*'); - const r = t.params.val !== '' ? '@location(0)' : ''; - const code = ` +g.test('fragment_parsing'). +desc(`Test that @fragment is parsed correctly.`). +params((u) => u.combine('val', new Set([...kValidFragment, ...kInvalidFragment]))). +fn((t) => { + const v = t.params.val.replace(/\^/g, '*'); + const r = t.params.val !== '' ? '@location(0)' : ''; + const code = ` ${v} fn main() -> ${r} vec4 { return vec4(.4, .2, .3, .1); }`; - t.expectCompileResult(kValidFragment.has(t.params.val), code); - }); + t.expectCompileResult(kValidFragment.has(t.params.val), code); +}); const kValidCompute = new Set(['', '@compute', '@\tcompute', '@/^comment^/compute']); const kInvalidCompute = new Set(['@mcompute', '@compute()', '@compute )', '@compute(']); -g.test('compute_parsing') - .desc(`Test that @compute is parsed correctly.`) - .params(u => u.combine('val', new Set([...kValidCompute, ...kInvalidCompute]))) - .fn(t => { - let v = t.params.val.replace(/\^/g, '*'); - // Always add a workgroup size unless there is no parameter - if (v !== '') { - v += '\n@workgroup_size(1)'; - } - const code = ` +g.test('compute_parsing'). +desc(`Test that @compute is parsed correctly.`). +params((u) => u.combine('val', new Set([...kValidCompute, ...kInvalidCompute]))). +fn((t) => { + let v = t.params.val.replace(/\^/g, '*'); + // Always add a workgroup size unless there is no parameter + if (v !== '') { + v += '\n@workgroup_size(1)'; + } + const code = ` ${v} fn main() {} `; - t.expectCompileResult(kValidCompute.has(t.params.val), code); - }); + t.expectCompileResult(kValidCompute.has(t.params.val), code); +}); -g.test('multiple_entry_points') - .desc(`Test that multiple entry points are allowed.`) - .fn(t => { - const code = ` +g.test('multiple_entry_points'). +desc(`Test that multiple entry points are allowed.`). +fn((t) => { + const code = ` @compute @workgroup_size(1) fn compute_1() {} @compute @workgroup_size(1) fn compute_2() {} @@ -71,60 +70,60 @@ g.test('multiple_entry_points') @vertex fn vtx_2() -> @builtin(position) vec4f { return vec4f(1); } @vertex fn vtx_3() -> @builtin(position) vec4f { return vec4f(1); } `; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); -g.test('duplicate_compute_on_function') - .desc(`Test that duplcate @compute attributes are not allowed.`) - .params(u => u.combine('dupe', ['', '@compute'])) - .fn(t => { - const code = ` +g.test('duplicate_compute_on_function'). +desc(`Test that duplcate @compute attributes are not allowed.`). +params((u) => u.combine('dupe', ['', '@compute'])). +fn((t) => { + const code = ` @compute ${t.params.dupe} @workgroup_size(1) fn compute_1() {} `; - t.expectCompileResult(t.params.dupe === '', code); - }); + t.expectCompileResult(t.params.dupe === '', code); +}); -g.test('duplicate_fragment_on_function') - .desc(`Test that duplcate @fragment attributes are not allowed.`) - .params(u => u.combine('dupe', ['', '@fragment'])) - .fn(t => { - const code = ` +g.test('duplicate_fragment_on_function'). +desc(`Test that duplcate @fragment attributes are not allowed.`). +params((u) => u.combine('dupe', ['', '@fragment'])). +fn((t) => { + const code = ` @fragment ${t.params.dupe} fn vtx() -> @location(0) vec4f { return vec4f(1); } `; - t.expectCompileResult(t.params.dupe === '', code); - }); + t.expectCompileResult(t.params.dupe === '', code); +}); -g.test('duplicate_vertex_on_function') - .desc(`Test that duplcate @vertex attributes are not allowed.`) - .params(u => u.combine('dupe', ['', '@vertex'])) - .fn(t => { - const code = ` +g.test('duplicate_vertex_on_function'). +desc(`Test that duplcate @vertex attributes are not allowed.`). +params((u) => u.combine('dupe', ['', '@vertex'])). +fn((t) => { + const code = ` @vertex ${t.params.dupe} fn vtx() -> @builtin(position) vec4f { return vec4f(1); } `; - t.expectCompileResult(t.params.dupe === '', code); - }); + t.expectCompileResult(t.params.dupe === '', code); +}); -g.test('placement') - .desc('Tests the locations @align is allowed to appear') - .params(u => - u - .combine('scope', [ - 'private-var', - 'storage-var', - 'struct-member', - 'fn-param', - 'fn-var', - 'fn-return', - 'while-stmt', - undefined, - ]) - .combine('attr', ['@compute', '@fragment', '@vertex']) - ) - .fn(t => { - const scope = t.params.scope; +g.test('placement'). +desc('Tests the locations @align is allowed to appear'). +params((u) => +u. +combine('scope', [ +'private-var', +'storage-var', +'struct-member', +'fn-param', +'fn-var', +'fn-return', +'while-stmt', +undefined] +). +combine('attr', ['@compute', '@fragment', '@vertex']) +). +fn((t) => { + const scope = t.params.scope; - const attr = t.params.attr; - const code = ` + const attr = t.params.attr; + const code = ` ${scope === 'private-var' ? attr : ''} var priv_var : i32; @@ -152,5 +151,5 @@ g.test('placement') } `; - t.expectCompileResult(scope === undefined, code); - }); + t.expectCompileResult(scope === undefined, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/semicolon.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/semicolon.spec.js index 619cb25587c..f7af6a0b3ee 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/semicolon.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/semicolon.spec.js @@ -1,270 +1,269 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for semicolon placements`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for semicolon placements`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('module_scope_single') - .desc(`Test that a semicolon can be placed at module scope.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `;`); - }); +g.test('module_scope_single'). +desc(`Test that a semicolon can be placed at module scope.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `;`); +}); -g.test('module_scope_multiple') - .desc(`Test that multiple semicolons can be placed at module scope.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `;;;`); - }); +g.test('module_scope_multiple'). +desc(`Test that multiple semicolons can be placed at module scope.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `;;;`); +}); -g.test('after_enable') - .desc(`Test that a semicolon must be placed after an enable directive.`) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); - }) - .fn(t => { - t.expectCompileResult(/* pass */ true, `enable f16;`); - t.expectCompileResult(/* pass */ false, `enable f16`); - }); +g.test('after_enable'). +desc(`Test that a semicolon must be placed after an enable directive.`). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] }); +}). +fn((t) => { + t.expectCompileResult( /* pass */true, `enable f16;`); + t.expectCompileResult( /* pass */false, `enable f16`); +}); -g.test('after_struct_decl') - .desc(`Test that a semicolon can be placed after an struct declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `struct S { x : i32 };`); - t.expectCompileResult(/* pass */ true, `struct S { x : i32 }`); - }); +g.test('after_struct_decl'). +desc(`Test that a semicolon can be placed after an struct declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `struct S { x : i32 };`); + t.expectCompileResult( /* pass */true, `struct S { x : i32 }`); +}); -g.test('after_member') - .desc(`Test that a semicolon must not be placed after an struct member declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `struct S { x : i32 }`); - t.expectCompileResult(/* pass */ false, `struct S { x : i32; }`); - }); +g.test('after_member'). +desc(`Test that a semicolon must not be placed after an struct member declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `struct S { x : i32 }`); + t.expectCompileResult( /* pass */false, `struct S { x : i32; }`); +}); -g.test('after_func_decl') - .desc(`Test that a semicolon can be placed after a function declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() {};`); - t.expectCompileResult(/* pass */ true, `fn f() {}`); - }); +g.test('after_func_decl'). +desc(`Test that a semicolon can be placed after a function declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() {};`); + t.expectCompileResult( /* pass */true, `fn f() {}`); +}); -g.test('after_type_alias_decl') - .desc(`Test that a semicolon must be placed after an type alias declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `alias T = i32;`); - t.expectCompileResult(/* pass */ false, `alias T = i32`); - }); +g.test('after_type_alias_decl'). +desc(`Test that a semicolon must be placed after an type alias declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `alias T = i32;`); + t.expectCompileResult( /* pass */false, `alias T = i32`); +}); -g.test('after_return') - .desc(`Test that a semicolon must be placed after a return statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { return; }`); - t.expectCompileResult(/* pass */ false, `fn f() { return }`); - }); +g.test('after_return'). +desc(`Test that a semicolon must be placed after a return statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { return; }`); + t.expectCompileResult( /* pass */false, `fn f() { return }`); +}); -g.test('after_call') - .desc(`Test that a semicolon must be placed after a function call.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { workgroupBarrier(); }`); - t.expectCompileResult(/* pass */ false, `fn f() { workgroupBarrier() }`); - }); +g.test('after_call'). +desc(`Test that a semicolon must be placed after a function call.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { workgroupBarrier(); }`); + t.expectCompileResult( /* pass */false, `fn f() { workgroupBarrier() }`); +}); -g.test('after_module_const_decl') - .desc(`Test that a semicolon must be placed after a module-scope const declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `const v = 1;`); - t.expectCompileResult(/* pass */ false, `const v = 1`); - }); +g.test('after_module_const_decl'). +desc(`Test that a semicolon must be placed after a module-scope const declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `const v = 1;`); + t.expectCompileResult( /* pass */false, `const v = 1`); +}); -g.test('after_fn_const_decl') - .desc(`Test that a semicolon must be placed after a function-scope const declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { const v = 1; }`); - t.expectCompileResult(/* pass */ false, `fn f() { const v = 1 }`); - }); +g.test('after_fn_const_decl'). +desc(`Test that a semicolon must be placed after a function-scope const declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { const v = 1; }`); + t.expectCompileResult( /* pass */false, `fn f() { const v = 1 }`); +}); -g.test('after_module_var_decl') - .desc(`Test that a semicolon must be placed after a module-scope var declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `var v = 1;`); - t.expectCompileResult(/* pass */ false, `var v = 1`); - }); +g.test('after_module_var_decl'). +desc(`Test that a semicolon must be placed after a module-scope var declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `var v = 1;`); + t.expectCompileResult( /* pass */false, `var v = 1`); +}); -g.test('after_fn_var_decl') - .desc(`Test that a semicolon must be placed after a function-scope var declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { var v = 1; }`); - t.expectCompileResult(/* pass */ false, `fn f() { var v = 1 }`); - }); +g.test('after_fn_var_decl'). +desc(`Test that a semicolon must be placed after a function-scope var declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { var v = 1; }`); + t.expectCompileResult( /* pass */false, `fn f() { var v = 1 }`); +}); -g.test('after_let_decl') - .desc(`Test that a semicolon must be placed after a let declaration.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { let v = 1; }`); - t.expectCompileResult(/* pass */ false, `fn f() { let v = 1 }`); - }); +g.test('after_let_decl'). +desc(`Test that a semicolon must be placed after a let declaration.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { let v = 1; }`); + t.expectCompileResult( /* pass */false, `fn f() { let v = 1 }`); +}); -g.test('after_discard') - .desc(`Test that a semicolon must be placed after a discard statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { discard; }`); - t.expectCompileResult(/* pass */ false, `fn f() { discard }`); - }); +g.test('after_discard'). +desc(`Test that a semicolon must be placed after a discard statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { discard; }`); + t.expectCompileResult( /* pass */false, `fn f() { discard }`); +}); -g.test('after_assignment') - .desc(`Test that a semicolon must be placed after an assignment statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { var v = 1; v = 2; }`); - t.expectCompileResult(/* pass */ false, `fn f() { var v = 1; v = 2 }`); - }); +g.test('after_assignment'). +desc(`Test that a semicolon must be placed after an assignment statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { var v = 1; v = 2; }`); + t.expectCompileResult( /* pass */false, `fn f() { var v = 1; v = 2 }`); +}); -g.test('after_fn_const_assert') - .desc(`Test that a semicolon must be placed after an function-scope static assert.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { const_assert(true); }`); - t.expectCompileResult(/* pass */ false, `fn f() { const_assert(true) }`); - }); +g.test('after_fn_const_assert'). +desc(`Test that a semicolon must be placed after an function-scope static assert.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { const_assert(true); }`); + t.expectCompileResult( /* pass */false, `fn f() { const_assert(true) }`); +}); -g.test('function_body_single') - .desc(`Test that a semicolon can be placed in a function body.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { ; }`); - }); +g.test('function_body_single'). +desc(`Test that a semicolon can be placed in a function body.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { ; }`); +}); -g.test('function_body_multiple') - .desc(`Test that multiple semicolons can be placed in a function body.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { ;;; }`); - }); +g.test('function_body_multiple'). +desc(`Test that multiple semicolons can be placed in a function body.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { ;;; }`); +}); -g.test('compound_statement_single') - .desc(`Test that a semicolon can be placed in a compound statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { { ; } }`); - }); +g.test('compound_statement_single'). +desc(`Test that a semicolon can be placed in a compound statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { { ; } }`); +}); -g.test('compound_statement_multiple') - .desc(`Test that multiple semicolons can be placed in a compound statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { { ;;; } }`); - }); +g.test('compound_statement_multiple'). +desc(`Test that multiple semicolons can be placed in a compound statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { { ;;; } }`); +}); -g.test('after_compound_statement') - .desc(`Test that a semicolon can be placed after a compound statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { {} ; }`); - }); +g.test('after_compound_statement'). +desc(`Test that a semicolon can be placed after a compound statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { {} ; }`); +}); -g.test('after_if') - .desc(`Test that a semicolon can be placed after an if-statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { if true {} ; }`); - }); +g.test('after_if'). +desc(`Test that a semicolon can be placed after an if-statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { if true {} ; }`); +}); -g.test('after_if_else') - .desc(`Test that a semicolon can be placed after an if-else-statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { if true {} else {} ; }`); - }); +g.test('after_if_else'). +desc(`Test that a semicolon can be placed after an if-else-statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { if true {} else {} ; }`); +}); -g.test('after_switch') - .desc(`Test that a semicolon can be placed after an switch-statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { switch 1 { default {} } ; }`); - }); +g.test('after_switch'). +desc(`Test that a semicolon can be placed after an switch-statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { switch 1 { default {} } ; }`); +}); -g.test('after_case') - .desc(`Test that a semicolon cannot be placed after a non-default switch case.`) - .fn(t => { - t.expectCompileResult(/* pass */ false, `fn f() { switch 1 { case 1 {}; default {} } }`); - t.expectCompileResult(/* pass */ true, `fn f() { switch 1 { case 1 {} default {} } }`); - }); +g.test('after_case'). +desc(`Test that a semicolon cannot be placed after a non-default switch case.`). +fn((t) => { + t.expectCompileResult( /* pass */false, `fn f() { switch 1 { case 1 {}; default {} } }`); + t.expectCompileResult( /* pass */true, `fn f() { switch 1 { case 1 {} default {} } }`); +}); -g.test('after_case_break') - .desc(`Test that a semicolon must be placed after a case break statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ false, `fn f() { switch 1 { case 1 { break } default {} } }`); - t.expectCompileResult(/* pass */ true, `fn f() { switch 1 { case 1 { break; } default {} } }`); - }); +g.test('after_case_break'). +desc(`Test that a semicolon must be placed after a case break statement.`). +fn((t) => { + t.expectCompileResult( /* pass */false, `fn f() { switch 1 { case 1 { break } default {} } }`); + t.expectCompileResult( /* pass */true, `fn f() { switch 1 { case 1 { break; } default {} } }`); +}); -g.test('after_default_case') - .desc(`Test that a semicolon cannot be placed after a default switch case.`) - .fn(t => { - t.expectCompileResult(/* pass */ false, `fn f() { switch 1 { default {}; } }`); - t.expectCompileResult(/* pass */ true, `fn f() { switch 1 { default {} } }`); - }); +g.test('after_default_case'). +desc(`Test that a semicolon cannot be placed after a default switch case.`). +fn((t) => { + t.expectCompileResult( /* pass */false, `fn f() { switch 1 { default {}; } }`); + t.expectCompileResult( /* pass */true, `fn f() { switch 1 { default {} } }`); +}); -g.test('after_default_case_break') - .desc(`Test that a semicolon cannot be placed after a default switch case.`) - .fn(t => { - t.expectCompileResult(/* pass */ false, `fn f() { switch 1 { default { break } } }`); - t.expectCompileResult(/* pass */ true, `fn f() { switch 1 { default { break; } } }`); - }); +g.test('after_default_case_break'). +desc(`Test that a semicolon cannot be placed after a default switch case.`). +fn((t) => { + t.expectCompileResult( /* pass */false, `fn f() { switch 1 { default { break } } }`); + t.expectCompileResult( /* pass */true, `fn f() { switch 1 { default { break; } } }`); +}); -g.test('after_for') - .desc(`Test that a semicolon can be placed after a for-loop.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { for (; false;) {}; }`); - }); +g.test('after_for'). +desc(`Test that a semicolon can be placed after a for-loop.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { for (; false;) {}; }`); +}); -g.test('after_for_break') - .desc(`Test that a semicolon must be placed after a for-loop break statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { for (; false;) { break; } }`); - t.expectCompileResult(/* pass */ false, `fn f() { for (; false;) { break } }`); - }); +g.test('after_for_break'). +desc(`Test that a semicolon must be placed after a for-loop break statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { for (; false;) { break; } }`); + t.expectCompileResult( /* pass */false, `fn f() { for (; false;) { break } }`); +}); -g.test('after_loop') - .desc(`Test that a semicolon can be placed after a loop.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { loop { break; }; }`); - }); +g.test('after_loop'). +desc(`Test that a semicolon can be placed after a loop.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { loop { break; }; }`); +}); -g.test('after_loop_break') - .desc(`Test that a semicolon must be placed after a loop break statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { loop { break; }; }`); - t.expectCompileResult(/* pass */ false, `fn f() { loop { break }; }`); - }); +g.test('after_loop_break'). +desc(`Test that a semicolon must be placed after a loop break statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { loop { break; }; }`); + t.expectCompileResult( /* pass */false, `fn f() { loop { break }; }`); +}); -g.test('after_loop_break_if') - .desc(`Test that a semicolon must be placed after a loop break-if statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { loop { continuing { break if true; } }; }`); - t.expectCompileResult(/* pass */ false, `fn f() { loop { continuing { break if true } }; }`); - }); +g.test('after_loop_break_if'). +desc(`Test that a semicolon must be placed after a loop break-if statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { loop { continuing { break if true; } }; }`); + t.expectCompileResult( /* pass */false, `fn f() { loop { continuing { break if true } }; }`); +}); -g.test('after_loop_continue') - .desc(`Test that a semicolon must be placed after a loop continue statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { loop { if true { continue; } { break; } } }`); - t.expectCompileResult(/* pass */ false, `fn f() { loop { if true { continue } { break; } } }`); - }); +g.test('after_loop_continue'). +desc(`Test that a semicolon must be placed after a loop continue statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { loop { if true { continue; } { break; } } }`); + t.expectCompileResult( /* pass */false, `fn f() { loop { if true { continue } { break; } } }`); +}); -g.test('after_continuing') - .desc(`Test that a semicolon cannot be placed after a continuing.`) - .fn(t => { - t.expectCompileResult(/* pass */ false, `fn f() { loop { break; continuing{}; } }`); - t.expectCompileResult(/* pass */ true, `fn f() { loop { break; continuing{} } }`); - }); +g.test('after_continuing'). +desc(`Test that a semicolon cannot be placed after a continuing.`). +fn((t) => { + t.expectCompileResult( /* pass */false, `fn f() { loop { break; continuing{}; } }`); + t.expectCompileResult( /* pass */true, `fn f() { loop { break; continuing{} } }`); +}); -g.test('after_while') - .desc(`Test that a semicolon cannot be placed after a while-loop.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { while false {}; }`); - }); +g.test('after_while'). +desc(`Test that a semicolon cannot be placed after a while-loop.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { while false {}; }`); +}); -g.test('after_while_break') - .desc(`Test that a semicolon must be placed after a while break statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { while false { break; } }`); - t.expectCompileResult(/* pass */ false, `fn f() { while false { break } }`); - }); +g.test('after_while_break'). +desc(`Test that a semicolon must be placed after a while break statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { while false { break; } }`); + t.expectCompileResult( /* pass */false, `fn f() { while false { break } }`); +}); -g.test('after_while_continue') - .desc(`Test that a semicolon must be placed after a while continue statement.`) - .fn(t => { - t.expectCompileResult(/* pass */ true, `fn f() { while false { continue; } }`); - t.expectCompileResult(/* pass */ false, `fn f() { while false { continue } }`); - }); +g.test('after_while_continue'). +desc(`Test that a semicolon must be placed after a while continue statement.`). +fn((t) => { + t.expectCompileResult( /* pass */true, `fn f() { while false { continue; } }`); + t.expectCompileResult( /* pass */false, `fn f() { while false { continue } }`); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/source.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/source.spec.js index b4cfe94b247..11f28d904a6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/source.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/source.spec.js @@ -1,30 +1,29 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for source parsing`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for source parsing`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('valid_source') - .desc(`Tests that a valid source is consumed successfully.`) - .fn(t => { - const code = ` +g.test('valid_source'). +desc(`Tests that a valid source is consumed successfully.`). +fn((t) => { + const code = ` @fragment fn main() -> @location(0) vec4 { return vec4(.4, .2, .3, .1); }`; - t.expectCompileResult(true, code); - }); + t.expectCompileResult(true, code); +}); -g.test('empty') - .desc(`Test that an empty source is consumed successfully.`) - .fn(t => { - t.expectCompileResult(true, ''); - }); +g.test('empty'). +desc(`Test that an empty source is consumed successfully.`). +fn((t) => { + t.expectCompileResult(true, ''); +}); -g.test('invalid_source') - .desc(`Tests that a source which does not match the grammar fails.`) - .fn(t => { - t.expectCompileResult(false, 'invalid_source'); - }); +g.test('invalid_source'). +desc(`Tests that a source which does not match the grammar fails.`). +fn((t) => { + t.expectCompileResult(false, 'invalid_source'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/unary_ops.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/unary_ops.spec.js index 83322ccf167..952cb9a8ed2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/unary_ops.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/unary_ops.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for unary ops`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for unary ops`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,40 +9,40 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { not_bool_literal: { src: 'let a = !true;', - pass: true, + pass: true }, not_bool_expr: { src: `let a = !(1 == 2);`, - pass: true, + pass: true }, not_not_bool_literal: { src: 'let a = !!true;', - pass: true, + pass: true }, not_not_bool_expr: { src: `let a = !!(1 == 2);`, - pass: true, + pass: true }, not_int_literal: { src: `let a = !42;`, - pass: false, + pass: false }, not_int_expr: { src: `let a = !(40 + 2);`, - pass: false, - }, + pass: false + } }; -g.test('all') - .desc('Test that unary operators are validated correctly') - .params(u => u.combine('stmt', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('all'). +desc('Test that unary operators are validated correctly'). +params((u) => u.combine('stmt', keysOf(kTests))). +fn((t) => { + const code = ` @vertex fn vtx() -> @builtin(position) vec4f { ${kTests[t.params.stmt].src} return vec4f(1); } `; - t.expectCompileResult(kTests[t.params.stmt].pass, code); - }); + t.expectCompileResult(kTests[t.params.stmt].pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/var_and_let.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/var_and_let.spec.js index 93a11517100..75bf64e7eb1 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/var_and_let.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/parse/var_and_let.spec.js @@ -1,107 +1,106 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Positive and negative validation tests for variable and const. TODO: Find a better way to test arrays than using a single arbitrary size. [1] -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); const kTestTypes = [ - 'f32', - 'i32', - 'u32', - 'bool', - 'vec2', - 'vec2', - 'vec2', - 'vec2', - 'vec3', - 'vec3', - 'vec3', - 'vec3', - 'vec4', - 'vec4', - 'vec4', - 'vec4', - 'mat2x2', - 'mat2x3', - 'mat2x4', - 'mat3x2', - 'mat3x3', - 'mat3x4', - 'mat4x2', - 'mat4x3', - 'mat4x4', - // [1]: 12 is a random number here. find a solution to replace it. - 'array', - 'array', - 'array', - 'array', -]; +'f32', +'i32', +'u32', +'bool', +'vec2', +'vec2', +'vec2', +'vec2', +'vec3', +'vec3', +'vec3', +'vec3', +'vec4', +'vec4', +'vec4', +'vec4', +'mat2x2', +'mat2x3', +'mat2x4', +'mat3x2', +'mat3x3', +'mat3x4', +'mat4x2', +'mat4x3', +'mat4x4', +// [1]: 12 is a random number here. find a solution to replace it. +'array', +'array', +'array', +'array']; -g.test('initializer_type') - .desc( - ` + +g.test('initializer_type'). +desc( + ` If present, the initializer's type must match the store type of the variable. Testing scalars, vectors, and matrices of every dimension and type. TODO: add test for: structs - arrays of vectors and matrices - arrays of different length ` - ) - .params(u => - u - .combine('variableOrConstant', ['var', 'let']) - .beginSubcases() - .combine('lhsType', kTestTypes) - .combine('rhsType', kTestTypes) - ) - .fn(t => { - const { variableOrConstant, lhsType, rhsType } = t.params; +). +params((u) => +u. +combine('variableOrConstant', ['var', 'let']). +beginSubcases(). +combine('lhsType', kTestTypes). +combine('rhsType', kTestTypes) +). +fn((t) => { + const { variableOrConstant, lhsType, rhsType } = t.params; - const code = ` + const code = ` @fragment fn main() { ${variableOrConstant} a : ${lhsType} = ${rhsType}(); } `; - const expectation = lhsType === rhsType; - t.expectCompileResult(expectation, code); - }); + const expectation = lhsType === rhsType; + t.expectCompileResult(expectation, code); +}); -g.test('var_access_mode_bad_other_template_contents') - .desc( - 'A variable declaration with explicit access mode with varying other template list contents' - ) - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls') - .params(u => - u - .combine('accessMode', ['read', 'read_write']) - .combine('prefix', ['storage,', '', ',']) - .combine('suffix', [',storage', ',read', ',', '']) - ) - .fn(t => { - const prog = `@group(0) @binding(0) +g.test('var_access_mode_bad_other_template_contents'). +desc( + 'A variable declaration with explicit access mode with varying other template list contents' +). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls'). +params((u) => +u. +combine('accessMode', ['read', 'read_write']). +combine('prefix', ['storage,', '', ',']). +combine('suffix', [',storage', ',read', ',', '']) +). +fn((t) => { + const prog = `@group(0) @binding(0) var<${t.params.prefix}${t.params.accessMode}${t.params.suffix}> x: i32;`; - const ok = t.params.prefix === 'storage,' && t.params.suffix === ''; - t.expectCompileResult(ok, prog); - }); + const ok = t.params.prefix === 'storage,' && t.params.suffix === ''; + t.expectCompileResult(ok, prog); +}); -g.test('var_access_mode_bad_template_delim') - .desc('A variable declaration has explicit access mode with varying template list delimiters') - .specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls') - .params(u => - u - .combine('accessMode', ['read', 'read_write']) - .combine('prefix', ['', '<', '>', ',']) - .combine('suffix', ['', '<', '>', ',']) - ) - .fn(t => { - const prog = `@group(0) @binding(0) +g.test('var_access_mode_bad_template_delim'). +desc('A variable declaration has explicit access mode with varying template list delimiters'). +specURL('https://gpuweb.github.io/gpuweb/wgsl/#var-decls'). +params((u) => +u. +combine('accessMode', ['read', 'read_write']). +combine('prefix', ['', '<', '>', ',']). +combine('suffix', ['', '<', '>', ',']) +). +fn((t) => { + const prog = `@group(0) @binding(0) var ${t.params.prefix}storage,${t.params.accessMode}${t.params.suffix} x: i32;`; - const ok = t.params.prefix === '<' && t.params.suffix === '>'; - t.expectCompileResult(ok, prog); - }); + const ok = t.params.prefix === '<' && t.params.suffix === '>'; + t.expectCompileResult(ok, prog); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/binding.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/binding.spec.js index d75aa1ccaa2..d87af51d30b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/binding.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/binding.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for binding`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for binding`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -12,93 +11,93 @@ const kTests = { src: `const z = 5; const y = 2; @binding(z + y)`, - pass: true, + pass: true }, override_expr: { src: `override z = 5; @binding(z)`, - pass: false, + pass: false }, zero: { src: `@binding(0)`, - pass: true, + pass: true }, one: { src: `@binding(1)`, - pass: true, + pass: true }, comment: { src: `@/* comment */binding(1)`, - pass: true, + pass: true }, split_line: { src: '@ \n binding(1)', - pass: true, + pass: true }, trailing_comma: { src: `@binding(1,)`, - pass: true, + pass: true }, int_literal: { src: `@binding(1i)`, - pass: true, + pass: true }, uint_literal: { src: `@binding(1u)`, - pass: true, + pass: true }, hex_literal: { src: `@binding(0x1)`, - pass: true, + pass: true }, negative: { src: `@binding(-1)`, - pass: false, + pass: false }, missing_value: { src: `@binding()`, - pass: false, + pass: false }, missing_left_paren: { src: `@binding 1)`, - pass: false, + pass: false }, missing_right_paren: { src: `@binding(1`, - pass: false, + pass: false }, multiple_values: { src: `@binding(1,2)`, - pass: false, + pass: false }, f32_val_literal: { src: `@binding(1.0)`, - pass: false, + pass: false }, f32_val: { src: `@binding(1f)`, - pass: false, + pass: false }, no_params: { src: `@binding`, - pass: false, + pass: false }, misspelling: { src: `@abinding(1)`, - pass: false, + pass: false }, multi_binding: { src: `@binding(1) @binding(1)`, - pass: false, - }, + pass: false + } }; -g.test('binding') - .desc(`Test validation of binding`) - .params(u => u.combine('attr', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('binding'). +desc(`Test validation of binding`). +params((u) => u.combine('attr', keysOf(kTests))). +fn((t) => { + const code = ` ${kTests[t.params.attr].src} @group(1) var a: i32; @@ -106,16 +105,16 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(kTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kTests[t.params.attr].pass, code); +}); -g.test('binding_f16') - .desc(`Test validation of binding with f16`) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const code = ` +g.test('binding_f16'). +desc(`Test validation of binding with f16`). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const code = ` @group(1) @binding(1h) var a: i32; @@ -123,13 +122,13 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('binding_without_group') - .desc(`Test validation of binding without group`) - .fn(t => { - const code = ` +g.test('binding_without_group'). +desc(`Test validation of binding without group`). +fn((t) => { + const code = ` @binding(1) var a: i32; @@ -137,5 +136,5 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/builtins.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/builtins.spec.js index 13bdbd7fb76..07ea75828e7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/builtins.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/builtins.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for entry point built-in variables`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for entry point built-in variables`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; import { generateShader } from './util.js'; @@ -12,141 +11,142 @@ export const g = makeTestGroup(ShaderValidationTest); // Taken from table in Section 15: // https://www.w3.org/TR/2021/WD-WGSL-20211013/#builtin-variables export const kBuiltins = [ - { name: 'vertex_index', stage: 'vertex', io: 'in', type: 'u32' }, - { name: 'instance_index', stage: 'vertex', io: 'in', type: 'u32' }, - { name: 'position', stage: 'vertex', io: 'out', type: 'vec4' }, - { name: 'position', stage: 'fragment', io: 'in', type: 'vec4' }, - { name: 'front_facing', stage: 'fragment', io: 'in', type: 'bool' }, - { name: 'frag_depth', stage: 'fragment', io: 'out', type: 'f32' }, - { name: 'local_invocation_id', stage: 'compute', io: 'in', type: 'vec3' }, - { name: 'local_invocation_index', stage: 'compute', io: 'in', type: 'u32' }, - { name: 'global_invocation_id', stage: 'compute', io: 'in', type: 'vec3' }, - { name: 'workgroup_id', stage: 'compute', io: 'in', type: 'vec3' }, - { name: 'num_workgroups', stage: 'compute', io: 'in', type: 'vec3' }, - { name: 'sample_index', stage: 'fragment', io: 'in', type: 'u32' }, - { name: 'sample_mask', stage: 'fragment', io: 'in', type: 'u32' }, - { name: 'sample_mask', stage: 'fragment', io: 'out', type: 'u32' }, -]; +{ name: 'vertex_index', stage: 'vertex', io: 'in', type: 'u32' }, +{ name: 'instance_index', stage: 'vertex', io: 'in', type: 'u32' }, +{ name: 'position', stage: 'vertex', io: 'out', type: 'vec4' }, +{ name: 'position', stage: 'fragment', io: 'in', type: 'vec4' }, +{ name: 'front_facing', stage: 'fragment', io: 'in', type: 'bool' }, +{ name: 'frag_depth', stage: 'fragment', io: 'out', type: 'f32' }, +{ name: 'local_invocation_id', stage: 'compute', io: 'in', type: 'vec3' }, +{ name: 'local_invocation_index', stage: 'compute', io: 'in', type: 'u32' }, +{ name: 'global_invocation_id', stage: 'compute', io: 'in', type: 'vec3' }, +{ name: 'workgroup_id', stage: 'compute', io: 'in', type: 'vec3' }, +{ name: 'num_workgroups', stage: 'compute', io: 'in', type: 'vec3' }, +{ name: 'sample_index', stage: 'fragment', io: 'in', type: 'u32' }, +{ name: 'sample_mask', stage: 'fragment', io: 'in', type: 'u32' }, +{ name: 'sample_mask', stage: 'fragment', io: 'out', type: 'u32' }]; + // List of types to test against. const kTestTypes = [ - 'bool', - 'u32', - 'i32', - 'f32', - 'vec2', - 'vec2', - 'vec2', - 'vec2', - 'vec3', - 'vec3', - 'vec3', - 'vec3', - 'vec4', - 'vec4', - 'vec4', - 'vec4', - 'mat2x2', - 'mat2x3', - 'mat2x4', - 'mat3x2', - 'mat3x3', - 'mat3x4', - 'mat4x2', - 'mat4x3', - 'mat4x4', - 'atomic', - 'atomic', - 'array', - 'array', - 'array', - 'array', - 'MyStruct', -]; +'bool', +'u32', +'i32', +'f32', +'vec2', +'vec2', +'vec2', +'vec2', +'vec3', +'vec3', +'vec3', +'vec3', +'vec4', +'vec4', +'vec4', +'vec4', +'mat2x2', +'mat2x3', +'mat2x4', +'mat3x2', +'mat3x3', +'mat3x4', +'mat4x2', +'mat4x3', +'mat4x4', +'atomic', +'atomic', +'array', +'array', +'array', +'array', +'MyStruct']; -g.test('stage_inout') - .desc( - `Test that each @builtin attribute is validated against the required stage and in/out usage for that built-in variable.` - ) - .params(u => - u - .combineWithParams(kBuiltins) - .combine('use_struct', [true, false]) - .combine('target_stage', ['', 'vertex', 'fragment', 'compute']) - .combine('target_io', ['in', 'out']) - .beginSubcases() - ) - .fn(t => { - const code = generateShader({ - attribute: `@builtin(${t.params.name})`, - type: t.params.type, - stage: t.params.target_stage, - io: t.params.target_io, - use_struct: t.params.use_struct, - }); - // Expect to pass iff the built-in table contains an entry that matches. - const expectation = kBuiltins.some( - x => - x.name === t.params.name && - (x.stage === t.params.target_stage || - (t.params.use_struct && t.params.target_stage === '')) && - (x.io === t.params.target_io || t.params.target_stage === '') && - x.type === t.params.type - ); - - t.expectCompileResult(expectation, code); +g.test('stage_inout'). +desc( + `Test that each @builtin attribute is validated against the required stage and in/out usage for that built-in variable.` +). +params((u) => +u. +combineWithParams(kBuiltins). +combine('use_struct', [true, false]). +combine('target_stage', ['', 'vertex', 'fragment', 'compute']). +combine('target_io', ['in', 'out']). +beginSubcases() +). +fn((t) => { + const code = generateShader({ + attribute: `@builtin(${t.params.name})`, + type: t.params.type, + stage: t.params.target_stage, + io: t.params.target_io, + use_struct: t.params.use_struct }); -g.test('type') - .desc( - `Test that each @builtin attribute is validated against the required type of that built-in variable.` - ) - .params(u => - u - .combineWithParams(kBuiltins) - .combine('use_struct', [true, false]) - .combine('target_type', kTestTypes) - .beginSubcases() - ) - .fn(t => { - let code = ''; + // Expect to pass iff the built-in table contains an entry that matches. + const expectation = kBuiltins.some( + (x) => + x.name === t.params.name && ( + x.stage === t.params.target_stage || + t.params.use_struct && t.params.target_stage === '') && ( + x.io === t.params.target_io || t.params.target_stage === '') && + x.type === t.params.type + ); + t.expectCompileResult(expectation, code); +}); - if (t.params.target_type === 'MyStruct') { - // Generate a struct that contains the correct built-in type. - code += 'struct MyStruct {\n'; - code += ` value : ${t.params.type}\n`; - code += '};\n\n'; - } +g.test('type'). +desc( + `Test that each @builtin attribute is validated against the required type of that built-in variable.` +). +params((u) => +u. +combineWithParams(kBuiltins). +combine('use_struct', [true, false]). +combine('target_type', kTestTypes). +beginSubcases() +). +fn((t) => { + let code = ''; - code += generateShader({ - attribute: `@builtin(${t.params.name})`, - type: t.params.target_type, - stage: t.params.stage, - io: t.params.io, - use_struct: t.params.use_struct, - }); + if (t.params.target_type === 'MyStruct') { + // Generate a struct that contains the correct built-in type. + code += 'struct MyStruct {\n'; + code += ` value : ${t.params.type}\n`; + code += '};\n\n'; + } - // Expect to pass iff the built-in table contains an entry that matches. - const expectation = kBuiltins.some( - x => - x.name === t.params.name && - x.stage === t.params.stage && - x.io === t.params.io && - x.type === t.params.target_type - ); - - t.expectCompileResult(expectation, code); + code += generateShader({ + attribute: `@builtin(${t.params.name})`, + type: t.params.target_type, + stage: t.params.stage, + io: t.params.io, + use_struct: t.params.use_struct }); -g.test('nesting') - .desc(`Test validation of nested built-in variables`) - .params(u => - u.combine('target_stage', ['fragment', '']).combine('target_io', ['in', 'out']).beginSubcases() - ) - .fn(t => { - // Generate a struct that contains a sample_mask builtin, nested inside another struct. - let code = ` + // Expect to pass iff the built-in table contains an entry that matches. + const expectation = kBuiltins.some( + (x) => + x.name === t.params.name && + x.stage === t.params.stage && + x.io === t.params.io && + x.type === t.params.target_type + ); + t.expectCompileResult(expectation, code); +}); + +g.test('nesting'). +desc(`Test validation of nested built-in variables`). +params((u) => +u. +combine('target_stage', ['fragment', '']). +combine('target_io', ['in', 'out']). +beginSubcases() +). +fn((t) => { + // Generate a struct that contains a sample_mask builtin, nested inside another struct. + let code = ` struct Inner { @builtin(sample_mask) value : u32 }; @@ -154,51 +154,51 @@ g.test('nesting') inner : Inner };`; - code += generateShader({ - attribute: '', - type: 'Outer', - stage: t.params.target_stage, - io: t.params.target_io, - use_struct: false, - }); - - // Expect to pass only if the struct is not used for entry point IO. - t.expectCompileResult(t.params.target_stage === '', code); + code += generateShader({ + attribute: '', + type: 'Outer', + stage: t.params.target_stage, + io: t.params.target_io, + use_struct: false }); -g.test('duplicates') - .desc(`Test that duplicated built-in variables are validated.`) - .params(u => - u - // Place two @builtin(sample_mask) attributes onto the entry point function. - // We use `sample_mask` as it is valid as both an input and output for the same entry point. - // The function: - // - has two non-struct parameters (`p1` and `p2`) - // - has two struct parameters each with two members (`s1{a,b}` and `s2{a,b}`) - // - returns a struct with two members (`ra` and `rb`) - // By default, all of these variables will have unique @location() attributes. - .combine('first', ['p1', 's1a', 's2a', 'ra']) - .combine('second', ['p2', 's1b', 's2b', 'rb']) - .beginSubcases() - ) - .fn(t => { - const p1 = - t.params.first === 'p1' ? '@builtin(sample_mask)' : '@location(1) @interpolate(flat)'; - const p2 = - t.params.second === 'p2' ? '@builtin(sample_mask)' : '@location(2) @interpolate(flat)'; - const s1a = - t.params.first === 's1a' ? '@builtin(sample_mask)' : '@location(3) @interpolate(flat)'; - const s1b = - t.params.second === 's1b' ? '@builtin(sample_mask)' : '@location(4) @interpolate(flat)'; - const s2a = - t.params.first === 's2a' ? '@builtin(sample_mask)' : '@location(5) @interpolate(flat)'; - const s2b = - t.params.second === 's2b' ? '@builtin(sample_mask)' : '@location(6) @interpolate(flat)'; - const ra = - t.params.first === 'ra' ? '@builtin(sample_mask)' : '@location(1) @interpolate(flat)'; - const rb = - t.params.second === 'rb' ? '@builtin(sample_mask)' : '@location(2) @interpolate(flat)'; - const code = ` + // Expect to pass only if the struct is not used for entry point IO. + t.expectCompileResult(t.params.target_stage === '', code); +}); + +g.test('duplicates'). +desc(`Test that duplicated built-in variables are validated.`). +params((u) => +u +// Place two @builtin(sample_mask) attributes onto the entry point function. +// We use `sample_mask` as it is valid as both an input and output for the same entry point. +// The function: +// - has two non-struct parameters (`p1` and `p2`) +// - has two struct parameters each with two members (`s1{a,b}` and `s2{a,b}`) +// - returns a struct with two members (`ra` and `rb`) +// By default, all of these variables will have unique @location() attributes. +.combine('first', ['p1', 's1a', 's2a', 'ra']). +combine('second', ['p2', 's1b', 's2b', 'rb']). +beginSubcases() +). +fn((t) => { + const p1 = + t.params.first === 'p1' ? '@builtin(sample_mask)' : '@location(1) @interpolate(flat)'; + const p2 = + t.params.second === 'p2' ? '@builtin(sample_mask)' : '@location(2) @interpolate(flat)'; + const s1a = + t.params.first === 's1a' ? '@builtin(sample_mask)' : '@location(3) @interpolate(flat)'; + const s1b = + t.params.second === 's1b' ? '@builtin(sample_mask)' : '@location(4) @interpolate(flat)'; + const s2a = + t.params.first === 's2a' ? '@builtin(sample_mask)' : '@location(5) @interpolate(flat)'; + const s2b = + t.params.second === 's2b' ? '@builtin(sample_mask)' : '@location(6) @interpolate(flat)'; + const ra = + t.params.first === 'ra' ? '@builtin(sample_mask)' : '@location(1) @interpolate(flat)'; + const rb = + t.params.second === 'rb' ? '@builtin(sample_mask)' : '@location(2) @interpolate(flat)'; + const code = ` struct S1 { ${s1a} a : u32, ${s1b} b : u32, @@ -221,24 +221,24 @@ g.test('duplicates') } `; - // The test should fail if both @builtin(sample_mask) attributes are on the input parameters - // or structures, or it they are both on the output struct. Otherwise it should pass. - const firstIsRet = t.params.first === 'ra'; - const secondIsRet = t.params.second === 'rb'; - const expectation = firstIsRet !== secondIsRet; - t.expectCompileResult(expectation, code); - }); + // The test should fail if both @builtin(sample_mask) attributes are on the input parameters + // or structures, or it they are both on the output struct. Otherwise it should pass. + const firstIsRet = t.params.first === 'ra'; + const secondIsRet = t.params.second === 'rb'; + const expectation = firstIsRet !== secondIsRet; + t.expectCompileResult(expectation, code); +}); -g.test('missing_vertex_position') - .desc(`Test that vertex shaders are required to output @builtin(position).`) - .params(u => - u - .combine('use_struct', [true, false]) - .combine('attribute', ['@builtin(position)', '@location(0)']) - .beginSubcases() - ) - .fn(t => { - const code = ` +g.test('missing_vertex_position'). +desc(`Test that vertex shaders are required to output @builtin(position).`). +params((u) => +u. +combine('use_struct', [true, false]). +combine('attribute', ['@builtin(position)', '@location(0)']). +beginSubcases() +). +fn((t) => { + const code = ` struct S { ${t.params.attribute} value : vec4 }; @@ -249,29 +249,29 @@ g.test('missing_vertex_position') } `; - // Expect to pass only when using @builtin(position). - t.expectCompileResult(t.params.attribute === '@builtin(position)', code); - }); + // Expect to pass only when using @builtin(position). + t.expectCompileResult(t.params.attribute === '@builtin(position)', code); +}); -g.test('reuse_builtin_name') - .desc(`Test that a builtin name can be used in different contexts`) - .params(u => - u - .combineWithParams(kBuiltins) - .combine('use', ['alias', 'struct', 'function', 'module-var', 'function-var']) - ) - .fn(t => { - let code = ''; - if (t.params.use === 'alias') { - code += `alias ${t.params.name} = i32;`; - } else if (t.params.use === `struct`) { - code += `struct ${t.params.name} { i: f32, }`; - } else if (t.params.use === `function`) { - code += `fn ${t.params.name}() {}`; - } else if (t.params.use === `module-var`) { - code += `const ${t.params.name} = 1;`; - } else if (t.params.use === `function-var`) { - code += `fn test() { let ${t.params.name} = 1; }`; - } - t.expectCompileResult(true, code); - }); +g.test('reuse_builtin_name'). +desc(`Test that a builtin name can be used in different contexts`). +params((u) => +u. +combineWithParams(kBuiltins). +combine('use', ['alias', 'struct', 'function', 'module-var', 'function-var']) +). +fn((t) => { + let code = ''; + if (t.params.use === 'alias') { + code += `alias ${t.params.name} = i32;`; + } else if (t.params.use === `struct`) { + code += `struct ${t.params.name} { i: f32, }`; + } else if (t.params.use === `function`) { + code += `fn ${t.params.name}() {}`; + } else if (t.params.use === `module-var`) { + code += `const ${t.params.name} = 1;`; + } else if (t.params.use === `function-var`) { + code += `fn test() { let ${t.params.name} = 1; }`; + } + t.expectCompileResult(true, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/entry_point.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/entry_point.spec.js index 982e4e3dc90..d56b69811a5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/entry_point.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/entry_point.spec.js @@ -1,19 +1,20 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for attributes and entry point requirements`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for attributes and entry point requirements`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('missing_attribute_on_param') - .desc(`Test that an entry point without an IO attribute on one of its parameters is rejected.`) - .params(u => u.combine('target_stage', ['', 'vertex', 'fragment', 'compute']).beginSubcases()) - .fn(t => { - const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@location(1)'; - const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(1)'; - const compute_attr = t.params.target_stage === 'compute' ? '' : '@builtin(workgroup_id)'; - const code = ` +g.test('missing_attribute_on_param'). +desc(`Test that an entry point without an IO attribute on one of its parameters is rejected.`). +params((u) => +u.combine('target_stage', ['', 'vertex', 'fragment', 'compute']).beginSubcases() +). +fn((t) => { + const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@location(1)'; + const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(1)'; + const compute_attr = t.params.target_stage === 'compute' ? '' : '@builtin(workgroup_id)'; + const code = ` @vertex fn vert_main(@location(0) a : f32, ${vertex_attr} b : f32, @@ -33,19 +34,21 @@ fn comp_main(@builtin(global_invocation_id) a : vec3, @builtin(local_invocation_id) c : vec3) { } `; - t.expectCompileResult(t.params.target_stage === '', code); - }); + t.expectCompileResult(t.params.target_stage === '', code); +}); -g.test('missing_attribute_on_param_struct') - .desc( - `Test that an entry point struct parameter without an IO attribute on one of its members is rejected.` - ) - .params(u => u.combine('target_stage', ['', 'vertex', 'fragment', 'compute']).beginSubcases()) - .fn(t => { - const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@location(1)'; - const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(1)'; - const compute_attr = t.params.target_stage === 'compute' ? '' : '@builtin(workgroup_id)'; - const code = ` +g.test('missing_attribute_on_param_struct'). +desc( + `Test that an entry point struct parameter without an IO attribute on one of its members is rejected.` +). +params((u) => +u.combine('target_stage', ['', 'vertex', 'fragment', 'compute']).beginSubcases() +). +fn((t) => { + const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@location(1)'; + const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(1)'; + const compute_attr = t.params.target_stage === 'compute' ? '' : '@builtin(workgroup_id)'; + const code = ` struct VertexInputs { @location(0) a : f32, ${vertex_attr} b : f32, @@ -75,16 +78,16 @@ fn frag_main(inputs : FragmentInputs) { fn comp_main(inputs : ComputeInputs) { } `; - t.expectCompileResult(t.params.target_stage === '', code); - }); + t.expectCompileResult(t.params.target_stage === '', code); +}); -g.test('missing_attribute_on_return_type') - .desc(`Test that an entry point without an IO attribute on its return type is rejected.`) - .params(u => u.combine('target_stage', ['', 'vertex', 'fragment']).beginSubcases()) - .fn(t => { - const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@builtin(position)'; - const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(0)'; - const code = ` +g.test('missing_attribute_on_return_type'). +desc(`Test that an entry point without an IO attribute on its return type is rejected.`). +params((u) => u.combine('target_stage', ['', 'vertex', 'fragment']).beginSubcases()). +fn((t) => { + const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@builtin(position)'; + const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(0)'; + const code = ` @vertex fn vert_main() -> ${vertex_attr} vec4 { return vec4(); @@ -95,18 +98,18 @@ fn frag_main() -> ${fragment_attr} vec4 { return vec4(); } `; - t.expectCompileResult(t.params.target_stage === '', code); - }); + t.expectCompileResult(t.params.target_stage === '', code); +}); -g.test('missing_attribute_on_return_type_struct') - .desc( - `Test that an entry point struct return type without an IO attribute on one of its members is rejected.` - ) - .params(u => u.combine('target_stage', ['', 'vertex', 'fragment']).beginSubcases()) - .fn(t => { - const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@location(1)'; - const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(1)'; - const code = ` +g.test('missing_attribute_on_return_type_struct'). +desc( + `Test that an entry point struct return type without an IO attribute on one of its members is rejected.` +). +params((u) => u.combine('target_stage', ['', 'vertex', 'fragment']).beginSubcases()). +fn((t) => { + const vertex_attr = t.params.target_stage === 'vertex' ? '' : '@location(1)'; + const fragment_attr = t.params.target_stage === 'fragment' ? '' : '@location(1)'; + const code = ` struct VertexOutputs { @location(0) a : f32, ${vertex_attr} b : f32, @@ -128,11 +131,11 @@ fn frag_main() -> FragmentOutputs { return FragmentOutputs(); } `; - t.expectCompileResult(t.params.target_stage === '', code); - }); + t.expectCompileResult(t.params.target_stage === '', code); +}); -g.test('no_entry_point_provided') - .desc(`Tests that a shader without an entry point is accepted`) - .fn(t => { - t.expectCompileResult(true, 'fn main() {}'); - }); +g.test('no_entry_point_provided'). +desc(`Tests that a shader without an entry point is accepted`). +fn((t) => { + t.expectCompileResult(true, 'fn main() {}'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group.spec.js index 4737f00f593..4c6a691e521 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for group`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for group`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -12,93 +11,93 @@ const kTests = { src: `const z = 5; const y = 2; @group(z + y)`, - pass: true, + pass: true }, override_expr: { src: `override z = 5; @group(z)`, - pass: false, + pass: false }, zero: { src: `@group(0)`, - pass: true, + pass: true }, one: { src: `@group(1)`, - pass: true, + pass: true }, comment: { src: `@/* comment */group(1)`, - pass: true, + pass: true }, split_line: { src: '@ \n group(1)', - pass: true, + pass: true }, trailing_comma: { src: `@group(1,)`, - pass: true, + pass: true }, int_literal: { src: `@group(1i)`, - pass: true, + pass: true }, uint_literal: { src: `@group(1u)`, - pass: true, + pass: true }, hex_literal: { src: `@group(0x1)`, - pass: true, + pass: true }, negative: { src: `@group(-1)`, - pass: false, + pass: false }, missing_value: { src: `@group()`, - pass: false, + pass: false }, missing_left_paren: { src: `@group 1)`, - pass: false, + pass: false }, missing_right_paren: { src: `@group(1`, - pass: false, + pass: false }, multiple_values: { src: `@group(1,2)`, - pass: false, + pass: false }, f32_val_literal: { src: `@group(1.0)`, - pass: false, + pass: false }, f32_val: { src: `@group(1f)`, - pass: false, + pass: false }, no_params: { src: `@group`, - pass: false, + pass: false }, misspelling: { src: `@agroup(1)`, - pass: false, + pass: false }, multi_group: { src: `@group(1) @group(1)`, - pass: false, - }, + pass: false + } }; -g.test('group') - .desc(`Test validation of group`) - .params(u => u.combine('attr', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('group'). +desc(`Test validation of group`). +params((u) => u.combine('attr', keysOf(kTests))). +fn((t) => { + const code = ` ${kTests[t.params.attr].src} @binding(1) var a: i32; @@ -106,16 +105,16 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(kTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kTests[t.params.attr].pass, code); +}); -g.test('group_f16') - .desc(`Test validation of group with f16`) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const code = ` +g.test('group_f16'). +desc(`Test validation of group with f16`). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const code = ` @group(1h) @binding(1) var a: i32; @@ -123,13 +122,13 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('group_without_binding') - .desc(`Test validation of group without binding`) - .fn(t => { - const code = ` +g.test('group_without_binding'). +desc(`Test validation of group without binding`). +fn((t) => { + const code = ` @group(1) var a: i32; @@ -137,5 +136,5 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group_and_binding.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group_and_binding.spec.js index 615187ed248..d5547004749 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group_and_binding.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/group_and_binding.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for group and binding`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for group and binding`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; import { @@ -9,38 +8,38 @@ import { kResourceEmitters, kResourceKindsA, kResourceKindsAll, - kResourceKindsB, -} from './util.js'; + kResourceKindsB } from + +'./util.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('binding_attributes') - .desc(`Test that both @group and @binding attributes must both be declared.`) - .params(u => - u - .combine('stage', ['vertex', 'fragment', 'compute']) - .combine('has_group', [true, false]) - .combine('has_binding', [true, false]) - .combine('resource', kResourceKindsAll) - .beginSubcases() - ) - .fn(t => { - const emitter = kResourceEmitters.get(t.params.resource); - //const emitter = kResourceEmitters.get('uniform') as ResourceDeclarationEmitter; - const code = emitter( - 'R', - t.params.has_group ? 0 : undefined, - t.params.has_binding ? 0 : undefined - ); +g.test('binding_attributes'). +desc(`Test that both @group and @binding attributes must both be declared.`). +params((u) => +u. +combine('stage', ['vertex', 'fragment', 'compute']). +combine('has_group', [true, false]). +combine('has_binding', [true, false]). +combine('resource', kResourceKindsAll). +beginSubcases() +). +fn((t) => { + const emitter = kResourceEmitters.get(t.params.resource); + //const emitter = kResourceEmitters.get('uniform') as ResourceDeclarationEmitter; + const code = emitter( + 'R', + t.params.has_group ? 0 : undefined, + t.params.has_binding ? 0 : undefined + ); + const expect = t.params.has_group && t.params.has_binding; + t.expectCompileResult(expect, code); +}); - const expect = t.params.has_group && t.params.has_binding; - t.expectCompileResult(expect, code); - }); - -g.test('private_module_scope') - .desc(`Test validation of group and binding on private resources`) - .fn(t => { - const code = ` +g.test('private_module_scope'). +desc(`Test validation of group and binding on private resources`). +fn((t) => { + const code = ` @group(1) @binding(1) var a: i32; @@ -48,125 +47,125 @@ var a: i32; @compute fn main() { _ = a; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('private_function_scope') - .desc(`Test validation of group and binding on function-scope private resources`) - .fn(t => { - const code = ` +g.test('private_function_scope'). +desc(`Test validation of group and binding on function-scope private resources`). +fn((t) => { + const code = ` @workgroup_size(1, 1, 1) @compute fn main() { @group(1) @binding(1) var a: i32; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('function_scope') - .desc(`Test validation of group and binding on function-scope private resources`) - .fn(t => { - const code = ` +g.test('function_scope'). +desc(`Test validation of group and binding on function-scope private resources`). +fn((t) => { + const code = ` @workgroup_size(1, 1, 1) @compute fn main() { @group(1) @binding(1) var a: i32; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('function_scope_texture') - .desc(`Test validation of group and binding on function-scope private resources`) - .fn(t => { - const code = ` +g.test('function_scope_texture'). +desc(`Test validation of group and binding on function-scope private resources`). +fn((t) => { + const code = ` @workgroup_size(1, 1, 1) @compute fn main() { @group(1) @binding(1) var a: texture_2d; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('single_entry_point') - .desc( - `Test that two different resource variables in a shader must not have the same group and binding values, when considered as a pair.` - ) - .params(u => - u - .combine('stage', ['vertex', 'fragment', 'compute']) - .combine('a_kind', kResourceKindsA) - .combine('b_kind', kResourceKindsB) - .combine('a_group', [0, 3]) - .combine('b_group', [0, 3]) - .combine('a_binding', [0, 3]) - .combine('b_binding', [0, 3]) - .combine('usage', ['direct', 'transitive']) - .beginSubcases() - ) - .fn(t => { - const resourceA = kResourceEmitters.get(t.params.a_kind); - const resourceB = kResourceEmitters.get(t.params.b_kind); - const resources = ` +g.test('single_entry_point'). +desc( + `Test that two different resource variables in a shader must not have the same group and binding values, when considered as a pair.` +). +params((u) => +u. +combine('stage', ['vertex', 'fragment', 'compute']). +combine('a_kind', kResourceKindsA). +combine('b_kind', kResourceKindsB). +combine('a_group', [0, 3]). +combine('b_group', [0, 3]). +combine('a_binding', [0, 3]). +combine('b_binding', [0, 3]). +combine('usage', ['direct', 'transitive']). +beginSubcases() +). +fn((t) => { + const resourceA = kResourceEmitters.get(t.params.a_kind); + const resourceB = kResourceEmitters.get(t.params.b_kind); + const resources = ` ${resourceA('resource_a', t.params.a_group, t.params.a_binding)} ${resourceB('resource_b', t.params.b_group, t.params.b_binding)} `; - const expect = - t.params.a_group !== t.params.b_group || t.params.a_binding !== t.params.b_binding; + const expect = + t.params.a_group !== t.params.b_group || t.params.a_binding !== t.params.b_binding; - if (t.params.usage === 'direct') { - const code = ` + if (t.params.usage === 'direct') { + const code = ` ${resources} ${declareEntrypoint('main', t.params.stage, '_ = resource_a; _ = resource_b;')} `; - t.expectCompileResult(expect, code); - } else { - const code = ` + t.expectCompileResult(expect, code); + } else { + const code = ` ${resources} fn use_a() { _ = resource_a; } fn use_b() { _ = resource_b; } ${declareEntrypoint('main', t.params.stage, 'use_a(); use_b();')} `; - t.expectCompileResult(expect, code); - } - }); + t.expectCompileResult(expect, code); + } +}); -g.test('different_entry_points') - .desc( - `Test that resources may use the same binding points if exclusively accessed by different entry points.` - ) - .params(u => - u - .combine('a_stage', ['vertex', 'fragment', 'compute']) - .combine('b_stage', ['vertex', 'fragment', 'compute']) - .combine('a_kind', kResourceKindsA) - .combine('b_kind', kResourceKindsB) - .combine('usage', ['direct', 'transitive']) - .beginSubcases() - ) - .fn(t => { - const resourceA = kResourceEmitters.get(t.params.a_kind); - const resourceB = kResourceEmitters.get(t.params.b_kind); - const resources = ` -${resourceA('resource_a', /* group */ 0, /* binding */ 0)} -${resourceB('resource_b', /* group */ 0, /* binding */ 0)} +g.test('different_entry_points'). +desc( + `Test that resources may use the same binding points if exclusively accessed by different entry points.` +). +params((u) => +u. +combine('a_stage', ['vertex', 'fragment', 'compute']). +combine('b_stage', ['vertex', 'fragment', 'compute']). +combine('a_kind', kResourceKindsA). +combine('b_kind', kResourceKindsB). +combine('usage', ['direct', 'transitive']). +beginSubcases() +). +fn((t) => { + const resourceA = kResourceEmitters.get(t.params.a_kind); + const resourceB = kResourceEmitters.get(t.params.b_kind); + const resources = ` +${resourceA('resource_a', /* group */0, /* binding */0)} +${resourceB('resource_b', /* group */0, /* binding */0)} `; - const expect = true; // Binding reuse between different entry points is fine. + const expect = true; // Binding reuse between different entry points is fine. - if (t.params.usage === 'direct') { - const code = ` + if (t.params.usage === 'direct') { + const code = ` ${resources} ${declareEntrypoint('main_a', t.params.a_stage, '_ = resource_a;')} ${declareEntrypoint('main_b', t.params.b_stage, '_ = resource_b;')} `; - t.expectCompileResult(expect, code); - } else { - const code = ` + t.expectCompileResult(expect, code); + } else { + const code = ` ${resources} fn use_a() { _ = resource_a; } fn use_b() { _ = resource_b; } ${declareEntrypoint('main_a', t.params.a_stage, 'use_a();')} ${declareEntrypoint('main_b', t.params.b_stage, 'use_b();')} `; - t.expectCompileResult(expect, code); - } - }); + t.expectCompileResult(expect, code); + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/id.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/id.spec.js index 4bd1c13d587..4faca0391ab 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/id.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/id.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for id`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for id`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,162 +9,162 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { zero: { src: `@id(0)`, - pass: true, + pass: true }, one: { src: `@id(1)`, - pass: true, + pass: true }, hex: { src: `@id(0x1)`, - pass: true, + pass: true }, trailing_comma: { src: `@id(1,)`, - pass: true, + pass: true }, i32: { src: `@id(1i)`, - pass: true, + pass: true }, ui32: { src: `@id(1u)`, - pass: true, + pass: true }, largest: { src: `@id(65535)`, - pass: true, + pass: true }, newline: { src: '@\nid(1)', - pass: true, + pass: true }, comment: { src: `@/* comment */id(1)`, - pass: true, + pass: true }, const_expr: { src: `const z = 5; const y = 2; @id(z + y)`, - pass: true, + pass: true }, misspelling: { src: `@aid(1)`, - pass: false, + pass: false }, empty: { src: `@id()`, - pass: false, + pass: false }, missing_left_paren: { src: `@id 1)`, - pass: false, + pass: false }, missing_right_paren: { src: `@id(1`, - pass: false, + pass: false }, multi_value: { src: `@id(1, 2)`, - pass: false, + pass: false }, overide_expr: { src: `override z = 5; override y = 2; @id(z + y)`, - pass: false, + pass: false }, f32_literal: { src: `@id(1.0)`, - pass: false, + pass: false }, f32: { src: `@id(1f)`, - pass: false, + pass: false }, negative: { src: `@id(-1)`, - pass: false, + pass: false }, too_large: { src: `@id(65536)`, - pass: false, + pass: false }, no_params: { src: `@id`, - pass: false, + pass: false }, duplicate: { src: `@id(1) @id(1)`, - pass: false, - }, + pass: false + } }; -g.test('id') - .desc(`Test validation of id`) - .params(u => u.combine('attr', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('id'). +desc(`Test validation of id`). +params((u) => u.combine('attr', keysOf(kTests))). +fn((t) => { + const code = ` ${kTests[t.params.attr].src} override a = 4; @workgroup_size(1, 1, 1) @compute fn main() {}`; - t.expectCompileResult(kTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kTests[t.params.attr].pass, code); +}); -g.test('id_fp16') - .desc(`Test validation of id with fp16`) - .params(u => u.combine('ext', ['', 'h'])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const code = ` +g.test('id_fp16'). +desc(`Test validation of id with fp16`). +params((u) => u.combine('ext', ['', 'h'])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const code = ` @id(1${t.params.ext}) override a = 4; @workgroup_size(1, 1, 1) @compute fn main() {}`; - t.expectCompileResult(t.params.ext === '', code); - }); + t.expectCompileResult(t.params.ext === '', code); +}); -g.test('id_struct_member') - .desc(`Test validation of id with struct member`) - .params(u => u.combine('id', ['@id(1) override', '@id(1)', ''])) - .fn(t => { - const code = ` +g.test('id_struct_member'). +desc(`Test validation of id with struct member`). +params((u) => u.combine('id', ['@id(1) override', '@id(1)', ''])). +fn((t) => { + const code = ` struct S { ${t.params.id} a: i32, } @workgroup_size(1, 1, 1) @compute fn main() {}`; - t.expectCompileResult(t.params.id === '', code); - }); + t.expectCompileResult(t.params.id === '', code); +}); -g.test('id_non_override') - .desc(`Test validation of id with non-override`) - .params(u => u.combine('type', ['var', 'const', 'override'])) - .fn(t => { - const code = ` +g.test('id_non_override'). +desc(`Test validation of id with non-override`). +params((u) => u.combine('type', ['var', 'const', 'override'])). +fn((t) => { + const code = ` @id(1) ${t.params['type']} a = 4; @workgroup_size(1, 1, 1) @compute fn main() {}`; - t.expectCompileResult(t.params['type'] === 'override', code); - }); + t.expectCompileResult(t.params['type'] === 'override', code); +}); -g.test('id_in_function') - .desc(`Test validation of id inside a function`) - .params(u => u.combine('id', ['@id(1)', ''])) - .fn(t => { - const code = ` +g.test('id_in_function'). +desc(`Test validation of id inside a function`). +params((u) => u.combine('id', ['@id(1)', ''])). +fn((t) => { + const code = ` @workgroup_size(1, 1, 1) @compute fn main() { ${t.params['id']} var a = 4; }`; - t.expectCompileResult(t.params['id'] === '', code); - }); + t.expectCompileResult(t.params['id'] === '', code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/interpolate.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/interpolate.spec.js index 413a60c9cad..ec9adc01296 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/interpolate.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/interpolate.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for the interpolate attribute`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for the interpolate attribute`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -11,208 +10,208 @@ export const g = makeTestGroup(ShaderValidationTest); // List of valid interpolation attributes. const kValidInterpolationAttributes = new Set([ - '', - '@interpolate(flat)', - '@interpolate(perspective)', - '@interpolate(perspective, center)', - '@interpolate(perspective, centroid)', - '@interpolate(perspective, sample)', - '@interpolate(linear)', - '@interpolate(linear, center)', - '@interpolate(linear, centroid)', - '@interpolate(linear, sample)', -]); +'', +'@interpolate(flat)', +'@interpolate(perspective)', +'@interpolate(perspective, center)', +'@interpolate(perspective, centroid)', +'@interpolate(perspective, sample)', +'@interpolate(linear)', +'@interpolate(linear, center)', +'@interpolate(linear, centroid)', +'@interpolate(linear, sample)'] +); -g.test('type_and_sampling') - .desc(`Test that all combinations of interpolation type and sampling are validated correctly.`) - .params(u => - u - .combine('stage', ['vertex', 'fragment']) - .combine('io', ['in', 'out']) - .combine('use_struct', [true, false]) - .combine('type', [ - '', - 'flat', - 'perspective', - 'linear', - 'center', // Invalid as first param - 'centroid', // Invalid as first param - 'sample', // Invalid as first param - ]) - .combine('sampling', [ - '', - 'center', - 'centroid', - 'sample', - 'flat', // Invalid as second param - 'perspective', // Invalid as second param - 'linear', // Invalid as second param - ]) - .beginSubcases() - ) - .fn(t => { - if (t.params.stage === 'vertex' && t.params.use_struct === false) { - t.skip('vertex output must include a position builtin, so must use a struct'); +g.test('type_and_sampling'). +desc(`Test that all combinations of interpolation type and sampling are validated correctly.`). +params((u) => +u. +combine('stage', ['vertex', 'fragment']). +combine('io', ['in', 'out']). +combine('use_struct', [true, false]). +combine('type', [ +'', +'flat', +'perspective', +'linear', +'center', // Invalid as first param +'centroid', // Invalid as first param +'sample' // Invalid as first param +]). +combine('sampling', [ +'', +'center', +'centroid', +'sample', +'flat', // Invalid as second param +'perspective', // Invalid as second param +'linear' // Invalid as second param +]). +beginSubcases() +). +fn((t) => { + if (t.params.stage === 'vertex' && t.params.use_struct === false) { + t.skip('vertex output must include a position builtin, so must use a struct'); + } + + let interpolate = ''; + if (t.params.type !== '' || t.params.sampling !== '') { + interpolate = '@interpolate('; + if (t.params.type !== '') { + interpolate += `${t.params.type}`; } - - let interpolate = ''; - if (t.params.type !== '' || t.params.sampling !== '') { - interpolate = '@interpolate('; - if (t.params.type !== '') { - interpolate += `${t.params.type}`; - } - if (t.params.sampling !== '') { - interpolate += `, ${t.params.sampling}`; - } - interpolate += `)`; + if (t.params.sampling !== '') { + interpolate += `, ${t.params.sampling}`; } - const code = generateShader({ - attribute: '@location(0)' + interpolate, - type: 'f32', - stage: t.params.stage, - io: t.params.io, - use_struct: t.params.use_struct, - }); - - t.expectCompileResult(kValidInterpolationAttributes.has(interpolate), code); + interpolate += `)`; + } + const code = generateShader({ + attribute: '@location(0)' + interpolate, + type: 'f32', + stage: t.params.stage, + io: t.params.io, + use_struct: t.params.use_struct }); -g.test('require_location') - .desc(`Test that the interpolate attribute is only accepted with user-defined IO.`) - .params(u => - u - .combine('stage', ['vertex', 'fragment']) - .combine('attribute', ['@location(0)', '@builtin(position)']) - .combine('use_struct', [true, false]) - .beginSubcases() - ) - .fn(t => { - if ( - t.params.stage === 'vertex' && - t.params.use_struct === false && - !t.params.attribute.includes('position') - ) { - t.skip('vertex output must include a position builtin, so must use a struct'); - } + t.expectCompileResult(kValidInterpolationAttributes.has(interpolate), code); +}); - const code = generateShader({ - attribute: t.params.attribute + `@interpolate(flat)`, - type: 'vec4', - stage: t.params.stage, - io: t.params.stage === 'fragment' ? 'in' : 'out', - use_struct: t.params.use_struct, - }); - t.expectCompileResult(t.params.attribute === '@location(0)', code); +g.test('require_location'). +desc(`Test that the interpolate attribute is only accepted with user-defined IO.`). +params((u) => +u. +combine('stage', ['vertex', 'fragment']). +combine('attribute', ['@location(0)', '@builtin(position)']). +combine('use_struct', [true, false]). +beginSubcases() +). +fn((t) => { + if ( + t.params.stage === 'vertex' && + t.params.use_struct === false && + !t.params.attribute.includes('position')) + { + t.skip('vertex output must include a position builtin, so must use a struct'); + } + + const code = generateShader({ + attribute: t.params.attribute + `@interpolate(flat)`, + type: 'vec4', + stage: t.params.stage, + io: t.params.stage === 'fragment' ? 'in' : 'out', + use_struct: t.params.use_struct + }); + t.expectCompileResult(t.params.attribute === '@location(0)', code); +}); + +g.test('integral_types'). +desc(`Test that the implementation requires @interpolate(flat) for integral user-defined IO.`). +params((u) => +u. +combine('stage', ['vertex', 'fragment']). +combine('type', ['i32', 'u32', 'vec2', 'vec4']). +combine('use_struct', [true, false]). +combine('attribute', kValidInterpolationAttributes). +beginSubcases() +). +fn((t) => { + if (t.params.stage === 'vertex' && t.params.use_struct === false) { + t.skip('vertex output must include a position builtin, so must use a struct'); + } + + const code = generateShader({ + attribute: '@location(0)' + t.params.attribute, + type: t.params.type, + stage: t.params.stage, + io: t.params.stage === 'vertex' ? 'out' : 'in', + use_struct: t.params.use_struct }); -g.test('integral_types') - .desc(`Test that the implementation requires @interpolate(flat) for integral user-defined IO.`) - .params(u => - u - .combine('stage', ['vertex', 'fragment']) - .combine('type', ['i32', 'u32', 'vec2', 'vec4']) - .combine('use_struct', [true, false]) - .combine('attribute', kValidInterpolationAttributes) - .beginSubcases() - ) - .fn(t => { - if (t.params.stage === 'vertex' && t.params.use_struct === false) { - t.skip('vertex output must include a position builtin, so must use a struct'); - } + t.expectCompileResult(t.params.attribute === '@interpolate(flat)', code); +}); - const code = generateShader({ - attribute: '@location(0)' + t.params.attribute, - type: t.params.type, - stage: t.params.stage, - io: t.params.stage === 'vertex' ? 'out' : 'in', - use_struct: t.params.use_struct, - }); - - t.expectCompileResult(t.params.attribute === '@interpolate(flat)', code); - }); - -g.test('duplicate') - .desc(`Test that the interpolate attribute can only be applied once.`) - .params(u => u.combine('attr', ['', '@interpolate(flat)'])) - .fn(t => { - const code = generateShader({ - attribute: `@location(0) @interpolate(flat) ${t.params.attr}`, - type: 'vec4', - stage: 'fragment', - io: 'in', - use_struct: false, - }); - t.expectCompileResult(t.params.attr === '', code); +g.test('duplicate'). +desc(`Test that the interpolate attribute can only be applied once.`). +params((u) => u.combine('attr', ['', '@interpolate(flat)'])). +fn((t) => { + const code = generateShader({ + attribute: `@location(0) @interpolate(flat) ${t.params.attr}`, + type: 'vec4', + stage: 'fragment', + io: 'in', + use_struct: false }); + t.expectCompileResult(t.params.attr === '', code); +}); const kValidationTests = { valid: { src: `@interpolate(flat)`, - pass: true, + pass: true }, no_space: { src: `@interpolate(perspective,center)`, - pass: true, + pass: true }, trailing_comma_one_arg: { src: `@interpolate(flat,)`, - pass: true, + pass: true }, trailing_comma_two_arg: { src: `@interpolate(perspective, center,)`, - pass: true, + pass: true }, newline: { src: '@\ninterpolate(flat)', - pass: true, + pass: true }, comment: { src: `@/* comment */interpolate(flat)`, - pass: true, + pass: true }, no_params: { src: `@interpolate()`, - pass: false, + pass: false }, missing_left_paren: { src: `@interpolate flat)`, - pass: false, + pass: false }, missing_value_and_left_paren: { src: `@interpolate)`, - pass: false, + pass: false }, missing_right_paren: { src: `@interpolate(flat`, - pass: false, + pass: false }, missing_parens: { src: `@interpolate`, - pass: false, + pass: false }, missing_comma: { src: `@interpolate(perspective center)`, - pass: false, + pass: false }, numeric: { src: `@interpolate(1)`, - pass: false, + pass: false }, numeric_second_param: { src: `@interpolate(perspective, 1)`, - pass: false, - }, + pass: false + } }; -g.test('interpolation_validation') - .desc(`Test validation of interpolation`) - .params(u => u.combine('attr', keysOf(kValidationTests))) - .fn(t => { - const code = ` +g.test('interpolation_validation'). +desc(`Test validation of interpolation`). +params((u) => u.combine('attr', keysOf(kValidationTests))). +fn((t) => { + const code = ` @vertex fn main(${kValidationTests[t.params.attr].src} @location(0) b: f32) -> @builtin(position) vec4 { return vec4f(0); }`; - t.expectCompileResult(kValidationTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kValidationTests[t.params.attr].pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/invariant.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/invariant.spec.js index cb2e4c5909c..567fabdaf63 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/invariant.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/invariant.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for the invariant attribute`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for the invariant attribute`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -13,43 +12,43 @@ export const g = makeTestGroup(ShaderValidationTest); const kTests = { invariant: { src: `@invariant`, - pass: true, + pass: true }, comment: { src: `@/* comment */invariant`, - pass: true, + pass: true }, split_line: { src: '@\ninvariant', - pass: true, + pass: true }, empty_parens: { src: `@invariant()`, - pass: false, + pass: false }, value: { src: `@invariant(0)`, - pass: false, + pass: false }, missing_right_paren: { src: `@invariant(`, - pass: false, + pass: false }, missing_left_paren: { src: `@invariant)`, - pass: false, + pass: false }, duplicate: { src: `@invariant @invariant`, - pass: false, - }, + pass: false + } }; -g.test('parsing') - .desc(`Test parsing of the invariant attribute`) - .params(u => u.combine('attr', keysOf(kTests))) - .fn(t => { - const code = ` +g.test('parsing'). +desc(`Test parsing of the invariant attribute`). +params((u) => u.combine('attr', keysOf(kTests))). +fn((t) => { + const code = ` struct VertexOut { @builtin(position) ${kTests[t.params.attr].src} position : vec4 }; @@ -58,30 +57,35 @@ g.test('parsing') return VertexOut(); } `; - t.expectCompileResult(kTests[t.params.attr].pass, code); + t.expectCompileResult(kTests[t.params.attr].pass, code); +}); + +g.test('valid_only_with_vertex_position_builtin'). +desc(`Test that the invariant attribute is only accepted with the vertex position builtin`). +params((u) => +u. +combineWithParams(kBuiltins). +combine('use_struct', [true, false]). +beginSubcases() +). +fn((t) => { + const code = generateShader({ + attribute: `@builtin(${t.params.name}) @invariant`, + type: t.params.type, + stage: t.params.stage, + io: t.params.io, + use_struct: t.params.use_struct }); -g.test('valid_only_with_vertex_position_builtin') - .desc(`Test that the invariant attribute is only accepted with the vertex position builtin`) - .params(u => u.combineWithParams(kBuiltins).combine('use_struct', [true, false]).beginSubcases()) - .fn(t => { - const code = generateShader({ - attribute: `@builtin(${t.params.name}) @invariant`, - type: t.params.type, - stage: t.params.stage, - io: t.params.io, - use_struct: t.params.use_struct, - }); + t.expectCompileResult(t.params.name === 'position', code); +}); - t.expectCompileResult(t.params.name === 'position', code); - }); - -g.test('not_valid_on_user_defined_io') - .desc(`Test that the invariant attribute is not accepted on user-defined IO attributes.`) - .params(u => u.combine('use_invariant', [true, false]).beginSubcases()) - .fn(t => { - const invariant = t.params.use_invariant ? '@invariant' : ''; - const code = ` +g.test('not_valid_on_user_defined_io'). +desc(`Test that the invariant attribute is not accepted on user-defined IO attributes.`). +params((u) => u.combine('use_invariant', [true, false]).beginSubcases()). +fn((t) => { + const invariant = t.params.use_invariant ? '@invariant' : ''; + const code = ` struct VertexOut { @location(0) ${invariant} loc0 : vec4, @builtin(position) position : vec4, @@ -91,5 +95,5 @@ g.test('not_valid_on_user_defined_io') return VertexOut(); } `; - t.expectCompileResult(!t.params.use_invariant, code); - }); + t.expectCompileResult(!t.params.use_invariant, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/locations.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/locations.spec.js index c40d895ec4c..7dd5492283c 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/locations.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/locations.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for entry point user-defined IO`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for entry point user-defined IO`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,183 +9,183 @@ import { generateShader } from './util.js'; export const g = makeTestGroup(ShaderValidationTest); const kValidLocationTypes = new Set([ - 'f16', - 'f32', - 'i32', - 'u32', - 'vec2', - 'vec2', - 'vec2', - 'vec3', - 'vec3', - 'vec3', - 'vec4', - 'vec4', - 'vec4', - 'vec2h', - 'vec2f', - 'vec2i', - 'vec2u', - 'vec3h', - 'vec3f', - 'vec3i', - 'vec3u', - 'vec4h', - 'vec4f', - 'vec4i', - 'vec4u', - 'MyAlias', -]); +'f16', +'f32', +'i32', +'u32', +'vec2', +'vec2', +'vec2', +'vec3', +'vec3', +'vec3', +'vec4', +'vec4', +'vec4', +'vec2h', +'vec2f', +'vec2i', +'vec2u', +'vec3h', +'vec3f', +'vec3i', +'vec3u', +'vec4h', +'vec4f', +'vec4i', +'vec4u', +'MyAlias'] +); const kInvalidLocationTypes = new Set([ - 'bool', - 'vec2', - 'vec3', - 'vec4', - 'mat2x2', - 'mat2x3', - 'mat2x4', - 'mat3x2', - 'mat3x3', - 'mat3x4', - 'mat4x2', - 'mat4x3', - 'mat4x4', - 'mat2x2f', - 'mat2x3f', - 'mat2x4f', - 'mat3x2f', - 'mat3x3f', - 'mat3x4f', - 'mat4x2f', - 'mat4x3f', - 'mat4x4f', - 'mat2x2h', - 'mat2x3h', - 'mat2x4h', - 'mat3x2h', - 'mat3x3h', - 'mat3x4h', - 'mat4x2h', - 'mat4x3h', - 'mat4x4h', - 'array', - 'array', - 'array', - 'array', - 'atomic', - 'atomic', - 'MyStruct', - 'texture_1d', - 'texture_2d', - 'texture_2d_array', - 'texture_3d', - 'texture_cube', - 'texture_cube_array', - 'texture_multisampled_2d', - 'texture_external', - 'texture_storage_1d', - 'texture_storage_2d', - 'texture_storage_2d_array', - 'texture_storage_3d', - 'texture_depth_2d', - 'texture_depth_2d_array', - 'texture_depth_cube', - 'texture_depth_cube_array', - 'texture_depth_multisampled_2d', - 'sampler', - 'sampler_comparison', -]); +'bool', +'vec2', +'vec3', +'vec4', +'mat2x2', +'mat2x3', +'mat2x4', +'mat3x2', +'mat3x3', +'mat3x4', +'mat4x2', +'mat4x3', +'mat4x4', +'mat2x2f', +'mat2x3f', +'mat2x4f', +'mat3x2f', +'mat3x3f', +'mat3x4f', +'mat4x2f', +'mat4x3f', +'mat4x4f', +'mat2x2h', +'mat2x3h', +'mat2x4h', +'mat3x2h', +'mat3x3h', +'mat3x4h', +'mat4x2h', +'mat4x3h', +'mat4x4h', +'array', +'array', +'array', +'array', +'atomic', +'atomic', +'MyStruct', +'texture_1d', +'texture_2d', +'texture_2d_array', +'texture_3d', +'texture_cube', +'texture_cube_array', +'texture_multisampled_2d', +'texture_external', +'texture_storage_1d', +'texture_storage_2d', +'texture_storage_2d_array', +'texture_storage_3d', +'texture_depth_2d', +'texture_depth_2d_array', +'texture_depth_cube', +'texture_depth_cube_array', +'texture_depth_multisampled_2d', +'sampler', +'sampler_comparison'] +); -g.test('stage_inout') - .desc(`Test validation of user-defined IO stage and in/out usage`) - .params(u => - u - .combine('use_struct', [true, false]) - .combine('target_stage', ['vertex', 'fragment', 'compute']) - .combine('target_io', ['in', 'out']) - .beginSubcases() - ) - .fn(t => { - const code = generateShader({ - attribute: '@location(0)', - type: 'f32', - stage: t.params.target_stage, - io: t.params.target_io, - use_struct: t.params.use_struct, - }); - - // Expect to fail for compute shaders or when used as a non-struct vertex output (since the - // position built-in must also be specified). - const expectation = - t.params.target_stage === 'fragment' || - (t.params.target_stage === 'vertex' && (t.params.target_io === 'in' || t.params.use_struct)); - t.expectCompileResult(expectation, code); +g.test('stage_inout'). +desc(`Test validation of user-defined IO stage and in/out usage`). +params((u) => +u. +combine('use_struct', [true, false]). +combine('target_stage', ['vertex', 'fragment', 'compute']). +combine('target_io', ['in', 'out']). +beginSubcases() +). +fn((t) => { + const code = generateShader({ + attribute: '@location(0)', + type: 'f32', + stage: t.params.target_stage, + io: t.params.target_io, + use_struct: t.params.use_struct }); -g.test('type') - .desc(`Test validation of user-defined IO types`) - .params(u => - u - .combine('use_struct', [true, false]) - .combine('type', new Set([...kValidLocationTypes, ...kInvalidLocationTypes])) - .beginSubcases() - ) - .beforeAllSubcases(t => { - if ( - t.params.type === 'f16' || - ((t.params.type.startsWith('mat') || t.params.type.startsWith('vec')) && - t.params.type.endsWith('h')) - ) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - let code = ''; + // Expect to fail for compute shaders or when used as a non-struct vertex output (since the + // position built-in must also be specified). + const expectation = + t.params.target_stage === 'fragment' || + t.params.target_stage === 'vertex' && (t.params.target_io === 'in' || t.params.use_struct); + t.expectCompileResult(expectation, code); +}); - if ( - t.params.type === 'f16' || - ((t.params.type.startsWith('mat') || t.params.type.startsWith('vec')) && - t.params.type.endsWith('h')) - ) { - code += 'enable f16;\n'; - } +g.test('type'). +desc(`Test validation of user-defined IO types`). +params((u) => +u. +combine('use_struct', [true, false]). +combine('type', new Set([...kValidLocationTypes, ...kInvalidLocationTypes])). +beginSubcases() +). +beforeAllSubcases((t) => { + if ( + t.params.type === 'f16' || + (t.params.type.startsWith('mat') || t.params.type.startsWith('vec')) && + t.params.type.endsWith('h')) + { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + let code = ''; - if (t.params.type === 'MyStruct') { - // Generate a struct that contains a valid type. - code += `struct MyStruct { + if ( + t.params.type === 'f16' || + (t.params.type.startsWith('mat') || t.params.type.startsWith('vec')) && + t.params.type.endsWith('h')) + { + code += 'enable f16;\n'; + } + + if (t.params.type === 'MyStruct') { + // Generate a struct that contains a valid type. + code += `struct MyStruct { value : f32, } `; - } - if (t.params.type === 'MyAlias') { - code += 'alias MyAlias = i32;\n'; - } + } + if (t.params.type === 'MyAlias') { + code += 'alias MyAlias = i32;\n'; + } - code += generateShader({ - attribute: '@location(0) @interpolate(flat)', - type: t.params.type, - stage: 'fragment', - io: 'in', - use_struct: t.params.use_struct, - }); - - t.expectCompileResult(kValidLocationTypes.has(t.params.type), code); + code += generateShader({ + attribute: '@location(0) @interpolate(flat)', + type: t.params.type, + stage: 'fragment', + io: 'in', + use_struct: t.params.use_struct }); -g.test('nesting') - .desc(`Test validation of nested user-defined IO`) - .params(u => - u - .combine('target_stage', ['vertex', 'fragment', '']) - .combine('target_io', ['in', 'out']) - .beginSubcases() - ) - .fn(t => { - let code = ''; + t.expectCompileResult(kValidLocationTypes.has(t.params.type), code); +}); - // Generate a struct that contains a valid type. - code += `struct Inner { +g.test('nesting'). +desc(`Test validation of nested user-defined IO`). +params((u) => +u. +combine('target_stage', ['vertex', 'fragment', '']). +combine('target_io', ['in', 'out']). +beginSubcases() +). +fn((t) => { + let code = ''; + + // Generate a struct that contains a valid type. + code += `struct Inner { @location(0) value : f32, } struct Outer { @@ -194,42 +193,42 @@ g.test('nesting') } `; - code += generateShader({ - attribute: '', - type: 'Outer', - stage: t.params.target_stage, - io: t.params.target_io, - use_struct: false, - }); - - // Expect to pass only if the struct is not used for entry point IO. - t.expectCompileResult(t.params.target_stage === '', code); + code += generateShader({ + attribute: '', + type: 'Outer', + stage: t.params.target_stage, + io: t.params.target_io, + use_struct: false }); -g.test('duplicates') - .desc(`Test that duplicated user-defined IO attributes are validated.`) - .params(u => - u - // Place two @location(0) attributes onto the entry point function. - // The function: - // - has two non-struct parameters (`p1` and `p2`) - // - has two struct parameters each with two members (`s1{a,b}` and `s2{a,b}`) - // - returns a struct with two members (`ra` and `rb`) - // By default, all of these user-defined IO variables will have unique location attributes. - .combine('first', ['p1', 's1a', 's2a', 'ra']) - .combine('second', ['p2', 's1b', 's2b', 'rb']) - .beginSubcases() - ) - .fn(t => { - const p1 = t.params.first === 'p1' ? '0' : '1'; - const p2 = t.params.second === 'p2' ? '0' : '2'; - const s1a = t.params.first === 's1a' ? '0' : '3'; - const s1b = t.params.second === 's1b' ? '0' : '4'; - const s2a = t.params.first === 's2a' ? '0' : '5'; - const s2b = t.params.second === 's2b' ? '0' : '6'; - const ra = t.params.first === 'ra' ? '0' : '1'; - const rb = t.params.second === 'rb' ? '0' : '2'; - const code = ` + // Expect to pass only if the struct is not used for entry point IO. + t.expectCompileResult(t.params.target_stage === '', code); +}); + +g.test('duplicates'). +desc(`Test that duplicated user-defined IO attributes are validated.`). +params((u) => +u +// Place two @location(0) attributes onto the entry point function. +// The function: +// - has two non-struct parameters (`p1` and `p2`) +// - has two struct parameters each with two members (`s1{a,b}` and `s2{a,b}`) +// - returns a struct with two members (`ra` and `rb`) +// By default, all of these user-defined IO variables will have unique location attributes. +.combine('first', ['p1', 's1a', 's2a', 'ra']). +combine('second', ['p2', 's1b', 's2b', 'rb']). +beginSubcases() +). +fn((t) => { + const p1 = t.params.first === 'p1' ? '0' : '1'; + const p2 = t.params.second === 'p2' ? '0' : '2'; + const s1a = t.params.first === 's1a' ? '0' : '3'; + const s1b = t.params.second === 's1b' ? '0' : '4'; + const s2a = t.params.first === 's2a' ? '0' : '5'; + const s2b = t.params.second === 's2b' ? '0' : '6'; + const ra = t.params.first === 'ra' ? '0' : '1'; + const rb = t.params.second === 'rb' ? '0' : '2'; + const code = ` struct S1 { @location(${s1a}) a : f32, @location(${s1b}) b : f32, @@ -252,106 +251,106 @@ g.test('duplicates') } `; - // The test should fail if both @location(0) attributes are on the input parameters or - // structures, or it they are both on the output struct. Otherwise it should pass. - const firstIsRet = t.params.first === 'ra'; - const secondIsRet = t.params.second === 'rb'; - const expectation = firstIsRet !== secondIsRet; - t.expectCompileResult(expectation, code); - }); + // The test should fail if both @location(0) attributes are on the input parameters or + // structures, or it they are both on the output struct. Otherwise it should pass. + const firstIsRet = t.params.first === 'ra'; + const secondIsRet = t.params.second === 'rb'; + const expectation = firstIsRet !== secondIsRet; + t.expectCompileResult(expectation, code); +}); const kValidationTests = { zero: { src: `@location(0)`, - pass: true, + pass: true }, one: { src: `@location(1)`, - pass: true, + pass: true }, extra_comma: { src: `@location(1,)`, - pass: true, + pass: true }, i32: { src: `@location(1i)`, - pass: true, + pass: true }, u32: { src: `@location(1u)`, - pass: true, + pass: true }, hex: { src: `@location(0x1)`, - pass: true, + pass: true }, const_expr: { src: `@location(a + b)`, - pass: true, + pass: true }, max: { src: `@location(2147483647)`, - pass: true, + pass: true }, newline: { src: '@\nlocation(1)', - pass: true, + pass: true }, comment: { src: `@/* comment */location(1)`, - pass: true, + pass: true }, misspelling: { src: `@mlocation(1)`, - pass: false, + pass: false }, no_parens: { src: `@location`, - pass: false, + pass: false }, empty_params: { src: `@location()`, - pass: false, + pass: false }, missing_left_paren: { src: `@location 1)`, - pass: false, + pass: false }, missing_right_paren: { src: `@location(1`, - pass: false, + pass: false }, extra_params: { src: `@location(1, 2)`, - pass: false, + pass: false }, f32: { src: `@location(1f)`, - pass: false, + pass: false }, f32_literal: { src: `@location(1.0)`, - pass: false, + pass: false }, negative: { src: `@location(-1)`, - pass: false, + pass: false }, override_expr: { src: `@location(z + y)`, - pass: false, + pass: false }, vec: { src: `@location(vec2(1,1))`, - pass: false, - }, + pass: false + } }; -g.test('validation') - .desc(`Test validation of location`) - .params(u => u.combine('attr', keysOf(kValidationTests))) - .fn(t => { - const code = ` +g.test('validation'). +desc(`Test validation of location`). +params((u) => u.combine('attr', keysOf(kValidationTests))). +fn((t) => { + const code = ` const a = 5; const b = 6; override z = 7; @@ -362,22 +361,22 @@ override y = 8; ) -> @builtin(position) vec4f { return vec4f(0); }`; - t.expectCompileResult(kValidationTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kValidationTests[t.params.attr].pass, code); +}); -g.test('location_fp16') - .desc(`Test validation of location with fp16`) - .params(u => u.combine('ext', ['', 'h'])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const code = ` +g.test('location_fp16'). +desc(`Test validation of location with fp16`). +params((u) => u.combine('ext', ['', 'h'])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const code = ` @vertex fn main( @location(1${t.params.ext}) res: f32 ) -> @builtin(position) vec4f { return vec4f(); }`; - t.expectCompileResult(t.params.ext === '', code); - }); + t.expectCompileResult(t.params.ext === '', code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/size.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/size.spec.js index 4a21f6b3b90..74caf19e6d8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/size.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/size.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for size`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for size`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,104 +9,104 @@ export const g = makeTestGroup(ShaderValidationTest); const kSizeTests = { valid: { src: `@size(4)`, - pass: true, + pass: true }, non_align_size: { src: `@size(5)`, - pass: true, + pass: true }, i32: { src: `@size(4i)`, - pass: true, + pass: true }, u32: { src: `@size(4u)`, - pass: true, + pass: true }, constant: { src: `@size(z)`, - pass: true, + pass: true }, trailing_comma: { src: `@size(4,)`, - pass: true, + pass: true }, hex: { src: `@size(0x4)`, - pass: true, + pass: true }, whitespace: { src: '@\nsize(4)', - pass: true, + pass: true }, comment: { src: `@/* comment */size(4)`, - pass: true, + pass: true }, large: { src: `@size(2147483647)`, - pass: true, + pass: true }, misspelling: { src: `@msize(4)`, - pass: false, + pass: false }, no_value: { src: `@size()`, - pass: false, + pass: false }, missing_left_paren: { src: `@size 4)`, - pass: false, + pass: false }, missing_right_paren: { src: `@size(4`, - pass: false, + pass: false }, missing_parens: { src: `@size`, - pass: false, + pass: false }, multiple_values: { src: `@size(4, 8)`, - pass: false, + pass: false }, override: { src: `@size(over)`, - pass: false, + pass: false }, zero: { src: `@size(0)`, - pass: false, + pass: false }, negative: { src: `@size(-4)`, - pass: false, + pass: false }, f32_literal: { src: `@size(4.0)`, - pass: false, + pass: false }, f32: { src: `@size(4f)`, - pass: false, + pass: false }, duplicate: { src: `@size(4) @size(8)`, - pass: false, + pass: false }, too_small: { src: `@size(1)`, - pass: false, - }, + pass: false + } }; -g.test('size') - .desc(`Test validation of ize`) - .params(u => u.combine('attr', keysOf(kSizeTests))) - .fn(t => { - const code = ` +g.test('size'). +desc(`Test validation of ize`). +params((u) => u.combine('attr', keysOf(kSizeTests))). +fn((t) => { + const code = ` override over: i32 = 4; const z: i32 = 4; @@ -121,17 +120,17 @@ var a: S; @compute fn main() { _ = a; }`; - t.expectCompileResult(kSizeTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kSizeTests[t.params.attr].pass, code); +}); -g.test('size_fp16') - .desc(`Test validation of size with fp16`) - .params(u => u.combine('ext', ['', 'h'])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const code = ` +g.test('size_fp16'). +desc(`Test validation of size with fp16`). +params((u) => u.combine('ext', ['', 'h'])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const code = ` struct S { @size(4${t.params.ext}) a: f32, } @@ -142,72 +141,72 @@ var a: S; @compute fn main() { _ = a; }`; - t.expectCompileResult(t.params.ext === '', code); - }); + t.expectCompileResult(t.params.ext === '', code); +}); const kNonStructTests = { control: { mod_src: ``, func_src: ``, size: 0, - pass: true, + pass: true }, struct: { mod_src: `struct S { a: f32 }`, func_src: ``, size: 4, - pass: false, + pass: false }, constant: { mod_src: `const a: f32 = 4.0;`, func_src: ``, size: 4, - pass: false, + pass: false }, vec: { mod_src: ``, func_src: `vec4`, size: 16, - pass: false, + pass: false }, mat: { mod_src: ``, func_src: `mat4x4`, size: 64, - pass: false, + pass: false }, array: { mod_src: ``, func_src: `array`, size: 16, - pass: false, + pass: false }, scalar: { mod_src: ``, func_src: `f32`, size: 4, - pass: false, - }, + pass: false + } }; -g.test('size_non_struct') - .desc(`Test validation of size outside of a struct`) - .params(u => u.combine('attr', keysOf(kNonStructTests))) - .fn(t => { - const data = kNonStructTests[t.params.attr]; - let code = ''; - if (data.mod_src !== '') { - code += `@size(${data.size}) ${data.mod_src}`; - } +g.test('size_non_struct'). +desc(`Test validation of size outside of a struct`). +params((u) => u.combine('attr', keysOf(kNonStructTests))). +fn((t) => { + const data = kNonStructTests[t.params.attr]; + let code = ''; + if (data.mod_src !== '') { + code += `@size(${data.size}) ${data.mod_src}`; + } - code += ` + code += ` @workgroup_size(1) @compute fn main() { `; - if (data.func_src !== '') { - code += `@size(${data.size}) var a: ${data.func_src};`; - } - code += '}'; + if (data.func_src !== '') { + code += `@size(${data.size}) var a: ${data.func_src};`; + } + code += '}'; - t.expectCompileResult(data.pass, code); - }); + t.expectCompileResult(data.pass, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/util.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/util.js index 8a9e85ae047..934016eaeab 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/util.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/util.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Generate an entry point that uses an entry point IO variable. * * @param {Object} params @@ -10,7 +10,18 @@ * @param params.io An "in|out" string specifying whether the entry point IO is an input or an output. * @param params.use_struct True to wrap the entry point IO in a struct. * @returns The generated shader code. - */ export function generateShader({ attribute, type, stage, io, use_struct }) { + */export function generateShader({ attribute, + type, + stage, + io, + use_struct + + + + + + +}) { let code = ''; if (use_struct) { @@ -72,77 +83,78 @@ * the given group, binding and name. */ + /** Helper function for emitting a resource declaration's group and binding attributes */ function groupAndBinding(group, binding) { return ( `${group !== undefined ? `@group(${group})` : '/* no group */'} ` + - `${binding !== undefined ? `@binding(${binding})` : '/* no binding */'}` - ); + `${binding !== undefined ? `@binding(${binding})` : '/* no binding */'}`); + } /** Helper function for emitting a resource declaration for the given type */ function basicEmitter(type) { - return (name, group, binding) => `${groupAndBinding(group, binding)} var ${name} : ${type};\n`; + return (name, group, binding) => + `${groupAndBinding(group, binding)} var ${name} : ${type};\n`; } /** Map of resource declaration name, to an emitter. */ export const kResourceEmitters = new Map([ - ['texture_1d', basicEmitter('texture_1d')], - ['texture_2d', basicEmitter('texture_2d')], - ['texture_2d_array', basicEmitter('texture_2d_array')], - ['texture_3d', basicEmitter('texture_3d')], - ['texture_cube', basicEmitter('texture_cube')], - ['texture_cube_array', basicEmitter('texture_cube_array')], - ['texture_multisampled_2d', basicEmitter('texture_multisampled_2d')], - ['texture_external', basicEmitter('texture_external')], - ['texture_storage_1d', basicEmitter('texture_storage_1d')], - ['texture_storage_2d', basicEmitter('texture_storage_2d')], - ['texture_storage_2d_array', basicEmitter('texture_storage_2d_array')], - ['texture_storage_3d', basicEmitter('texture_storage_3d')], - ['texture_depth_2d', basicEmitter('texture_depth_2d')], - ['texture_depth_2d_array', basicEmitter('texture_depth_2d_array')], - ['texture_depth_cube', basicEmitter('texture_depth_cube')], - ['texture_depth_cube_array', basicEmitter('texture_depth_cube_array')], - ['texture_depth_multisampled_2d', basicEmitter('texture_depth_multisampled_2d')], - ['sampler', basicEmitter('sampler')], - ['sampler_comparison', basicEmitter('sampler_comparison')], - [ - 'uniform', - (name, group, binding) => - `${groupAndBinding(group, binding)} var ${name} : array, 16>;\n`, - ], +['texture_1d', basicEmitter('texture_1d')], +['texture_2d', basicEmitter('texture_2d')], +['texture_2d_array', basicEmitter('texture_2d_array')], +['texture_3d', basicEmitter('texture_3d')], +['texture_cube', basicEmitter('texture_cube')], +['texture_cube_array', basicEmitter('texture_cube_array')], +['texture_multisampled_2d', basicEmitter('texture_multisampled_2d')], +['texture_external', basicEmitter('texture_external')], +['texture_storage_1d', basicEmitter('texture_storage_1d')], +['texture_storage_2d', basicEmitter('texture_storage_2d')], +['texture_storage_2d_array', basicEmitter('texture_storage_2d_array')], +['texture_storage_3d', basicEmitter('texture_storage_3d')], +['texture_depth_2d', basicEmitter('texture_depth_2d')], +['texture_depth_2d_array', basicEmitter('texture_depth_2d_array')], +['texture_depth_cube', basicEmitter('texture_depth_cube')], +['texture_depth_cube_array', basicEmitter('texture_depth_cube_array')], +['texture_depth_multisampled_2d', basicEmitter('texture_depth_multisampled_2d')], +['sampler', basicEmitter('sampler')], +['sampler_comparison', basicEmitter('sampler_comparison')], +[ +'uniform', +(name, group, binding) => +`${groupAndBinding(group, binding)} var ${name} : array, 16>;\n`], - [ - 'storage', - (name, group, binding) => - `${groupAndBinding(group, binding)} var ${name} : array, 16>;\n`, - ], -]); +[ +'storage', +(name, group, binding) => +`${groupAndBinding(group, binding)} var ${name} : array, 16>;\n`]] + +); /** All possible resource types for use as test permutations. */ export const kResourceKindsAll = [ - 'texture_1d', - 'texture_2d', - 'texture_2d_array', - 'texture_3d', - 'texture_cube', - 'texture_cube_array', - 'texture_multisampled_2d', - 'texture_external', - 'texture_storage_1d', - 'texture_storage_2d', - 'texture_storage_2d_array', - 'texture_storage_3d', - 'texture_depth_2d', - 'texture_depth_2d_array', - 'texture_depth_cube', - 'texture_depth_cube_array', - 'texture_depth_multisampled_2d', - 'sampler', - 'sampler_comparison', - 'uniform', - 'storage', -]; +'texture_1d', +'texture_2d', +'texture_2d_array', +'texture_3d', +'texture_cube', +'texture_cube_array', +'texture_multisampled_2d', +'texture_external', +'texture_storage_1d', +'texture_storage_2d', +'texture_storage_2d_array', +'texture_storage_3d', +'texture_depth_2d', +'texture_depth_2d_array', +'texture_depth_cube', +'texture_depth_cube_array', +'texture_depth_multisampled_2d', +'sampler', +'sampler_comparison', +'uniform', +'storage']; + /** A small selection of resource declaration names, which can be used in test permutations */ export const kResourceKindsA = ['storage', 'texture_2d', 'texture_external', 'uniform']; @@ -152,9 +164,10 @@ export const kResourceKindsB = ['texture_3d', 'texture_storage_1d', 'uniform']; /** An enumerator of shader stages */ + /** * declareEntrypoint emits the WGSL to declare an entry point with the given name, stage and body. - * The generated function will have an appropriate return type and return statement, so that @p body + * The generated function will have an appropriate return type and return statement, so that `body` * does not have to change between stage. * @param name the entry point function name * @param stage the entry point stage @@ -180,4 +193,4 @@ fn ${name}() { ${body} }`; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/workgroup_size.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/workgroup_size.spec.js index f40d3b4428b..4c8396bff08 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/workgroup_size.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_io/workgroup_size.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for workgroup_size`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for workgroup_size`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -10,273 +9,273 @@ export const g = makeTestGroup(ShaderValidationTest); const kWorkgroupSizeTests = { x_only_float: { src: `@workgroup_size(8f)`, - pass: false, + pass: false }, xy_only_float: { src: `@workgroup_size(8, 8f)`, - pass: false, + pass: false }, xyz_float: { src: `@workgroup_size(8, 8, 8f)`, - pass: false, + pass: false }, x_only_float_literal: { src: `@workgroup_size(8.0)`, - pass: false, + pass: false }, xy_only_float_literal: { src: `@workgroup_size(8, 8.0)`, - pass: false, + pass: false }, xyz_float_literal: { src: `@workgroup_size(8, 8, 8.0)`, - pass: false, + pass: false }, empty: { src: `@workgroup_size()`, - pass: false, + pass: false }, empty_x: { src: `@workgroup_size(, 8)`, - pass: false, + pass: false }, empty_y: { src: `@workgroup_size(8, , 8)`, - pass: false, + pass: false }, invalid_entry: { src: `@workgroup_size(let)`, - pass: false, + pass: false }, x_only_abstract: { src: `@workgroup_size(8)`, - pass: true, + pass: true }, xy_only_abstract: { src: `@workgroup_size(8, 8)`, - pass: true, + pass: true }, xyz_abstract: { src: `@workgroup_size(8, 8, 8)`, - pass: true, + pass: true }, x_only_unsigned: { src: `@workgroup_size(8u)`, - pass: true, + pass: true }, xy_only_unsigned: { src: `@workgroup_size(8u, 8u)`, - pass: true, + pass: true }, xyz_unsigned: { src: `@workgroup_size(8u, 8u, 8u)`, - pass: true, + pass: true }, x_only_signed: { src: `@workgroup_size(8i)`, - pass: true, + pass: true }, xy_only_signed: { src: `@workgroup_size(8i, 8i)`, - pass: true, + pass: true }, xyz_signed: { src: `@workgroup_size(8i, 8i, 8i)`, - pass: true, + pass: true }, x_only_hex: { src: `@workgroup_size(0x1)`, - pass: true, + pass: true }, xy_only_hex: { src: `@workgroup_size(0x1, 0x1)`, - pass: true, + pass: true }, xyz_hex: { src: `@workgroup_size(0x1, 0x1, 0x1)`, - pass: true, + pass: true }, const_expr: { src: `const a = 4; const b = 5; @workgroup_size(a, b, a + b)`, - pass: true, + pass: true }, override: { src: `@id(42) override block_width = 12u; @workgroup_size(block_width)`, - pass: true, + pass: true }, override_no_default: { src: `override block_width: i32; @workgroup_size(block_width)`, - pass: true, + pass: true }, trailing_comma_x: { src: `@workgroup_size(8, )`, - pass: true, + pass: true }, trailing_comma_y: { src: `@workgroup_size(8, 8,)`, - pass: true, + pass: true }, trailing_comma_z: { src: `@workgroup_size(8, 8, 8,)`, - pass: true, + pass: true }, override_expr: { src: `override a = 5; override b = 6; @workgroup_size(a, b, a + b)`, - pass: true, + pass: true }, // Mixed abstract is ok mixed_abstract_signed: { src: `@workgroup_size(8, 8i)`, - pass: true, + pass: true }, mixed_abstract_unsigned: { src: `@workgroup_size(8u, 8)`, - pass: true, + pass: true }, // Mixed signed and unsigned is not mixed_signed_unsigned: { src: `@workgroup_size(8i, 8i, 8u)`, - pass: false, + pass: false }, zero_x: { src: `@workgroup_size(0)`, - pass: false, + pass: false }, zero_y: { src: `@workgroup_size(8, 0)`, - pass: false, + pass: false }, zero_z: { src: `@workgroup_size(8, 8, 0)`, - pass: false, + pass: false }, negative_x: { src: `@workgroup_size(-8)`, - pass: false, + pass: false }, negative_y: { src: `@workgroup_size(8, -8)`, - pass: false, + pass: false }, negative_z: { src: `@workgroup_size(8, 8, -8)`, - pass: false, + pass: false }, max_values: { src: `@workgroup_size(256, 256, 64)`, - pass: true, + pass: true }, missing_left_paren: { src: `@workgroup_size 1, 2, 3)`, - pass: false, + pass: false }, missing_right_paren: { src: `@workgroup_size(1, 2, 3`, - pass: false, + pass: false }, misspelling: { src: `@aworkgroup_size(1)`, - pass: false, + pass: false }, no_params: { src: `@workgroup_size`, - pass: false, + pass: false }, multi_line: { src: '@\nworkgroup_size(1)', - pass: true, + pass: true }, comment: { src: `@/* comment */workgroup_size(1)`, - pass: true, + pass: true }, mix_ux: { src: `@workgroup_size(1u, 1i, 1i)`, - pass: false, + pass: false }, mix_uy: { src: `@workgroup_size(1i, 1u, 1i)`, - pass: false, + pass: false }, mix_uz: { src: `@workgroup_size(1i, 1i, 1u)`, - pass: false, + pass: false }, duplicate: { src: `@workgroup_size(1) @workgroup_size(2, 2, 2)`, - pass: false, - }, + pass: false + } }; -g.test('workgroup_size') - .desc(`Test validation of workgroup_size`) - .params(u => u.combine('attr', keysOf(kWorkgroupSizeTests))) - .fn(t => { - const code = ` +g.test('workgroup_size'). +desc(`Test validation of workgroup_size`). +params((u) => u.combine('attr', keysOf(kWorkgroupSizeTests))). +fn((t) => { + const code = ` ${kWorkgroupSizeTests[t.params.attr].src} @compute fn main() {}`; - t.expectCompileResult(kWorkgroupSizeTests[t.params.attr].pass, code); - }); + t.expectCompileResult(kWorkgroupSizeTests[t.params.attr].pass, code); +}); -g.test('workgroup_size_fragment_shader') - .desc(`Test validation of workgroup_size on a fragment shader`) - .fn(t => { - const code = ` +g.test('workgroup_size_fragment_shader'). +desc(`Test validation of workgroup_size on a fragment shader`). +fn((t) => { + const code = ` @workgroup_size(1) @fragment fn main(@builtin(position) pos: vec4) {}`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('workgroup_size_vertex_shader') - .desc(`Test validation of workgroup_size on a vertex shader`) - .fn(t => { - const code = ` +g.test('workgroup_size_vertex_shader'). +desc(`Test validation of workgroup_size on a vertex shader`). +fn((t) => { + const code = ` @workgroup_size(1) @vertex fn main() -> @builtin(position) vec4 {}`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('workgroup_size_function') - .desc(`Test validation of workgroup_size on user function`) - .fn(t => { - const code = ` +g.test('workgroup_size_function'). +desc(`Test validation of workgroup_size on user function`). +fn((t) => { + const code = ` @workgroup_size(1) fn my_func() {}`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('workgroup_size_const') - .desc(`Test validation of workgroup_size on a const`) - .fn(t => { - const code = ` +g.test('workgroup_size_const'). +desc(`Test validation of workgroup_size on a const`). +fn((t) => { + const code = ` @workgroup_size(1) const a : i32 = 4; fn my_func() {}`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('workgroup_size_var') - .desc(`Test validation of workgroup_size on a var`) - .fn(t => { - const code = ` +g.test('workgroup_size_var'). +desc(`Test validation of workgroup_size on a var`). +fn((t) => { + const code = ` @workgroup_size(1) @group(1) @binding(1) var a: i32; @@ -284,18 +283,18 @@ var a: i32; fn my_func() { _ = a; }`; - t.expectCompileResult(false, code); - }); + t.expectCompileResult(false, code); +}); -g.test('workgroup_size_fp16') - .desc(`Test validation of workgroup_size with fp16`) - .params(u => u.combine('ext', ['', 'h'])) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase('shader-f16'); - }) - .fn(t => { - const code = ` +g.test('workgroup_size_fp16'). +desc(`Test validation of workgroup_size with fp16`). +params((u) => u.combine('ext', ['', 'h'])). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase('shader-f16'); +}). +fn((t) => { + const code = ` @workgroup_size(1${t.params.ext}) @compute fn main() {}`; - t.expectCompileResult(t.params.ext === '', code); - }); + t.expectCompileResult(t.params.ext === '', code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_validation_test.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_validation_test.js index 5736b788fc5..efbfe6e0090 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_validation_test.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/shader_validation_test.js @@ -1,8 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { keysOf } from '../../../common/util/data_tables.js'; -import { ErrorWithExtra } from '../../../common/util/util.js'; -import { GPUTest } from '../../gpu_test.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { keysOf } from '../../../common/util/data_tables.js';import { ErrorWithExtra } from '../../../common/util/util.js';import { GPUTest } from '../../gpu_test.js'; /** * Base fixture for WGSL shader validation tests. @@ -32,12 +30,12 @@ export class ShaderValidationTest extends GPUTest { const compilationInfo = await shaderModule.getCompilationInfo(); // MAINTENANCE_TODO: Pretty-print error messages with source context. - const messagesLog = compilationInfo.messages - .map(m => `${m.lineNum}:${m.linePos}: ${m.type}: ${m.message}`) - .join('\n'); + const messagesLog = compilationInfo.messages. + map((m) => `${m.lineNum}:${m.linePos}: ${m.type}: ${m.message}`). + join('\n'); error.extra.compilationInfo = compilationInfo; - if (compilationInfo.messages.some(m => m.type === 'error')) { + if (compilationInfo.messages.some((m) => m.type === 'error')) { if (expectedResult) { error.message = `Unexpected compilationInfo 'error' message.\n` + messagesLog; this.rec.validationFailed(error); @@ -81,12 +79,12 @@ export class ShaderValidationTest extends GPUTest { const compilationInfo = await shaderModule.getCompilationInfo(); // MAINTENANCE_TODO: Pretty-print error messages with source context. - const messagesLog = compilationInfo.messages - .map(m => `${m.lineNum}:${m.linePos}: ${m.type}: ${m.message}`) - .join('\n'); + const messagesLog = compilationInfo.messages. + map((m) => `${m.lineNum}:${m.linePos}: ${m.type}: ${m.message}`). + join('\n'); error.extra.compilationInfo = compilationInfo; - if (compilationInfo.messages.some(m => m.type === 'warning')) { + if (compilationInfo.messages.some((m) => m.type === 'warning')) { if (expectWarning) { error.message = `No 'warning' message as expected.\n` + messagesLog; this.rec.debug(error); @@ -109,19 +107,28 @@ export class ShaderValidationTest extends GPUTest { /** * Add a test expectation for whether a createComputePipeline call succeeds or not. */ - expectPipelineResult(args) { + expectPipelineResult(args) + + + + + + + + + { const phonies = []; if (args.constants !== undefined) { - phonies.push(...keysOf(args.constants).map(c => `_ = ${c};`)); + phonies.push(...keysOf(args.constants).map((c) => `_ = ${c};`)); } if (args.reference !== undefined) { - phonies.push(...args.reference.map(c => `_ = ${c};`)); + phonies.push(...args.reference.map((c) => `_ = ${c};`)); } const code = - args.code + - ` + args.code + + ` @compute @workgroup_size(1) fn main() { ${phonies.join('\n')} @@ -141,7 +148,7 @@ fn main() { () => { this.device.createComputePipeline({ layout: 'auto', - compute: { module: shaderModule, entryPoint: 'main', constants: args.constants }, + compute: { module: shaderModule, entryPoint: 'main', constants: args.constants } }); }, !args.expectedResult @@ -157,7 +164,7 @@ fn main() { * ``` */ wrapInEntryPoint(code, enabledExtensions = []) { - const enableDirectives = enabledExtensions.map(x => `enable ${x};`).join('\n '); + const enableDirectives = enabledExtensions.map((x) => `enable ${x};`).join('\n '); return ` ${enableDirectives} @@ -167,4 +174,4 @@ fn main() { ${code} }`; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/alias.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/alias.spec.js index d5a6e3f57a7..012652df4ba 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/alias.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/alias.spec.js @@ -1,124 +1,123 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for type aliases -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('no_direct_recursion') - .desc('Test that direct recursion of type aliases is rejected') - .params(u => u.combine('target', ['i32', 'T'])) - .fn(t => { - const wgsl = `alias T = ${t.params.target};`; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); +g.test('no_direct_recursion'). +desc('Test that direct recursion of type aliases is rejected'). +params((u) => u.combine('target', ['i32', 'T'])). +fn((t) => { + const wgsl = `alias T = ${t.params.target};`; + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion') - .desc('Test that indirect recursion of type aliases is rejected') - .params(u => u.combine('target', ['i32', 'S'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion'). +desc('Test that indirect recursion of type aliases is rejected'). +params((u) => u.combine('target', ['i32', 'S'])). +fn((t) => { + const wgsl = ` alias S = T; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_vector_element') - .desc('Test that indirect recursion of type aliases via vector element types is rejected') - .params(u => u.combine('target', ['i32', 'V'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_vector_element'). +desc('Test that indirect recursion of type aliases via vector element types is rejected'). +params((u) => u.combine('target', ['i32', 'V'])). +fn((t) => { + const wgsl = ` alias V = vec4; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_matrix_element') - .desc('Test that indirect recursion of type aliases via matrix element types is rejected') - .params(u => u.combine('target', ['f32', 'M'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_matrix_element'). +desc('Test that indirect recursion of type aliases via matrix element types is rejected'). +params((u) => u.combine('target', ['f32', 'M'])). +fn((t) => { + const wgsl = ` alias M = mat4x4; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'f32', wgsl); - }); + t.expectCompileResult(t.params.target === 'f32', wgsl); +}); -g.test('no_indirect_recursion_via_array_element') - .desc('Test that indirect recursion of type aliases via array element types is rejected') - .params(u => u.combine('target', ['i32', 'A'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_array_element'). +desc('Test that indirect recursion of type aliases via array element types is rejected'). +params((u) => u.combine('target', ['i32', 'A'])). +fn((t) => { + const wgsl = ` alias A = array; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_array_size') - .desc('Test that indirect recursion of type aliases via array size expressions is rejected') - .params(u => u.combine('target', ['i32', 'A'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_array_size'). +desc('Test that indirect recursion of type aliases via array size expressions is rejected'). +params((u) => u.combine('target', ['i32', 'A'])). +fn((t) => { + const wgsl = ` alias A = array; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_atomic') - .desc('Test that indirect recursion of type aliases via atomic types is rejected') - .params(u => u.combine('target', ['i32', 'A'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_atomic'). +desc('Test that indirect recursion of type aliases via atomic types is rejected'). +params((u) => u.combine('target', ['i32', 'A'])). +fn((t) => { + const wgsl = ` alias A = atomic; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_ptr_store_type') - .desc('Test that indirect recursion of type aliases via pointer store types is rejected') - .params(u => u.combine('target', ['i32', 'P'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_ptr_store_type'). +desc('Test that indirect recursion of type aliases via pointer store types is rejected'). +params((u) => u.combine('target', ['i32', 'P'])). +fn((t) => { + const wgsl = ` alias P = ptr; alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_struct_member') - .desc('Test that indirect recursion of type aliases via struct members is rejected') - .params(u => u.combine('target', ['i32', 'S'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_struct_member'). +desc('Test that indirect recursion of type aliases via struct members is rejected'). +params((u) => u.combine('target', ['i32', 'S'])). +fn((t) => { + const wgsl = ` struct S { a : T } alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_struct_attribute') - .desc('Test that indirect recursion of type aliases via struct members is rejected') - .params(u => - u // - .combine('target', ['i32', 'S']) - .combine('attribute', ['align', 'location', 'size']) - ) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_struct_attribute'). +desc('Test that indirect recursion of type aliases via struct members is rejected'). +params((u) => +u // +.combine('target', ['i32', 'S']). +combine('attribute', ['align', 'location', 'size']) +). +fn((t) => { + const wgsl = ` struct S { @${t.params.attribute}(T(4)) a : f32 } alias T = ${t.params.target}; `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/struct.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/struct.spec.js index a4926ed1efd..80a60642321 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/struct.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/struct.spec.js @@ -1,55 +1,54 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for struct types -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); -g.test('no_direct_recursion') - .desc('Test that direct recursion of structures is rejected') - .params(u => u.combine('target', ['i32', 'S'])) - .fn(t => { - const wgsl = ` +g.test('no_direct_recursion'). +desc('Test that direct recursion of structures is rejected'). +params((u) => u.combine('target', ['i32', 'S'])). +fn((t) => { + const wgsl = ` struct S { a : ${t.params.target} }`; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion') - .desc('Test that indirect recursion of structures is rejected') - .params(u => u.combine('target', ['i32', 'S'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion'). +desc('Test that indirect recursion of structures is rejected'). +params((u) => u.combine('target', ['i32', 'S'])). +fn((t) => { + const wgsl = ` struct S { a : T } struct T { a : ${t.params.target} }`; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_array_element') - .desc('Test that indirect recursion of structures via array element types is rejected') - .params(u => u.combine('target', ['i32', 'S'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_array_element'). +desc('Test that indirect recursion of structures via array element types is rejected'). +params((u) => u.combine('target', ['i32', 'S'])). +fn((t) => { + const wgsl = ` struct S { a : array<${t.params.target}, 4> } `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); -g.test('no_indirect_recursion_via_array_size') - .desc('Test that indirect recursion of structures via array size expressions is rejected') - .params(u => u.combine('target', ['S1', 'S2'])) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_array_size'). +desc('Test that indirect recursion of structures via array size expressions is rejected'). +params((u) => u.combine('target', ['S1', 'S2'])). +fn((t) => { + const wgsl = ` struct S1 { a : i32, } @@ -58,18 +57,18 @@ struct S2 { b : array, } `; - t.expectCompileResult(t.params.target === 'S1', wgsl); - }); + t.expectCompileResult(t.params.target === 'S1', wgsl); +}); -g.test('no_indirect_recursion_via_struct_attribute') - .desc('Test that indirect recursion of structures via struct members is rejected') - .params(u => - u // - .combine('target', ['S1', 'S2']) - .combine('attribute', ['align', 'location', 'size']) - ) - .fn(t => { - const wgsl = ` +g.test('no_indirect_recursion_via_struct_attribute'). +desc('Test that indirect recursion of structures via struct members is rejected'). +params((u) => +u // +.combine('target', ['S1', 'S2']). +combine('attribute', ['align', 'location', 'size']) +). +fn((t) => { + const wgsl = ` struct S1 { a : i32 } @@ -77,17 +76,17 @@ struct S2 { @${t.params.attribute}(${t.params.target}(4).a) a : i32 } `; - t.expectCompileResult(t.params.target === 'S1', wgsl); - }); + t.expectCompileResult(t.params.target === 'S1', wgsl); +}); -g.test('no_indirect_recursion_via_struct_member_nested_in_alias') - .desc( - `Test that indirect recursion of structures via struct members is rejected when the member type +g.test('no_indirect_recursion_via_struct_member_nested_in_alias'). +desc( + `Test that indirect recursion of structures via struct members is rejected when the member type is an alias that contains the structure` - ) - .params(u => u.combine('target', ['i32', 'A'])) - .fn(t => { - const wgsl = ` +). +params((u) => u.combine('target', ['i32', 'A'])). +fn((t) => { + const wgsl = ` alias A = array; struct S1 { a : ${t.params.target} @@ -96,5 +95,5 @@ struct S2 { a : S1 } `; - t.expectCompileResult(t.params.target === 'i32', wgsl); - }); + t.expectCompileResult(t.params.target === 'i32', wgsl); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/vector.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/vector.spec.js index 74e687aab56..7002bde6240 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/vector.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/types/vector.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Validation tests for vector types -`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -59,21 +58,21 @@ const kCases = { vec_of_atomic: { wgsl: 'alias T = vec3>;', ok: false }, vec_of_matrix: { wgsl: 'alias T = vec3;', ok: false }, vec_of_vec: { wgsl: 'alias T = vec3;', ok: false }, - no_bool_shortform: { wgsl: 'const c : vec2b = vec2();', ok: false }, + no_bool_shortform: { wgsl: 'const c : vec2b = vec2();', ok: false } }; -g.test('vector') - .desc('Tests validation of vector types') - .params( - u => u.combine('case', keysOf(kCases)) // - ) - .beforeAllSubcases(t => { - const c = kCases[t.params.case]; - if (c.wgsl.indexOf('enable f16') >= 0) { - t.selectDeviceOrSkipTestCase('shader-f16'); - } - }) - .fn(t => { - const c = kCases[t.params.case]; - t.expectCompileResult(c.ok, c.wgsl); - }); +g.test('vector'). +desc('Tests validation of vector types'). +params( + (u) => u.combine('case', keysOf(kCases)) // +). +beforeAllSubcases((t) => { + const c = kCases[t.params.case]; + if (c.wgsl.indexOf('enable f16') >= 0) { + t.selectDeviceOrSkipTestCase('shader-f16'); + } +}). +fn((t) => { + const c = kCases[t.params.case]; + t.expectCompileResult(c.ok, c.wgsl); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/uniformity/uniformity.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/uniformity/uniformity.spec.js index 140cc26d475..a656f731f52 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/uniformity/uniformity.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/validation/uniformity/uniformity.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Validation tests for uniformity analysis`; -import { makeTestGroup } from '../../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Validation tests for uniformity analysis`;import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { keysOf } from '../../../../common/util/data_tables.js'; import { unreachable } from '../../../../common/util/util.js'; import { ShaderValidationTest } from '../shader_validation_test.js'; @@ -9,120 +8,120 @@ import { ShaderValidationTest } from '../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); const kCollectiveOps = [ - { op: 'textureSample', stage: 'fragment' }, - { op: 'textureSampleBias', stage: 'fragment' }, - { op: 'textureSampleCompare', stage: 'fragment' }, - { op: 'dpdx', stage: 'fragment' }, - { op: 'dpdxCoarse', stage: 'fragment' }, - { op: 'dpdxFine', stage: 'fragment' }, - { op: 'dpdy', stage: 'fragment' }, - { op: 'dpdyCoarse', stage: 'fragment' }, - { op: 'dpdyFine', stage: 'fragment' }, - { op: 'fwidth', stage: 'fragment' }, - { op: 'fwidthCoarse', stage: 'fragment' }, - { op: 'fwidthFine', stage: 'fragment' }, - { op: 'storageBarrier', stage: 'compute' }, - { op: 'workgroupBarrier', stage: 'compute' }, - { op: 'workgroupUniformLoad', stage: 'compute' }, -]; +{ op: 'textureSample', stage: 'fragment' }, +{ op: 'textureSampleBias', stage: 'fragment' }, +{ op: 'textureSampleCompare', stage: 'fragment' }, +{ op: 'dpdx', stage: 'fragment' }, +{ op: 'dpdxCoarse', stage: 'fragment' }, +{ op: 'dpdxFine', stage: 'fragment' }, +{ op: 'dpdy', stage: 'fragment' }, +{ op: 'dpdyCoarse', stage: 'fragment' }, +{ op: 'dpdyFine', stage: 'fragment' }, +{ op: 'fwidth', stage: 'fragment' }, +{ op: 'fwidthCoarse', stage: 'fragment' }, +{ op: 'fwidthFine', stage: 'fragment' }, +{ op: 'storageBarrier', stage: 'compute' }, +{ op: 'workgroupBarrier', stage: 'compute' }, +{ op: 'workgroupUniformLoad', stage: 'compute' }]; + const kConditions = [ - { cond: 'uniform_storage_ro', expectation: true }, - { cond: 'nonuniform_storage_ro', expectation: false }, - { cond: 'nonuniform_storage_rw', expectation: false }, - { cond: 'nonuniform_builtin', expectation: false }, - { cond: 'uniform_literal', expectation: true }, - { cond: 'uniform_const', expectation: true }, - { cond: 'uniform_override', expectation: true }, - { cond: 'uniform_let', expectation: true }, - { cond: 'nonuniform_let', expectation: false }, - { cond: 'uniform_or', expectation: true }, - { cond: 'nonuniform_or1', expectation: false }, - { cond: 'nonuniform_or2', expectation: false }, - { cond: 'uniform_and', expectation: true }, - { cond: 'nonuniform_and1', expectation: false }, - { cond: 'nonuniform_and2', expectation: false }, - { cond: 'uniform_func_var', expectation: true }, - { cond: 'nonuniform_func_var', expectation: false }, -]; +{ cond: 'uniform_storage_ro', expectation: true }, +{ cond: 'nonuniform_storage_ro', expectation: false }, +{ cond: 'nonuniform_storage_rw', expectation: false }, +{ cond: 'nonuniform_builtin', expectation: false }, +{ cond: 'uniform_literal', expectation: true }, +{ cond: 'uniform_const', expectation: true }, +{ cond: 'uniform_override', expectation: true }, +{ cond: 'uniform_let', expectation: true }, +{ cond: 'nonuniform_let', expectation: false }, +{ cond: 'uniform_or', expectation: true }, +{ cond: 'nonuniform_or1', expectation: false }, +{ cond: 'nonuniform_or2', expectation: false }, +{ cond: 'uniform_and', expectation: true }, +{ cond: 'nonuniform_and1', expectation: false }, +{ cond: 'nonuniform_and2', expectation: false }, +{ cond: 'uniform_func_var', expectation: true }, +{ cond: 'nonuniform_func_var', expectation: false }]; + function generateCondition(condition) { switch (condition) { - case 'uniform_storage_ro': { - return `ro_buffer[0] == 0`; - } - case 'nonuniform_storage_ro': { - return `ro_buffer[priv_var[0]] == 0`; - } - case 'nonuniform_storage_rw': { - return `rw_buffer[0] == 0`; - } - case 'nonuniform_builtin': { - return `p.x == 0`; - } - case 'uniform_literal': { - return `false`; - } - case 'uniform_const': { - return `c`; - } - case 'uniform_override': { - return `o == 0`; - } - case 'uniform_let': { - return `u_let == 0`; - } - case 'nonuniform_let': { - return `n_let == 0`; - } - case 'uniform_or': { - return `u_let == 0 || uniform_buffer.y > 1`; - } - case 'nonuniform_or1': { - return `u_let == 0 || n_let == 0`; - } - case 'nonuniform_or2': { - return `n_let == 0 || u_let == 0`; - } - case 'uniform_and': { - return `u_let == 0 && uniform_buffer.y > 1`; - } - case 'nonuniform_and1': { - return `u_let == 0 && n_let == 0`; - } - case 'nonuniform_and2': { - return `n_let == 0 && u_let == 0`; - } - case 'uniform_func_var': { - return `u_f == 0`; - } - case 'nonuniform_func_var': { - return `n_f == 0`; - } - default: { - unreachable(`Unhandled condition`); - } + case 'uniform_storage_ro':{ + return `ro_buffer[0] == 0`; + } + case 'nonuniform_storage_ro':{ + return `ro_buffer[priv_var[0]] == 0`; + } + case 'nonuniform_storage_rw':{ + return `rw_buffer[0] == 0`; + } + case 'nonuniform_builtin':{ + return `p.x == 0`; + } + case 'uniform_literal':{ + return `false`; + } + case 'uniform_const':{ + return `c`; + } + case 'uniform_override':{ + return `o == 0`; + } + case 'uniform_let':{ + return `u_let == 0`; + } + case 'nonuniform_let':{ + return `n_let == 0`; + } + case 'uniform_or':{ + return `u_let == 0 || uniform_buffer.y > 1`; + } + case 'nonuniform_or1':{ + return `u_let == 0 || n_let == 0`; + } + case 'nonuniform_or2':{ + return `n_let == 0 || u_let == 0`; + } + case 'uniform_and':{ + return `u_let == 0 && uniform_buffer.y > 1`; + } + case 'nonuniform_and1':{ + return `u_let == 0 && n_let == 0`; + } + case 'nonuniform_and2':{ + return `n_let == 0 && u_let == 0`; + } + case 'uniform_func_var':{ + return `u_f == 0`; + } + case 'nonuniform_func_var':{ + return `n_f == 0`; + } + default:{ + unreachable(`Unhandled condition`); + } } } function generateOp(op) { switch (op) { - case 'textureSample': { - return `let x = ${op}(tex, s, vec2(0,0));\n`; - } - case 'textureSampleBias': { - return `let x = ${op}(tex, s, vec2(0,0), 0);\n`; - } - case 'textureSampleCompare': { - return `let x = ${op}(tex_depth, s_comp, vec2(0,0), 0);\n`; - } + case 'textureSample':{ + return `let x = ${op}(tex, s, vec2(0,0));\n`; + } + case 'textureSampleBias':{ + return `let x = ${op}(tex, s, vec2(0,0), 0);\n`; + } + case 'textureSampleCompare':{ + return `let x = ${op}(tex_depth, s_comp, vec2(0,0), 0);\n`; + } case 'storageBarrier': - case 'workgroupBarrier': { - return `${op}();\n`; - } - case 'workgroupUniformLoad': { - return `let x = ${op}(&wg);`; - } + case 'workgroupBarrier':{ + return `${op}();\n`; + } + case 'workgroupUniformLoad':{ + return `let x = ${op}(&wg);`; + } case 'dpdx': case 'dpdxCoarse': case 'dpdxFine': @@ -131,64 +130,64 @@ function generateOp(op) { case 'dpdyFine': case 'fwidth': case 'fwidthCoarse': - case 'fwidthFine': { - return `let x = ${op}(0);\n`; - } - default: { - unreachable(`Unhandled op`); - } + case 'fwidthFine':{ + return `let x = ${op}(0);\n`; + } + default:{ + unreachable(`Unhandled op`); + } } } function generateConditionalStatement(statement, condition, op) { const code = ``; switch (statement) { - case 'if': { - return `if ${generateCondition(condition)} { + case 'if':{ + return `if ${generateCondition(condition)} { ${generateOp(op)}; } `; - } - case 'for': { - return `for (; ${generateCondition(condition)};) { + } + case 'for':{ + return `for (; ${generateCondition(condition)};) { ${generateOp(op)}; } `; - } - case 'while': { - return `while ${generateCondition(condition)} { + } + case 'while':{ + return `while ${generateCondition(condition)} { ${generateOp(op)}; } `; - } - case 'switch': { - return `switch u32(${generateCondition(condition)}) { + } + case 'switch':{ + return `switch u32(${generateCondition(condition)}) { case 0: { ${generateOp(op)}; } default: { } } `; - } - default: { - unreachable(`Unhandled statement`); - } + } + default:{ + unreachable(`Unhandled statement`); + } } return code; } -g.test('basics') - .desc(`Test collective operations in simple uniform or non-uniform control flow.`) - .params(u => - u - .combineWithParams(kCollectiveOps) - .combineWithParams(kConditions) - .combine('statement', ['if', 'for', 'while', 'switch']) - .beginSubcases() - ) - .fn(t => { - let code = ` +g.test('basics'). +desc(`Test collective operations in simple uniform or non-uniform control flow.`). +params((u) => +u. +combineWithParams(kCollectiveOps). +combineWithParams(kConditions). +combine('statement', ['if', 'for', 'while', 'switch']). +beginSubcases() +). +fn((t) => { + let code = ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var s_comp : sampler_comparison; @group(0) @binding(2) var tex : texture_2d; @@ -204,79 +203,78 @@ g.test('basics') override o : f32; `; - if (t.params.stage === 'compute') { - code += `var wg : f32;\n`; - code += ` @workgroup_size(16, 1, 1)`; - } - code += `@${t.params.stage}`; - code += `\nfn main(`; - if (t.params.stage === 'compute') { - code += `@builtin(global_invocation_id) p : vec3`; - } else { - code += `@builtin(position) p : vec4`; - } - code += `) { + if (t.params.stage === 'compute') { + code += `var wg : f32;\n`; + code += ` @workgroup_size(16, 1, 1)`; + } + code += `@${t.params.stage}`; + code += `\nfn main(`; + if (t.params.stage === 'compute') { + code += `@builtin(global_invocation_id) p : vec3`; + } else { + code += `@builtin(position) p : vec4`; + } + code += `) { let u_let = uniform_buffer.x; let n_let = rw_buffer[0]; var u_f = uniform_buffer.z; var n_f = rw_buffer[1]; `; - // Simple control statement containing the op. - code += generateConditionalStatement(t.params.statement, t.params.cond, t.params.op); + // Simple control statement containing the op. + code += generateConditionalStatement(t.params.statement, t.params.cond, t.params.op); - code += `\n}\n`; + code += `\n}\n`; - t.expectCompileResult(t.params.expectation, code); - }); + t.expectCompileResult(t.params.expectation, code); +}); const kFragmentBuiltinValues = [ - { - builtin: `position`, - type: `vec4`, - }, - { - builtin: `front_facing`, - type: `bool`, - }, - { - builtin: `sample_index`, - type: `u32`, - }, - { - builtin: `sample_mask`, - type: `u32`, - }, -]; +{ + builtin: `position`, + type: `vec4` +}, +{ + builtin: `front_facing`, + type: `bool` +}, +{ + builtin: `sample_index`, + type: `u32` +}, +{ + builtin: `sample_mask`, + type: `u32` +}]; -g.test('fragment_builtin_values') - .desc(`Test uniformity of fragment built-in values`) - .params(u => u.combineWithParams(kFragmentBuiltinValues).beginSubcases()) - .fn(t => { - let cond = ``; - switch (t.params.type) { - case `u32`: - case `i32`: - case `f32`: { + +g.test('fragment_builtin_values'). +desc(`Test uniformity of fragment built-in values`). +params((u) => u.combineWithParams(kFragmentBuiltinValues).beginSubcases()). +fn((t) => { + let cond = ``; + switch (t.params.type) { + case `u32`: + case `i32`: + case `f32`:{ cond = `p > 0`; break; } - case `vec4`: - case `vec4`: - case `vec4`: { + case `vec4`: + case `vec4`: + case `vec4`:{ cond = `p.x > 0`; break; } - case `bool`: { + case `bool`:{ cond = `p`; break; } - default: { + default:{ unreachable(`Unhandled type`); } - } - - const code = ` + } + const code = ` @group(0) @binding(0) var s : sampler; @group(0) @binding(1) var tex : texture_2d; @@ -288,66 +286,65 @@ fn main(@builtin(${t.params.builtin}) p : ${t.params.type}) { } `; - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - t.expectCompileResult(false, code); - }); + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + t.expectCompileResult(false, code); +}); const kComputeBuiltinValues = [ - { - builtin: `local_invocation_id`, - type: `vec3`, - uniform: false, - }, - { - builtin: `local_invocation_index`, - type: `u32`, - uniform: false, - }, - { - builtin: `global_invocation_id`, - type: `vec3`, - uniform: false, - }, - { - builtin: `workgroup_id`, - type: `vec3`, - uniform: true, - }, - { - builtin: `num_workgroups`, - type: `vec3`, - uniform: true, - }, -]; +{ + builtin: `local_invocation_id`, + type: `vec3`, + uniform: false +}, +{ + builtin: `local_invocation_index`, + type: `u32`, + uniform: false +}, +{ + builtin: `global_invocation_id`, + type: `vec3`, + uniform: false +}, +{ + builtin: `workgroup_id`, + type: `vec3`, + uniform: true +}, +{ + builtin: `num_workgroups`, + type: `vec3`, + uniform: true +}]; -g.test('compute_builtin_values') - .desc(`Test uniformity of compute built-in values`) - .params(u => u.combineWithParams(kComputeBuiltinValues).beginSubcases()) - .fn(t => { - let cond = ``; - switch (t.params.type) { - case `u32`: - case `i32`: - case `f32`: { + +g.test('compute_builtin_values'). +desc(`Test uniformity of compute built-in values`). +params((u) => u.combineWithParams(kComputeBuiltinValues).beginSubcases()). +fn((t) => { + let cond = ``; + switch (t.params.type) { + case `u32`: + case `i32`: + case `f32`:{ cond = `p > 0`; break; } - case `vec3`: - case `vec3`: - case `vec3`: { + case `vec3`: + case `vec3`: + case `vec3`:{ cond = `p.x > 0`; break; } - case `bool`: { + case `bool`:{ cond = `p`; break; } - default: { + default:{ unreachable(`Unhandled type`); } - } - - const code = ` + } + const code = ` @compute @workgroup_size(16,1,1) fn main(@builtin(${t.params.builtin}) p : ${t.params.type}) { if ${cond} { @@ -356,8 +353,8 @@ fn main(@builtin(${t.params.builtin}) p : ${t.params.type}) { } `; - t.expectCompileResult(t.params.uniform, code); - }); + t.expectCompileResult(t.params.uniform, code); +}); function generatePointerCheck(check) { if (check === `address`) { @@ -374,17 +371,17 @@ const kPointerCases = { address_uniform_literal: { code: `let ptr = &wg_array[0];`, check: `address`, - uniform: true, + uniform: true }, address_uniform_value: { code: `let ptr = &wg_array[uniform_value];`, check: `address`, - uniform: true, + uniform: true }, address_nonuniform_value: { code: `let ptr = &wg_array[nonuniform_value];`, check: `address`, - uniform: false, + uniform: false }, address_uniform_chain: { code: `let p1 = &wg_struct.x; @@ -392,7 +389,7 @@ const kPointerCases = { let p3 = &(*p2).x; let ptr = &(*p3)[uniform_value];`, check: `address`, - uniform: true, + uniform: true }, address_nonuniform_chain1: { code: `let p1 = &wg_struct.x; @@ -400,7 +397,7 @@ const kPointerCases = { let p3 = &(*p2).x; let ptr = &(*p3)[uniform_value];`, check: `address`, - uniform: false, + uniform: false }, address_nonuniform_chain2: { code: `let p1 = &wg_struct.x; @@ -408,18 +405,18 @@ const kPointerCases = { let p3 = &(*p2).x; let ptr = &(*p3)[nonuniform_value];`, check: `address`, - uniform: false, + uniform: false }, wg_uniform_load_is_uniform: { code: `let test_val = workgroupUniformLoad(&wg_scalar);`, check: `contents`, - uniform: true, + uniform: true }, contents_scalar_uniform1: { code: `let ptr = &func_scalar; let test_val = *ptr;`, check: `contents`, - uniform: true, + uniform: true }, contents_scalar_uniform2: { code: `func_scalar = nonuniform_value; @@ -427,7 +424,7 @@ const kPointerCases = { func_scalar = 0; let test_val = *ptr;`, check: `contents`, - uniform: true, + uniform: true }, contents_scalar_uniform3: { code: `let ptr = &func_scalar; @@ -435,28 +432,28 @@ const kPointerCases = { func_scalar = uniform_value; let test_val = *ptr;`, check: `contents`, - uniform: true, + uniform: true }, contents_scalar_nonuniform1: { code: `func_scalar = nonuniform_value; let ptr = &func_scalar; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_scalar_nonuniform2: { code: `let ptr = &func_scalar; *ptr = nonuniform_value; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_scalar_alias_uniform: { code: `let p = &func_scalar; let ptr = p; let test_val = *ptr;`, check: `contents`, - uniform: true, + uniform: true }, contents_scalar_alias_nonuniform1: { code: `func_scalar = nonuniform_value; @@ -464,7 +461,7 @@ const kPointerCases = { let ptr = p; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_scalar_alias_nonuniform2: { code: `let p = &func_scalar; @@ -472,7 +469,7 @@ const kPointerCases = { let ptr = p; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_scalar_alias_nonuniform3: { code: `let p = &func_scalar; @@ -480,69 +477,69 @@ const kPointerCases = { *p = nonuniform_value; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_scalar_alias_nonuniform4: { code: `let p = &func_scalar; func_scalar = nonuniform_value; let test_val = *p;`, check: `contents`, - uniform: false, + uniform: false }, contents_scalar_alias_nonuniform5: { code: `let p = &func_scalar; *p = nonuniform_value; let test_val = func_scalar;`, check: `contents`, - uniform: false, + uniform: false }, contents_array_uniform_index: { code: `let ptr = &func_array[uniform_value]; let test_val = *ptr;`, check: `contents`, - uniform: true, + uniform: true }, contents_array_nonuniform_index1: { code: `let ptr = &func_array[nonuniform_value]; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_array_nonuniform_index2: { code: `let ptr = &func_array[lid.x]; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_array_nonuniform_index3: { code: `let ptr = &func_array[gid.x]; let test_val = *ptr;`, check: `contents`, - uniform: false, + uniform: false }, contents_struct_uniform: { code: `let p1 = &func_struct.x[uniform_value].x[uniform_value].x[uniform_value]; let test_val = *p1;`, check: `contents`, - uniform: true, + uniform: true }, contents_struct_nonuniform1: { code: `let p1 = &func_struct.x[nonuniform_value].x[uniform_value].x[uniform_value]; let test_val = *p1;`, check: `contents`, - uniform: false, + uniform: false }, contents_struct_nonuniform2: { code: `let p1 = &func_struct.x[uniform_value].x[gid.x].x[uniform_value]; let test_val = *p1;`, check: `contents`, - uniform: false, + uniform: false }, contents_struct_nonuniform3: { code: `let p1 = &func_struct.x[uniform_value].x[uniform_value].x[lid.y]; let test_val = *p1;`, check: `contents`, - uniform: false, + uniform: false }, contents_struct_chain_uniform: { code: `let p1 = &func_struct.x; @@ -553,7 +550,7 @@ const kPointerCases = { let p6 = &(*p5)[uniform_value]; let test_val = *p6;`, check: `contents`, - uniform: true, + uniform: true }, contents_struct_chain_nonuniform1: { code: `let p1 = &func_struct.x; @@ -564,7 +561,7 @@ const kPointerCases = { let p6 = &(*p5)[uniform_value]; let test_val = *p6;`, check: `contents`, - uniform: false, + uniform: false }, contents_struct_chain_nonuniform2: { code: `let p1 = &func_struct.x; @@ -575,7 +572,7 @@ const kPointerCases = { let p6 = &(*p5)[uniform_value]; let test_val = *p6;`, check: `contents`, - uniform: false, + uniform: false }, contents_struct_chain_nonuniform3: { code: `let p1 = &func_struct.x; @@ -586,16 +583,16 @@ const kPointerCases = { let p6 = &(*p5)[lid.y]; let test_val = *p6;`, check: `contents`, - uniform: false, - }, + uniform: false + } }; -g.test('pointers') - .desc(`Test pointer uniformity (contents and addresses)`) - .params(u => u.combine('case', keysOf(kPointerCases)).beginSubcases()) - .fn(t => { - const testcase = kPointerCases[t.params.case]; - const code = ` +g.test('pointers'). +desc(`Test pointer uniformity (contents and addresses)`). +params((u) => u.combine('case', keysOf(kPointerCases)).beginSubcases()). +fn((t) => { + const testcase = kPointerCases[t.params.case]; + const code = ` var wg_scalar : u32; var wg_array : array; @@ -625,17 +622,17 @@ fn main(@builtin(local_invocation_id) lid : vec3, ${testcase.code} `; - const with_check = - code + - ` + const with_check = + code + + ` ${generatePointerCheck(testcase.check)} }`; - if (!testcase.uniform) { - const without_check = code + `}\n`; - t.expectCompileResult(true, without_check); - } - t.expectCompileResult(testcase.uniform, with_check); - }); + if (!testcase.uniform) { + const without_check = code + `}\n`; + t.expectCompileResult(true, without_check); + } + t.expectCompileResult(testcase.uniform, with_check); +}); function expectedUniformity(uniform, init) { if (uniform === `always`) { @@ -654,35 +651,35 @@ const kFuncVarCases = { typedecl: ``, assignment: ``, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, simple_uniform: { typename: `u32`, typedecl: ``, assignment: `x = uniform_value[0];`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, simple_nonuniform: { typename: `u32`, typedecl: ``, assignment: `x = nonuniform_value[0];`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, compound_assign_uniform: { typename: `u32`, typedecl: ``, assignment: `x += uniform_value[0];`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, compound_assign_nonuniform: { typename: `u32`, typedecl: ``, assignment: `x -= nonuniform_value[0];`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, unreachable_uniform: { typename: `u32`, @@ -692,7 +689,7 @@ const kFuncVarCases = { x = uniform_value[0]; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, unreachable_nonuniform: { typename: `u32`, @@ -702,7 +699,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, if_no_else_uniform: { typename: `u32`, @@ -711,7 +708,7 @@ const kFuncVarCases = { x = uniform_value[0]; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, if_no_else_nonuniform: { typename: `u32`, @@ -720,7 +717,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, if_no_then_uniform: { typename: `u32`, @@ -730,7 +727,7 @@ const kFuncVarCases = { x = uniform_value[0]; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, if_no_then_nonuniform: { typename: `u32`, @@ -740,7 +737,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, if_else_uniform: { typename: `u32`, @@ -751,7 +748,7 @@ const kFuncVarCases = { x = uniform_value[1]; }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, if_else_nonuniform: { typename: `u32`, @@ -762,7 +759,7 @@ const kFuncVarCases = { x = nonuniform_value[1]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, if_else_split: { typename: `u32`, @@ -773,7 +770,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, if_unreachable_else_none: { typename: `u32`, @@ -783,7 +780,7 @@ const kFuncVarCases = { return; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, if_unreachable_else_uniform: { typename: `u32`, @@ -794,7 +791,7 @@ const kFuncVarCases = { return; }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, if_unreachable_else_nonuniform: { typename: `u32`, @@ -805,7 +802,7 @@ const kFuncVarCases = { return; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, if_unreachable_then_none: { typename: `u32`, @@ -814,7 +811,7 @@ const kFuncVarCases = { return; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, if_unreachable_then_uniform: { typename: `u32`, @@ -825,7 +822,7 @@ const kFuncVarCases = { x = uniform_value[0]; }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, if_unreachable_then_nonuniform: { typename: `u32`, @@ -836,7 +833,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, if_nonescaping_nonuniform: { typename: `u32`, @@ -846,7 +843,7 @@ const kFuncVarCases = { return; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, loop_body_depends_on_continuing_uniform: { typename: `u32`, @@ -861,7 +858,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `init`, + uniform: `init` }, loop_body_depends_on_continuing_nonuniform: { typename: `u32`, @@ -876,7 +873,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `never`, + uniform: `never` }, loop_body_uniform: { typename: `u32`, @@ -888,7 +885,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, loop_body_nonuniform: { typename: `u32`, @@ -900,7 +897,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, loop_body_nonuniform_cond: { typename: `u32`, @@ -913,7 +910,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, loop_unreachable_continuing: { typename: `u32`, @@ -925,7 +922,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, loop_continuing_from_body_uniform: { typename: `u32`, @@ -940,7 +937,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `always`, + uniform: `always` }, loop_continuing_from_body_nonuniform: { typename: `u32`, @@ -955,7 +952,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `never`, + uniform: `never` }, loop_continuing_from_body_split1: { typename: `u32`, @@ -972,7 +969,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `init`, + uniform: `init` }, loop_continuing_from_body_split2: { typename: `u32`, @@ -989,7 +986,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `never`, + uniform: `never` }, loop_continuing_from_body_split3: { typename: `u32`, @@ -1008,7 +1005,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `always`, + uniform: `always` }, loop_continuing_from_body_split4: { typename: `u32`, @@ -1027,7 +1024,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `never`, + uniform: `never` }, loop_continuing_from_body_split5: { typename: `u32`, @@ -1047,7 +1044,7 @@ const kFuncVarCases = { }`, cond: `true`, // override the standard check // The analysis doesn't recognize that uniform_value[0] is assignment on all paths. - uniform: `never`, + uniform: `never` }, loop_in_loop_with_continue_uniform: { typename: `u32`, @@ -1069,7 +1066,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `always`, + uniform: `always` }, loop_in_loop_with_continue_nonuniform: { typename: `u32`, @@ -1091,7 +1088,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override the standard check - uniform: `never`, + uniform: `never` }, after_loop_with_uniform_break_uniform: { typename: `u32`, @@ -1103,7 +1100,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, after_loop_with_uniform_break_nonuniform: { typename: `u32`, @@ -1115,7 +1112,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, after_loop_with_nonuniform_break: { typename: `u32`, @@ -1127,7 +1124,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, after_loop_with_uniform_breaks: { typename: `u32`, @@ -1141,7 +1138,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, switch_uniform_case: { typename: `u32`, @@ -1156,7 +1153,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override default check - uniform: `init`, + uniform: `init` }, switch_nonuniform_case: { typename: `u32`, @@ -1171,7 +1168,7 @@ const kFuncVarCases = { } }`, cond: `true`, // override default check - uniform: `never`, + uniform: `never` }, after_switch_all_uniform: { typename: `u32`, @@ -1188,7 +1185,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, after_switch_some_assign: { typename: `u32`, @@ -1204,7 +1201,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, after_switch_nonuniform: { typename: `u32`, @@ -1221,7 +1218,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, after_switch_with_break_nonuniform1: { typename: `u32`, @@ -1236,7 +1233,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, after_switch_with_break_nonuniform2: { typename: `u32`, @@ -1251,7 +1248,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, for_loop_uniform_body: { typename: `u32`, @@ -1260,7 +1257,7 @@ const kFuncVarCases = { x = uniform_value[0]; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, for_loop_nonuniform_body: { typename: `u32`, @@ -1269,7 +1266,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, for_loop_uniform_body_no_condition: { typename: `u32`, @@ -1281,7 +1278,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, for_loop_nonuniform_body_no_condition: { typename: `u32`, @@ -1293,7 +1290,7 @@ const kFuncVarCases = { } }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, for_loop_uniform_increment: { typename: `u32`, @@ -1301,7 +1298,7 @@ const kFuncVarCases = { assignment: `for (; uniform_cond; x += uniform_value[0]) { }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, for_loop_nonuniform_increment: { typename: `u32`, @@ -1309,7 +1306,7 @@ const kFuncVarCases = { assignment: `for (; uniform_cond; x += nonuniform_value[0]) { }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, for_loop_uniform_init: { typename: `u32`, @@ -1317,7 +1314,7 @@ const kFuncVarCases = { assignment: `for (x = uniform_value[0]; uniform_cond; ) { }`, cond: `x > 0`, - uniform: `always`, + uniform: `always` }, for_loop_nonuniform_init: { typename: `u32`, @@ -1325,7 +1322,7 @@ const kFuncVarCases = { assignment: `for (x = nonuniform_value[0]; uniform_cond;) { }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, while_loop_uniform_body: { typename: `u32`, @@ -1334,7 +1331,7 @@ const kFuncVarCases = { x = uniform_value[0]; }`, cond: `x > 0`, - uniform: `init`, + uniform: `init` }, while_loop_nonuniform_body: { typename: `u32`, @@ -1343,7 +1340,7 @@ const kFuncVarCases = { x = nonuniform_value[0]; }`, cond: `x > 0`, - uniform: `never`, + uniform: `never` }, partial_assignment_uniform: { typename: `block`, @@ -1353,7 +1350,7 @@ const kFuncVarCases = { }`, assignment: `x.x = uniform_value[0].x;`, cond: `x.x > 0`, - uniform: `init`, + uniform: `init` }, partial_assignment_nonuniform: { typename: `block`, @@ -1363,7 +1360,7 @@ const kFuncVarCases = { }`, assignment: `x.x = nonuniform_value[0].x;`, cond: `x.x > 0`, - uniform: `never`, + uniform: `never` }, partial_assignment_all_members_uniform: { typename: `block`, @@ -1374,7 +1371,7 @@ const kFuncVarCases = { assignment: `x.x = uniform_value[0].x; x.y = uniform_value[1].y;`, cond: `x.x > 0`, - uniform: `init`, + uniform: `init` }, partial_assignment_all_members_nonuniform: { typename: `block`, @@ -1385,7 +1382,7 @@ const kFuncVarCases = { assignment: `x.x = nonuniform_value[0].x; x.y = uniform_value[0].x;`, cond: `x.x > 0`, - uniform: `never`, + uniform: `never` }, partial_assignment_single_element_struct_uniform: { typename: `block`, @@ -1394,7 +1391,7 @@ const kFuncVarCases = { }`, assignment: `x.x = uniform_value[0].x;`, cond: `x.x > 0`, - uniform: `init`, + uniform: `init` }, partial_assignment_single_element_struct_nonuniform: { typename: `block`, @@ -1403,21 +1400,21 @@ const kFuncVarCases = { }`, assignment: `x.x = nonuniform_value[0].x;`, cond: `x.x > 0`, - uniform: `never`, + uniform: `never` }, partial_assignment_single_element_array_uniform: { typename: `array`, typedecl: ``, assignment: `x[0] = uniform_value[0][0];`, cond: `x[0] > 0`, - uniform: `init`, + uniform: `init` }, partial_assignment_single_element_array_nonuniform: { typename: `array`, typedecl: ``, assignment: `x[0] = nonuniform_value[0][0];`, cond: `x[0] > 0`, - uniform: `never`, + uniform: `never` }, nested1: { typename: `block`, @@ -1438,7 +1435,7 @@ const kFuncVarCases = { } }`, cond: `x.x > 0`, - uniform: `init`, + uniform: `init` }, nested2: { typename: `block`, @@ -1459,22 +1456,22 @@ const kFuncVarCases = { } }`, cond: `x.x > 0`, - uniform: `never`, - }, + uniform: `never` + } }; const kVarInit = { no_init: ``, uniform: `= uniform_value[3];`, - nonuniform: `= nonuniform_value[3];`, + nonuniform: `= nonuniform_value[3];` }; -g.test('function_variables') - .desc(`Test uniformity of function variables`) - .params(u => u.combine('case', keysOf(kFuncVarCases)).combine('init', keysOf(kVarInit))) - .fn(t => { - const func_case = kFuncVarCases[t.params.case]; - const code = ` +g.test('function_variables'). +desc(`Test uniformity of function variables`). +params((u) => u.combine('case', keysOf(kFuncVarCases)).combine('init', keysOf(kVarInit))). +fn((t) => { + const func_case = kFuncVarCases[t.params.case]; + const code = ` ${func_case.typedecl} @group(0) @binding(0) @@ -1504,12 +1501,12 @@ fn main() { } `; - const result = expectedUniformity(func_case.uniform, t.params.init); - if (!result) { - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - } - t.expectCompileResult(result, code); - }); + const result = expectedUniformity(func_case.uniform, t.params.init); + if (!result) { + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + } + t.expectCompileResult(result, code); +}); const kShortCircuitExpressionCases = { or_uniform_uniform: { @@ -1519,7 +1516,7 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: true, + uniform: true }, or_uniform_nonuniform: { code: ` @@ -1528,7 +1525,7 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: false, + uniform: false }, or_nonuniform_uniform: { code: ` @@ -1537,7 +1534,7 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: false, + uniform: false }, or_nonuniform_nonuniform: { code: ` @@ -1546,19 +1543,19 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: false, + uniform: false }, or_uniform_first_nonuniform: { code: ` let x = textureSample(t, s, vec2f(0,0)).x == 0 || nonuniform_cond; `, - uniform: true, + uniform: true }, or_uniform_second_nonuniform: { code: ` let x = nonuniform_cond || textureSample(t, s, vec2f(0,0)).x == 0; `, - uniform: false, + uniform: false }, and_uniform_uniform: { code: ` @@ -1567,7 +1564,7 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: true, + uniform: true }, and_uniform_nonuniform: { code: ` @@ -1576,7 +1573,7 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: false, + uniform: false }, and_nonuniform_uniform: { code: ` @@ -1585,7 +1582,7 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: false, + uniform: false }, and_nonuniform_nonuniform: { code: ` @@ -1594,20 +1591,20 @@ const kShortCircuitExpressionCases = { let tmp = textureSample(t, s, vec2f(0,0)); } `, - uniform: false, + uniform: false }, and_uniform_first_nonuniform: { code: ` let x = textureSample(t, s, vec2f(0,0)).x == 0 && nonuniform_cond; `, - uniform: true, + uniform: true }, and_uniform_second_nonuniform: { code: ` let x = nonuniform_cond && textureSample(t, s, vec2f(0,0)).x == 0; `, - uniform: false, - }, + uniform: false + } }; const kPointerParamCases = { @@ -1618,7 +1615,7 @@ const kPointerParamCases = { call: `var x = uniform_values[0]; let call = foo(&x);`, cond: `x > 0`, - uniform: true, + uniform: true }, pointer_nonuniform_passthrough_value: { function: `fn foo(p : ptr) -> u32 { @@ -1627,7 +1624,7 @@ const kPointerParamCases = { call: `var x = uniform_values[0]; let call = foo(&x);`, cond: `x > 0`, - uniform: true, + uniform: true }, pointer_store_uniform_value: { function: `fn foo(p : ptr) { @@ -1636,7 +1633,7 @@ const kPointerParamCases = { call: `var x = nonuniform_values[0]; foo(&x);`, cond: `x > 0`, - uniform: true, + uniform: true }, pointer_store_nonuniform_value: { function: `fn foo(p : ptr) { @@ -1645,7 +1642,7 @@ const kPointerParamCases = { call: `var x = uniform_values[0]; foo(&x);`, cond: `x > 0`, - uniform: false, + uniform: false }, pointer_depends_on_nonpointer_param_uniform: { function: `fn foo(p : ptr, x : u32) { @@ -1654,7 +1651,7 @@ const kPointerParamCases = { call: `var x = nonuniform_values[0]; foo(&x, uniform_values[0]);`, cond: `x > 0`, - uniform: true, + uniform: true }, pointer_depends_on_nonpointer_param_nonuniform: { function: `fn foo(p : ptr, x : u32) { @@ -1663,7 +1660,7 @@ const kPointerParamCases = { call: `var x = uniform_values[0]; foo(&x, nonuniform_values[0]);`, cond: `x > 0`, - uniform: false, + uniform: false }, pointer_depends_on_pointer_param_uniform: { function: `fn foo(p : ptr, q : ptr) { @@ -1673,7 +1670,7 @@ const kPointerParamCases = { var y = uniform_values[0]; foo(&x, &y);`, cond: `x > 0`, - uniform: true, + uniform: true }, pointer_depends_on_pointer_param_nonuniform: { function: `fn foo(p : ptr, q : ptr) { @@ -1683,7 +1680,7 @@ const kPointerParamCases = { var y = nonuniform_values[0]; foo(&x, &y);`, cond: `x > 0`, - uniform: false, + uniform: false }, pointer_codependent1: { function: `fn foo(p : ptr, q : ptr) { @@ -1698,7 +1695,7 @@ const kPointerParamCases = { foo(&x, &y); let a = x + y;`, cond: `a > 0`, - uniform: true, + uniform: true }, pointer_codependent2: { function: `fn foo(p : ptr, q : ptr) { @@ -1713,7 +1710,7 @@ const kPointerParamCases = { foo(&x, &y); let a = x + y;`, cond: `a > 0`, - uniform: false, + uniform: false }, pointer_codependent3: { function: `fn foo(p : ptr, q : ptr) { @@ -1728,7 +1725,7 @@ const kPointerParamCases = { foo(&x, &y); let a = x + y;`, cond: `a > 0`, - uniform: false, + uniform: false }, pointer_codependent4: { function: `fn foo(p : ptr, q : ptr) { @@ -1743,7 +1740,7 @@ const kPointerParamCases = { foo(&x, &y); let a = x + y;`, cond: `a > 0`, - uniform: false, + uniform: false }, uniform_param_uniform_assignment: { function: `fn foo(p : ptr>, idx : u32) { @@ -1752,7 +1749,7 @@ const kPointerParamCases = { call: `var x = array(uniform_values[0], uniform_values[1]); foo(&x, uniform_values[3]);`, cond: `x[0] > 0`, - uniform: true, + uniform: true }, uniform_param_nonuniform_assignment: { function: `fn foo(p : ptr>, idx : u32) { @@ -1761,7 +1758,7 @@ const kPointerParamCases = { call: `var x = array(uniform_values[0], uniform_values[1]); foo(&x, uniform_values[3]);`, cond: `x[0] > 0`, - uniform: false, + uniform: false }, nonuniform_param_uniform_assignment: { function: `fn foo(p : ptr>, idx : u32) { @@ -1770,7 +1767,7 @@ const kPointerParamCases = { call: `var x = array(uniform_values[0], uniform_values[1]); foo(&x, u32(clamp(pos.x, 0, 1)));`, cond: `x[0] > 0`, - uniform: false, + uniform: false }, nonuniform_param_nonuniform_assignment: { function: `fn foo(p : ptr>, idx : u32) { @@ -1779,7 +1776,7 @@ const kPointerParamCases = { call: `var x = array(uniform_values[0], uniform_values[1]); foo(&x, u32(clamp(pos.x, 0, 1)));`, cond: `x[0] > 0`, - uniform: false, + uniform: false }, required_uniform_success: { function: `fn foo(p : ptr) { @@ -1790,7 +1787,7 @@ const kPointerParamCases = { call: `var x = uniform_values[0]; foo(&x);`, cond: `uniform_cond`, - uniform: true, + uniform: true }, required_uniform_failure: { function: `fn foo(p : ptr) { @@ -1801,7 +1798,7 @@ const kPointerParamCases = { call: `var x = nonuniform_values[0]; foo(&x);`, cond: `uniform_cond`, - uniform: false, + uniform: false }, uniform_conditional_call_assign_uniform: { function: `fn foo(p : ptr) { @@ -1812,7 +1809,7 @@ const kPointerParamCases = { foo(&x); }`, cond: `x > 0`, - uniform: true, + uniform: true }, uniform_conditional_call_assign_nonuniform1: { function: `fn foo(p : ptr) { @@ -1823,7 +1820,7 @@ const kPointerParamCases = { foo(&x); }`, cond: `x > 0`, - uniform: false, + uniform: false }, uniform_conditional_call_assign_nonuniform2: { function: `fn foo(p : ptr) { @@ -1834,7 +1831,7 @@ const kPointerParamCases = { foo(&x); }`, cond: `x > 0`, - uniform: false, + uniform: false }, nonuniform_conditional_call_assign_uniform: { function: `fn foo(p : ptr) { @@ -1845,16 +1842,16 @@ const kPointerParamCases = { foo(&x); }`, cond: `x > 0`, - uniform: false, - }, + uniform: false + } }; -g.test('function_pointer_parameters') - .desc(`Test functions and calls with pointer parameters`) - .params(u => u.combine('case', keysOf(kPointerParamCases))) - .fn(t => { - const pointer_case = kPointerParamCases[t.params.case]; - const code = ` +g.test('function_pointer_parameters'). +desc(`Test functions and calls with pointer parameters`). +params((u) => u.combine('case', keysOf(kPointerParamCases))). +fn((t) => { + const pointer_case = kPointerParamCases[t.params.case]; + const code = ` @group(0) @binding(0) var t : texture_2d; @group(0) @binding(1) @@ -1880,19 +1877,19 @@ fn main(@builtin(position) pos : vec4f) { } `; - const res = pointer_case.uniform; - if (!res) { - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - } - t.expectCompileResult(res, code); - }); + const res = pointer_case.uniform; + if (!res) { + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + } + t.expectCompileResult(res, code); +}); -g.test('short_circuit_expressions') - .desc(`Test uniformity of expressions`) - .params(u => u.combine('case', keysOf(kShortCircuitExpressionCases))) - .fn(t => { - const testcase = kShortCircuitExpressionCases[t.params.case]; - const code = ` +g.test('short_circuit_expressions'). +desc(`Test uniformity of expressions`). +params((u) => u.combine('case', keysOf(kShortCircuitExpressionCases))). +fn((t) => { + const testcase = kShortCircuitExpressionCases[t.params.case]; + const code = ` @group(1) @binding(0) var t : texture_2d; @group(1) @binding(1) @@ -1907,128 +1904,128 @@ fn main() { } `; - const res = testcase.uniform; - if (!res) { - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - } - t.expectCompileResult(res, code); - }); + const res = testcase.uniform; + if (!res) { + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + } + t.expectCompileResult(res, code); +}); const kExpressionCases = { literal: { code: `1u`, - uniform: true, + uniform: true }, uniform: { code: `uniform_val`, - uniform: true, + uniform: true }, nonuniform: { code: `nonuniform_val`, - uniform: false, + uniform: false }, uniform_index: { code: `uniform_value[uniform_val]`, - uniform: true, + uniform: true }, nonuniform_index1: { code: `uniform_value[nonuniform_val]`, - uniform: false, + uniform: false }, nonuniform_index2: { code: `nonuniform_value[uniform_val]`, - uniform: false, + uniform: false }, uniform_struct: { code: `uniform_struct.x`, - uniform: true, + uniform: true }, nonuniform_struct: { code: `nonuniform_struct.x`, - uniform: false, - }, + uniform: false + } }; const kBinOps = { plus: { code: '+', - test: '> 0', + test: '> 0' }, minus: { code: '-', - test: '> 0', + test: '> 0' }, times: { code: '*', - test: '> 0', + test: '> 0' }, div: { code: '/', - test: '> 0', + test: '> 0' }, rem: { code: '%', - test: '> 0', + test: '> 0' }, and: { code: '&', - test: '> 0', + test: '> 0' }, or: { code: '|', - test: '> 0', + test: '> 0' }, xor: { code: '^', - test: '> 0', + test: '> 0' }, shl: { code: '<<', - test: '> 0', + test: '> 0' }, shr: { code: '>>', - test: '> 0', + test: '> 0' }, less: { code: '<', - test: '', + test: '' }, lessequal: { code: '<=', - test: '', + test: '' }, greater: { code: '>', - test: '', + test: '' }, greaterequal: { code: '>=', - test: '', + test: '' }, equal: { code: '==', - test: '', + test: '' }, notequal: { code: '!=', - test: '', - }, + test: '' + } }; -g.test('binary_expressions') - .desc(`Test uniformity of binary expressions`) - .params(u => - u - .combine('e1', keysOf(kExpressionCases)) - .combine('e2', keysOf(kExpressionCases)) - .combine('op', keysOf(kBinOps)) - ) - .fn(t => { - const e1 = kExpressionCases[t.params.e1]; - const e2 = kExpressionCases[t.params.e2]; - const op = kBinOps[t.params.op]; - const code = ` +g.test('binary_expressions'). +desc(`Test uniformity of binary expressions`). +params((u) => +u. +combine('e1', keysOf(kExpressionCases)). +combine('e2', keysOf(kExpressionCases)). +combine('op', keysOf(kBinOps)) +). +fn((t) => { + const e1 = kExpressionCases[t.params.e1]; + const e2 = kExpressionCases[t.params.e2]; + const op = kBinOps[t.params.op]; + const code = ` @group(0) @binding(0) var t : texture_2d; @group(0) @binding(1) @@ -2056,23 +2053,23 @@ fn main() { } `; - const res = e1.uniform && e2.uniform; - if (!res) { - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - } - t.expectCompileResult(res, code); - }); + const res = e1.uniform && e2.uniform; + if (!res) { + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + } + t.expectCompileResult(res, code); +}); -g.test('unary_expressions') - .desc(`Test uniformity of uniary expressions`) - .params(u => - u - .combine('e', keysOf(kExpressionCases)) - .combine('op', ['!b_tmp', '~i_tmp > 0', '-i32(i_tmp) > 0']) - ) - .fn(t => { - const e = kExpressionCases[t.params.e]; - const code = ` +g.test('unary_expressions'). +desc(`Test uniformity of uniary expressions`). +params((u) => +u. +combine('e', keysOf(kExpressionCases)). +combine('op', ['!b_tmp', '~i_tmp > 0', '-i32(i_tmp) > 0']) +). +fn((t) => { + const e = kExpressionCases[t.params.e]; + const code = ` @group(0) @binding(0) var t : texture_2d; @group(0) @binding(1) @@ -2102,12 +2099,12 @@ fn main() { } `; - const res = e.uniform; - if (!res) { - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - } - t.expectCompileResult(res, code); - }); + const res = e.uniform; + if (!res) { + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + } + t.expectCompileResult(res, code); +}); const kFunctionCases = { uniform_result: { @@ -2116,7 +2113,7 @@ const kFunctionCases = { }`, call: `let call = foo();`, cond: `call > 0`, - uniform: true, + uniform: true }, nonuniform_result: { function: `fn foo() -> u32 { @@ -2124,7 +2121,7 @@ const kFunctionCases = { }`, call: `let call = foo();`, cond: `call > 0`, - uniform: false, + uniform: false }, nonuniform_return_is_uniform_after_call: { function: `fn foo() { @@ -2136,7 +2133,7 @@ const kFunctionCases = { }`, call: `foo();`, cond: `uniform_cond`, - uniform: true, + uniform: true }, uniform_passthrough_parameter: { function: `fn foo(x : u32) -> u32 { @@ -2144,7 +2141,7 @@ const kFunctionCases = { }`, call: `let call = foo(uniform_values[0]);`, cond: `call > 0`, - uniform: true, + uniform: true }, nonuniform_passthrough_parameter: { function: `fn foo(x : u32) -> u32 { @@ -2152,7 +2149,7 @@ const kFunctionCases = { }`, call: `let call = foo(nonuniform_values[0]);`, cond: `call > 0`, - uniform: false, + uniform: false }, combined_parameters1: { function: `fn foo(x : u32, y : u32) -> u32 { @@ -2160,7 +2157,7 @@ const kFunctionCases = { }`, call: `let call = foo(uniform_values[0], uniform_values[1]);`, cond: `call > 0`, - uniform: true, + uniform: true }, combined_parameters2: { function: `fn foo(x : u32, y : u32) -> u32 { @@ -2168,7 +2165,7 @@ const kFunctionCases = { }`, call: `let call = foo(nonuniform_values[0], uniform_values[1]);`, cond: `call > 0`, - uniform: false, + uniform: false }, combined_parameters3: { function: `fn foo(x : u32, y : u32) -> u32 { @@ -2176,7 +2173,7 @@ const kFunctionCases = { }`, call: `let call = foo(uniform_values[0], nonuniform_values[1]);`, cond: `call > 0`, - uniform: false, + uniform: false }, combined_parameters4: { function: `fn foo(x : u32, y : u32) -> u32 { @@ -2184,7 +2181,7 @@ const kFunctionCases = { }`, call: `let call = foo(nonuniform_values[0], nonuniform_values[1]);`, cond: `call > 0`, - uniform: false, + uniform: false }, uniform_parameter_cf_after_nonuniform_expr: { function: `fn foo(x : bool, y : vec4f) -> f32 { @@ -2192,7 +2189,7 @@ const kFunctionCases = { }`, call: `let call = foo(nonuniform_cond || uniform_cond, textureSample(t,s,vec2f(0,0)));`, cond: `uniform_cond`, - uniform: true, + uniform: true }, required_uniform_function_call_in_uniform_cf: { function: `fn foo() -> vec4f { @@ -2202,7 +2199,7 @@ const kFunctionCases = { let call = foo(); }`, cond: `uniform_cond`, - uniform: true, + uniform: true }, required_uniform_function_call_in_nonuniform_cf: { function: `fn foo() -> vec4f { @@ -2212,7 +2209,7 @@ const kFunctionCases = { let call = foo(); }`, cond: `uniform_cond`, - uniform: false, + uniform: false }, required_uniform_function_call_in_nonuniform_cf2: { function: `@diagnostic(warning, derivative_uniformity) @@ -2224,7 +2221,7 @@ const kFunctionCases = { let sample = textureSample(t,s,vec2f(0,0)); }`, cond: `uniform_cond`, - uniform: false, + uniform: false }, required_uniform_function_call_depends_on_uniform_param: { function: `fn foo(x : bool) -> vec4f { @@ -2235,7 +2232,7 @@ const kFunctionCases = { }`, call: `let call = foo(uniform_cond);`, cond: `uniform_cond`, - uniform: true, + uniform: true }, required_uniform_function_call_depends_on_nonuniform_param: { function: `fn foo(x : bool) -> vec4f { @@ -2246,166 +2243,166 @@ const kFunctionCases = { }`, call: `let call = foo(nonuniform_cond);`, cond: `uniform_cond`, - uniform: false, + uniform: false }, dpdx_nonuniform_result: { function: ``, call: `let call = dpdx(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, dpdy_nonuniform_result: { function: ``, call: `let call = dpdy(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, dpdxCoarse_nonuniform_result: { function: ``, call: `let call = dpdxCoarse(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, dpdyCoarse_nonuniform_result: { function: ``, call: `let call = dpdyCoarse(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, dpdxFine_nonuniform_result: { function: ``, call: `let call = dpdxFine(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, dpdyFine_nonuniform_result: { function: ``, call: `let call = dpdyFine(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, fwidth_nonuniform_result: { function: ``, call: `let call = fwidth(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, fwidthCoarse_nonuniform_result: { function: ``, call: `let call = fwidthCoarse(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, fwidthFine_nonuniform_result: { function: ``, call: `let call = fwidthFine(1);`, cond: `call > 0`, - uniform: false, + uniform: false }, textureSample_nonuniform_result: { function: ``, call: `let call = textureSample(t,s,vec2f(0,0));`, cond: `call.x > 0`, - uniform: false, + uniform: false }, textureSampleBias_nonuniform_result: { function: ``, call: `let call = textureSampleBias(t,s,vec2f(0,0), 0);`, cond: `call.x > 0`, - uniform: false, + uniform: false }, textureSampleCompare_nonuniform_result: { function: ``, call: `let call = textureSampleCompare(td,sd,vec2f(0,0), 0);`, cond: `call > 0`, - uniform: false, + uniform: false }, textureDimensions_uniform_input_uniform_result: { function: ``, call: `let call = textureDimensions(t);`, cond: `call.x > 0`, - uniform: true, + uniform: true }, textureGather_uniform_input_uniform_result: { function: ``, call: `let call = textureGather(0,t,s,vec2f(0,0));`, cond: `call.x > 0`, - uniform: true, + uniform: true }, textureGatherCompare_uniform_input_uniform_result: { function: ``, call: `let call = textureGatherCompare(td,sd,vec2f(0,0), 0);`, cond: `call.x > 0`, - uniform: true, + uniform: true }, textureLoad_uniform_input_uniform_result: { function: ``, call: `let call = textureLoad(t,vec2u(0,0),0);`, cond: `call.x > 0`, - uniform: true, + uniform: true }, textureNumLayers_uniform_input_uniform_result: { function: ``, call: `let call = textureNumLayers(ta);`, cond: `call > 0`, - uniform: true, + uniform: true }, textureNumLevels_uniform_input_uniform_result: { function: ``, call: `let call = textureNumLevels(t);`, cond: `call > 0`, - uniform: true, + uniform: true }, textureNumSamples_uniform_input_uniform_result: { function: ``, call: `let call = textureNumSamples(ts);`, cond: `call > 0`, - uniform: true, + uniform: true }, textureSampleLevel_uniform_input_uniform_result: { function: ``, call: `let call = textureSampleLevel(t,s,vec2f(0,0),0);`, cond: `call.x > 0`, - uniform: true, + uniform: true }, textureSampleGrad_uniform_input_uniform_result: { function: ``, call: `let call = textureSampleGrad(t,s,vec2f(0,0),vec2f(0,0),vec2f(0,0));`, cond: `call.x > 0`, - uniform: true, + uniform: true }, textureSampleCompareLevel_uniform_input_uniform_result: { function: ``, call: `let call = textureSampleCompareLevel(td,sd,vec2f(0,0), 0);`, cond: `call > 0`, - uniform: true, + uniform: true }, textureSampleBaseClampToEdge_uniform_input_uniform_result: { function: ``, call: `let call = textureSampleBaseClampToEdge(t,s,vec2f(0,0));`, cond: `call.x > 0`, - uniform: true, + uniform: true }, min_uniform_input_uniform_result: { function: ``, call: `let call = min(0,0);`, cond: `call > 0`, - uniform: true, + uniform: true }, value_constructor_uniform_input_uniform_result: { function: ``, call: `let call = vec2u(0,0);`, cond: `call.x > 0`, - uniform: true, - }, + uniform: true + } }; -g.test('functions') - .desc(`Test uniformity of function calls (non-pointer parameters)`) - .params(u => u.combine('case', keysOf(kFunctionCases))) - .fn(t => { - const func_case = kFunctionCases[t.params.case]; - const code = ` +g.test('functions'). +desc(`Test uniformity of function calls (non-pointer parameters)`). +params((u) => u.combine('case', keysOf(kFunctionCases))). +fn((t) => { + const func_case = kFunctionCases[t.params.case]; + const code = ` @group(0) @binding(0) var t : texture_2d; @group(0) @binding(1) @@ -2439,9 +2436,9 @@ fn main() { } `; - const res = func_case.uniform; - if (!res) { - t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); - } - t.expectCompileResult(res, code); - }); + const res = func_case.uniform; + if (!res) { + t.expectCompileResult(true, `diagnostic(off, derivative_uniformity);\n` + code); + } + t.expectCompileResult(res, code); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/values.js b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/values.js index 9ca24c64b99..4c75635ea93 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/shader/values.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/shader/values.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = `Special and sample values for WGSL scalar types`; -import { assert } from '../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = `Special and sample values for WGSL scalar types`;import { assert } from '../../common/util/util.js'; import { uint32ToFloat32 } from '../util/conversion.js'; /** Returns an array of subnormal f32 numbers. @@ -30,8 +29,7 @@ export function subnormalF32Examples() { result_as_bits.length === 2 * (1 + 23), 'subnormal number sample count is ' + result_as_bits.length.toString() ); - - return result_as_bits.map(u => uint32ToFloat32(u)); + return result_as_bits.map((u) => uint32ToFloat32(u)); } /** Returns an array of normal f32 numbers. @@ -63,7 +61,6 @@ export function normalF32Examples() { result.length === 2 + 2 * 254 * 25, 'normal number sample count is ' + result.length.toString() ); - return result; } @@ -91,4 +88,4 @@ export function nanF32BitsExamples() { } } return result; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/binary_stream.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/binary_stream.js new file mode 100644 index 00000000000..cd90821ea4f --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/binary_stream.js @@ -0,0 +1,213 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../common/util/util.js';import { float16ToUint16, uint16ToFloat16 } from './conversion.js'; +import { align } from './math.js'; + +/** + * BinaryStream is a utility to efficiently encode and decode numbers to / from a Uint8Array. + * BinaryStream uses a number of internal typed arrays to avoid small array allocations when reading + * and writing. + */ +export default class BinaryStream { + /** + * Constructor + * @param buffer the buffer to read from / write to. Array length must be a multiple of 8 bytes. + */ + constructor(buffer) { + this.offset = 0; + this.view = new DataView(buffer); + } + + /** buffer() returns the stream's buffer sliced to the 8-byte rounded read or write offset */ + buffer() { + return new Uint8Array(this.view.buffer, 0, align(this.offset, 8)); + } + + /** writeBool() writes a boolean as 255 or 0 to the buffer at the next byte offset */ + writeBool(value) { + this.view.setUint8(this.offset++, value ? 255 : 0); + } + + /** readBool() reads a boolean from the buffer at the next byte offset */ + readBool() { + const val = this.view.getUint8(this.offset++); + assert(val === 0 || val === 255); + return val !== 0; + } + + /** writeU8() writes a uint8 to the buffer at the next byte offset */ + writeU8(value) { + this.view.setUint8(this.offset++, value); + } + + /** readU8() reads a uint8 from the buffer at the next byte offset */ + readU8() { + return this.view.getUint8(this.offset++); + } + + /** writeU16() writes a uint16 to the buffer at the next 16-bit aligned offset */ + writeU16(value) { + this.view.setUint16(this.alignedOffset(2), value, /* littleEndian */true); + } + + /** readU16() reads a uint16 from the buffer at the next 16-bit aligned offset */ + readU16() { + return this.view.getUint16(this.alignedOffset(2), /* littleEndian */true); + } + + /** writeU32() writes a uint32 to the buffer at the next 32-bit aligned offset */ + writeU32(value) { + this.view.setUint32(this.alignedOffset(4), value, /* littleEndian */true); + } + + /** readU32() reads a uint32 from the buffer at the next 32-bit aligned offset */ + readU32() { + return this.view.getUint32(this.alignedOffset(4), /* littleEndian */true); + } + + /** writeI8() writes a int8 to the buffer at the next byte offset */ + writeI8(value) { + this.view.setInt8(this.offset++, value); + } + + /** readI8() reads a int8 from the buffer at the next byte offset */ + readI8() { + return this.view.getInt8(this.offset++); + } + + /** writeI16() writes a int16 to the buffer at the next 16-bit aligned offset */ + writeI16(value) { + this.view.setInt16(this.alignedOffset(2), value, /* littleEndian */true); + } + + /** readI16() reads a int16 from the buffer at the next 16-bit aligned offset */ + readI16() { + return this.view.getInt16(this.alignedOffset(2), /* littleEndian */true); + } + + /** writeI32() writes a int32 to the buffer at the next 32-bit aligned offset */ + writeI32(value) { + this.view.setInt32(this.alignedOffset(4), value, /* littleEndian */true); + } + + /** readI32() reads a int32 from the buffer at the next 32-bit aligned offset */ + readI32() { + return this.view.getInt32(this.alignedOffset(4), /* littleEndian */true); + } + + /** writeF16() writes a float16 to the buffer at the next 16-bit aligned offset */ + writeF16(value) { + this.writeU16(float16ToUint16(value)); + } + + /** readF16() reads a float16 from the buffer at the next 16-bit aligned offset */ + readF16() { + return uint16ToFloat16(this.readU16()); + } + + /** writeF32() writes a float32 to the buffer at the next 32-bit aligned offset */ + writeF32(value) { + this.view.setFloat32(this.alignedOffset(4), value, /* littleEndian */true); + } + + /** readF32() reads a float32 from the buffer at the next 32-bit aligned offset */ + readF32() { + return this.view.getFloat32(this.alignedOffset(4), /* littleEndian */true); + } + + /** writeF64() writes a float64 to the buffer at the next 64-bit aligned offset */ + writeF64(value) { + this.view.setFloat64(this.alignedOffset(8), value, /* littleEndian */true); + } + + /** readF64() reads a float64 from the buffer at the next 64-bit aligned offset */ + readF64() { + return this.view.getFloat64(this.alignedOffset(8), /* littleEndian */true); + } + + /** + * writeString() writes a length-prefixed UTF-16 string to the buffer at the next 32-bit aligned + * offset + */ + writeString(value) { + this.writeU32(value.length); + for (let i = 0; i < value.length; i++) { + this.writeU16(value.charCodeAt(i)); + } + } + + /** + * readString() writes a length-prefixed UTF-16 string from the buffer at the next 32-bit aligned + * offset + */ + readString() { + const len = this.readU32(); + const codes = new Array(len); + for (let i = 0; i < len; i++) { + codes[i] = this.readU16(); + } + return String.fromCharCode(...codes); + } + + /** + * writeArray() writes a length-prefixed array of T elements to the buffer at the next 32-bit + * aligned offset, using the provided callback to write the individual elements + */ + writeArray(value, writeElement) { + this.writeU32(value.length); + for (const element of value) { + writeElement(this, element); + } + } + + /** + * readArray() reads a length-prefixed array of T elements from the buffer at the next 32-bit + * aligned offset, using the provided callback to read the individual elements + */ + readArray(readElement) { + const len = this.readU32(); + const array = new Array(len); + for (let i = 0; i < len; i++) { + array[i] = readElement(this); + } + return array; + } + + /** + * writeCond() writes the boolean condition `cond` to the buffer, then either calls if_true if + * `cond` is true, otherwise if_false + */ + writeCond(cond, fns) { + this.writeBool(cond); + if (cond) { + return fns.if_true(); + } else { + return fns.if_false(); + } + } + + /** + * readCond() reads a boolean condition from the buffer, then either calls if_true if + * the condition was is true, otherwise if_false + */ + readCond(fns) { + if (this.readBool()) { + return fns.if_true(); + } else { + return fns.if_false(); + } + } + + /** + * alignedOffset() aligns this.offset to `bytes`, then increments this.offset by `bytes`. + * @returns the old offset aligned to the next multiple of `bytes`. + */ + alignedOffset(bytes) { + const aligned = align(this.offset, bytes); + this.offset = aligned + bytes; + return aligned; + } + + + +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/buffer.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/buffer.js index 1da50c26993..0ce8bd858d8 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/buffer.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/buffer.js @@ -1,20 +1,23 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { memcpy } from '../../common/util/util.js'; -import { align } from './math.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { memcpy } from '../../common/util/util.js';import { align } from './math.js'; /** * Creates a buffer with the contents of some TypedArray. * The buffer size will always be aligned to 4 as we set mappedAtCreation === true when creating the * buffer. */ -export function makeBufferWithContents(device, dataArray, usage) { +export function makeBufferWithContents( +device, +dataArray, +usage) +{ const buffer = device.createBuffer({ mappedAtCreation: true, size: align(dataArray.byteLength, 4), - usage, + usage }); memcpy({ src: dataArray }, { dst: buffer.getMappedRange() }); buffer.unmap(); return buffer; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/check_contents.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/check_contents.js index f45054677d8..645d78de55d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/check_contents.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/check_contents.js @@ -1,45 +1,93 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ // MAINTENANCE_TODO: The "checkThingTrue" naming is confusing; these must be used with `expectOK` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ // MAINTENANCE_TODO: The "checkThingTrue" naming is confusing; these must be used with `expectOK` // or the result is dropped on the floor. Rename these to things like `typedArrayIsOK`(??) to // make it clearer. // MAINTENANCE_TODO: Also, audit to make sure we aren't dropping any on the floor. Consider a // no-ignored-return lint check if we can find one that we can use. -import { assert, ErrorWithExtra, iterRange, range } from '../../common/util/util.js'; +import { assert, +ErrorWithExtra, +iterRange, +range } from + + +'../../common/util/util.js'; import { Float16Array } from '../../external/petamoriken/float16/float16.js'; import { generatePrettyTable } from './pretty_diff_tables.js'; /** Generate an expected value at `index`, to test for equality with the actual value. */ +/** Check whether the actual `value` at `index` is as expected. */ + +/** + * Provides a pretty-printing implementation for a particular CheckElementsPredicate. + * This is an array; each element provides info to print an additional row in the error message. + */ + + + + + + + + + + /** * Check whether two `TypedArray`s have equal contents. * Returns `undefined` if the check passes, or an `Error` if not. */ -export function checkElementsEqual(actual, expected) { +export function checkElementsEqual( +actual, +expected) +{ assert(actual.constructor === expected.constructor, 'TypedArray type mismatch'); assert(actual.length === expected.length, 'size mismatch'); - return checkElementsEqualGenerated(actual, i => expected[i]); + + let failedElementsFirstMaybe = undefined; + /** Sparse array with `true` for elements that failed. */ + const failedElements = []; + for (let i = 0; i < actual.length; ++i) { + if (actual[i] !== expected[i]) { + failedElementsFirstMaybe ??= i; + failedElements[i] = true; + } + } + + if (failedElementsFirstMaybe === undefined) { + return undefined; + } + + const failedElementsFirst = failedElementsFirstMaybe; + return failCheckElements({ + actual, + failedElements, + failedElementsFirst, + predicatePrinter: [{ leftHeader: 'expected ==', getValueForCell: (index) => expected[index] }] + }); } /** * Check whether each value in a `TypedArray` is between the two corresponding "expected" values * (either `a(i) <= actual[i] <= b(i)` or `a(i) >= actual[i] => b(i)`). */ -export function checkElementsBetween(actual, expected) { +export function checkElementsBetween( +actual, +expected) +{ const error = checkElementsPassPredicate( actual, (index, value) => - value >= Math.min(expected[0](index), expected[1](index)) && - value <= Math.max(expected[0](index), expected[1](index)), + value >= Math.min(expected[0](index), expected[1](index)) && + value <= Math.max(expected[0](index), expected[1](index)), { predicatePrinter: [ - { leftHeader: 'between', getValueForCell: index => expected[0](index) }, - { leftHeader: 'and', getValueForCell: index => expected[1](index) }, - ], + { leftHeader: 'between', getValueForCell: (index) => expected[0](index) }, + { leftHeader: 'and', getValueForCell: (index) => expected[1](index) }] + } ); - // If there was an error, extend it with additional extras. return error ? new ErrorWithExtra(error, () => ({ expected })) : undefined; } @@ -48,18 +96,20 @@ export function checkElementsBetween(actual, expected) { * Check whether each value in a `TypedArray` is equal to one of the two corresponding "expected" * values (either `actual[i] === a[i]` or `actual[i] === b[i]`) */ -export function checkElementsEqualEither(actual, expected) { +export function checkElementsEqualEither( +actual, +expected) +{ const error = checkElementsPassPredicate( actual, (index, value) => value === expected[0][index] || value === expected[1][index], { predicatePrinter: [ - { leftHeader: 'either', getValueForCell: index => expected[0][index] }, - { leftHeader: 'or', getValueForCell: index => expected[1][index] }, - ], + { leftHeader: 'either', getValueForCell: (index) => expected[0][index] }, + { leftHeader: 'or', getValueForCell: (index) => expected[1][index] }] + } ); - // If there was an error, extend it with additional extras. return error ? new ErrorWithExtra(error, () => ({ expected })) : undefined; } @@ -84,27 +134,48 @@ export function checkElementsEqualEither(actual, expected) { * expected == 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... * ``` */ -export function checkElementsEqualGenerated(actual, generator) { - const error = checkElementsPassPredicate(actual, (index, value) => value === generator(index), { - predicatePrinter: [{ leftHeader: 'expected ==', getValueForCell: index => generator(index) }], +export function checkElementsEqualGenerated( +actual, +generator) +{ + let failedElementsFirstMaybe = undefined; + /** Sparse array with `true` for elements that failed. */ + const failedElements = []; + for (let i = 0; i < actual.length; ++i) { + if (actual[i] !== generator(i)) { + failedElementsFirstMaybe ??= i; + failedElements[i] = true; + } + } + + if (failedElementsFirstMaybe === undefined) { + return undefined; + } + + const failedElementsFirst = failedElementsFirstMaybe; + const error = failCheckElements({ + actual, + failedElements, + failedElementsFirst, + predicatePrinter: [{ leftHeader: 'expected ==', getValueForCell: (index) => generator(index) }] }); - // If there was an error, extend it with additional extras. - return error ? new ErrorWithExtra(error, () => ({ generator })) : undefined; + // Add more extras to the error. + return new ErrorWithExtra(error, () => ({ generator })); } /** * Check whether a `TypedArray`'s values pass the provided predicate function. * Returns `undefined` if the check passes, or an `Error` if not. */ -export function checkElementsPassPredicate(actual, predicate, { predicatePrinter }) { - const size = actual.length; - const ctor = actual.constructor; - const printAsFloat = ctor === Float16Array || ctor === Float32Array || ctor === Float64Array; - +export function checkElementsPassPredicate( +actual, +predicate, +{ predicatePrinter }) +{ let failedElementsFirstMaybe = undefined; /** Sparse array with `true` for elements that failed. */ const failedElements = []; - for (let i = 0; i < size; ++i) { + for (let i = 0; i < actual.length; ++i) { if (!predicate(i, actual[i])) { failedElementsFirstMaybe ??= i; failedElements[i] = true; @@ -114,7 +185,35 @@ export function checkElementsPassPredicate(actual, predicate, { predicatePrinter if (failedElementsFirstMaybe === undefined) { return undefined; } + const failedElementsFirst = failedElementsFirstMaybe; + return failCheckElements({ actual, failedElements, failedElementsFirst, predicatePrinter }); +} + + + + + + + + +/** + * Implements the failure case of some checkElementsX helpers above. This allows those functions to + * implement their checks directly without too many function indirections in between. + * + * Note: Separating this into its own function significantly speeds up the non-error case in + * Chromium (though this may be V8-specific behavior). + */ +function failCheckElements({ + actual, + failedElements, + failedElementsFirst, + predicatePrinter +}) { + const size = actual.length; + const ctor = actual.constructor; + const printAsFloat = ctor === Float16Array || ctor === Float32Array || ctor === Float64Array; + const failedElementsLast = failedElements.length - 1; // Include one extra non-failed element at the beginning and end (if they exist), for context. @@ -122,9 +221,9 @@ export function checkElementsPassPredicate(actual, predicate, { predicatePrinter const printElementsEnd = Math.min(size, failedElementsLast + 2); const printElementsCount = printElementsEnd - printElementsStart; - const numberToString = printAsFloat - ? n => n.toPrecision(4) - : n => intToPaddedHex(n, { byteLength: ctor.BYTES_PER_ELEMENT }); + const numberToString = printAsFloat ? + (n) => n.toPrecision(4) : + (n) => intToPaddedHex(n, { byteLength: ctor.BYTES_PER_ELEMENT }); const numberPrefix = printAsFloat ? '' : '0x:'; const printActual = actual.subarray(printElementsStart, printElementsEnd); @@ -132,32 +231,32 @@ export function checkElementsPassPredicate(actual, predicate, { predicatePrinter if (predicatePrinter) { for (const { leftHeader, getValueForCell: cell } of predicatePrinter) { printExpected.push( - (function* () { + function* () { yield* [leftHeader, '']; - yield* iterRange(printElementsCount, i => cell(printElementsStart + i)); - })() + yield* iterRange(printElementsCount, (i) => cell(printElementsStart + i)); + }() ); } } - const printFailedValueMarkers = (function* () { + const printFailedValueMarkers = function* () { yield* ['failed ->', '']; - yield* range(printElementsCount, i => (failedElements[printElementsStart + i] ? 'xx' : '')); - })(); + yield* range(printElementsCount, (i) => failedElements[printElementsStart + i] ? 'xx' : ''); + }(); const opts = { fillToWidth: 120, - numberToString, + numberToString }; const msg = `Array had unexpected contents at indices ${failedElementsFirst} through ${failedElementsLast}. Starting at index ${printElementsStart}: ${generatePrettyTable(opts, [ ['actual ==', numberPrefix, ...printActual], printFailedValueMarkers, - ...printExpected, -])}`; + ...printExpected] + )}`; return new ErrorWithExtra(msg, () => ({ - actual: actual.slice(), + actual: actual.slice() })); } @@ -170,4 +269,4 @@ function intToPaddedHex(number, { byteLength }) { if (byteLength) s = s.padStart(byteLength * 2, '0'); if (number < 0) s = '-' + s; return s; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/color_space_conversion.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/color_space_conversion.js index 4f456fb7c53..d61da9475fe 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/color_space_conversion.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/color_space_conversion.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../common/util/util.js'; -import { multiplyMatrices } from './math.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../common/util/util.js';import { multiplyMatrices } from './math.js'; // These color space conversion function definitions are copied directly from // CSS Color Module Level 4 Sample Code: https://drafts.csswg.org/css-color/#color-conversion-code @@ -27,7 +26,7 @@ import { multiplyMatrices } from './math.js'; * then reflected power function is used. */ function lin_sRGB(RGB) { - return RGB.map(val => { + return RGB.map((val) => { const sign = val < 0 ? -1 : 1; const abs = Math.abs(val); @@ -48,7 +47,7 @@ function lin_sRGB(RGB) { * of axis, then uses reflected pow below that */ function gam_sRGB(RGB) { - return RGB.map(val => { + return RGB.map((val) => { const sign = val < 0 ? -1 : 1; const abs = Math.abs(val); @@ -65,11 +64,11 @@ function gam_sRGB(RGB) { * using sRGB's own white, D65 (no chromatic adaptation) */ function lin_sRGB_to_XYZ(rgb) { + const M = [ - [506752 / 1228815, 87881 / 245763, 12673 / 70218], - [87098 / 409605, 175762 / 245763, 12673 / 175545], - [7918 / 409605, 87881 / 737289, 1001167 / 1053270], - ]; + [506752 / 1228815, 87881 / 245763, 12673 / 70218], + [87098 / 409605, 175762 / 245763, 12673 / 175545], + [7918 / 409605, 87881 / 737289, 1001167 / 1053270]]; return multiplyMatrices(M, rgb); } @@ -79,11 +78,12 @@ function lin_sRGB_to_XYZ(rgb) { * using sRGB's own white, D65 (no chromatic adaptation) */ function XYZ_to_lin_sRGB(XYZ) { + const M = [ - [12831 / 3959, -329 / 214, -1974 / 3959], - [-851781 / 878810, 1648619 / 878810, 36519 / 878810], - [705 / 12673, -2585 / 12673, 705 / 667], - ]; + [12831 / 3959, -329 / 214, -1974 / 3959], + [-851781 / 878810, 1648619 / 878810, 36519 / 878810], + [705 / 12673, -2585 / 12673, 705 / 667]]; + return multiplyMatrices(M, XYZ); } @@ -111,11 +111,12 @@ function gam_P3(RGB) { * using display-p3's D65 (no chromatic adaptation) */ function lin_P3_to_XYZ(rgb) { + const M = [ - [608311 / 1250200, 189793 / 714400, 198249 / 1000160], - [35783 / 156275, 247089 / 357200, 198249 / 2500400], - [0 / 1, 32229 / 714400, 5220557 / 5000800], - ]; + [608311 / 1250200, 189793 / 714400, 198249 / 1000160], + [35783 / 156275, 247089 / 357200, 198249 / 2500400], + [0 / 1, 32229 / 714400, 5220557 / 5000800]]; + return multiplyMatrices(M, rgb); } @@ -125,11 +126,12 @@ function lin_P3_to_XYZ(rgb) { * using display-p3's own white, D65 (no chromatic adaptation) */ function XYZ_to_lin_P3(XYZ) { + const M = [ - [446124 / 178915, -333277 / 357830, -72051 / 178915], - [-14852 / 17905, 63121 / 35810, 423 / 17905], - [11844 / 330415, -50337 / 660830, 316169 / 330415], - ]; + [446124 / 178915, -333277 / 357830, -72051 / 178915], + [-14852 / 17905, 63121 / 35810, 423 / 17905], + [11844 / 330415, -50337 / 660830, 316169 / 330415]]; + return multiplyMatrices(M, XYZ); } @@ -154,11 +156,7 @@ export function displayP3ToSrgb(pixel) { rgbVec = [rgbMatrix[0][0], rgbMatrix[1][0], rgbMatrix[2][0]]; rgbVec = gam_sRGB(rgbVec); - pixel.R = rgbVec[0]; - pixel.G = rgbVec[1]; - pixel.B = rgbVec[2]; - - return pixel; + return { R: rgbVec[0], G: rgbVec[1], B: rgbVec[2], A: pixel.A }; } /** * @returns the converted pixels in `{R: number, G: number, B: number, A: number}`. @@ -180,13 +178,17 @@ export function srgbToDisplayP3(pixel) { rgbVec = [rgbMatrix[0][0], rgbMatrix[1][0], rgbMatrix[2][0]]; rgbVec = gam_P3(rgbVec); - pixel.R = rgbVec[0]; - pixel.G = rgbVec[1]; - pixel.B = rgbVec[2]; - - return pixel; + return { R: rgbVec[0], G: rgbVec[1], B: rgbVec[2], A: pixel.A }; } + + + + + + + + /** * Returns a function which applies the specified colorspace/premultiplication conversion. * Does not clamp, so may return values outside of the `dstColorSpace` gamut, due to either @@ -196,15 +198,20 @@ export function makeInPlaceColorConversion({ srcPremultiplied, dstPremultiplied, srcColorSpace = 'srgb', - dstColorSpace = 'srgb', + dstColorSpace = 'srgb' + + + + + }) { const requireColorSpaceConversion = srcColorSpace !== dstColorSpace; const requireUnpremultiplyAlpha = - srcPremultiplied && (requireColorSpaceConversion || srcPremultiplied !== dstPremultiplied); + srcPremultiplied && (requireColorSpaceConversion || srcPremultiplied !== dstPremultiplied); const requirePremultiplyAlpha = - dstPremultiplied && (requireColorSpaceConversion || srcPremultiplied !== dstPremultiplied); + dstPremultiplied && (requireColorSpaceConversion || srcPremultiplied !== dstPremultiplied); - return rgba => { + return (rgba) => { assert(rgba.A >= 0.0 && rgba.A <= 1.0, 'rgba.A out of bounds'); if (requireUnpremultiplyAlpha) { @@ -238,4 +245,4 @@ export function makeInPlaceColorConversion({ rgba.B *= rgba.A; } }; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/command_buffer_maker.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/command_buffer_maker.js index b3e0463fb2f..7c54c35c2d9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/command_buffer_maker.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/command_buffer_maker.js @@ -1,39 +1,60 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const kRenderEncodeTypes = ['render pass', 'render bundle']; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const kRenderEncodeTypes = ['render pass', 'render bundle']; export const kProgrammableEncoderTypes = ['compute pass', ...kRenderEncodeTypes]; export const kEncoderTypes = ['non-pass', ...kProgrammableEncoderTypes]; + +// Look up the type of the encoder based on `T`. If `T` is a union, this will be too! + + + + + + + /** See {@link webgpu/api/validation/validation_test.ValidationTest.createEncoder | * GPUTest.createEncoder()}. */ export class CommandBufferMaker { /** `GPU___Encoder` for recording commands into. */ // Look up the type of the encoder based on `T`. If `T` is a union, this will be too! + /** * Finish any passes, finish and record any bundles, and finish/return the command buffer. Any * errors are ignored and the GPUCommandBuffer (which may be an error buffer) is returned. */ + /** * Finish any passes, finish and record any bundles, and finish/return the command buffer. * Checks for validation errors in (only) the appropriate finish call. */ + /** * Finish the command buffer and submit it. Checks for validation errors in either the submit or * the appropriate finish call, depending on the state of a resource used in the encoding. */ + + + + /** * `validateFinishAndSubmit()` based on the state of a resource in the command encoder. * - `finish()` should fail if the resource is 'invalid'. * - Only `submit()` should fail if the resource is 'destroyed'. */ - constructor(t, encoder, finish) { + + constructor( + t, + encoder, + finish) + { // TypeScript introduces an intersection type here where we don't want one. this.encoder = encoder; this.finish = finish; @@ -43,19 +64,22 @@ export class CommandBufferMaker { // Alternatively, do not destructure, and call member functions, e.g.: // const encoder = t.createEncoder(type); // encoder.validateFinish(true); - this.validateFinish = shouldSucceed => { + this.validateFinish = (shouldSucceed) => { return t.expectGPUError('validation', this.finish, !shouldSucceed); }; - this.validateFinishAndSubmit = (shouldBeValid, submitShouldSucceedIfValid) => { + this.validateFinishAndSubmit = ( + shouldBeValid, + submitShouldSucceedIfValid) => + { const commandBuffer = this.validateFinish(shouldBeValid); if (shouldBeValid) { t.expectValidationError(() => t.queue.submit([commandBuffer]), !submitShouldSucceedIfValid); } }; - this.validateFinishAndSubmitGivenState = resourceState => { + this.validateFinishAndSubmitGivenState = (resourceState) => { this.validateFinishAndSubmit(resourceState !== 'invalid', resourceState !== 'destroyed'); }; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/compare.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/compare.js index c4435042980..e884e9a01f6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/compare.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/compare.js @@ -1,19 +1,79 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { getIsBuildingDataCache } from '../../common/framework/data_cache.js'; -import { Colors } from '../../common/util/colors.js'; -import { assert, unreachable } from '../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { getIsBuildingDataCache } from '../../common/framework/data_cache.js';import { Colors } from '../../common/util/colors.js';import { assert, unreachable } from '../../common/util/util.js'; import { deserializeExpectation, - serializeExpectation, -} from '../shader/execution/expression/case_cache.js'; -import { toComparator } from '../shader/execution/expression/expression.js'; + serializeExpectation } from +'../shader/execution/expression/case_cache.js'; +import { toComparator } from '../shader/execution/expression/expectation.js'; + import { isFloatValue, Matrix, Scalar, Vector } from './conversion.js'; import { FPInterval } from './floating_point.js'; /** Comparison describes the result of a Comparator function. */ + + + + + +// All Comparators must be serializable to be used in the CaseCache. +// New Comparators should add a new entry to SerializableComparatorKind and +// define functionality in serialize/deserializeComparator as needed. +// +// 'value' and 'packed' are internal framework Comparators that exist, so that +// the whole Case type hierarchy doesn't need to be split into Serializable vs +// non-Serializable paths. Passing them into the CaseCache will cause a runtime +// error. +// 'value' and 'packed' should never be used in .spec.ts files. +// + + + + + +/** Comparator is a function that compares whether the provided value matches an expectation. */ + + + + + + +/** SerializedComparator is an enum of all the possible serialized comparator types. */var +SerializedComparatorKind = /*#__PURE__*/function (SerializedComparatorKind) {SerializedComparatorKind[SerializedComparatorKind["AnyOf"] = 0] = "AnyOf";SerializedComparatorKind[SerializedComparatorKind["SkipUndefined"] = 1] = "SkipUndefined";SerializedComparatorKind[SerializedComparatorKind["AlwaysPass"] = 2] = "AlwaysPass";return SerializedComparatorKind;}(SerializedComparatorKind || {}); + + + + + +/** serializeComparatorKind() serializes a ComparatorKind to a BinaryStream */ +function serializeComparatorKind(s, value) { + switch (value) { + case 'anyOf': + return s.writeU8(SerializedComparatorKind.AnyOf); + case 'skipUndefined': + return s.writeU8(SerializedComparatorKind.SkipUndefined); + case 'alwaysPass': + return s.writeU8(SerializedComparatorKind.AlwaysPass); + } +} + +/** deserializeComparatorKind() deserializes a ComparatorKind from a BinaryStream */ +function deserializeComparatorKind(s) { + const kind = s.readU8(); + switch (kind) { + case SerializedComparatorKind.AnyOf: + return 'anyOf'; + case SerializedComparatorKind.SkipUndefined: + return 'skipUndefined'; + case SerializedComparatorKind.AlwaysPass: + return 'alwaysPass'; + default: + unreachable(`invalid serialized ComparatorKind: ${kind}`); + } +} + /** * compares 'got' Value to 'expected' Value, returning the Comparison information. * @param got the Value obtained from the test @@ -33,7 +93,7 @@ function compareValue(got, expected) { return { matched: false, got: `${Colors.red(gTy.toString())}(${got})`, - expected: `${Colors.red(eTy.toString())}(${expected})`, + expected: `${Colors.red(eTy.toString())}(${expected})` }; } } @@ -42,11 +102,12 @@ function compareValue(got, expected) { const g = got; const e = expected; const isFloat = g.type.kind === 'f64' || g.type.kind === 'f32' || g.type.kind === 'f16'; - const matched = (isFloat && g.value === e.value) || (!isFloat && g.value === e.value); + const matched = + isFloat && g.value === e.value || !isFloat && g.value === e.value; return { matched, got: g.toString(), - expected: matched ? Colors.green(e.toString()) : Colors.red(e.toString()), + expected: matched ? Colors.green(e.toString()) : Colors.red(e.toString()) }; } @@ -65,7 +126,7 @@ function compareValue(got, expected) { return { matched, got: `${got.toString()}`, - expected: matched ? Colors.green(e.toString()) : Colors.red(e.toString()), + expected: matched ? Colors.green(e.toString()) : Colors.red(e.toString()) }; } @@ -88,7 +149,7 @@ function compareValue(got, expected) { return { matched, got: `${got.toString()}`, - expected: matched ? Colors.green(e.toString()) : Colors.red(e.toString()), + expected: matched ? Colors.green(e.toString()) : Colors.red(e.toString()) }; } @@ -109,7 +170,7 @@ function compareInterval(got, expected) { return { matched: false, got: `${Colors.red(gTy.toString())}(${got})`, - expected: `floating point value`, + expected: `floating point value` }; } } @@ -120,7 +181,7 @@ function compareInterval(got, expected) { return { matched, got: g.toString(), - expected: matched ? Colors.green(expected.toString()) : Colors.red(expected.toString()), + expected: matched ? Colors.green(expected.toString()) : Colors.red(expected.toString()) }; } @@ -140,7 +201,7 @@ function compareVector(got, expected) { return { matched: false, got: `${Colors.red((typeof got).toString())}(${got})`, - expected: `Vector`, + expected: `Vector` }; } @@ -151,7 +212,7 @@ function compareVector(got, expected) { return { matched: false, got: `${Colors.red(gTy.toString())}(${got})`, - expected: `floating point elements`, + expected: `floating point elements` }; } } @@ -160,7 +221,7 @@ function compareVector(got, expected) { return { matched: false, got: `Vector of ${got.elements.length} elements`, - expected: `${expected.length} elements`, + expected: `${expected.length} elements` }; } @@ -169,23 +230,22 @@ function compareVector(got, expected) { return { match: expected[idx].contains(g), index: idx }; }); - const failures = results.filter(v => !v.match).map(v => v.index); + const failures = results.filter((v) => !v.match).map((v) => v.index); if (failures.length !== 0) { const expected_string = expected.map((v, idx) => - idx in failures ? Colors.red(`[${v}]`) : Colors.green(`[${v}]`) + idx in failures ? Colors.red(`[${v}]`) : Colors.green(`[${v}]`) ); - return { matched: false, got: `[${got.elements}]`, - expected: `[${expected_string}]`, + expected: `[${expected_string}]` }; } return { matched: true, got: `[${got.elements}]`, - expected: `[${Colors.green(expected.toString())}]`, + expected: `[${Colors.green(expected.toString())}]` }; } @@ -206,7 +266,7 @@ function compareMatrix(got, expected) { return { matched: false, got: `${Colors.red((typeof got).toString())}(${got})`, - expected: `Matrix`, + expected: `Matrix` }; } @@ -217,7 +277,7 @@ function compareMatrix(got, expected) { return { matched: false, got: `${Colors.red(gTy.toString())}(${got})`, - expected: `floating point elements`, + expected: `floating point elements` }; } } @@ -234,16 +294,16 @@ function compareMatrix(got, expected) { return { matched: false, got: `Matrix of ${gCols}x${gRows} elements`, - expected: `Matrix of ${eCols}x${eRows} elements`, + expected: `Matrix of ${eCols}x${eRows} elements` }; } } // Check that got values fall in expected intervals let matched = true; - const expected_strings = [...Array(got.elements.length)].map(_ => [ - ...Array(got.elements[0].length), - ]); + const expected_strings = [...Array(got.elements.length)].map((_) => [ + ...Array(got.elements[0].length)] + ); got.elements.forEach((c, i) => { c.forEach((r, j) => { @@ -260,7 +320,7 @@ function compareMatrix(got, expected) { return { matched, got: convertArrayToString(got.elements.map(convertArrayToString)), - expected: convertArrayToString(expected_strings.map(convertArrayToString)), + expected: convertArrayToString(expected_strings.map(convertArrayToString)) }; } @@ -270,7 +330,10 @@ function compareMatrix(got, expected) { * @param expected the expected result * @returns the comparison results */ -export function compare(got, expected) { +export function compare( +got, +expected) +{ if (expected instanceof Array) { if (expected[0] instanceof Array) { expected = expected; @@ -291,7 +354,7 @@ export function compare(got, expected) { /** @returns a Comparator that checks whether a test value matches any of the provided options */ export function anyOf(...expectations) { const c = { - compare: got => { + compare: (got) => { const failed = new Set(); for (const e of expectations) { const cmp = toComparator(e).compare(got); @@ -302,7 +365,7 @@ export function anyOf(...expectations) { } return { matched: false, got: got.toString(), expected: [...failed].join(' or ') }; }, - kind: 'anyOf', + kind: 'anyOf' }; if (getIsBuildingDataCache()) { @@ -316,13 +379,13 @@ export function anyOf(...expectations) { /** @returns a Comparator that skips the test if the expectation is undefined */ export function skipUndefined(expectation) { const c = { - compare: got => { + compare: (got) => { if (expectation !== undefined) { return toComparator(expectation).compare(got); } return { matched: true, got: got.toString(), expected: `Treating 'undefined' as Any` }; }, - kind: 'skipUndefined', + kind: 'skipUndefined' }; if (expectation !== undefined && getIsBuildingDataCache()) { @@ -340,10 +403,10 @@ export function skipUndefined(expectation) { */ export function alwaysPass(msg = 'always pass') { const c = { - compare: got => { + compare: (got) => { return { matched: true, got: got.toString(), expected: msg }; }, - kind: 'alwaysPass', + kind: 'alwaysPass' }; if (getIsBuildingDataCache()) { @@ -354,57 +417,56 @@ export function alwaysPass(msg = 'always pass') { return c; } -/** SerializedComparatorAnyOf is the serialized type of `anyOf` comparator. */ - -/** - * Serializes a Comparator to a SerializedComparator. - * @param c the Comparator - * @returns a serialized comparator - */ -export function serializeComparator(c) { +/** serializeComparator() serializes a Comparator to a BinaryStream */ +export function serializeComparator(s, c) { + serializeComparatorKind(s, c.kind); switch (c.kind) { - case 'anyOf': { - const d = c.data; - return { kind: 'anyOf', data: d.map(serializeExpectation) }; - } - case 'skipUndefined': { - if (c.data !== undefined) { - const d = c.data; - return { kind: 'skipUndefined', data: serializeExpectation(d) }; - } - return { kind: 'skipUndefined', data: undefined }; - } - case 'alwaysPass': { - const d = c.data; - return { kind: 'alwaysPass', reason: d }; - } - case 'value': - case 'packed': { - unreachable(`Serializing '${c.kind}' comparators is not allowed (${c})`); - break; - } - } + case 'anyOf': + s.writeArray(c.data, serializeExpectation); + return; + case 'skipUndefined': + s.writeCond(c.data !== undefined, { + if_true: () => { + // defined data + serializeExpectation(s, c.data); + }, + if_false: () => { + // undefined data + } }); + return; + case 'alwaysPass':{ + s.writeString(c.data); + return; + } + case 'value': + case 'packed':{ + unreachable(`Serializing '${c.kind}' comparators is not allowed (${c})`); + break; + } + } unreachable(`Unable serialize comparator '${c}'`); } -/** - * Deserializes a Comparator from a SerializedComparator. - * @param s the SerializedComparator - * @returns the deserialized comparator. - */ +/** deserializeComparator() deserializes a Comparator from a BinaryStream */ export function deserializeComparator(s) { - switch (s.kind) { - case 'anyOf': { - return anyOf(...s.data.map(e => deserializeExpectation(e))); - } - case 'skipUndefined': { - return skipUndefined(s.data !== undefined ? deserializeExpectation(s.data) : undefined); - } - case 'alwaysPass': { - return alwaysPass(s.reason); - } + const kind = deserializeComparatorKind(s); + switch (kind) { + case 'anyOf': + return anyOf(...s.readArray(deserializeExpectation)); + case 'skipUndefined': + return s.readCond({ + if_true: () => { + // defined data + return skipUndefined(deserializeExpectation(s)); + }, + if_false: () => { + // undefined data + return skipUndefined(undefined); + } + }); + case 'alwaysPass': + return alwaysPass(s.readString()); } - unreachable(`Unable deserialize comparator '${s}'`); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/constants.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/constants.js index da63af2bcae..b46a2b178b5 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/constants.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/constants.js @@ -1,23 +1,27 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { Float16Array } from '../../external/petamoriken/float16/float16.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { reinterpretU64AsF64, reinterpretF64AsU64, + reinterpretU32AsF32, + reinterpretU16AsF16 } from +'./reinterpret.js'; + export const kBit = { // Limits of int32 i32: { positive: { min: 0x0000_0000, // 0 - max: 0x7fff_ffff, // 2147483647 + max: 0x7fff_ffff // 2147483647 }, negative: { min: 0x8000_0000, // -2147483648 - max: 0x0000_0000, // 0 - }, + max: 0x0000_0000 // 0 + } }, // Limits of uint32 u32: { min: 0x0000_0000, - max: 0xffff_ffff, + max: 0xffff_ffff }, // Limits of f64 @@ -30,7 +34,7 @@ export const kBit = { zero: BigInt(0x0000_0000_0000_0000n), subnormal: { min: BigInt(0x0000_0000_0000_0001n), - max: BigInt(0x000f_ffff_ffff_ffffn), + max: BigInt(0x000f_ffff_ffff_ffffn) }, infinity: BigInt(0x7ff0_0000_0000_0000n), nearest_max: BigInt(0x7fef_ffff_ffff_fffen), @@ -41,9 +45,9 @@ export const kBit = { half: BigInt(0x3ff9_21fb_5444_2d18n), third: BigInt(0x3ff0_c152_382d_7365n), quarter: BigInt(0x3fe9_21fb_5444_2d18n), - sixth: BigInt(0x3fe0_c152_382d_7365n), + sixth: BigInt(0x3fe0_c152_382d_7365n) }, - e: BigInt(0x4005_bf0a_8b14_5769n), + e: BigInt(0x4005_bf0a_8b14_5769n) }, negative: { max: BigInt(0x8010_0000_0000_0000n), @@ -51,7 +55,7 @@ export const kBit = { zero: BigInt(0x8000_0000_0000_0000n), subnormal: { max: BigInt(0x8000_0000_0000_0001n), - min: BigInt(0x800f_ffff_ffff_ffffn), + min: BigInt(0x800f_ffff_ffff_ffffn) }, infinity: BigInt(0xfff0_0000_0000_0000n), nearest_min: BigInt(0xffef_ffff_ffff_fffen), @@ -62,10 +66,10 @@ export const kBit = { half: BigInt(0xbff9_21fb_5444_2d18n), third: BigInt(0xbff0_c152_382d_7365n), quarter: BigInt(0xbfe9_21fb_5444_2d18n), - sixth: BigInt(0xbfe0_c152_382d_7365n), - }, + sixth: BigInt(0xbfe0_c152_382d_7365n) + } }, - max_ulp: BigInt(0x7ca0_0000_0000_0000n), + max_ulp: BigInt(0x7ca0_0000_0000_0000n) }, // Limits of f32 @@ -76,7 +80,7 @@ export const kBit = { zero: 0x0000_0000, subnormal: { min: 0x0000_0001, - max: 0x007f_ffff, + max: 0x007f_ffff }, infinity: 0x7f80_0000, nearest_max: 0x7f7f_fffe, @@ -87,9 +91,9 @@ export const kBit = { half: 0x3fc9_0fdb, third: 0x3f86_0a92, quarter: 0x3f49_0fdb, - sixth: 0x3f06_0a92, + sixth: 0x3f06_0a92 }, - e: 0x402d_f854, + e: 0x402d_f854 }, negative: { max: 0x8080_0000, @@ -97,7 +101,7 @@ export const kBit = { zero: 0x8000_0000, subnormal: { max: 0x8000_0001, - min: 0x807f_ffff, + min: 0x807f_ffff }, infinity: 0xff80_0000, nearest_min: 0xff7f_fffe, @@ -108,10 +112,10 @@ export const kBit = { half: 0xbfc9_0fdb, third: 0xbf86_0a92, quarter: 0xbf49_0fdb, - sixth: 0xbf06_0a92, - }, + sixth: 0xbf06_0a92 + } }, - max_ulp: 0x7380_0000, + max_ulp: 0x7380_0000 }, // Limits of f16 @@ -122,7 +126,7 @@ export const kBit = { zero: 0x0000, subnormal: { min: 0x0001, - max: 0x03ff, + max: 0x03ff }, infinity: 0x7c00, nearest_max: 0x7bfe, @@ -133,9 +137,9 @@ export const kBit = { half: 0x3e48, third: 0x3c30, quarter: 0x3a48, - sixth: 0x3830, + sixth: 0x3830 }, - e: 0x416f, + e: 0x416f }, negative: { max: 0x8400, @@ -143,7 +147,7 @@ export const kBit = { zero: 0x8000, subnormal: { max: 0x8001, - min: 0x83ff, + min: 0x83ff }, infinity: 0xfc00, nearest_min: 0xfbfe, @@ -154,10 +158,10 @@ export const kBit = { half: 0xbe48, third: 0xbc30, quarter: 0xba48, - sixth: 0xb830, - }, + sixth: 0xb830 + } }, - max_ulp: 0x5000, + max_ulp: 0x5000 }, // Uint32 representation of power(2, n) n = {0, ..., 31} @@ -195,7 +199,7 @@ export const kBit = { to28: 0x1000_0000, to29: 0x2000_0000, to30: 0x4000_0000, - to31: 0x8000_0000, + to31: 0x8000_0000 }, // Int32 representation of of -1 * power(2, n) n = {0, ..., 31} @@ -233,70 +237,27 @@ export const kBit = { to28: 0xf000_0000, to29: 0xe000_0000, to30: 0xc000_0000, - to31: 0x8000_0000, - }, + to31: 0x8000_0000 + } }; -/** - * @returns a 64-bit float value via interpreting the input as the bit - * representation as a 64-bit integer - * - * Using a locally defined function here to avoid compile time dependency - * issues. - */ -function reinterpretU64AsF64(input) { - return new Float64Array(new BigUint64Array([input]).buffer)[0]; -} - -/** - * @returns the 64-bit integer bit representation of 64-bit float value - * - * Using a locally defined function here to avoid compile time dependency - * issues. - */ -function reinterpretF64AsU64(input) { - return new BigUint64Array(new Float64Array([input]).buffer)[0]; -} - -/** - * @returns a 32-bit float value via interpreting the input as the bit - * representation as a 32-bit integer - * - * Using a locally defined function here to avoid compile time dependency - * issues. - */ -function reinterpretU32AsF32(input) { - return new Float32Array(new Uint32Array([input]).buffer)[0]; -} - -/** - * @returns a 16-bit float value via interpreting the input as the bit - * representation as a 64-bit integer - * - * Using a locally defined function here to avoid compile time dependency - * issues. - */ -function reinterpretU16AsF16(input) { - return new Float16Array(new Uint16Array([input]).buffer)[0]; -} - export const kValue = { // Limits of i32 i32: { positive: { min: 0, - max: 2147483647, + max: 2147483647 }, negative: { min: -2147483648, - max: 0, - }, + max: 0 + } }, // Limits of u32 u32: { min: 0, - max: 4294967295, + max: 4294967295 }, // Limits of f64 @@ -307,7 +268,7 @@ export const kValue = { zero: reinterpretU64AsF64(kBit.f64.positive.zero), subnormal: { min: reinterpretU64AsF64(kBit.f64.positive.subnormal.min), - max: reinterpretU64AsF64(kBit.f64.positive.subnormal.max), + max: reinterpretU64AsF64(kBit.f64.positive.subnormal.max) }, infinity: reinterpretU64AsF64(kBit.f64.positive.infinity), nearest_max: reinterpretU64AsF64(kBit.f64.positive.nearest_max), @@ -318,9 +279,9 @@ export const kValue = { half: reinterpretU64AsF64(kBit.f64.positive.pi.half), third: reinterpretU64AsF64(kBit.f64.positive.pi.third), quarter: reinterpretU64AsF64(kBit.f64.positive.pi.quarter), - sixth: reinterpretU64AsF64(kBit.f64.positive.pi.sixth), + sixth: reinterpretU64AsF64(kBit.f64.positive.pi.sixth) }, - e: reinterpretU64AsF64(kBit.f64.positive.e), + e: reinterpretU64AsF64(kBit.f64.positive.e) }, negative: { max: reinterpretU64AsF64(kBit.f64.negative.max), @@ -328,7 +289,7 @@ export const kValue = { zero: reinterpretU64AsF64(kBit.f64.negative.zero), subnormal: { max: reinterpretU64AsF64(kBit.f64.negative.subnormal.max), - min: reinterpretU64AsF64(kBit.f64.negative.subnormal.min), + min: reinterpretU64AsF64(kBit.f64.negative.subnormal.min) }, infinity: reinterpretU64AsF64(kBit.f64.negative.infinity), nearest_min: reinterpretU64AsF64(kBit.f64.negative.nearest_min), @@ -339,10 +300,10 @@ export const kValue = { half: reinterpretU64AsF64(kBit.f64.negative.pi.half), third: reinterpretU64AsF64(kBit.f64.negative.pi.third), quarter: reinterpretU64AsF64(kBit.f64.negative.pi.quarter), - sixth: reinterpretU64AsF64(kBit.f64.negative.pi.sixth), - }, + sixth: reinterpretU64AsF64(kBit.f64.negative.pi.sixth) + } }, - max_ulp: reinterpretU64AsF64(kBit.f64.max_ulp), + max_ulp: reinterpretU64AsF64(kBit.f64.max_ulp) }, // Limits of f32 @@ -353,7 +314,7 @@ export const kValue = { zero: reinterpretU32AsF32(kBit.f32.positive.zero), subnormal: { min: reinterpretU32AsF32(kBit.f32.positive.subnormal.min), - max: reinterpretU32AsF32(kBit.f32.positive.subnormal.max), + max: reinterpretU32AsF32(kBit.f32.positive.subnormal.max) }, infinity: reinterpretU32AsF32(kBit.f32.positive.infinity), @@ -365,20 +326,20 @@ export const kValue = { half: reinterpretU32AsF32(kBit.f32.positive.pi.half), third: reinterpretU32AsF32(kBit.f32.positive.pi.third), quarter: reinterpretU32AsF32(kBit.f32.positive.pi.quarter), - sixth: reinterpretU32AsF32(kBit.f32.positive.pi.sixth), + sixth: reinterpretU32AsF32(kBit.f32.positive.pi.sixth) }, e: reinterpretU32AsF32(kBit.f32.positive.e), // The positive pipeline-overridable constant with the smallest magnitude // which when cast to f32 will produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL. first_non_castable_pipeline_override: - reinterpretU32AsF32(kBit.f32.positive.max) / 2 + 2 ** 127, + reinterpretU32AsF32(kBit.f32.positive.max) / 2 + 2 ** 127, // The positive pipeline-overridable constant with the largest magnitude // which when cast to f32 will not produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL last_castable_pipeline_override: reinterpretU64AsF64( reinterpretF64AsU64(reinterpretU32AsF32(kBit.f32.positive.max) / 2 + 2 ** 127) - BigInt(1) - ), + ) }, negative: { max: reinterpretU32AsF32(kBit.f32.negative.max), @@ -386,7 +347,7 @@ export const kValue = { zero: reinterpretU32AsF32(kBit.f32.negative.zero), subnormal: { max: reinterpretU32AsF32(kBit.f32.negative.subnormal.max), - min: reinterpretU32AsF32(kBit.f32.negative.subnormal.min), + min: reinterpretU32AsF32(kBit.f32.negative.subnormal.min) }, infinity: reinterpretU32AsF32(kBit.f32.negative.infinity), nearest_min: reinterpretU32AsF32(kBit.f32.negative.nearest_min), @@ -397,43 +358,42 @@ export const kValue = { half: reinterpretU32AsF32(kBit.f32.negative.pi.half), third: reinterpretU32AsF32(kBit.f32.negative.pi.third), quarter: reinterpretU32AsF32(kBit.f32.negative.pi.quarter), - sixth: reinterpretU32AsF32(kBit.f32.negative.pi.sixth), + sixth: reinterpretU32AsF32(kBit.f32.negative.pi.sixth) }, // The negative pipeline-overridable constant with the smallest magnitude // which when cast to f32 will produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL. first_non_castable_pipeline_override: -( - reinterpretU32AsF32(kBit.f32.positive.max) / 2 + - 2 ** 127 - ), + reinterpretU32AsF32(kBit.f32.positive.max) / 2 + + 2 ** 127), // The negative pipeline-overridable constant with the largest magnitude // which when cast to f32 will not produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL. last_castable_pipeline_override: -reinterpretU64AsF64( reinterpretF64AsU64(reinterpretU32AsF32(kBit.f32.positive.max) / 2 + 2 ** 127) - BigInt(1) - ), + ) }, max_ulp: reinterpretU32AsF32(kBit.f32.max_ulp), - emax: 127, + emax: 127 }, // Limits of i16 i16: { positive: { min: 0, - max: 32767, + max: 32767 }, negative: { min: -32768, - max: 0, - }, + max: 0 + } }, // Limits of u16 u16: { min: 0, - max: 65535, + max: 65535 }, // Limits of f16 @@ -444,7 +404,7 @@ export const kValue = { zero: reinterpretU16AsF16(kBit.f16.positive.zero), subnormal: { min: reinterpretU16AsF16(kBit.f16.positive.subnormal.min), - max: reinterpretU16AsF16(kBit.f16.positive.subnormal.max), + max: reinterpretU16AsF16(kBit.f16.positive.subnormal.max) }, infinity: reinterpretU16AsF16(kBit.f16.positive.infinity), nearest_max: reinterpretU16AsF16(kBit.f16.positive.nearest_max), @@ -455,20 +415,20 @@ export const kValue = { half: reinterpretU16AsF16(kBit.f16.positive.pi.half), third: reinterpretU16AsF16(kBit.f16.positive.pi.third), quarter: reinterpretU16AsF16(kBit.f16.positive.pi.quarter), - sixth: reinterpretU16AsF16(kBit.f16.positive.pi.sixth), + sixth: reinterpretU16AsF16(kBit.f16.positive.pi.sixth) }, e: reinterpretU16AsF16(kBit.f16.positive.e), // The positive pipeline-overridable constant with the smallest magnitude // which when cast to f16 will produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL. first_non_castable_pipeline_override: - reinterpretU16AsF16(kBit.f16.positive.max) / 2 + 2 ** 15, + reinterpretU16AsF16(kBit.f16.positive.max) / 2 + 2 ** 15, // The positive pipeline-overridable constant with the largest magnitude // which when cast to f16 will not produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL last_castable_pipeline_override: reinterpretU64AsF64( reinterpretF64AsU64(reinterpretU16AsF16(kBit.f16.positive.max) / 2 + 2 ** 15) - BigInt(1) - ), + ) }, negative: { max: reinterpretU16AsF16(kBit.f16.negative.max), @@ -476,7 +436,7 @@ export const kValue = { zero: reinterpretU16AsF16(kBit.f16.negative.zero), subnormal: { max: reinterpretU16AsF16(kBit.f16.negative.subnormal.max), - min: reinterpretU16AsF16(kBit.f16.negative.subnormal.min), + min: reinterpretU16AsF16(kBit.f16.negative.subnormal.min) }, infinity: reinterpretU16AsF16(kBit.f16.negative.infinity), nearest_min: reinterpretU16AsF16(kBit.f16.negative.nearest_min), @@ -487,42 +447,41 @@ export const kValue = { half: reinterpretU16AsF16(kBit.f16.negative.pi.half), third: reinterpretU16AsF16(kBit.f16.negative.pi.third), quarter: reinterpretU16AsF16(kBit.f16.negative.pi.quarter), - sixth: reinterpretU16AsF16(kBit.f16.negative.pi.sixth), + sixth: reinterpretU16AsF16(kBit.f16.negative.pi.sixth) }, // The negative pipeline-overridable constant with the smallest magnitude // which when cast to f16 will produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL. first_non_castable_pipeline_override: -( - reinterpretU16AsF16(kBit.f16.positive.max) / 2 + - 2 ** 15 - ), + reinterpretU16AsF16(kBit.f16.positive.max) / 2 + + 2 ** 15), // The negative pipeline-overridable constant with the largest magnitude // which when cast to f16 will not produce infinity. This comes from WGSL // conversion rules and the rounding rules of WebIDL. last_castable_pipeline_override: -reinterpretU64AsF64( reinterpretF64AsU64(reinterpretU16AsF16(kBit.f16.positive.max) / 2 + 2 ** 15) - BigInt(1) - ), + ) }, max_ulp: reinterpretU16AsF16(kBit.f16.max_ulp), - emax: 15, + emax: 15 }, // Limits of i8 i8: { positive: { min: 0, - max: 127, + max: 127 }, negative: { min: -128, - max: 0, - }, + max: 0 + } }, // Limits of u8 u8: { min: 0, - max: 255, - }, -}; + max: 255 + } +}; \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/conversion.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/conversion.js index d49cdc1f057..a56c09b3b70 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/conversion.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/conversion.js @@ -1,9 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { Colors } from '../../common/util/colors.js'; -import { assert, objectEquals, unreachable } from '../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Colors } from '../../common/util/colors.js';import { assert, objectEquals, unreachable } from '../../common/util/util.js'; import { Float16Array } from '../../external/petamoriken/float16/float16.js'; + import { kBit } from './constants.js'; import { cartesianProduct, @@ -12,8 +12,8 @@ import { isFiniteF16, isSubnormalNumberF16, isSubnormalNumberF32, - isSubnormalNumberF64, -} from './math.js'; + isSubnormalNumberF64 } from +'./math.js'; /** * Encodes a JS `number` into a "normalized" (unorm/snorm) integer representation with `bits` bits. @@ -61,13 +61,31 @@ export function normalizedIntegerAsFloat(integer, bits, signed) { */ export function numbersApproximatelyEqual(a, b, maxDiff = 0) { return ( - (Number.isNaN(a) && Number.isNaN(b)) || - (a === Number.POSITIVE_INFINITY && b === Number.POSITIVE_INFINITY) || - (a === Number.NEGATIVE_INFINITY && b === Number.NEGATIVE_INFINITY) || - Math.abs(a - b) <= maxDiff - ); + Number.isNaN(a) && Number.isNaN(b) || + a === Number.POSITIVE_INFINITY && b === Number.POSITIVE_INFINITY || + a === Number.NEGATIVE_INFINITY && b === Number.NEGATIVE_INFINITY || + Math.abs(a - b) <= maxDiff); + } +/** + * Once-allocated ArrayBuffer/views to avoid overhead of allocation when converting between numeric formats + * + * workingData* is shared between multiple functions in this file, so to avoid re-entrancy problems, make sure in + * functions that use it that they don't call themselves or other functions that use workingData*. + */ +const workingData = new ArrayBuffer(8); +const workingDataU32 = new Uint32Array(workingData); +const workingDataU16 = new Uint16Array(workingData); +const workingDataU8 = new Uint8Array(workingData); +const workingDataF32 = new Float32Array(workingData); +const workingDataF16 = new Float16Array(workingData); +const workingDataI16 = new Int16Array(workingData); +const workingDataI32 = new Int32Array(workingData); +const workingDataI8 = new Int8Array(workingData); +const workingDataF64 = new Float64Array(workingData); +const workingDataView = new DataView(workingData); + /** * Encodes a JS `number` into an IEEE754 floating point number with the specified number of * sign, exponent, mantissa bits, and exponent bias. @@ -78,27 +96,32 @@ export function numbersApproximatelyEqual(a, b, maxDiff = 0) { * * MAINTENANCE_TODO: Replace usages of this with numberToFloatBits. */ -export function float32ToFloatBits(n, signBits, exponentBits, mantissaBits, bias) { +export function float32ToFloatBits( +n, +signBits, +exponentBits, +mantissaBits, +bias) +{ assert(exponentBits <= 8); assert(mantissaBits <= 23); if (Number.isNaN(n)) { // NaN = all exponent bits true, 1 or more mantissia bits true - return (((1 << exponentBits) - 1) << mantissaBits) | ((1 << mantissaBits) - 1); + return (1 << exponentBits) - 1 << mantissaBits | (1 << mantissaBits) - 1; } - const buf = new DataView(new ArrayBuffer(Float32Array.BYTES_PER_ELEMENT)); - buf.setFloat32(0, n, true); - const bits = buf.getUint32(0, true); + workingDataView.setFloat32(0, n, true); + const bits = workingDataView.getUint32(0, true); // bits (32): seeeeeeeefffffffffffffffffffffff // 0 or 1 - const sign = (bits >> 31) & signBits; + const sign = bits >> 31 & signBits; if (n === 0) { if (sign === 1) { // Handle negative zero. - return 1 << (exponentBits + mantissaBits); + return 1 << exponentBits + mantissaBits; } return 0; } @@ -111,14 +134,14 @@ export function float32ToFloatBits(n, signBits, exponentBits, mantissaBits, bias // Infinity = all exponent bits true, no mantissa bits true // plus the sign bit. return ( - (((1 << exponentBits) - 1) << mantissaBits) | (n < 0 ? 2 ** (exponentBits + mantissaBits) : 0) - ); + (1 << exponentBits) - 1 << mantissaBits | (n < 0 ? 2 ** (exponentBits + mantissaBits) : 0)); + } const mantissaBitsToDiscard = 23 - mantissaBits; // >> to remove mantissa, & to remove sign, - 127 to remove bias. - const exp = ((bits >> 23) & 0xff) - 127; + const exp = (bits >> 23 & 0xff) - 127; // Convert to the new biased exponent. const newBiasedExp = bias + exp; @@ -126,11 +149,11 @@ export function float32ToFloatBits(n, signBits, exponentBits, mantissaBits, bias if (newBiasedExp <= 0) { // Result is subnormal or zero. Round to (signed) zero. - return sign << (exponentBits + mantissaBits); + return sign << exponentBits + mantissaBits; } else { // Mask only the mantissa, and discard the lower bits. const newMantissa = (bits & 0x7fffff) >> mantissaBitsToDiscard; - return (sign << (exponentBits + mantissaBits)) | (newBiasedExp << mantissaBits) | newMantissa; + return sign << exponentBits + mantissaBits | newBiasedExp << mantissaBits | newMantissa; } } @@ -152,6 +175,8 @@ export function float16BitsToFloat32(float16Bits) { return floatBitsToNumber(float16Bits, kFloat16Format); } + + /** FloatFormat defining IEEE754 32-bit float. */ export const kFloat32Format = { signed: 1, exponentBits: 8, mantissaBits: 23, bias: 127 }; /** FloatFormat defining IEEE754 16-bit float. */ @@ -159,21 +184,6 @@ export const kFloat16Format = { signed: 1, exponentBits: 5, mantissaBits: 10, bi /** FloatFormat for 9 bit mantissa, 5 bit exponent unsigned float */ export const kUFloat9e5Format = { signed: 0, exponentBits: 5, mantissaBits: 9, bias: 15 }; -/** - * Once-allocated ArrayBuffer/views to avoid overhead of allocation when converting between numeric formats - * - * workingData* is shared between multiple functions in this file, so to avoid re-entrancy problems, make sure in - * functions that use it that they don't call themselves or other functions that use workingData*. - */ -const workingData = new ArrayBuffer(4); -const workingDataU32 = new Uint32Array(workingData); -const workingDataU16 = new Uint16Array(workingData); -const workingDataU8 = new Uint8Array(workingData); -const workingDataF32 = new Float32Array(workingData); -const workingDataF16 = new Float16Array(workingData); -const workingDataI16 = new Int16Array(workingData); -const workingDataI8 = new Int8Array(workingData); - /** Bitcast u32 (represented as integer Number) to f32 (represented as floating-point Number). */ export function float32BitsToNumber(bits) { workingDataU32[0] = bits; @@ -200,21 +210,21 @@ export function floatBitsToNumber(bits, fmt) { const kNonSignBits = fmt.exponentBits + fmt.mantissaBits; const kNonSignBitsMask = (1 << kNonSignBits) - 1; const exponentAndMantissaBits = bits & kNonSignBitsMask; - const exponentMask = ((1 << fmt.exponentBits) - 1) << fmt.mantissaBits; + const exponentMask = (1 << fmt.exponentBits) - 1 << fmt.mantissaBits; const infinityOrNaN = (bits & exponentMask) === exponentMask; if (infinityOrNaN) { const mantissaMask = (1 << fmt.mantissaBits) - 1; const signBit = 2 ** kNonSignBits; const isNegative = (bits & signBit) !== 0; - return bits & mantissaMask - ? Number.NaN - : isNegative - ? Number.NEGATIVE_INFINITY - : Number.POSITIVE_INFINITY; + return bits & mantissaMask ? + Number.NaN : + isNegative ? + Number.NEGATIVE_INFINITY : + Number.POSITIVE_INFINITY; } let f32BitsWithWrongBias = - exponentAndMantissaBits << (kFloat32Format.mantissaBits - fmt.mantissaBits); - f32BitsWithWrongBias |= (bits << (31 - kNonSignBits)) & 0x8000_0000; + exponentAndMantissaBits << kFloat32Format.mantissaBits - fmt.mantissaBits; + f32BitsWithWrongBias |= bits << 31 - kNonSignBits & 0x8000_0000; const numberWithWrongBias = float32BitsToNumber(f32BitsWithWrongBias); return numberWithWrongBias * 2 ** (kFloat32Format.bias - fmt.bias); } @@ -256,8 +266,8 @@ export function numberToFloatBits(number, fmt) { * Positive and negative 0 are both considered to be 0 ULPs from 0. */ export function floatBitsToNormalULPFromZero(bits, fmt) { - const mask_sign = fmt.signed << (fmt.exponentBits + fmt.mantissaBits); - const mask_expt = ((1 << fmt.exponentBits) - 1) << fmt.mantissaBits; + const mask_sign = fmt.signed << fmt.exponentBits + fmt.mantissaBits; + const mask_expt = (1 << fmt.exponentBits) - 1 << fmt.mantissaBits; const mask_mant = (1 << fmt.mantissaBits) - 1; const mask_rest = mask_expt | mask_mant; @@ -289,7 +299,7 @@ export function packRGB9E5UFloat(r, g, b) { const N = 9; // number of mantissa bits const Emax = 31; // max exponent const B = 15; // exponent bias - const sharedexp_max = (((1 << N) - 1) / (1 << N)) * 2 ** (Emax - B); + const sharedexp_max = ((1 << N) - 1) / (1 << N) * 2 ** (Emax - B); const red_c = clamp(r, { min: 0, max: sharedexp_max }); const green_c = clamp(g, { min: 0, max: sharedexp_max }); const blue_c = clamp(b, { min: 0, max: sharedexp_max }); @@ -305,7 +315,7 @@ export function packRGB9E5UFloat(r, g, b) { assert(green_s >= 0 && green_s <= 0b111111111); assert(blue_s >= 0 && blue_s <= 0b111111111); assert(exp_shared >= 0 && exp_shared <= 0b11111); - return ((exp_shared << 27) | (blue_s << 18) | (green_s << 9) | red_s) >>> 0; + return (exp_shared << 27 | blue_s << 18 | green_s << 9 | red_s) >>> 0; } /** @@ -315,15 +325,15 @@ export function packRGB9E5UFloat(r, g, b) { export function unpackRGB9E5UFloat(encoded) { const N = 9; // number of mantissa bits const B = 15; // exponent bias - const red_s = (encoded >>> 0) & 0b111111111; - const green_s = (encoded >>> 9) & 0b111111111; - const blue_s = (encoded >>> 18) & 0b111111111; - const exp_shared = (encoded >>> 27) & 0b11111; + const red_s = encoded >>> 0 & 0b111111111; + const green_s = encoded >>> 9 & 0b111111111; + const blue_s = encoded >>> 18 & 0b111111111; + const exp_shared = encoded >>> 27 & 0b11111; const exp = Math.pow(2, exp_shared - B - N); return { R: exp * red_s, G: exp * green_s, - B: exp * blue_s, + B: exp * blue_s }; } @@ -345,18 +355,18 @@ export function unpackRGB9E5UFloat(encoded) { export function pack2x16float(x, y) { // Generates all possible valid u16 bit fields for a given f32 to f16 conversion. // Assumes FTZ for both the f32 and f16 value is allowed. - const generateU16s = n => { + const generateU16s = (n) => { let contains_subnormals = isSubnormalNumberF32(n); const n_f16s = correctlyRoundedF16(n); contains_subnormals ||= n_f16s.some(isSubnormalNumberF16); - const n_u16s = n_f16s.map(f16 => { + const n_u16s = n_f16s.map((f16) => { workingDataF16[0] = f16; return workingDataU16[0]; }); - const contains_poszero = n_u16s.some(u => u === kBit.f16.positive.zero); - const contains_negzero = n_u16s.some(u => u === kBit.f16.negative.zero); + const contains_poszero = n_u16s.some((u) => u === kBit.f16.positive.zero); + const contains_negzero = n_u16s.some((u) => u === kBit.f16.negative.zero); if (!contains_negzero && (contains_poszero || contains_subnormals)) { n_u16s.push(kBit.f16.negative.zero); } @@ -401,7 +411,7 @@ export function pack2x16snorm(x, y) { // Converts f32 to i16 via the pack2x16snorm formula. // FTZ is not explicitly handled, because all subnormals will produce a value // between 0 and 1, but significantly away from the edges, so floor goes to 0. - const generateI16 = n => { + const generateI16 = (n) => { return Math.floor(0.5 + 32767 * Math.min(1, Math.max(-1, n))); }; @@ -427,7 +437,7 @@ export function pack2x16unorm(x, y) { // Converts f32 to u16 via the pack2x16unorm formula. // FTZ is not explicitly handled, because all subnormals will produce a value // between 0.5 and much less than 1, so floor goes to 0. - const generateU16 = n => { + const generateU16 = (n) => { return Math.floor(0.5 + 65535 * Math.min(1, Math.max(0, n))); }; @@ -452,7 +462,7 @@ export function pack4x8snorm(...vals) { // Converts f32 to u8 via the pack4x8snorm formula. // FTZ is not explicitly handled, because all subnormals will produce a value // between 0 and 1, so floor goes to 0. - const generateI8 = n => { + const generateI8 = (n) => { return Math.floor(0.5 + 127 * Math.min(1, Math.max(-1, n))); }; @@ -478,7 +488,7 @@ export function pack4x8unorm(...vals) { // Converts f32 to u8 via the pack4x8unorm formula. // FTZ is not explicitly handled, because all subnormals will produce a value // between 0.5 and much less than 1, so floor goes to 0. - const generateU8 = n => { + const generateU8 = (n) => { return Math.floor(0.5 + 255 * Math.min(1, Math.max(0, n))); }; @@ -511,7 +521,7 @@ export function assertInIntegerRange(n, bits, signed) { * Converts a linear value into a "gamma"-encoded value using the sRGB-clamped transfer function. */ export function gammaCompress(n) { - n = n <= 0.0031308 ? (323 * n) / 25 : (211 * Math.pow(n, 5 / 12) - 11) / 200; + n = n <= 0.0031308 ? 323 * n / 25 : (211 * Math.pow(n, 5 / 12) - 11) / 200; return clamp(n, { min: 0, max: 1 }); } @@ -519,68 +529,66 @@ export function gammaCompress(n) { * Converts a "gamma"-encoded value into a linear value using the sRGB-clamped transfer function. */ export function gammaDecompress(n) { - n = n <= 0.04045 ? (n * 25) / 323 : Math.pow((200 * n + 11) / 211, 12 / 5); + n = n <= 0.04045 ? n * 25 / 323 : Math.pow((200 * n + 11) / 211, 12 / 5); return clamp(n, { min: 0, max: 1 }); } /** Converts a 32-bit float value to a 32-bit unsigned integer value */ export function float32ToUint32(f32) { - const f32Arr = new Float32Array(1); - f32Arr[0] = f32; - const u32Arr = new Uint32Array(f32Arr.buffer); - return u32Arr[0]; + workingDataF32[0] = f32; + return workingDataU32[0]; } /** Converts a 32-bit unsigned integer value to a 32-bit float value */ export function uint32ToFloat32(u32) { - const u32Arr = new Uint32Array(1); - u32Arr[0] = u32; - const f32Arr = new Float32Array(u32Arr.buffer); - return f32Arr[0]; + workingDataU32[0] = u32; + return workingDataF32[0]; } /** Converts a 32-bit float value to a 32-bit signed integer value */ export function float32ToInt32(f32) { - const f32Arr = new Float32Array(1); - f32Arr[0] = f32; - const i32Arr = new Int32Array(f32Arr.buffer); - return i32Arr[0]; + workingDataF32[0] = f32; + return workingDataI32[0]; } /** Converts a 32-bit unsigned integer value to a 32-bit signed integer value */ export function uint32ToInt32(u32) { - const u32Arr = new Uint32Array(1); - u32Arr[0] = u32; - const i32Arr = new Int32Array(u32Arr.buffer); - return i32Arr[0]; + workingDataU32[0] = u32; + return workingDataI32[0]; } /** Converts a 16-bit float value to a 16-bit unsigned integer value */ export function float16ToUint16(f16) { - const f16Arr = new Float16Array(1); - f16Arr[0] = f16; - const u16Arr = new Uint16Array(f16Arr.buffer); - return u16Arr[0]; + workingDataF16[0] = f16; + return workingDataU16[0]; } /** Converts a 16-bit unsigned integer value to a 16-bit float value */ export function uint16ToFloat16(u16) { - const u16Arr = new Uint16Array(1); - u16Arr[0] = u16; - const f16Arr = new Float16Array(u16Arr.buffer); - return f16Arr[0]; + workingDataU16[0] = u16; + return workingDataF16[0]; } /** Converts a 16-bit float value to a 16-bit signed integer value */ export function float16ToInt16(f16) { - const f16Arr = new Float16Array(1); - f16Arr[0] = f16; - const i16Arr = new Int16Array(f16Arr.buffer); - return i16Arr[0]; + workingDataF16[0] = f16; + return workingDataI16[0]; } /** A type of number representable by Scalar. */ + + + + + + + + + + + + /** ScalarType describes the type of WGSL Scalar. */ export class ScalarType { // The named type @@ -601,7 +609,7 @@ export class ScalarType { return this._size; } - /** Constructs a Scalar of this type with @p value */ + /** Constructs a Scalar of this type with `value` */ create(value) { switch (this.kind) { case 'abstract-float': @@ -668,7 +676,7 @@ export class VectorType { } else { value = Array(this.width).fill(value); } - return new Vector(value.map(v => this.elementType.create(v))); + return new Vector(value.map((v) => this.elementType.create(v))); } } @@ -697,11 +705,10 @@ export class MatrixType { this.rows = rows; assert( elementType.kind === 'f32' || - elementType.kind === 'f16' || - elementType.kind === 'abstract-float', + elementType.kind === 'f16' || + elementType.kind === 'abstract-float', "MatrixType can only have elementType of 'f32' or 'f16' or 'abstract-float'" ); - this.elementType = elementType; } @@ -710,7 +717,7 @@ export class MatrixType { * given byte offset */ read(buf, offset) { - const elements = [...Array(this.cols)].map(_ => [...Array(this.rows)]); + const elements = [...Array(this.cols)].map((_) => [...Array(this.rows)]); for (let c = 0; c < this.cols; c++) { for (let r = 0; r < this.rows; r++) { elements[c][r] = this.elementType.read(buf, offset); @@ -746,48 +753,49 @@ export function TypeMat(cols, rows, elementType) { /** Type is a ScalarType, VectorType, or MatrixType. */ + +/** Copy bytes from `buf` at `offset` into the working data, then read it out using `workingDataOut` */ +function valueFromBytes(workingDataOut, buf, offset) { + for (let i = 0; i < workingDataOut.BYTES_PER_ELEMENT; ++i) { + workingDataU8[i] = buf[offset + i]; + } + return workingDataOut[0]; +} + export const TypeI32 = new ScalarType('i32', 4, (buf, offset) => - i32(new Int32Array(buf.buffer, offset)[0]) +i32(valueFromBytes(workingDataI32, buf, offset)) ); - export const TypeU32 = new ScalarType('u32', 4, (buf, offset) => - u32(new Uint32Array(buf.buffer, offset)[0]) +u32(valueFromBytes(workingDataU32, buf, offset)) ); - -export const TypeAbstractFloat = new ScalarType('abstract-float', 8, (buf, offset) => - abstractFloat(new Float64Array(buf.buffer, offset)[0]) +export const TypeAbstractFloat = new ScalarType( + 'abstract-float', + 8, + (buf, offset) => abstractFloat(valueFromBytes(workingDataF64, buf, offset)) ); - export const TypeF64 = new ScalarType('f64', 8, (buf, offset) => - f64(new Float64Array(buf.buffer, offset)[0]) +f64(valueFromBytes(workingDataF64, buf, offset)) ); - export const TypeF32 = new ScalarType('f32', 4, (buf, offset) => - f32(new Float32Array(buf.buffer, offset)[0]) +f32(valueFromBytes(workingDataF32, buf, offset)) ); - export const TypeI16 = new ScalarType('i16', 2, (buf, offset) => - i16(new Int16Array(buf.buffer, offset)[0]) +i16(valueFromBytes(workingDataI16, buf, offset)) ); - export const TypeU16 = new ScalarType('u16', 2, (buf, offset) => - u16(new Uint16Array(buf.buffer, offset)[0]) +u16(valueFromBytes(workingDataU16, buf, offset)) ); - export const TypeF16 = new ScalarType('f16', 2, (buf, offset) => - f16Bits(new Uint16Array(buf.buffer, offset)[0]) +f16Bits(valueFromBytes(workingDataU16, buf, offset)) ); - export const TypeI8 = new ScalarType('i8', 1, (buf, offset) => - i8(new Int8Array(buf.buffer, offset)[0]) +i8(valueFromBytes(workingDataI8, buf, offset)) ); - export const TypeU8 = new ScalarType('u8', 1, (buf, offset) => - u8(new Uint8Array(buf.buffer, offset)[0]) +u8(valueFromBytes(workingDataU8, buf, offset)) ); - export const TypeBool = new ScalarType('bool', 4, (buf, offset) => - bool(new Uint32Array(buf.buffer, offset)[0] !== 0) +bool(valueFromBytes(workingDataU32, buf, offset) !== 0) ); /** @returns the ScalarType from the ScalarKind */ @@ -862,27 +870,35 @@ export function scalarTypeOf(ty) { /** ScalarValue is the JS type that can be held by a Scalar */ + /** Class that encapsulates a single scalar value of various types. */ export class Scalar { // The scalar value // The type of the scalar - // The scalar value packed in a Uint8Array - constructor(type, value, bits) { + // The scalar value, packed in one or two 32-bit unsigned integers. + // Whether or not the bits1 is used depends on `this.type.size`. + + + + constructor(type, value, bits1, bits0) { this.value = value; this.type = type; - this.bits = new Uint8Array(bits.buffer); + this.bits1 = bits1; + this.bits0 = bits0; } /** - * Copies the scalar value to the Uint8Array buffer at the provided byte offset. + * Copies the scalar value to the buffer at the provided byte offset. * @param buffer the destination buffer - * @param offset the byte offset within buffer + * @param offset the offset in buffer, in units of `buffer` */ copyTo(buffer, offset) { assert(this.type.kind !== 'f64', `Copying f64 values to/from buffers is not defined`); - for (let i = 0; i < this.bits.length; i++) { - buffer[offset + i] = this.bits[i]; + workingDataU32[1] = this.bits1; + workingDataU32[0] = this.bits0; + for (let i = 0; i < this.type.size; i++) { + buffer[offset + i] = workingDataU8[i]; } } @@ -890,7 +906,7 @@ export class Scalar { * @returns the WGSL representation of this scalar value */ wgsl() { - const withPoint = x => { + const withPoint = (x) => { const str = `${x}`; return str.indexOf('.') > 0 || str.indexOf('e') > 0 ? str : `${str}.0`; }; @@ -925,147 +941,153 @@ export class Scalar { case Infinity: case -Infinity: return Colors.bold(this.value.toString()); - default: { - // Uint8Array.map returns a Uint8Array, so cannot use .map directly - const hex = Array.from(this.bits) - .reverse() - .map(x => x.toString(16).padStart(2, '0')) - .join(''); - const n = this.value; - if (n !== null && isFloatValue(this)) { - let str = this.value.toString(); - str = str.indexOf('.') > 0 || str.indexOf('e') > 0 ? str : `${str}.0`; - switch (this.type.kind) { - case 'abstract-float': - return isSubnormalNumberF64(n.valueOf()) - ? `${Colors.bold(str)} (0x${hex} subnormal)` - : `${Colors.bold(str)} (0x${hex})`; - case 'f64': - return isSubnormalNumberF64(n.valueOf()) - ? `${Colors.bold(str)} (0x${hex} subnormal)` - : `${Colors.bold(str)} (0x${hex})`; - case 'f32': - return isSubnormalNumberF32(n.valueOf()) - ? `${Colors.bold(str)} (0x${hex} subnormal)` - : `${Colors.bold(str)} (0x${hex})`; - case 'f16': - return isSubnormalNumberF16(n.valueOf()) - ? `${Colors.bold(str)} (0x${hex} subnormal)` - : `${Colors.bold(str)} (0x${hex})`; - default: - unreachable( - `Printing of floating point kind ${this.type.kind} is not implemented...` - ); + default:{ + workingDataU32[1] = this.bits1; + workingDataU32[0] = this.bits0; + let hex = ''; + for (let i = 0; i < this.type.size; ++i) { + hex = workingDataU8[i].toString(16).padStart(2, '0') + hex; } + const n = this.value; + if (n !== null && isFloatValue(this)) { + let str = this.value.toString(); + str = str.indexOf('.') > 0 || str.indexOf('e') > 0 ? str : `${str}.0`; + switch (this.type.kind) { + case 'abstract-float': + return isSubnormalNumberF64(n.valueOf()) ? + `${Colors.bold(str)} (0x${hex} subnormal)` : + `${Colors.bold(str)} (0x${hex})`; + case 'f64': + return isSubnormalNumberF64(n.valueOf()) ? + `${Colors.bold(str)} (0x${hex} subnormal)` : + `${Colors.bold(str)} (0x${hex})`; + case 'f32': + return isSubnormalNumberF32(n.valueOf()) ? + `${Colors.bold(str)} (0x${hex} subnormal)` : + `${Colors.bold(str)} (0x${hex})`; + case 'f16': + return isSubnormalNumberF16(n.valueOf()) ? + `${Colors.bold(str)} (0x${hex} subnormal)` : + `${Colors.bold(str)} (0x${hex})`; + default: + unreachable( + `Printing of floating point kind ${this.type.kind} is not implemented...` + ); + } + } + return `${Colors.bold(this.value.toString())} (0x${hex})`; } - return `${Colors.bold(this.value.toString())} (0x${hex})`; - } } } } + + + + +/** Create a Scalar of `type` by storing `value` as an element of `workingDataArray` and retrieving it. + * The working data array *must* be an alias of `workingData`. + */ +function scalarFromValue( +type, +workingDataArray, +value) +{ + // Clear all bits of the working data since `value` may be smaller; the upper bits should be 0. + workingDataU32[1] = 0; + workingDataU32[0] = 0; + workingDataArray[0] = value; + return new Scalar(type, workingDataArray[0], workingDataU32[1], workingDataU32[0]); +} + +/** Create a Scalar of `type` by storing `value` as an element of `workingDataStoreArray` and + * reinterpreting it as an element of `workingDataLoadArray`. + * Both working data arrays *must* be aliases of `workingData`. + */ +function scalarFromBits( +type, +workingDataStoreArray, +workingDataLoadArray, +bits) +{ + // Clear all bits of the working data since `value` may be smaller; the upper bits should be 0. + workingDataU32[1] = 0; + workingDataU32[0] = 0; + workingDataStoreArray[0] = bits; + return new Scalar(type, workingDataLoadArray[0], workingDataU32[1], workingDataU32[0]); +} + /** Create an AbstractFloat from a numeric value, a JS `number`. */ -export function abstractFloat(value) { - const arr = new Float64Array([value]); - return new Scalar(TypeAbstractFloat, arr[0], arr); -} +export const abstractFloat = (value) => +scalarFromValue(TypeAbstractFloat, workingDataF64, value); + /** Create an f64 from a numeric value, a JS `number`. */ -export function f64(value) { - const arr = new Float64Array([value]); - return new Scalar(TypeF64, arr[0], arr); -} +export const f64 = (value) => scalarFromValue(TypeF64, workingDataF64, value); + /** Create an f32 from a numeric value, a JS `number`. */ -export function f32(value) { - const arr = new Float32Array([value]); - return new Scalar(TypeF32, arr[0], arr); -} +export const f32 = (value) => scalarFromValue(TypeF32, workingDataF32, value); + /** Create an f16 from a numeric value, a JS `number`. */ -export function f16(value) { - const arr = new Float16Array([value]); - return new Scalar(TypeF16, arr[0], arr); -} +export const f16 = (value) => scalarFromValue(TypeF16, workingDataF16, value); + /** Create an f32 from a bit representation, a uint32 represented as a JS `number`. */ -export function f32Bits(bits) { - const arr = new Uint32Array([bits]); - return new Scalar(TypeF32, new Float32Array(arr.buffer)[0], arr); -} +export const f32Bits = (bits) => +scalarFromBits(TypeF32, workingDataU32, workingDataF32, bits); + /** Create an f16 from a bit representation, a uint16 represented as a JS `number`. */ -export function f16Bits(bits) { - const arr = new Uint16Array([bits]); - return new Scalar(TypeF16, new Float16Array(arr.buffer)[0], arr); -} +export const f16Bits = (bits) => +scalarFromBits(TypeF16, workingDataU16, workingDataF16, bits); /** Create an i32 from a numeric value, a JS `number`. */ -export function i32(value) { - const arr = new Int32Array([value]); - return new Scalar(TypeI32, arr[0], arr); -} +export const i32 = (value) => scalarFromValue(TypeI32, workingDataI32, value); + /** Create an i16 from a numeric value, a JS `number`. */ -export function i16(value) { - const arr = new Int16Array([value]); - return new Scalar(TypeI16, arr[0], arr); -} +export const i16 = (value) => scalarFromValue(TypeI16, workingDataI16, value); + /** Create an i8 from a numeric value, a JS `number`. */ -export function i8(value) { - const arr = new Int8Array([value]); - return new Scalar(TypeI8, arr[0], arr); -} +export const i8 = (value) => scalarFromValue(TypeI8, workingDataI8, value); /** Create an i32 from a bit representation, a uint32 represented as a JS `number`. */ -export function i32Bits(bits) { - const arr = new Uint32Array([bits]); - return new Scalar(TypeI32, new Int32Array(arr.buffer)[0], arr); -} +export const i32Bits = (bits) => +scalarFromBits(TypeI32, workingDataU32, workingDataI32, bits); + /** Create an i16 from a bit representation, a uint16 represented as a JS `number`. */ -export function i16Bits(bits) { - const arr = new Uint16Array([bits]); - return new Scalar(TypeI16, new Int16Array(arr.buffer)[0], arr); -} +export const i16Bits = (bits) => +scalarFromBits(TypeI16, workingDataU16, workingDataI16, bits); + /** Create an i8 from a bit representation, a uint8 represented as a JS `number`. */ -export function i8Bits(bits) { - const arr = new Uint8Array([bits]); - return new Scalar(TypeI8, new Int8Array(arr.buffer)[0], arr); -} +export const i8Bits = (bits) => +scalarFromBits(TypeI8, workingDataU8, workingDataI8, bits); /** Create a u32 from a numeric value, a JS `number`. */ -export function u32(value) { - const arr = new Uint32Array([value]); - return new Scalar(TypeU32, arr[0], arr); -} +export const u32 = (value) => scalarFromValue(TypeU32, workingDataU32, value); + /** Create a u16 from a numeric value, a JS `number`. */ -export function u16(value) { - const arr = new Uint16Array([value]); - return new Scalar(TypeU16, arr[0], arr); -} +export const u16 = (value) => scalarFromValue(TypeU16, workingDataU16, value); + /** Create a u8 from a numeric value, a JS `number`. */ -export function u8(value) { - const arr = new Uint8Array([value]); - return new Scalar(TypeU8, arr[0], arr); -} +export const u8 = (value) => scalarFromValue(TypeU8, workingDataU8, value); /** Create an u32 from a bit representation, a uint32 represented as a JS `number`. */ -export function u32Bits(bits) { - const arr = new Uint32Array([bits]); - return new Scalar(TypeU32, bits, arr); -} +export const u32Bits = (bits) => +scalarFromBits(TypeU32, workingDataU32, workingDataU32, bits); + /** Create an u16 from a bit representation, a uint16 represented as a JS `number`. */ -export function u16Bits(bits) { - const arr = new Uint16Array([bits]); - return new Scalar(TypeU16, bits, arr); -} +export const u16Bits = (bits) => +scalarFromBits(TypeU16, workingDataU16, workingDataU16, bits); + /** Create an u8 from a bit representation, a uint8 represented as a JS `number`. */ -export function u8Bits(bits) { - const arr = new Uint8Array([bits]); - return new Scalar(TypeU8, bits, arr); -} +export const u8Bits = (bits) => +scalarFromBits(TypeU8, workingDataU8, workingDataU8, bits); /** Create a boolean value. */ export function bool(value) { // WGSL does not support using 'bool' types directly in storage / uniform // buffers, so instead we pack booleans in a u32, where 'false' is zero and // 'true' is any non-zero value. - const arr = new Uint32Array([value ? 1 : 0]); - return new Scalar(TypeBool, value, arr); + workingDataU32[0] = value ? 1 : 0; + workingDataU32[1] = 0; + return new Scalar(TypeBool, value, workingDataU32[1], workingDataU32[0]); } /** A 'true' literal value */ @@ -1074,106 +1096,13 @@ export const True = bool(true); /** A 'false' literal value */ export const False = bool(false); -// Encoding to u32s, instead of BigInt, for serialization -export function reinterpretF64AsU32s(f64) { - const array = new Float64Array(1); - array[0] = f64; - const u32s = new Uint32Array(array.buffer); - return [u32s[0], u32s[1]]; -} - -// De-encoding from u32s, instead of BigInt, for serialization -export function reinterpretU32sAsF64(u32s) { - const array = new Uint32Array(2); - array[0] = u32s[0]; - array[1] = u32s[1]; - return new Float64Array(array.buffer)[0]; -} - -/** - * @returns a number representing the u32 interpretation - * of the bits of a number assumed to be an f32 value. - */ -export function reinterpretF32AsU32(f32) { - const array = new Float32Array(1); - array[0] = f32; - return new Uint32Array(array.buffer)[0]; -} - -/** - * @returns a number representing the i32 interpretation - * of the bits of a number assumed to be an f32 value. - */ -export function reinterpretF32AsI32(f32) { - const array = new Float32Array(1); - array[0] = f32; - return new Int32Array(array.buffer)[0]; -} - -/** - * @returns a number representing the f32 interpretation - * of the bits of a number assumed to be an u32 value. - */ -export function reinterpretU32AsF32(u32) { - const array = new Uint32Array(1); - array[0] = u32; - return new Float32Array(array.buffer)[0]; -} - -/** - * @returns a number representing the i32 interpretation - * of the bits of a number assumed to be an u32 value. - */ -export function reinterpretU32AsI32(u32) { - const array = new Uint32Array(1); - array[0] = u32; - return new Int32Array(array.buffer)[0]; -} - -/** - * @returns a number representing the u32 interpretation - * of the bits of a number assumed to be an i32 value. - */ -export function reinterpretI32AsU32(i32) { - const array = new Int32Array(1); - array[0] = i32; - return new Uint32Array(array.buffer)[0]; -} - -/** - * @returns a number representing the f32 interpretation - * of the bits of a number assumed to be an i32 value. - */ -export function reinterpretI32AsF32(i32) { - const array = new Int32Array(1); - array[0] = i32; - return new Float32Array(array.buffer)[0]; -} - -/** - * @returns a number representing the u16 interpretation - * of the bits of a number assumed to be an f16 value. - */ -export function reinterpretF16AsU16(f16) { - const array = new Float16Array(1); - array[0] = f16; - return new Uint16Array(array.buffer)[0]; -} - -/** - * @returns a number representing the f16 interpretation - * of the bits of a number assumed to be an u16 value. - */ -export function reinterpretU16AsF16(u16) { - const array = new Uint16Array(1); - array[0] = u16; - return new Float16Array(array.buffer)[0]; -} - /** * Class that encapsulates a vector value. */ export class Vector { + + + constructor(elements) { if (elements.length < 2 || elements.length > 4) { throw new Error(`vector element count must be between 2 and 4, got ${elements.length}`); @@ -1207,12 +1136,12 @@ export class Vector { * @returns the WGSL representation of this vector value */ wgsl() { - const els = this.elements.map(v => v.wgsl()).join(', '); + const els = this.elements.map((v) => v.wgsl()).join(', '); return `vec${this.type.width}(${els})`; } toString() { - return `${this.type}(${this.elements.map(e => e.toString()).join(', ')})`; + return `${this.type}(${this.elements.map((e) => e.toString()).join(', ')})`; } get x() { @@ -1266,7 +1195,6 @@ export function toVector(v, op) { case 4: return vec4(op(v[0]), op(v[1]), op(v[2]), op(v[3])); } - unreachable(`input to 'toVector' must contain 2, 3, or 4 elements`); } @@ -1274,6 +1202,9 @@ export function toVector(v, op) { * Class that encapsulates a Matrix value. */ export class Matrix { + + + constructor(elements) { const num_cols = elements.length; if (num_cols < 2 || num_cols > 4) { @@ -1281,7 +1212,7 @@ export class Matrix { } const num_rows = elements[0].length; - if (!elements.every(c => c.length === num_rows)) { + if (!elements.every((c) => c.length === num_rows)) { throw new Error(`cannot mix matrix column lengths`); } @@ -1290,7 +1221,7 @@ export class Matrix { } const elem_type = elements[0][0].type; - if (!elements.every(c => c.every(r => objectEquals(r.type, elem_type)))) { + if (!elements.every((c) => c.every((r) => objectEquals(r.type, elem_type)))) { throw new Error(`cannot mix matrix element types`); } @@ -1321,12 +1252,12 @@ export class Matrix { * @returns the WGSL representation of this matrix value */ wgsl() { - const els = this.elements.flatMap(c => c.map(r => r.wgsl())).join(', '); + const els = this.elements.flatMap((c) => c.map((r) => r.wgsl())).join(', '); return `mat${this.type.cols}x${this.type.rows}(${els})`; } toString() { - return `${this.type}(${this.elements.map(c => c.join(', ')).join(', ')})`; + return `${this.type}(${this.elements.map((c) => c.join(', ')).join(', ')})`; } } @@ -1340,7 +1271,7 @@ export class Matrix { export function toMatrix(m, op) { const cols = m.length; const rows = m[0].length; - const elements = [...Array(cols)].map(_ => [...Array(rows)]); + const elements = [...Array(cols)].map((_) => [...Array(rows)]); for (let i = 0; i < cols; i++) { for (let j = 0; j < rows; j++) { elements[i][j] = op(m[i][j]); @@ -1350,86 +1281,243 @@ export function toMatrix(m, op) { return new Matrix(elements); } -/** Value is a Scalar or Vector value. */ +/** Value is a Scalar or Vector value. */var -export function serializeValue(v) { - const value = (kind, s) => { + + + + + + + + + + + + + + + + + + + +SerializedScalarKind = /*#__PURE__*/function (SerializedScalarKind) {SerializedScalarKind[SerializedScalarKind["AbstractFloat"] = 0] = "AbstractFloat";SerializedScalarKind[SerializedScalarKind["F64"] = 1] = "F64";SerializedScalarKind[SerializedScalarKind["F32"] = 2] = "F32";SerializedScalarKind[SerializedScalarKind["F16"] = 3] = "F16";SerializedScalarKind[SerializedScalarKind["U32"] = 4] = "U32";SerializedScalarKind[SerializedScalarKind["U16"] = 5] = "U16";SerializedScalarKind[SerializedScalarKind["U8"] = 6] = "U8";SerializedScalarKind[SerializedScalarKind["I32"] = 7] = "I32";SerializedScalarKind[SerializedScalarKind["I16"] = 8] = "I16";SerializedScalarKind[SerializedScalarKind["I8"] = 9] = "I8";SerializedScalarKind[SerializedScalarKind["Bool"] = 10] = "Bool";return SerializedScalarKind;}(SerializedScalarKind || {}); + + + + + + + + + + + + + +/** serializeScalarKind() serializes a ScalarKind to a BinaryStream */ +function serializeScalarKind(s, v) { + switch (v) { + case 'abstract-float': + s.writeU8(SerializedScalarKind.AbstractFloat); + return; + case 'f64': + s.writeU8(SerializedScalarKind.F64); + return; + case 'f32': + s.writeU8(SerializedScalarKind.F32); + return; + case 'f16': + s.writeU8(SerializedScalarKind.F16); + return; + case 'u32': + s.writeU8(SerializedScalarKind.U32); + return; + case 'u16': + s.writeU8(SerializedScalarKind.U16); + return; + case 'u8': + s.writeU8(SerializedScalarKind.U8); + return; + case 'i32': + s.writeU8(SerializedScalarKind.I32); + return; + case 'i16': + s.writeU8(SerializedScalarKind.I16); + return; + case 'i8': + s.writeU8(SerializedScalarKind.I8); + return; + case 'bool': + s.writeU8(SerializedScalarKind.Bool); + return; + } +} + +/** deserializeScalarKind() deserializes a ScalarKind from a BinaryStream */ +function deserializeScalarKind(s) { + const kind = s.readU8(); + switch (kind) { + case SerializedScalarKind.AbstractFloat: + return 'abstract-float'; + case SerializedScalarKind.F64: + return 'f64'; + case SerializedScalarKind.F32: + return 'f32'; + case SerializedScalarKind.F16: + return 'f16'; + case SerializedScalarKind.U32: + return 'u32'; + case SerializedScalarKind.U16: + return 'u16'; + case SerializedScalarKind.U8: + return 'u8'; + case SerializedScalarKind.I32: + return 'i32'; + case SerializedScalarKind.I16: + return 'i16'; + case SerializedScalarKind.I8: + return 'i8'; + case SerializedScalarKind.Bool: + return 'bool'; + default: + unreachable(`invalid serialized ScalarKind: ${kind}`); + } +}var + +SerializedValueKind = /*#__PURE__*/function (SerializedValueKind) {SerializedValueKind[SerializedValueKind["Scalar"] = 0] = "Scalar";SerializedValueKind[SerializedValueKind["Vector"] = 1] = "Vector";SerializedValueKind[SerializedValueKind["Matrix"] = 2] = "Matrix";return SerializedValueKind;}(SerializedValueKind || {}); + + + + + +/** serializeValue() serializes a Value to a BinaryStream */ +export function serializeValue(s, v) { + const serializeScalar = (scalar, kind) => { switch (kind) { + case 'abstract-float': + s.writeF64(scalar.value); + return; + case 'f64': + s.writeF64(scalar.value); + return; case 'f32': - return new Uint32Array(s.bits.buffer)[0]; + s.writeF32(scalar.value); + return; case 'f16': - return new Uint16Array(s.bits.buffer)[0]; - default: - return s.value; + s.writeF16(scalar.value); + return; + case 'u32': + s.writeU32(scalar.value); + return; + case 'u16': + s.writeU16(scalar.value); + return; + case 'u8': + s.writeU8(scalar.value); + return; + case 'i32': + s.writeI32(scalar.value); + return; + case 'i16': + s.writeI16(scalar.value); + return; + case 'i8': + s.writeI8(scalar.value); + return; + case 'bool': + s.writeBool(scalar.value); + return; } }; + if (v instanceof Scalar) { - const kind = v.type.kind; - return { - kind: 'scalar', - type: kind, - value: value(kind, v), - }; + s.writeU8(SerializedValueKind.Scalar); + serializeScalarKind(s, v.type.kind); + serializeScalar(v, v.type.kind); + return; } if (v instanceof Vector) { - const kind = v.type.elementType.kind; - return { - kind: 'vector', - type: kind, - value: v.elements.map(e => value(kind, e)), - }; + s.writeU8(SerializedValueKind.Vector); + serializeScalarKind(s, v.type.elementType.kind); + s.writeU8(v.type.width); + for (const element of v.elements) { + serializeScalar(element, v.type.elementType.kind); + } + return; } if (v instanceof Matrix) { - const kind = v.type.elementType.kind; - return { - kind: 'matrix', - type: kind, - value: v.elements.map(c => c.map(r => value(kind, r))), - }; + s.writeU8(SerializedValueKind.Matrix); + serializeScalarKind(s, v.type.elementType.kind); + s.writeU8(v.type.cols); + s.writeU8(v.type.rows); + for (const column of v.elements) { + for (const element of column) { + serializeScalar(element, v.type.elementType.kind); + } + } + return; } unreachable(`unhandled value type: ${v}`); } -export function deserializeValue(data) { - const buildScalar = v => { - switch (data.type) { +/** deserializeValue() deserializes a Value from a BinaryStream */ +export function deserializeValue(s) { + const deserializeScalar = (kind) => { + switch (kind) { case 'abstract-float': - return abstractFloat(v); + return abstractFloat(s.readF64()); case 'f64': - return f64(v); - case 'i32': - return i32(v); - case 'u32': - return u32(v); + return f64(s.readF64()); case 'f32': - return f32Bits(v); - case 'i16': - return i16(v); - case 'u16': - return u16(v); + return f32(s.readF32()); case 'f16': - return f16Bits(v); - case 'i8': - return i8(v); + return f16(s.readF16()); + case 'u32': + return u32(s.readU32()); + case 'u16': + return u16(s.readU16()); case 'u8': - return u8(v); + return u8(s.readU8()); + case 'i32': + return i32(s.readI32()); + case 'i16': + return i16(s.readI16()); + case 'i8': + return i8(s.readI8()); case 'bool': - return bool(v); - default: - unreachable(`unhandled value type: ${data.type}`); + return bool(s.readBool()); } }; - switch (data.kind) { - case 'scalar': { - return buildScalar(data.value); - } - case 'vector': { - return new Vector(data.value.map(v => buildScalar(v))); - } - case 'matrix': { - return new Matrix(data.value.map(c => c.map(buildScalar))); - } + const valueKind = s.readU8(); + const scalarKind = deserializeScalarKind(s); + switch (valueKind) { + case SerializedValueKind.Scalar: + return deserializeScalar(scalarKind); + case SerializedValueKind.Vector:{ + const width = s.readU8(); + const scalars = new Array(width); + for (let i = 0; i < width; i++) { + scalars[i] = deserializeScalar(scalarKind); + } + return new Vector(scalars); + } + case SerializedValueKind.Matrix:{ + const numCols = s.readU8(); + const numRows = s.readU8(); + const columns = new Array(numCols); + for (let c = 0; c < numCols; c++) { + columns[c] = new Array(numRows); + for (let i = 0; i < numRows; i++) { + columns[c][i] = deserializeScalar(scalarKind); + } + } + return new Matrix(columns); + } + default: + unreachable(`invalid serialized value kind: ${valueKind}`); } } @@ -1439,7 +1527,7 @@ export function isFloatValue(v) { } /** - * @returns if @p ty is an abstract numeric type. + * @returns if `ty` is an abstract numeric type. * @note this does not consider composite types. * Use elementType() if you want to test the element type. */ @@ -1451,15 +1539,15 @@ export function isAbstractType(ty) { } /** - * @returns if @p ty is a floating point type. + * @returns if `ty` is a floating point type. * @note this does not consider composite types. * Use elementType() if you want to test the element type. */ export function isFloatType(ty) { if (ty instanceof ScalarType) { return ( - ty.kind === 'abstract-float' || ty.kind === 'f64' || ty.kind === 'f32' || ty.kind === 'f16' - ); + ty.kind === 'abstract-float' || ty.kind === 'f64' || ty.kind === 'f32' || ty.kind === 'f16'); + } return false; } @@ -1469,70 +1557,74 @@ export const kAllFloatScalars = [TypeAbstractFloat, TypeF32, TypeF16]; /// All floating-point vec2 types export const kAllFloatVector2 = [ - TypeVec(2, TypeAbstractFloat), - TypeVec(2, TypeF32), - TypeVec(2, TypeF16), -]; +TypeVec(2, TypeAbstractFloat), +TypeVec(2, TypeF32), +TypeVec(2, TypeF16)]; + /// All floating-point vec3 types export const kAllFloatVector3 = [ - TypeVec(3, TypeAbstractFloat), - TypeVec(3, TypeF32), - TypeVec(3, TypeF16), -]; +TypeVec(3, TypeAbstractFloat), +TypeVec(3, TypeF32), +TypeVec(3, TypeF16)]; + /// All floating-point vec4 types export const kAllFloatVector4 = [ - TypeVec(4, TypeAbstractFloat), - TypeVec(4, TypeF32), - TypeVec(4, TypeF16), -]; +TypeVec(4, TypeAbstractFloat), +TypeVec(4, TypeF32), +TypeVec(4, TypeF16)]; + /// All floating-point vector types -export const kAllFloatVectors = [...kAllFloatVector2, ...kAllFloatVector3, ...kAllFloatVector4]; +export const kAllFloatVectors = [ +...kAllFloatVector2, +...kAllFloatVector3, +...kAllFloatVector4]; + /// All floating-point scalar and vector types export const kAllFloatScalarsAndVectors = [...kAllFloatScalars, ...kAllFloatVectors]; /// All integer scalar and vector types export const kAllIntegerScalarsAndVectors = [ - TypeI32, - TypeVec(2, TypeI32), - TypeVec(3, TypeI32), - TypeVec(4, TypeI32), - TypeU32, - TypeVec(2, TypeU32), - TypeVec(3, TypeU32), - TypeVec(4, TypeU32), -]; +TypeI32, +TypeVec(2, TypeI32), +TypeVec(3, TypeI32), +TypeVec(4, TypeI32), +TypeU32, +TypeVec(2, TypeU32), +TypeVec(3, TypeU32), +TypeVec(4, TypeU32)]; + /// All signed integer scalar and vector types export const kAllSignedIntegerScalarsAndVectors = [ - TypeI32, - TypeVec(2, TypeI32), - TypeVec(3, TypeI32), - TypeVec(4, TypeI32), -]; +TypeI32, +TypeVec(2, TypeI32), +TypeVec(3, TypeI32), +TypeVec(4, TypeI32)]; + /// All unsigned integer scalar and vector types export const kAllUnsignedIntegerScalarsAndVectors = [ - TypeU32, - TypeVec(2, TypeU32), - TypeVec(3, TypeU32), - TypeVec(4, TypeU32), -]; +TypeU32, +TypeVec(2, TypeU32), +TypeVec(3, TypeU32), +TypeVec(4, TypeU32)]; + /// All floating-point and integer scalar and vector types export const kAllFloatAndIntegerScalarsAndVectors = [ - ...kAllFloatScalarsAndVectors, - ...kAllIntegerScalarsAndVectors, -]; +...kAllFloatScalarsAndVectors, +...kAllIntegerScalarsAndVectors]; + /// All floating-point and signed integer scalar and vector types export const kAllFloatAndSignedIntegerScalarsAndVectors = [ - ...kAllFloatScalarsAndVectors, - ...kAllSignedIntegerScalarsAndVectors, -]; +...kAllFloatScalarsAndVectors, +...kAllSignedIntegerScalarsAndVectors]; + /** @returns the inner element type of the given type */ export function elementType(t) { @@ -1540,4 +1632,4 @@ export function elementType(t) { return t; } return t.elementType; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/copy_to_texture.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/copy_to_texture.js index e58df6b7cda..beaad649fee 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/copy_to_texture.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/copy_to_texture.js @@ -1,62 +1,67 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, memcpy } from '../../common/util/util.js'; -import { GPUTest, TextureTestMixin } from '../gpu_test.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, memcpy } from '../../common/util/util.js';import { GPUTest, TextureTestMixin } from '../gpu_test.js'; import { reifyExtent3D, reifyOrigin3D } from '../util/unions.js'; import { makeInPlaceColorConversion } from './color_space_conversion.js'; import { TexelView } from './texture/texel_view.js'; + /** * Predefined copy sub rect meta infos. */ export const kCopySubrectInfo = [ - { - srcOrigin: { x: 2, y: 2 }, - dstOrigin: { x: 0, y: 0, z: 0 }, - srcSize: { width: 16, height: 16 }, - dstSize: { width: 4, height: 4 }, - copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 }, - }, - { - srcOrigin: { x: 10, y: 2 }, - dstOrigin: { x: 0, y: 0, z: 0 }, - srcSize: { width: 16, height: 16 }, - dstSize: { width: 4, height: 4 }, - copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 }, - }, - { - srcOrigin: { x: 2, y: 10 }, - dstOrigin: { x: 0, y: 0, z: 0 }, - srcSize: { width: 16, height: 16 }, - dstSize: { width: 4, height: 4 }, - copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 }, - }, - { - srcOrigin: { x: 10, y: 10 }, - dstOrigin: { x: 0, y: 0, z: 0 }, - srcSize: { width: 16, height: 16 }, - dstSize: { width: 4, height: 4 }, - copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 }, - }, - { - srcOrigin: { x: 2, y: 2 }, - dstOrigin: { x: 2, y: 2, z: 0 }, - srcSize: { width: 16, height: 16 }, - dstSize: { width: 16, height: 16 }, - copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 }, - }, - { - srcOrigin: { x: 10, y: 2 }, - dstOrigin: { x: 2, y: 2, z: 0 }, - srcSize: { width: 16, height: 16 }, - dstSize: { width: 16, height: 16 }, - copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 }, - }, -]; +{ + srcOrigin: { x: 2, y: 2 }, + dstOrigin: { x: 0, y: 0, z: 0 }, + srcSize: { width: 16, height: 16 }, + dstSize: { width: 4, height: 4 }, + copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 } +}, +{ + srcOrigin: { x: 10, y: 2 }, + dstOrigin: { x: 0, y: 0, z: 0 }, + srcSize: { width: 16, height: 16 }, + dstSize: { width: 4, height: 4 }, + copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 } +}, +{ + srcOrigin: { x: 2, y: 10 }, + dstOrigin: { x: 0, y: 0, z: 0 }, + srcSize: { width: 16, height: 16 }, + dstSize: { width: 4, height: 4 }, + copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 } +}, +{ + srcOrigin: { x: 10, y: 10 }, + dstOrigin: { x: 0, y: 0, z: 0 }, + srcSize: { width: 16, height: 16 }, + dstSize: { width: 4, height: 4 }, + copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 } +}, +{ + srcOrigin: { x: 2, y: 2 }, + dstOrigin: { x: 2, y: 2, z: 0 }, + srcSize: { width: 16, height: 16 }, + dstSize: { width: 16, height: 16 }, + copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 } +}, +{ + srcOrigin: { x: 10, y: 2 }, + dstOrigin: { x: 2, y: 2, z: 0 }, + srcSize: { width: 16, height: 16 }, + dstSize: { width: 16, height: 16 }, + copyExtent: { width: 4, height: 4, depthOrArrayLayers: 1 } +}]; + export class CopyToTextureUtils extends TextureTestMixin(GPUTest) { - doFlipY(sourcePixels, width, height, bytesPerPixel) { + doFlipY( + sourcePixels, + width, + height, + bytesPerPixel) + { const dstPixels = new Uint8ClampedArray(width * height * bytesPerPixel); for (let i = 0; i < height; ++i) { for (let j = 0; j < width; ++j) { @@ -86,7 +91,23 @@ export class CopyToTextureUtils extends TextureTestMixin(GPUTest) { format, flipSrcBeforeCopy, srcDoFlipYDuringCopy, - conversion, + conversion + + + + + + + + + + + + + + + + }) { const applyConversion = makeInPlaceColorConversion(conversion); @@ -98,23 +119,22 @@ export class CopyToTextureUtils extends TextureTestMixin(GPUTest) { assert( reifyDstOrigin.x + reifySubRectSize.width <= reifyDstSize.width && - reifyDstOrigin.y + reifySubRectSize.height <= reifyDstSize.height, + reifyDstOrigin.y + reifySubRectSize.height <= reifyDstSize.height, 'subrect is out of bounds' ); const divide = 255.0; return TexelView.fromTexelsAsColors( format, - coords => { + (coords) => { assert( coords.x >= reifyDstOrigin.x && - coords.y >= reifyDstOrigin.y && - coords.x < reifyDstOrigin.x + reifySubRectSize.width && - coords.y < reifyDstOrigin.y + reifySubRectSize.height && - coords.z === 0, + coords.y >= reifyDstOrigin.y && + coords.x < reifyDstOrigin.x + reifySubRectSize.width && + coords.y < reifyDstOrigin.y + reifySubRectSize.height && + coords.z === 0, 'out of bounds' ); - // Map dst coords to get candidate src pixel position in y. let yInSubRect = coords.y - reifyDstOrigin.y; @@ -133,13 +153,13 @@ export class CopyToTextureUtils extends TextureTestMixin(GPUTest) { if (flipSrcBeforeCopy) src_y = reifySrcSize.height - src_y - 1; const pixelPos = - src_y * reifySrcSize.width + (coords.x - reifyDstOrigin.x) + reifySrcOrigin.x; + src_y * reifySrcSize.width + (coords.x - reifyDstOrigin.x) + reifySrcOrigin.x; const rgba = { R: srcPixels[pixelPos * 4] / divide, G: srcPixels[pixelPos * 4 + 1] / divide, B: srcPixels[pixelPos * 4 + 2] / divide, - A: srcPixels[pixelPos * 4 + 3] / divide, + A: srcPixels[pixelPos * 4 + 3] / divide }; applyConversion(rgba); return rgba; @@ -149,12 +169,12 @@ export class CopyToTextureUtils extends TextureTestMixin(GPUTest) { } doTestAndCheckResult( - imageCopyExternalImage, - dstTextureCopyView, - expTexelView, - copySize, - texelCompareOptions - ) { + imageCopyExternalImage, + dstTextureCopyView, + expTexelView, + copySize, + texelCompareOptions) + { this.device.queue.copyExternalImageToTexture( imageCopyExternalImage, dstTextureCopyView, @@ -167,7 +187,6 @@ export class CopyToTextureUtils extends TextureTestMixin(GPUTest) { copySize, texelCompareOptions ); - this.trackForCleanup(dstTextureCopyView.texture); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/create_elements.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/create_elements.js index b255f85ceb4..722808c8b00 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/create_elements.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/create_elements.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { unreachable } from '../../common/util/util.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { unreachable } from '../../common/util/util.js'; // TESTING_TODO: This should expand to more canvas types (which will enhance a bunch of tests): // - canvas element not in dom // - canvas element in dom @@ -9,13 +9,31 @@ // - offscreen canvas from new OffscreenCanvas export const kAllCanvasTypes = ['onscreen', 'offscreen']; + + + + + + /** Valid contextId for HTMLCanvasElement/OffscreenCanvas, * spec: https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-getcontext */ -export const kValidCanvasContextIds = ['2d', 'bitmaprenderer', 'webgl', 'webgl2', 'webgpu']; +export const kValidCanvasContextIds = [ +'2d', +'bitmaprenderer', +'webgl', +'webgl2', +'webgpu']; + + /** Create HTMLCanvas/OffscreenCanvas. */ -export function createCanvas(test, canvasType, width, height) { +export function createCanvas( +test, +canvasType, +width, +height) +{ if (canvasType === 'onscreen') { if (typeof document !== 'undefined') { return createOnscreenCanvas(test, width, height); @@ -34,7 +52,11 @@ export function createCanvas(test, canvasType, width, height) { } /** Create HTMLCanvasElement. */ -export function createOnscreenCanvas(test, width, height) { +export function createOnscreenCanvas( +test, +width, +height) +{ let canvas; if (typeof document !== 'undefined') { canvas = document.createElement('canvas'); @@ -47,10 +69,14 @@ export function createOnscreenCanvas(test, width, height) { } /** Create OffscreenCanvas. */ -export function createOffscreenCanvas(test, width, height) { +export function createOffscreenCanvas( +test, +width, +height) +{ if (typeof OffscreenCanvas === 'undefined') { test.skip('OffscreenCanvas is not supported'); } return new OffscreenCanvas(width, height); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/device_pool.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/device_pool.js index ab2f6350fc4..84345c9e5a3 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/device_pool.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/device_pool.js @@ -1,16 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { SkipTestCase } from '../../common/framework/fixture.js'; -import { attemptGarbageCollection } from '../../common/util/collect_garbage.js'; -import { getGPU, getDefaultRequestAdapterOptions } from '../../common/util/navigator_gpu.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { SkipTestCase } from '../../common/framework/fixture.js';import { attemptGarbageCollection } from '../../common/util/collect_garbage.js';import { getGPU, getDefaultRequestAdapterOptions } from '../../common/util/navigator_gpu.js'; import { assert, raceWithRejectOnTimeout, assertReject, - unreachable, -} from '../../common/util/util.js'; + unreachable } from +'../../common/util/util.js'; import { getDefaultLimits, kLimits } from '../capability_info.js'; +// MUST_NOT_BE_IMPORTED_BY_DATA_CACHE +// This file should not be transitively imported by .cache.ts files + + + + + + class TestFailedButDeviceReusable extends Error {} class FeaturesNotSupported extends Error {} export class TestOOMedShouldAttemptGC extends Error {} @@ -19,7 +25,10 @@ export class DevicePool { holders = 'uninitialized'; /** Acquire a device from the pool and begin the error scopes. */ - async acquire(recorder, descriptor) { + async acquire( + recorder, + descriptor) + { let errorMessage = ''; if (this.holders === 'uninitialized') { this.holders = new DescriptorToHolderMap(); @@ -87,9 +96,9 @@ export class DevicePool { // The device lost is expected when `holder.expectedLostReason` is equal to // `holder.lostInfo.reason`. const expectedDeviceLost = - holder.expectedLostReason !== undefined && - holder.lostInfo !== undefined && - holder.expectedLostReason === holder.lostInfo.reason; + holder.expectedLostReason !== undefined && + holder.lostInfo !== undefined && + holder.expectedLostReason === holder.lostInfo.reason; if (!expectedDeviceLost) { throw ex; } @@ -128,7 +137,10 @@ class DescriptorToHolderMap { * * Throws SkipTestCase if devices with this descriptor are unsupported. */ - async getOrCreate(recorder, uncanonicalizedDescriptor) { + async getOrCreate( + recorder, + uncanonicalizedDescriptor) + { const [descriptor, key] = canonicalizeDescriptor(uncanonicalizedDescriptor); // Quick-reject descriptors that are known to be unsupported already. if (this.unsupported.has(key)) { @@ -181,6 +193,22 @@ class DescriptorToHolderMap { } } + + + + + + + + + + + + + + + + /** * Make a stringified map-key from a GPUDeviceDescriptor. * Tries to make sure all defaults are resolved, first - but it's okay if some are missed @@ -190,14 +218,16 @@ class DescriptorToHolderMap { * GPUDeviceDescriptor. This is just because `undefined` is a common case and we want to use it * as a sanity check that WebGPU is working. */ -function canonicalizeDescriptor(desc) { +function canonicalizeDescriptor( +desc) +{ if (desc === undefined) { return [undefined, '']; } - const featuresCanonicalized = desc.requiredFeatures - ? Array.from(new Set(desc.requiredFeatures)).sort() - : []; + const featuresCanonicalized = desc.requiredFeatures ? + Array.from(new Set(desc.requiredFeatures)).sort() : + []; /** Canonicalized version of the requested limits: in canonical order, with only values which are * specified _and_ non-default. */ @@ -205,6 +235,7 @@ function canonicalizeDescriptor(desc) { // MAINTENANCE_TODO: Remove cast when @webgpu/types includes compatibilityMode const adapterOptions = getDefaultRequestAdapterOptions(); + const featureLevel = adapterOptions?.compatibilityMode ? 'compatibility' : 'core'; const defaultLimits = getDefaultLimits(featureLevel); if (desc.requiredLimits) { @@ -222,12 +253,15 @@ function canonicalizeDescriptor(desc) { const descriptorCanonicalized = { requiredFeatures: featuresCanonicalized, requiredLimits: limitsCanonicalized, - defaultQueue: {}, + defaultQueue: {} }; return [descriptorCanonicalized, JSON.stringify(descriptorCanonicalized)]; } -function supportsFeature(adapter, descriptor) { +function supportsFeature( +adapter, +descriptor) +{ if (descriptor === undefined) { return true; } @@ -247,6 +281,7 @@ function supportsFeature(adapter, descriptor) { * - 'acquired': In use by a running test. */ + /** * Holds a GPUDevice and tracks its state (free/acquired) and handles device loss. */ @@ -257,9 +292,15 @@ class DeviceHolder { state = 'free'; /** initially undefined; becomes set when the device is lost */ + /** Set if the device is expected to be lost. */ + + // Gets a device and creates a DeviceHolder. // If the device is lost, DeviceHolder.lost gets set. - static async create(recorder, descriptor) { + static async create( + recorder, + descriptor) + { const gpu = getGPU(recorder); const adapter = await gpu.requestAdapter(); assert(adapter !== null, 'requestAdapter returned null'); @@ -274,7 +315,7 @@ class DeviceHolder { constructor(device) { this._device = device; - void this._device.lost.then(ev => { + void this._device.lost.then((ev) => { this.lostInfo = ev; }); } @@ -326,10 +367,10 @@ class DeviceHolder { try { // May reject if the device was lost. [gpuOutOfMemoryError, gpuInternalError, gpuValidationError] = await Promise.all([ - this.device.popErrorScope(), - this.device.popErrorScope(), - this.device.popErrorScope(), - ]); + this.device.popErrorScope(), + this.device.popErrorScope(), + this.device.popErrorScope()] + ); } catch (ex) { assert(this.lostInfo !== undefined, 'popErrorScope failed; did beginTestScope get missed?'); throw ex; @@ -340,10 +381,10 @@ class DeviceHolder { await this.device.queue.onSubmittedWorkDone(); } - await assertReject( - this.device.popErrorScope(), - 'There was an extra error scope on the stack after a test' - ); + await assertReject('OperationError', this.device.popErrorScope(), { + allowMissingStack: true, + message: 'There was an extra error scope on the stack after a test' + }); if (gpuOutOfMemoryError !== null) { assert(gpuOutOfMemoryError instanceof GPUOutOfMemoryError); @@ -373,4 +414,4 @@ class DeviceHolder { releaseGPUDevice() { this._device = undefined; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/floating_point.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/floating_point.js index 2cc5159c0aa..1770721d295 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/floating_point.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/floating_point.js @@ -1,7 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../common/util/util.js'; -import { Float16Array } from '../../external/petamoriken/float16/float16.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../common/util/util.js';import { Float16Array } from '../../external/petamoriken/float16/float16.js'; + + + import { anyOf } from './compare.js'; import { kValue } from './constants.js'; @@ -10,23 +12,21 @@ import { f16, f32, isFloatType, - reinterpretF16AsU16, - reinterpretF32AsU32, - reinterpretF64AsU32s, - reinterpretU16AsF16, - reinterpretU32AsF32, - reinterpretU32sAsF64, + + toMatrix, toVector, - u32, -} from './conversion.js'; + u32 } from +'./conversion.js'; import { calculatePermutations, cartesianProduct, correctlyRoundedF16, correctlyRoundedF32, correctlyRoundedF64, + every2DArray, flatten2DArray, + flushSubnormalNumberF16, flushSubnormalNumberF32, flushSubnormalNumberF64, @@ -38,30 +38,98 @@ import { map2DArray, oneULPF16, oneULPF32, - oneULPF64, - quantizeToF32, quantizeToF16, + quantizeToF32, + scalarF16Range, + scalarF32Range, + scalarF64Range, + sparseMatrixF16Range, + sparseMatrixF32Range, + sparseMatrixF64Range, + sparseScalarF16Range, + sparseScalarF32Range, + sparseScalarF64Range, + sparseVectorF16Range, + sparseVectorF32Range, + sparseVectorF64Range, unflatten2DArray, -} from './math.js'; + vectorF16Range, + vectorF32Range, + vectorF64Range } from +'./math.js'; + +/** Indicate the kind of WGSL floating point numbers being operated on */var + + +SerializedFPIntervalKind = /*#__PURE__*/function (SerializedFPIntervalKind) {SerializedFPIntervalKind[SerializedFPIntervalKind["Abstract"] = 0] = "Abstract";SerializedFPIntervalKind[SerializedFPIntervalKind["F32"] = 1] = "F32";SerializedFPIntervalKind[SerializedFPIntervalKind["F16"] = 2] = "F16";return SerializedFPIntervalKind;}(SerializedFPIntervalKind || {}); + + + + + +/** serializeFPKind() serializes a FPKind to a BinaryStream */ +export function serializeFPKind(s, value) { + switch (value) { + case 'abstract': + s.writeU8(SerializedFPIntervalKind.Abstract); + break; + case 'f16': + s.writeU8(SerializedFPIntervalKind.F16); + break; + case 'f32': + s.writeU8(SerializedFPIntervalKind.F32); + break; + } +} + +/** deserializeFPKind() deserializes a FPKind from a BinaryStream */ +export function deserializeFPKind(s) { + const kind = s.readU8(); + switch (kind) { + case SerializedFPIntervalKind.Abstract: + return 'abstract'; + case SerializedFPIntervalKind.F16: + return 'f16'; + case SerializedFPIntervalKind.F32: + return 'f32'; + default: + unreachable(`invalid deserialized FPKind: ${kind}`); + } +} +// Containers + +/** + * Representation of endpoints for an interval as an array with either one or + * two elements. Single element indicates that the interval is a single point. + * For two elements, the first is the lower edges of the interval and the + * second is the upper edge, i.e. e[0] <= e[1], where e is an IntervalEndpoints + */ -/** Indicate the kind of WGSL floating point numbers being operated on */ /** Represents a closed interval of floating point numbers */ export class FPInterval { + + + + /** * Constructor * * `FPTraits.toInterval` is the preferred way to create FPIntervals * * @param kind the floating point number type this is an interval for - * @param bounds beginning and end of the interval + * @param endpoints beginning and end of the interval */ - constructor(kind, ...bounds) { + constructor(kind, ...endpoints) { this.kind = kind; - const [begin, end] = bounds.length === 2 ? bounds : [bounds[0], bounds[0]]; - assert(!Number.isNaN(begin) && !Number.isNaN(end), `bounds need to be non-NaN`); - assert(begin <= end, `bounds[0] (${begin}) must be less than or equal to bounds[1] (${end})`); + const begin = endpoints[0]; + const end = endpoints.length === 2 ? endpoints[1] : endpoints[0]; + assert(!Number.isNaN(begin) && !Number.isNaN(end), `endpoints need to be non-NaN`); + assert( + begin <= end, + `endpoints[0] (${begin}) must be less than or equal to endpoints[1] (${end})` + ); this.begin = begin; this.end = end; @@ -73,7 +141,7 @@ export class FPInterval { } /** @returns begin and end if non-point interval, otherwise just begin */ - bounds() { + endpoints() { return this.isPoint() ? [this.begin] : [this.begin, this.end]; } @@ -97,9 +165,9 @@ export class FPInterval { */ containsZeroOrSubnormals() { return !( - this.end < this.traits().constants().negative.subnormal.min || - this.begin > this.traits().constants().positive.subnormal.max - ); + this.end < this.traits().constants().negative.subnormal.min || + this.begin > this.traits().constants().positive.subnormal.max); + } /** @returns if this interval contains a single point */ @@ -114,86 +182,124 @@ export class FPInterval { /** @returns a string representation for logging purposes */ toString() { - return `{ '${this.kind}', [${this.bounds().map(this.traits().scalarBuilder)}] }`; + return `{ '${this.kind}', [${this.endpoints().map(this.traits().scalarBuilder)}] }`; } } -/** - * SerializedFPInterval holds the serialized form of a FPInterval. - * This form can be safely encoded to JSON. - */ - -/** serializeFPInterval() converts a FPInterval to a SerializedFPInterval */ -export function serializeFPInterval(i) { +/** serializeFPInterval() serializes a FPInterval to a BinaryStream */ +export function serializeFPInterval(s, i) { + serializeFPKind(s, i.kind); const traits = FP[i.kind]; - switch (i.kind) { - case 'abstract': { - if (i === traits.constants().unboundedInterval) { - return { kind: 'abstract', unbounded: true }; - } else { - return { - kind: 'abstract', - unbounded: false, - begin: reinterpretF64AsU32s(i.begin), - end: reinterpretF64AsU32s(i.end), - }; + s.writeCond(i !== traits.constants().unboundedInterval, { + if_true: () => { + // Bounded + switch (i.kind) { + case 'abstract': + s.writeF64(i.begin); + s.writeF64(i.end); + break; + case 'f32': + s.writeF32(i.begin); + s.writeF32(i.end); + break; + case 'f16': + s.writeF16(i.begin); + s.writeF16(i.end); + break; + default: + unreachable(`Unable to serialize FPInterval ${i}`); + break; } - } - case 'f32': { - if (i === traits.constants().unboundedInterval) { - return { kind: 'f32', unbounded: true }; - } else { - return { - kind: 'f32', - unbounded: false, - begin: reinterpretF32AsU32(i.begin), - end: reinterpretF32AsU32(i.end), - }; - } - } - case 'f16': { - if (i === traits.constants().unboundedInterval) { - return { kind: 'f16', unbounded: true }; - } else { - return { - kind: 'f16', - unbounded: false, - begin: reinterpretF16AsU16(i.begin), - end: reinterpretF16AsU16(i.end), - }; - } - } - } + }, + if_false: () => { - unreachable(`Unable to serialize FPInterval ${i}`); + // Unbounded + } }); } -/** serializeFPInterval() converts a SerializedFPInterval to a FPInterval */ -export function deserializeFPInterval(data) { - const kind = data.kind; +/** deserializeFPInterval() deserializes a FPInterval from a BinaryStream */ +export function deserializeFPInterval(s) { + const kind = deserializeFPKind(s); const traits = FP[kind]; - if (data.unbounded) { - return traits.constants().unboundedInterval; - } - switch (kind) { - case 'abstract': { - return traits.toInterval([reinterpretU32sAsF64(data.begin), reinterpretU32sAsF64(data.end)]); + return s.readCond({ + if_true: () => { + // Bounded + switch (kind) { + case 'abstract': + return new FPInterval(traits.kind, s.readF64(), s.readF64()); + case 'f32': + return new FPInterval(traits.kind, s.readF32(), s.readF32()); + case 'f16': + return new FPInterval(traits.kind, s.readF16(), s.readF16()); + } + unreachable(`Unable to deserialize FPInterval with kind ${kind}`); + }, + if_false: () => { + // Unbounded + return traits.constants().unboundedInterval; } - case 'f32': { - return traits.toInterval([reinterpretU32AsF32(data.begin), reinterpretU32AsF32(data.end)]); - } - case 'f16': { - return traits.toInterval([reinterpretU16AsF16(data.begin), reinterpretU16AsF16(data.end)]); - } - } - - unreachable(`Unable to deserialize data ${data}`); + }); } /** * Representation of a vec2/3/4 of floating point intervals as an array of * FPIntervals. */ + + + + + +/** Shorthand for an Array of Arrays that contains a column-major matrix */ + + +/** + * Representation of a matCxR of floating point intervals as an array of arrays + * of FPIntervals. This maps onto the WGSL concept of matrix. Internally + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Utilities @@ -201,7 +307,7 @@ export function deserializeFPInterval(data) { // When f16 traits is defined, this can be replaced with something like // `FP.f16..addFlushIfNeeded` function addFlushedIfNeededF16(values) { - return values.some(v => v !== 0 && isSubnormalNumberF16(v)) ? values.concat(0) : values; + return values.some((v) => v !== 0 && isSubnormalNumberF16(v)) ? values.concat(0) : values; } // Operations @@ -212,20 +318,386 @@ function addFlushedIfNeededF16(values) { * from tests. */ + + + +/** Operation used to implement a ScalarToInterval */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** + * A function that converts a pair of points to an acceptance interval. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Domain for a ScalarPairToInterval implementation */ + + + + + + +/** Operation used to implement a ScalarPairToInterval */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** + * A function that converts a triplet of points to an acceptance interval. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Operation used to implement a ScalarTripleToInterval */ + + + + + + +// Currently ScalarToVector is not integrated with the rest of the floating point +// framework, because the only builtins that use it are actually +// u32 -> [f32, f32, f32, f32] functions, so the whole rounding and interval +// process doesn't get applied to the inputs. +// They do use the framework internally by invoking divisionInterval on segments +// of the input. +/** + * A function that converts a point to a vector of acceptance intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a vector to an acceptance interval. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Operation used to implement a VectorToInterval */ + + + + + + +/** + * A function that converts a pair of vectors to an acceptance interval. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Operation used to implement a VectorPairToInterval */ + + + + + + +/** + * A function that converts a vector to a vector of acceptance intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Operation used to implement a VectorToVector */ + + + + + + +/** + * A function that converts a pair of vectors to a vector of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Operation used to implement a VectorPairToVector */ + + + + + + +/** + * A function that converts a vector and a scalar to a vector of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a scalar and a vector to a vector of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a matrix to an acceptance interval. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** Operation used to implement a MatrixToMatrix */ + + + + + + +/** + * A function that converts a matrix to a matrix of acceptance intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a pair of matrices to a matrix of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a matrix and a scalar to a matrix of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a scalar and a matrix to a matrix of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a matrix and a vector to a vector of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +/** + * A function that converts a vector and a matrix to a vector of acceptance + * intervals. + * This is the public facing API for builtin implementations that is called + * from tests. + */ + + + + +// Traits + +/** + * Typed structure containing all the constants defined for each + * WGSL floating point kind + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** A representation of an FPInterval for a case param */ + + + + + /** Abstract base class for all floating-point traits */ export class FPTraits { + constructor(k) { this.kind = k; } + + // Utilities - Implemented + /** @returns an interval containing the point or the original interval */ toInterval(n) { if (n instanceof FPInterval) { if (n.kind === this.kind) { return n; } - return new FPInterval(this.kind, ...n.bounds()); + + // Preserve if the original interval was unbounded or bounded + if (!n.isFinite()) { + return this.constants().unboundedInterval; + } + + return new FPInterval(this.kind, ...n.endpoints()); } if (n instanceof Array) { @@ -241,14 +713,16 @@ export class FPTraits { toParam(n) { return { kind: this.kind, - interval: n, + interval: n }; } /** * Converts p into an FPInterval if it is an FPIntervalPAram */ - fromParam(p) { + fromParam( + p) + { const param = p; if (param.interval && param.kind) { assert(param.kind === this.kind); @@ -258,19 +732,18 @@ export class FPTraits { } /** - * @returns an interval with the tightest bounds that includes all provided + * @returns an interval with the tightest endpoints that includes all provided * intervals */ spanIntervals(...intervals) { assert(intervals.length > 0, `span of an empty list of FPIntervals is not allowed`); assert( - intervals.every(i => i.kind === this.kind), + intervals.every((i) => i.kind === this.kind), `span is only defined for intervals with the same kind` ); - let begin = Number.POSITIVE_INFINITY; let end = Number.NEGATIVE_INFINITY; - intervals.forEach(i => { + intervals.forEach((i) => { begin = Math.min(i.begin, begin); end = Math.max(i.end, end); }); @@ -279,7 +752,7 @@ export class FPTraits { /** Narrow an array of values to FPVector if possible */ isVector(v) { - if (v.every(e => e instanceof FPInterval && e.kind === this.kind)) { + if (v.every((e) => e instanceof FPInterval && e.kind === this.kind)) { return v.length === 2 || v.length === 3 || v.length === 4; } return false; @@ -287,12 +760,12 @@ export class FPTraits { /** @returns an FPVector representation of an array of values if possible */ toVector(v) { - if (this.isVector(v)) { + if (this.isVector(v) && v.every((e) => e.kind === this.kind)) { return v; } - const f = v.map(e => this.toInterval(e)); - // The return of the map above is a FPInterval[], which needs to be narrowed + const f = v.map((e) => this.toInterval(e)); + // The return of the map above is a readonly FPInterval[], which needs to be narrowed // to FPVector, since FPVector is defined as fixed length tuples. if (this.isVector(f)) { return f; @@ -306,33 +779,33 @@ export class FPTraits { */ spanVectors(...vectors) { assert( - vectors.every(e => this.isVector(e)), + vectors.every((e) => this.isVector(e)), 'Vector span is not defined for vectors of differing floating point kinds' ); const vector_length = vectors[0].length; assert( - vectors.every(e => e.length === vector_length), + vectors.every((e) => e.length === vector_length), `Vector span is not defined for vectors of differing lengths` ); const result = new Array(vector_length); for (let i = 0; i < vector_length; i++) { - result[i] = this.spanIntervals(...vectors.map(v => v[i])); + result[i] = this.spanIntervals(...vectors.map((v) => v[i])); } return this.toVector(result); } /** Narrow an array of an array of values to FPMatrix if possible */ isMatrix(m) { - if (!m.every(c => c.every(e => e instanceof FPInterval && e.kind === this.kind))) { + if (!m.every((c) => c.every((e) => e instanceof FPInterval && e.kind === this.kind))) { return false; } - // At this point m guaranteed to be a FPInterval[][], but maybe typed as a + // At this point m guaranteed to be a ROArrayArray, but maybe typed as a // FPVector[]. // Coercing the type since FPVector[] is functionally equivalent to - // FPInterval[][] for .length and .every, but they are type compatible, + // ROArrayArray for .length and .every, but they are type compatible, // since tuples are not equivalent to arrays, so TS considers c in .every to // be unresolvable below, even though our usage is safe. m = m; @@ -346,18 +819,23 @@ export class FPTraits { return false; } - return m.every(c => c.length === num_rows); + return m.every((c) => c.length === num_rows); } /** @returns an FPMatrix representation of an array of an array of values if possible */ toMatrix(m) { - if (this.isMatrix(m)) { + if ( + this.isMatrix(m) && + every2DArray(m, (e) => { + return e.kind === this.kind; + })) + { return m; } const result = map2DArray(m, this.toInterval.bind(this)); - // The return of the map above is a FPInterval[][], which needs to be + // The return of the map above is a ROArrayArray, which needs to be // narrowed to FPMatrix, since FPMatrix is defined as fixed length tuples. if (this.isMatrix(result)) { return result; @@ -377,14 +855,14 @@ export class FPTraits { const num_cols = ms[0].length; const num_rows = ms[0][0].length; assert( - ms.every(m => m.length === num_cols && m.every(r => r.length === num_rows)), + ms.every((m) => m.length === num_cols && m.every((r) => r.length === num_rows)), `Matrix span is not defined for Matrices of differing dimensions` ); - const result = [...Array(num_cols)].map(_ => [...Array(num_rows)]); + const result = [...Array(num_cols)].map((_) => [...Array(num_rows)]); for (let i = 0; i < num_cols; i++) { for (let j = 0; j < num_rows; j++) { - result[i][j] = this.spanIntervals(...ms.map(m => m[i][j])); + result[i][j] = this.spanIntervals(...ms.map((m) => m[i][j])); } } @@ -394,58 +872,31 @@ export class FPTraits { /** @returns input with an appended 0, if inputs contains non-zero subnormals */ addFlushedIfNeeded(values) { const subnormals = values.filter(this.isSubnormal); - const needs_zero = subnormals.length > 0 && subnormals.every(s => s !== 0); + const needs_zero = subnormals.length > 0 && subnormals.every((s) => s !== 0); return needs_zero ? values.concat(0) : values; } - /** - * Restrict the inputs to an ScalarToInterval operation - * - * Only used for operations that have tighter domain requirements than 'must - * be finite'. - * - * @param domain interval to restrict inputs to - * @param impl operation implementation to run if input is within the required domain - * @returns a ScalarToInterval that calls impl if domain contains the input, - * otherwise it returns an unbounded interval */ - limitScalarToIntervalDomain(domain, impl) { - return n => { - return domain.contains(n) ? impl(n) : this.constants().unboundedInterval; - }; - } - - /** - * Restrict the inputs to a ScalarPairToInterval - * - * Only used for operations that have tighter domain requirements than 'must be - * finite'. - * - * @param domain set of intervals to restrict inputs to - * @param impl operation implementation to run if input is within the required domain - * @returns a ScalarPairToInterval that calls impl if domain contains the input, - * otherwise it returns an unbounded interval */ - limitScalarPairToIntervalDomain(domain, impl) { - return (x, y) => { - if (!domain.x.some(d => d.contains(x)) || !domain.y.some(d => d.contains(y))) { - return this.constants().unboundedInterval; - } - - return impl(x, y); - }; - } - /** Stub for scalar to interval generator */ unimplementedScalarToInterval(name, _x) { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for scalar pair to interval generator */ - unimplementedScalarPairToInterval(name, _x, _y) { + unimplementedScalarPairToInterval( + name, + _x, + _y) + { unreachable(`'${name}' is yet implemented for '${this.kind}'`); } /** Stub for scalar triple to interval generator */ - unimplementedScalarTripleToInterval(name, _x, _y, _z) { + unimplementedScalarTripleToInterval( + name, + _x, + _y, + _z) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } @@ -460,27 +911,46 @@ export class FPTraits { } /** Stub for vector pair to interval generator */ - unimplementedVectorPairToInterval(name, _x, _y) { + unimplementedVectorPairToInterval( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for vector to vector generator */ - unimplementedVectorToVector(name, _x) { + unimplementedVectorToVector( + name, + _x) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for vector pair to vector generator */ - unimplementedVectorPairToVector(name, _x, _y) { + unimplementedVectorPairToVector( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for vector-scalar to vector generator */ - unimplementedVectorScalarToVector(name, _x, _y) { + unimplementedVectorScalarToVector( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for scalar-vector to vector generator */ - unimplementedScalarVectorToVector(name, _x, _y) { + unimplementedScalarVectorToVector( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } @@ -495,42 +965,71 @@ export class FPTraits { } /** Stub for matrix pair to matrix generator */ - unimplementedMatrixPairToMatrix(name, _x, _y) { + unimplementedMatrixPairToMatrix( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for matrix-scalar to matrix generator */ - unimplementedMatrixScalarToMatrix(name, _x, _y) { + unimplementedMatrixScalarToMatrix( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for scalar-matrix to matrix generator */ - unimplementedScalarMatrixToMatrix(name, _x, _y) { + unimplementedScalarMatrixToMatrix( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for matrix-vector to vector generator */ - unimplementedMatrixVectorToVector(name, _x, _y) { + unimplementedMatrixVectorToVector( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for vector-matrix to vector generator */ - unimplementedVectorMatrixToVector(name, _x, _y) { + unimplementedVectorMatrixToVector( + name, + _x, + _y) + { unreachable(`'${name}' is not yet implemented for '${this.kind}'`); } /** Stub for distance generator */ - unimplementedDistance(_x, _y) { + unimplementedDistance( + _x, + _y) + { unreachable(`'distance' is not yet implemented for '${this.kind}'`); } /** Stub for faceForward */ - unimplementedFaceForward(_x, _y, _z) { + unimplementedFaceForward( + _x, + _y, + _z) + { unreachable(`'faceForward' is not yet implemented for '${this.kind}'`); } /** Stub for length generator */ - unimplementedLength(_x) { + unimplementedLength( + _x) + { unreachable(`'length' is not yet implemented for '${this.kind}'`); } @@ -540,7 +1039,11 @@ export class FPTraits { } /** Stub for refract generator */ - unimplementedRefract(_i, _s, _r) { + unimplementedRefract( + _i, + _s, + _r) + { unreachable(`'refract' is not yet implemented for '${this.kind}'`); } @@ -560,6 +1063,33 @@ export class FPTraits { * 'roundTiesToEven'. */ + /** @returns all valid roundings of input */ + + /** @returns true if input is considered finite, otherwise false */ + + /** @returns true if input is considered subnormal, otherwise false */ + + /** @returns 0 if the provided number is subnormal, otherwise returns the proved number */ + + /** @returns 1 * ULP: (number) */ + + /** @returns a builder for converting numbers to Scalars */ + + /** @returns a range of scalars for testing */ + + /** @returns a reduced range of scalars for testing */ + + /** @returns a range of dim element vectors for testing */ + + /** @returns a reduced range of dim element vectors for testing */ + + /** @returns a reduced range of cols x rows matrices for testing + * + * A non-sparse version of this generator is intentionally not provided due to + * runtime issues with more dense ranges. + */ + + // Framework - Cases /** @@ -569,11 +1099,15 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeScalarToIntervalCase(param, filter, ...ops) { + makeScalarToIntervalCase( + param, + filter, + ...ops) + { param = this.quantize(param); - const intervals = ops.map(o => o(param)); - if (filter === 'finite' && intervals.some(i => !i.isFinite())) { + const intervals = ops.map((o) => o(param)); + if (filter === 'finite' && intervals.some((i) => !i.isFinite())) { return undefined; } return { input: [this.scalarBuilder(param)], expected: anyOf(...intervals) }; @@ -585,7 +1119,11 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateScalarToIntervalCases(params, filter, ...ops) { + generateScalarToIntervalCases( + params, + filter, + ...ops) + { return params.reduce((cases, e) => { const c = this.makeScalarToIntervalCase(e, filter, ...ops); if (c !== undefined) { @@ -603,17 +1141,22 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeScalarPairToIntervalCase(param0, param1, filter, ...ops) { + makeScalarPairToIntervalCase( + param0, + param1, + filter, + ...ops) + { param0 = this.quantize(param0); param1 = this.quantize(param1); - const intervals = ops.map(o => o(param0, param1)); - if (filter === 'finite' && intervals.some(i => !i.isFinite())) { + const intervals = ops.map((o) => o(param0, param1)); + if (filter === 'finite' && intervals.some((i) => !i.isFinite())) { return undefined; } return { input: [this.scalarBuilder(param0), this.scalarBuilder(param1)], - expected: anyOf(...intervals), + expected: anyOf(...intervals) }; } @@ -624,7 +1167,12 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateScalarPairToIntervalCases(param0s, param1s, filter, ...ops) { + generateScalarPairToIntervalCases( + param0s, + param1s, + filter, + ...ops) + { return cartesianProduct(param0s, param1s).reduce((cases, e) => { const c = this.makeScalarPairToIntervalCase(e[0], e[1], filter, ...ops); if (c !== undefined) { @@ -643,18 +1191,24 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeScalarTripleToIntervalCase(param0, param1, param2, filter, ...ops) { + makeScalarTripleToIntervalCase( + param0, + param1, + param2, + filter, + ...ops) + { param0 = this.quantize(param0); param1 = this.quantize(param1); param2 = this.quantize(param2); - const intervals = ops.map(o => o(param0, param1, param2)); - if (filter === 'finite' && intervals.some(i => !i.isFinite())) { + const intervals = ops.map((o) => o(param0, param1, param2)); + if (filter === 'finite' && intervals.some((i) => !i.isFinite())) { return undefined; } return { input: [this.scalarBuilder(param0), this.scalarBuilder(param1), this.scalarBuilder(param2)], - expected: anyOf(...intervals), + expected: anyOf(...intervals) }; } @@ -666,7 +1220,13 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateScalarTripleToIntervalCases(param0s, param1s, param2s, filter, ...ops) { + generateScalarTripleToIntervalCases( + param0s, + param1s, + param2s, + filter, + ...ops) + { return cartesianProduct(param0s, param1s, param2s).reduce((cases, e) => { const c = this.makeScalarTripleToIntervalCase(e[0], e[1], e[2], filter, ...ops); if (c !== undefined) { @@ -683,16 +1243,20 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeVectorToIntervalCase(param, filter, ...ops) { + makeVectorToIntervalCase( + param, + filter, + ...ops) + { param = param.map(this.quantize); - const intervals = ops.map(o => o(param)); - if (filter === 'finite' && intervals.some(i => !i.isFinite())) { + const intervals = ops.map((o) => o(param)); + if (filter === 'finite' && intervals.some((i) => !i.isFinite())) { return undefined; } return { input: [toVector(param, this.scalarBuilder)], - expected: anyOf(...intervals), + expected: anyOf(...intervals) }; } @@ -702,7 +1266,11 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateVectorToIntervalCases(params, filter, ...ops) { + generateVectorToIntervalCases( + params, + filter, + ...ops) + { return params.reduce((cases, e) => { const c = this.makeVectorToIntervalCase(e, filter, ...ops); if (c !== undefined) { @@ -720,17 +1288,22 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeVectorPairToIntervalCase(param0, param1, filter, ...ops) { + makeVectorPairToIntervalCase( + param0, + param1, + filter, + ...ops) + { param0 = param0.map(this.quantize); param1 = param1.map(this.quantize); - const intervals = ops.map(o => o(param0, param1)); - if (filter === 'finite' && intervals.some(i => !i.isFinite())) { + const intervals = ops.map((o) => o(param0, param1)); + if (filter === 'finite' && intervals.some((i) => !i.isFinite())) { return undefined; } return { input: [toVector(param0, this.scalarBuilder), toVector(param1, this.scalarBuilder)], - expected: anyOf(...intervals), + expected: anyOf(...intervals) }; } @@ -741,7 +1314,12 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateVectorPairToIntervalCases(param0s, param1s, filter, ...ops) { + generateVectorPairToIntervalCases( + param0s, + param1s, + filter, + ...ops) + { return cartesianProduct(param0s, param1s).reduce((cases, e) => { const c = this.makeVectorPairToIntervalCase(e[0], e[1], filter, ...ops); if (c !== undefined) { @@ -758,16 +1336,20 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals. */ - makeVectorToVectorCase(param, filter, ...ops) { + makeVectorToVectorCase( + param, + filter, + ...ops) + { param = param.map(this.quantize); - const vectors = ops.map(o => o(param)); - if (filter === 'finite' && vectors.some(v => v.some(e => !e.isFinite()))) { + const vectors = ops.map((o) => o(param)); + if (filter === 'finite' && vectors.some((v) => v.some((e) => !e.isFinite()))) { return undefined; } return { input: [toVector(param, this.scalarBuilder)], - expected: anyOf(...vectors), + expected: anyOf(...vectors) }; } @@ -778,7 +1360,11 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals. */ - generateVectorToVectorCases(params, filter, ...ops) { + generateVectorToVectorCases( + params, + filter, + ...ops) + { return params.reduce((cases, e) => { const c = this.makeVectorToVectorCase(e, filter, ...ops); if (c !== undefined) { @@ -796,17 +1382,22 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating a vector of acceptance intervals */ - makeScalarVectorToVectorCase(scalar, vector, filter, ...ops) { + makeScalarVectorToVectorCase( + scalar, + vector, + filter, + ...ops) + { scalar = this.quantize(scalar); vector = vector.map(this.quantize); - const results = ops.map(o => o(scalar, vector)); - if (filter === 'finite' && results.some(r => r.some(e => !e.isFinite()))) { + const results = ops.map((o) => o(scalar, vector)); + if (filter === 'finite' && results.some((r) => r.some((e) => !e.isFinite()))) { return undefined; } return { input: [this.scalarBuilder(scalar), toVector(vector, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -817,11 +1408,16 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating a vector of acceptance intervals */ - generateScalarVectorToVectorCases(scalars, vectors, filter, ...ops) { + generateScalarVectorToVectorCases( + scalars, + vectors, + filter, + ...ops) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - scalars.forEach(scalar => { - vectors.forEach(vector => { + scalars.forEach((scalar) => { + vectors.forEach((vector) => { const c = this.makeScalarVectorToVectorCase(scalar, vector, filter, ...ops); if (c !== undefined) { cases.push(c); @@ -839,17 +1435,22 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating a vector of acceptance intervals */ - makeVectorScalarToVectorCase(vector, scalar, filter, ...ops) { + makeVectorScalarToVectorCase( + vector, + scalar, + filter, + ...ops) + { vector = vector.map(this.quantize); scalar = this.quantize(scalar); - const results = ops.map(o => o(vector, scalar)); - if (filter === 'finite' && results.some(r => r.some(e => !e.isFinite()))) { + const results = ops.map((o) => o(vector, scalar)); + if (filter === 'finite' && results.some((r) => r.some((e) => !e.isFinite()))) { return undefined; } return { input: [toVector(vector, this.scalarBuilder), this.scalarBuilder(scalar)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -860,11 +1461,16 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating a vector of acceptance intervals */ - generateVectorScalarToVectorCases(vectors, scalars, filter, ...ops) { + generateVectorScalarToVectorCases( + vectors, + scalars, + filter, + ...ops) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - vectors.forEach(vector => { - scalars.forEach(scalar => { + vectors.forEach((vector) => { + scalars.forEach((scalar) => { const c = this.makeVectorScalarToVectorCase(vector, scalar, filter, ...ops); if (c !== undefined) { cases.push(c); @@ -882,16 +1488,21 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals. */ - makeVectorPairToVectorCase(param0, param1, filter, ...ops) { + makeVectorPairToVectorCase( + param0, + param1, + filter, + ...ops) + { param0 = param0.map(this.quantize); param1 = param1.map(this.quantize); - const vectors = ops.map(o => o(param0, param1)); - if (filter === 'finite' && vectors.some(v => v.some(e => !e.isFinite()))) { + const vectors = ops.map((o) => o(param0, param1)); + if (filter === 'finite' && vectors.some((v) => v.some((e) => !e.isFinite()))) { return undefined; } return { input: [toVector(param0, this.scalarBuilder), toVector(param1, this.scalarBuilder)], - expected: anyOf(...vectors), + expected: anyOf(...vectors) }; } @@ -903,7 +1514,12 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals. */ - generateVectorPairToVectorCases(param0s, param1s, filter, ...ops) { + generateVectorPairToVectorCases( + param0s, + param1s, + filter, + ...ops) + { return cartesianProduct(param0s, param1s).reduce((cases, e) => { const c = this.makeVectorPairToVectorCase(e[0], e[1], filter, ...ops); if (c !== undefined) { @@ -924,12 +1540,12 @@ export class FPTraits { * one component result at a time. */ makeVectorPairScalarToVectorComponentWiseCase( - param0, - param1, - param2, - filter, - ...componentWiseOps - ) { + param0, + param1, + param2, + filter, + ...componentWiseOps) + { // Width of input vector const width = param0.length; assert(2 <= width && width <= 4, 'input vector width must between 2 and 4'); @@ -939,20 +1555,19 @@ export class FPTraits { param2 = this.quantize(param2); // Call the component-wise interval generator and build the expectation FPVector - const results = componentWiseOps.map(o => { + const results = componentWiseOps.map((o) => { return param0.map((el0, index) => o(el0, param1[index], param2)); }); - if (filter === 'finite' && results.some(r => r.some(e => !e.isFinite()))) { + if (filter === 'finite' && results.some((r) => r.some((e) => !e.isFinite()))) { return undefined; } return { input: [ - toVector(param0, this.scalarBuilder), - toVector(param1, this.scalarBuilder), - this.scalarBuilder(param2), - ], + toVector(param0, this.scalarBuilder), + toVector(param1, this.scalarBuilder), + this.scalarBuilder(param2)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -965,17 +1580,17 @@ export class FPTraits { * @param componentWiseOpscallbacks that implement generating a component-wise acceptance interval */ generateVectorPairScalarToVectorComponentWiseCase( - param0s, - param1s, - param2s, - filter, - ...componentWiseOps - ) { + param0s, + param1s, + param2s, + filter, + ...componentWiseOps) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - param0s.forEach(param0 => { - param1s.forEach(param1 => { - param2s.forEach(param2 => { + param0s.forEach((param0) => { + param1s.forEach((param1) => { + param2s.forEach((param2) => { const c = this.makeVectorPairScalarToVectorComponentWiseCase( param0, param1, @@ -983,7 +1598,6 @@ export class FPTraits { filter, ...componentWiseOps ); - if (c !== undefined) { cases.push(c); } @@ -999,17 +1613,21 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeMatrixToScalarCase(param, filter, ...ops) { + makeMatrixToScalarCase( + param, + filter, + ...ops) + { param = map2DArray(param, this.quantize); - const results = ops.map(o => o(param)); - if (filter === 'finite' && results.some(e => !e.isFinite())) { + const results = ops.map((o) => o(param)); + if (filter === 'finite' && results.some((e) => !e.isFinite())) { return undefined; } return { input: [toMatrix(param, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1019,7 +1637,11 @@ export class FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateMatrixToScalarCases(params, filter, ...ops) { + generateMatrixToScalarCases( + params, + filter, + ...ops) + { return params.reduce((cases, e) => { const c = this.makeMatrixToScalarCase(e, filter, ...ops); if (c !== undefined) { @@ -1036,17 +1658,21 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - makeMatrixToMatrixCase(param, filter, ...ops) { + makeMatrixToMatrixCase( + param, + filter, + ...ops) + { param = map2DArray(param, this.quantize); - const results = ops.map(o => o(param)); - if (filter === 'finite' && results.some(m => m.some(c => c.some(r => !r.isFinite())))) { + const results = ops.map((o) => o(param)); + if (filter === 'finite' && results.some((m) => m.some((c) => c.some((r) => !r.isFinite())))) { return undefined; } return { input: [toMatrix(param, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1057,7 +1683,11 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - generateMatrixToMatrixCases(params, filter, ...ops) { + generateMatrixToMatrixCases( + params, + filter, + ...ops) + { return params.reduce((cases, e) => { const c = this.makeMatrixToMatrixCase(e, filter, ...ops); if (c !== undefined) { @@ -1075,17 +1705,22 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - makeMatrixPairToMatrixCase(param0, param1, filter, ...ops) { + makeMatrixPairToMatrixCase( + param0, + param1, + filter, + ...ops) + { param0 = map2DArray(param0, this.quantize); param1 = map2DArray(param1, this.quantize); - const results = ops.map(o => o(param0, param1)); - if (filter === 'finite' && results.some(m => m.some(c => c.some(r => !r.isFinite())))) { + const results = ops.map((o) => o(param0, param1)); + if (filter === 'finite' && results.some((m) => m.some((c) => c.some((r) => !r.isFinite())))) { return undefined; } return { input: [toMatrix(param0, this.scalarBuilder), toMatrix(param1, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1097,7 +1732,12 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - generateMatrixPairToMatrixCases(param0s, param1s, filter, ...ops) { + generateMatrixPairToMatrixCases( + param0s, + param1s, + filter, + ...ops) + { return cartesianProduct(param0s, param1s).reduce((cases, e) => { const c = this.makeMatrixPairToMatrixCase(e[0], e[1], filter, ...ops); if (c !== undefined) { @@ -1115,17 +1755,22 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - makeMatrixScalarToMatrixCase(mat, scalar, filter, ...ops) { + makeMatrixScalarToMatrixCase( + mat, + scalar, + filter, + ...ops) + { mat = map2DArray(mat, this.quantize); scalar = this.quantize(scalar); - const results = ops.map(o => o(mat, scalar)); - if (filter === 'finite' && results.some(m => m.some(c => c.some(r => !r.isFinite())))) { + const results = ops.map((o) => o(mat, scalar)); + if (filter === 'finite' && results.some((m) => m.some((c) => c.some((r) => !r.isFinite())))) { return undefined; } return { input: [toMatrix(mat, this.scalarBuilder), this.scalarBuilder(scalar)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1137,11 +1782,16 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - generateMatrixScalarToMatrixCases(mats, scalars, filter, ...ops) { + generateMatrixScalarToMatrixCases( + mats, + scalars, + filter, + ...ops) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - mats.forEach(mat => { - scalars.forEach(scalar => { + mats.forEach((mat) => { + scalars.forEach((scalar) => { const c = this.makeMatrixScalarToMatrixCase(mat, scalar, filter, ...ops); if (c !== undefined) { cases.push(c); @@ -1159,17 +1809,22 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - makeScalarMatrixToMatrixCase(scalar, mat, filter, ...ops) { + makeScalarMatrixToMatrixCase( + scalar, + mat, + filter, + ...ops) + { scalar = this.quantize(scalar); mat = map2DArray(mat, this.quantize); - const results = ops.map(o => o(scalar, mat)); - if (filter === 'finite' && results.some(m => m.some(c => c.some(r => !r.isFinite())))) { + const results = ops.map((o) => o(scalar, mat)); + if (filter === 'finite' && results.some((m) => m.some((c) => c.some((r) => !r.isFinite())))) { return undefined; } return { input: [this.scalarBuilder(scalar), toMatrix(mat, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1181,11 +1836,16 @@ export class FPTraits { * @param ops callbacks that implement generating a matrix of acceptance * intervals */ - generateScalarMatrixToMatrixCases(scalars, mats, filter, ...ops) { + generateScalarMatrixToMatrixCases( + scalars, + mats, + filter, + ...ops) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - mats.forEach(mat => { - scalars.forEach(scalar => { + mats.forEach((mat) => { + scalars.forEach((scalar) => { const c = this.makeScalarMatrixToMatrixCase(scalar, mat, filter, ...ops); if (c !== undefined) { cases.push(c); @@ -1203,17 +1863,22 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals */ - makeMatrixVectorToVectorCase(mat, vec, filter, ...ops) { + makeMatrixVectorToVectorCase( + mat, + vec, + filter, + ...ops) + { mat = map2DArray(mat, this.quantize); vec = vec.map(this.quantize); - const results = ops.map(o => o(mat, vec)); - if (filter === 'finite' && results.some(v => v.some(e => !e.isFinite()))) { + const results = ops.map((o) => o(mat, vec)); + if (filter === 'finite' && results.some((v) => v.some((e) => !e.isFinite()))) { return undefined; } return { input: [toMatrix(mat, this.scalarBuilder), toVector(vec, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1225,11 +1890,16 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals */ - generateMatrixVectorToVectorCases(mats, vecs, filter, ...ops) { + generateMatrixVectorToVectorCases( + mats, + vecs, + filter, + ...ops) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - mats.forEach(mat => { - vecs.forEach(vec => { + mats.forEach((mat) => { + vecs.forEach((vec) => { const c = this.makeMatrixVectorToVectorCase(mat, vec, filter, ...ops); if (c !== undefined) { cases.push(c); @@ -1247,17 +1917,22 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals */ - makeVectorMatrixToVectorCase(vec, mat, filter, ...ops) { + makeVectorMatrixToVectorCase( + vec, + mat, + filter, + ...ops) + { vec = vec.map(this.quantize); mat = map2DArray(mat, this.quantize); - const results = ops.map(o => o(vec, mat)); - if (filter === 'finite' && results.some(v => v.some(e => !e.isFinite()))) { + const results = ops.map((o) => o(vec, mat)); + if (filter === 'finite' && results.some((v) => v.some((e) => !e.isFinite()))) { return undefined; } return { input: [toVector(vec, this.scalarBuilder), toMatrix(mat, this.scalarBuilder)], - expected: anyOf(...results), + expected: anyOf(...results) }; } @@ -1269,11 +1944,16 @@ export class FPTraits { * @param ops callbacks that implement generating a vector of acceptance * intervals */ - generateVectorMatrixToVectorCases(vecs, mats, filter, ...ops) { + generateVectorMatrixToVectorCases( + vecs, + mats, + filter, + ...ops) + { // Cannot use cartesianProduct here, due to heterogeneous types const cases = []; - vecs.forEach(vec => { - mats.forEach(mat => { + vecs.forEach((vec) => { + mats.forEach((mat) => { const c = this.makeVectorMatrixToVectorCase(vec, mat, filter, ...ops); if (c !== undefined) { cases.push(c); @@ -1301,6 +1981,15 @@ export class FPTraits { assert(!Number.isNaN(n), `flush not defined for NaN`); const values = this.correctlyRounded(n); const inputs = this.addFlushedIfNeeded(values); + + if (op.domain !== undefined) { + // Cannot invoke op.domain() directly in the .some, because the narrowing doesn't propegate. + const domain = op.domain(); + if (inputs.some((i) => !domain.contains(i))) { + return this.constants().unboundedInterval; + } + } + const results = new Set(inputs.map(op.impl)); return this.spanIntervals(...results); } @@ -1319,16 +2008,35 @@ export class FPTraits { * @param op operation defining the function being run * @returns a span over all the outputs of op.impl */ - roundAndFlushScalarPairToInterval(x, y, op) { + roundAndFlushScalarPairToInterval( + x, + y, + op) + { assert(!Number.isNaN(x), `flush not defined for NaN`); assert(!Number.isNaN(y), `flush not defined for NaN`); + const x_values = this.correctlyRounded(x); const y_values = this.correctlyRounded(y); const x_inputs = this.addFlushedIfNeeded(x_values); const y_inputs = this.addFlushedIfNeeded(y_values); + + if (op.domain !== undefined) { + // Cannot invoke op.domain() directly in the .some, because the narrowing doesn't propegate. + const domain = op.domain(); + + if (x_inputs.some((i) => !domain.x.some((e) => e.contains(i)))) { + return this.constants().unboundedInterval; + } + + if (y_inputs.some((j) => !domain.y.some((e) => e.contains(j)))) { + return this.constants().unboundedInterval; + } + } + const intervals = new Set(); - x_inputs.forEach(inner_x => { - y_inputs.forEach(inner_y => { + x_inputs.forEach((inner_x) => { + y_inputs.forEach((inner_y) => { intervals.add(op.impl(inner_x, inner_y)); }); }); @@ -1348,7 +2056,12 @@ export class FPTraits { * @param op operation defining the function being run * @returns a span over all the outputs of op.impl */ - roundAndFlushScalarTripleToInterval(x, y, z, op) { + roundAndFlushScalarTripleToInterval( + x, + y, + z, + op) + { assert(!Number.isNaN(x), `flush not defined for NaN`); assert(!Number.isNaN(y), `flush not defined for NaN`); assert(!Number.isNaN(z), `flush not defined for NaN`); @@ -1360,9 +2073,9 @@ export class FPTraits { const z_inputs = this.addFlushedIfNeeded(z_values); const intervals = new Set(); - x_inputs.forEach(inner_x => { - y_inputs.forEach(inner_y => { - z_inputs.forEach(inner_z => { + x_inputs.forEach((inner_x) => { + y_inputs.forEach((inner_y) => { + z_inputs.forEach((inner_z) => { intervals.add(op.impl(inner_x, inner_y, inner_z)); }); }); @@ -1383,7 +2096,7 @@ export class FPTraits { */ roundAndFlushVectorToInterval(x, op) { assert( - x.every(e => !Number.isNaN(e)), + x.every((e) => !Number.isNaN(e)), `flush not defined for NaN` ); @@ -1392,7 +2105,7 @@ export class FPTraits { const x_inputs = cartesianProduct(...x_flushed); const intervals = new Set(); - x_inputs.forEach(inner_x => { + x_inputs.forEach((inner_x) => { intervals.add(op.impl(inner_x)); }); return this.spanIntervals(...intervals); @@ -1411,14 +2124,17 @@ export class FPTraits { * @param op operation defining the function being run * @returns a span over all the outputs of op.impl */ - roundAndFlushVectorPairToInterval(x, y, op) { + roundAndFlushVectorPairToInterval( + x, + y, + op) + { assert( - x.every(e => !Number.isNaN(e)), + x.every((e) => !Number.isNaN(e)), `flush not defined for NaN` ); - assert( - y.every(e => !Number.isNaN(e)), + y.every((e) => !Number.isNaN(e)), `flush not defined for NaN` ); @@ -1430,8 +2146,8 @@ export class FPTraits { const y_inputs = cartesianProduct(...y_flushed); const intervals = new Set(); - x_inputs.forEach(inner_x => { - y_inputs.forEach(inner_y => { + x_inputs.forEach((inner_x) => { + y_inputs.forEach((inner_y) => { intervals.add(op.impl(inner_x, inner_y)); }); }); @@ -1451,7 +2167,7 @@ export class FPTraits { */ roundAndFlushVectorToVector(x, op) { assert( - x.every(e => !Number.isNaN(e)), + x.every((e) => !Number.isNaN(e)), `flush not defined for NaN` ); @@ -1460,7 +2176,7 @@ export class FPTraits { const x_inputs = cartesianProduct(...x_flushed); const interval_vectors = new Set(); - x_inputs.forEach(inner_x => { + x_inputs.forEach((inner_x) => { interval_vectors.add(op.impl(inner_x)); }); @@ -1479,14 +2195,17 @@ export class FPTraits { * @param op operation defining the function being run * @returns a vector of spans for each output of op.impl */ - roundAndFlushVectorPairToVector(x, y, op) { + roundAndFlushVectorPairToVector( + x, + y, + op) + { assert( - x.every(e => !Number.isNaN(e)), + x.every((e) => !Number.isNaN(e)), `flush not defined for NaN` ); - assert( - y.every(e => !Number.isNaN(e)), + y.every((e) => !Number.isNaN(e)), `flush not defined for NaN` ); @@ -1498,8 +2217,8 @@ export class FPTraits { const y_inputs = cartesianProduct(...y_flushed); const interval_vectors = new Set(); - x_inputs.forEach(inner_x => { - y_inputs.forEach(inner_y => { + x_inputs.forEach((inner_x) => { + y_inputs.forEach((inner_y) => { interval_vectors.add(op.impl(inner_x, inner_y)); }); }); @@ -1522,7 +2241,7 @@ export class FPTraits { const num_cols = m.length; const num_rows = m[0].length; assert( - m.every(c => c.every(r => !Number.isNaN(r))), + m.every((c) => c.every((r) => !Number.isNaN(r))), `flush not defined for NaN` ); @@ -1530,10 +2249,12 @@ export class FPTraits { const m_rounded = m_flat.map(this.correctlyRounded); const m_flushed = m_rounded.map(this.addFlushedIfNeeded.bind(this)); const m_options = cartesianProduct(...m_flushed); - const m_inputs = m_options.map(e => unflatten2DArray(e, num_cols, num_rows)); + const m_inputs = m_options.map((e) => + unflatten2DArray(e, num_cols, num_rows) + ); const interval_matrices = new Set(); - m_inputs.forEach(inner_m => { + m_inputs.forEach((inner_m) => { interval_matrices.add(op.impl(inner_m)); }); @@ -1563,9 +2284,8 @@ export class FPTraits { } const result = this.spanIntervals( - ...x.bounds().map(b => this.roundAndFlushScalarToInterval(b, op)) + ...x.endpoints().map((b) => this.roundAndFlushScalarToInterval(b, op)) ); - return result.isFinite() ? result : this.constants().unboundedInterval; } @@ -1580,7 +2300,11 @@ export class FPTraits { * @param op operation defining the function being run * @returns a span over all the outputs of op.impl */ - runScalarPairToIntervalOp(x, y, op) { + runScalarPairToIntervalOp( + x, + y, + op) + { if (!x.isFinite() || !y.isFinite()) { return this.constants().unboundedInterval; } @@ -1590,8 +2314,8 @@ export class FPTraits { } const outputs = new Set(); - x.bounds().forEach(inner_x => { - y.bounds().forEach(inner_y => { + x.endpoints().forEach((inner_x) => { + y.endpoints().forEach((inner_y) => { outputs.add(this.roundAndFlushScalarPairToInterval(inner_x, inner_y, op)); }); }); @@ -1609,15 +2333,20 @@ export class FPTraits { * @param op operation defining the function being run * @returns a span over all the outputs of op.impl */ - runScalarTripleToIntervalOp(x, y, z, op) { + runScalarTripleToIntervalOp( + x, + y, + z, + op) + { if (!x.isFinite() || !y.isFinite() || !z.isFinite()) { return this.constants().unboundedInterval; } const outputs = new Set(); - x.bounds().forEach(inner_x => { - y.bounds().forEach(inner_y => { - z.bounds().forEach(inner_z => { + x.endpoints().forEach((inner_x) => { + y.endpoints().forEach((inner_y) => { + z.endpoints().forEach((inner_z) => { outputs.add(this.roundAndFlushScalarTripleToInterval(inner_x, inner_y, inner_z, op)); }); }); @@ -1636,14 +2365,14 @@ export class FPTraits { * @returns a span over all the outputs of op.impl */ runVectorToIntervalOp(x, op) { - if (x.some(e => !e.isFinite())) { + if (x.some((e) => !e.isFinite())) { return this.constants().unboundedInterval; } - const x_values = cartesianProduct(...x.map(e => e.bounds())); + const x_values = cartesianProduct(...x.map((e) => e.endpoints())); const outputs = new Set(); - x_values.forEach(inner_x => { + x_values.forEach((inner_x) => { outputs.add(this.roundAndFlushVectorToInterval(inner_x, op)); }); @@ -1660,17 +2389,21 @@ export class FPTraits { * @param op operation defining the function being run * @returns a span over all the outputs of op.impl */ - runVectorPairToIntervalOp(x, y, op) { - if (x.some(e => !e.isFinite()) || y.some(e => !e.isFinite())) { + runVectorPairToIntervalOp( + x, + y, + op) + { + if (x.some((e) => !e.isFinite()) || y.some((e) => !e.isFinite())) { return this.constants().unboundedInterval; } - const x_values = cartesianProduct(...x.map(e => e.bounds())); - const y_values = cartesianProduct(...y.map(e => e.bounds())); + const x_values = cartesianProduct(...x.map((e) => e.endpoints())); + const y_values = cartesianProduct(...y.map((e) => e.endpoints())); const outputs = new Set(); - x_values.forEach(inner_x => { - y_values.forEach(inner_y => { + x_values.forEach((inner_x) => { + y_values.forEach((inner_y) => { outputs.add(this.roundAndFlushVectorPairToInterval(inner_x, inner_y, op)); }); }); @@ -1688,21 +2421,21 @@ export class FPTraits { * @returns a vector of spans over all the outputs of op.impl */ runVectorToVectorOp(x, op) { - if (x.some(e => !e.isFinite())) { + if (x.some((e) => !e.isFinite())) { return this.constants().unboundedVector[x.length]; } - const x_values = cartesianProduct(...x.map(e => e.bounds())); + const x_values = cartesianProduct(...x.map((e) => e.endpoints())); const outputs = new Set(); - x_values.forEach(inner_x => { + x_values.forEach((inner_x) => { outputs.add(this.roundAndFlushVectorToVector(inner_x, op)); }); const result = this.spanVectors(...outputs); - return result.every(e => e.isFinite()) - ? result - : this.constants().unboundedVector[result.length]; + return result.every((e) => e.isFinite()) ? + result : + this.constants().unboundedVector[result.length]; } /** @@ -1719,7 +2452,7 @@ export class FPTraits { * @returns a vector of intervals with the outputs of op.impl */ runScalarToIntervalOpComponentWise(x, op) { - return this.toVector(x.map(e => this.runScalarToIntervalOp(e, op))); + return this.toVector(x.map((e) => this.runScalarToIntervalOp(e, op))); } /** @@ -1732,24 +2465,24 @@ export class FPTraits { * @returns a vector of spans over all the outputs of op.impl */ runVectorPairToVectorOp(x, y, op) { - if (x.some(e => !e.isFinite()) || y.some(e => !e.isFinite())) { + if (x.some((e) => !e.isFinite()) || y.some((e) => !e.isFinite())) { return this.constants().unboundedVector[x.length]; } - const x_values = cartesianProduct(...x.map(e => e.bounds())); - const y_values = cartesianProduct(...y.map(e => e.bounds())); + const x_values = cartesianProduct(...x.map((e) => e.endpoints())); + const y_values = cartesianProduct(...y.map((e) => e.endpoints())); const outputs = new Set(); - x_values.forEach(inner_x => { - y_values.forEach(inner_y => { + x_values.forEach((inner_x) => { + y_values.forEach((inner_y) => { outputs.add(this.roundAndFlushVectorPairToVector(inner_x, inner_y, op)); }); }); const result = this.spanVectors(...outputs); - return result.every(e => e.isFinite()) - ? result - : this.constants().unboundedVector[result.length]; + return result.every((e) => e.isFinite()) ? + result : + this.constants().unboundedVector[result.length]; } /** @@ -1766,7 +2499,11 @@ export class FPTraits { * @param op scalar operation to be run component-wise * @returns a vector of intervals with the outputs of op.impl */ - runScalarPairToIntervalOpVectorComponentWise(x, y, op) { + runScalarPairToIntervalOpVectorComponentWise( + x, + y, + op) + { assert( x.length === y.length, `runScalarPairToIntervalOpVectorComponentWise requires vectors of the same dimensions` @@ -1790,15 +2527,17 @@ export class FPTraits { runMatrixToMatrixOp(m, op) { const num_cols = m.length; const num_rows = m[0].length; - if (m.some(c => c.some(r => !r.isFinite()))) { + if (m.some((c) => c.some((r) => !r.isFinite()))) { return this.constants().unboundedMatrix[num_cols][num_rows]; } const m_flat = flatten2DArray(m); - const m_values = cartesianProduct(...m_flat.map(e => e.bounds())); + const m_values = cartesianProduct( + ...m_flat.map((e) => e.endpoints()) + ); const outputs = new Set(); - m_values.forEach(inner_m => { + m_values.forEach((inner_m) => { const unflat_m = unflatten2DArray(inner_m, num_cols, num_rows); outputs.add(this.roundAndFlushMatrixToMatrix(unflat_m, op)); }); @@ -1807,12 +2546,12 @@ export class FPTraits { const result_cols = result.length; const result_rows = result[0].length; - // FPMatrix has to be coerced to FPInterval[][] to use .every. This should + // FPMatrix has to be coerced to ROArrayArray to use .every. This should // always be safe, since FPMatrix are defined as fixed length array of // arrays. - return result.every(c => c.every(r => r.isFinite())) - ? result - : this.constants().unboundedMatrix[result_cols][result_rows]; + return result.every((c) => c.every((r) => r.isFinite())) ? + result : + this.constants().unboundedMatrix[result_cols][result_rows]; } /** @@ -1826,7 +2565,11 @@ export class FPTraits { * @param op scalar operation to be run component-wise * @returns a matrix of intervals with the outputs of op.impl */ - runScalarPairToIntervalOpMatrixComponentWise(x, y, op) { + runScalarPairToIntervalOpMatrixComponentWise( + x, + y, + op) + { assert( x.length === y.length && x[0].length === y[0].length, `runScalarPairToIntervalOpMatrixComponentWise requires matrices of the same dimensions` @@ -1853,9 +2596,9 @@ export class FPTraits { /** @returns a ScalarToIntervalOp for [n - error_range, n + error_range] */ AbsoluteErrorIntervalOp(error_range) { const op = { - impl: _ => { + impl: (_) => { return this.constants().unboundedInterval; - }, + } }; assert( @@ -1864,7 +2607,7 @@ export class FPTraits { ); if (this.isFinite(error_range)) { - op.impl = n => { + op.impl = (n) => { assert(!Number.isNaN(n), `absolute error not defined for NaN`); // Return anyInterval if given center n is infinity. if (!this.isFinite(n)) { @@ -1887,15 +2630,16 @@ export class FPTraits { /** @returns an interval of the absolute error around the point */ + /** * Defines a ScalarToIntervalOp for an interval of the correctly rounded values * around the point */ CorrectlyRoundedIntervalOp = { - impl: n => { + impl: (n) => { assert(!Number.isNaN(n), `absolute not defined for NaN`); return this.toInterval(n); - }, + } }; correctlyRoundedIntervalImpl(n) { @@ -1904,22 +2648,24 @@ export class FPTraits { /** @returns an interval of the correctly rounded values around the point */ + correctlyRoundedMatrixImpl(m) { return this.toMatrix(map2DArray(m, this.correctlyRoundedInterval)); } /** @returns a matrix of correctly rounded intervals for the provided matrix */ + /** @returns a ScalarToIntervalOp for [n - numULP * ULP(n), n + numULP * ULP(n)] */ ULPIntervalOp(numULP) { const op = { - impl: _ => { + impl: (_) => { return this.constants().unboundedInterval; - }, + } }; if (this.isFinite(numULP)) { - op.impl = n => { + op.impl = (n) => { assert(!Number.isNaN(n), `ULP error not defined for NaN`); const ulp = this.oneULP(n); @@ -1927,9 +2673,9 @@ export class FPTraits { const end = n + numULP * ulp; return this.toInterval([ - Math.min(begin, this.flushSubnormal(begin)), - Math.max(end, this.flushSubnormal(end)), - ]); + Math.min(begin, this.flushSubnormal(begin)), + Math.max(end, this.flushSubnormal(end))] + ); }; } @@ -1943,12 +2689,13 @@ export class FPTraits { /** @returns an interval of N * ULP around the point */ + // API - Acceptance Intervals AbsIntervalOp = { - impl: n => { + impl: (n) => { return this.correctlyRoundedInterval(Math.abs(n)); - }, + } }; absIntervalImpl(n) { @@ -1957,9 +2704,10 @@ export class FPTraits { /** Calculate an acceptance interval for abs(n) */ + // This op is implemented differently for f32 and f16. AcosIntervalOp = { - impl: this.limitScalarToIntervalDomain(this.toInterval([-1.0, 1.0]), n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); // acos(n) = atan2(sqrt(1.0 - n * n), n) or a polynomial approximation with absolute error const y = this.sqrtInterval(this.subtractionInterval(1, this.multiplicationInterval(n, n))); @@ -1968,7 +2716,10 @@ export class FPTraits { this.atan2Interval(y, n), this.absoluteErrorInterval(Math.acos(n), approx_abs_error) ); - }), + }, + domain: () => { + return this.constants().negOneToOneInterval; + } }; acosIntervalImpl(n) { @@ -1977,17 +2728,17 @@ export class FPTraits { /** Calculate an acceptance interval for acos(n) */ + AcoshAlternativeIntervalOp = { - impl: x => { + impl: (x) => { // acosh(x) = log(x + sqrt((x + 1.0f) * (x - 1.0))) const inner_value = this.multiplicationInterval( this.additionInterval(x, 1.0), this.subtractionInterval(x, 1.0) ); - const sqrt_value = this.sqrtInterval(inner_value); return this.logInterval(this.additionInterval(x, sqrt_value)); - }, + } }; acoshAlternativeIntervalImpl(x) { @@ -1996,13 +2747,14 @@ export class FPTraits { /** Calculate an acceptance interval of acosh(x) using log(x + sqrt((x + 1.0f) * (x - 1.0))) */ + AcoshPrimaryIntervalOp = { - impl: x => { + impl: (x) => { // acosh(x) = log(x + sqrt(x * x - 1.0)) const inner_value = this.subtractionInterval(this.multiplicationInterval(x, x), 1.0); const sqrt_value = this.sqrtInterval(inner_value); return this.logInterval(this.additionInterval(x, sqrt_value)); - }, + } }; acoshPrimaryIntervalImpl(x) { @@ -2011,10 +2763,14 @@ export class FPTraits { /** Calculate an acceptance interval of acosh(x) using log(x + sqrt(x * x - 1.0)) */ + + /** All acceptance interval functions for acosh(x) */ + + AdditionIntervalOp = { impl: (x, y) => { return this.correctlyRoundedInterval(x + y); - }, + } }; additionIntervalImpl(x, y) { @@ -2027,6 +2783,10 @@ export class FPTraits { /** Calculate an acceptance interval of x + y, when x and y are both scalars */ + + + + additionMatrixMatrixIntervalImpl(x, y) { return this.runScalarPairToIntervalOpMatrixComponentWise( this.toMatrix(x), @@ -2037,9 +2797,13 @@ export class FPTraits { /** Calculate an acceptance interval of x + y, when x and y are matrices */ + + + + // This op is implemented differently for f32 and f16. AsinIntervalOp = { - impl: this.limitScalarToIntervalDomain(this.toInterval([-1.0, 1.0]), n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); // asin(n) = atan2(n, sqrt(1.0 - n * n)) or a polynomial approximation with absolute error const x = this.sqrtInterval(this.subtractionInterval(1, this.multiplicationInterval(n, n))); @@ -2048,7 +2812,10 @@ export class FPTraits { this.atan2Interval(n, x), this.absoluteErrorInterval(Math.asin(n), approx_abs_error) ); - }), + }, + domain: () => { + return this.constants().negOneToOneInterval; + } }; /** Calculate an acceptance interval for asin(n) */ @@ -2058,13 +2825,14 @@ export class FPTraits { /** Calculate an acceptance interval for asin(n) */ + AsinhIntervalOp = { - impl: x => { + impl: (x) => { // asinh(x) = log(x + sqrt(x * x + 1.0)) const inner_value = this.additionInterval(this.multiplicationInterval(x, x), 1.0); const sqrt_value = this.sqrtInterval(inner_value); return this.logInterval(this.additionInterval(x, sqrt_value)); - }, + } }; asinhIntervalImpl(n) { @@ -2073,12 +2841,13 @@ export class FPTraits { /** Calculate an acceptance interval of asinh(x) */ + AtanIntervalOp = { - impl: n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const ulp_error = this.kind === 'f32' ? 4096 : 5; return this.ulpInterval(Math.atan(n), ulp_error); - }, + } }; /** Calculate an acceptance interval of atan(x) */ @@ -2088,6 +2857,7 @@ export class FPTraits { /** Calculate an acceptance interval of atan(x) */ + // This op is implemented differently for f32 and f16. Atan2IntervalOpBuilder() { assert(this.kind === 'f32' || this.kind === 'f16'); @@ -2096,41 +2866,33 @@ export class FPTraits { // and domain.y is the second parameter (x). // The first param must be finite and normal. const domain_x = [ - this.toInterval([constants.negative.min, constants.negative.max]), - this.toInterval([constants.positive.min, constants.positive.max]), - ]; + this.toInterval([constants.negative.min, constants.negative.max]), + this.toInterval([constants.positive.min, constants.positive.max])]; // inherited from division const domain_y = - this.kind === 'f32' - ? [this.toInterval([-(2 ** 126), -(2 ** -126)]), this.toInterval([2 ** -126, 2 ** 126])] - : [this.toInterval([-(2 ** 14), -(2 ** -14)]), this.toInterval([2 ** -14, 2 ** 14])]; + this.kind === 'f32' ? + [this.toInterval([-(2 ** 126), -(2 ** -126)]), this.toInterval([2 ** -126, 2 ** 126])] : + [this.toInterval([-(2 ** 14), -(2 ** -14)]), this.toInterval([2 ** -14, 2 ** 14])]; const ulp_error = this.kind === 'f32' ? 4096 : 5; return { - impl: this.limitScalarPairToIntervalDomain( - { - x: domain_x, - y: domain_y, - }, - (y, x) => { - // Accurate result in f64 - let atan_yx = Math.atan(y / x); - // Offset by +/-pi according to the definition. Use pi value in f64 because we are - // handling accurate result. - if (x < 0) { - // x < 0, y > 0, result is atan(y/x) + π - if (y > 0) { - atan_yx = atan_yx + kValue.f64.positive.pi.whole; - } else { - // x < 0, y < 0, result is atan(y/x) - π - atan_yx = atan_yx - kValue.f64.positive.pi.whole; - } + impl: (y, x) => { + // Accurate result in f64 + let atan_yx = Math.atan(y / x); + // Offset by +/-pi according to the definition. Use pi value in f64 because we are + // handling accurate result. + if (x < 0) { + // x < 0, y > 0, result is atan(y/x) + π + if (y > 0) { + atan_yx = atan_yx + kValue.f64.positive.pi.whole; + } else { + // x < 0, y < 0, result is atan(y/x) - π + atan_yx = atan_yx - kValue.f64.positive.pi.whole; } - - return this.ulpInterval(atan_yx, ulp_error); } - ), + return this.ulpInterval(atan_yx, ulp_error); + }, extrema: (y, x) => { // There is discontinuity, which generates an unbounded result, at y/x = 0 that will dominate the accuracy if (y.contains(0)) { @@ -2141,6 +2903,9 @@ export class FPTraits { } return [y, x]; }, + domain: () => { + return { x: domain_x, y: domain_y }; + } }; } @@ -2154,14 +2919,18 @@ export class FPTraits { /** Calculate an acceptance interval of atan2(y, x) */ + + + + AtanhIntervalOp = { - impl: n => { + impl: (n) => { // atanh(x) = log((1.0 + x) / (1.0 - x)) * 0.5 const numerator = this.additionInterval(1.0, n); const denominator = this.subtractionInterval(1.0, n); const log_interval = this.logInterval(this.divisionInterval(numerator, denominator)); return this.multiplicationInterval(log_interval, 0.5); - }, + } }; atanhIntervalImpl(n) { @@ -2170,10 +2939,11 @@ export class FPTraits { /** Calculate an acceptance interval of atanh(x) */ + CeilIntervalOp = { - impl: n => { + impl: (n) => { return this.correctlyRoundedInterval(Math.ceil(n)); - }, + } }; ceilIntervalImpl(n) { @@ -2182,6 +2952,7 @@ export class FPTraits { /** Calculate an acceptance interval of ceil(x) */ + ClampMedianIntervalOp = { impl: (x, y, z) => { return this.correctlyRoundedInterval( @@ -2197,10 +2968,14 @@ export class FPTraits { return 0; })[1] ); - }, + } }; - clampMedianIntervalImpl(x, y, z) { + clampMedianIntervalImpl( + x, + y, + z) + { return this.runScalarTripleToIntervalOp( this.toInterval(x), this.toInterval(y), @@ -2211,13 +2986,22 @@ export class FPTraits { /** Calculate an acceptance interval of clamp(x, y, z) via median(x, y, z) */ + + + + + ClampMinMaxIntervalOp = { impl: (x, low, high) => { return this.minInterval(this.maxInterval(x, low), high); - }, + } }; - clampMinMaxIntervalImpl(x, low, high) { + clampMinMaxIntervalImpl( + x, + low, + high) + { return this.runScalarTripleToIntervalOp( this.toInterval(x), this.toInterval(low), @@ -2228,12 +3012,23 @@ export class FPTraits { /** Calculate an acceptance interval of clamp(x, high, low) via min(max(x, low), high) */ + + + + + + /** All acceptance interval functions for clamp(x, y, z) */ + + CosIntervalOp = { - impl: this.limitScalarToIntervalDomain(this.constants().negPiToPiInterval, n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const abs_error = this.kind === 'f32' ? 2 ** -11 : 2 ** -7; return this.absoluteErrorInterval(Math.cos(n), abs_error); - }), + }, + domain: () => { + return this.constants().negPiToPiInterval; + } }; cosIntervalImpl(n) { @@ -2242,15 +3037,16 @@ export class FPTraits { /** Calculate an acceptance interval of cos(x) */ + CoshIntervalOp = { - impl: n => { + impl: (n) => { // cosh(x) = (exp(x) + exp(-x)) * 0.5 const minus_n = this.negationInterval(n); return this.multiplicationInterval( this.additionInterval(this.expInterval(n), this.expInterval(minus_n)), 0.5 ); - }, + } }; coshIntervalImpl(n) { @@ -2259,6 +3055,7 @@ export class FPTraits { /** Calculate an acceptance interval of cosh(x) */ + CrossIntervalOp = { impl: (x, y) => { assert(x.length === 3, `CrossIntervalOp received x with ${x.length} instead of 3`); @@ -2273,19 +3070,16 @@ export class FPTraits { this.multiplicationInterval(x[1], y[2]), this.multiplicationInterval(x[2], y[1]) ); - const r1 = this.subtractionInterval( this.multiplicationInterval(x[2], y[0]), this.multiplicationInterval(x[0], y[2]) ); - const r2 = this.subtractionInterval( this.multiplicationInterval(x[0], y[1]), this.multiplicationInterval(x[1], y[0]) ); - return [r0, r1, r2]; - }, + } }; crossIntervalImpl(x, y) { @@ -2296,10 +3090,11 @@ export class FPTraits { /** Calculate a vector of acceptance intervals for cross(x, y) */ + DegreesIntervalOp = { - impl: n => { + impl: (n) => { return this.multiplicationInterval(n, 57.295779513082322865); - }, + } }; degreesIntervalImpl(n) { @@ -2308,6 +3103,7 @@ export class FPTraits { /** Calculate an acceptance interval of degrees(x) */ + /** * Calculate the minor of a NxN matrix. * @@ -2320,10 +3116,10 @@ export class FPTraits { assert(col >= 0 && col < dim, `col ${col} needs be in [0, # of columns '${dim}')`); assert(row >= 0 && row < dim, `row ${row} needs be in [0, # of rows '${dim}')`); - const result = [...Array(dim - 1)].map(_ => [...Array(dim - 1)]); + const result = [...Array(dim - 1)].map((_) => [...Array(dim - 1)]); - const col_indices = [...Array(dim).keys()].filter(e => e !== col); - const row_indices = [...Array(dim).keys()].filter(e => e !== row); + const col_indices = [...Array(dim).keys()].filter((e) => e !== col); + const row_indices = [...Array(dim).keys()].filter((e) => e !== row); col_indices.forEach((c, i) => { row_indices.forEach((r, j) => { @@ -2339,7 +3135,6 @@ export class FPTraits { m.length === m[0].length && m.length === 2, `determinant2x2Interval called on non-2x2 matrix` ); - return this.subtractionInterval( this.multiplicationInterval(m[0][0], m[1][1]), this.multiplicationInterval(m[0][1], m[1][0]) @@ -2364,12 +3159,10 @@ export class FPTraits { m[0][0], this.determinant2x2Interval(this.minorNxN(m, 0, 0)) ); - const B = this.multiplicationInterval( -m[0][1], this.determinant2x2Interval(this.minorNxN(m, 0, 1)) ); - const C = this.multiplicationInterval( m[0][2], this.determinant2x2Interval(this.minorNxN(m, 0, 2)) @@ -2379,7 +3172,9 @@ export class FPTraits { // so A + B + C is not guaranteed to equal B + C + A, etc. const permutations = calculatePermutations([A, B, C]); return this.spanIntervals( - ...permutations.map(p => p.reduce((prev, cur) => this.additionInterval(prev, cur))) + ...permutations.map((p) => + p.reduce((prev, cur) => this.additionInterval(prev, cur)) + ) ); } @@ -2401,17 +3196,14 @@ export class FPTraits { m[0][0], this.determinant3x3Interval(this.minorNxN(m, 0, 0)) ); - const B = this.multiplicationInterval( -m[0][1], this.determinant3x3Interval(this.minorNxN(m, 0, 1)) ); - const C = this.multiplicationInterval( m[0][2], this.determinant3x3Interval(this.minorNxN(m, 0, 2)) ); - const D = this.multiplicationInterval( -m[0][3], this.determinant3x3Interval(this.minorNxN(m, 0, 3)) @@ -2421,7 +3213,9 @@ export class FPTraits { // so A + B + C + D is not guaranteed to equal B + C + A + D, etc. const permutations = calculatePermutations([A, B, C, D]); return this.spanIntervals( - ...permutations.map(p => p.reduce((prev, cur) => this.additionInterval(prev, cur))) + ...permutations.map((p) => + p.reduce((prev, cur) => this.additionInterval(prev, cur)) + ) ); } @@ -2449,7 +3243,6 @@ export class FPTraits { x[0].length === dim && (dim === 2 || dim === 3 || dim === 4), `determinantInterval only defined for 2x2, 3x3 and 4x4 matrices` ); - switch (dim) { case 2: return this.determinant2x2Interval(x); @@ -2458,7 +3251,6 @@ export class FPTraits { case 4: return this.determinant4x4Interval(x); } - unreachable( "determinantInterval called on x, where which has an unexpected dimension of '${dim}'" ); @@ -2466,10 +3258,11 @@ export class FPTraits { /** Calculate an acceptance interval for determinant(x) */ + DistanceIntervalScalarOp = { impl: (x, y) => { return this.lengthInterval(this.subtractionInterval(x, y)); - }, + } }; DistanceIntervalVectorOp = { @@ -2481,16 +3274,18 @@ export class FPTraits { this.SubtractionIntervalOp ) ); - }, + } }; - distanceIntervalImpl(x, y) { + distanceIntervalImpl( + x, + y) + { if (x instanceof Array && y instanceof Array) { assert( x.length === y.length, `distanceInterval requires both params to have the same number of elements` ); - return this.runVectorPairToIntervalOp( this.toVector(x), this.toVector(y), @@ -2510,29 +3305,25 @@ export class FPTraits { /** Calculate an acceptance interval of distance(x, y) */ + + + + // This op is implemented differently for f32 and f16. DivisionIntervalOpBuilder() { - assert(this.kind === 'f32' || this.kind === 'f16'); const constants = this.constants(); const domain_x = [this.toInterval([constants.negative.min, constants.positive.max])]; const domain_y = - this.kind === 'f32' - ? [this.toInterval([-(2 ** 126), -(2 ** -126)]), this.toInterval([2 ** -126, 2 ** 126])] - : [this.toInterval([-(2 ** 14), -(2 ** -14)]), this.toInterval([2 ** -14, 2 ** 14])]; + this.kind === 'f32' || this.kind === 'abstract' ? + [this.toInterval([-(2 ** 126), -(2 ** -126)]), this.toInterval([2 ** -126, 2 ** 126])] : + [this.toInterval([-(2 ** 14), -(2 ** -14)]), this.toInterval([2 ** -14, 2 ** 14])]; return { - impl: this.limitScalarPairToIntervalDomain( - { - x: domain_x, - y: domain_y, - }, - (x, y) => { - if (y === 0) { - return constants.unboundedInterval; - } - return this.ulpInterval(x / y, 2.5); + impl: (x, y) => { + if (y === 0) { + return constants.unboundedInterval; } - ), - + return this.ulpInterval(x / y, 2.5); + }, extrema: (x, y) => { // division has a discontinuity at y = 0. if (y.contains(0)) { @@ -2540,11 +3331,13 @@ export class FPTraits { } return [x, y]; }, + domain: () => { + return { x: domain_x, y: domain_y }; + } }; } divisionIntervalImpl(x, y) { - assert(this.kind === 'f32' || this.kind === 'f16'); return this.runScalarPairToIntervalOp( this.toInterval(x), this.toInterval(y), @@ -2554,6 +3347,10 @@ export class FPTraits { /** Calculate an acceptance interval of x / y */ + + + + DotIntervalOp = { impl: (x, y) => { // dot(x, y) = sum of x[i] * y[i] @@ -2574,24 +3371,31 @@ export class FPTraits { // guaranteed to equal b + a + c const permutations = calculatePermutations(multiplications); return this.spanIntervals( - ...permutations.map(p => p.reduce((prev, cur) => this.additionInterval(prev, cur))) + ...permutations.map((p) => p.reduce((prev, cur) => this.additionInterval(prev, cur))) ); - }, + } }; - dotIntervalImpl(x, y) { + dotIntervalImpl( + x, + y) + { assert(x.length === y.length, `dot not defined for vectors with different lengths`); return this.runVectorPairToIntervalOp(this.toVector(x), this.toVector(y), this.DotIntervalOp); } /** Calculated the acceptance interval for dot(x, y) */ + + + + ExpIntervalOp = { - impl: n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const ulp_error = this.kind === 'f32' ? 3 + 2 * Math.abs(n) : 1 + 2 * Math.abs(n); return this.ulpInterval(Math.exp(n), ulp_error); - }, + } }; expIntervalImpl(x) { @@ -2600,12 +3404,13 @@ export class FPTraits { /** Calculate an acceptance interval for exp(x) */ + Exp2IntervalOp = { - impl: n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const ulp_error = this.kind === 'f32' ? 3 + 2 * Math.abs(n) : 1 + 2 * Math.abs(n); return this.ulpInterval(Math.pow(2, n), ulp_error); - }, + } }; exp2IntervalImpl(x) { @@ -2614,6 +3419,7 @@ export class FPTraits { /** Calculate an acceptance interval for exp2(x) */ + /** * faceForward(x, y, z) = select(-x, x, dot(z, y) < 0.0) * @@ -2624,15 +3430,19 @@ export class FPTraits { * Thus, a bespoke implementation is used instead of * defining an Op and running that through the framework. */ - faceForwardIntervalsImpl(x, y, z) { + faceForwardIntervalsImpl( + x, + y, + z) + { const x_vec = this.toVector(x); // Running vector through this.runScalarToIntervalOpComponentWise to make // sure that flushing/rounding is handled, since toVector does not perform // those operations. const positive_x = this.runScalarToIntervalOpComponentWise(x_vec, { - impl: i => { + impl: (i) => { return this.toInterval(i); - }, + } }); const negative_x = this.runScalarToIntervalOpComponentWise(x_vec, this.NegationIntervalOp); @@ -2663,19 +3473,23 @@ export class FPTraits { } assert( - results.length > 0 || results.every(r => r === undefined), + results.length > 0 || results.every((r) => r === undefined), `faceForwardInterval selected neither positive x or negative x for the result, this shouldn't be possible` ); - return results; } /** Calculate the acceptance intervals for faceForward(x, y, z) */ + + + + + FloorIntervalOp = { - impl: n => { + impl: (n) => { return this.correctlyRoundedInterval(Math.floor(n)); - }, + } }; floorIntervalImpl(n) { @@ -2684,10 +3498,11 @@ export class FPTraits { /** Calculate an acceptance interval of floor(x) */ + FmaIntervalOp = { impl: (x, y, z) => { return this.additionInterval(this.multiplicationInterval(x, y), z); - }, + } }; fmaIntervalImpl(x, y, z) { @@ -2701,8 +3516,9 @@ export class FPTraits { /** Calculate an acceptance interval for fma(x, y, z) */ + FractIntervalOp = { - impl: n => { + impl: (n) => { // fract(x) = x - floor(x) is defined in the spec. // For people coming from a non-graphics background this will cause some // unintuitive results. For example, @@ -2716,7 +3532,6 @@ export class FPTraits { this.toInterval([this.constants().negative.subnormal.min, 1.0]).contains(result), `fract(${n}) interval [${result}] unexpectedly extends beyond [~0.0, 1.0]` ); - if (result.contains(1)) { // Very small negative numbers can lead to catastrophic cancellation, // thus calculating a fract of 1.0, which is technically not a @@ -2725,7 +3540,7 @@ export class FPTraits { return this.spanIntervals(result, this.toInterval(this.constants().positive.less_than_one)); } return result; - }, + } }; fractIntervalImpl(n) { @@ -2734,10 +3549,14 @@ export class FPTraits { /** Calculate an acceptance interval of fract(x) */ + InverseSqrtIntervalOp = { - impl: this.limitScalarToIntervalDomain(this.constants().greaterThanZeroInterval, n => { + impl: (n) => { return this.ulpInterval(1 / Math.sqrt(n), 2); - }), + }, + domain: () => { + return this.constants().greaterThanZeroInterval; + } }; inverseSqrtIntervalImpl(n) { @@ -2746,6 +3565,7 @@ export class FPTraits { /** Calculate an acceptance interval of inverseSqrt(x) */ + LdexpIntervalOp = { impl: (e1, e2) => { assert(this.kind === 'f32' || this.kind === 'f16'); @@ -2755,9 +3575,9 @@ export class FPTraits { if (e2 > bias + 1) { return this.constants().unboundedInterval; } - // The spec says the result of ldexp(e1, e2) = e1 * 2 ^ e2, and the accuracy is correctly - // rounded to the true value, so the inheritance framework does not need to be invoked to - // determine bounds. + // The spec says the result of ldexp(e1, e2) = e1 * 2 ^ e2, and the + // accuracy is correctly rounded to the true value, so the inheritance + // framework does not need to be invoked to determine endpoints. // Instead, the value at a higher precision is calculated and passed to // correctlyRoundedInterval. const result = e1 * 2 ** e2; @@ -2771,14 +3591,14 @@ export class FPTraits { // Always return the correctly-rounded interval, and special examination should be taken when // using the result. return this.correctlyRoundedInterval(result); - }, + } }; ldexpIntervalImpl(e1, e2) { // Only round and flush e1, as e2 is of integer type (i32 or abstract integer) and should be // precise. return this.roundAndFlushScalarToInterval(e1, { - impl: e1 => this.LdexpIntervalOp.impl(e1, e2), + impl: (e1) => this.LdexpIntervalOp.impl(e1, e2) }); } @@ -2793,16 +3613,17 @@ export class FPTraits { * */ + LengthIntervalScalarOp = { - impl: n => { + impl: (n) => { return this.sqrtInterval(this.multiplicationInterval(n, n)); - }, + } }; LengthIntervalVectorOp = { - impl: n => { + impl: (n) => { return this.sqrtInterval(this.dotInterval(n, n)); - }, + } }; lengthIntervalImpl(n) { @@ -2815,15 +3636,21 @@ export class FPTraits { /** Calculate an acceptance interval of length(x) */ + + + LogIntervalOp = { - impl: this.limitScalarToIntervalDomain(this.constants().greaterThanZeroInterval, n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const abs_error = this.kind === 'f32' ? 2 ** -21 : 2 ** -7; if (n >= 0.5 && n <= 2.0) { return this.absoluteErrorInterval(Math.log(n), abs_error); } return this.ulpInterval(Math.log(n), 3); - }), + }, + domain: () => { + return this.constants().greaterThanZeroInterval; + } }; logIntervalImpl(x) { @@ -2832,15 +3659,19 @@ export class FPTraits { /** Calculate an acceptance interval of log(x) */ + Log2IntervalOp = { - impl: this.limitScalarToIntervalDomain(this.constants().greaterThanZeroInterval, n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const abs_error = this.kind === 'f32' ? 2 ** -21 : 2 ** -7; if (n >= 0.5 && n <= 2.0) { return this.absoluteErrorInterval(Math.log2(n), abs_error); } return this.ulpInterval(Math.log2(n), 3); - }), + }, + domain: () => { + return this.constants().greaterThanZeroInterval; + } }; log2IntervalImpl(x) { @@ -2849,6 +3680,7 @@ export class FPTraits { /** Calculate an acceptance interval of log2(x) */ + MaxIntervalOp = { impl: (x, y) => { // If both of the inputs are subnormal, then either of the inputs can be returned @@ -2859,7 +3691,7 @@ export class FPTraits { } return this.correctlyRoundedInterval(Math.max(x, y)); - }, + } }; maxIntervalImpl(x, y) { @@ -2872,6 +3704,10 @@ export class FPTraits { /** Calculate an acceptance interval of max(x, y) */ + + + + MinIntervalOp = { impl: (x, y) => { // If both of the inputs are subnormal, then either of the inputs can be returned @@ -2882,7 +3718,7 @@ export class FPTraits { } return this.correctlyRoundedInterval(Math.min(x, y)); - }, + } }; minIntervalImpl(x, y) { @@ -2895,13 +3731,17 @@ export class FPTraits { /** Calculate an acceptance interval of min(x, y) */ + + + + MixImpreciseIntervalOp = { impl: (x, y, z) => { // x + (y - x) * z = // x + t, where t = (y - x) * z const t = this.multiplicationInterval(this.subtractionInterval(y, x), z); return this.additionInterval(x, t); - }, + } }; mixImpreciseIntervalImpl(x, y, z) { @@ -2915,6 +3755,7 @@ export class FPTraits { /** Calculate an acceptance interval of mix(x, y, z) using x + (y - x) * z */ + MixPreciseIntervalOp = { impl: (x, y, z) => { // x * (1.0 - z) + y * z = @@ -2922,7 +3763,7 @@ export class FPTraits { const t = this.multiplicationInterval(x, this.subtractionInterval(1.0, z)); const s = this.multiplicationInterval(y, z); return this.additionInterval(t, s); - }, + } }; mixPreciseIntervalImpl(x, y, z) { @@ -2936,24 +3777,29 @@ export class FPTraits { /** Calculate an acceptance interval of mix(x, y, z) using x * (1.0 - z) + y * z */ + + /** All acceptance interval functions for mix(x, y, z) */ + + modfIntervalImpl(n) { const fract = this.correctlyRoundedInterval(n % 1.0); - const whole = this.correctlyRoundedInterval(n - (n % 1.0)); + const whole = this.correctlyRoundedInterval(n - n % 1.0); return { fract, whole }; } /** Calculate an acceptance interval of modf(x) */ + MultiplicationInnerOp = { impl: (x, y) => { return this.correctlyRoundedInterval(x * y); - }, + } }; MultiplicationIntervalOp = { impl: (x, y) => { return this.roundAndFlushScalarPairToInterval(x, y, this.MultiplicationInnerOp); - }, + } }; multiplicationIntervalImpl(x, y) { @@ -2966,12 +3812,16 @@ export class FPTraits { /** Calculate an acceptance interval of x * y */ + + + + /** * @returns the vector result of multiplying the given vector by the given * scalar */ multiplyVectorByScalar(v, c) { - return this.toVector(v.map(x => this.multiplicationInterval(x, c))); + return this.toVector(v.map((x) => this.multiplicationInterval(x, c))); } multiplicationMatrixScalarIntervalImpl(mat, scalar) { @@ -2979,7 +3829,7 @@ export class FPTraits { const rows = mat[0].length; return this.toMatrix( unflatten2DArray( - flatten2DArray(mat).map(e => this.MultiplicationIntervalOp.impl(e, scalar)), + flatten2DArray(mat).map((e) => this.multiplicationInterval(e, scalar)), cols, rows ) @@ -2988,13 +3838,24 @@ export class FPTraits { /** Calculate an acceptance interval of x * y, when x is a matrix and y is a scalar */ + + + + multiplicationScalarMatrixIntervalImpl(scalar, mat) { return this.multiplicationMatrixScalarIntervalImpl(mat, scalar); } /** Calculate an acceptance interval of x * y, when x is a scalar and y is a matrix */ - multiplicationMatrixMatrixIntervalImpl(mat_x, mat_y) { + + + + + multiplicationMatrixMatrixIntervalImpl( + mat_x, + mat_y) + { const x_cols = mat_x.length; const x_rows = mat_x[0].length; const y_cols = mat_y.length; @@ -3003,7 +3864,7 @@ export class FPTraits { const x_transposed = this.transposeInterval(mat_x); - const result = [...Array(y_cols)].map(_ => [...Array(x_rows)]); + const result = [...Array(y_cols)].map((_) => [...Array(x_rows)]); mat_y.forEach((y, i) => { x_transposed.forEach((x, j) => { result[i][j] = this.dotInterval(x, y); @@ -3015,30 +3876,48 @@ export class FPTraits { /** Calculate an acceptance interval of x * y, when x is a matrix and y is a matrix */ - multiplicationMatrixVectorIntervalImpl(x, y) { + + + + + multiplicationMatrixVectorIntervalImpl( + x, + y) + { const cols = x.length; const rows = x[0].length; assert(y.length === cols, `'mat${cols}x${rows} * vec${y.length}' is not defined`); - return this.transposeInterval(x).map(e => this.dotInterval(e, y)); + return this.transposeInterval(x).map((e) => this.dotInterval(e, y)); } /** Calculate an acceptance interval of x * y, when x is a matrix and y is a vector */ - multiplicationVectorMatrixIntervalImpl(x, y) { + + + + + multiplicationVectorMatrixIntervalImpl( + x, + y) + { const cols = y.length; const rows = y[0].length; assert(x.length === rows, `'vec${x.length} * mat${cols}x${rows}' is not defined`); - return y.map(e => this.dotInterval(x, e)); + return y.map((e) => this.dotInterval(x, e)); } /** Calculate an acceptance interval of x * y, when x is a vector and y is a matrix */ + + + + NegationIntervalOp = { - impl: n => { + impl: (n) => { return this.correctlyRoundedInterval(-n); - }, + } }; negationIntervalImpl(n) { @@ -3047,24 +3926,27 @@ export class FPTraits { /** Calculate an acceptance interval of -x */ + NormalizeIntervalOp = { - impl: n => { + impl: (n) => { const length = this.lengthInterval(n); - return this.toVector(n.map(e => this.divisionInterval(e, length))); - }, + return this.toVector(n.map((e) => this.divisionInterval(e, length))); + } }; normalizeIntervalImpl(n) { return this.runVectorToVectorOp(this.toVector(n), this.NormalizeIntervalOp); } + + PowIntervalOp = { // pow(x, y) has no explicit domain restrictions, but inherits the x <= 0 // domain restriction from log2(x). Invoking log2Interval(x) in impl will // enforce this, so there is no need to wrap the impl call here. impl: (x, y) => { return this.exp2Interval(this.multiplicationInterval(y, this.log2Interval(x))); - }, + } }; powIntervalImpl(x, y) { @@ -3077,10 +3959,14 @@ export class FPTraits { /** Calculate an acceptance interval of pow(x, y) */ + + + + RadiansIntervalOp = { - impl: n => { + impl: (n) => { return this.multiplicationInterval(n, 0.017453292519943295474); - }, + } }; radiansIntervalImpl(n) { @@ -3089,6 +3975,7 @@ export class FPTraits { /** Calculate an acceptance interval of radians(x) */ + ReflectIntervalOp = { impl: (x, y) => { assert( @@ -3107,7 +3994,7 @@ export class FPTraits { rhs, this.SubtractionIntervalOp ); - }, + } }; reflectIntervalImpl(x, y) { @@ -3115,12 +4002,15 @@ export class FPTraits { x.length === y.length, `reflect is only defined for vectors with the same number of elements` ); - return this.runVectorPairToVectorOp(this.toVector(x), this.toVector(y), this.ReflectIntervalOp); } /** Calculate an acceptance interval of reflect(x, y) */ + + + + /** * refract is a singular function in the sense that it is the only builtin that * takes in (FPVector, FPVector, F32/F16) and returns FPVector and is basically @@ -3163,12 +4053,16 @@ export class FPTraits { this.multiplyVectorByScalar(i, r), this.multiplyVectorByScalar(s, t), this.SubtractionIntervalOp - ); - // (i * r) - (s * t) + ); // (i * r) - (s * t) } /** Calculate acceptance interval vectors of reflect(i, s, r) */ + + + + + RemainderIntervalOp = { impl: (x, y) => { // x % y = x - y * trunc(x/y) @@ -3176,7 +4070,7 @@ export class FPTraits { x, this.multiplicationInterval(y, this.truncInterval(this.divisionInterval(x, y))) ); - }, + } }; /** Calculate an acceptance interval for x % y */ @@ -3190,8 +4084,9 @@ export class FPTraits { /** Calculate an acceptance interval for x % y */ + RoundIntervalOp = { - impl: n => { + impl: (n) => { const k = Math.floor(n); const diff_before = n - k; const diff_after = k + 1 - n; @@ -3207,7 +4102,7 @@ export class FPTraits { return this.correctlyRoundedInterval(k); } return this.correctlyRoundedInterval(k + 1); - }, + } }; roundIntervalImpl(n) { @@ -3216,6 +4111,7 @@ export class FPTraits { /** Calculate an acceptance interval of round(x) */ + /** * The definition of saturate does not specify which version of clamp to use. * Using min-max here, since it has wider acceptance intervals, that include @@ -3232,8 +4128,9 @@ export class FPTraits { /*** Calculate an acceptance interval of saturate(n) as clamp(n, 0.0, 1.0) */ + SignIntervalOp = { - impl: n => { + impl: (n) => { if (n > 0.0) { return this.correctlyRoundedInterval(1.0); } @@ -3242,7 +4139,7 @@ export class FPTraits { } return this.correctlyRoundedInterval(0.0); - }, + } }; signIntervalImpl(n) { @@ -3251,12 +4148,16 @@ export class FPTraits { /** Calculate an acceptance interval of sign(x) */ + SinIntervalOp = { - impl: this.limitScalarToIntervalDomain(this.constants().negPiToPiInterval, n => { + impl: (n) => { assert(this.kind === 'f32' || this.kind === 'f16'); const abs_error = this.kind === 'f32' ? 2 ** -11 : 2 ** -7; return this.absoluteErrorInterval(Math.sin(n), abs_error); - }), + }, + domain: () => { + return this.constants().negPiToPiInterval; + } }; sinIntervalImpl(n) { @@ -3265,15 +4166,16 @@ export class FPTraits { /** Calculate an acceptance interval of sin(x) */ + SinhIntervalOp = { - impl: n => { + impl: (n) => { // sinh(x) = (exp(x) - exp(-x)) * 0.5 const minus_n = this.negationInterval(n); return this.multiplicationInterval( this.subtractionInterval(this.expInterval(n), this.expInterval(minus_n)), 0.5 ); - }, + } }; sinhIntervalImpl(n) { @@ -3282,6 +4184,7 @@ export class FPTraits { /** Calculate an acceptance interval of sinh(x) */ + SmoothStepOp = { impl: (low, high, x) => { // For clamp(foo, 0.0, 1.0) the different implementations of clamp provide @@ -3291,21 +4194,17 @@ export class FPTraits { const t = this.clampMedianInterval( this.divisionInterval( this.subtractionInterval(x, low), - this.subtractionInterval(high, low) - ), + this.subtractionInterval(high, low)), 0.0, - 1.0 - ); + 1.0); // Inherited from t * t * (3.0 - 2.0 * t) return this.multiplicationInterval( t, - this.multiplicationInterval( - t, - this.subtractionInterval(3.0, this.multiplicationInterval(2.0, t)) - ) - ); - }, + this.multiplicationInterval(t, + this.subtractionInterval(3.0, + this.multiplicationInterval(2.0, t)))); + } }; smoothStepIntervalImpl(low, high, x) { @@ -3319,10 +4218,11 @@ export class FPTraits { /** Calculate an acceptance interval of smoothStep(low, high, x) */ + SqrtIntervalOp = { - impl: n => { + impl: (n) => { return this.divisionInterval(1.0, this.inverseSqrtInterval(n)); - }, + } }; sqrtIntervalImpl(n) { @@ -3331,13 +4231,14 @@ export class FPTraits { /** Calculate an acceptance interval of sqrt(x) */ + StepIntervalOp = { impl: (edge, x) => { if (edge <= x) { return this.correctlyRoundedInterval(1.0); } return this.correctlyRoundedInterval(0.0); - }, + } }; stepIntervalImpl(edge, x) { @@ -3361,10 +4262,11 @@ export class FPTraits { * infinite value was passed in. */ + SubtractionIntervalOp = { impl: (x, y) => { return this.correctlyRoundedInterval(x - y); - }, + } }; subtractionIntervalImpl(x, y) { @@ -3377,6 +4279,10 @@ export class FPTraits { /** Calculate an acceptance interval of x - y */ + + + + subtractionMatrixMatrixIntervalImpl(x, y) { return this.runScalarPairToIntervalOpMatrixComponentWise( this.toMatrix(x), @@ -3387,10 +4293,14 @@ export class FPTraits { /** Calculate an acceptance interval of x - y, when x and y are matrices */ + + + + TanIntervalOp = { - impl: n => { + impl: (n) => { return this.divisionInterval(this.sinInterval(n), this.cosInterval(n)); - }, + } }; tanIntervalImpl(n) { @@ -3399,10 +4309,11 @@ export class FPTraits { /** Calculate an acceptance interval of tan(x) */ + TanhIntervalOp = { - impl: n => { + impl: (n) => { return this.divisionInterval(this.sinhInterval(n), this.coshInterval(n)); - }, + } }; tanhIntervalImpl(n) { @@ -3411,11 +4322,12 @@ export class FPTraits { /** Calculate an acceptance interval of tanh(x) */ + TransposeIntervalOp = { - impl: m => { + impl: (m) => { const num_cols = m.length; const num_rows = m[0].length; - const result = [...Array(num_rows)].map(_ => [...Array(num_cols)]); + const result = [...Array(num_rows)].map((_) => [...Array(num_cols)]); for (let i = 0; i < num_cols; i++) { for (let j = 0; j < num_rows; j++) { @@ -3423,7 +4335,7 @@ export class FPTraits { } } return this.toMatrix(result); - }, + } }; transposeIntervalImpl(m) { @@ -3432,10 +4344,11 @@ export class FPTraits { /** Calculate an acceptance interval of transpose(m) */ + TruncIntervalOp = { - impl: n => { + impl: (n) => { return this.correctlyRoundedInterval(Math.trunc(n)); - }, + } }; truncIntervalImpl(n) { @@ -3443,6 +4356,7 @@ export class FPTraits { } /** Calculate an acceptance interval of trunc(x) */ + } // Pre-defined values that get used multiple times in _constants' initializers. Cannot use FPTraits members, since this @@ -3452,7 +4366,6 @@ const kF32UnboundedInterval = new FPInterval( Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY ); - const kF32ZeroInterval = new FPInterval('f32', 0); class F32Traits extends FPTraits { @@ -3465,7 +4378,7 @@ class F32Traits extends FPTraits { less_than_one: kValue.f32.positive.less_than_one, subnormal: { min: kValue.f32.positive.subnormal.min, - max: kValue.f32.positive.subnormal.max, + max: kValue.f32.positive.subnormal.max }, pi: { whole: kValue.f32.positive.pi.whole, @@ -3473,9 +4386,9 @@ class F32Traits extends FPTraits { half: kValue.f32.positive.pi.half, third: kValue.f32.positive.pi.third, quarter: kValue.f32.positive.pi.quarter, - sixth: kValue.f32.positive.pi.sixth, + sixth: kValue.f32.positive.pi.sixth }, - e: kValue.f32.positive.e, + e: kValue.f32.positive.e }, negative: { min: kValue.f32.negative.min, @@ -3485,7 +4398,7 @@ class F32Traits extends FPTraits { less_than_one: kValue.f32.negative.less_than_one, subnormal: { min: kValue.f32.negative.subnormal.min, - max: kValue.f32.negative.subnormal.max, + max: kValue.f32.negative.subnormal.max }, pi: { whole: kValue.f32.negative.pi.whole, @@ -3493,8 +4406,8 @@ class F32Traits extends FPTraits { half: kValue.f32.negative.pi.half, third: kValue.f32.negative.pi.third, quarter: kValue.f32.negative.pi.quarter, - sixth: kValue.f32.negative.pi.sixth, - }, + sixth: kValue.f32.negative.pi.sixth + } }, unboundedInterval: kF32UnboundedInterval, zeroInterval: kF32ZeroInterval, @@ -3505,138 +4418,125 @@ class F32Traits extends FPTraits { kValue.f32.negative.pi.whole, kValue.f32.positive.pi.whole ), - greaterThanZeroInterval: new FPInterval( 'f32', kValue.f32.positive.subnormal.min, kValue.f32.positive.max ), - + negOneToOneInterval: new FPInterval('f32', -1, 1), zeroVector: { 2: [kF32ZeroInterval, kF32ZeroInterval], 3: [kF32ZeroInterval, kF32ZeroInterval, kF32ZeroInterval], - 4: [kF32ZeroInterval, kF32ZeroInterval, kF32ZeroInterval, kF32ZeroInterval], + 4: [kF32ZeroInterval, kF32ZeroInterval, kF32ZeroInterval, kF32ZeroInterval] }, unboundedVector: { 2: [kF32UnboundedInterval, kF32UnboundedInterval], 3: [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], 4: [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval] + }, unboundedMatrix: { 2: { 2: [ - [kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval], - ], + [kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval]], 3: [ - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - ], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval]], 4: [ - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval], + + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval]] + - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], - ], }, 3: { 2: [ - [kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval], - ], + [kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval]], 3: [ - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - ], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval]], 4: [ - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval], + + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval], + + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval]] - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], - ], }, 4: { 2: [ - [kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval], - ], + [kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval]], 3: [ - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], - ], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval], + [kF32UnboundedInterval, kF32UnboundedInterval, kF32UnboundedInterval]], 4: [ - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval], - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval], - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval], - [ - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - kF32UnboundedInterval, - ], - ], - }, - }, + [ + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval, + kF32UnboundedInterval]] + + + } + } }; constructor() { @@ -3655,6 +4555,11 @@ class F32Traits extends FPTraits { flushSubnormal = flushSubnormalNumberF32; oneULP = oneULPF32; scalarBuilder = f32; + scalarRange = scalarF32Range; + sparseScalarRange = sparseScalarF32Range; + vectorRange = vectorF32Range; + sparseVectorRange = sparseVectorF32Range; + sparseMatrixRange = sparseMatrixF32Range; // Framework - Fundamental Error Intervals - Overrides absoluteErrorInterval = this.absoluteErrorIntervalImpl.bind(this); @@ -3705,16 +4610,16 @@ class F32Traits extends FPTraits { mixIntervals = [this.mixImpreciseInterval, this.mixPreciseInterval]; modfInterval = this.modfIntervalImpl.bind(this); multiplicationInterval = this.multiplicationIntervalImpl.bind(this); - multiplicationMatrixMatrixInterval = this.multiplicationMatrixMatrixIntervalImpl.bind(this); - - multiplicationMatrixScalarInterval = this.multiplicationMatrixScalarIntervalImpl.bind(this); - - multiplicationScalarMatrixInterval = this.multiplicationScalarMatrixIntervalImpl.bind(this); - - multiplicationMatrixVectorInterval = this.multiplicationMatrixVectorIntervalImpl.bind(this); - - multiplicationVectorMatrixInterval = this.multiplicationVectorMatrixIntervalImpl.bind(this); - + multiplicationMatrixMatrixInterval = + this.multiplicationMatrixMatrixIntervalImpl.bind(this); + multiplicationMatrixScalarInterval = + this.multiplicationMatrixScalarIntervalImpl.bind(this); + multiplicationScalarMatrixInterval = + this.multiplicationScalarMatrixIntervalImpl.bind(this); + multiplicationMatrixVectorInterval = + this.multiplicationMatrixVectorIntervalImpl.bind(this); + multiplicationVectorMatrixInterval = + this.multiplicationVectorMatrixIntervalImpl.bind(this); negationInterval = this.negationIntervalImpl.bind(this); normalizeInterval = this.normalizeIntervalImpl.bind(this); powInterval = this.powIntervalImpl.bind(this); @@ -3731,8 +4636,8 @@ class F32Traits extends FPTraits { sqrtInterval = this.sqrtIntervalImpl.bind(this); stepInterval = this.stepIntervalImpl.bind(this); subtractionInterval = this.subtractionIntervalImpl.bind(this); - subtractionMatrixMatrixInterval = this.subtractionMatrixMatrixIntervalImpl.bind(this); - + subtractionMatrixMatrixInterval = + this.subtractionMatrixMatrixIntervalImpl.bind(this); tanInterval = this.tanIntervalImpl.bind(this); tanhInterval = this.tanhIntervalImpl.bind(this); transposeInterval = this.transposeIntervalImpl.bind(this); @@ -3748,16 +4653,20 @@ class F32Traits extends FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - makeU32ToVectorCase(param, filter, ...ops) { + makeU32ToVectorCase( + param, + filter, + ...ops) + { param = Math.trunc(param); - const vectors = ops.map(o => o(param)); - if (filter === 'finite' && vectors.some(v => !v.every(e => e.isFinite()))) { + const vectors = ops.map((o) => o(param)); + if (filter === 'finite' && vectors.some((v) => !v.every((e) => e.isFinite()))) { return undefined; } return { input: u32(param), - expected: anyOf(...vectors), + expected: anyOf(...vectors) }; } @@ -3767,7 +4676,11 @@ class F32Traits extends FPTraits { * @param filter what interval filtering to apply * @param ops callbacks that implement generating an acceptance interval */ - generateU32ToIntervalCases(params, filter, ...ops) { + generateU32ToIntervalCases( + params, + filter, + ...ops) + { return params.reduce((cases, e) => { const c = this.makeU32ToVectorCase(e, filter, ...ops); if (c !== undefined) { @@ -3779,6 +4692,21 @@ class F32Traits extends FPTraits { // Framework - API + QuantizeToF16IntervalOp = { + impl: (n) => { + const rounded = correctlyRoundedF16(n); + const flushed = addFlushedIfNeededF16(rounded); + return this.spanIntervals(...flushed.map((f) => this.toInterval(f))); + } + }; + + quantizeToF16IntervalImpl(n) { + return this.runScalarToIntervalOp(this.toInterval(n), this.QuantizeToF16IntervalOp); + } + + /** Calculate an acceptance interval of quantizeToF16(x) */ + quantizeToF16Interval = this.quantizeToF16IntervalImpl.bind(this); + /** * Once-allocated ArrayBuffer/views to avoid overhead of allocation when * converting between numeric formats @@ -3798,20 +4726,19 @@ class F32Traits extends FPTraits { unpack2x16floatIntervalImpl(n) { assert( n >= kValue.u32.min && n <= kValue.u32.max, - 'unpack2x16floatInterval only accepts values on the bounds of u32' + 'unpack2x16floatInterval only accepts valid u32 values' ); - this.unpackDataU32[0] = n; - if (this.unpackDataF16.some(f => !isFiniteF16(f))) { + if (this.unpackDataF16.some((f) => !isFiniteF16(f))) { return [this.constants().unboundedInterval, this.constants().unboundedInterval]; } const result = [ - this.quantizeToF16Interval(this.unpackDataF16[0]), - this.quantizeToF16Interval(this.unpackDataF16[1]), - ]; + this.quantizeToF16Interval(this.unpackDataF16[0]), + this.quantizeToF16Interval(this.unpackDataF16[1])]; - if (result.some(r => !r.isFinite())) { + + if (result.some((r) => !r.isFinite())) { return [this.constants().unboundedInterval, this.constants().unboundedInterval]; } return result; @@ -3823,10 +4750,9 @@ class F32Traits extends FPTraits { unpack2x16snormIntervalImpl(n) { assert( n >= kValue.u32.min && n <= kValue.u32.max, - 'unpack2x16snormInterval only accepts values on the bounds of u32' + 'unpack2x16snormInterval only accepts valid u32 values' ); - - const op = n => { + const op = (n) => { return this.ulpInterval(Math.max(n / 32767, -1), 3); }; @@ -3840,10 +4766,9 @@ class F32Traits extends FPTraits { unpack2x16unormIntervalImpl(n) { assert( n >= kValue.u32.min && n <= kValue.u32.max, - 'unpack2x16unormInterval only accepts values on the bounds of u32' + 'unpack2x16unormInterval only accepts valid u32 values' ); - - const op = n => { + const op = (n) => { return this.ulpInterval(n / 65535, 3); }; @@ -3857,19 +4782,18 @@ class F32Traits extends FPTraits { unpack4x8snormIntervalImpl(n) { assert( n >= kValue.u32.min && n <= kValue.u32.max, - 'unpack4x8snormInterval only accepts values on the bounds of u32' + 'unpack4x8snormInterval only accepts valid u32 values' ); - - const op = n => { + const op = (n) => { return this.ulpInterval(Math.max(n / 127, -1), 3); }; this.unpackDataU32[0] = n; return [ - op(this.unpackDataI8[0]), - op(this.unpackDataI8[1]), - op(this.unpackDataI8[2]), - op(this.unpackDataI8[3]), - ]; + op(this.unpackDataI8[0]), + op(this.unpackDataI8[1]), + op(this.unpackDataI8[2]), + op(this.unpackDataI8[3])]; + } /** Calculate an acceptance interval vector for unpack4x8snorm(x) */ @@ -3878,41 +4802,29 @@ class F32Traits extends FPTraits { unpack4x8unormIntervalImpl(n) { assert( n >= kValue.u32.min && n <= kValue.u32.max, - 'unpack4x8unormInterval only accepts values on the bounds of u32' + 'unpack4x8unormInterval only accepts valid u32 values' ); - - const op = n => { + const op = (n) => { return this.ulpInterval(n / 255, 3); }; this.unpackDataU32[0] = n; return [ - op(this.unpackDataU8[0]), - op(this.unpackDataU8[1]), - op(this.unpackDataU8[2]), - op(this.unpackDataU8[3]), - ]; + op(this.unpackDataU8[0]), + op(this.unpackDataU8[1]), + op(this.unpackDataU8[2]), + op(this.unpackDataU8[3])]; + } /** Calculate an acceptance interval vector for unpack4x8unorm(x) */ unpack4x8unormInterval = this.unpack4x8unormIntervalImpl.bind(this); - - QuantizeToF16IntervalOp = { - impl: n => { - const rounded = correctlyRoundedF16(n); - const flushed = addFlushedIfNeededF16(rounded); - return this.spanIntervals(...flushed.map(f => this.toInterval(f))); - }, - }; - - quantizeToF16IntervalImpl(n) { - return this.runScalarToIntervalOp(this.toInterval(n), this.QuantizeToF16IntervalOp); - } - - /** Calculate an acceptance interval of quantizeToF16(x) */ - quantizeToF16Interval = this.quantizeToF16IntervalImpl.bind(this); } +// Need to separately allocate f32 traits, so they can be referenced by +// FPAbstractTraits for forwarding. +const kF32Traits = new F32Traits(); + // Pre-defined values that get used multiple times in _constants' initializers. Cannot use FPTraits members, since this // executes before they are defined. const kAbstractUnboundedInterval = new FPInterval( @@ -3920,7 +4832,6 @@ const kAbstractUnboundedInterval = new FPInterval( Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY ); - const kAbstractZeroInterval = new FPInterval('abstract', 0); // This is implementation is incomplete @@ -3934,7 +4845,7 @@ class FPAbstractTraits extends FPTraits { less_than_one: kValue.f64.positive.less_than_one, subnormal: { min: kValue.f64.positive.subnormal.min, - max: kValue.f64.positive.subnormal.max, + max: kValue.f64.positive.subnormal.max }, pi: { whole: kValue.f64.positive.pi.whole, @@ -3942,9 +4853,9 @@ class FPAbstractTraits extends FPTraits { half: kValue.f64.positive.pi.half, third: kValue.f64.positive.pi.third, quarter: kValue.f64.positive.pi.quarter, - sixth: kValue.f64.positive.pi.sixth, + sixth: kValue.f64.positive.pi.sixth }, - e: kValue.f64.positive.e, + e: kValue.f64.positive.e }, negative: { min: kValue.f64.negative.min, @@ -3954,7 +4865,7 @@ class FPAbstractTraits extends FPTraits { less_than_one: kValue.f64.negative.less_than_one, subnormal: { min: kValue.f64.negative.subnormal.min, - max: kValue.f64.negative.subnormal.max, + max: kValue.f64.negative.subnormal.max }, pi: { whole: kValue.f64.negative.pi.whole, @@ -3962,8 +4873,8 @@ class FPAbstractTraits extends FPTraits { half: kValue.f64.negative.pi.half, third: kValue.f64.negative.pi.third, quarter: kValue.f64.negative.pi.quarter, - sixth: kValue.f64.negative.pi.sixth, - }, + sixth: kValue.f64.negative.pi.sixth + } }, unboundedInterval: kAbstractUnboundedInterval, zeroInterval: kAbstractZeroInterval, @@ -3974,143 +4885,131 @@ class FPAbstractTraits extends FPTraits { kValue.f64.negative.pi.whole, kValue.f64.positive.pi.whole ), - greaterThanZeroInterval: new FPInterval( 'abstract', kValue.f64.positive.subnormal.min, kValue.f64.positive.max ), + negOneToOneInterval: new FPInterval('abstract', -1, 1), zeroVector: { 2: [kAbstractZeroInterval, kAbstractZeroInterval], 3: [kAbstractZeroInterval, kAbstractZeroInterval, kAbstractZeroInterval], 4: [ - kAbstractZeroInterval, - kAbstractZeroInterval, - kAbstractZeroInterval, - kAbstractZeroInterval, - ], + kAbstractZeroInterval, + kAbstractZeroInterval, + kAbstractZeroInterval, + kAbstractZeroInterval] + }, unboundedVector: { 2: [kAbstractUnboundedInterval, kAbstractUnboundedInterval], 3: [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], 4: [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval] + }, unboundedMatrix: { 2: { 2: [ - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - ], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval]], 3: [ - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - ], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval]], 4: [ - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval], + + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval]] + - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], - ], }, 3: { 2: [ - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - ], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval]], 3: [ - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - ], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval]], 4: [ - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval], + + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval], + + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval]] - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], - ], }, 4: { 2: [ - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval], - ], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval]], 3: [ - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], - ], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval], + [kAbstractUnboundedInterval, kAbstractUnboundedInterval, kAbstractUnboundedInterval]], 4: [ - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval], - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval], - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval], - [ - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - kAbstractUnboundedInterval, - ], - ], - }, - }, + [ + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval, + kAbstractUnboundedInterval]] + + + } + } }; constructor() { @@ -4124,21 +5023,30 @@ class FPAbstractTraits extends FPTraits { // Utilities - Overrides // number is represented as a f64 internally, so all number values are already // quantized to f64 - quantize = n => { + quantize = (n) => { return n; }; correctlyRounded = correctlyRoundedF64; isFinite = Number.isFinite; isSubnormal = isSubnormalNumberF64; flushSubnormal = flushSubnormalNumberF64; - oneULP = oneULPF64; + oneULP = (_target, _mode = 'flush') => { + unreachable(`'FPAbstractTraits.oneULP should never be called`); + }; scalarBuilder = abstractFloat; + scalarRange = scalarF64Range; + sparseScalarRange = sparseScalarF64Range; + vectorRange = vectorF64Range; + sparseVectorRange = sparseVectorF64Range; + sparseMatrixRange = sparseMatrixF64Range; // Framework - Fundamental Error Intervals - Overrides absoluteErrorInterval = this.unboundedAbsoluteErrorInterval.bind(this); correctlyRoundedInterval = this.correctlyRoundedIntervalImpl.bind(this); correctlyRoundedMatrix = this.correctlyRoundedMatrixImpl.bind(this); - ulpInterval = this.unboundedUlpInterval.bind(this); + ulpInterval = (n, numULP) => { + return this.toInterval(kF32Traits.ulpInterval(n, numULP)); + }; // Framework - API - Overrides absInterval = this.absIntervalImpl.bind(this); @@ -4147,17 +5055,20 @@ class FPAbstractTraits extends FPTraits { this, 'acoshAlternativeInterval' ); - - acoshPrimaryInterval = this.unimplementedScalarToInterval.bind(this, 'acoshPrimaryInterval'); - + acoshPrimaryInterval = this.unimplementedScalarToInterval.bind( + this, + 'acoshPrimaryInterval' + ); acoshIntervals = [this.acoshAlternativeInterval, this.acoshPrimaryInterval]; additionInterval = this.additionIntervalImpl.bind(this); additionMatrixMatrixInterval = this.additionMatrixMatrixIntervalImpl.bind(this); asinInterval = this.unimplementedScalarToInterval.bind(this, 'asinInterval'); asinhInterval = this.unimplementedScalarToInterval.bind(this, 'asinhInterval'); atanInterval = this.unimplementedScalarToInterval.bind(this, 'atanInterval'); - atan2Interval = this.unimplementedScalarPairToInterval.bind(this, 'atan2Interval'); - + atan2Interval = this.unimplementedScalarPairToInterval.bind( + this, + 'atan2Interval' + ); atanhInterval = this.unimplementedScalarToInterval.bind(this, 'atanhInterval'); ceilInterval = this.unimplementedScalarToInterval.bind(this, 'ceilInterval'); clampMedianInterval = this.clampMedianIntervalImpl.bind(this); @@ -4167,34 +5078,39 @@ class FPAbstractTraits extends FPTraits { coshInterval = this.unimplementedScalarToInterval.bind(this, 'coshInterval'); crossInterval = this.crossIntervalImpl.bind(this); degreesInterval = this.degreesIntervalImpl.bind(this); - determinantInterval = this.unimplementedMatrixToInterval.bind(this, 'determinantInterval'); - + determinantInterval = this.unimplementedMatrixToInterval.bind( + this, + 'determinantInterval' + ); distanceInterval = this.unimplementedDistance.bind(this); - divisionInterval = this.unimplementedScalarPairToInterval.bind(this, 'divisionInterval'); - + divisionInterval = ( + x, + y) => + { + return this.toInterval(kF32Traits.divisionInterval(x, y)); + }; dotInterval = this.unimplementedVectorPairToInterval.bind(this, 'dotInterval'); expInterval = this.unimplementedScalarToInterval.bind(this, 'expInterval'); exp2Interval = this.unimplementedScalarToInterval.bind(this, 'exp2Interval'); faceForwardIntervals = this.unimplementedFaceForward.bind(this); - floorInterval = this.unimplementedScalarToInterval.bind(this, 'floorInterval'); + floorInterval = this.floorIntervalImpl.bind(this); fmaInterval = this.fmaIntervalImpl.bind(this); fractInterval = this.unimplementedScalarToInterval.bind(this, 'fractInterval'); - inverseSqrtInterval = this.unimplementedScalarToInterval.bind(this, 'inverseSqrtInterval'); - - ldexpInterval = this.unimplementedScalarPairToInterval.bind(this, 'ldexpInterval'); - + inverseSqrtInterval = this.unimplementedScalarToInterval.bind( + this, + 'inverseSqrtInterval' + ); + ldexpInterval = this.unimplementedScalarPairToInterval.bind( + this, + 'ldexpInterval' + ); lengthInterval = this.unimplementedLength.bind(this); logInterval = this.unimplementedScalarToInterval.bind(this, 'logInterval'); log2Interval = this.unimplementedScalarToInterval.bind(this, 'log2Interval'); maxInterval = this.maxIntervalImpl.bind(this); minInterval = this.minIntervalImpl.bind(this); - mixImpreciseInterval = this.unimplementedScalarTripleToInterval.bind( - this, - 'mixImpreciseInterval' - ); - - mixPreciseInterval = this.unimplementedScalarTripleToInterval.bind(this, 'mixPreciseInterval'); - + mixImpreciseInterval = this.mixImpreciseIntervalImpl.bind(this); + mixPreciseInterval = this.mixPreciseIntervalImpl.bind(this); mixIntervals = [this.mixImpreciseInterval, this.mixPreciseInterval]; modfInterval = this.modfIntervalImpl.bind(this); multiplicationInterval = this.multiplicationIntervalImpl.bind(this); @@ -4202,51 +5118,51 @@ class FPAbstractTraits extends FPTraits { this, 'multiplicationMatrixMatrixInterval' ); - multiplicationMatrixScalarInterval = this.unimplementedMatrixScalarToMatrix.bind( this, 'multiplicationMatrixScalarInterval' ); - multiplicationScalarMatrixInterval = this.unimplementedScalarMatrixToMatrix.bind( this, 'multiplicationScalarMatrixInterval' ); - multiplicationMatrixVectorInterval = this.unimplementedMatrixVectorToVector.bind( this, 'multiplicationMatrixVectorInterval' ); - multiplicationVectorMatrixInterval = this.unimplementedVectorMatrixToVector.bind( this, 'multiplicationVectorMatrixInterval' ); - negationInterval = this.negationIntervalImpl.bind(this); - normalizeInterval = this.unimplementedVectorToVector.bind(this, 'normalizeInterval'); - + normalizeInterval = this.unimplementedVectorToVector.bind( + this, + 'normalizeInterval' + ); powInterval = this.unimplementedScalarPairToInterval.bind(this, 'powInterval'); - quantizeToF16Interval = this.unimplementedScalarToInterval.bind(this, 'quantizeToF16Interval'); - radiansInterval = this.radiansIntervalImpl.bind(this); - reflectInterval = this.unimplementedVectorPairToVector.bind(this, 'reflectInterval'); - + reflectInterval = this.unimplementedVectorPairToVector.bind( + this, + 'reflectInterval' + ); refractInterval = this.unimplementedRefract.bind(this); - remainderInterval = this.unimplementedScalarPairToInterval.bind(this, 'remainderInterval'); - - roundInterval = this.unimplementedScalarToInterval.bind(this, 'roundInterval'); + remainderInterval = (x, y) => { + return this.toInterval(kF32Traits.remainderInterval(x, y)); + }; + roundInterval = this.roundIntervalImpl.bind(this); saturateInterval = this.saturateIntervalImpl.bind(this); - signInterval = this.unimplementedScalarToInterval.bind(this, 'signInterval'); + signInterval = this.signIntervalImpl.bind(this); sinInterval = this.unimplementedScalarToInterval.bind(this, 'sinInterval'); sinhInterval = this.unimplementedScalarToInterval.bind(this, 'sinhInterval'); - smoothStepInterval = this.unimplementedScalarTripleToInterval.bind(this, 'smoothStepInterval'); - + smoothStepInterval = this.unimplementedScalarTripleToInterval.bind( + this, + 'smoothStepInterval' + ); sqrtInterval = this.unimplementedScalarToInterval.bind(this, 'sqrtInterval'); stepInterval = this.unimplementedScalarPairToInterval.bind(this, 'stepInterval'); subtractionInterval = this.subtractionIntervalImpl.bind(this); - subtractionMatrixMatrixInterval = this.subtractionMatrixMatrixIntervalImpl.bind(this); - + subtractionMatrixMatrixInterval = + this.subtractionMatrixMatrixIntervalImpl.bind(this); tanInterval = this.unimplementedScalarToInterval.bind(this, 'tanInterval'); tanhInterval = this.unimplementedScalarToInterval.bind(this, 'tanhInterval'); transposeInterval = this.transposeIntervalImpl.bind(this); @@ -4260,7 +5176,6 @@ const kF16UnboundedInterval = new FPInterval( Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY ); - const kF16ZeroInterval = new FPInterval('f16', 0); // This is implementation is incomplete @@ -4274,7 +5189,7 @@ class F16Traits extends FPTraits { less_than_one: kValue.f16.positive.less_than_one, subnormal: { min: kValue.f16.positive.subnormal.min, - max: kValue.f16.positive.subnormal.max, + max: kValue.f16.positive.subnormal.max }, pi: { whole: kValue.f16.positive.pi.whole, @@ -4282,9 +5197,9 @@ class F16Traits extends FPTraits { half: kValue.f16.positive.pi.half, third: kValue.f16.positive.pi.third, quarter: kValue.f16.positive.pi.quarter, - sixth: kValue.f16.positive.pi.sixth, + sixth: kValue.f16.positive.pi.sixth }, - e: kValue.f16.positive.e, + e: kValue.f16.positive.e }, negative: { min: kValue.f16.negative.min, @@ -4294,7 +5209,7 @@ class F16Traits extends FPTraits { less_than_one: kValue.f16.negative.less_than_one, subnormal: { min: kValue.f16.negative.subnormal.min, - max: kValue.f16.negative.subnormal.max, + max: kValue.f16.negative.subnormal.max }, pi: { whole: kValue.f16.negative.pi.whole, @@ -4302,8 +5217,8 @@ class F16Traits extends FPTraits { half: kValue.f16.negative.pi.half, third: kValue.f16.negative.pi.third, quarter: kValue.f16.negative.pi.quarter, - sixth: kValue.f16.negative.pi.sixth, - }, + sixth: kValue.f16.negative.pi.sixth + } }, unboundedInterval: kF16UnboundedInterval, zeroInterval: kF16ZeroInterval, @@ -4314,138 +5229,126 @@ class F16Traits extends FPTraits { kValue.f16.negative.pi.whole, kValue.f16.positive.pi.whole ), - greaterThanZeroInterval: new FPInterval( 'f16', kValue.f16.positive.subnormal.min, kValue.f16.positive.max ), + negOneToOneInterval: new FPInterval('f16', -1, 1), zeroVector: { 2: [kF16ZeroInterval, kF16ZeroInterval], 3: [kF16ZeroInterval, kF16ZeroInterval, kF16ZeroInterval], - 4: [kF16ZeroInterval, kF16ZeroInterval, kF16ZeroInterval, kF16ZeroInterval], + 4: [kF16ZeroInterval, kF16ZeroInterval, kF16ZeroInterval, kF16ZeroInterval] }, unboundedVector: { 2: [kF16UnboundedInterval, kF16UnboundedInterval], 3: [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], 4: [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval] + }, unboundedMatrix: { 2: { 2: [ - [kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval], - ], + [kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval]], 3: [ - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - ], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval]], 4: [ - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval], + + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval]] + - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], - ], }, 3: { 2: [ - [kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval], - ], + [kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval]], 3: [ - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - ], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval]], 4: [ - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval], + + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval], + + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval]] - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], - ], }, 4: { 2: [ - [kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval], - ], + [kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval]], 3: [ - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], - ], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval], + [kF16UnboundedInterval, kF16UnboundedInterval, kF16UnboundedInterval]], 4: [ - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval], - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval], - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval], - [ - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - kF16UnboundedInterval, - ], - ], - }, - }, + [ + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval, + kF16UnboundedInterval]] + + + } + } }; constructor() { @@ -4464,6 +5367,11 @@ class F16Traits extends FPTraits { flushSubnormal = flushSubnormalNumberF16; oneULP = oneULPF16; scalarBuilder = f16; + scalarRange = scalarF16Range; + sparseScalarRange = sparseScalarF16Range; + vectorRange = vectorF16Range; + sparseVectorRange = sparseVectorF16Range; + sparseMatrixRange = sparseMatrixF16Range; // Framework - Fundamental Error Intervals - Overrides absoluteErrorInterval = this.absoluteErrorIntervalImpl.bind(this); @@ -4514,20 +5422,19 @@ class F16Traits extends FPTraits { mixIntervals = [this.mixImpreciseInterval, this.mixPreciseInterval]; modfInterval = this.modfIntervalImpl.bind(this); multiplicationInterval = this.multiplicationIntervalImpl.bind(this); - multiplicationMatrixMatrixInterval = this.multiplicationMatrixMatrixIntervalImpl.bind(this); - - multiplicationMatrixScalarInterval = this.multiplicationMatrixScalarIntervalImpl.bind(this); - - multiplicationScalarMatrixInterval = this.multiplicationScalarMatrixIntervalImpl.bind(this); - - multiplicationMatrixVectorInterval = this.multiplicationMatrixVectorIntervalImpl.bind(this); - - multiplicationVectorMatrixInterval = this.multiplicationVectorMatrixIntervalImpl.bind(this); - + multiplicationMatrixMatrixInterval = + this.multiplicationMatrixMatrixIntervalImpl.bind(this); + multiplicationMatrixScalarInterval = + this.multiplicationMatrixScalarIntervalImpl.bind(this); + multiplicationScalarMatrixInterval = + this.multiplicationScalarMatrixIntervalImpl.bind(this); + multiplicationMatrixVectorInterval = + this.multiplicationMatrixVectorIntervalImpl.bind(this); + multiplicationVectorMatrixInterval = + this.multiplicationVectorMatrixIntervalImpl.bind(this); negationInterval = this.negationIntervalImpl.bind(this); normalizeInterval = this.normalizeIntervalImpl.bind(this); powInterval = this.powIntervalImpl.bind(this); - quantizeToF16Interval = this.quantizeToF16IntervalNotAvailable.bind(this); radiansInterval = this.radiansIntervalImpl.bind(this); reflectInterval = this.reflectIntervalImpl.bind(this); refractInterval = this.refractIntervalImpl.bind(this); @@ -4541,27 +5448,21 @@ class F16Traits extends FPTraits { sqrtInterval = this.sqrtIntervalImpl.bind(this); stepInterval = this.stepIntervalImpl.bind(this); subtractionInterval = this.subtractionIntervalImpl.bind(this); - subtractionMatrixMatrixInterval = this.subtractionMatrixMatrixIntervalImpl.bind(this); - + subtractionMatrixMatrixInterval = + this.subtractionMatrixMatrixIntervalImpl.bind(this); tanInterval = this.tanIntervalImpl.bind(this); tanhInterval = this.tanhIntervalImpl.bind(this); transposeInterval = this.transposeIntervalImpl.bind(this); truncInterval = this.truncIntervalImpl.bind(this); - - /** quantizeToF16 has no f16 overload. */ - quantizeToF16IntervalNotAvailable(n) { - unreachable("quantizeToF16 don't have f16 overload."); - return kF16UnboundedInterval; - } } export const FP = { - f32: new F32Traits(), + f32: kF32Traits, f16: new F16Traits(), - abstract: new FPAbstractTraits(), + abstract: new FPAbstractTraits() }; -/** @returns the floating-point traits for @p type */ +/** @returns the floating-point traits for `type` */ export function fpTraitsFor(type) { switch (type.kind) { case 'abstract-float': @@ -4575,7 +5476,7 @@ export function fpTraitsFor(type) { } } -/** @returns true if the value @p value is representable with @p type */ +/** @returns true if the value `value` is representable with `type` */ export function isRepresentable(value, type) { if (!Number.isFinite(value)) { return false; @@ -4585,4 +5486,4 @@ export function isRepresentable(value, type) { return value >= constants.negative.min && value <= constants.positive.max; } assert(false, `isRepresentable() is not yet implemented for type ${type}`); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/math.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/math.js index bb2846f8839..0aa27b87aa9 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/math.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/math.js @@ -1,22 +1,19 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../common/util/util.js'; -import { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../common/util/util.js';import { Float16Array, getFloat16, - setFloat16, -} from '../../external/petamoriken/float16/float16.js'; + hfround, + setFloat16 } from +'../../external/petamoriken/float16/float16.js'; import { kBit, kValue } from './constants.js'; import { - f32, - f16, - floatBitsToNumber, - i32, - kFloat16Format, - kFloat32Format, - u32, -} from './conversion.js'; + reinterpretF64AsU64, + reinterpretU64AsF64, + reinterpretU32AsF32, + reinterpretU16AsF16 } from +'./reinterpret.js'; /** * A multiple of 8 guaranteed to be way too large to allocate (just under 8 pebibytes). @@ -90,6 +87,10 @@ export function isFiniteF16(n) { /** Should FTZ occur during calculations or not */ + +/** Should nextAfter calculate towards positive infinity or negative infinity */ + + /** * Once-allocated ArrayBuffer/views to avoid overhead of allocation when * converting between numeric formats @@ -218,9 +219,9 @@ export function nextAfterF32(val, dir, mode) { nextAfterF32Float[0] = val; // This quantizes from number (f64) to f32 if ( - (dir === 'positive' && nextAfterF32Float[0] <= val) || - (dir === 'negative' && nextAfterF32Float[0] >= val) - ) { + dir === 'positive' && nextAfterF32Float[0] <= val || + dir === 'negative' && nextAfterF32Float[0] >= val) + { // val is either f32 precise or quantizing rounded in the opposite direction // from what is needed, so need to calculate the value in the correct // direction. @@ -299,9 +300,9 @@ export function nextAfterF16(val, dir, mode) { nextAfterF16Float[0] = val; // This quantizes from number (f64) to f16 if ( - (dir === 'positive' && nextAfterF16Float[0] <= val) || - (dir === 'negative' && nextAfterF16Float[0] >= val) - ) { + dir === 'positive' && nextAfterF16Float[0] <= val || + dir === 'negative' && nextAfterF16Float[0] >= val) + { // val is either f16 precise or quantizing rounded in the opposite direction // from what is needed, so need to calculate the value in the correct // direction. @@ -347,11 +348,11 @@ export function oneULPF64(target, mode = 'flush') { // distance between the two nearest f64 representable numbers to the // appropriate edge, which also happens to be the maximum possible ULP. if ( - target === Number.POSITIVE_INFINITY || - target >= kValue.f64.positive.max || - target === Number.NEGATIVE_INFINITY || - target <= kValue.f64.negative.min - ) { + target === Number.POSITIVE_INFINITY || + target >= kValue.f64.positive.max || + target === Number.NEGATIVE_INFINITY || + target <= kValue.f64.negative.min) + { return kValue.f64.max_ulp; } @@ -388,11 +389,11 @@ export function oneULPF32(target, mode = 'flush') { // distance between the two nearest f32 representable numbers to the // appropriate edge, which also happens to be the maximum possible ULP. if ( - target === Number.POSITIVE_INFINITY || - target >= kValue.f32.positive.max || - target === Number.NEGATIVE_INFINITY || - target <= kValue.f32.negative.min - ) { + target === Number.POSITIVE_INFINITY || + target >= kValue.f32.positive.max || + target === Number.NEGATIVE_INFINITY || + target <= kValue.f32.negative.min) + { return kValue.f32.max_ulp; } @@ -434,11 +435,11 @@ export function oneULPF16(target, mode = 'flush') { // distance between the two nearest f16 representable numbers to the // appropriate edge, which also happens to be the maximum possible ULP. if ( - target === Number.POSITIVE_INFINITY || - target >= kValue.f16.positive.max || - target === Number.NEGATIVE_INFINITY || - target <= kValue.f16.negative.min - ) { + target === Number.POSITIVE_INFINITY || + target >= kValue.f16.positive.max || + target === Number.NEGATIVE_INFINITY || + target <= kValue.f16.negative.min) + { return kValue.f16.max_ulp; } @@ -527,21 +528,20 @@ export function correctlyRoundedF32(n) { // f32 finite if (n <= kValue.f32.positive.max && n >= kValue.f32.negative.min) { - const n_32 = new Float32Array([n])[0]; - const converted = n_32; - if (n === converted) { + const n_32 = quantizeToF32(n); + if (n === n_32) { // n is precisely expressible as a f32, so should not be rounded return [n]; } - if (converted > n) { + if (n_32 > n) { // n_32 rounded towards +inf, so is after n const other = nextAfterF32(n_32, 'negative', 'no-flush'); - return [other, converted]; + return [other, n_32]; } else { // n_32 rounded towards -inf, so is before n const other = nextAfterF32(n_32, 'positive', 'no-flush'); - return [converted, other]; + return [n_32, other]; } } @@ -596,21 +596,20 @@ export function correctlyRoundedF16(n) { // f16 finite if (n <= kValue.f16.positive.max && n >= kValue.f16.negative.min) { - const n_16 = new Float16Array([n])[0]; - const converted = n_16; - if (n === converted) { + const n_16 = quantizeToF16(n); + if (n === n_16) { // n is precisely expressible as a f16, so should not be rounded return [n]; } - if (converted > n) { + if (n_16 > n) { // n_16 rounded towards +inf, so is after n const other = nextAfterF16(n_16, 'negative', 'no-flush'); - return [other, converted]; + return [other, n_16]; } else { // n_16 rounded towards -inf, so is before n const other = nextAfterF16(n_16, 'positive', 'no-flush'); - return [converted, other]; + return [n_16, other]; } } @@ -668,7 +667,7 @@ export function frexp(val, trait) { isFinite = isFiniteF32; isSubnormal = isSubnormalNumberF32; // Enforce big-endian so that offset 0 is highest byte. - setFloatToBuffer = v => dataView.setFloat32(0, v, false); + setFloatToBuffer = (v) => dataView.setFloat32(0, v, false); getFloatFromBuffer = () => dataView.getFloat32(0, false); } else if (trait === 'f16') { // f16 bit pattern: s_eeeee_ffffffffff @@ -682,7 +681,7 @@ export function frexp(val, trait) { isFinite = isFiniteF16; isSubnormal = isSubnormalNumberF16; // Enforce big-endian so that offset 0 is highest byte. - setFloatToBuffer = v => setFloat16(dataView, 0, v, false); + setFloatToBuffer = (v) => setFloat16(dataView, 0, v, false); getFloatFromBuffer = () => getFloat16(dataView, 0, false); } else { assert(trait === 'f64'); @@ -697,7 +696,7 @@ export function frexp(val, trait) { isFinite = Number.isFinite; isSubnormal = isSubnormalNumberF64; // Enforce big-endian so that offset 0 is highest byte. - setFloatToBuffer = v => dataView.setFloat64(0, v, false); + setFloatToBuffer = (v) => dataView.setFloat64(0, v, false); getFloatFromBuffer = () => dataView.getFloat64(0, false); } // Helper function that extract the unbiased exponent of the float in buffer. @@ -707,7 +706,7 @@ export function frexp(val, trait) { // Get the highest 16 bits of float as uint16, which can contain the whole exponent part for both f16, f32, and f64. const high16BitsAsUint16 = dataView.getUint16(0, false); // Return the unbiased exp by masking, shifting and unbiasing. - return ((high16BitsAsUint16 & expMaskForHigh16Bits) >> (16 - 1 - expBitCount)) - expBias; + return ((high16BitsAsUint16 & expMaskForHigh16Bits) >> 16 - 1 - expBitCount) - expBias; }; // Helper function that modify the exponent of float in buffer to make it in range [0.5, 1.0). // By setting the unbiased exponent to -1, the fp value will be in range 2**-1 * [1.0, 2.0), i.e. [0.5, 1.0). @@ -718,7 +717,7 @@ export function frexp(val, trait) { const high16BitsAsUint16 = dataView.getUint16(0, false); // Modify the exponent bits. const modifiedHigh16Bits = - (high16BitsAsUint16 & ~expMaskForHigh16Bits) | targetExpBitsForHigh16Bits; + high16BitsAsUint16 & ~expMaskForHigh16Bits | targetExpBitsForHigh16Bits; // Set back to buffer dataView.setUint16(0, modifiedHigh16Bits, false); }; @@ -768,7 +767,7 @@ export function lerp(a, b, t) { return Number.NaN; } - if ((a <= 0.0 && b >= 0.0) || (a >= 0.0 && b <= 0.0)) { + if (a <= 0.0 && b >= 0.0 || a >= 0.0 && b <= 0.0) { return t * b + (1 - t) * a; } @@ -817,11 +816,11 @@ export function lerpBigInt(a, b, idx, steps) { // to bigint, so need to expand things out. const big_idx = BigInt(idx); const big_steps = BigInt(steps); - if ((a <= 0n && b >= 0n) || (a >= 0n && b <= 0n)) { - return (b * big_idx) / (big_steps - 1n) + (a - (a * big_idx) / (big_steps - 1n)); + if (a <= 0n && b >= 0n || a >= 0n && b <= 0n) { + return b * big_idx / (big_steps - 1n) + (a - a * big_idx / (big_steps - 1n)); } - const x = a + (b * big_idx) / (big_steps - 1n) - (a * big_idx) / (big_steps - 1n); + const x = a + b * big_idx / (big_steps - 1n) - a * big_idx / (big_steps - 1n); return !(b > a) ? max(b, x) : min(b, x); } @@ -836,7 +835,7 @@ export function linearRange(a, b, num_steps) { return [a]; } - return Array.from(Array(num_steps).keys()).map(i => lerp(a, b, i / (num_steps - 1))); + return Array.from(Array(num_steps).keys()).map((i) => lerp(a, b, i / (num_steps - 1))); } /** @@ -856,7 +855,7 @@ export function linearRangeBigInt(a, b, num_steps) { return [a]; } - return Array.from(Array(num_steps).keys()).map(i => lerpBigInt(a, b, i, num_steps)); + return Array.from(Array(num_steps).keys()).map((i) => lerpBigInt(a, b, i, num_steps)); } /** @@ -878,7 +877,7 @@ export function biasedRange(a, b, num_steps) { return [a]; } - return Array.from(Array(num_steps).keys()).map(i => lerp(a, b, Math.pow(i / (num_steps - 1), c))); + return Array.from(Array(num_steps).keys()).map((i) => lerp(a, b, Math.pow(i / (num_steps - 1), c))); } /** @@ -892,12 +891,19 @@ export function biasedRange(a, b, num_steps) { * for a wide range of magnitudes to be generated, instead of being extremely biased towards the edges of the f32 range. * * This function is intended to provide dense coverage of the f32 range, for a minimal list of values to use to cover - * f32 behaviour, use sparseF32Range instead. + * f32 behaviour, use sparseScalarF32Range instead. * * @param counts structure param with 4 entries indicating the number of entries to be generated each region, entries * must be 0 or greater. */ -export function fullF32Range(counts = { pos_sub: 10, pos_norm: 50 }) { +export function scalarF32Range( +counts = + + + + +{ pos_sub: 10, pos_norm: 50 }) +{ counts.neg_norm = counts.neg_norm === undefined ? counts.pos_norm : counts.neg_norm; counts.neg_sub = counts.neg_sub === undefined ? counts.pos_sub : counts.neg_sub; @@ -905,22 +911,23 @@ export function fullF32Range(counts = { pos_sub: 10, pos_norm: 50 }) { // even. Generating against the bounds of f32 values directly results in the values being extremely biased towards the // extremes, since they are so much larger. const bit_fields = [ - ...linearRange(kBit.f32.negative.min, kBit.f32.negative.max, counts.neg_norm), - ...linearRange( - kBit.f32.negative.subnormal.min, - kBit.f32.negative.subnormal.max, - counts.neg_sub - ), - - 0, - ...linearRange( - kBit.f32.positive.subnormal.min, - kBit.f32.positive.subnormal.max, - counts.pos_sub - ), - - ...linearRange(kBit.f32.positive.min, kBit.f32.positive.max, counts.pos_norm), - ].map(Math.trunc); + ...linearRange(kBit.f32.negative.min, kBit.f32.negative.max, counts.neg_norm), + ...linearRange( + kBit.f32.negative.subnormal.min, + kBit.f32.negative.subnormal.max, + counts.neg_sub + ), + // -0.0 + 0x80000000, + // +0.0 + 0, + ...linearRange( + kBit.f32.positive.subnormal.min, + kBit.f32.positive.subnormal.max, + counts.pos_sub + ), + ...linearRange(kBit.f32.positive.min, kBit.f32.positive.max, counts.pos_norm)]. + map(Math.trunc); return bit_fields.map(reinterpretU32AsF32); } @@ -936,8 +943,8 @@ export function fullF32Range(counts = { pos_sub: 10, pos_norm: 50 }) { * @param low the lowest f32 value to permit when filtered * @param high the highest f32 value to permit when filtered */ -export function sourceFilteredF32Range(source, low, high) { - return fullF32Range().filter(x => source !== 'const' || (x >= low && x <= high)); +export function filteredScalarF32Range(source, low, high) { + return scalarF32Range().filter((x) => source !== 'const' || x >= low && x <= high); } /** @@ -951,12 +958,19 @@ export function sourceFilteredF32Range(source, low, high) { * for a wide range of magnitudes to be generated, instead of being extremely biased towards the edges of the f16 range. * * This function is intended to provide dense coverage of the f16 range, for a minimal list of values to use to cover - * f16 behaviour, use sparseF16Range instead. + * f16 behaviour, use sparseScalarF16Range instead. * * @param counts structure param with 4 entries indicating the number of entries to be generated each region, entries * must be 0 or greater. */ -export function fullF16Range(counts = { pos_sub: 10, pos_norm: 50 }) { +export function scalarF16Range( +counts = + + + + +{ pos_sub: 10, pos_norm: 50 }) +{ counts.neg_norm = counts.neg_norm === undefined ? counts.pos_norm : counts.neg_norm; counts.neg_sub = counts.neg_sub === undefined ? counts.pos_sub : counts.neg_sub; @@ -964,22 +978,23 @@ export function fullF16Range(counts = { pos_sub: 10, pos_norm: 50 }) { // even. Generating against the bounds of f16 values directly results in the values being extremely biased towards the // extremes, since they are so much larger. const bit_fields = [ - ...linearRange(kBit.f16.negative.min, kBit.f16.negative.max, counts.neg_norm), - ...linearRange( - kBit.f16.negative.subnormal.min, - kBit.f16.negative.subnormal.max, - counts.neg_sub - ), - - 0, - ...linearRange( - kBit.f16.positive.subnormal.min, - kBit.f16.positive.subnormal.max, - counts.pos_sub - ), - - ...linearRange(kBit.f16.positive.min, kBit.f16.positive.max, counts.pos_norm), - ].map(Math.trunc); + ...linearRange(kBit.f16.negative.min, kBit.f16.negative.max, counts.neg_norm), + ...linearRange( + kBit.f16.negative.subnormal.min, + kBit.f16.negative.subnormal.max, + counts.neg_sub + ), + // -0.0 + 0x8000, + // +0.0 + 0, + ...linearRange( + kBit.f16.positive.subnormal.min, + kBit.f16.positive.subnormal.max, + counts.pos_sub + ), + ...linearRange(kBit.f16.positive.min, kBit.f16.positive.max, counts.pos_norm)]. + map(Math.trunc); return bit_fields.map(reinterpretU16AsF16); } @@ -994,12 +1009,19 @@ export function fullF16Range(counts = { pos_sub: 10, pos_norm: 50 }) { * for a wide range of magnitudes to be generated, instead of being extremely biased towards the edges of the f64 range. * * This function is intended to provide dense coverage of the f64 range, for a minimal list of values to use to cover - * f64 behaviour, use sparseF64Range instead. + * f64 behaviour, use sparseScalarF64Range instead. * * @param counts structure param with 4 entries indicating the number of entries to be generated each region, entries * must be 0 or greater. */ -export function fullF64Range(counts = { pos_sub: 10, pos_norm: 50 }) { +export function scalarF64Range( +counts = + + + + +{ pos_sub: 10, pos_norm: 50 }) +{ counts.neg_norm = counts.neg_norm === undefined ? counts.pos_norm : counts.neg_norm; counts.neg_sub = counts.neg_sub === undefined ? counts.pos_sub : counts.neg_sub; @@ -1007,22 +1029,22 @@ export function fullF64Range(counts = { pos_sub: 10, pos_norm: 50 }) { // even. Generating against the bounds of f64 values directly results in the values being extremely biased towards the // extremes, since they are so much larger. const bit_fields = [ - ...linearRangeBigInt(kBit.f64.negative.min, kBit.f64.negative.max, counts.neg_norm), - ...linearRangeBigInt( - kBit.f64.negative.subnormal.min, - kBit.f64.negative.subnormal.max, - counts.neg_sub - ), - - 0n, - ...linearRangeBigInt( - kBit.f64.positive.subnormal.min, - kBit.f64.positive.subnormal.max, - counts.pos_sub - ), - - ...linearRangeBigInt(kBit.f64.positive.min, kBit.f64.positive.max, counts.pos_norm), - ]; + ...linearRangeBigInt(kBit.f64.negative.min, kBit.f64.negative.max, counts.neg_norm), + ...linearRangeBigInt( + kBit.f64.negative.subnormal.min, + kBit.f64.negative.subnormal.max, + counts.neg_sub + ), + // -0.0 + 0x8000_0000_0000_0000n, + // +0.0 + 0n, + ...linearRangeBigInt( + kBit.f64.positive.subnormal.min, + kBit.f64.positive.subnormal.max, + counts.pos_sub + ), + ...linearRangeBigInt(kBit.f64.positive.min, kBit.f64.positive.max, counts.pos_norm)]; return bit_fields.map(reinterpretU64AsF64); } @@ -1043,19 +1065,18 @@ export function fullF64Range(counts = { pos_sub: 10, pos_norm: 50 }) { * @param counts structure param with 4 entries indicating the number of entries * to be generated each region, entries must be 0 or greater. */ -export function filteredF64Range( - begin, - end, - counts = { - pos_sub: 10, - pos_norm: 50, - } -) { +export function limitedScalarF64Range( +begin, +end, +counts = { + pos_sub: 10, + pos_norm: 50 +}) +{ assert( begin <= kValue.f64.negative.max, `Beginning of range ${begin} must be negative f64 normal` ); - assert(end >= kValue.f64.positive.min, `Ending of range ${end} must be positive f64 normal`); counts.neg_norm = counts.neg_norm === undefined ? counts.pos_norm : counts.neg_norm; @@ -1067,40 +1088,40 @@ export function filteredF64Range( // even. Generating against the bounds of f64 values directly results in the values being extremely biased towards the // extremes, since they are so much larger. const bit_fields = [ - ...linearRangeBigInt(u64_begin, kBit.f64.negative.max, counts.neg_norm), - ...linearRangeBigInt( - kBit.f64.negative.subnormal.min, - kBit.f64.negative.subnormal.max, - counts.neg_sub - ), - - 0n, - ...linearRangeBigInt( - kBit.f64.positive.subnormal.min, - kBit.f64.positive.subnormal.max, - counts.pos_sub - ), - - ...linearRangeBigInt(kBit.f64.positive.min, u64_end, counts.pos_norm), - ]; + ...linearRangeBigInt(u64_begin, kBit.f64.negative.max, counts.neg_norm), + ...linearRangeBigInt( + kBit.f64.negative.subnormal.min, + kBit.f64.negative.subnormal.max, + counts.neg_sub + ), + // -0.0 + 0x8000_0000_0000_0000n, + // +0.0 + 0n, + ...linearRangeBigInt( + kBit.f64.positive.subnormal.min, + kBit.f64.positive.subnormal.max, + counts.pos_sub + ), + ...linearRangeBigInt(kBit.f64.positive.min, u64_end, counts.pos_norm)]; return bit_fields.map(reinterpretU64AsF64); } /** Short list of i32 values of interest to test against */ const kInterestingI32Values = [ - kValue.i32.negative.max, - Math.trunc(kValue.i32.negative.max / 2), - -256, - -10, - -1, - 0, - 1, - 10, - 256, - Math.trunc(kValue.i32.positive.max / 2), - kValue.i32.positive.max, -]; +kValue.i32.negative.max, +Math.trunc(kValue.i32.negative.max / 2), +-256, +-10, +-1, +0, +1, +10, +256, +Math.trunc(kValue.i32.positive.max / 2), +kValue.i32.positive.max]; + /** @returns minimal i32 values that cover the entire range of i32 behaviours * @@ -1113,32 +1134,30 @@ export function sparseI32Range() { } const kVectorI32Values = { - 2: kInterestingI32Values.flatMap(f => [ - [f, 1], - [1, f], - [f, -1], - [-1, f], - ]), - - 3: kInterestingI32Values.flatMap(f => [ - [f, 1, 2], - [1, f, 2], - [1, 2, f], - [f, -1, -2], - [-1, f, -2], - [-1, -2, f], - ]), - - 4: kInterestingI32Values.flatMap(f => [ - [f, 1, 2, 3], - [1, f, 2, 3], - [1, 2, f, 3], - [1, 2, 3, f], - [f, -1, -2, -3], - [-1, f, -2, -3], - [-1, -2, f, -3], - [-1, -2, -3, f], - ]), + 2: kInterestingI32Values.flatMap((f) => [ + [f, 1], + [1, f], + [f, -1], + [-1, f]] + ), + 3: kInterestingI32Values.flatMap((f) => [ + [f, 1, 2], + [1, f, 2], + [1, 2, f], + [f, -1, -2], + [-1, f, -2], + [-1, -2, f]] + ), + 4: kInterestingI32Values.flatMap((f) => [ + [f, 1, 2, 3], + [1, f, 2, 3], + [1, 2, f, 3], + [1, 2, 3, f], + [f, -1, -2, -3], + [-1, f, -2, -3], + [-1, -2, f, -3], + [-1, -2, -3, f]] + ) }; /** @@ -1167,17 +1186,29 @@ export function vectorI32Range(dim) { * * @param counts structure param with 2 entries indicating the number of entries to be generated each region, values must be 0 or greater. */ -export function fullI32Range(counts = { positive: 50 }) { +export function fullI32Range( +counts = + + +{ positive: 50 }) +{ counts.negative = counts.negative === undefined ? counts.positive : counts.negative; return [ - ...biasedRange(kValue.i32.negative.min, -1, counts.negative), - 0, - ...biasedRange(1, kValue.i32.positive.max, counts.positive), - ].map(Math.trunc); + ...biasedRange(kValue.i32.negative.min, -1, counts.negative), + 0, + ...biasedRange(1, kValue.i32.positive.max, counts.positive)]. + map(Math.trunc); } /** Short list of u32 values of interest to test against */ -const kInterestingU32Values = [0, 1, 10, 256, Math.trunc(kValue.u32.max / 2), kValue.u32.max]; +const kInterestingU32Values = [ +0, +1, +10, +256, +Math.trunc(kValue.u32.max / 2), +kValue.u32.max]; + /** @returns minimal u32 values that cover the entire range of u32 behaviours * @@ -1190,23 +1221,21 @@ export function sparseU32Range() { } const kVectorU32Values = { - 2: kInterestingU32Values.flatMap(f => [ - [f, 1], - [1, f], - ]), - - 3: kInterestingU32Values.flatMap(f => [ - [f, 1, 2], - [1, f, 2], - [1, 2, f], - ]), - - 4: kInterestingU32Values.flatMap(f => [ - [f, 1, 2, 3], - [1, f, 2, 3], - [1, 2, f, 3], - [1, 2, 3, f], - ]), + 2: kInterestingU32Values.flatMap((f) => [ + [f, 1], + [1, f]] + ), + 3: kInterestingU32Values.flatMap((f) => [ + [f, 1, 2], + [1, f, 2], + [1, 2, f]] + ), + 4: kInterestingU32Values.flatMap((f) => [ + [f, 1, 2, 3], + [1, f, 2, 3], + [1, 2, f, 3], + [1, 2, 3, f]] + ) }; /** @@ -1240,23 +1269,23 @@ export function fullU32Range(count = 50) { /** Short list of f32 values of interest to test against */ const kInterestingF32Values = [ - kValue.f32.negative.min, - -10.0, - -1.0, - -0.125, - kValue.f32.negative.max, - kValue.f32.negative.subnormal.min, - kValue.f32.negative.subnormal.max, - -0.0, - 0.0, - kValue.f32.positive.subnormal.min, - kValue.f32.positive.subnormal.max, - kValue.f32.positive.min, - 0.125, - 1.0, - 10.0, - kValue.f32.positive.max, -]; +kValue.f32.negative.min, +-10.0, +-1.0, +-0.125, +kValue.f32.negative.max, +kValue.f32.negative.subnormal.min, +kValue.f32.negative.subnormal.max, +-0.0, +0.0, +kValue.f32.positive.subnormal.min, +kValue.f32.positive.subnormal.max, +kValue.f32.positive.min, +0.125, +1.0, +10.0, +kValue.f32.positive.max]; + /** @returns minimal f32 values that cover the entire range of f32 behaviours * @@ -1270,37 +1299,35 @@ const kInterestingF32Values = [ * specific values of interest. If there are known values of interest they * should be appended to this list in the test generation code. */ -export function sparseF32Range() { +export function sparseScalarF32Range() { return kInterestingF32Values; } const kVectorF32Values = { - 2: sparseF32Range().flatMap(f => [ - [f, 1.0], - [1.0, f], - [f, -1.0], - [-1.0, f], - ]), - - 3: sparseF32Range().flatMap(f => [ - [f, 1.0, 2.0], - [1.0, f, 2.0], - [1.0, 2.0, f], - [f, -1.0, -2.0], - [-1.0, f, -2.0], - [-1.0, -2.0, f], - ]), - - 4: sparseF32Range().flatMap(f => [ - [f, 1.0, 2.0, 3.0], - [1.0, f, 2.0, 3.0], - [1.0, 2.0, f, 3.0], - [1.0, 2.0, 3.0, f], - [f, -1.0, -2.0, -3.0], - [-1.0, f, -2.0, -3.0], - [-1.0, -2.0, f, -3.0], - [-1.0, -2.0, -3.0, f], - ]), + 2: sparseScalarF32Range().flatMap((f) => [ + [f, 1.0], + [1.0, f], + [f, -1.0], + [-1.0, f]] + ), + 3: sparseScalarF32Range().flatMap((f) => [ + [f, 1.0, 2.0], + [1.0, f, 2.0], + [1.0, 2.0, f], + [f, -1.0, -2.0], + [-1.0, f, -2.0], + [-1.0, -2.0, f]] + ), + 4: sparseScalarF32Range().flatMap((f) => [ + [f, 1.0, 2.0, 3.0], + [1.0, f, 2.0, 3.0], + [1.0, 2.0, f, 3.0], + [1.0, 2.0, 3.0, f], + [f, -1.0, -2.0, -3.0], + [-1.0, f, -2.0, -3.0], + [-1.0, -2.0, f, -3.0], + [-1.0, -2.0, -3.0, f]] + ) }; /** @@ -1322,19 +1349,18 @@ export function vectorF32Range(dim) { } const kSparseVectorF32Values = { - 2: sparseF32Range().map((f, idx) => [idx % 2 === 0 ? f : idx, idx % 2 === 1 ? f : -idx]), - 3: sparseF32Range().map((f, idx) => [ - idx % 3 === 0 ? f : idx, - idx % 3 === 1 ? f : -idx, - idx % 3 === 2 ? f : idx, - ]), - - 4: sparseF32Range().map((f, idx) => [ - idx % 4 === 0 ? f : idx, - idx % 4 === 1 ? f : -idx, - idx % 4 === 2 ? f : idx, - idx % 4 === 3 ? f : -idx, - ]), + 2: sparseScalarF32Range().map((f, idx) => [idx % 2 === 0 ? f : idx, idx % 2 === 1 ? f : -idx]), + 3: sparseScalarF32Range().map((f, idx) => [ + idx % 3 === 0 ? f : idx, + idx % 3 === 1 ? f : -idx, + idx % 3 === 2 ? f : idx] + ), + 4: sparseScalarF32Range().map((f, idx) => [ + idx % 4 === 0 ? f : idx, + idx % 4 === 1 ? f : -idx, + idx % 4 === 2 ? f : idx, + idx % 4 === 3 ? f : -idx] + ) }; /** @@ -1343,174 +1369,159 @@ const kSparseVectorF32Values = { * * This is an even more stripped down version of `vectorF32Range` for when * pairs of vectors are being tested. - * All of the interesting floats from sparseF32 are guaranteed to be tested, but - * not in every position. + * All of the interesting floats from sparseScalarF32 are guaranteed to be + * tested, but not in every position. */ export function sparseVectorF32Range(dim) { assert( dim === 2 || dim === 3 || dim === 4, 'sparseVectorF32Range only accepts dimensions 2, 3, and 4' ); - return kSparseVectorF32Values[dim]; } const kSparseMatrixF32Values = { 2: { 2: kInterestingF32Values.map((f, idx) => [ - [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], - [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx], - ]), - + [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], + [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx]] + ), 3: kInterestingF32Values.map((f, idx) => [ - [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx, idx % 6 === 2 ? f : idx], - [idx % 6 === 3 ? f : -idx, idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx], - ]), - + [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx, idx % 6 === 2 ? f : idx], + [idx % 6 === 3 ? f : -idx, idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx]] + ), 4: kInterestingF32Values.map((f, idx) => [ - [ - idx % 8 === 0 ? f : idx, - idx % 8 === 1 ? f : -idx, - idx % 8 === 2 ? f : idx, - idx % 8 === 3 ? f : -idx, - ], + [ + idx % 8 === 0 ? f : idx, + idx % 8 === 1 ? f : -idx, + idx % 8 === 2 ? f : idx, + idx % 8 === 3 ? f : -idx], - [ - idx % 8 === 4 ? f : -idx, - idx % 8 === 5 ? f : idx, - idx % 8 === 6 ? f : -idx, - idx % 8 === 7 ? f : idx, - ], - ]), + [ + idx % 8 === 4 ? f : -idx, + idx % 8 === 5 ? f : idx, + idx % 8 === 6 ? f : -idx, + idx % 8 === 7 ? f : idx]] + + ) }, 3: { 2: kInterestingF32Values.map((f, idx) => [ - [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx], - [idx % 6 === 2 ? f : -idx, idx % 6 === 3 ? f : idx], - [idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx], - ]), - + [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx], + [idx % 6 === 2 ? f : -idx, idx % 6 === 3 ? f : idx], + [idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx]] + ), 3: kInterestingF32Values.map((f, idx) => [ - [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], - [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], - [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx], - ]), - + [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], + [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], + [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx]] + ), 4: kInterestingF32Values.map((f, idx) => [ - [ - idx % 12 === 0 ? f : idx, - idx % 12 === 1 ? f : -idx, - idx % 12 === 2 ? f : idx, - idx % 12 === 3 ? f : -idx, - ], + [ + idx % 12 === 0 ? f : idx, + idx % 12 === 1 ? f : -idx, + idx % 12 === 2 ? f : idx, + idx % 12 === 3 ? f : -idx], - [ - idx % 12 === 4 ? f : -idx, - idx % 12 === 5 ? f : idx, - idx % 12 === 6 ? f : -idx, - idx % 12 === 7 ? f : idx, - ], + [ + idx % 12 === 4 ? f : -idx, + idx % 12 === 5 ? f : idx, + idx % 12 === 6 ? f : -idx, + idx % 12 === 7 ? f : idx], - [ - idx % 12 === 8 ? f : idx, - idx % 12 === 9 ? f : -idx, - idx % 12 === 10 ? f : idx, - idx % 12 === 11 ? f : -idx, - ], - ]), + [ + idx % 12 === 8 ? f : idx, + idx % 12 === 9 ? f : -idx, + idx % 12 === 10 ? f : idx, + idx % 12 === 11 ? f : -idx]] + + ) }, 4: { 2: kInterestingF32Values.map((f, idx) => [ - [idx % 8 === 0 ? f : idx, idx % 8 === 1 ? f : -idx], - [idx % 8 === 2 ? f : -idx, idx % 8 === 3 ? f : idx], - [idx % 8 === 4 ? f : idx, idx % 8 === 5 ? f : -idx], - [idx % 8 === 6 ? f : -idx, idx % 8 === 7 ? f : idx], - ]), - + [idx % 8 === 0 ? f : idx, idx % 8 === 1 ? f : -idx], + [idx % 8 === 2 ? f : -idx, idx % 8 === 3 ? f : idx], + [idx % 8 === 4 ? f : idx, idx % 8 === 5 ? f : -idx], + [idx % 8 === 6 ? f : -idx, idx % 8 === 7 ? f : idx]] + ), 3: kInterestingF32Values.map((f, idx) => [ - [idx % 12 === 0 ? f : idx, idx % 12 === 1 ? f : -idx, idx % 12 === 2 ? f : idx], - [idx % 12 === 3 ? f : -idx, idx % 12 === 4 ? f : idx, idx % 12 === 5 ? f : -idx], - [idx % 12 === 6 ? f : idx, idx % 12 === 7 ? f : -idx, idx % 12 === 8 ? f : idx], - [idx % 12 === 9 ? f : -idx, idx % 12 === 10 ? f : idx, idx % 12 === 11 ? f : -idx], - ]), - + [idx % 12 === 0 ? f : idx, idx % 12 === 1 ? f : -idx, idx % 12 === 2 ? f : idx], + [idx % 12 === 3 ? f : -idx, idx % 12 === 4 ? f : idx, idx % 12 === 5 ? f : -idx], + [idx % 12 === 6 ? f : idx, idx % 12 === 7 ? f : -idx, idx % 12 === 8 ? f : idx], + [idx % 12 === 9 ? f : -idx, idx % 12 === 10 ? f : idx, idx % 12 === 11 ? f : -idx]] + ), 4: kInterestingF32Values.map((f, idx) => [ - [ - idx % 16 === 0 ? f : idx, - idx % 16 === 1 ? f : -idx, - idx % 16 === 2 ? f : idx, - idx % 16 === 3 ? f : -idx, - ], + [ + idx % 16 === 0 ? f : idx, + idx % 16 === 1 ? f : -idx, + idx % 16 === 2 ? f : idx, + idx % 16 === 3 ? f : -idx], - [ - idx % 16 === 4 ? f : -idx, - idx % 16 === 5 ? f : idx, - idx % 16 === 6 ? f : -idx, - idx % 16 === 7 ? f : idx, - ], + [ + idx % 16 === 4 ? f : -idx, + idx % 16 === 5 ? f : idx, + idx % 16 === 6 ? f : -idx, + idx % 16 === 7 ? f : idx], - [ - idx % 16 === 8 ? f : idx, - idx % 16 === 9 ? f : -idx, - idx % 16 === 10 ? f : idx, - idx % 16 === 11 ? f : -idx, - ], + [ + idx % 16 === 8 ? f : idx, + idx % 16 === 9 ? f : -idx, + idx % 16 === 10 ? f : idx, + idx % 16 === 11 ? f : -idx], - [ - idx % 16 === 12 ? f : -idx, - idx % 16 === 13 ? f : idx, - idx % 16 === 14 ? f : -idx, - idx % 16 === 15 ? f : idx, - ], - ]), - }, + [ + idx % 16 === 12 ? f : -idx, + idx % 16 === 13 ? f : idx, + idx % 16 === 14 ? f : -idx, + idx % 16 === 15 ? f : idx]] + + ) + } }; /** - * Returns a minimal set of matrices, indexed by dimension containing interesting - * float values. + * Returns a minimal set of matrices, indexed by dimension containing + * interesting float values. * * This is the matrix analogue of `sparseVectorF32Range`, so it is producing a * minimal coverage set of matrices that test all of the interesting f32 values. * There is not a more expansive set of matrices, since matrices are even more * expensive than vectors for increasing runtime with coverage. * - * All of the interesting floats from sparseF32 are guaranteed to be tested, but - * not in every position. + * All of the interesting floats from sparseScalarF32 are guaranteed to be + * tested, but not in every position. */ export function sparseMatrixF32Range(c, r) { assert( c === 2 || c === 3 || c === 4, 'sparseMatrixF32Range only accepts column counts of 2, 3, and 4' ); - assert( r === 2 || r === 3 || r === 4, 'sparseMatrixF32Range only accepts row counts of 2, 3, and 4' ); - return kSparseMatrixF32Values[c][r]; } /** Short list of f16 values of interest to test against */ const kInterestingF16Values = [ - kValue.f16.negative.min, - -10.0, - -1.0, - -0.125, - kValue.f16.negative.max, - kValue.f16.negative.subnormal.min, - kValue.f16.negative.subnormal.max, - -0.0, - 0.0, - kValue.f16.positive.subnormal.min, - kValue.f16.positive.subnormal.max, - kValue.f16.positive.min, - 0.125, - 1.0, - 10.0, - kValue.f16.positive.max, -]; +kValue.f16.negative.min, +-10.0, +-1.0, +-0.125, +kValue.f16.negative.max, +kValue.f16.negative.subnormal.min, +kValue.f16.negative.subnormal.max, +-0.0, +0.0, +kValue.f16.positive.subnormal.min, +kValue.f16.positive.subnormal.max, +kValue.f16.positive.min, +0.125, +1.0, +10.0, +kValue.f16.positive.max]; + /** @returns minimal f16 values that cover the entire range of f16 behaviours * @@ -1524,37 +1535,35 @@ const kInterestingF16Values = [ * specific values of interest. If there are known values of interest they * should be appended to this list in the test generation code. */ -export function sparseF16Range() { +export function sparseScalarF16Range() { return kInterestingF16Values; } const kVectorF16Values = { - 2: sparseF16Range().flatMap(f => [ - [f, 1.0], - [1.0, f], - [f, -1.0], - [-1.0, f], - ]), - - 3: sparseF16Range().flatMap(f => [ - [f, 1.0, 2.0], - [1.0, f, 2.0], - [1.0, 2.0, f], - [f, -1.0, -2.0], - [-1.0, f, -2.0], - [-1.0, -2.0, f], - ]), - - 4: sparseF16Range().flatMap(f => [ - [f, 1.0, 2.0, 3.0], - [1.0, f, 2.0, 3.0], - [1.0, 2.0, f, 3.0], - [1.0, 2.0, 3.0, f], - [f, -1.0, -2.0, -3.0], - [-1.0, f, -2.0, -3.0], - [-1.0, -2.0, f, -3.0], - [-1.0, -2.0, -3.0, f], - ]), + 2: sparseScalarF16Range().flatMap((f) => [ + [f, 1.0], + [1.0, f], + [f, -1.0], + [-1.0, f]] + ), + 3: sparseScalarF16Range().flatMap((f) => [ + [f, 1.0, 2.0], + [1.0, f, 2.0], + [1.0, 2.0, f], + [f, -1.0, -2.0], + [-1.0, f, -2.0], + [-1.0, -2.0, f]] + ), + 4: sparseScalarF16Range().flatMap((f) => [ + [f, 1.0, 2.0, 3.0], + [1.0, f, 2.0, 3.0], + [1.0, 2.0, f, 3.0], + [1.0, 2.0, 3.0, f], + [f, -1.0, -2.0, -3.0], + [-1.0, f, -2.0, -3.0], + [-1.0, -2.0, f, -3.0], + [-1.0, -2.0, -3.0, f]] + ) }; /** @@ -1576,19 +1585,18 @@ export function vectorF16Range(dim) { } const kSparseVectorF16Values = { - 2: sparseF16Range().map((f, idx) => [idx % 2 === 0 ? f : idx, idx % 2 === 1 ? f : -idx]), - 3: sparseF16Range().map((f, idx) => [ - idx % 3 === 0 ? f : idx, - idx % 3 === 1 ? f : -idx, - idx % 3 === 2 ? f : idx, - ]), - - 4: sparseF16Range().map((f, idx) => [ - idx % 4 === 0 ? f : idx, - idx % 4 === 1 ? f : -idx, - idx % 4 === 2 ? f : idx, - idx % 4 === 3 ? f : -idx, - ]), + 2: sparseScalarF16Range().map((f, idx) => [idx % 2 === 0 ? f : idx, idx % 2 === 1 ? f : -idx]), + 3: sparseScalarF16Range().map((f, idx) => [ + idx % 3 === 0 ? f : idx, + idx % 3 === 1 ? f : -idx, + idx % 3 === 2 ? f : idx] + ), + 4: sparseScalarF16Range().map((f, idx) => [ + idx % 4 === 0 ? f : idx, + idx % 4 === 1 ? f : -idx, + idx % 4 === 2 ? f : idx, + idx % 4 === 3 ? f : -idx] + ) }; /** @@ -1597,127 +1605,114 @@ const kSparseVectorF16Values = { * * This is an even more stripped down version of `vectorF16Range` for when * pairs of vectors are being tested. - * All of the interesting floats from sparseF16 are guaranteed to be tested, but - * not in every position. + * All of the interesting floats from sparseScalarF16 are guaranteed to be + * tested, but not in every position. */ export function sparseVectorF16Range(dim) { assert( dim === 2 || dim === 3 || dim === 4, 'sparseVectorF16Range only accepts dimensions 2, 3, and 4' ); - return kSparseVectorF16Values[dim]; } const kSparseMatrixF16Values = { 2: { 2: kInterestingF16Values.map((f, idx) => [ - [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], - [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx], - ]), - + [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], + [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx]] + ), 3: kInterestingF16Values.map((f, idx) => [ - [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx, idx % 6 === 2 ? f : idx], - [idx % 6 === 3 ? f : -idx, idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx], - ]), - + [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx, idx % 6 === 2 ? f : idx], + [idx % 6 === 3 ? f : -idx, idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx]] + ), 4: kInterestingF16Values.map((f, idx) => [ - [ - idx % 8 === 0 ? f : idx, - idx % 8 === 1 ? f : -idx, - idx % 8 === 2 ? f : idx, - idx % 8 === 3 ? f : -idx, - ], + [ + idx % 8 === 0 ? f : idx, + idx % 8 === 1 ? f : -idx, + idx % 8 === 2 ? f : idx, + idx % 8 === 3 ? f : -idx], - [ - idx % 8 === 4 ? f : -idx, - idx % 8 === 5 ? f : idx, - idx % 8 === 6 ? f : -idx, - idx % 8 === 7 ? f : idx, - ], - ]), + [ + idx % 8 === 4 ? f : -idx, + idx % 8 === 5 ? f : idx, + idx % 8 === 6 ? f : -idx, + idx % 8 === 7 ? f : idx]] + + ) }, 3: { 2: kInterestingF16Values.map((f, idx) => [ - [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx], - [idx % 6 === 2 ? f : -idx, idx % 6 === 3 ? f : idx], - [idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx], - ]), - + [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx], + [idx % 6 === 2 ? f : -idx, idx % 6 === 3 ? f : idx], + [idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx]] + ), 3: kInterestingF16Values.map((f, idx) => [ - [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], - [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], - [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx], - ]), - + [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], + [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], + [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx]] + ), 4: kInterestingF16Values.map((f, idx) => [ - [ - idx % 12 === 0 ? f : idx, - idx % 12 === 1 ? f : -idx, - idx % 12 === 2 ? f : idx, - idx % 12 === 3 ? f : -idx, - ], + [ + idx % 12 === 0 ? f : idx, + idx % 12 === 1 ? f : -idx, + idx % 12 === 2 ? f : idx, + idx % 12 === 3 ? f : -idx], - [ - idx % 12 === 4 ? f : -idx, - idx % 12 === 5 ? f : idx, - idx % 12 === 6 ? f : -idx, - idx % 12 === 7 ? f : idx, - ], + [ + idx % 12 === 4 ? f : -idx, + idx % 12 === 5 ? f : idx, + idx % 12 === 6 ? f : -idx, + idx % 12 === 7 ? f : idx], - [ - idx % 12 === 8 ? f : idx, - idx % 12 === 9 ? f : -idx, - idx % 12 === 10 ? f : idx, - idx % 12 === 11 ? f : -idx, - ], - ]), + [ + idx % 12 === 8 ? f : idx, + idx % 12 === 9 ? f : -idx, + idx % 12 === 10 ? f : idx, + idx % 12 === 11 ? f : -idx]] + + ) }, 4: { 2: kInterestingF16Values.map((f, idx) => [ - [idx % 8 === 0 ? f : idx, idx % 8 === 1 ? f : -idx], - [idx % 8 === 2 ? f : -idx, idx % 8 === 3 ? f : idx], - [idx % 8 === 4 ? f : idx, idx % 8 === 5 ? f : -idx], - [idx % 8 === 6 ? f : -idx, idx % 8 === 7 ? f : idx], - ]), - + [idx % 8 === 0 ? f : idx, idx % 8 === 1 ? f : -idx], + [idx % 8 === 2 ? f : -idx, idx % 8 === 3 ? f : idx], + [idx % 8 === 4 ? f : idx, idx % 8 === 5 ? f : -idx], + [idx % 8 === 6 ? f : -idx, idx % 8 === 7 ? f : idx]] + ), 3: kInterestingF16Values.map((f, idx) => [ - [idx % 12 === 0 ? f : idx, idx % 12 === 1 ? f : -idx, idx % 12 === 2 ? f : idx], - [idx % 12 === 3 ? f : -idx, idx % 12 === 4 ? f : idx, idx % 12 === 5 ? f : -idx], - [idx % 12 === 6 ? f : idx, idx % 12 === 7 ? f : -idx, idx % 12 === 8 ? f : idx], - [idx % 12 === 9 ? f : -idx, idx % 12 === 10 ? f : idx, idx % 12 === 11 ? f : -idx], - ]), - + [idx % 12 === 0 ? f : idx, idx % 12 === 1 ? f : -idx, idx % 12 === 2 ? f : idx], + [idx % 12 === 3 ? f : -idx, idx % 12 === 4 ? f : idx, idx % 12 === 5 ? f : -idx], + [idx % 12 === 6 ? f : idx, idx % 12 === 7 ? f : -idx, idx % 12 === 8 ? f : idx], + [idx % 12 === 9 ? f : -idx, idx % 12 === 10 ? f : idx, idx % 12 === 11 ? f : -idx]] + ), 4: kInterestingF16Values.map((f, idx) => [ - [ - idx % 16 === 0 ? f : idx, - idx % 16 === 1 ? f : -idx, - idx % 16 === 2 ? f : idx, - idx % 16 === 3 ? f : -idx, - ], + [ + idx % 16 === 0 ? f : idx, + idx % 16 === 1 ? f : -idx, + idx % 16 === 2 ? f : idx, + idx % 16 === 3 ? f : -idx], - [ - idx % 16 === 4 ? f : -idx, - idx % 16 === 5 ? f : idx, - idx % 16 === 6 ? f : -idx, - idx % 16 === 7 ? f : idx, - ], + [ + idx % 16 === 4 ? f : -idx, + idx % 16 === 5 ? f : idx, + idx % 16 === 6 ? f : -idx, + idx % 16 === 7 ? f : idx], - [ - idx % 16 === 8 ? f : idx, - idx % 16 === 9 ? f : -idx, - idx % 16 === 10 ? f : idx, - idx % 16 === 11 ? f : -idx, - ], + [ + idx % 16 === 8 ? f : idx, + idx % 16 === 9 ? f : -idx, + idx % 16 === 10 ? f : idx, + idx % 16 === 11 ? f : -idx], - [ - idx % 16 === 12 ? f : -idx, - idx % 16 === 13 ? f : idx, - idx % 16 === 14 ? f : -idx, - idx % 16 === 15 ? f : idx, - ], - ]), - }, + [ + idx % 16 === 12 ? f : -idx, + idx % 16 === 13 ? f : idx, + idx % 16 === 14 ? f : -idx, + idx % 16 === 15 ? f : idx]] + + ) + } }; /** @@ -1729,7 +1724,7 @@ const kSparseMatrixF16Values = { * There is not a more expansive set of matrices, since matrices are even more * expensive than vectors for increasing runtime with coverage. * - * All of the interesting floats from sparseF16 are guaranteed to be tested, but + * All of the interesting floats from sparseScalarF16 are guaranteed to be tested, but * not in every position. */ export function sparseMatrixF16Range(c, r) { @@ -1737,34 +1732,32 @@ export function sparseMatrixF16Range(c, r) { c === 2 || c === 3 || c === 4, 'sparseMatrixF16Range only accepts column counts of 2, 3, and 4' ); - assert( r === 2 || r === 3 || r === 4, 'sparseMatrixF16Range only accepts row counts of 2, 3, and 4' ); - return kSparseMatrixF16Values[c][r]; } /** Short list of f64 values of interest to test against */ const kInterestingF64Values = [ - kValue.f64.negative.min, - -10.0, - -1.0, - -0.125, - kValue.f64.negative.max, - kValue.f64.negative.subnormal.min, - kValue.f64.negative.subnormal.max, - -0.0, - 0.0, - kValue.f64.positive.subnormal.min, - kValue.f64.positive.subnormal.max, - kValue.f64.positive.min, - 0.125, - 1.0, - 10.0, - kValue.f64.positive.max, -]; +kValue.f64.negative.min, +-10.0, +-1.0, +-0.125, +kValue.f64.negative.max, +kValue.f64.negative.subnormal.min, +kValue.f64.negative.subnormal.max, +-0.0, +0.0, +kValue.f64.positive.subnormal.min, +kValue.f64.positive.subnormal.max, +kValue.f64.positive.min, +0.125, +1.0, +10.0, +kValue.f64.positive.max]; + /** @returns minimal F64 values that cover the entire range of F64 behaviours * @@ -1778,37 +1771,35 @@ const kInterestingF64Values = [ * specific values of interest. If there are known values of interest they * should be appended to this list in the test generation code. */ -export function sparseF64Range() { +export function sparseScalarF64Range() { return kInterestingF64Values; } const kVectorF64Values = { - 2: sparseF64Range().flatMap(f => [ - [f, 1.0], - [1.0, f], - [f, -1.0], - [-1.0, f], - ]), - - 3: sparseF64Range().flatMap(f => [ - [f, 1.0, 2.0], - [1.0, f, 2.0], - [1.0, 2.0, f], - [f, -1.0, -2.0], - [-1.0, f, -2.0], - [-1.0, -2.0, f], - ]), - - 4: sparseF64Range().flatMap(f => [ - [f, 1.0, 2.0, 3.0], - [1.0, f, 2.0, 3.0], - [1.0, 2.0, f, 3.0], - [1.0, 2.0, 3.0, f], - [f, -1.0, -2.0, -3.0], - [-1.0, f, -2.0, -3.0], - [-1.0, -2.0, f, -3.0], - [-1.0, -2.0, -3.0, f], - ]), + 2: sparseScalarF64Range().flatMap((f) => [ + [f, 1.0], + [1.0, f], + [f, -1.0], + [-1.0, f]] + ), + 3: sparseScalarF64Range().flatMap((f) => [ + [f, 1.0, 2.0], + [1.0, f, 2.0], + [1.0, 2.0, f], + [f, -1.0, -2.0], + [-1.0, f, -2.0], + [-1.0, -2.0, f]] + ), + 4: sparseScalarF64Range().flatMap((f) => [ + [f, 1.0, 2.0, 3.0], + [1.0, f, 2.0, 3.0], + [1.0, 2.0, f, 3.0], + [1.0, 2.0, 3.0, f], + [f, -1.0, -2.0, -3.0], + [-1.0, f, -2.0, -3.0], + [-1.0, -2.0, f, -3.0], + [-1.0, -2.0, -3.0, f]] + ) }; /** @@ -1830,19 +1821,18 @@ export function vectorF64Range(dim) { } const kSparseVectorF64Values = { - 2: sparseF64Range().map((f, idx) => [idx % 2 === 0 ? f : idx, idx % 2 === 1 ? f : -idx]), - 3: sparseF64Range().map((f, idx) => [ - idx % 3 === 0 ? f : idx, - idx % 3 === 1 ? f : -idx, - idx % 3 === 2 ? f : idx, - ]), - - 4: sparseF64Range().map((f, idx) => [ - idx % 4 === 0 ? f : idx, - idx % 4 === 1 ? f : -idx, - idx % 4 === 2 ? f : idx, - idx % 4 === 3 ? f : -idx, - ]), + 2: sparseScalarF64Range().map((f, idx) => [idx % 2 === 0 ? f : idx, idx % 2 === 1 ? f : -idx]), + 3: sparseScalarF64Range().map((f, idx) => [ + idx % 3 === 0 ? f : idx, + idx % 3 === 1 ? f : -idx, + idx % 3 === 2 ? f : idx] + ), + 4: sparseScalarF64Range().map((f, idx) => [ + idx % 4 === 0 ? f : idx, + idx % 4 === 1 ? f : -idx, + idx % 4 === 2 ? f : idx, + idx % 4 === 3 ? f : -idx] + ) }; /** @@ -1851,7 +1841,7 @@ const kSparseVectorF64Values = { * * This is an even more stripped down version of `vectorF64Range` for when * pairs of vectors are being tested. - * All the interesting floats from sparseF64 are guaranteed to be tested, but + * All the interesting floats from sparseScalarF64 are guaranteed to be tested, but * not in every position. */ export function sparseVectorF64Range(dim) { @@ -1859,119 +1849,106 @@ export function sparseVectorF64Range(dim) { dim === 2 || dim === 3 || dim === 4, 'sparseVectorF64Range only accepts dimensions 2, 3, and 4' ); - return kSparseVectorF64Values[dim]; } const kSparseMatrixF64Values = { 2: { 2: kInterestingF64Values.map((f, idx) => [ - [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], - [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx], - ]), - + [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx], + [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx]] + ), 3: kInterestingF64Values.map((f, idx) => [ - [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx, idx % 6 === 2 ? f : idx], - [idx % 6 === 3 ? f : -idx, idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx], - ]), - + [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx, idx % 6 === 2 ? f : idx], + [idx % 6 === 3 ? f : -idx, idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx]] + ), 4: kInterestingF64Values.map((f, idx) => [ - [ - idx % 8 === 0 ? f : idx, - idx % 8 === 1 ? f : -idx, - idx % 8 === 2 ? f : idx, - idx % 8 === 3 ? f : -idx, - ], + [ + idx % 8 === 0 ? f : idx, + idx % 8 === 1 ? f : -idx, + idx % 8 === 2 ? f : idx, + idx % 8 === 3 ? f : -idx], - [ - idx % 8 === 4 ? f : -idx, - idx % 8 === 5 ? f : idx, - idx % 8 === 6 ? f : -idx, - idx % 8 === 7 ? f : idx, - ], - ]), + [ + idx % 8 === 4 ? f : -idx, + idx % 8 === 5 ? f : idx, + idx % 8 === 6 ? f : -idx, + idx % 8 === 7 ? f : idx]] + + ) }, 3: { 2: kInterestingF64Values.map((f, idx) => [ - [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx], - [idx % 6 === 2 ? f : -idx, idx % 6 === 3 ? f : idx], - [idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx], - ]), - + [idx % 6 === 0 ? f : idx, idx % 6 === 1 ? f : -idx], + [idx % 6 === 2 ? f : -idx, idx % 6 === 3 ? f : idx], + [idx % 6 === 4 ? f : idx, idx % 6 === 5 ? f : -idx]] + ), 3: kInterestingF64Values.map((f, idx) => [ - [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], - [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], - [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx], - ]), - + [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx], + [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx], + [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx]] + ), 4: kInterestingF64Values.map((f, idx) => [ - [ - idx % 12 === 0 ? f : idx, - idx % 12 === 1 ? f : -idx, - idx % 12 === 2 ? f : idx, - idx % 12 === 3 ? f : -idx, - ], + [ + idx % 12 === 0 ? f : idx, + idx % 12 === 1 ? f : -idx, + idx % 12 === 2 ? f : idx, + idx % 12 === 3 ? f : -idx], - [ - idx % 12 === 4 ? f : -idx, - idx % 12 === 5 ? f : idx, - idx % 12 === 6 ? f : -idx, - idx % 12 === 7 ? f : idx, - ], + [ + idx % 12 === 4 ? f : -idx, + idx % 12 === 5 ? f : idx, + idx % 12 === 6 ? f : -idx, + idx % 12 === 7 ? f : idx], - [ - idx % 12 === 8 ? f : idx, - idx % 12 === 9 ? f : -idx, - idx % 12 === 10 ? f : idx, - idx % 12 === 11 ? f : -idx, - ], - ]), + [ + idx % 12 === 8 ? f : idx, + idx % 12 === 9 ? f : -idx, + idx % 12 === 10 ? f : idx, + idx % 12 === 11 ? f : -idx]] + + ) }, 4: { 2: kInterestingF64Values.map((f, idx) => [ - [idx % 8 === 0 ? f : idx, idx % 8 === 1 ? f : -idx], - [idx % 8 === 2 ? f : -idx, idx % 8 === 3 ? f : idx], - [idx % 8 === 4 ? f : idx, idx % 8 === 5 ? f : -idx], - [idx % 8 === 6 ? f : -idx, idx % 8 === 7 ? f : idx], - ]), - + [idx % 8 === 0 ? f : idx, idx % 8 === 1 ? f : -idx], + [idx % 8 === 2 ? f : -idx, idx % 8 === 3 ? f : idx], + [idx % 8 === 4 ? f : idx, idx % 8 === 5 ? f : -idx], + [idx % 8 === 6 ? f : -idx, idx % 8 === 7 ? f : idx]] + ), 3: kInterestingF64Values.map((f, idx) => [ - [idx % 12 === 0 ? f : idx, idx % 12 === 1 ? f : -idx, idx % 12 === 2 ? f : idx], - [idx % 12 === 3 ? f : -idx, idx % 12 === 4 ? f : idx, idx % 12 === 5 ? f : -idx], - [idx % 12 === 6 ? f : idx, idx % 12 === 7 ? f : -idx, idx % 12 === 8 ? f : idx], - [idx % 12 === 9 ? f : -idx, idx % 12 === 10 ? f : idx, idx % 12 === 11 ? f : -idx], - ]), - + [idx % 12 === 0 ? f : idx, idx % 12 === 1 ? f : -idx, idx % 12 === 2 ? f : idx], + [idx % 12 === 3 ? f : -idx, idx % 12 === 4 ? f : idx, idx % 12 === 5 ? f : -idx], + [idx % 12 === 6 ? f : idx, idx % 12 === 7 ? f : -idx, idx % 12 === 8 ? f : idx], + [idx % 12 === 9 ? f : -idx, idx % 12 === 10 ? f : idx, idx % 12 === 11 ? f : -idx]] + ), 4: kInterestingF64Values.map((f, idx) => [ - [ - idx % 16 === 0 ? f : idx, - idx % 16 === 1 ? f : -idx, - idx % 16 === 2 ? f : idx, - idx % 16 === 3 ? f : -idx, - ], + [ + idx % 16 === 0 ? f : idx, + idx % 16 === 1 ? f : -idx, + idx % 16 === 2 ? f : idx, + idx % 16 === 3 ? f : -idx], - [ - idx % 16 === 4 ? f : -idx, - idx % 16 === 5 ? f : idx, - idx % 16 === 6 ? f : -idx, - idx % 16 === 7 ? f : idx, - ], + [ + idx % 16 === 4 ? f : -idx, + idx % 16 === 5 ? f : idx, + idx % 16 === 6 ? f : -idx, + idx % 16 === 7 ? f : idx], - [ - idx % 16 === 8 ? f : idx, - idx % 16 === 9 ? f : -idx, - idx % 16 === 10 ? f : idx, - idx % 16 === 11 ? f : -idx, - ], + [ + idx % 16 === 8 ? f : idx, + idx % 16 === 9 ? f : -idx, + idx % 16 === 10 ? f : idx, + idx % 16 === 11 ? f : -idx], - [ - idx % 16 === 12 ? f : -idx, - idx % 16 === 13 ? f : idx, - idx % 16 === 14 ? f : -idx, - idx % 16 === 15 ? f : idx, - ], - ]), - }, + [ + idx % 16 === 12 ? f : -idx, + idx % 16 === 13 ? f : idx, + idx % 16 === 14 ? f : -idx, + idx % 16 === 15 ? f : idx]] + + ) + } }; /** @@ -1983,21 +1960,19 @@ const kSparseMatrixF64Values = { * There is not a more expansive set of matrices, since matrices are even more * expensive than vectors for increasing runtime with coverage. * - * All the interesting floats from sparseF64 are guaranteed to be tested, but + * All the interesting floats from sparseScalarF64 are guaranteed to be tested, but * not in every position. */ -export function sparseMatrixF64Range(c, r) { +export function sparseMatrixF64Range(cols, rows) { assert( - c === 2 || c === 3 || c === 4, + cols === 2 || cols === 3 || cols === 4, 'sparseMatrixF64Range only accepts column counts of 2, 3, and 4' ); - assert( - r === 2 || r === 3 || r === 4, + rows === 2 || rows === 3 || rows === 4, 'sparseMatrixF64Range only accepts row counts of 2, 3, and 4' ); - - return kSparseMatrixF64Values[c][r]; + return kSparseMatrixF64Values[cols][rows]; } /** @@ -2007,7 +1982,10 @@ export function sparseMatrixF64Range(c, r) { * m x p result. */ // A is m x n. B is n x p. product is m x p. -export function multiplyMatrices(A, B) { +export function multiplyMatrices( +A, +B) +{ assert(A.length > 0 && B.length > 0 && B[0].length > 0 && A[0].length === B.length); const product = new Array(A.length); for (let i = 0; i < product.length; ++i) { @@ -2028,27 +2006,49 @@ export function multiplyMatrices(A, B) { /** Sign-extend the `bits`-bit number `n` to a 32-bit signed integer. */ export function signExtend(n, bits) { const shift = 32 - bits; - return (n << shift) >> shift; + return n << shift >> shift; } + + + + /** @returns the closest 32-bit floating point value to the input */ export function quantizeToF32(num) { - return f32(num).value; + return Math.fround(num); } /** @returns the closest 16-bit floating point value to the input */ export function quantizeToF16(num) { - return f16(num).value; + return hfround(num); } -/** @returns the closest 32-bit signed integer value to the input */ +/** + * @returns the closest 32-bit signed integer value to the input, rounding + * towards 0, if not already an integer + */ export function quantizeToI32(num) { - return i32(num).value; + if (num >= kValue.i32.positive.max) { + return kValue.i32.positive.max; + } + if (num <= kValue.i32.negative.min) { + return kValue.i32.negative.min; + } + return Math.trunc(num); } -/** @returns the closest 32-bit signed integer value to the input */ +/** + * @returns the closest 32-bit unsigned integer value to the input, rounding + * towards 0, if not already an integer + */ export function quantizeToU32(num) { - return u32(num).value; + if (num >= kValue.u32.max) { + return kValue.u32.max; + } + if (num <= 0) { + return 0; + } + return Math.trunc(num); } /** @returns whether the number is an integer and a power of two */ @@ -2056,7 +2056,8 @@ export function isPowerOfTwo(n) { if (!Number.isInteger(n)) { return false; } - return n !== 0 && (n & (n - 1)) === 0; + assert((n | 0) === n, 'isPowerOfTwo only supports 32-bit numbers'); + return n !== 0 && (n & n - 1) === 0; } /** @returns the Greatest Common Divisor (GCD) of the inputs */ @@ -2075,39 +2076,7 @@ export function gcd(a, b) { /** @returns the Least Common Multiplier (LCM) of the inputs */ export function lcm(a, b) { - return (a * b) / gcd(a, b); -} - -/** - * @returns the bit representation as a 64-integer, via interpreting the input - * as a 64-bit float value - */ -export function reinterpretF64AsU64(input) { - return new BigUint64Array(new Float64Array([input]).buffer)[0]; -} - -/** - * @returns a 64-bit float value via interpreting the input as the bit - * representation as a 64-bit integer - */ -export function reinterpretU64AsF64(input) { - return new Float64Array(new BigUint64Array([input]).buffer)[0]; -} - -/** - * @returns a 32-bit float value via interpreting the input as the bit - * representation as a 32-bit integer - */ -export function reinterpretU32AsF32(input) { - return floatBitsToNumber(input, kFloat32Format); -} - -/** - * @returns a 16-bit float value via interpreting the input as the bit - * representation as a 16-bit integer - */ -export function reinterpretU16AsF16(hex) { - return floatBitsToNumber(hex, kFloat16Format); + return a * b / gcd(a, b); } /** @returns the cross of an array with the intermediate result of cartesianProduct @@ -2117,11 +2086,14 @@ export function reinterpretU16AsF16(hex) { * @param intermediate arrays of values representing the partial result of * cartesianProduct */ -function cartesianProductImpl(elements, intermediate) { +function cartesianProductImpl( +elements, +intermediate) +{ const result = []; - elements.forEach(e => { + elements.forEach((e) => { if (intermediate.length > 0) { - intermediate.forEach(i => { + intermediate.forEach((i) => { result.push([...i, e]); }); } else { @@ -2143,7 +2115,7 @@ function cartesianProductImpl(elements, intermediate) { */ export function cartesianProduct(...inputs) { let result = []; - inputs.forEach(i => { + inputs.forEach((i) => { result = cartesianProductImpl(i, result); }); @@ -2182,7 +2154,7 @@ export function calculatePermutations(input) { input.forEach((head, idx) => { const tail = input.slice(0, idx).concat(input.slice(idx + 1)); const permutations = calculatePermutations(tail); - permutations.forEach(p => { + permutations.forEach((p) => { result.push([head, ...p]); }); }); @@ -2202,10 +2174,9 @@ export function flatten2DArray(m) { const c = m.length; const r = m[0].length; assert( - m.every(c => c.length === r), + m.every((c) => c.length === r), `Unexpectedly received jagged array to flatten` ); - const result = Array(c * r); for (let i = 0; i < c; i++) { for (let j = 0; j < r; j++) { @@ -2226,9 +2197,8 @@ export function unflatten2DArray(n, c, r) { c > 0 && Number.isInteger(c) && r > 0 && Number.isInteger(r), `columns (${c}) and rows (${r}) need to be positive integers` ); - assert(n.length === c * r, `m.length(${n.length}) should equal c * r (${c * r})`); - const result = [...Array(c)].map(_ => [...Array(r)]); + const result = [...Array(c)].map((_) => [...Array(r)]); for (let i = 0; i < c; i++) { for (let j = 0; j < r; j++) { result[i][j] = n[j + i * r]; @@ -2249,11 +2219,10 @@ export function map2DArray(m, op) { const c = m.length; const r = m[0].length; assert( - m.every(c => c.length === r), + m.every((c) => c.length === r), `Unexpectedly received jagged array to map` ); - - const result = [...Array(c)].map(_ => [...Array(r)]); + const result = [...Array(c)].map((_) => [...Array(r)]); for (let i = 0; i < c; i++) { for (let j = 0; j < r; j++) { result[i][j] = op(m[i][j]); @@ -2261,3 +2230,33 @@ export function map2DArray(m, op) { } return result; } + +/** + * Performs a .every over a matrix and return the result + * + * @param m input matrix of type T + * @param op operation that performs a test on an element + * @returns a boolean indicating if the test passed for every element + */ +export function every2DArray(m, op) { + const r = m[0].length; + assert( + m.every((c) => c.length === r), + `Unexpectedly received jagged array to map` + ); + return m.every((col) => col.every((el) => op(el))); +} + +/** + * Subtracts 2 vectors + */ +export function subtractVectors(v1, v2) { + return v1.map((v, i) => v - v2[i]); +} + +/** + * Computes the dot product of 2 vectors + */ +export function dotProduct(v1, v2) { + return v1.reduce((a, v, i) => a + v * v2[i], 0); +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/memory.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/memory.js index 6fcc2385deb..e48ab32fc98 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/memory.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/memory.js @@ -1,10 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Helper to exhaust VRAM until there is less than 64 MB of capacity. Returns * an opaque closure which can be called to free the allocated resources later. - */ export async function exhaustVramUntilUnder64MB(device) { - const allocateUntilOom = async (device, size) => { + */export async function exhaustVramUntilUnder64MB(device) {const allocateUntilOom = async (device, size) => { const buffers = []; for (;;) { device.pushErrorScope('out-of-memory'); @@ -21,6 +20,6 @@ const buffers = await allocateUntilOom(device, kLargeChunkSize); buffers.push(...(await allocateUntilOom(device, kSmallChunkSize))); return () => { - buffers.forEach(buffer => buffer.destroy()); + buffers.forEach((buffer) => buffer.destroy()); }; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/pretty_diff_tables.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/pretty_diff_tables.js index 41d519f6b36..3803540fe9f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/pretty_diff_tables.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/pretty_diff_tables.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { range } from '../../common/util/util.js'; -/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { range } from '../../common/util/util.js'; /** * Pretty-prints a "table" of cell values (each being `number | string`), right-aligned. * Each row may be any iterator, including lazily-generated (potentially infinite) rows. * @@ -12,22 +11,25 @@ * * Each remaining argument provides one row for the table. */ -export function generatePrettyTable({ fillToWidth, numberToString }, rows) { +export function generatePrettyTable( +{ fillToWidth, numberToString }, +rows) +{ const rowStrings = range(rows.length, () => ''); let totalTableWidth = 0; - const iters = rows.map(row => row[Symbol.iterator]()); + const iters = rows.map((row) => row[Symbol.iterator]()); // Loop over columns for (;;) { - const cellsForColumn = iters.map(iter => { + const cellsForColumn = iters.map((iter) => { const r = iter.next(); // Advance the iterator for each row, in lock-step. return r.done ? undefined : typeof r.value === 'number' ? numberToString(r.value) : r.value; }); - if (cellsForColumn.every(cell => cell === undefined)) break; + if (cellsForColumn.every((cell) => cell === undefined)) break; // Maximum width of any cell in this column, plus one for space between columns // (also inserts a space at the left of the first column). - const colWidth = Math.max(...cellsForColumn.map(c => (c === undefined ? 0 : c.length))) + 1; + const colWidth = Math.max(...cellsForColumn.map((c) => c === undefined ? 0 : c.length)) + 1; for (let row = 0; row < rowStrings.length; ++row) { const cell = cellsForColumn[row]; if (cell !== undefined) { @@ -46,4 +48,4 @@ export function generatePrettyTable({ fillToWidth, numberToString }, rows) { } } return rowStrings.join('\n'); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/prng.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/prng.js index 791af58b22f..9e456d734ea 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/prng.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/prng.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../common/util/util.js'; -import { kValue } from './constants.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../common/util/util.js';import { kValue } from './constants.js'; /** * Seed-able deterministic pseudo random generator for the WebGPU CTS @@ -25,11 +24,14 @@ export class PRNG { // Storing variables for temper() as members, so they don't need to be // reallocated per call to temper() + // Storing variables for next() as members, so they don't need to be // reallocated per call to next() + // Generator internal state + // Default tuning parameters for TinyMT. // These are tested to not generate an all zero initial state. static kMat1 = 0x8f7011ee; @@ -64,16 +66,16 @@ export class PRNG { this.state = new Uint32Array([Math.round(seed), PRNG.kMat1, PRNG.kMat2, PRNG.kTMat]); for (let i = 1; i < PRNG.kMinLoop; i++) { this.state[i & 3] ^= - i + Math.imul(1812433253, this.state[(i - 1) & 3] ^ (this.state[(i - 1) & 3] >>> 30)); + i + Math.imul(1812433253, this.state[i - 1 & 3] ^ this.state[i - 1 & 3] >>> 30); } // Check that the initial state isn't all 0s, since the algorithm assumes // that this never occurs assert( (this.state[0] & PRNG.kMask) !== 0 || - this.state[1] !== 0 || - this.state[2] !== 0 || - this.state[2] !== 0, + this.state[1] !== 0 || + this.state[2] !== 0 || + this.state[2] !== 0, 'Initialization of PRNG unexpectedly generated all 0s initial state, this means the tuning parameters are bad' ); @@ -84,13 +86,13 @@ export class PRNG { /** Advances the internal state to the next values */ next() { - this.n_vars[0] = (this.state[0] & PRNG.kMask) ^ this.state[1] ^ this.state[2]; + this.n_vars[0] = this.state[0] & PRNG.kMask ^ this.state[1] ^ this.state[2]; this.n_vars[1] = this.state[3]; this.n_vars[0] ^= this.n_vars[0] << PRNG.kSH0; - this.n_vars[1] ^= (this.n_vars[1] >>> PRNG.kSH0) ^ this.n_vars[0]; + this.n_vars[1] ^= this.n_vars[1] >>> PRNG.kSH0 ^ this.n_vars[0]; this.state[0] = this.state[1]; this.state[1] = this.state[2]; - this.state[2] = this.n_vars[0] ^ (this.n_vars[1] << PRNG.kSH1); + this.state[2] = this.n_vars[0] ^ this.n_vars[1] << PRNG.kSH1; this.state[3] = this.n_vars[1]; if ((this.n_vars[1] & 1) !== 0) { this.state[1] ^= PRNG.kMat1; @@ -120,4 +122,4 @@ export class PRNG { this.next(); return this.temper(); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/reinterpret.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/reinterpret.js new file mode 100644 index 00000000000..69eebb1e8c2 --- /dev/null +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/reinterpret.js @@ -0,0 +1,118 @@ +/** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { Float16Array } from '../../external/petamoriken/float16/float16.js'; /** + * Once-allocated ArrayBuffer/views to avoid overhead of allocation when converting between numeric formats + * + * workingData* is shared between multiple functions in this file, so to avoid re-entrancy problems, make sure in + * functions that use it that they don't call themselves or other functions that use workingData*. + */ +const workingData = new ArrayBuffer(8); +const workingDataU32 = new Uint32Array(workingData); +const workingDataU16 = new Uint16Array(workingData); +const workingDataF32 = new Float32Array(workingData); +const workingDataF16 = new Float16Array(workingData); +const workingDataI32 = new Int32Array(workingData); +const workingDataF64 = new Float64Array(workingData); +const workingDataU64 = new BigUint64Array(workingData); + +/** + * @returns a 64-bit float value via interpreting the input as the bit + * representation as a 64-bit integer + */ +export function reinterpretU64AsF64(input) { + workingDataU64[0] = input; + return workingDataF64[0]; +} + +/** + * @returns the 64-bit integer bit representation of 64-bit float value + */ +export function reinterpretF64AsU64(input) { + workingDataF64[0] = input; + return workingDataU64[0]; +} + +// Encoding to u32s, instead of BigInt, for serialization +export function reinterpretF64AsU32s(f64) { + workingDataF64[0] = f64; + return [workingDataU32[0], workingDataU32[1]]; +} + +// De-encoding from u32s, instead of BigInt, for serialization +export function reinterpretU32sAsF64(u32s) { + workingDataU32[0] = u32s[0]; + workingDataU32[1] = u32s[1]; + return workingDataF64[0]; +} + +/** + * @returns a number representing the u32 interpretation + * of the bits of a number assumed to be an f32 value. + */ +export function reinterpretF32AsU32(f32) { + workingDataF32[0] = f32; + return workingDataU32[0]; +} + +/** + * @returns a number representing the i32 interpretation + * of the bits of a number assumed to be an f32 value. + */ +export function reinterpretF32AsI32(f32) { + workingDataF32[0] = f32; + return workingDataI32[0]; +} + +/** + * @returns a number representing the f32 interpretation + * of the bits of a number assumed to be an u32 value. + */ +export function reinterpretU32AsF32(u32) { + workingDataU32[0] = u32; + return workingDataF32[0]; +} + +/** + * @returns a number representing the i32 interpretation + * of the bits of a number assumed to be an u32 value. + */ +export function reinterpretU32AsI32(u32) { + workingDataU32[0] = u32; + return workingDataI32[0]; +} + +/** + * @returns a number representing the u32 interpretation + * of the bits of a number assumed to be an i32 value. + */ +export function reinterpretI32AsU32(i32) { + workingDataI32[0] = i32; + return workingDataU32[0]; +} + +/** + * @returns a number representing the f32 interpretation + * of the bits of a number assumed to be an i32 value. + */ +export function reinterpretI32AsF32(i32) { + workingDataI32[0] = i32; + return workingDataF32[0]; +} + +/** + * @returns a number representing the u16 interpretation + * of the bits of a number assumed to be an f16 value. + */ +export function reinterpretF16AsU16(f16) { + workingDataF16[0] = f16; + return workingDataU16[0]; +} + +/** + * @returns a number representing the f16 interpretation + * of the bits of a number assumed to be an u16 value. + */ +export function reinterpretU16AsF16(u16) { + workingDataU16[0] = u16; + return workingDataF16[0]; +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/shader.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/shader.js index 2763d30a390..51029e0c829 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/shader.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/shader.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { unreachable } from '../../common/util/util.js'; -export const kDefaultVertexShaderCode = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { unreachable } from '../../common/util/util.js';export const kDefaultVertexShaderCode = ` @vertex fn main() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); } @@ -15,16 +14,16 @@ export const kDefaultFragmentShaderCode = ` const kPlainTypeInfo = { i32: { suffix: '', - fractionDigits: 0, + fractionDigits: 0 }, u32: { suffix: 'u', - fractionDigits: 0, + fractionDigits: 0 }, f32: { suffix: '', - fractionDigits: 4, - }, + fractionDigits: 4 + } }; /** @@ -84,10 +83,13 @@ export function getPlainTypeInfo(sampleType) { * @returns the fragment shader string */ export function getFragmentShaderCodeWithOutput( - outputs, +outputs, - fragDepth = null -) { + + + +fragDepth = null) +{ if (outputs.length === 0) { if (fragDepth) { return ` @@ -118,7 +120,7 @@ export function getFragmentShaderCodeWithOutput( const { suffix, fractionDigits } = kPlainTypeInfo[plainType]; let outputType; - const v = o.values.map(n => n.toFixed(fractionDigits)); + const v = o.values.map((n) => n.toFixed(fractionDigits)); switch (o.componentCount) { case 1: outputType = plainType; @@ -137,7 +139,6 @@ export function getFragmentShaderCodeWithOutput( resultStrings.push( `${outputType}(${v[0]}${suffix}, ${v[1]}${suffix}, ${v[2]}${suffix}, ${v[3]}${suffix})` ); - break; default: unreachable(); @@ -156,6 +157,8 @@ export function getFragmentShaderCodeWithOutput( }`; } + + /** * Return a foo shader of the given stage with the given entry point * @param shaderStage @@ -165,30 +168,29 @@ export function getFragmentShaderCodeWithOutput( export function getShaderWithEntryPoint(shaderStage, entryPoint) { let code; switch (shaderStage) { - case 'compute': { - code = `@compute @workgroup_size(1) fn ${entryPoint}() {}`; - break; - } - case 'vertex': { - code = ` + case 'compute':{ + code = `@compute @workgroup_size(1) fn ${entryPoint}() {}`; + break; + } + case 'vertex':{ + code = ` @vertex fn ${entryPoint}() -> @builtin(position) vec4 { return vec4(0.0, 0.0, 0.0, 1.0); }`; - break; - } - case 'fragment': { - code = ` + break; + } + case 'fragment':{ + code = ` @fragment fn ${entryPoint}() -> @location(0) vec4 { return vec4(0.0, 1.0, 0.0, 1.0); }`; - break; - } + break; + } case 'empty': - default: { - code = ''; - break; - } + default:{ + code = ''; + break; + } } - return code; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture.js index 53d78839f21..c2c980c975e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert } from '../../common/util/util.js'; -import { getTextureCopyLayout } from './texture/layout.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert } from '../../common/util/util.js';import { getTextureCopyLayout } from './texture/layout.js'; import { reifyExtent3D } from './unions.js'; @@ -9,9 +8,13 @@ import { reifyExtent3D } from './unions.js'; * Creates a mipmapped texture where each mipmap level's (`i`) content is * from `texelViews[i]`. */ -export function createTextureFromTexelViews(device, texelViews, desc) { +export function createTextureFromTexelViews( +device, +texelViews, +desc) +{ // All texel views must be the same format for mipmaps. - assert(texelViews.length > 0 && texelViews.every(e => e.format === texelViews[0].format)); + assert(texelViews.length > 0 && texelViews.every((e) => e.format === texelViews[0].format)); const format = texelViews[0].format; const { width, height, depthOrArrayLayers } = reifyExtent3D(desc.size); @@ -20,7 +23,7 @@ export function createTextureFromTexelViews(device, texelViews, desc) { ...desc, format: texelViews[0].format, usage: desc.usage | GPUTextureUsage.COPY_DST, - mipLevelCount: texelViews.length, + mipLevelCount: texelViews.length }); // Copy the texel view into each mip level layer. @@ -29,16 +32,16 @@ export function createTextureFromTexelViews(device, texelViews, desc) { for (let mipLevel = 0; mipLevel < texelViews.length; mipLevel++) { const { bytesPerRow, - mipSize: [mipWidth, mipHeight, mipDepthOrArray], + mipSize: [mipWidth, mipHeight, mipDepthOrArray] } = getTextureCopyLayout(format, desc.dimension ?? '2d', [width, height, depthOrArrayLayers], { - mipLevel, + mipLevel }); // Create a staging buffer to upload the texture mip level contents. const stagingBuffer = device.createBuffer({ mappedAtCreation: true, size: bytesPerRow * mipHeight * mipDepthOrArray, - usage: GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.COPY_SRC }); stagingBuffers.push(stagingBuffer); @@ -47,7 +50,7 @@ export function createTextureFromTexelViews(device, texelViews, desc) { bytesPerRow, rowsPerImage: mipHeight, subrectOrigin: [0, 0, 0], - subrectSize: [mipWidth, mipHeight, mipDepthOrArray], + subrectSize: [mipWidth, mipHeight, mipDepthOrArray] }); stagingBuffer.unmap(); @@ -61,7 +64,7 @@ export function createTextureFromTexelViews(device, texelViews, desc) { device.queue.submit([commandEncoder.finish()]); // Cleanup the staging buffers. - stagingBuffers.forEach(value => value.destroy()); + stagingBuffers.forEach((value) => value.destroy()); return texture; } @@ -69,6 +72,10 @@ export function createTextureFromTexelViews(device, texelViews, desc) { /** * Creates a 1 mip level texture with the contents of a TexelView. */ -export function createTextureFromTexelView(device, texelView, desc) { +export function createTextureFromTexelView( +device, +texelView, +desc) +{ return createTextureFromTexelViews(device, [texelView], desc); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/base.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/base.js index 4c331f1ff0c..99636b9ad90 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/base.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/base.js @@ -1,14 +1,18 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../format_info.js'; -import { align } from '../../util/math.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../../common/util/util.js';import { kTextureFormatInfo } from '../../format_info.js';import { align } from '../../util/math.js'; import { reifyExtent3D } from '../../util/unions.js'; /** * Compute the maximum mip level count allowed for a given texture size and texture dimension. */ -export function maxMipLevelCount({ size, dimension = '2d' }) { +export function maxMipLevelCount({ + size, + dimension = '2d' + + + +}) { const sizeDict = reifyExtent3D(size); let maxMippedDimension = 0; @@ -31,56 +35,57 @@ export function maxMipLevelCount({ size, dimension = '2d' }) { * Compute the "physical size" of a mip level: the size of the level, rounded up to a * multiple of the texel block size. */ -export function physicalMipSize(baseSize, format, dimension, level) { +export function physicalMipSize( +baseSize, +format, +dimension, +level) +{ switch (dimension) { case '1d': assert(level === 0, '1d textures cannot be mipmapped'); assert(baseSize.height === 1 && baseSize.depthOrArrayLayers === 1, '1d texture not Wx1x1'); return { width: baseSize.width, height: 1, depthOrArrayLayers: 1 }; - case '2d': { - assert( - Math.max(baseSize.width, baseSize.height) >> level > 0, - () => `level (${level}) too large for base size (${baseSize.width}x${baseSize.height})` - ); + case '2d':{ + assert( + Math.max(baseSize.width, baseSize.height) >> level > 0, + () => `level (${level}) too large for base size (${baseSize.width}x${baseSize.height})` + ); - const virtualWidthAtLevel = Math.max(baseSize.width >> level, 1); - const virtualHeightAtLevel = Math.max(baseSize.height >> level, 1); - const physicalWidthAtLevel = align( - virtualWidthAtLevel, - kTextureFormatInfo[format].blockWidth - ); + const virtualWidthAtLevel = Math.max(baseSize.width >> level, 1); + const virtualHeightAtLevel = Math.max(baseSize.height >> level, 1); + const physicalWidthAtLevel = align( + virtualWidthAtLevel, + kTextureFormatInfo[format].blockWidth + ); + const physicalHeightAtLevel = align( + virtualHeightAtLevel, + kTextureFormatInfo[format].blockHeight + ); + return { + width: physicalWidthAtLevel, + height: physicalHeightAtLevel, + depthOrArrayLayers: baseSize.depthOrArrayLayers + }; + } - const physicalHeightAtLevel = align( - virtualHeightAtLevel, - kTextureFormatInfo[format].blockHeight - ); - - return { - width: physicalWidthAtLevel, - height: physicalHeightAtLevel, - depthOrArrayLayers: baseSize.depthOrArrayLayers, - }; - } - - case '3d': { - assert( - Math.max(baseSize.width, baseSize.height, baseSize.depthOrArrayLayers) >> level > 0, - () => + case '3d':{ + assert( + Math.max(baseSize.width, baseSize.height, baseSize.depthOrArrayLayers) >> level > 0, + () => `level (${level}) too large for base size (${baseSize.width}x${baseSize.height}x${baseSize.depthOrArrayLayers})` - ); - - assert( - kTextureFormatInfo[format].blockWidth === 1 && kTextureFormatInfo[format].blockHeight === 1, - 'not implemented for 3d block formats' - ); - - return { - width: Math.max(baseSize.width >> level, 1), - height: Math.max(baseSize.height >> level, 1), - depthOrArrayLayers: Math.max(baseSize.depthOrArrayLayers >> level, 1), - }; - } + ); + assert( + kTextureFormatInfo[format].blockWidth === 1 && kTextureFormatInfo[format].blockHeight === 1, + 'not implemented for 3d block formats' + ); + return { + width: Math.max(baseSize.width >> level, 1), + height: Math.max(baseSize.height >> level, 1), + depthOrArrayLayers: Math.max(baseSize.depthOrArrayLayers >> level, 1) + }; + } } } @@ -88,7 +93,10 @@ export function physicalMipSize(baseSize, format, dimension, level) { * Compute the "physical size" of a mip level: the size of the level, rounded up to a * multiple of the texel block size. */ -export function physicalMipSizeFromTexture(texture, mipLevel) { +export function physicalMipSizeFromTexture( +texture, +mipLevel) +{ const size = physicalMipSize(texture, texture.format, texture.dimension, mipLevel); return [size.width, size.height, size.depthOrArrayLayers]; } @@ -98,8 +106,12 @@ export function physicalMipSizeFromTexture(texture, mipLevel) { * * MAINTENANCE_TODO: Change input/output to Required for consistency. */ -export function virtualMipSize(dimension, size, mipLevel) { - const shiftMinOne = n => Math.max(1, n >> mipLevel); +export function virtualMipSize( +dimension, +size, +mipLevel) +{ + const shiftMinOne = (n) => Math.max(1, n >> mipLevel); switch (dimension) { case '1d': assert(size[2] === 1); @@ -145,15 +157,23 @@ export function viewDimensionsForTextureDimension(textureDimension) { } } -/** Returns the default view dimension for a given texture descriptor. */ -export function defaultViewDimensionsForTexture(textureDescriptor) { - switch (textureDescriptor.dimension) { +/** Returns the effective view dimension for a given texture dimension and depthOrArrayLayers */ +export function effectiveViewDimensionForDimension( +viewDimension, +dimension, +depthOrArrayLayers) +{ + if (viewDimension) { + return viewDimension; + } + + switch (dimension || '2d') { case '1d': return '1d'; - case '2d': { - const sizeDict = reifyExtent3D(textureDescriptor.size); - return sizeDict.depthOrArrayLayers > 1 ? '2d-array' : '2d'; - } + case '2d': + case undefined: + return depthOrArrayLayers > 1 ? '2d-array' : '2d'; + break; case '3d': return '3d'; default: @@ -161,16 +181,43 @@ export function defaultViewDimensionsForTexture(textureDescriptor) { } } +/** Returns the effective view dimension for a given texture */ +export function effectiveViewDimensionForTexture( +texture, +viewDimension) +{ + return effectiveViewDimensionForDimension( + viewDimension, + texture.dimension, + texture.depthOrArrayLayers + ); +} + +/** Returns the default view dimension for a given texture descriptor. */ +export function defaultViewDimensionsForTexture(textureDescriptor) { + const sizeDict = reifyExtent3D(textureDescriptor.size); + return effectiveViewDimensionForDimension( + undefined, + textureDescriptor.dimension, + sizeDict.depthOrArrayLayers + ); +} + /** Reifies the optional fields of `GPUTextureDescriptor`. * MAINTENANCE_TODO: viewFormats should not be omitted here, but it seems likely that the * @webgpu/types definition will have to change before we can include it again. */ -export function reifyTextureDescriptor(desc) { +export function reifyTextureDescriptor( +desc) +{ return { dimension: '2d', mipLevelCount: 1, sampleCount: 1, ...desc }; } /** Reifies the optional fields of `GPUTextureViewDescriptor` (given a `GPUTextureDescriptor`). */ -export function reifyTextureViewDescriptor(textureDescriptor, view) { +export function reifyTextureViewDescriptor( +textureDescriptor, +view) +{ const texture = reifyTextureDescriptor(textureDescriptor); // IDL defaulting @@ -203,7 +250,7 @@ export function reifyTextureViewDescriptor(textureDescriptor, view) { baseMipLevel, mipLevelCount, baseArrayLayer, - arrayLayerCount, + arrayLayerCount }; } @@ -212,7 +259,10 @@ export function reifyTextureViewDescriptor(textureDescriptor, view) { * @param subrectOrigin - Subrect origin * @param subrectSize - Subrect size */ -export function* fullSubrectCoordinates(subrectOrigin, subrectSize) { +export function* fullSubrectCoordinates( +subrectOrigin, +subrectSize) +{ for (let z = subrectOrigin.z; z < subrectOrigin.z + subrectSize.depthOrArrayLayers; ++z) { for (let y = subrectOrigin.y; y < subrectOrigin.y + subrectSize.height; ++y) { for (let x = subrectOrigin.x; x < subrectOrigin.x + subrectSize.width; ++x) { @@ -220,4 +270,4 @@ export function* fullSubrectCoordinates(subrectOrigin, subrectSize) { } } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/data_generation.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/data_generation.js index b92dbd2bbdd..5ab5338014d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/data_generation.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/data_generation.js @@ -1,10 +1,9 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * A helper class that generates ranges of dummy data for buffer or texture operations * efficiently. Tries to minimize allocations and data updates. - */ export class DataArrayGenerator { - dataBuffer = new Uint8Array(256); + */export class DataArrayGenerator {dataBuffer = new Uint8Array(256); lastOffset = 0; lastStart = 0; @@ -12,7 +11,7 @@ /** Find the nearest power of two greater than or equal to the input value. */ nextPowerOfTwo(value) { - return 1 << (32 - Math.clz32(value - 1)); + return 1 << 32 - Math.clz32(value - 1); } generateData(byteSize, start = 0, offset = 0) { @@ -42,7 +41,7 @@ // Generate any new values that are required if (this.lastByteSize < byteSize) { for (let i = this.lastByteSize; i < byteSize - offset; ++i) { - this.dataBuffer[i + offset] = ((i ** 3 + i + start) % 251) + 1; // Ensure data is always non-zero + this.dataBuffer[i + offset] = (i ** 3 + i + start) % 251 + 1; // Ensure data is always non-zero } this.lastOffset = offset; @@ -81,4 +80,4 @@ this.generateData(byteSize, start, offset); return this.dataBuffer.slice(0, byteSize); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/layout.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/layout.js index 17d9ba90b21..36603a1df47 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/layout.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/layout.js @@ -1,7 +1,10 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, memcpy } from '../../../common/util/util.js'; -import { kTextureFormatInfo, resolvePerAspectFormat } from '../../format_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, memcpy } from '../../../common/util/util.js';import { kTextureFormatInfo, +resolvePerAspectFormat } from + + +'../../format_info.js'; import { align } from '../math.js'; import { reifyExtent3D } from '../unions.js'; @@ -16,15 +19,39 @@ export const kBufferCopyAlignment = 4; * Overridable layout options for {@link getTextureCopyLayout}. */ + + + + + + const kDefaultLayoutOptions = { mipLevel: 0, bytesPerRow: undefined, rowsPerImage: undefined, - aspect: 'all', + aspect: 'all' }; /** The info returned by {@link getTextureSubCopyLayout}. */ + + + + + + + + + + + + + +/** The info returned by {@link getTextureCopyLayout}. */ + + + + /** * Computes layout information for a copy of the whole subresource at `mipLevel` of a GPUTexture * of size `baseSize` with the provided `format` and `dimension`. @@ -34,11 +61,11 @@ const kDefaultLayoutOptions = { * MAINTENANCE_TODO: Change input/output to Required for consistency. */ export function getTextureCopyLayout( - format, - dimension, - baseSize, - { mipLevel, bytesPerRow, rowsPerImage, aspect } = kDefaultLayoutOptions -) { +format, +dimension, +baseSize, +{ mipLevel, bytesPerRow, rowsPerImage, aspect } = kDefaultLayoutOptions) +{ const mipSize = physicalMipSize( { width: baseSize[0], height: baseSize[1], depthOrArrayLayers: baseSize[2] }, format, @@ -57,10 +84,18 @@ export function getTextureCopyLayout( * Computes default values for `bytesPerRow` and `rowsPerImage` if not specified. */ export function getTextureSubCopyLayout( - format, - copySize, - { bytesPerRow, rowsPerImage, aspect = 'all' } = {} -) { +format, +copySize, +{ + bytesPerRow, + rowsPerImage, + aspect = 'all' + + + + +} = {}) +{ format = resolvePerAspectFormat(format, aspect); const { blockWidth, blockHeight, bytesPerBlock } = kTextureFormatInfo[format]; assert(bytesPerBlock !== undefined); @@ -70,17 +105,15 @@ export function getTextureSubCopyLayout( copySize_.width > 0 && copySize_.height > 0 && copySize_.depthOrArrayLayers > 0, 'not implemented for empty copySize' ); - assert( copySize_.width % blockWidth === 0 && copySize_.height % blockHeight === 0, () => - `copySize (${copySize_.width},${copySize_.height}) must be a multiple of the block size (${blockWidth},${blockHeight})` + `copySize (${copySize_.width},${copySize_.height}) must be a multiple of the block size (${blockWidth},${blockHeight})` ); - const copySizeBlocks = { width: copySize_.width / blockWidth, height: copySize_.height / blockHeight, - depthOrArrayLayers: copySize_.depthOrArrayLayers, + depthOrArrayLayers: copySize_.depthOrArrayLayers }; const minBytesPerRow = copySizeBlocks.width * bytesPerBlock; @@ -100,7 +133,7 @@ export function getTextureSubCopyLayout( const bytesPerSlice = bytesPerRow * rowsPerImage; const sliceSize = - bytesPerRow * (copySizeBlocks.height - 1) + bytesPerBlock * copySizeBlocks.width; + bytesPerRow * (copySizeBlocks.height - 1) + bytesPerBlock * copySizeBlocks.width; const byteLength = bytesPerSlice * (copySizeBlocks.depthOrArrayLayers - 1) + sliceSize; return { @@ -108,7 +141,7 @@ export function getTextureSubCopyLayout( byteLength: align(byteLength, kBufferCopyAlignment), minBytesPerRow, bytesPerRow, - rowsPerImage, + rowsPerImage }; } @@ -120,13 +153,13 @@ export function getTextureSubCopyLayout( * Effectively emulates a copyTextureToBuffer from a solid-color texture to a buffer. */ export function fillTextureDataWithTexelValue( - texelValue, - format, - dimension, - outputBuffer, - size, - options = kDefaultLayoutOptions -) { +texelValue, +format, +dimension, +outputBuffer, +size, +options = kDefaultLayoutOptions) +{ const { blockWidth, blockHeight, bytesPerBlock } = kTextureFormatInfo[format]; // Block formats are not handled correctly below. assert(blockWidth === 1); @@ -150,7 +183,7 @@ export function fillTextureDataWithTexelValue( for (let row = 0; row < mipSize[1]; row += blockHeight) { for (let col = 0; col < mipSize[0]; col += blockWidth) { const byteOffset = - slice * rowsPerImage * bytesPerRow + row * bytesPerRow + col * texelValue.byteLength; + slice * rowsPerImage * bytesPerRow + row * bytesPerRow + col * texelValue.byteLength; memcpy({ src: texelValue }, { dst: outputTexelValueBytes, start: byteOffset }); } } @@ -162,13 +195,17 @@ export function fillTextureDataWithTexelValue( * texture where every texel has the byte value `texelValue`. */ export function createTextureUploadBuffer( - texelValue, - device, - format, - dimension, - size, - options = kDefaultLayoutOptions -) { +texelValue, +device, +format, +dimension, +size, +options = kDefaultLayoutOptions) + + + + +{ const { byteLength, bytesPerRow, rowsPerImage, bytesPerBlock } = getTextureCopyLayout( format, dimension, @@ -179,7 +216,7 @@ export function createTextureUploadBuffer( const buffer = device.createBuffer({ mappedAtCreation: true, size: byteLength, - usage: GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.COPY_SRC }); const mapping = buffer.getMappedRange(); @@ -190,11 +227,16 @@ export function createTextureUploadBuffer( return { buffer, bytesPerRow, - rowsPerImage, + rowsPerImage }; } -export const kImageCopyTypes = ['WriteTexture', 'CopyB2T', 'CopyT2B']; + +export const kImageCopyTypes = [ +'WriteTexture', +'CopyB2T', +'CopyT2B']; + /** * Computes `bytesInACompleteRow` (as defined by the WebGPU spec) for image copies (B2T/T2B/writeTexture). @@ -202,10 +244,18 @@ export const kImageCopyTypes = ['WriteTexture', 'CopyB2T', 'CopyT2B']; export function bytesInACompleteRow(copyWidth, format) { const info = kTextureFormatInfo[format]; assert(copyWidth % info.blockWidth === 0); - return (info.bytesPerBlock * copyWidth) / info.blockWidth; + return info.bytesPerBlock * copyWidth / info.blockWidth; } -function validateBytesPerRow({ bytesPerRow, bytesInLastRow, sizeInBlocks }) { +function validateBytesPerRow({ + bytesPerRow, + bytesInLastRow, + sizeInBlocks + + + + +}) { // If specified, layout.bytesPerRow must be greater than or equal to bytesInLastRow. if (bytesPerRow !== undefined && bytesPerRow < bytesInLastRow) { return false; @@ -213,15 +263,21 @@ function validateBytesPerRow({ bytesPerRow, bytesInLastRow, sizeInBlocks }) { // If heightInBlocks > 1, layout.bytesPerRow must be specified. // If copyExtent.depthOrArrayLayers > 1, layout.bytesPerRow and layout.rowsPerImage must be specified. if ( - bytesPerRow === undefined && - (sizeInBlocks.height > 1 || sizeInBlocks.depthOrArrayLayers > 1) - ) { + bytesPerRow === undefined && ( + sizeInBlocks.height > 1 || sizeInBlocks.depthOrArrayLayers > 1)) + { return false; } return true; } -function validateRowsPerImage({ rowsPerImage, sizeInBlocks }) { +function validateRowsPerImage({ + rowsPerImage, + sizeInBlocks + + + +}) { // If specified, layout.rowsPerImage must be greater than or equal to heightInBlocks. if (rowsPerImage !== undefined && rowsPerImage < sizeInBlocks.height) { return false; @@ -233,6 +289,13 @@ function validateRowsPerImage({ rowsPerImage, sizeInBlocks }) { return true; } + + + + + + + /** * Validate a copy and compute the number of bytes it needs. Throws if the copy is invalid. */ @@ -248,7 +311,12 @@ export function dataBytesForCopyOrFail(args) { * if the copy parameters turn out to be invalid. This hopes to avoid "buffer too small" validation * errors when attempting to test other validation errors. */ -export function dataBytesForCopyOrOverestimate({ layout, format, copySize: copySize_, method }) { +export function dataBytesForCopyOrOverestimate({ + layout, + format, + copySize: copySize_, + method +}) { const copyExtent = reifyExtent3D(copySize_); const info = kTextureFormatInfo[format]; @@ -257,7 +325,7 @@ export function dataBytesForCopyOrOverestimate({ layout, format, copySize: copyS const sizeInBlocks = { width: copyExtent.width / info.blockWidth, height: copyExtent.height / info.blockHeight, - depthOrArrayLayers: copyExtent.depthOrArrayLayers, + depthOrArrayLayers: copyExtent.depthOrArrayLayers }; const bytesInLastRow = sizeInBlocks.width * info.bytesPerBlock; @@ -300,4 +368,4 @@ export function dataBytesForCopyOrOverestimate({ layout, format, copySize: copyS } return { minDataSizeOrOverestimate: offset + requiredBytesInCopy, copyValid: valid }; -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/subresource.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/subresource.js index db9f637d448..c6f95632623 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/subresource.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/subresource.js @@ -1,6 +1,14 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** A range of indices expressed as `{ begin, count }`. */ + + + +/* A range of indices, expressed as `{ begin, end }`. */ + + + + function endOfRange(r) { return 'count' in r ? r.begin + r.count : r.end; @@ -17,14 +25,20 @@ function* rangeAsIterator(r) { * a min/max mip level and min/max array layer. */ export class SubresourceRange { - constructor(subresources) { + + + + constructor(subresources) + + + { this.mipRange = { begin: subresources.mipRange.begin, - end: endOfRange(subresources.mipRange), + end: endOfRange(subresources.mipRange) }; this.layerRange = { begin: subresources.layerRange.begin, - end: endOfRange(subresources.layerRange), + end: endOfRange(subresources.layerRange) }; } @@ -47,8 +61,8 @@ export class SubresourceRange { for (let level = this.mipRange.begin; level < this.mipRange.end; ++level) { yield { level, - layers: rangeAsIterator(this.layerRange), + layers: rangeAsIterator(this.layerRange) }; } } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.js index 5896d594bc1..602d642724f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from '../../../common/util/util.js'; -import { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, unreachable } from '../../../common/util/util.js';import { assertInIntegerRange, float32ToFloatBits, float32ToFloat16Bits, @@ -19,21 +18,42 @@ import { numberToFloat32Bits, float32BitsToNumber, numberToFloatBits, - ufloatM9E5BitsToNumber, -} from '../conversion.js'; + ufloatM9E5BitsToNumber } from +'../conversion.js'; import { clamp, signExtend } from '../math.js'; /** A component of a texture format: R, G, B, A, Depth, or Stencil. */ -export let TexelComponent; +export let TexelComponent = /*#__PURE__*/function (TexelComponent) {TexelComponent["R"] = "R";TexelComponent["G"] = "G";TexelComponent["B"] = "B";TexelComponent["A"] = "A";TexelComponent["Depth"] = "Depth";TexelComponent["Stencil"] = "Stencil";return TexelComponent;}({}); + + + + + + + + +/** Arbitrary data, per component of a texel format. */ + + +/** How a component is encoded in its bit range of a texel format. */ + + +/** + * Maps component values to component values + * @param {PerTexelComponent} components - The input components. + * @returns {PerTexelComponent} The new output components. + */ + + +/** + * Packs component values as an ArrayBuffer + * @param {PerTexelComponent} components - The input components. + * @returns {ArrayBuffer} The packed data. + */ + + +/** Unpacks component values from a Uint8Array */ -/** Arbitrary data, per component of a texel format. */ (function (TexelComponent) { - TexelComponent['R'] = 'R'; - TexelComponent['G'] = 'G'; - TexelComponent['B'] = 'B'; - TexelComponent['A'] = 'A'; - TexelComponent['Depth'] = 'Depth'; - TexelComponent['Stencil'] = 'Stencil'; -})(TexelComponent || (TexelComponent = {})); /** * Create a PerTexelComponent object filled with the same value for all components. @@ -58,7 +78,7 @@ function makePerTexelComponent(components, value) { * `fn` to each of component of `components`. */ function applyEach(fn, components) { - return values => { + return (values) => { values = Object.assign({}, values); for (const c of components) { assert(values[c] !== undefined); @@ -73,12 +93,11 @@ function applyEach(fn, components) { * @param {PerTexelComponent} components - The input component values. * @returns {TexelComponent} Gamma-compressed copy of `components`. */ -const encodeSRGB = components => { +const encodeSRGB = (components) => { assert( components.R !== undefined && components.G !== undefined && components.B !== undefined, 'sRGB requires all of R, G, and B components' ); - return applyEach(gammaCompress, kRGB)(components); }; @@ -87,13 +106,12 @@ const encodeSRGB = components => { * @param {PerTexelComponent} components - The input component values. * @returns {TexelComponent} Gamma-decompressed copy of `components`. */ -const decodeSRGB = components => { +const decodeSRGB = (components) => { components = Object.assign({}, components); assert( components.R !== undefined && components.G !== undefined && components.B !== undefined, 'sRGB requires all of R, G, and B components' ); - return applyEach(gammaDecompress, kRGB)(components); }; @@ -103,7 +121,7 @@ const decodeSRGB = components => { export function makeClampToRange(format) { const repr = kTexelRepresentationInfo[format]; assert(repr.numericRange !== null, 'Format has unknown numericRange'); - return applyEach(x => clamp(x, repr.numericRange), repr.componentOrder); + return applyEach((x) => clamp(x, repr.numericRange), repr.componentOrder); } // MAINTENANCE_TODO: Look into exposing this map to the test fixture so that it can be GCed at the @@ -136,7 +154,12 @@ function getComponentDataView(byteLength) { * Otherwise, this is a dictionary of per-component data types. * @returns {ArrayBuffer} The packed component data. */ -function packComponents(componentOrder, components, bitLengths, componentDataTypes) { +function packComponents( +componentOrder, +components, +bitLengths, +componentDataTypes) +{ let bitLengthMap; let totalBitLength; if (typeof bitLengths === 'number') { @@ -152,9 +175,9 @@ function packComponents(componentOrder, components, bitLengths, componentDataTyp assert(totalBitLength % 8 === 0); const componentDataTypeMap = - typeof componentDataTypes === 'string' || componentDataTypes === null - ? makePerTexelComponent(componentOrder, componentDataTypes) - : componentDataTypes; + typeof componentDataTypes === 'string' || componentDataTypes === null ? + makePerTexelComponent(componentOrder, componentDataTypes) : + componentDataTypes; const dataView = getComponentDataView(totalBitLength / 8); let bitOffset = 0; @@ -189,21 +212,21 @@ function packComponents(componentOrder, components, bitLengths, componentDataTyp // Packed representations are all 32-bit and use Uint as the data type. // ex.) rg10b11float, rgb10a2unorm switch (dataView.byteLength) { - case 4: { - const currentValue = dataView.getUint32(0, true); + case 4:{ + const currentValue = dataView.getUint32(0, true); - let mask = 0xffffffff; - const bitsToClearRight = bitOffset; - const bitsToClearLeft = 32 - (bitLength + bitOffset); + let mask = 0xffffffff; + const bitsToClearRight = bitOffset; + const bitsToClearLeft = 32 - (bitLength + bitOffset); - mask = (mask >>> bitsToClearRight) << bitsToClearRight; - mask = (mask << bitsToClearLeft) >>> bitsToClearLeft; + mask = mask >>> bitsToClearRight << bitsToClearRight; + mask = mask << bitsToClearLeft >>> bitsToClearLeft; - const newValue = (currentValue & ~mask) | (value << bitOffset); + const newValue = currentValue & ~mask | value << bitOffset; - dataView.setUint32(0, newValue, true); - break; - } + dataView.setUint32(0, newValue, true); + break; + } default: unreachable(); } @@ -225,7 +248,6 @@ function packComponents(componentOrder, components, bitLengths, componentDataTyp default: unreachable(); } - break; case 'float': assert(byteOffset === bitOffset / 8 && byteLength === bitLength / 8); @@ -236,7 +258,6 @@ function packComponents(componentOrder, components, bitLengths, componentDataTyp default: unreachable(); } - break; case 'ufloat': case null: @@ -252,7 +273,11 @@ function packComponents(componentOrder, components, bitLengths, componentDataTyp /** * Unpack substrings of bits from a Uint8Array, e.g. [8,8,8,8] or [9,9,9,5]. */ -function unpackComponentsBits(componentOrder, byteView, bitLengths) { +function unpackComponentsBits( +componentOrder, +byteView, +bitLengths) +{ const components = makePerTexelComponent(componentOrder, 0); let bitLengthMap; @@ -266,20 +291,20 @@ function unpackComponentsBits(componentOrder, byteView, bitLengths) { components[c] = byteView[index++]; } return components; - case 16: { - const shortView = new Uint16Array(byteView.buffer, byteView.byteOffset); - for (const c of componentOrder) { - components[c] = shortView[index++]; + case 16:{ + const shortView = new Uint16Array(byteView.buffer, byteView.byteOffset); + for (const c of componentOrder) { + components[c] = shortView[index++]; + } + return components; } - return components; - } - case 32: { - const longView = new Uint32Array(byteView.buffer, byteView.byteOffset); - for (const c of componentOrder) { - components[c] = longView[index++]; + case 32:{ + const longView = new Uint32Array(byteView.buffer, byteView.byteOffset); + for (const c of componentOrder) { + components[c] = longView[index++]; + } + return components; } - return components; - } } bitLengthMap = makePerTexelComponent(componentOrder, bitLengths); @@ -323,7 +348,7 @@ function unpackComponentsBits(componentOrder, byteView, bitLengths) { // ex.) rg10b11float, rgb10a2unorm assert(dataView.byteLength === 4); const word = dataView.getUint32(0, true); - value = (word >>> bitOffset) & ((1 << bitLength) - 1); + value = word >>> bitOffset & (1 << bitLength) - 1; } bitOffset += bitLength; @@ -340,31 +365,33 @@ function unpackComponentsBits(componentOrder, byteView, bitLengths) { * @param {number} bitLength - The number of bits in each component. * @param {{signed: boolean; sRGB: boolean}} opt - Boolean flags for `signed` and `sRGB`. */ -function makeNormalizedInfo(componentOrder, bitLength, opt) { +function makeNormalizedInfo( +componentOrder, +bitLength, +opt) +{ const encodeNonSRGB = applyEach( - n => floatAsNormalizedInteger(n, bitLength, opt.signed), + (n) => floatAsNormalizedInteger(n, bitLength, opt.signed), componentOrder ); - const decodeNonSRGB = applyEach( - n => normalizedIntegerAsFloat(n, bitLength, opt.signed), + (n) => normalizedIntegerAsFloat(n, bitLength, opt.signed), componentOrder ); const numberToBitsNonSRGB = applyEach( - n => floatAsNormalizedInteger(n, bitLength, opt.signed), + (n) => floatAsNormalizedInteger(n, bitLength, opt.signed), componentOrder ); - let bitsToNumberNonSRGB; if (opt.signed) { bitsToNumberNonSRGB = applyEach( - n => normalizedIntegerAsFloat(signExtend(n, bitLength), bitLength, opt.signed), + (n) => normalizedIntegerAsFloat(signExtend(n, bitLength), bitLength, opt.signed), componentOrder ); } else { bitsToNumberNonSRGB = applyEach( - n => normalizedIntegerAsFloat(n, bitLength, opt.signed), + (n) => normalizedIntegerAsFloat(n, bitLength, opt.signed), componentOrder ); } @@ -374,10 +401,10 @@ function makeNormalizedInfo(componentOrder, bitLength, opt) { let numberToBits; let bitsToNumber; if (opt.sRGB) { - encode = components => encodeNonSRGB(encodeSRGB(components)); - decode = components => decodeSRGB(decodeNonSRGB(components)); - numberToBits = components => numberToBitsNonSRGB(encodeSRGB(components)); - bitsToNumber = components => decodeSRGB(bitsToNumberNonSRGB(components)); + encode = (components) => encodeNonSRGB(encodeSRGB(components)); + decode = (components) => decodeSRGB(decodeNonSRGB(components)); + numberToBits = (components) => numberToBitsNonSRGB(encodeSRGB(components)); + bitsToNumber = (components) => decodeSRGB(bitsToNumberNonSRGB(components)); } else { encode = encodeNonSRGB; decode = decodeNonSRGB; @@ -387,13 +414,13 @@ function makeNormalizedInfo(componentOrder, bitLength, opt) { let bitsToULPFromZero; if (opt.signed) { - const maxValue = (1 << (bitLength - 1)) - 1; // e.g. 127 for snorm8 + const maxValue = (1 << bitLength - 1) - 1; // e.g. 127 for snorm8 bitsToULPFromZero = applyEach( - n => Math.max(-maxValue, signExtend(n, bitLength)), + (n) => Math.max(-maxValue, signExtend(n, bitLength)), componentOrder ); } else { - bitsToULPFromZero = components => components; + bitsToULPFromZero = (components) => components; } const dataType = opt.signed ? 'snorm' : 'unorm'; @@ -401,16 +428,17 @@ function makeNormalizedInfo(componentOrder, bitLength, opt) { componentOrder, componentInfo: makePerTexelComponent(componentOrder, { dataType, - bitLength, + bitLength }), encode, decode, - pack: components => packComponents(componentOrder, components, bitLength, dataType), - unpackBits: data => unpackComponentsBits(componentOrder, data, bitLength), + pack: (components) => + packComponents(componentOrder, components, bitLength, dataType), + unpackBits: (data) => unpackComponentsBits(componentOrder, data, bitLength), numberToBits, bitsToNumber, bitsToULPFromZero, - numericRange: { min: opt.signed ? -1 : 0, max: 1 }, + numericRange: { min: opt.signed ? -1 : 0, max: 1 } }; } @@ -420,33 +448,35 @@ function makeNormalizedInfo(componentOrder, bitLength, opt) { * @param {number} bitLength - The number of bits in each component. * @param {{signed: boolean}} opt - Boolean flag for `signed`. */ -function makeIntegerInfo(componentOrder, bitLength, opt) { +function makeIntegerInfo( +componentOrder, +bitLength, +opt) +{ assert(bitLength <= 32); - const numericRange = opt.signed - ? { min: -(2 ** (bitLength - 1)), max: 2 ** (bitLength - 1) - 1 } - : { min: 0, max: 2 ** bitLength - 1 }; + const numericRange = opt.signed ? + { min: -(2 ** (bitLength - 1)), max: 2 ** (bitLength - 1) - 1 } : + { min: 0, max: 2 ** bitLength - 1 }; const maxUnsignedValue = 2 ** bitLength; const encode = applyEach( - n => (assertInIntegerRange(n, bitLength, opt.signed), n), + (n) => (assertInIntegerRange(n, bitLength, opt.signed), n), componentOrder ); - const decode = applyEach( - n => (assertInIntegerRange(n, bitLength, opt.signed), n), + (n) => (assertInIntegerRange(n, bitLength, opt.signed), n), componentOrder ); - - const bitsToNumber = applyEach(n => { - const decodedN = opt.signed ? (n > numericRange.max ? n - maxUnsignedValue : n) : n; + const bitsToNumber = applyEach((n) => { + const decodedN = opt.signed ? n > numericRange.max ? n - maxUnsignedValue : n : n; assertInIntegerRange(decodedN, bitLength, opt.signed); return decodedN; }, componentOrder); let bitsToULPFromZero; if (opt.signed) { - bitsToULPFromZero = applyEach(n => signExtend(n, bitLength), componentOrder); + bitsToULPFromZero = applyEach((n) => signExtend(n, bitLength), componentOrder); } else { - bitsToULPFromZero = components => components; + bitsToULPFromZero = (components) => components; } const dataType = opt.signed ? 'sint' : 'uint'; @@ -455,16 +485,17 @@ function makeIntegerInfo(componentOrder, bitLength, opt) { componentOrder, componentInfo: makePerTexelComponent(componentOrder, { dataType, - bitLength, + bitLength }), encode, decode, - pack: components => packComponents(componentOrder, components, bitLength, dataType), - unpackBits: data => unpackComponentsBits(componentOrder, data, bitLength), - numberToBits: applyEach(v => v & bitMask, componentOrder), + pack: (components) => + packComponents(componentOrder, components, bitLength, dataType), + unpackBits: (data) => unpackComponentsBits(componentOrder, data, bitLength), + numberToBits: applyEach((v) => v & bitMask, componentOrder), bitsToNumber, bitsToULPFromZero, - numericRange, + numericRange }; } @@ -474,7 +505,11 @@ function makeIntegerInfo(componentOrder, bitLength, opt) { * @param {TexelComponent[]} componentOrder - The order of the component data. * @param {number} bitLength - The number of bits in each component. */ -function makeFloatInfo(componentOrder, bitLength, { restrictedDepth = false } = {}) { +function makeFloatInfo( +componentOrder, +bitLength, +{ restrictedDepth = false } = {}) +{ let encode; let numberToBits; let bitsToNumber; @@ -482,53 +517,50 @@ function makeFloatInfo(componentOrder, bitLength, { restrictedDepth = false } = switch (bitLength) { case 32: if (restrictedDepth) { - encode = applyEach(v => { + encode = applyEach((v) => { assert(v >= 0.0 && v <= 1.0, 'depth out of range'); return new Float32Array([v])[0]; }, componentOrder); } else { - encode = applyEach(v => new Float32Array([v])[0], componentOrder); + encode = applyEach((v) => new Float32Array([v])[0], componentOrder); } numberToBits = applyEach(numberToFloat32Bits, componentOrder); bitsToNumber = applyEach(float32BitsToNumber, componentOrder); bitsToULPFromZero = applyEach( - v => floatBitsToNormalULPFromZero(v, kFloat32Format), + (v) => floatBitsToNormalULPFromZero(v, kFloat32Format), componentOrder ); - break; case 16: if (restrictedDepth) { - encode = applyEach(v => { + encode = applyEach((v) => { assert(v >= 0.0 && v <= 1.0, 'depth out of range'); return float16BitsToFloat32(float32ToFloat16Bits(v)); }, componentOrder); } else { - encode = applyEach(v => float16BitsToFloat32(float32ToFloat16Bits(v)), componentOrder); + encode = applyEach((v) => float16BitsToFloat32(float32ToFloat16Bits(v)), componentOrder); } numberToBits = applyEach(float32ToFloat16Bits, componentOrder); bitsToNumber = applyEach(float16BitsToFloat32, componentOrder); bitsToULPFromZero = applyEach( - v => floatBitsToNormalULPFromZero(v, kFloat16Format), + (v) => floatBitsToNormalULPFromZero(v, kFloat16Format), componentOrder ); - break; default: unreachable(); } - const decode = applyEach(identity, componentOrder); return { componentOrder, componentInfo: makePerTexelComponent(componentOrder, { dataType: 'float', - bitLength, + bitLength }), encode, decode, - pack: components => { + pack: (components) => { switch (bitLength) { case 16: components = applyEach(float32ToFloat16Bits, componentOrder)(components); @@ -539,13 +571,13 @@ function makeFloatInfo(componentOrder, bitLength, { restrictedDepth = false } = unreachable(); } }, - unpackBits: data => unpackComponentsBits(componentOrder, data, bitLength), + unpackBits: (data) => unpackComponentsBits(componentOrder, data, bitLength), numberToBits, bitsToNumber, bitsToULPFromZero, - numericRange: restrictedDepth - ? { min: 0, max: 1 } - : { min: Number.NEGATIVE_INFINITY, max: Number.POSITIVE_INFINITY }, + numericRange: restrictedDepth ? + { min: 0, max: 1 } : + { min: Number.NEGATIVE_INFINITY, max: Number.POSITIVE_INFINITY } }; } @@ -555,46 +587,79 @@ const kRGB = [TexelComponent.R, TexelComponent.G, TexelComponent.B]; const kRGBA = [TexelComponent.R, TexelComponent.G, TexelComponent.B, TexelComponent.A]; const kBGRA = [TexelComponent.B, TexelComponent.G, TexelComponent.R, TexelComponent.A]; -const identity = n => n; +const identity = (n) => n; const kFloat11Format = { signed: 0, exponentBits: 5, mantissaBits: 6, bias: 15 }; const kFloat10Format = { signed: 0, exponentBits: 5, mantissaBits: 5, bias: 15 }; -export const kTexelRepresentationInfo = { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +export const kTexelRepresentationInfo = + +{ ...{ - r8unorm: makeNormalizedInfo(kR, 8, { signed: false, sRGB: false }), - r8snorm: makeNormalizedInfo(kR, 8, { signed: true, sRGB: false }), - r8uint: makeIntegerInfo(kR, 8, { signed: false }), - r8sint: makeIntegerInfo(kR, 8, { signed: true }), - r16uint: makeIntegerInfo(kR, 16, { signed: false }), - r16sint: makeIntegerInfo(kR, 16, { signed: true }), - r16float: makeFloatInfo(kR, 16), - rg8unorm: makeNormalizedInfo(kRG, 8, { signed: false, sRGB: false }), - rg8snorm: makeNormalizedInfo(kRG, 8, { signed: true, sRGB: false }), - rg8uint: makeIntegerInfo(kRG, 8, { signed: false }), - rg8sint: makeIntegerInfo(kRG, 8, { signed: true }), - r32uint: makeIntegerInfo(kR, 32, { signed: false }), - r32sint: makeIntegerInfo(kR, 32, { signed: true }), - r32float: makeFloatInfo(kR, 32), - rg16uint: makeIntegerInfo(kRG, 16, { signed: false }), - rg16sint: makeIntegerInfo(kRG, 16, { signed: true }), - rg16float: makeFloatInfo(kRG, 16), - rgba8unorm: makeNormalizedInfo(kRGBA, 8, { signed: false, sRGB: false }), + 'r8unorm': makeNormalizedInfo(kR, 8, { signed: false, sRGB: false }), + 'r8snorm': makeNormalizedInfo(kR, 8, { signed: true, sRGB: false }), + 'r8uint': makeIntegerInfo(kR, 8, { signed: false }), + 'r8sint': makeIntegerInfo(kR, 8, { signed: true }), + 'r16uint': makeIntegerInfo(kR, 16, { signed: false }), + 'r16sint': makeIntegerInfo(kR, 16, { signed: true }), + 'r16float': makeFloatInfo(kR, 16), + 'rg8unorm': makeNormalizedInfo(kRG, 8, { signed: false, sRGB: false }), + 'rg8snorm': makeNormalizedInfo(kRG, 8, { signed: true, sRGB: false }), + 'rg8uint': makeIntegerInfo(kRG, 8, { signed: false }), + 'rg8sint': makeIntegerInfo(kRG, 8, { signed: true }), + 'r32uint': makeIntegerInfo(kR, 32, { signed: false }), + 'r32sint': makeIntegerInfo(kR, 32, { signed: true }), + 'r32float': makeFloatInfo(kR, 32), + 'rg16uint': makeIntegerInfo(kRG, 16, { signed: false }), + 'rg16sint': makeIntegerInfo(kRG, 16, { signed: true }), + 'rg16float': makeFloatInfo(kRG, 16), + 'rgba8unorm': makeNormalizedInfo(kRGBA, 8, { signed: false, sRGB: false }), 'rgba8unorm-srgb': makeNormalizedInfo(kRGBA, 8, { signed: false, sRGB: true }), - rgba8snorm: makeNormalizedInfo(kRGBA, 8, { signed: true, sRGB: false }), - rgba8uint: makeIntegerInfo(kRGBA, 8, { signed: false }), - rgba8sint: makeIntegerInfo(kRGBA, 8, { signed: true }), - bgra8unorm: makeNormalizedInfo(kBGRA, 8, { signed: false, sRGB: false }), + 'rgba8snorm': makeNormalizedInfo(kRGBA, 8, { signed: true, sRGB: false }), + 'rgba8uint': makeIntegerInfo(kRGBA, 8, { signed: false }), + 'rgba8sint': makeIntegerInfo(kRGBA, 8, { signed: true }), + 'bgra8unorm': makeNormalizedInfo(kBGRA, 8, { signed: false, sRGB: false }), 'bgra8unorm-srgb': makeNormalizedInfo(kBGRA, 8, { signed: false, sRGB: true }), - rg32uint: makeIntegerInfo(kRG, 32, { signed: false }), - rg32sint: makeIntegerInfo(kRG, 32, { signed: true }), - rg32float: makeFloatInfo(kRG, 32), - rgba16uint: makeIntegerInfo(kRGBA, 16, { signed: false }), - rgba16sint: makeIntegerInfo(kRGBA, 16, { signed: true }), - rgba16float: makeFloatInfo(kRGBA, 16), - rgba32uint: makeIntegerInfo(kRGBA, 32, { signed: false }), - rgba32sint: makeIntegerInfo(kRGBA, 32, { signed: true }), - rgba32float: makeFloatInfo(kRGBA, 32), + 'rg32uint': makeIntegerInfo(kRG, 32, { signed: false }), + 'rg32sint': makeIntegerInfo(kRG, 32, { signed: true }), + 'rg32float': makeFloatInfo(kRG, 32), + 'rgba16uint': makeIntegerInfo(kRGBA, 16, { signed: false }), + 'rgba16sint': makeIntegerInfo(kRGBA, 16, { signed: true }), + 'rgba16float': makeFloatInfo(kRGBA, 16), + 'rgba32uint': makeIntegerInfo(kRGBA, 32, { signed: false }), + 'rgba32sint': makeIntegerInfo(kRGBA, 32, { signed: true }), + 'rgba32float': makeFloatInfo(kRGBA, 32) }, ...{ rgb10a2uint: { @@ -603,51 +668,51 @@ export const kTexelRepresentationInfo = { R: { dataType: 'uint', bitLength: 10 }, G: { dataType: 'uint', bitLength: 10 }, B: { dataType: 'uint', bitLength: 10 }, - A: { dataType: 'uint', bitLength: 2 }, + A: { dataType: 'uint', bitLength: 2 } }, - encode: components => { + encode: (components) => { assertInIntegerRange(components.R, 10, false); assertInIntegerRange(components.G, 10, false); assertInIntegerRange(components.B, 10, false); assertInIntegerRange(components.A, 2, false); return components; }, - decode: components => { + decode: (components) => { assertInIntegerRange(components.R, 10, false); assertInIntegerRange(components.G, 10, false); assertInIntegerRange(components.B, 10, false); assertInIntegerRange(components.A, 2, false); return components; }, - pack: components => - packComponents( - kRGBA, - components, - { - R: 10, - G: 10, - B: 10, - A: 2, - }, - 'uint' - ), - - unpackBits: data => unpackComponentsBits(kRGBA, data, { R: 10, G: 10, B: 10, A: 2 }), - numberToBits: components => ({ + pack: (components) => + packComponents( + kRGBA, + components, + { + R: 10, + G: 10, + B: 10, + A: 2 + }, + 'uint' + ), + unpackBits: (data) => + unpackComponentsBits(kRGBA, data, { R: 10, G: 10, B: 10, A: 2 }), + numberToBits: (components) => ({ R: components.R & 0x3ff, G: components.G & 0x3ff, B: components.B & 0x3ff, - A: components.A & 0x3, + A: components.A & 0x3 }), - bitsToNumber: components => { + bitsToNumber: (components) => { assertInIntegerRange(components.R, 10, false); assertInIntegerRange(components.G, 10, false); assertInIntegerRange(components.B, 10, false); assertInIntegerRange(components.A, 2, false); return components; }, - bitsToULPFromZero: components => components, - numericRange: null, + bitsToULPFromZero: (components) => components, + numericRange: null }, rgb10a2unorm: { componentOrder: kRGBA, @@ -655,52 +720,52 @@ export const kTexelRepresentationInfo = { R: { dataType: 'unorm', bitLength: 10 }, G: { dataType: 'unorm', bitLength: 10 }, B: { dataType: 'unorm', bitLength: 10 }, - A: { dataType: 'unorm', bitLength: 2 }, + A: { dataType: 'unorm', bitLength: 2 } }, - encode: components => { + encode: (components) => { return { R: floatAsNormalizedInteger(components.R ?? unreachable(), 10, false), G: floatAsNormalizedInteger(components.G ?? unreachable(), 10, false), B: floatAsNormalizedInteger(components.B ?? unreachable(), 10, false), - A: floatAsNormalizedInteger(components.A ?? unreachable(), 2, false), + A: floatAsNormalizedInteger(components.A ?? unreachable(), 2, false) }; }, - decode: components => { + decode: (components) => { return { R: normalizedIntegerAsFloat(components.R ?? unreachable(), 10, false), G: normalizedIntegerAsFloat(components.G ?? unreachable(), 10, false), B: normalizedIntegerAsFloat(components.B ?? unreachable(), 10, false), - A: normalizedIntegerAsFloat(components.A ?? unreachable(), 2, false), + A: normalizedIntegerAsFloat(components.A ?? unreachable(), 2, false) }; }, - pack: components => - packComponents( - kRGBA, - components, - { - R: 10, - G: 10, - B: 10, - A: 2, - }, - 'uint' - ), - - unpackBits: data => unpackComponentsBits(kRGBA, data, { R: 10, G: 10, B: 10, A: 2 }), - numberToBits: components => ({ + pack: (components) => + packComponents( + kRGBA, + components, + { + R: 10, + G: 10, + B: 10, + A: 2 + }, + 'uint' + ), + unpackBits: (data) => + unpackComponentsBits(kRGBA, data, { R: 10, G: 10, B: 10, A: 2 }), + numberToBits: (components) => ({ R: floatAsNormalizedInteger(components.R ?? unreachable(), 10, false), G: floatAsNormalizedInteger(components.G ?? unreachable(), 10, false), B: floatAsNormalizedInteger(components.B ?? unreachable(), 10, false), - A: floatAsNormalizedInteger(components.A ?? unreachable(), 2, false), + A: floatAsNormalizedInteger(components.A ?? unreachable(), 2, false) }), - bitsToNumber: components => ({ + bitsToNumber: (components) => ({ R: normalizedIntegerAsFloat(components.R, 10, false), G: normalizedIntegerAsFloat(components.G, 10, false), B: normalizedIntegerAsFloat(components.B, 10, false), - A: normalizedIntegerAsFloat(components.A, 2, false), + A: normalizedIntegerAsFloat(components.A, 2, false) }), - bitsToULPFromZero: components => components, - numericRange: { min: 0, max: 1 }, + bitsToULPFromZero: (components) => components, + numericRange: { min: 0, max: 1 } }, rg11b10ufloat: { componentOrder: kRGB, @@ -709,13 +774,13 @@ export const kTexelRepresentationInfo = { componentInfo: { R: { dataType: 'ufloat', bitLength: 11 }, G: { dataType: 'ufloat', bitLength: 11 }, - B: { dataType: 'ufloat', bitLength: 10 }, + B: { dataType: 'ufloat', bitLength: 10 } }, - pack: components => { + pack: (components) => { const componentsBits = { R: float32ToFloatBits(components.R ?? unreachable(), 0, 5, 6, 15), G: float32ToFloatBits(components.G ?? unreachable(), 0, 5, 6, 15), - B: float32ToFloatBits(components.B ?? unreachable(), 0, 5, 5, 15), + B: float32ToFloatBits(components.B ?? unreachable(), 0, 5, 5, 15) }; return packComponents( kRGB, @@ -723,73 +788,73 @@ export const kTexelRepresentationInfo = { { R: 11, G: 11, - B: 10, + B: 10 }, 'uint' ); }, - unpackBits: data => unpackComponentsBits(kRGB, data, { R: 11, G: 11, B: 10 }), - numberToBits: components => ({ + unpackBits: (data) => unpackComponentsBits(kRGB, data, { R: 11, G: 11, B: 10 }), + numberToBits: (components) => ({ R: numberToFloatBits(components.R ?? unreachable(), kFloat11Format), G: numberToFloatBits(components.G ?? unreachable(), kFloat11Format), - B: numberToFloatBits(components.B ?? unreachable(), kFloat10Format), + B: numberToFloatBits(components.B ?? unreachable(), kFloat10Format) }), - bitsToNumber: components => ({ + bitsToNumber: (components) => ({ R: floatBitsToNumber(components.R, kFloat11Format), G: floatBitsToNumber(components.G, kFloat11Format), - B: floatBitsToNumber(components.B, kFloat10Format), + B: floatBitsToNumber(components.B, kFloat10Format) }), - bitsToULPFromZero: components => ({ + bitsToULPFromZero: (components) => ({ R: floatBitsToNormalULPFromZero(components.R, kFloat11Format), G: floatBitsToNormalULPFromZero(components.G, kFloat11Format), - B: floatBitsToNormalULPFromZero(components.B, kFloat10Format), + B: floatBitsToNormalULPFromZero(components.B, kFloat10Format) }), - numericRange: { min: 0, max: Number.POSITIVE_INFINITY }, + numericRange: { min: 0, max: Number.POSITIVE_INFINITY } }, rgb9e5ufloat: { componentOrder: kRGB, componentInfo: makePerTexelComponent(kRGB, { dataType: 'ufloat', - bitLength: -1, // Components don't really have a bitLength since the format is packed. + bitLength: -1 // Components don't really have a bitLength since the format is packed. }), encode: applyEach(identity, kRGB), decode: applyEach(identity, kRGB), - pack: components => - new Uint32Array([ - packRGB9E5UFloat( - components.R ?? unreachable(), - components.G ?? unreachable(), - components.B ?? unreachable() - ), - ]).buffer, - unpackBits: data => { - const encoded = (data[3] << 24) | (data[2] << 16) | (data[1] << 8) | data[0]; - const redMantissa = (encoded >>> 0) & 0b111111111; - const greenMantissa = (encoded >>> 9) & 0b111111111; - const blueMantissa = (encoded >>> 18) & 0b111111111; - const exponentSharedBits = ((encoded >>> 27) & 0b11111) << 9; + pack: (components) => + new Uint32Array([ + packRGB9E5UFloat( + components.R ?? unreachable(), + components.G ?? unreachable(), + components.B ?? unreachable() + )] + ).buffer, + unpackBits: (data) => { + const encoded = data[3] << 24 | data[2] << 16 | data[1] << 8 | data[0]; + const redMantissa = encoded >>> 0 & 0b111111111; + const greenMantissa = encoded >>> 9 & 0b111111111; + const blueMantissa = encoded >>> 18 & 0b111111111; + const exponentSharedBits = (encoded >>> 27 & 0b11111) << 9; return { R: exponentSharedBits | redMantissa, G: exponentSharedBits | greenMantissa, - B: exponentSharedBits | blueMantissa, + B: exponentSharedBits | blueMantissa }; }, - numberToBits: components => ({ + numberToBits: (components) => ({ R: float32ToFloatBits(components.R ?? unreachable(), 0, 5, 9, 15), G: float32ToFloatBits(components.G ?? unreachable(), 0, 5, 9, 15), - B: float32ToFloatBits(components.B ?? unreachable(), 0, 5, 9, 15), + B: float32ToFloatBits(components.B ?? unreachable(), 0, 5, 9, 15) }), - bitsToNumber: components => ({ + bitsToNumber: (components) => ({ R: ufloatM9E5BitsToNumber(components.R, kUFloat9e5Format), G: ufloatM9E5BitsToNumber(components.G, kUFloat9e5Format), - B: ufloatM9E5BitsToNumber(components.B, kUFloat9e5Format), + B: ufloatM9E5BitsToNumber(components.B, kUFloat9e5Format) }), - bitsToULPFromZero: components => ({ + bitsToULPFromZero: (components) => ({ R: floatBitsToNormalULPFromZero(components.R, kUFloat9e5Format), G: floatBitsToNormalULPFromZero(components.G, kUFloat9e5Format), - B: floatBitsToNormalULPFromZero(components.B, kUFloat9e5Format), + B: floatBitsToNormalULPFromZero(components.B, kUFloat9e5Format) }), - numericRange: { min: 0, max: Number.POSITIVE_INFINITY }, + numericRange: { min: 0, max: Number.POSITIVE_INFINITY } }, depth32float: makeFloatInfo([TexelComponent.Depth], 32, { restrictedDepth: true }), depth16unorm: makeNormalizedInfo([TexelComponent.Depth], 16, { signed: false, sRGB: false }), @@ -803,7 +868,7 @@ export const kTexelRepresentationInfo = { numberToBits: () => unreachable('depth24plus has no representation'), bitsToNumber: () => unreachable('depth24plus has no representation'), bitsToULPFromZero: () => unreachable('depth24plus has no representation'), - numericRange: { min: 0, max: 1 }, + numericRange: { min: 0, max: 1 } }, stencil8: makeIntegerInfo([TexelComponent.Stencil], 8, { signed: false }), 'depth32float-stencil8': { @@ -811,19 +876,19 @@ export const kTexelRepresentationInfo = { componentInfo: { Depth: { dataType: 'float', - bitLength: 32, + bitLength: 32 }, Stencil: { dataType: 'uint', - bitLength: 8, - }, + bitLength: 8 + } }, - encode: components => { + encode: (components) => { assert(components.Stencil !== undefined); assertInIntegerRange(components.Stencil, 8, false); return components; }, - decode: components => { + decode: (components) => { assert(components.Stencil !== undefined); assertInIntegerRange(components.Stencil, 8, false); return components; @@ -833,27 +898,27 @@ export const kTexelRepresentationInfo = { numberToBits: () => unreachable('not implemented'), bitsToNumber: () => unreachable('not implemented'), bitsToULPFromZero: () => unreachable('not implemented'), - numericRange: null, + numericRange: null }, 'depth24plus-stencil8': { componentOrder: [TexelComponent.Depth, TexelComponent.Stencil], componentInfo: { Depth: { dataType: null, - bitLength: 24, + bitLength: 24 }, Stencil: { dataType: 'uint', - bitLength: 8, - }, + bitLength: 8 + } }, - encode: components => { + encode: (components) => { assert(components.Depth === undefined, 'depth24plus cannot be encoded'); assert(components.Stencil !== undefined); assertInIntegerRange(components.Stencil, 8, false); return components; }, - decode: components => { + decode: (components) => { assert(components.Depth === undefined, 'depth24plus cannot be decoded'); assert(components.Stencil !== undefined); assertInIntegerRange(components.Stencil, 8, false); @@ -864,9 +929,9 @@ export const kTexelRepresentationInfo = { numberToBits: () => unreachable('depth24plus-stencil8 has no representation'), bitsToNumber: () => unreachable('depth24plus-stencil8 has no representation'), bitsToULPFromZero: () => unreachable('depth24plus-stencil8 has no representation'), - numericRange: null, - }, - }, + numericRange: null + } + } }; /** @@ -897,19 +962,19 @@ export function getComponentReadbackTraits(dataType) { case 'snorm': return { ReadbackTypedArray: Float32Array, - shaderType: 'f32', + shaderType: 'f32' }; case 'uint': return { ReadbackTypedArray: Uint32Array, - shaderType: 'u32', + shaderType: 'u32' }; case 'sint': return { ReadbackTypedArray: Int32Array, - shaderType: 'i32', + shaderType: 'i32' }; default: unreachable(); } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.spec.js index a4bdb34b186..ae985b0e844 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_data.spec.js @@ -1,21 +1,35 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = - 'Test helpers for texel data produce the expected data in the shader'; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = 'Test helpers for texel data produce the expected data in the shader';import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert } from '../../../common/util/util.js'; -import { kEncodableTextureFormats, kTextureFormatInfo } from '../../format_info.js'; +import { + kEncodableTextureFormats, + kTextureFormatInfo } from + +'../../format_info.js'; import { GPUTest } from '../../gpu_test.js'; import { kTexelRepresentationInfo, getSingleDataType, - getComponentReadbackTraits, -} from './texel_data.js'; + getComponentReadbackTraits } from +'./texel_data.js'; export const g = makeTestGroup(GPUTest); -function doTest(t) { +function doTest( +t) + + + + + + + + + + +{ const { format } = t.params; const componentData = t.params.componentData; @@ -24,14 +38,14 @@ function doTest(t) { const texture = t.device.createTexture({ format, size: [1, 1, 1], - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING }); t.device.queue.writeTexture( { texture }, texelData, { - bytesPerRow: texelData.byteLength, + bytesPerRow: texelData.byteLength }, [1] ); @@ -42,14 +56,14 @@ function doTest(t) { @group(0) @binding(0) var tex : texture_2d<${shaderType}>; struct Output { - ${rep.componentOrder.map(C => `result${C} : ${shaderType},`).join('\n')} + ${rep.componentOrder.map((C) => `result${C} : ${shaderType},`).join('\n')} }; @group(0) @binding(1) var output : Output; @compute @workgroup_size(1) fn main() { var texel : vec4<${shaderType}> = textureLoad(tex, vec2(0, 0), 0); - ${rep.componentOrder.map(C => `output.result${C} = texel.${C.toLowerCase()};`).join('\n')} + ${rep.componentOrder.map((C) => `output.result${C} = texel.${C.toLowerCase()};`).join('\n')} return; }`; @@ -57,31 +71,31 @@ function doTest(t) { layout: 'auto', compute: { module: t.device.createShaderModule({ - code: shader, + code: shader }), - entryPoint: 'main', - }, + entryPoint: 'main' + } }); const outputBuffer = t.device.createBuffer({ size: rep.componentOrder.length * 4, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC }); const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: texture.createView(), - }, - { - binding: 1, - resource: { - buffer: outputBuffer, - }, - }, - ], + { + binding: 0, + resource: texture.createView() + }, + { + binding: 1, + resource: { + buffer: outputBuffer + } + }] + }); const encoder = t.device.createCommandEncoder(); @@ -95,7 +109,7 @@ function doTest(t) { t.expectGPUBufferValuesEqual( outputBuffer, new ReadbackTypedArray( - rep.componentOrder.map(c => { + rep.componentOrder.map((c) => { const value = rep.decode(componentData)[c]; assert(value !== undefined); return value; @@ -106,212 +120,215 @@ function doTest(t) { // Make a test parameter by mapping a format and each component to a texel component // data value. -function makeParam(format, fn) { +function makeParam( +format, +fn) +{ const rep = kTexelRepresentationInfo[format]; return { R: rep.componentInfo.R ? fn(rep.componentInfo.R.bitLength, 0) : undefined, G: rep.componentInfo.G ? fn(rep.componentInfo.G.bitLength, 1) : undefined, B: rep.componentInfo.B ? fn(rep.componentInfo.B.bitLength, 2) : undefined, - A: rep.componentInfo.A ? fn(rep.componentInfo.A.bitLength, 3) : undefined, + A: rep.componentInfo.A ? fn(rep.componentInfo.A.bitLength, 3) : undefined }; } -g.test('unorm_texel_data_in_shader') - .params(u => - u - .combine('format', kEncodableTextureFormats) - .filter(({ format }) => { - const info = kTextureFormatInfo[format]; - return !!info.color && info.color.copyDst && getSingleDataType(format) === 'unorm'; - }) - .beginSubcases() - .expand('componentData', ({ format }) => { - const max = bitLength => Math.pow(2, bitLength) - 1; - return [ - // Test extrema - makeParam(format, () => 0), - makeParam(format, bitLength => max(bitLength)), +g.test('unorm_texel_data_in_shader'). +params((u) => +u. +combine('format', kEncodableTextureFormats). +filter(({ format }) => { + const info = kTextureFormatInfo[format]; + return !!info.color && info.color.copyDst && getSingleDataType(format) === 'unorm'; +}). +beginSubcases(). +expand('componentData', ({ format }) => { + const max = (bitLength) => Math.pow(2, bitLength) - 1; + return [ + // Test extrema + makeParam(format, () => 0), + makeParam(format, (bitLength) => max(bitLength)), - // Test a middle value - makeParam(format, bitLength => Math.floor(max(bitLength) / 2)), + // Test a middle value + makeParam(format, (bitLength) => Math.floor(max(bitLength) / 2)), - // Test mixed values - makeParam(format, (bitLength, i) => { - const offset = [0.13, 0.63, 0.42, 0.89]; - return Math.floor(offset[i] * max(bitLength)); - }), - ]; - }) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.format); - }) - .fn(doTest); + // Test mixed values + makeParam(format, (bitLength, i) => { + const offset = [0.13, 0.63, 0.42, 0.89]; + return Math.floor(offset[i] * max(bitLength)); + })]; -g.test('snorm_texel_data_in_shader') - .params(u => - u - .combine('format', kEncodableTextureFormats) - .filter(({ format }) => { - const info = kTextureFormatInfo[format]; - return !!info.color && info.color.copyDst && getSingleDataType(format) === 'snorm'; - }) - .beginSubcases() - .expand('componentData', ({ format }) => { - const max = bitLength => Math.pow(2, bitLength - 1) - 1; - return [ - // Test extrema - makeParam(format, () => 0), - makeParam(format, bitLength => max(bitLength)), - makeParam(format, bitLength => -max(bitLength)), - makeParam(format, bitLength => -max(bitLength) - 1), +}) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.format); +}). +fn(doTest); - // Test a middle value - makeParam(format, bitLength => Math.floor(max(bitLength) / 2)), +g.test('snorm_texel_data_in_shader'). +params((u) => +u. +combine('format', kEncodableTextureFormats). +filter(({ format }) => { + const info = kTextureFormatInfo[format]; + return !!info.color && info.color.copyDst && getSingleDataType(format) === 'snorm'; +}). +beginSubcases(). +expand('componentData', ({ format }) => { + const max = (bitLength) => Math.pow(2, bitLength - 1) - 1; + return [ + // Test extrema + makeParam(format, () => 0), + makeParam(format, (bitLength) => max(bitLength)), + makeParam(format, (bitLength) => -max(bitLength)), + makeParam(format, (bitLength) => -max(bitLength) - 1), - // Test mixed values - makeParam(format, (bitLength, i) => { - const offset = [0.13, 0.63, 0.42, 0.89]; - const range = 2 * max(bitLength); - return -max(bitLength) + Math.floor(offset[i] * range); - }), - ]; - }) - ) - .fn(doTest); + // Test a middle value + makeParam(format, (bitLength) => Math.floor(max(bitLength) / 2)), -g.test('uint_texel_data_in_shader') - .params(u => - u - .combine('format', kEncodableTextureFormats) - .filter(({ format }) => { - const info = kTextureFormatInfo[format]; - return !!info.color && info.color.copyDst && getSingleDataType(format) === 'uint'; - }) - .beginSubcases() - .expand('componentData', ({ format }) => { - const max = bitLength => Math.pow(2, bitLength) - 1; - return [ - // Test extrema - makeParam(format, () => 0), - makeParam(format, bitLength => max(bitLength)), + // Test mixed values + makeParam(format, (bitLength, i) => { + const offset = [0.13, 0.63, 0.42, 0.89]; + const range = 2 * max(bitLength); + return -max(bitLength) + Math.floor(offset[i] * range); + })]; - // Test a middle value - makeParam(format, bitLength => Math.floor(max(bitLength) / 2)), +}) +). +fn(doTest); - // Test mixed values - makeParam(format, (bitLength, i) => { - const offset = [0.13, 0.63, 0.42, 0.89]; - return Math.floor(offset[i] * max(bitLength)); - }), - ]; - }) - ) - .fn(doTest); +g.test('uint_texel_data_in_shader'). +params((u) => +u. +combine('format', kEncodableTextureFormats). +filter(({ format }) => { + const info = kTextureFormatInfo[format]; + return !!info.color && info.color.copyDst && getSingleDataType(format) === 'uint'; +}). +beginSubcases(). +expand('componentData', ({ format }) => { + const max = (bitLength) => Math.pow(2, bitLength) - 1; + return [ + // Test extrema + makeParam(format, () => 0), + makeParam(format, (bitLength) => max(bitLength)), -g.test('sint_texel_data_in_shader') - .params(u => - u - .combine('format', kEncodableTextureFormats) - .filter(({ format }) => { - const info = kTextureFormatInfo[format]; - return !!info.color && info.color.copyDst && getSingleDataType(format) === 'sint'; - }) - .beginSubcases() - .expand('componentData', ({ format }) => { - const max = bitLength => Math.pow(2, bitLength - 1) - 1; - return [ - // Test extrema - makeParam(format, () => 0), - makeParam(format, bitLength => max(bitLength)), - makeParam(format, bitLength => -max(bitLength) - 1), + // Test a middle value + makeParam(format, (bitLength) => Math.floor(max(bitLength) / 2)), - // Test a middle value - makeParam(format, bitLength => Math.floor(max(bitLength) / 2)), + // Test mixed values + makeParam(format, (bitLength, i) => { + const offset = [0.13, 0.63, 0.42, 0.89]; + return Math.floor(offset[i] * max(bitLength)); + })]; - // Test mixed values - makeParam(format, (bitLength, i) => { - const offset = [0.13, 0.63, 0.42, 0.89]; - const range = 2 * max(bitLength); - return -max(bitLength) + Math.floor(offset[i] * range); - }), - ]; - }) - ) - .fn(doTest); +}) +). +fn(doTest); -g.test('float_texel_data_in_shader') - .desc( - ` +g.test('sint_texel_data_in_shader'). +params((u) => +u. +combine('format', kEncodableTextureFormats). +filter(({ format }) => { + const info = kTextureFormatInfo[format]; + return !!info.color && info.color.copyDst && getSingleDataType(format) === 'sint'; +}). +beginSubcases(). +expand('componentData', ({ format }) => { + const max = (bitLength) => Math.pow(2, bitLength - 1) - 1; + return [ + // Test extrema + makeParam(format, () => 0), + makeParam(format, (bitLength) => max(bitLength)), + makeParam(format, (bitLength) => -max(bitLength) - 1), + + // Test a middle value + makeParam(format, (bitLength) => Math.floor(max(bitLength) / 2)), + + // Test mixed values + makeParam(format, (bitLength, i) => { + const offset = [0.13, 0.63, 0.42, 0.89]; + const range = 2 * max(bitLength); + return -max(bitLength) + Math.floor(offset[i] * range); + })]; + +}) +). +fn(doTest); + +g.test('float_texel_data_in_shader'). +desc( + ` TODO: Test NaN, Infinity, -Infinity [1]` - ) - .params(u => - u - .combine('format', kEncodableTextureFormats) - .filter(({ format }) => { - const info = kTextureFormatInfo[format]; - return !!info.color && info.color.copyDst && getSingleDataType(format) === 'float'; - }) - .beginSubcases() - .expand('componentData', ({ format }) => { - return [ - // Test extrema - makeParam(format, () => 0), +). +params((u) => +u. +combine('format', kEncodableTextureFormats). +filter(({ format }) => { + const info = kTextureFormatInfo[format]; + return !!info.color && info.color.copyDst && getSingleDataType(format) === 'float'; +}). +beginSubcases(). +expand('componentData', ({ format }) => { + return [ + // Test extrema + makeParam(format, () => 0), - // [1]: Test NaN, Infinity, -Infinity + // [1]: Test NaN, Infinity, -Infinity - // Test some values - makeParam(format, () => 0.1199951171875), - makeParam(format, () => 1.4072265625), - makeParam(format, () => 24928), - makeParam(format, () => -0.1319580078125), - makeParam(format, () => -323.25), - makeParam(format, () => -7440), + // Test some values + makeParam(format, () => 0.1199951171875), + makeParam(format, () => 1.4072265625), + makeParam(format, () => 24928), + makeParam(format, () => -0.1319580078125), + makeParam(format, () => -323.25), + makeParam(format, () => -7440), - // Test mixed values - makeParam(format, (bitLength, i) => { - return [24896, -0.1319580078125, -323.25, -234.375][i]; - }), - ]; - }) - ) - .fn(doTest); + // Test mixed values + makeParam(format, (bitLength, i) => { + return [24896, -0.1319580078125, -323.25, -234.375][i]; + })]; -g.test('ufloat_texel_data_in_shader') - .desc( - ` -TODO: Test NaN, Infinity [1]` - ) - .params(u => - u - .combine('format', kEncodableTextureFormats) - .filter(({ format }) => { - const info = kTextureFormatInfo[format]; - return !!info.color && info.color.copyDst && getSingleDataType(format) === 'ufloat'; - }) - .beginSubcases() - .expand('componentData', ({ format }) => { - return [ - // Test extrema - makeParam(format, () => 0), +}) +). +fn(doTest); - // [2]: Test NaN, Infinity +g.test('ufloat_texel_data_in_shader'). +desc( + ` +Note: this uses values that are representable by both rg11b10ufloat and rgb9e5ufloat. - // Test some values - makeParam(format, () => 0.119140625), - makeParam(format, () => 1.40625), - makeParam(format, () => 24896), +TODO: Test NaN, Infinity` +). +params((u) => +u. +combine('format', kEncodableTextureFormats). +filter(({ format }) => { + const info = kTextureFormatInfo[format]; + return !!info.color && info.color.copyDst && getSingleDataType(format) === 'ufloat'; +}). +beginSubcases(). +expand('componentData', ({ format }) => { + return [ + // Test extrema + makeParam(format, () => 0), - // Test scattered mixed values - makeParam(format, (bitLength, i) => { - return [24896, 1.40625, 0.119140625, 0.23095703125][i]; - }), + // Test some values + makeParam(format, () => 128), + makeParam(format, () => 1984), + makeParam(format, () => 3968), - // Test mixed values that are close in magnitude. - makeParam(format, (bitLength, i) => { - return [0.1337890625, 0.17919921875, 0.119140625, 0.125][i]; - }), - ]; - }) - ) - .fn(doTest); + // Test scattered mixed values + makeParam(format, (bitLength, i) => { + return [128, 1984, 3968][i]; + }), + + // Test mixed values that are close in magnitude. + makeParam(format, (bitLength, i) => { + return [0.05859375, 0.03125, 0.03515625][i]; + })]; + +}) +). +fn(doTest); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_view.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_view.js index 1bfee89f71f..d5b0bd4b2a6 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_view.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texel_view.js @@ -1,8 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, memcpy } from '../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../format_info.js'; -import { generatePrettyTable } from '../pretty_diff_tables.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, memcpy } from '../../../common/util/util.js';import { kTextureFormatInfo } from '../../format_info.js';import { generatePrettyTable } from '../pretty_diff_tables.js'; import { reifyExtent3D, reifyOrigin3D } from '../unions.js'; import { fullSubrectCoordinates } from './base.js'; @@ -10,6 +8,7 @@ import { kTexelRepresentationInfo, makeClampToRange } from './texel_data.js'; /** Function taking some x,y,z coordinates and returning `Readonly`. */ + /** * Wrapper to view various representations of texture data in other ways. E.g., can: * - Provide a mapped buffer, containing copied texture data, and read color values. @@ -27,7 +26,19 @@ export class TexelView { /** Generates the color for the texel at the given coordinates. */ - constructor(format, { bytes, ulpFromZero, color }) { + + constructor( + format, + { + bytes, + ulpFromZero, + color + + + + + }) + { this.format = format; this.bytes = bytes; this.ulpFromZero = ulpFromZero; @@ -39,24 +50,34 @@ export class TexelView { * reference to the input `subrectData`, so any changes to it will be visible in the TexelView. */ static fromTextureDataByReference( - format, - subrectData, - { bytesPerRow, rowsPerImage, subrectOrigin, subrectSize } - ) { + format, + subrectData, + { + bytesPerRow, + rowsPerImage, + subrectOrigin, + subrectSize + + + + + + }) + { const origin = reifyOrigin3D(subrectOrigin); const size = reifyExtent3D(subrectSize); const info = kTextureFormatInfo[format]; assert(info.blockWidth === 1 && info.blockHeight === 1, 'unimplemented for block formats'); - return TexelView.fromTexelsAsBytes(format, coords => { + return TexelView.fromTexelsAsBytes(format, (coords) => { assert( coords.x >= origin.x && - coords.y >= origin.y && - coords.z >= origin.z && - coords.x < origin.x + size.width && - coords.y < origin.y + size.height && - coords.z < origin.z + size.depthOrArrayLayers, + coords.y >= origin.y && + coords.z >= origin.z && + coords.x < origin.x + size.width && + coords.y < origin.y + size.height && + coords.z < origin.z + size.depthOrArrayLayers, () => `coordinate (${coords.x},${coords.y},${coords.z}) out of bounds` ); @@ -70,42 +91,59 @@ export class TexelView { } /** Produces a TexelView from a generator of bytes for individual texel blocks. */ - static fromTexelsAsBytes(format, generator) { + static fromTexelsAsBytes( + format, + generator) + { const info = kTextureFormatInfo[format]; assert(info.blockWidth === 1 && info.blockHeight === 1, 'unimplemented for block formats'); const repr = kTexelRepresentationInfo[format]; return new TexelView(format, { bytes: generator, - ulpFromZero: coords => repr.bitsToULPFromZero(repr.unpackBits(generator(coords))), - color: coords => repr.bitsToNumber(repr.unpackBits(generator(coords))), + ulpFromZero: (coords) => repr.bitsToULPFromZero(repr.unpackBits(generator(coords))), + color: (coords) => repr.bitsToNumber(repr.unpackBits(generator(coords))) }); } /** Produces a TexelView from a generator of numeric "color" values for each texel. */ - static fromTexelsAsColors(format, generator, { clampToFormatRange = false } = {}) { + static fromTexelsAsColors( + format, + generator, + { clampToFormatRange = false } = {}) + { const info = kTextureFormatInfo[format]; assert(info.blockWidth === 1 && info.blockHeight === 1, 'unimplemented for block formats'); if (clampToFormatRange) { const applyClamp = makeClampToRange(format); const oldGenerator = generator; - generator = coords => applyClamp(oldGenerator(coords)); + generator = (coords) => applyClamp(oldGenerator(coords)); } const repr = kTexelRepresentationInfo[format]; return new TexelView(format, { - bytes: coords => new Uint8Array(repr.pack(repr.encode(generator(coords)))), - ulpFromZero: coords => repr.bitsToULPFromZero(repr.numberToBits(generator(coords))), - color: generator, + bytes: (coords) => new Uint8Array(repr.pack(repr.encode(generator(coords)))), + ulpFromZero: (coords) => repr.bitsToULPFromZero(repr.numberToBits(generator(coords))), + color: generator }); } /** Writes the contents of a TexelView as "linear image data", i.e. the `writeTexture` format. */ writeTextureData( - subrectData, - { bytesPerRow, rowsPerImage, subrectOrigin: subrectOrigin_, subrectSize: subrectSize_ } - ) { + subrectData, + { + bytesPerRow, + rowsPerImage, + subrectOrigin: subrectOrigin_, + subrectSize: subrectSize_ + + + + + + }) + { const subrectOrigin = reifyOrigin3D(subrectOrigin_); const subrectSize = reifyExtent3D(subrectSize_); @@ -129,33 +167,35 @@ export class TexelView { const repr = kTexelRepresentationInfo[this.format]; const integerSampleType = info.sampleType === 'uint' || info.sampleType === 'sint'; - const numberToString = integerSampleType ? n => n.toFixed() : n => n.toPrecision(6); + const numberToString = integerSampleType ? + (n) => n.toFixed() : + (n) => n.toPrecision(6); const componentOrderStr = repr.componentOrder.join(',') + ':'; const subrectCoords = [...fullSubrectCoordinates(subrectOrigin, subrectSize)]; - const printCoords = (function* () { + const printCoords = function* () { yield* [' coords', '==', 'X,Y,Z:']; for (const coords of subrectCoords) yield `${coords.x},${coords.y},${coords.z}`; - })(); - const printActualBytes = (function* (t) { + }(); + const printActualBytes = function* (t) { yield* [' act. texel bytes (little-endian)', '==', '0x:']; for (const coords of subrectCoords) { - yield Array.from(t.bytes(coords), b => b.toString(16).padStart(2, '0')).join(' '); + yield Array.from(t.bytes(coords), (b) => b.toString(16).padStart(2, '0')).join(' '); } - })(this); - const printActualColors = (function* (t) { + }(this); + const printActualColors = function* (t) { yield* [' act. colors', '==', componentOrderStr]; for (const coords of subrectCoords) { const pixel = t.color(coords); - yield `${repr.componentOrder.map(ch => numberToString(pixel[ch])).join(',')}`; + yield `${repr.componentOrder.map((ch) => numberToString(pixel[ch])).join(',')}`; } - })(this); + }(this); const opts = { fillToWidth: 120, - numberToString, + numberToString }; return `${generatePrettyTable(opts, [printCoords, printActualBytes, printActualColors])}`; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.js index bd329bac443..c2047df8783 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, ErrorWithExtra, unreachable } from '../../../common/util/util.js'; -import { kTextureFormatInfo } from '../../format_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { assert, ErrorWithExtra, unreachable } from '../../../common/util/util.js';import { kTextureFormatInfo } from '../../format_info.js'; import { numbersApproximatelyEqual } from '../conversion.js'; import { generatePrettyTable } from '../pretty_diff_tables.js'; import { reifyExtent3D, reifyOrigin3D } from '../unions.js'; @@ -11,12 +10,47 @@ import { getTextureSubCopyLayout } from './layout.js'; import { kTexelRepresentationInfo } from './texel_data.js'; import { TexelView } from './texel_view.js'; -function makeTexelViewComparer(format, { actTexelView, expTexelView }, opts) { + + +/** Threshold options for comparing texels of different formats (norm/float/int). */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function makeTexelViewComparer( +format, +{ actTexelView, expTexelView }, +opts) +{ const { maxIntDiff = 0, maxFractionalDiff, maxDiffULPsForNormFormat, - maxDiffULPsForFloatFormat, + maxDiffULPsForFloatFormat } = opts; assert(maxIntDiff >= 0, 'threshold must be non-negative'); @@ -36,29 +70,29 @@ function makeTexelViewComparer(format, { actTexelView, expTexelView }, opts) { const tvc = {}; if (fmtIsInt) { - tvc.predicate = coords => - comparePerComponent(actTexelView.color(coords), expTexelView.color(coords), maxIntDiff); + tvc.predicate = (coords) => + comparePerComponent(actTexelView.color(coords), expTexelView.color(coords), maxIntDiff); } else if (fmtIsNorm && maxDiffULPsForNormFormat !== undefined) { - tvc.predicate = coords => - comparePerComponent( - actTexelView.ulpFromZero(coords), - expTexelView.ulpFromZero(coords), - maxDiffULPsForNormFormat - ); + tvc.predicate = (coords) => + comparePerComponent( + actTexelView.ulpFromZero(coords), + expTexelView.ulpFromZero(coords), + maxDiffULPsForNormFormat + ); } else if (fmtIsFloat && maxDiffULPsForFloatFormat !== undefined) { - tvc.predicate = coords => - comparePerComponent( - actTexelView.ulpFromZero(coords), - expTexelView.ulpFromZero(coords), - maxDiffULPsForFloatFormat - ); + tvc.predicate = (coords) => + comparePerComponent( + actTexelView.ulpFromZero(coords), + expTexelView.ulpFromZero(coords), + maxDiffULPsForFloatFormat + ); } else if (maxFractionalDiff !== undefined) { - tvc.predicate = coords => - comparePerComponent( - actTexelView.color(coords), - expTexelView.color(coords), - maxFractionalDiff - ); + tvc.predicate = (coords) => + comparePerComponent( + actTexelView.color(coords), + expTexelView.color(coords), + maxFractionalDiff + ); } else { if (fmtIsNorm) { unreachable('need maxFractionalDiff or maxDiffULPsForNormFormat to compare norm textures'); @@ -71,53 +105,57 @@ function makeTexelViewComparer(format, { actTexelView, expTexelView }, opts) { const repr = kTexelRepresentationInfo[format]; if (fmtIsInt) { - tvc.tableRows = failedCoords => [ - [`tolerance ± ${maxIntDiff}`], - (function* () { - yield* [` diff (act - exp)`, '==', '']; - for (const coords of failedCoords) { - const act = actTexelView.color(coords); - const exp = expTexelView.color(coords); - yield repr.componentOrder.map(ch => act[ch] - exp[ch]).join(','); - } - })(), - ]; + tvc.tableRows = (failedCoords) => [ + [`tolerance ± ${maxIntDiff}`], + function* () { + yield* [` diff (act - exp)`, '==', '']; + for (const coords of failedCoords) { + const act = actTexelView.color(coords); + const exp = expTexelView.color(coords); + yield repr.componentOrder.map((ch) => act[ch] - exp[ch]).join(','); + } + }()]; + } else if ( - (fmtIsNorm && maxDiffULPsForNormFormat !== undefined) || - (fmtIsFloat && maxDiffULPsForFloatFormat !== undefined) - ) { + fmtIsNorm && maxDiffULPsForNormFormat !== undefined || + fmtIsFloat && maxDiffULPsForFloatFormat !== undefined) + { const toleranceULPs = fmtIsNorm ? maxDiffULPsForNormFormat : maxDiffULPsForFloatFormat; - tvc.tableRows = failedCoords => [ - [`tolerance ± ${toleranceULPs} normal-ULPs`], - (function* () { - yield* [` diff (act - exp) in normal-ULPs`, '==', '']; - for (const coords of failedCoords) { - const act = actTexelView.ulpFromZero(coords); - const exp = expTexelView.ulpFromZero(coords); - yield repr.componentOrder.map(ch => act[ch] - exp[ch]).join(','); - } - })(), - ]; + tvc.tableRows = (failedCoords) => [ + [`tolerance ± ${toleranceULPs} normal-ULPs`], + function* () { + yield* [` diff (act - exp) in normal-ULPs`, '==', '']; + for (const coords of failedCoords) { + const act = actTexelView.ulpFromZero(coords); + const exp = expTexelView.ulpFromZero(coords); + yield repr.componentOrder.map((ch) => act[ch] - exp[ch]).join(','); + } + }()]; + } else { assert(maxFractionalDiff !== undefined); - tvc.tableRows = failedCoords => [ - [`tolerance ± ${maxFractionalDiff}`], - (function* () { - yield* [` diff (act - exp)`, '==', '']; - for (const coords of failedCoords) { - const act = actTexelView.color(coords); - const exp = expTexelView.color(coords); - yield repr.componentOrder.map(ch => (act[ch] - exp[ch]).toPrecision(4)).join(','); - } - })(), - ]; + tvc.tableRows = (failedCoords) => [ + [`tolerance ± ${maxFractionalDiff}`], + function* () { + yield* [` diff (act - exp)`, '==', '']; + for (const coords of failedCoords) { + const act = actTexelView.color(coords); + const exp = expTexelView.color(coords); + yield repr.componentOrder.map((ch) => (act[ch] - exp[ch]).toPrecision(4)).join(','); + } + }()]; + } return tvc; } -function comparePerComponent(actual, expected, maxDiff) { - return Object.keys(actual).every(key => { +function comparePerComponent( +actual, +expected, +maxDiff) +{ + return Object.keys(actual).every((key) => { const k = key; const act = actual[k]; const exp = expected[k]; @@ -127,14 +165,19 @@ function comparePerComponent(actual, expected, maxDiff) { } /** Create a new mappable GPUBuffer, and copy a subrectangle of GPUTexture data into it. */ -function createTextureCopyForMapRead(t, source, copySize, { format }) { +function createTextureCopyForMapRead( +t, +source, +copySize, +{ format }) +{ const { byteLength, bytesPerRow, rowsPerImage } = getTextureSubCopyLayout(format, copySize, { - aspect: source.aspect, + aspect: source.aspect }); const buffer = t.device.createBuffer({ usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - size: byteLength, + size: byteLength }); t.trackForCleanup(buffer); @@ -146,13 +189,13 @@ function createTextureCopyForMapRead(t, source, copySize, { format }) { } export function findFailedPixels( - format, - subrectOrigin, - subrectSize, - { actTexelView, expTexelView }, - texelCompareOptions, - coords -) { +format, +subrectOrigin, +subrectSize, +{ actTexelView, expTexelView }, +texelCompareOptions, +coords) +{ const comparer = makeTexelViewComparer( format, { actTexelView, expTexelView }, @@ -182,52 +225,54 @@ export function findFailedPixels( const repr = kTexelRepresentationInfo[format]; const integerSampleType = info.sampleType === 'uint' || info.sampleType === 'sint'; - const numberToString = integerSampleType ? n => n.toFixed() : n => n.toPrecision(6); + const numberToString = integerSampleType ? + (n) => n.toFixed() : + (n) => n.toPrecision(6); const componentOrderStr = repr.componentOrder.join(',') + ':'; - const printCoords = (function* () { + const printCoords = function* () { yield* [' coords', '==', 'X,Y,Z:']; for (const coords of failedPixels) yield `${coords.x},${coords.y},${coords.z}`; - })(); - const printActualBytes = (function* () { + }(); + const printActualBytes = function* () { yield* [' act. texel bytes (little-endian)', '==', '0x:']; for (const coords of failedPixels) { - yield Array.from(actTexelView.bytes(coords), b => b.toString(16).padStart(2, '0')).join(' '); + yield Array.from(actTexelView.bytes(coords), (b) => b.toString(16).padStart(2, '0')).join(' '); } - })(); - const printActualColors = (function* () { + }(); + const printActualColors = function* () { yield* [' act. colors', '==', componentOrderStr]; for (const coords of failedPixels) { const pixel = actTexelView.color(coords); - yield `${repr.componentOrder.map(ch => numberToString(pixel[ch])).join(',')}`; + yield `${repr.componentOrder.map((ch) => numberToString(pixel[ch])).join(',')}`; } - })(); - const printExpectedColors = (function* () { + }(); + const printExpectedColors = function* () { yield* [' exp. colors', '==', componentOrderStr]; for (const coords of failedPixels) { const pixel = expTexelView.color(coords); - yield `${repr.componentOrder.map(ch => numberToString(pixel[ch])).join(',')}`; + yield `${repr.componentOrder.map((ch) => numberToString(pixel[ch])).join(',')}`; } - })(); - const printActualULPs = (function* () { + }(); + const printActualULPs = function* () { yield* [' act. normal-ULPs-from-zero', '==', componentOrderStr]; for (const coords of failedPixels) { const pixel = actTexelView.ulpFromZero(coords); - yield `${repr.componentOrder.map(ch => pixel[ch]).join(',')}`; + yield `${repr.componentOrder.map((ch) => pixel[ch]).join(',')}`; } - })(); - const printExpectedULPs = (function* () { + }(); + const printExpectedULPs = function* () { yield* [` exp. normal-ULPs-from-zero`, '==', componentOrderStr]; for (const coords of failedPixels) { const pixel = expTexelView.ulpFromZero(coords); - yield `${repr.componentOrder.map(ch => pixel[ch]).join(',')}`; + yield `${repr.componentOrder.map((ch) => pixel[ch]).join(',')}`; } - })(); + }(); const opts = { fillToWidth: 120, - numberToString, + numberToString }; return `\ between ${lowerCorner} and ${upperCorner} inclusive: @@ -238,8 +283,8 @@ ${generatePrettyTable(opts, [ printExpectedColors, printActualULPs, printExpectedULPs, - ...comparer.tableRows(failedPixels), -])}`; + ...comparer.tableRows(failedPixels)] + )}`; } /** @@ -251,13 +296,13 @@ ${generatePrettyTable(opts, [ * subnormal numbers (where ULP is defined for float, normalized, and integer formats). */ export async function textureContentIsOKByT2B( - t, - source, - copySize_, - { expTexelView }, - texelCompareOptions, - coords -) { +t, +source, +copySize_, +{ expTexelView }, +texelCompareOptions, +coords) +{ const subrectOrigin = reifyOrigin3D(source.origin ?? [0, 0, 0]); const subrectSize = reifyExtent3D(copySize_); const format = expTexelView.format; @@ -276,7 +321,7 @@ export async function textureContentIsOKByT2B( bytesPerRow, rowsPerImage, subrectOrigin, - subrectSize, + subrectSize }; const actTexelView = TexelView.fromTextureDataByReference(format, data, texelViewConfig); @@ -298,6 +343,6 @@ export async function textureContentIsOKByT2B( return new ErrorWithExtra(msg, () => ({ expTexelView, // Make a new TexelView with a copy of the data so we can unmap the buffer (debug mode only). - actTexelView: TexelView.fromTextureDataByReference(format, data.slice(), texelViewConfig), + actTexelView: TexelView.fromTextureDataByReference(format, data.slice(), texelViewConfig) })); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.spec.js index 00ef1663f94..76198cb3b6b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/texture/texture_ok.spec.js @@ -1,7 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = 'checkPixels helpers behave as expected against real textures'; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = 'checkPixels helpers behave as expected against real textures';import { makeTestGroup } from '../../../common/framework/test_group.js'; import { GPUTest } from '../../gpu_test.js'; import { TexelView } from './texel_view.js'; @@ -9,154 +8,152 @@ import { textureContentIsOKByT2B } from './texture_ok.js'; export const g = makeTestGroup(GPUTest); -g.test('float32') - .desc(`Basic test that actual/expected must match, for float32.`) - .params(u => - u - .combineWithParams([ - { format: 'rgba32float' }, // - { format: 'rg32float' }, - ]) - .beginSubcases() - .combineWithParams([ - // Expected data is 0.6 in all channels - { data: 0.6, opts: { maxFractionalDiff: 0.0000001 }, _ok: true }, - { data: 0.6, opts: { maxDiffULPsForFloatFormat: 1 }, _ok: true }, +g.test('float32'). +desc(`Basic test that actual/expected must match, for float32.`). +params((u) => +u. +combineWithParams([ +{ format: 'rgba32float' }, // +{ format: 'rg32float' }] +). +beginSubcases(). +combineWithParams([ +// Expected data is 0.6 in all channels +{ data: 0.6, opts: { maxFractionalDiff: 0.0000001 }, _ok: true }, +{ data: 0.6, opts: { maxDiffULPsForFloatFormat: 1 }, _ok: true }, - { data: 0.5999, opts: { maxFractionalDiff: 0 }, _ok: false }, - { data: 0.5999, opts: { maxFractionalDiff: 0.0001001 }, _ok: true }, +{ data: 0.5999, opts: { maxFractionalDiff: 0 }, _ok: false }, +{ data: 0.5999, opts: { maxFractionalDiff: 0.0001001 }, _ok: true }, - { data: 0.6001, opts: { maxFractionalDiff: 0 }, _ok: false }, - { data: 0.6001, opts: { maxFractionalDiff: 0.0001001 }, _ok: true }, +{ data: 0.6001, opts: { maxFractionalDiff: 0 }, _ok: false }, +{ data: 0.6001, opts: { maxFractionalDiff: 0.0001001 }, _ok: true }, - { data: 0.5999, opts: { maxDiffULPsForFloatFormat: 1677 }, _ok: false }, - { data: 0.5999, opts: { maxDiffULPsForFloatFormat: 1678 }, _ok: true }, +{ data: 0.5999, opts: { maxDiffULPsForFloatFormat: 1677 }, _ok: false }, +{ data: 0.5999, opts: { maxDiffULPsForFloatFormat: 1678 }, _ok: true }, - { data: 0.6001, opts: { maxDiffULPsForFloatFormat: 1676 }, _ok: false }, - { data: 0.6001, opts: { maxDiffULPsForFloatFormat: 1677 }, _ok: true }, - ]) - ) - .fn(async t => { - const { format, data, opts, _ok } = t.params; +{ data: 0.6001, opts: { maxDiffULPsForFloatFormat: 1676 }, _ok: false }, +{ data: 0.6001, opts: { maxDiffULPsForFloatFormat: 1677 }, _ok: true }] +) +). +fn(async (t) => { + const { format, data, opts, _ok } = t.params; - const size = [1, 1]; - const texture = t.device.createTexture({ - format, - size, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC, - }); - t.trackForCleanup(texture); - t.device.queue.writeTexture({ texture }, new Float32Array([data, data, data, data]), {}, size); - - const expColor = { R: 0.6, G: 0.6, B: 0.6, A: 0.6 }; - const expTexelView = TexelView.fromTexelsAsColors(format, coords => expColor); - - const result = await textureContentIsOKByT2B(t, { texture }, size, { expTexelView }, opts); - t.expect((result === undefined) === _ok, `expected ${_ok}, got ${result === undefined}`); + const size = [1, 1]; + const texture = t.device.createTexture({ + format, + size, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC }); + t.trackForCleanup(texture); + t.device.queue.writeTexture({ texture }, new Float32Array([data, data, data, data]), {}, size); -g.test('norm') - .desc(`Basic test that actual/expected must match, for unorm/snorm.`) - .params(u => - u - .combine('mode', ['bytes', 'colors']) - .combineWithParams([ - { format: 'r8unorm', _maxValue: 255 }, - { format: 'r8snorm', _maxValue: 127 }, - ]) - .beginSubcases() - .combineWithParams([ - // Expected data is [10, 10] - { data: [10, 10], _ok: true }, - { data: [10, 11], _ok: false }, - { data: [11, 10], _ok: false }, - { data: [11, 11], _ok: false }, - ]) - ) - .fn(async t => { - const { mode, format, _maxValue, data, _ok } = t.params; + const expColor = { R: 0.6, G: 0.6, B: 0.6, A: 0.6 }; + const expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => expColor); - const size = [2, 1]; - const texture = t.device.createTexture({ - format, - size, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC, - }); - t.trackForCleanup(texture); - t.device.queue.writeTexture({ texture }, new Int8Array(data), {}, size); + const result = await textureContentIsOKByT2B(t, { texture }, size, { expTexelView }, opts); + t.expect(result === undefined === _ok, `expected ${_ok}, got ${result === undefined}`); +}); - let expTexelView; - switch (mode) { - case 'bytes': - expTexelView = TexelView.fromTexelsAsBytes(format, coords => new Uint8Array([10])); - break; - case 'colors': - expTexelView = TexelView.fromTexelsAsColors(format, coords => ({ R: 10 / _maxValue })); - break; - } +g.test('norm'). +desc(`Basic test that actual/expected must match, for unorm/snorm.`). +params((u) => +u. +combine('mode', ['bytes', 'colors']). +combineWithParams([ +{ format: 'r8unorm', _maxValue: 255 }, +{ format: 'r8snorm', _maxValue: 127 }] +). +beginSubcases(). +combineWithParams([ +// Expected data is [10, 10] +{ data: [10, 10], _ok: true }, +{ data: [10, 11], _ok: false }, +{ data: [11, 10], _ok: false }, +{ data: [11, 11], _ok: false }] +) +). +fn(async (t) => { + const { mode, format, _maxValue, data, _ok } = t.params; - const result = await textureContentIsOKByT2B( - t, - { texture }, - size, - { expTexelView }, - { maxDiffULPsForNormFormat: 0 } - ); - - t.expect((result === undefined) === _ok, result?.message); + const size = [2, 1]; + const texture = t.device.createTexture({ + format, + size, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC }); + t.trackForCleanup(texture); + t.device.queue.writeTexture({ texture }, new Int8Array(data), {}, size); -g.test('snorm_min') - .desc( - `The minimum snorm value has two possible representations (e.g. -127 and -128). Ensure that + let expTexelView; + switch (mode) { + case 'bytes': + expTexelView = TexelView.fromTexelsAsBytes(format, (_coords) => new Uint8Array([10])); + break; + case 'colors': + expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => ({ R: 10 / _maxValue })); + break; + } + + const result = await textureContentIsOKByT2B( + t, + { texture }, + size, + { expTexelView }, + { maxDiffULPsForNormFormat: 0 } + ); + t.expect(result === undefined === _ok, result?.message); +}); + +g.test('snorm_min'). +desc( + `The minimum snorm value has two possible representations (e.g. -127 and -128). Ensure that actual/expected can mismatch in both directions and pass the test.` - ) - .params(u => - u // - .combine('mode', ['bytes', 'colors']) - .combineWithParams([ - // - { format: 'r8snorm', _maxValue: 127 }, - ]) - ) - .fn(async t => { - const { mode, format, _maxValue } = t.params; +). +params((u) => +u // +.combine('mode', ['bytes', 'colors']). +combineWithParams([ +// +{ format: 'r8snorm', _maxValue: 127 }] +) +). +fn(async (t) => { + const { mode, format, _maxValue } = t.params; - const data = [-_maxValue, -_maxValue - 1]; + const data = [-_maxValue, -_maxValue - 1]; - const size = [2, 1]; - const texture = t.device.createTexture({ - format, - size, - usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC, - }); - t.trackForCleanup(texture); - t.device.queue.writeTexture({ texture }, new Int8Array(data), {}, size); - - let expTexelView; - switch (mode) { - case 'bytes': - { - // Actual value should be [-127,-128], expected value is [-128,-127], both should pass. - const exp = [-_maxValue - 1, -_maxValue]; - expTexelView = TexelView.fromTexelsAsBytes( - format, - coords => new Uint8Array([exp[coords.x]]) - ); - } - break; - case 'colors': - expTexelView = TexelView.fromTexelsAsColors(format, coords => ({ R: -1 })); - break; - } - - const result = await textureContentIsOKByT2B( - t, - { texture }, - size, - { expTexelView }, - { maxDiffULPsForNormFormat: 0 } - ); - - t.expectOK(result); + const size = [2, 1]; + const texture = t.device.createTexture({ + format, + size, + usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC }); + t.trackForCleanup(texture); + t.device.queue.writeTexture({ texture }, new Int8Array(data), {}, size); + + let expTexelView; + switch (mode) { + case 'bytes': + { + // Actual value should be [-127,-128], expected value is [-128,-127], both should pass. + const exp = [-_maxValue - 1, -_maxValue]; + expTexelView = TexelView.fromTexelsAsBytes( + format, + (coords) => new Uint8Array([exp[coords.x]]) + ); + } + break; + case 'colors': + expTexelView = TexelView.fromTexelsAsColors(format, (_coords) => ({ R: -1 })); + break; + } + + const result = await textureContentIsOKByT2B( + t, + { texture }, + size, + { expTexelView }, + { maxDiffULPsForNormFormat: 0 } + ); + t.expectOK(result); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/util/unions.js b/tests/wpt/webgpu/tests/webgpu/webgpu/util/unions.js index 8dd7e23ad58..0f850786074 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/util/unions.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/util/unions.js @@ -1,21 +1,22 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ /** +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/ /** * Reifies a `GPUOrigin3D` into a `Required`. - */ export function reifyOrigin3D(val) { + */export function reifyOrigin3D(val) +{ if (Symbol.iterator in val) { const v = Array.from(val); return { x: (v[0] ?? 0) | 0, y: (v[1] ?? 0) | 0, - z: (v[2] ?? 0) | 0, + z: (v[2] ?? 0) | 0 }; } else { const v = val; return { x: (v.x ?? 0) | 0, y: (v.y ?? 0) | 0, - z: (v.z ?? 0) | 0, + z: (v.z ?? 0) | 0 }; } } @@ -23,20 +24,22 @@ /** * Reifies a `GPUExtent3D` into a `Required`. */ -export function reifyExtent3D(val) { +export function reifyExtent3D( +val) +{ if (Symbol.iterator in val) { const v = Array.from(val); return { width: (v[0] ?? 1) | 0, height: (v[1] ?? 1) | 0, - depthOrArrayLayers: (v[2] ?? 1) | 0, + depthOrArrayLayers: (v[2] ?? 1) | 0 }; } else { const v = val; return { width: (v.width ?? 1) | 0, height: (v.height ?? 1) | 0, - depthOrArrayLayers: (v.depthOrArrayLayers ?? 1) | 0, + depthOrArrayLayers: (v.depthOrArrayLayers ?? 1) | 0 }; } -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/configure.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/configure.spec.js index 171f8036c3d..30acc8c9a7e 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/configure.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/configure.spec.js @@ -1,13 +1,12 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for GPUCanvasContext.configure. TODO: - Test colorSpace - Test viewFormats -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert } from '../../../common/util/util.js'; import { kCanvasTextureFormats, kTextureUsages } from '../../capability_info.js'; import { GPUConst } from '../../constants.js'; @@ -16,412 +15,412 @@ import { kFeaturesForFormats, kTextureFormats, filterFormatsByFeature, - viewCompatible, -} from '../../format_info.js'; + viewCompatible } from +'../../format_info.js'; import { GPUTest } from '../../gpu_test.js'; import { kAllCanvasTypes, createCanvas } from '../../util/create_elements.js'; export const g = makeTestGroup(GPUTest); -g.test('defaults') - .desc( - ` +g.test('defaults'). +desc( + ` Ensure that the defaults for GPUCanvasConfiguration are correct. ` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - ) - .fn(t => { - const { canvasType } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes) +). +fn((t) => { + const { canvasType } = t.params; + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - ctx.configure({ - device: t.device, - format: 'rgba8unorm', - }); - - const currentTexture = ctx.getCurrentTexture(); - t.expect(currentTexture.format === 'rgba8unorm'); - t.expect(currentTexture.usage === GPUTextureUsage.RENDER_ATTACHMENT); - t.expect(currentTexture.dimension === '2d'); - t.expect(currentTexture.width === canvas.width); - t.expect(currentTexture.height === canvas.height); - t.expect(currentTexture.depthOrArrayLayers === 1); - t.expect(currentTexture.mipLevelCount === 1); - t.expect(currentTexture.sampleCount === 1); + ctx.configure({ + device: t.device, + format: 'rgba8unorm' }); -g.test('device') - .desc( - ` + const currentTexture = ctx.getCurrentTexture(); + t.expect(currentTexture.format === 'rgba8unorm'); + t.expect(currentTexture.usage === GPUTextureUsage.RENDER_ATTACHMENT); + t.expect(currentTexture.dimension === '2d'); + t.expect(currentTexture.width === canvas.width); + t.expect(currentTexture.height === canvas.height); + t.expect(currentTexture.depthOrArrayLayers === 1); + t.expect(currentTexture.mipLevelCount === 1); + t.expect(currentTexture.sampleCount === 1); +}); + +g.test('device'). +desc( + ` Ensure that configure reacts appropriately to various device states. ` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - ) - .fn(t => { - const { canvasType } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes) +). +fn((t) => { + const { canvasType } = t.params; + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - // Calling configure without a device should throw a TypeError. - t.shouldThrow('TypeError', () => { - ctx.configure({ - format: 'rgba8unorm', - }); - }); - - // Device is not configured, so getCurrentTexture will throw an InvalidStateError. - t.shouldThrow('InvalidStateError', () => { - ctx.getCurrentTexture(); - }); - - // Calling configure with a device should succeed. + // Calling configure without a device should throw a TypeError. + t.shouldThrow('TypeError', () => { ctx.configure({ - device: t.device, - format: 'rgba8unorm', + format: 'rgba8unorm' }); + }); - // getCurrentTexture will succeed with a valid device. - ctx.getCurrentTexture(); - - // Unconfiguring should cause the device to be cleared. - ctx.unconfigure(); - t.shouldThrow('InvalidStateError', () => { - ctx.getCurrentTexture(); - }); - - // Should be able to successfully configure again after unconfiguring. - ctx.configure({ - device: t.device, - format: 'rgba8unorm', - }); + // Device is not configured, so getCurrentTexture will throw an InvalidStateError. + t.shouldThrow('InvalidStateError', () => { ctx.getCurrentTexture(); }); -g.test('format') - .desc( - ` + // Calling configure with a device should succeed. + ctx.configure({ + device: t.device, + format: 'rgba8unorm' + }); + + // getCurrentTexture will succeed with a valid device. + ctx.getCurrentTexture(); + + // Unconfiguring should cause the device to be cleared. + ctx.unconfigure(); + t.shouldThrow('InvalidStateError', () => { + ctx.getCurrentTexture(); + }); + + // Should be able to successfully configure again after unconfiguring. + ctx.configure({ + device: t.device, + format: 'rgba8unorm' + }); + ctx.getCurrentTexture(); +}); + +g.test('format'). +desc( + ` Ensure that only valid texture formats are allowed when calling configure. ` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .combine('format', kAllTextureFormats) - ) - .beforeAllSubcases(t => { - t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); - }) - .fn(t => { - const { canvasType, format } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +combine('format', kAllTextureFormats) +). +beforeAllSubcases((t) => { + t.selectDeviceForTextureFormatOrSkipTestCase(t.params.format); +}). +fn((t) => { + const { canvasType, format } = t.params; + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - // Would prefer to use kCanvasTextureFormats.includes(format), but that's giving TS errors. - let validFormat = false; - for (const canvasFormat of kCanvasTextureFormats) { - if (format === canvasFormat) { - validFormat = true; - break; - } + // Would prefer to use kCanvasTextureFormats.includes(format), but that's giving TS errors. + let validFormat = false; + for (const canvasFormat of kCanvasTextureFormats) { + if (format === canvasFormat) { + validFormat = true; + break; } + } - t.expectValidationError(() => { - ctx.configure({ - device: t.device, - format, - }); - }, !validFormat); + t.expectValidationError(() => { + ctx.configure({ + device: t.device, + format + }); + }, !validFormat); - t.expectValidationError(() => { - // Should always return a texture, whether the configured format was valid or not. - const currentTexture = ctx.getCurrentTexture(); - t.expect(currentTexture instanceof GPUTexture); - }, !validFormat); - }); + t.expectValidationError(() => { + // Should always return a texture, whether the configured format was valid or not. + const currentTexture = ctx.getCurrentTexture(); + t.expect(currentTexture instanceof GPUTexture); + }, !validFormat); +}); -g.test('usage') - .desc( - ` +g.test('usage'). +desc( + ` Ensure that getCurrentTexture returns a texture with the configured usages. ` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .beginSubcases() - .expand('usage', p => { - const usageSet = new Set(); - for (const usage0 of kTextureUsages) { - for (const usage1 of kTextureUsages) { - usageSet.add(usage0 | usage1); - } - } - return usageSet; - }) - ) - .fn(t => { - const { canvasType, usage } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - - ctx.configure({ - device: t.device, - format: 'rgba8unorm', - usage, - }); - - const currentTexture = ctx.getCurrentTexture(); - t.expect(currentTexture instanceof GPUTexture); - t.expect(currentTexture.usage === usage); - - // Try to use the texture with the given usage - - if (usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) { - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: currentTexture.createView(), - clearValue: [1.0, 0.0, 0.0, 1.0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.end(); - t.device.queue.submit([encoder.finish()]); +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +beginSubcases(). +expand('usage', () => { + const usageSet = new Set(); + for (const usage0 of kTextureUsages) { + for (const usage1 of kTextureUsages) { + usageSet.add(usage0 | usage1); } + } + return usageSet; +}) +). +fn((t) => { + const { canvasType, usage } = t.params; + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - if (usage & GPUConst.TextureUsage.TEXTURE_BINDING) { - const bgl = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - texture: {}, - }, - ], - }); - - t.device.createBindGroup({ - layout: bgl, - entries: [ - { - binding: 0, - resource: currentTexture.createView(), - }, - ], - }); - } - - if (usage & GPUConst.TextureUsage.STORAGE_BINDING) { - const bgl = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.FRAGMENT, - storageTexture: { access: 'write-only', format: currentTexture.format }, - }, - ], - }); - - t.device.createBindGroup({ - layout: bgl, - entries: [ - { - binding: 0, - resource: currentTexture.createView(), - }, - ], - }); - } - - if (usage & GPUConst.TextureUsage.COPY_DST) { - const rgbaData = new Uint8Array([255, 0, 0, 255]); - - t.device.queue.writeTexture({ texture: currentTexture }, rgbaData, {}, [1, 1, 1]); - } - - if (usage & GPUConst.TextureUsage.COPY_SRC) { - const size = [currentTexture.width, currentTexture.height, 1]; - const dstTexture = t.device.createTexture({ - format: currentTexture.format, - usage: GPUTextureUsage.COPY_DST, - size, - }); - - const encoder = t.device.createCommandEncoder(); - encoder.copyTextureToTexture({ texture: currentTexture }, { texture: dstTexture }, size); - t.device.queue.submit([encoder.finish()]); - } + ctx.configure({ + device: t.device, + format: 'rgba8unorm', + usage }); -g.test('alpha_mode') - .desc( - ` - Ensure that all valid alphaMode values are allowed when calling configure. - ` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .beginSubcases() - .combine('alphaMode', ['opaque', 'premultiplied']) - ) - .fn(t => { - const { canvasType, alphaMode } = t.params; - const canvas = createCanvas(t, canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + const currentTexture = ctx.getCurrentTexture(); + t.expect(currentTexture instanceof GPUTexture); + t.expect(currentTexture.usage === usage); - ctx.configure({ - device: t.device, - format: 'rgba8unorm', - alphaMode, - }); + // Try to use the texture with the given usage - const currentTexture = ctx.getCurrentTexture(); - t.expect(currentTexture instanceof GPUTexture); - }); - -g.test('size_zero_before_configure') - .desc(`Ensure a validation error is raised in configure() if the size of the canvas is zero.`) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .combine('zeroDimension', ['width', 'height']) - ) - .fn(t => { - const { canvasType, zeroDimension } = t.params; - const canvas = createCanvas(t, canvasType, 1, 1); - canvas[zeroDimension] = 0; - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - - // Validation error, the canvas size is 0 which doesn't make a valid GPUTextureDescriptor. - t.expectValidationError(() => { - ctx.configure({ - device: t.device, - format: 'bgra8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }); - }); - - canvas[zeroDimension] = 1; - - // The size being incorrect doesn't make for an invalid configuration. Now that it is fixed - // getting textures from the canvas should work. - const currentTexture = ctx.getCurrentTexture(); - - // Try rendering to it even! + if (usage & GPUConst.TextureUsage.RENDER_ATTACHMENT) { const encoder = t.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: currentTexture.createView(), - clearValue: [1.0, 0.0, 0.0, 1.0], - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: currentTexture.createView(), + clearValue: [1.0, 0.0, 0.0, 1.0], + loadOp: 'clear', + storeOp: 'store' + }] + }); pass.end(); t.device.queue.submit([encoder.finish()]); + } + + if (usage & GPUConst.TextureUsage.TEXTURE_BINDING) { + const bgl = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + texture: {} + }] + + }); + + t.device.createBindGroup({ + layout: bgl, + entries: [ + { + binding: 0, + resource: currentTexture.createView() + }] + + }); + } + + if (usage & GPUConst.TextureUsage.STORAGE_BINDING) { + const bgl = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.FRAGMENT, + storageTexture: { access: 'write-only', format: currentTexture.format } + }] + + }); + + t.device.createBindGroup({ + layout: bgl, + entries: [ + { + binding: 0, + resource: currentTexture.createView() + }] + + }); + } + + if (usage & GPUConst.TextureUsage.COPY_DST) { + const rgbaData = new Uint8Array([255, 0, 0, 255]); + + t.device.queue.writeTexture({ texture: currentTexture }, rgbaData, {}, [1, 1, 1]); + } + + if (usage & GPUConst.TextureUsage.COPY_SRC) { + const size = [currentTexture.width, currentTexture.height, 1]; + const dstTexture = t.device.createTexture({ + format: currentTexture.format, + usage: GPUTextureUsage.COPY_DST, + size + }); + + const encoder = t.device.createCommandEncoder(); + encoder.copyTextureToTexture({ texture: currentTexture }, { texture: dstTexture }, size); + t.device.queue.submit([encoder.finish()]); + } +}); + +g.test('alpha_mode'). +desc( + ` + Ensure that all valid alphaMode values are allowed when calling configure. + ` +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +beginSubcases(). +combine('alphaMode', ['opaque', 'premultiplied']) +). +fn((t) => { + const { canvasType, alphaMode } = t.params; + const canvas = createCanvas(t, canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + + ctx.configure({ + device: t.device, + format: 'rgba8unorm', + alphaMode }); -g.test('size_zero_after_configure') - .desc( - `Ensure a validation error is raised after configure() if the size of the canvas becomes zero.` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .combine('zeroDimension', ['width', 'height']) - ) - .fn(t => { - const { canvasType, zeroDimension } = t.params; - const canvas = createCanvas(t, canvasType, 1, 1); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + const currentTexture = ctx.getCurrentTexture(); + t.expect(currentTexture instanceof GPUTexture); +}); +g.test('size_zero_before_configure'). +desc(`Ensure a validation error is raised in configure() if the size of the canvas is zero.`). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +combine('zeroDimension', ['width', 'height']) +). +fn((t) => { + const { canvasType, zeroDimension } = t.params; + const canvas = createCanvas(t, canvasType, 1, 1); + canvas[zeroDimension] = 0; + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + + // Validation error, the canvas size is 0 which doesn't make a valid GPUTextureDescriptor. + t.expectValidationError(() => { ctx.configure({ device: t.device, format: 'bgra8unorm', - usage: GPUTextureUsage.RENDER_ATTACHMENT, - }); - - canvas[zeroDimension] = 0; - - // The size is incorrect, we should be getting an error texture and a validation error. - let currentTexture; - t.expectValidationError(() => { - currentTexture = ctx.getCurrentTexture(); - }); - - t.expect(currentTexture[zeroDimension] === 0); - - // Using the texture should produce a validation error. - t.expectValidationError(() => { - currentTexture.createView(); + usage: GPUTextureUsage.RENDER_ATTACHMENT }); }); -g.test('viewFormats') - .desc( - `Test the validation that viewFormats are compatible with the format (for all canvas format / view formats)` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .combine('format', kCanvasTextureFormats) - .combine('viewFormatFeature', kFeaturesForFormats) - .beginSubcases() - .expand('viewFormat', ({ viewFormatFeature }) => - filterFormatsByFeature(viewFormatFeature, kTextureFormats) - ) - ) - .beforeAllSubcases(t => { - t.selectDeviceOrSkipTestCase([t.params.viewFormatFeature]); - }) - .fn(t => { - const { canvasType, format, viewFormat } = t.params; + canvas[zeroDimension] = 1; - t.skipIfTextureFormatNotSupported(viewFormat); + // The size being incorrect doesn't make for an invalid configuration. Now that it is fixed + // getting textures from the canvas should work. + const currentTexture = ctx.getCurrentTexture(); - const canvas = createCanvas(t, canvasType, 1, 1); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + // Try rendering to it even! + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: currentTexture.createView(), + clearValue: [1.0, 0.0, 0.0, 1.0], + loadOp: 'clear', + storeOp: 'store' + }] - const compatible = viewCompatible(format, viewFormat); - - // Test configure() produces an error if the formats aren't compatible. - t.expectValidationError(() => { - ctx.configure({ - device: t.device, - format, - viewFormats: [viewFormat], - }); - }, !compatible); - - // Likewise for getCurrentTexture(). - let currentTexture; - t.expectValidationError(() => { - currentTexture = ctx.getCurrentTexture(); - }, !compatible); - - // The returned texture is an error texture. - t.expectValidationError(() => { - currentTexture.createView(); - }, !compatible); }); + pass.end(); + t.device.queue.submit([encoder.finish()]); +}); + +g.test('size_zero_after_configure'). +desc( + `Ensure a validation error is raised after configure() if the size of the canvas becomes zero.` +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +combine('zeroDimension', ['width', 'height']) +). +fn((t) => { + const { canvasType, zeroDimension } = t.params; + const canvas = createCanvas(t, canvasType, 1, 1); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + + ctx.configure({ + device: t.device, + format: 'bgra8unorm', + usage: GPUTextureUsage.RENDER_ATTACHMENT + }); + + canvas[zeroDimension] = 0; + + // The size is incorrect, we should be getting an error texture and a validation error. + let currentTexture; + t.expectValidationError(() => { + currentTexture = ctx.getCurrentTexture(); + }); + + t.expect(currentTexture[zeroDimension] === 0); + + // Using the texture should produce a validation error. + t.expectValidationError(() => { + currentTexture.createView(); + }); +}); + +g.test('viewFormats'). +desc( + `Test the validation that viewFormats are compatible with the format (for all canvas format / view formats)` +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +combine('format', kCanvasTextureFormats). +combine('viewFormatFeature', kFeaturesForFormats). +beginSubcases(). +expand('viewFormat', ({ viewFormatFeature }) => +filterFormatsByFeature(viewFormatFeature, kTextureFormats) +) +). +beforeAllSubcases((t) => { + t.selectDeviceOrSkipTestCase([t.params.viewFormatFeature]); +}). +fn((t) => { + const { canvasType, format, viewFormat } = t.params; + + t.skipIfTextureFormatNotSupported(viewFormat); + + const canvas = createCanvas(t, canvasType, 1, 1); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); + + const compatible = viewCompatible(format, viewFormat); + + // Test configure() produces an error if the formats aren't compatible. + t.expectValidationError(() => { + ctx.configure({ + device: t.device, + format, + viewFormats: [viewFormat] + }); + }, !compatible); + + // Likewise for getCurrentTexture(). + let currentTexture; + t.expectValidationError(() => { + currentTexture = ctx.getCurrentTexture(); + }, !compatible); + + // The returned texture is an error texture. + t.expectValidationError(() => { + currentTexture.createView(); + }, !compatible); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/context_creation.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/context_creation.spec.js index eb4cb7df8e0..d165f7d03a7 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/context_creation.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/context_creation.spec.js @@ -1,48 +1,47 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for canvas context creation. Note there are no context creation attributes for WebGPU (as of this writing). Options are configured in configure() instead. -`; -import { Fixture } from '../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; export const g = makeTestGroup(Fixture); -g.test('return_type') - .desc( - `Test the return type of getContext for WebGPU. +g.test('return_type'). +desc( + `Test the return type of getContext for WebGPU. TODO: Test OffscreenCanvas made from transferControlToOffscreen.` - ) - .params(u => - u // - .combine('offscreen', [false, true]) - .beginSubcases() - .combine('attributes', [undefined, {}]) - ) - .fn(t => { - let canvas; - if (t.params.offscreen) { - if (typeof OffscreenCanvas === 'undefined') { - // Skip if the current context doesn't have OffscreenCanvas (e.g. Node). - t.skip('OffscreenCanvas is not available in this context'); - } - - canvas = new OffscreenCanvas(10, 10); - } else { - if (typeof document === 'undefined') { - // Skip if there is no document (Workers, Node) - t.skip('DOM is not available to create canvas element'); - } - - canvas = document.createElement('canvas', t.params.attributes); - canvas.width = 10; - canvas.height = 10; +). +params((u) => +u // +.combine('offscreen', [false, true]). +beginSubcases(). +combine('attributes', [undefined, {}]) +). +fn((t) => { + let canvas; + if (t.params.offscreen) { + if (typeof OffscreenCanvas === 'undefined') { + // Skip if the current context doesn't have OffscreenCanvas (e.g. Node). + t.skip('OffscreenCanvas is not available in this context'); } - const ctx = canvas.getContext('webgpu'); - t.expect(ctx instanceof GPUCanvasContext); - }); + canvas = new OffscreenCanvas(10, 10); + } else { + if (typeof document === 'undefined') { + // Skip if there is no document (Workers, Node) + t.skip('DOM is not available to create canvas element'); + } + + canvas = document.createElement('canvas', t.params.attributes); + canvas.width = 10; + canvas.height = 10; + } + + const ctx = canvas.getContext('webgpu'); + t.expect(ctx instanceof GPUCanvasContext); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getCurrentTexture.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getCurrentTexture.spec.js index b256be3275d..00e8c3ec24f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getCurrentTexture.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getCurrentTexture.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for GPUCanvasContext.getCurrentTexture. -`; -import { SkipTestCase } from '../../../common/framework/fixture.js'; +`;import { SkipTestCase } from '../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; import { timeout } from '../../../common/util/timeout.js'; import { assert, unreachable } from '../../../common/util/util.js'; @@ -27,7 +26,7 @@ class GPUContextTest extends GPUTest { this.trackForCleanup({ close() { document.body.removeChild(onscreencanvas); - }, + } }); } const ctx = canvas.getContext('webgpu'); @@ -36,7 +35,7 @@ class GPUContextTest extends GPUTest { ctx.configure({ device: this.device, format: kFormat, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, + usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC }); return ctx; @@ -45,245 +44,245 @@ class GPUContextTest extends GPUTest { export const g = makeTestGroup(GPUContextTest); -g.test('configured') - .desc( - `Checks that calling getCurrentTexture requires the context to be configured first, and +g.test('configured'). +desc( + `Checks that calling getCurrentTexture requires the context to be configured first, and that each call to configure causes getCurrentTexture to return a new texture.` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - ) - .fn(t => { - const canvas = createCanvas(t, t.params.canvasType, 2, 2); - const ctx = canvas.getContext('webgpu'); - assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes) +). +fn((t) => { + const canvas = createCanvas(t, t.params.canvasType, 2, 2); + const ctx = canvas.getContext('webgpu'); + assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); - // Calling getCurrentTexture prior to configuration should throw an InvalidStateError exception. - t.shouldThrow('InvalidStateError', () => { - ctx.getCurrentTexture(); - }); - - // Once the context has been configured getCurrentTexture can be called. - ctx.configure({ - device: t.device, - format: kFormat, - }); - - let prevTexture = ctx.getCurrentTexture(); - - // Calling configure again with different values will change the texture returned. - ctx.configure({ - device: t.device, - format: 'bgra8unorm', - }); - - let currentTexture = ctx.getCurrentTexture(); - t.expect(prevTexture !== currentTexture); - prevTexture = currentTexture; - - // Calling configure again with the same values will still change the texture returned. - ctx.configure({ - device: t.device, - format: 'bgra8unorm', - }); - - currentTexture = ctx.getCurrentTexture(); - t.expect(prevTexture !== currentTexture); - prevTexture = currentTexture; - - // Calling getCurrentTexture after calling unconfigure should throw an InvalidStateError exception. - ctx.unconfigure(); - - t.shouldThrow('InvalidStateError', () => { - ctx.getCurrentTexture(); - }); + // Calling getCurrentTexture prior to configuration should throw an InvalidStateError exception. + t.shouldThrow('InvalidStateError', () => { + ctx.getCurrentTexture(); }); -g.test('single_frames') - .desc(`Checks that the value of getCurrentTexture is consistent within a single frame.`) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - ) - .fn(t => { - const ctx = t.initCanvasContext(t.params.canvasType); - const frameTexture = ctx.getCurrentTexture(); - - // Calling getCurrentTexture a second time returns the same texture. - t.expect(frameTexture === ctx.getCurrentTexture()); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: frameTexture.createView(), - clearValue: [1.0, 0.0, 0.0, 1.0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - // Calling getCurrentTexture after performing some work on the texture returns the same texture. - t.expect(frameTexture === ctx.getCurrentTexture()); - - // Ensure that getCurrentTexture does not clear the texture. - t.expectSingleColor(frameTexture, frameTexture.format, { - size: [frameTexture.width, frameTexture.height, 1], - exp: { R: 1, G: 0, B: 0, A: 1 }, - }); - - frameTexture.destroy(); - - // Calling getCurrentTexture after destroying the texture still returns the same texture. - t.expect(frameTexture === ctx.getCurrentTexture()); + // Once the context has been configured getCurrentTexture can be called. + ctx.configure({ + device: t.device, + format: kFormat }); -g.test('multiple_frames') - .desc(`Checks that the value of getCurrentTexture differs across multiple frames.`) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .beginSubcases() - .combine('clearTexture', [true, false]) - ) - .beforeAllSubcases(t => { - const { canvasType } = t.params; - if (canvasType === 'offscreen' && !('transferToImageBitmap' in OffscreenCanvas.prototype)) { - throw new SkipTestCase('transferToImageBitmap not supported'); - } - }) - .fn(t => { - const { canvasType, clearTexture } = t.params; + let prevTexture = ctx.getCurrentTexture(); - return new Promise(resolve => { - const ctx = t.initCanvasContext(canvasType); - let prevTexture; - let frameCount = 0; + // Calling configure again with different values will change the texture returned. + ctx.configure({ + device: t.device, + format: 'bgra8unorm' + }); - function frameCheck() { - const currentTexture = ctx.getCurrentTexture(); + let currentTexture = ctx.getCurrentTexture(); + t.expect(prevTexture !== currentTexture); + prevTexture = currentTexture; - if (prevTexture) { - // Ensure that each frame a new texture object is returned. - t.expect(currentTexture !== prevTexture); + // Calling configure again with the same values will still change the texture returned. + ctx.configure({ + device: t.device, + format: 'bgra8unorm' + }); - // Ensure that texture contents are transparent black. - t.expectSingleColor(currentTexture, currentTexture.format, { - size: [currentTexture.width, currentTexture.height, 1], - exp: { R: 0, G: 0, B: 0, A: 0 }, - }); - } + currentTexture = ctx.getCurrentTexture(); + t.expect(prevTexture !== currentTexture); + prevTexture = currentTexture; - if (clearTexture) { - // Clear the texture to test that texture contents don't carry over from frame to frame. - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginRenderPass({ - colorAttachments: [ - { - view: currentTexture.createView(), - clearValue: [1.0, 0.0, 0.0, 1.0], - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - pass.end(); - t.device.queue.submit([encoder.finish()]); - } + // Calling getCurrentTexture after calling unconfigure should throw an InvalidStateError exception. + ctx.unconfigure(); - prevTexture = currentTexture; + t.shouldThrow('InvalidStateError', () => { + ctx.getCurrentTexture(); + }); +}); - if (frameCount++ < 5) { - // Which method will be used to begin a new "frame"? - switch (canvasType) { - case 'onscreen': - requestAnimationFrame(frameCheck); - break; - case 'offscreen': { +g.test('single_frames'). +desc(`Checks that the value of getCurrentTexture is consistent within a single frame.`). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes) +). +fn((t) => { + const ctx = t.initCanvasContext(t.params.canvasType); + const frameTexture = ctx.getCurrentTexture(); + + // Calling getCurrentTexture a second time returns the same texture. + t.expect(frameTexture === ctx.getCurrentTexture()); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: frameTexture.createView(), + clearValue: [1.0, 0.0, 0.0, 1.0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + // Calling getCurrentTexture after performing some work on the texture returns the same texture. + t.expect(frameTexture === ctx.getCurrentTexture()); + + // Ensure that getCurrentTexture does not clear the texture. + t.expectSingleColor(frameTexture, frameTexture.format, { + size: [frameTexture.width, frameTexture.height, 1], + exp: { R: 1, G: 0, B: 0, A: 1 } + }); + + frameTexture.destroy(); + + // Calling getCurrentTexture after destroying the texture still returns the same texture. + t.expect(frameTexture === ctx.getCurrentTexture()); +}); + +g.test('multiple_frames'). +desc(`Checks that the value of getCurrentTexture differs across multiple frames.`). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +beginSubcases(). +combine('clearTexture', [true, false]) +). +beforeAllSubcases((t) => { + const { canvasType } = t.params; + if (canvasType === 'offscreen' && !('transferToImageBitmap' in OffscreenCanvas.prototype)) { + throw new SkipTestCase('transferToImageBitmap not supported'); + } +}). +fn((t) => { + const { canvasType, clearTexture } = t.params; + + return new Promise((resolve) => { + const ctx = t.initCanvasContext(canvasType); + let prevTexture; + let frameCount = 0; + + function frameCheck() { + const currentTexture = ctx.getCurrentTexture(); + + if (prevTexture) { + // Ensure that each frame a new texture object is returned. + t.expect(currentTexture !== prevTexture); + + // Ensure that texture contents are transparent black. + t.expectSingleColor(currentTexture, currentTexture.format, { + size: [currentTexture.width, currentTexture.height, 1], + exp: { R: 0, G: 0, B: 0, A: 0 } + }); + } + + if (clearTexture) { + // Clear the texture to test that texture contents don't carry over from frame to frame. + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginRenderPass({ + colorAttachments: [ + { + view: currentTexture.createView(), + clearValue: [1.0, 0.0, 0.0, 1.0], + loadOp: 'clear', + storeOp: 'store' + }] + + }); + pass.end(); + t.device.queue.submit([encoder.finish()]); + } + + prevTexture = currentTexture; + + if (frameCount++ < 5) { + // Which method will be used to begin a new "frame"? + switch (canvasType) { + case 'onscreen': + requestAnimationFrame(frameCheck); + break; + case 'offscreen':{ ctx.canvas.transferToImageBitmap(); frameCheck(); break; } - default: - unreachable(); - } - } else { - resolve(); + default: + unreachable(); } + } else { + resolve(); } + } - // Call frameCheck for the first time from requestAnimationFrame - // To make sure two frameChecks are run in different frames for onscreen canvas. - // offscreen canvas doesn't care. - requestAnimationFrame(frameCheck); - }); + // Call frameCheck for the first time from requestAnimationFrame + // To make sure two frameChecks are run in different frames for onscreen canvas. + // offscreen canvas doesn't care. + requestAnimationFrame(frameCheck); + }); +}); + +g.test('resize'). +desc(`Checks the value of getCurrentTexture differs when the canvas is resized.`). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes) +). +fn((t) => { + const ctx = t.initCanvasContext(t.params.canvasType); + let prevTexture = ctx.getCurrentTexture(); + + // Trigger a resize by changing the width. + ctx.canvas.width = 4; + + // When the canvas resizes the texture returned by getCurrentTexture should immediately begin + // returning a new texture matching the update dimensions. + let currentTexture = ctx.getCurrentTexture(); + t.expect(prevTexture !== currentTexture); + t.expect(currentTexture.width === ctx.canvas.width); + t.expect(currentTexture.height === ctx.canvas.height); + + // The width and height of the previous texture should remain unchanged. + t.expect(prevTexture.width === 2); + t.expect(prevTexture.height === 2); + prevTexture = currentTexture; + + // Ensure that texture contents are transparent black. + t.expectSingleColor(currentTexture, currentTexture.format, { + size: [currentTexture.width, currentTexture.height, 1], + exp: { R: 0, G: 0, B: 0, A: 0 } }); -g.test('resize') - .desc(`Checks the value of getCurrentTexture differs when the canvas is resized.`) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - ) - .fn(t => { - const ctx = t.initCanvasContext(t.params.canvasType); - let prevTexture = ctx.getCurrentTexture(); + // Trigger a resize by changing the height. + ctx.canvas.height = 4; - // Trigger a resize by changing the width. - ctx.canvas.width = 4; + // Check to ensure the texture is resized again. + currentTexture = ctx.getCurrentTexture(); + t.expect(prevTexture !== currentTexture); + t.expect(currentTexture.width === ctx.canvas.width); + t.expect(currentTexture.height === ctx.canvas.height); + t.expect(prevTexture.width === 4); + t.expect(prevTexture.height === 2); + prevTexture = currentTexture; - // When the canvas resizes the texture returned by getCurrentTexture should immediately begin - // returning a new texture matching the update dimensions. - let currentTexture = ctx.getCurrentTexture(); - t.expect(prevTexture !== currentTexture); - t.expect(currentTexture.width === ctx.canvas.width); - t.expect(currentTexture.height === ctx.canvas.height); - - // The width and height of the previous texture should remain unchanged. - t.expect(prevTexture.width === 2); - t.expect(prevTexture.height === 2); - prevTexture = currentTexture; - - // Ensure that texture contents are transparent black. - t.expectSingleColor(currentTexture, currentTexture.format, { - size: [currentTexture.width, currentTexture.height, 1], - exp: { R: 0, G: 0, B: 0, A: 0 }, - }); - - // Trigger a resize by changing the height. - ctx.canvas.height = 4; - - // Check to ensure the texture is resized again. - currentTexture = ctx.getCurrentTexture(); - t.expect(prevTexture !== currentTexture); - t.expect(currentTexture.width === ctx.canvas.width); - t.expect(currentTexture.height === ctx.canvas.height); - t.expect(prevTexture.width === 4); - t.expect(prevTexture.height === 2); - prevTexture = currentTexture; - - // Ensure that texture contents are transparent black. - t.expectSingleColor(currentTexture, currentTexture.format, { - size: [currentTexture.width, currentTexture.height, 1], - exp: { R: 0, G: 0, B: 0, A: 0 }, - }); - - // Simply setting the canvas width and height values to their current values should not trigger - // a change in the texture. - ctx.canvas.width = 4; - ctx.canvas.height = 4; - - currentTexture = ctx.getCurrentTexture(); - t.expect(prevTexture === currentTexture); + // Ensure that texture contents are transparent black. + t.expectSingleColor(currentTexture, currentTexture.format, { + size: [currentTexture.width, currentTexture.height, 1], + exp: { R: 0, G: 0, B: 0, A: 0 } }); -g.test('expiry') - .desc( - ` + // Simply setting the canvas width and height values to their current values should not trigger + // a change in the texture. + ctx.canvas.width = 4; + ctx.canvas.height = 4; + + currentTexture = ctx.getCurrentTexture(); + t.expect(prevTexture === currentTexture); +}); + +g.test('expiry'). +desc( + ` Test automatic WebGPU canvas texture expiry on all canvas types with the following requirements: - getCurrentTexture returns the same texture object until the next task: - after previous frame update the rendering @@ -301,84 +300,84 @@ TODO: test more canvas types, and ways to update the rendering - canvas is added to DOM after being rendered - canvas is already in DOM but becomes visible after being rendered ` - ) - .params(u => - u // - .combine('canvasType', kAllCanvasTypes) - .combine('prevFrameCallsite', ['runInNewCanvasFrame', 'requestAnimationFrame']) - .combine('getCurrentTextureAgain', [true, false]) - ) - .fn(t => { - const { canvasType, prevFrameCallsite, getCurrentTextureAgain } = t.params; - const ctx = t.initCanvasContext(t.params.canvasType); - // Create a bindGroupLayout to test invalid texture view usage later. - const bgl = t.device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - texture: {}, - }, - ], - }); +). +params((u) => +u // +.combine('canvasType', kAllCanvasTypes). +combine('prevFrameCallsite', ['runInNewCanvasFrame', 'requestAnimationFrame']). +combine('getCurrentTextureAgain', [true, false]) +). +fn((t) => { + const { canvasType, prevFrameCallsite, getCurrentTextureAgain } = t.params; + const ctx = t.initCanvasContext(t.params.canvasType); + // Create a bindGroupLayout to test invalid texture view usage later. + const bgl = t.device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + texture: {} + }] - // The fn is called immediately after previous frame updating the rendering. - // Polyfill by calling the callback by setTimeout, in the requestAnimationFrame callback (for onscreen canvas) - // or after transferToImageBitmap (for offscreen canvas). - function runInNewCanvasFrame(fn) { - switch (canvasType) { - case 'onscreen': - requestAnimationFrame(() => timeout(fn)); - break; - case 'offscreen': - // for offscreen canvas, after calling transferToImageBitmap, we are in a new frame immediately - ctx.canvas.transferToImageBitmap(); - fn(); - break; - default: - unreachable(); - } + }); + + // The fn is called immediately after previous frame updating the rendering. + // Polyfill by calling the callback by setTimeout, in the requestAnimationFrame callback (for onscreen canvas) + // or after transferToImageBitmap (for offscreen canvas). + function runInNewCanvasFrame(fn) { + switch (canvasType) { + case 'onscreen': + requestAnimationFrame(() => timeout(fn)); + break; + case 'offscreen': + // for offscreen canvas, after calling transferToImageBitmap, we are in a new frame immediately + ctx.canvas.transferToImageBitmap(); + fn(); + break; + default: + unreachable(); } + } - function checkGetCurrentTexture() { - // Call getCurrentTexture on previous frame. - const prevTexture = ctx.getCurrentTexture(); + function checkGetCurrentTexture() { + // Call getCurrentTexture on previous frame. + const prevTexture = ctx.getCurrentTexture(); - // Call getCurrentTexture immediately after the frame, the texture object should stay the same. - queueMicrotask(() => { + // Call getCurrentTexture immediately after the frame, the texture object should stay the same. + queueMicrotask(() => { + if (getCurrentTextureAgain) { + t.expect(prevTexture === ctx.getCurrentTexture()); + } + + // Call getCurrentTexture in a new frame. + // It should expire the previous texture object return a new texture object by the next frame by then. + // Call runInNewCanvasFrame in the micro task to make sure the new frame run after the getCurrentTexture in the micro task for offscreen canvas. + runInNewCanvasFrame(() => { if (getCurrentTextureAgain) { - t.expect(prevTexture === ctx.getCurrentTexture()); + t.expect(prevTexture !== ctx.getCurrentTexture()); } - // Call getCurrentTexture in a new frame. - // It should expire the previous texture object return a new texture object by the next frame by then. - // Call runInNewCanvasFrame in the micro task to make sure the new frame run after the getCurrentTexture in the micro task for offscreen canvas. - runInNewCanvasFrame(() => { - if (getCurrentTextureAgain) { - t.expect(prevTexture !== ctx.getCurrentTexture()); - } - - // Event when prevTexture expired, createView should still succeed anyway. - const prevTextureView = prevTexture.createView(); - // Using the invalid view should fail if it expires. - t.expectValidationError(() => { - t.device.createBindGroup({ - layout: bgl, - entries: [{ binding: 0, resource: prevTextureView }], - }); + // Event when prevTexture expired, createView should still succeed anyway. + const prevTextureView = prevTexture.createView(); + // Using the invalid view should fail if it expires. + t.expectValidationError(() => { + t.device.createBindGroup({ + layout: bgl, + entries: [{ binding: 0, resource: prevTextureView }] }); }); }); - } + }); + } - switch (prevFrameCallsite) { - case 'runInNewCanvasFrame': - runInNewCanvasFrame(checkGetCurrentTexture); - break; - case 'requestAnimationFrame': - requestAnimationFrame(checkGetCurrentTexture); - break; - default: - break; - } - }); + switch (prevFrameCallsite) { + case 'runInNewCanvasFrame': + runInNewCanvasFrame(checkGetCurrentTexture); + break; + case 'requestAnimationFrame': + requestAnimationFrame(checkGetCurrentTexture); + break; + default: + break; + } +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getPreferredCanvasFormat.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getPreferredCanvasFormat.spec.js index f358fe7188f..6c981939820 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getPreferredCanvasFormat.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/getPreferredCanvasFormat.spec.js @@ -1,20 +1,19 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for navigator.gpu.getPreferredCanvasFormat. -`; -import { Fixture } from '../../../common/framework/fixture.js'; +`;import { Fixture } from '../../../common/framework/fixture.js'; import { makeTestGroup } from '../../../common/framework/test_group.js'; export const g = makeTestGroup(Fixture); -g.test('value') - .desc( - ` +g.test('value'). +desc( + ` Ensure getPreferredCanvasFormat returns one of the valid values. ` - ) - .fn(t => { - const preferredFormat = navigator.gpu.getPreferredCanvasFormat(); - t.expect(preferredFormat === 'bgra8unorm' || preferredFormat === 'rgba8unorm'); - }); +). +fn((t) => { + const preferredFormat = navigator.gpu.getPreferredCanvasFormat(); + t.expect(preferredFormat === 'bgra8unorm' || preferredFormat === 'rgba8unorm'); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/readbackFromWebGPUCanvas.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/readbackFromWebGPUCanvas.spec.js index 353f217440f..05b422f8ea0 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/readbackFromWebGPUCanvas.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/canvas/readbackFromWebGPUCanvas.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for readback from WebGPU Canvas. This includes testing that colorSpace makes it through from the WebGPU canvas @@ -13,17 +13,21 @@ canvas and also drawn into another 2D canvas of a different color space (B). The contents of A and B should match. TODO: implement all canvas types, see TODO on kCanvasTypes. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { assert, raceWithRejectOnTimeout, unreachable } from '../../../common/util/util.js'; import { kCanvasAlphaModes, kCanvasColorSpaces, - kCanvasTextureFormats, -} from '../../capability_info.js'; + kCanvasTextureFormats } from +'../../capability_info.js'; import { GPUTest } from '../../gpu_test.js'; import { checkElementsEqual } from '../../util/check_contents.js'; -import { kAllCanvasTypes, createCanvas, createOnscreenCanvas } from '../../util/create_elements.js'; +import { + kAllCanvasTypes, + + createCanvas, + createOnscreenCanvas } from +'../../util/create_elements.js'; export const g = makeTestGroup(GPUTest); @@ -41,46 +45,29 @@ const kPixelValueFloat = 0x66 / 0xff; // 0.4 // red: bottom-left; // yellow: bottom-right; const expect = { - opaque: new Uint8ClampedArray([ - 0, - 0, - kPixelValue, - 0xff, // blue - 0, - kPixelValue, - 0, - 0xff, // green - kPixelValue, - 0, - 0, - 0xff, // red - kPixelValue, - kPixelValue, - 0, - 0xff, // yellow + + 'opaque': new Uint8ClampedArray([ + 0x00, 0x00, kPixelValue, 0xff, // blue + 0x00, kPixelValue, 0x00, 0xff, // green + kPixelValue, 0x00, 0x00, 0xff, // red + kPixelValue, kPixelValue, 0x00, 0xff // yellow ]), - premultiplied: new Uint8ClampedArray([ - 0, - 0, - 0xff, - kPixelValue, // blue - 0, - 0xff, - 0, - kPixelValue, // green - 0xff, - 0, - 0, - kPixelValue, // red - 0xff, - 0xff, - 0, - kPixelValue, // yellow - ]), + 'premultiplied': new Uint8ClampedArray([ + 0x00, 0x00, 0xff, kPixelValue, // blue + 0x00, 0xff, 0x00, kPixelValue, // green + 0xff, 0x00, 0x00, kPixelValue, // red + 0xff, 0xff, 0x00, kPixelValue // yellow + ]) }; -function initWebGPUCanvasContent(t, format, alphaMode, colorSpace, canvasType) { +function initWebGPUCanvasContent( +t, +format, +alphaMode, +colorSpace, +canvasType) +{ const canvas = createCanvas(t, canvasType, 2, 2); const ctx = canvas.getContext('webgpu'); assert(ctx instanceof GPUCanvasContext, 'Failed to get WebGPU context from canvas'); @@ -90,14 +77,14 @@ function initWebGPUCanvasContent(t, format, alphaMode, colorSpace, canvasType) { format, usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, alphaMode, - colorSpace, + colorSpace }); const canvasTexture = ctx.getCurrentTexture(); const tempTexture = t.device.createTexture({ size: { width: 1, height: 1, depthOrArrayLayers: 1 }, format, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); const tempTextureView = tempTexture.createView(); const encoder = t.device.createCommandEncoder(); @@ -105,8 +92,8 @@ function initWebGPUCanvasContent(t, format, alphaMode, colorSpace, canvasType) { const clearOnePixel = (origin, color) => { const pass = encoder.beginRenderPass({ colorAttachments: [ - { view: tempTextureView, clearValue: color, loadOp: 'clear', storeOp: 'store' }, - ], + { view: tempTextureView, clearValue: color, loadOp: 'clear', storeOp: 'store' }] + }); pass.end(); encoder.copyTextureToTexture( @@ -127,7 +114,11 @@ function initWebGPUCanvasContent(t, format, alphaMode, colorSpace, canvasType) { return canvas; } -function drawImageSourceIntoCanvas(t, image, colorSpace) { +function drawImageSourceIntoCanvas( +t, +image, +colorSpace) +{ const canvas = createOnscreenCanvas(t, 2, 2); const ctx = canvas.getContext('2d', { colorSpace }); assert(ctx !== null); @@ -135,12 +126,22 @@ function drawImageSourceIntoCanvas(t, image, colorSpace) { return ctx; } -function checkImageResultWithSameColorSpaceCanvas(t, image, sourceColorSpace, expect) { +function checkImageResultWithSameColorSpaceCanvas( +t, +image, +sourceColorSpace, +expect) +{ const ctx = drawImageSourceIntoCanvas(t, image, sourceColorSpace); readPixelsFrom2DCanvasAndCompare(t, ctx, expect); } -function checkImageResultWithDifferentColorSpaceCanvas(t, image, sourceColorSpace, sourceData) { +function checkImageResultWithDifferentColorSpaceCanvas( +t, +image, +sourceColorSpace, +sourceData) +{ const destinationColorSpace = sourceColorSpace === 'srgb' ? 'display-p3' : 'srgb'; // draw the WebGPU derived data into a canvas @@ -164,20 +165,29 @@ function checkImageResultWithDifferentColorSpaceCanvas(t, image, sourceColorSpac readPixelsFrom2DCanvasAndCompare(t, fromWebGPUCtx, expect); } -function checkImageResult(t, image, sourceColorSpace, expect) { +function checkImageResult( +t, +image, +sourceColorSpace, +expect) +{ checkImageResultWithSameColorSpaceCanvas(t, image, sourceColorSpace, expect); checkImageResultWithDifferentColorSpaceCanvas(t, image, sourceColorSpace, expect); } -function readPixelsFrom2DCanvasAndCompare(t, ctx, expect) { +function readPixelsFrom2DCanvasAndCompare( +t, +ctx, +expect) +{ const actual = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height).data; t.expectOK(checkElementsEqual(actual, expect)); } -g.test('onscreenCanvas,snapshot') - .desc( - ` +g.test('onscreenCanvas,snapshot'). +desc( + ` Ensure snapshot of canvas with WebGPU context is correct with - various WebGPU canvas texture formats - WebGPU canvas alpha mode = {"opaque", "premultiplied"} @@ -187,26 +197,26 @@ g.test('onscreenCanvas,snapshot') TODO: Snapshot canvas to jpeg, webp and other mime type and different quality. Maybe we should test them in reftest. ` - ) - .params(u => - u // - .combine('format', kCanvasTextureFormats) - .combine('alphaMode', kCanvasAlphaModes) - .combine('colorSpace', kCanvasColorSpaces) - .combine('snapshotType', ['toDataURL', 'toBlob', 'imageBitmap']) - ) - .fn(async t => { - const canvas = initWebGPUCanvasContent( - t, - t.params.format, - t.params.alphaMode, - t.params.colorSpace, - 'onscreen' - ); +). +params((u) => +u // +.combine('format', kCanvasTextureFormats). +combine('alphaMode', kCanvasAlphaModes). +combine('colorSpace', kCanvasColorSpaces). +combine('snapshotType', ['toDataURL', 'toBlob', 'imageBitmap']) +). +fn(async (t) => { + const canvas = initWebGPUCanvasContent( + t, + t.params.format, + t.params.alphaMode, + t.params.colorSpace, + 'onscreen' + ); - let snapshot; - switch (t.params.snapshotType) { - case 'toDataURL': { + let snapshot; + switch (t.params.snapshotType) { + case 'toDataURL':{ const url = canvas.toDataURL(); const img = new Image(canvas.width, canvas.height); img.src = url; @@ -214,9 +224,9 @@ g.test('onscreenCanvas,snapshot') snapshot = img; break; } - case 'toBlob': { - const blobFromCanvas = new Promise(resolve => { - canvas.toBlob(blob => resolve(blob)); + case 'toBlob':{ + const blobFromCanvas = new Promise((resolve) => { + canvas.toBlob((blob) => resolve(blob)); }); const blob = await blobFromCanvas; const url = URL.createObjectURL(blob); @@ -226,20 +236,20 @@ g.test('onscreenCanvas,snapshot') snapshot = img; break; } - case 'imageBitmap': { + case 'imageBitmap':{ snapshot = await createImageBitmap(canvas); break; } - default: - unreachable(); - } + default: + unreachable(); + } - checkImageResult(t, snapshot, t.params.colorSpace, expect[t.params.alphaMode]); - }); + checkImageResult(t, snapshot, t.params.colorSpace, expect[t.params.alphaMode]); +}); -g.test('offscreenCanvas,snapshot') - .desc( - ` +g.test('offscreenCanvas,snapshot'). +desc( + ` Ensure snapshot of offscreenCanvas with WebGPU context is correct with - various WebGPU canvas texture formats - WebGPU canvas alpha mode = {"opaque", "premultiplied"} @@ -249,27 +259,27 @@ g.test('offscreenCanvas,snapshot') TODO: Snapshot offscreenCanvas to jpeg, webp and other mime type and different quality. Maybe we should test them in reftest. ` - ) - .params(u => - u // - .combine('format', kCanvasTextureFormats) - .combine('alphaMode', kCanvasAlphaModes) - .combine('colorSpace', kCanvasColorSpaces) - .combine('snapshotType', ['convertToBlob', 'transferToImageBitmap', 'imageBitmap']) - ) - .fn(async t => { - const offscreenCanvas = initWebGPUCanvasContent( - t, - t.params.format, - t.params.alphaMode, - t.params.colorSpace, - 'offscreen' - ); +). +params((u) => +u // +.combine('format', kCanvasTextureFormats). +combine('alphaMode', kCanvasAlphaModes). +combine('colorSpace', kCanvasColorSpaces). +combine('snapshotType', ['convertToBlob', 'transferToImageBitmap', 'imageBitmap']) +). +fn(async (t) => { + const offscreenCanvas = initWebGPUCanvasContent( + t, + t.params.format, + t.params.alphaMode, + t.params.colorSpace, + 'offscreen' + ); - let snapshot; - switch (t.params.snapshotType) { - case 'convertToBlob': { - if (typeof offscreenCanvas.convertToBlob === undefined) { + let snapshot; + switch (t.params.snapshotType) { + case 'convertToBlob':{ + if (typeof offscreenCanvas.convertToBlob === 'undefined') { t.skip("Browser doesn't support OffscreenCanvas.convertToBlob"); return; } @@ -281,59 +291,59 @@ g.test('offscreenCanvas,snapshot') snapshot = img; break; } - case 'transferToImageBitmap': { - if (typeof offscreenCanvas.transferToImageBitmap === undefined) { + case 'transferToImageBitmap':{ + if (typeof offscreenCanvas.transferToImageBitmap === 'undefined') { t.skip("Browser doesn't support OffscreenCanvas.transferToImageBitmap"); return; } snapshot = offscreenCanvas.transferToImageBitmap(); break; } - case 'imageBitmap': { + case 'imageBitmap':{ snapshot = await createImageBitmap(offscreenCanvas); break; } - default: - unreachable(); - } + default: + unreachable(); + } - checkImageResult(t, snapshot, t.params.colorSpace, expect[t.params.alphaMode]); - }); + checkImageResult(t, snapshot, t.params.colorSpace, expect[t.params.alphaMode]); +}); -g.test('onscreenCanvas,uploadToWebGL') - .desc( - ` +g.test('onscreenCanvas,uploadToWebGL'). +desc( + ` Ensure upload WebGPU context canvas to webgl texture is correct with - various WebGPU canvas texture formats - WebGPU canvas alpha mode = {"opaque", "premultiplied"} - upload methods = {texImage2D, texSubImage2D} ` - ) - .params(u => - u // - .combine('format', kCanvasTextureFormats) - .combine('alphaMode', kCanvasAlphaModes) - .combine('webgl', ['webgl', 'webgl2']) - .combine('upload', ['texImage2D', 'texSubImage2D']) - ) - .fn(t => { - const { format, webgl, upload } = t.params; - const canvas = initWebGPUCanvasContent(t, format, t.params.alphaMode, 'srgb', 'onscreen'); +). +params((u) => +u // +.combine('format', kCanvasTextureFormats). +combine('alphaMode', kCanvasAlphaModes). +combine('webgl', ['webgl', 'webgl2']). +combine('upload', ['texImage2D', 'texSubImage2D']) +). +fn((t) => { + const { format, webgl, upload } = t.params; + const canvas = initWebGPUCanvasContent(t, format, t.params.alphaMode, 'srgb', 'onscreen'); - const expectCanvas = createOnscreenCanvas(t, canvas.width, canvas.height); - const gl = expectCanvas.getContext(webgl); - if (gl === null) { - return; - } + const expectCanvas = createOnscreenCanvas(t, canvas.width, canvas.height); + const gl = expectCanvas.getContext(webgl); + if (gl === null) { + return; + } - const texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); - switch (upload) { - case 'texImage2D': { + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + switch (upload) { + case 'texImage2D':{ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas); break; } - case 'texSubImage2D': { + case 'texSubImage2D':{ gl.texImage2D( gl.TEXTURE_2D, 0, @@ -345,29 +355,28 @@ g.test('onscreenCanvas,uploadToWebGL') gl.UNSIGNED_BYTE, null ); - gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, canvas); break; } - default: - unreachable(); - } + default: + unreachable(); + } - const fb = gl.createFramebuffer(); + const fb = gl.createFramebuffer(); - gl.bindFramebuffer(gl.FRAMEBUFFER, fb); - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); - const pixels = new Uint8Array(canvas.width * canvas.height * 4); - gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, pixels); - const actual = new Uint8ClampedArray(pixels); + const pixels = new Uint8Array(canvas.width * canvas.height * 4); + gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + const actual = new Uint8ClampedArray(pixels); - t.expectOK(checkElementsEqual(actual, expect[t.params.alphaMode])); - }); + t.expectOK(checkElementsEqual(actual, expect[t.params.alphaMode])); +}); -g.test('drawTo2DCanvas') - .desc( - ` +g.test('drawTo2DCanvas'). +desc( + ` Ensure draw WebGPU context canvas to 2d context canvas/offscreenCanvas is correct with - various WebGPU canvas texture formats - WebGPU canvas alpha mode = {"opaque", "premultiplied"} @@ -375,98 +384,98 @@ g.test('drawTo2DCanvas') - WebGPU canvas type = {"onscreen", "offscreen"} - 2d canvas type = {"onscreen", "offscreen"} ` - ) - .params(u => - u // - .combine('format', kCanvasTextureFormats) - .combine('alphaMode', kCanvasAlphaModes) - .combine('colorSpace', kCanvasColorSpaces) - .combine('webgpuCanvasType', kAllCanvasTypes) - .combine('canvas2DType', kAllCanvasTypes) - ) - .fn(t => { - const { format, webgpuCanvasType, alphaMode, colorSpace, canvas2DType } = t.params; +). +params((u) => +u // +.combine('format', kCanvasTextureFormats). +combine('alphaMode', kCanvasAlphaModes). +combine('colorSpace', kCanvasColorSpaces). +combine('webgpuCanvasType', kAllCanvasTypes). +combine('canvas2DType', kAllCanvasTypes) +). +fn((t) => { + const { format, webgpuCanvasType, alphaMode, colorSpace, canvas2DType } = t.params; - const canvas = initWebGPUCanvasContent(t, format, alphaMode, colorSpace, webgpuCanvasType); + const canvas = initWebGPUCanvasContent(t, format, alphaMode, colorSpace, webgpuCanvasType); - const expectCanvas = createCanvas(t, canvas2DType, canvas.width, canvas.height); - const ctx = expectCanvas.getContext('2d'); - if (ctx === null) { - t.skip(canvas2DType + ' canvas cannot get 2d context'); - return; - } + const expectCanvas = createCanvas(t, canvas2DType, canvas.width, canvas.height); + const ctx = expectCanvas.getContext('2d'); + if (ctx === null) { + t.skip(canvas2DType + ' canvas cannot get 2d context'); + return; + } - ctx.drawImage(canvas, 0, 0); - readPixelsFrom2DCanvasAndCompare(t, ctx, expect[t.params.alphaMode]); + ctx.drawImage(canvas, 0, 0); + readPixelsFrom2DCanvasAndCompare(t, ctx, expect[t.params.alphaMode]); +}); + +g.test('transferToImageBitmap_unconfigured_nonzero_size'). +desc( + `Regression test for a crash when calling transferImageBitmap on an unconfigured. Case where the canvas is not empty` +). +fn((t) => { + const canvas = createCanvas(t, 'offscreen', 2, 3); + canvas.getContext('webgpu'); + + // Transferring gives an ImageBitmap of the correct size filled with transparent black. + const ib = canvas.transferToImageBitmap(); + t.expect(ib.width === canvas.width); + t.expect(ib.height === canvas.height); + + const readbackCanvas = document.createElement('canvas'); + readbackCanvas.width = canvas.width; + readbackCanvas.height = canvas.height; + const readbackContext = readbackCanvas.getContext('2d', { + alpha: true }); + if (readbackContext === null) { + t.skip('Cannot get a 2D canvas context'); + return; + } -g.test('transferToImageBitmap_unconfigured_nonzero_size') - .desc( - `Regression test for a crash when calling transferImageBitmap on an unconfigured. Case where the canvas is not empty` - ) - .fn(t => { - const canvas = createCanvas(t, 'offscreen', 2, 3); - canvas.getContext('webgpu'); + // Since there isn't a configuration we expect the ImageBitmap to have the default alphaMode of "opaque". + const expected = new Uint8ClampedArray(canvas.width * canvas.height * 4); + for (let i = 0; i < expected.byteLength; i += 4) { + expected[i + 0] = 0; + expected[i + 1] = 0; + expected[i + 2] = 0; + expected[i + 3] = 255; + } - // Transferring gives an ImageBitmap of the correct size filled with transparent black. - const ib = canvas.transferToImageBitmap(); - t.expect(ib.width === canvas.width); - t.expect(ib.height === canvas.height); + readbackContext.drawImage(ib, 0, 0); + readPixelsFrom2DCanvasAndCompare(t, readbackContext, expected); +}); - const readbackCanvas = document.createElement('canvas'); - readbackCanvas.width = canvas.width; - readbackCanvas.height = canvas.height; - const readbackContext = readbackCanvas.getContext('2d', { - alpha: true, - }); - if (readbackContext === null) { - t.skip('Cannot get a 2D canvas context'); - return; - } - - // Since there isn't a configuration we expect the ImageBitmap to have the default alphaMode of "opaque". - const expected = new Uint8ClampedArray(canvas.width * canvas.height * 4); - for (let i = 0; i < expected.byteLength; i += 4) { - expected[i + 0] = 0; - expected[i + 1] = 0; - expected[i + 2] = 0; - expected[i + 3] = 255; - } - - readbackContext.drawImage(ib, 0, 0); - readPixelsFrom2DCanvasAndCompare(t, readbackContext, expected); - }); - -g.test('transferToImageBitmap_zero_size') - .desc( - `Regression test for a crash when calling transferImageBitmap on an unconfigured. Case where the canvas is empty. +g.test('transferToImageBitmap_zero_size'). +desc( + `Regression test for a crash when calling transferImageBitmap on an unconfigured. Case where the canvas is empty. TODO: Spec and expect a particular Exception type here.` - ) - .params(u => u.combine('configure', [true, false])) - .fn(t => { - const { configure } = t.params; - const canvas = createCanvas(t, 'offscreen', 0, 1); - const ctx = canvas.getContext('webgpu'); +). +params((u) => u.combine('configure', [true, false])). +fn((t) => { + const { configure } = t.params; + const canvas = createCanvas(t, 'offscreen', 0, 1); + const ctx = canvas.getContext('webgpu'); - if (configure) { - t.expectValidationError(() => ctx.configure({ device: t.device, format: 'bgra8unorm' })); - } + if (configure) { + t.expectValidationError(() => ctx.configure({ device: t.device, format: 'bgra8unorm' })); + } - // Transferring would give an empty ImageBitmap which is not possible, so an Exception is thrown. - t.shouldThrow(true, () => { - canvas.transferToImageBitmap(); - }); + // Transferring would give an empty ImageBitmap which is not possible, so an Exception is thrown. + t.shouldThrow(true, () => { + canvas.transferToImageBitmap(); }); +}); -g.test('transferToImageBitmap_huge_size') - .desc(`Regression test for a crash when calling transferImageBitmap on a HUGE canvas.`) - .fn(t => { - const canvas = createCanvas(t, 'offscreen', 1000000, 1000000); - canvas.getContext('webgpu'); +g.test('transferToImageBitmap_huge_size'). +desc(`Regression test for a crash when calling transferImageBitmap on a HUGE canvas.`). +fn((t) => { + const canvas = createCanvas(t, 'offscreen', 1000000, 1000000); + canvas.getContext('webgpu'); - // Transferring to such a HUGE image bitmap would not be possible, so an Exception is thrown. - t.shouldThrow(true, () => { - canvas.transferToImageBitmap(); - }); + // Transferring to such a HUGE image bitmap would not be possible, so an Exception is thrown. + t.shouldThrow(true, () => { + canvas.transferToImageBitmap(); }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageBitmap.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageBitmap.spec.js index 2f7677a492f..e5340e1872b 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageBitmap.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageBitmap.spec.js @@ -1,6 +1,6 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyExternalImageToTexture from ImageBitmaps created from various sources. TODO: Test ImageBitmap generated from all possible ImageBitmapSource, relevant ImageBitmapOptions @@ -10,8 +10,7 @@ TODO: Test ImageBitmap generated from all possible ImageBitmapSource, relevant I but in theory could affect the internal representation of the ImageBitmap.) TODO: Test zero-sized copies from all sources (just make sure params cover it) (e.g. 0x0, 0x4, 4x0). -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { kTextureFormatInfo, kValidTextureFormatsForCopyE2T } from '../../format_info.js'; import { CopyToTextureUtils, kCopySubrectInfo } from '../../util/copy_to_texture.js'; @@ -19,9 +18,9 @@ import { kTestColorsAll, kTestColorsOpaque, makeTestColorsTexelView } from './ut export const g = makeTestGroup(CopyToTextureUtils); -g.test('from_ImageData') - .desc( - ` +g.test('from_ImageData'). +desc( + ` Test ImageBitmap generated from ImageData can be copied to WebGPU texture correctly. These imageBitmaps are highly possible living in CPU back resource. @@ -46,103 +45,103 @@ g.test('from_ImageData') And the expected results are all passed. ` - ) - .params(u => - u - .combine('alpha', ['none', 'premultiply']) - .combine('orientation', ['none', 'flipY']) - .combine('colorSpaceConversion', ['none', 'default']) - .combine('srcFlipYInCopy', [true, false]) - .combine('dstFormat', kValidTextureFormatsForCopyE2T) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15, 255, 256]) - .combine('height', [1, 2, 4, 15, 255, 256]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstFormat); - }) - .fn(async t => { - const { - width, - height, - alpha, - orientation, - colorSpaceConversion, - dstFormat, - dstPremultiplied, - srcFlipYInCopy, - } = t.params; +). +params((u) => +u. +combine('alpha', ['none', 'premultiply']). +combine('orientation', ['none', 'flipY']). +combine('colorSpaceConversion', ['none', 'default']). +combine('srcFlipYInCopy', [true, false]). +combine('dstFormat', kValidTextureFormatsForCopyE2T). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15, 255, 256]). +combine('height', [1, 2, 4, 15, 255, 256]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstFormat); +}). +fn(async (t) => { + const { + width, + height, + alpha, + orientation, + colorSpaceConversion, + dstFormat, + dstPremultiplied, + srcFlipYInCopy + } = t.params; - const testColors = kTestColorsAll; + const testColors = kTestColorsAll; - // Generate correct expected values - const texelViewSource = makeTestColorsTexelView({ - testColors, - format: 'rgba8unorm', // ImageData is always in rgba8unorm format. - width, - height, - flipY: false, - premultiplied: false, - }); - const imageData = new ImageData(width, height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: width * 4, - rowsPerImage: height, - subrectOrigin: [0, 0], - subrectSize: { width, height }, - }); - - const imageBitmap = await createImageBitmap(imageData, { - premultiplyAlpha: alpha, - imageOrientation: orientation, - colorSpaceConversion, - }); - - const dst = t.device.createTexture({ - size: { width, height }, - format: dstFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const expFormat = kTextureFormatInfo[dstFormat].baseFormat ?? dstFormat; - const flipSrcBeforeCopy = orientation === 'flipY'; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin: [0, 0], - srcSize: [width, height], - dstOrigin: [0, 0], - dstSize: [width, height], - subRectSize: [width, height], - format: expFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy: srcFlipYInCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { source: imageBitmap, origin: { x: 0, y: 0 }, flipY: srcFlipYInCopy }, - { - texture: dst, - origin: { x: 0, y: 0 }, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - { width, height, depthOrArrayLayers: 1 }, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate correct expected values + const texelViewSource = makeTestColorsTexelView({ + testColors, + format: 'rgba8unorm', // ImageData is always in rgba8unorm format. + width, + height, + flipY: false, + premultiplied: false + }); + const imageData = new ImageData(width, height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: width * 4, + rowsPerImage: height, + subrectOrigin: [0, 0], + subrectSize: { width, height } }); -g.test('from_canvas') - .desc( - ` + const imageBitmap = await createImageBitmap(imageData, { + premultiplyAlpha: alpha, + imageOrientation: orientation, + colorSpaceConversion + }); + + const dst = t.device.createTexture({ + size: { width, height }, + format: dstFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const expFormat = kTextureFormatInfo[dstFormat].baseFormat ?? dstFormat; + const flipSrcBeforeCopy = orientation === 'flipY'; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin: [0, 0], + srcSize: [width, height], + dstOrigin: [0, 0], + dstSize: [width, height], + subRectSize: [width, height], + format: expFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy: srcFlipYInCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { source: imageBitmap, origin: { x: 0, y: 0 }, flipY: srcFlipYInCopy }, + { + texture: dst, + origin: { x: 0, y: 0 }, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + { width, height, depthOrArrayLayers: 1 }, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); + +g.test('from_canvas'). +desc( + ` Test ImageBitmap generated from canvas/offscreenCanvas can be copied to WebGPU texture correctly. These imageBitmaps are highly possible living in GPU back resource. @@ -167,129 +166,129 @@ g.test('from_canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('orientation', ['none', 'flipY']) - .combine('colorSpaceConversion', ['none', 'default']) - .combine('srcFlipYInCopy', [true, false]) - .combine('dstFormat', kValidTextureFormatsForCopyE2T) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15, 255, 256]) - .combine('height', [1, 2, 4, 15, 255, 256]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstFormat); - }) - .fn(async t => { - const { - width, - height, - orientation, - colorSpaceConversion, - dstFormat, - dstPremultiplied, - srcFlipYInCopy, - } = t.params; +). +params((u) => +u. +combine('orientation', ['none', 'flipY']). +combine('colorSpaceConversion', ['none', 'default']). +combine('srcFlipYInCopy', [true, false]). +combine('dstFormat', kValidTextureFormatsForCopyE2T). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15, 255, 256]). +combine('height', [1, 2, 4, 15, 255, 256]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstFormat); +}). +fn(async (t) => { + const { + width, + height, + orientation, + colorSpaceConversion, + dstFormat, + dstPremultiplied, + srcFlipYInCopy + } = t.params; - // CTS sometimes runs on worker threads, where document is not available. - // In this case, OffscreenCanvas can be used instead of . - // But some browsers don't support OffscreenCanvas, and some don't - // support '2d' contexts on OffscreenCanvas. - // In this situation, the case will be skipped. - let imageCanvas; - if (typeof document !== 'undefined') { - imageCanvas = document.createElement('canvas'); - imageCanvas.width = width; - imageCanvas.height = height; - } else if (typeof OffscreenCanvas === 'undefined') { - t.skip('OffscreenCanvas is not supported'); - return; - } else { - imageCanvas = new OffscreenCanvas(width, height); - } - const imageCanvasContext = imageCanvas.getContext('2d'); - if (imageCanvasContext === null) { - t.skip('OffscreenCanvas "2d" context not available'); - return; - } + // CTS sometimes runs on worker threads, where document is not available. + // In this case, OffscreenCanvas can be used instead of . + // But some browsers don't support OffscreenCanvas, and some don't + // support '2d' contexts on OffscreenCanvas. + // In this situation, the case will be skipped. + let imageCanvas; + if (typeof document !== 'undefined') { + imageCanvas = document.createElement('canvas'); + imageCanvas.width = width; + imageCanvas.height = height; + } else if (typeof OffscreenCanvas === 'undefined') { + t.skip('OffscreenCanvas is not supported'); + return; + } else { + imageCanvas = new OffscreenCanvas(width, height); + } + const imageCanvasContext = imageCanvas.getContext('2d'); + if (imageCanvasContext === null) { + t.skip('OffscreenCanvas "2d" context not available'); + return; + } - // Generate non-transparent pixel data to avoid canvas - // different opt behaviour on putImageData() - // from browsers. - const texelViewSource = makeTestColorsTexelView({ - testColors: kTestColorsOpaque, - format: 'rgba8unorm', // ImageData is always in rgba8unorm format. - width, - height, - flipY: false, - premultiplied: false, - }); - // Generate correct expected values - const imageData = new ImageData(width, height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: width * 4, - rowsPerImage: height, - subrectOrigin: [0, 0], - subrectSize: { width, height }, - }); - - // Use putImageData to prevent color space conversion. - imageCanvasContext.putImageData(imageData, 0, 0); - - // MAINTENANCE_TODO: Workaround for @types/offscreencanvas missing an overload of - // `createImageBitmap` that takes `ImageBitmapOptions`. - const imageBitmap = await createImageBitmap(imageCanvas, { - premultiplyAlpha: 'premultiply', - imageOrientation: orientation, - colorSpaceConversion, - }); - - const dst = t.device.createTexture({ - size: { width, height }, - format: dstFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const expFormat = kTextureFormatInfo[dstFormat].baseFormat ?? dstFormat; - const flipSrcBeforeCopy = orientation === 'flipY'; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin: [0, 0], - srcSize: [width, height], - dstOrigin: [0, 0], - dstSize: [width, height], - subRectSize: [width, height], - format: expFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy: srcFlipYInCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { source: imageBitmap, origin: { x: 0, y: 0 }, flipY: srcFlipYInCopy }, - { - texture: dst, - origin: { x: 0, y: 0 }, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - { width, height, depthOrArrayLayers: 1 }, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate non-transparent pixel data to avoid canvas + // different opt behaviour on putImageData() + // from browsers. + const texelViewSource = makeTestColorsTexelView({ + testColors: kTestColorsOpaque, + format: 'rgba8unorm', // ImageData is always in rgba8unorm format. + width, + height, + flipY: false, + premultiplied: false + }); + // Generate correct expected values + const imageData = new ImageData(width, height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: width * 4, + rowsPerImage: height, + subrectOrigin: [0, 0], + subrectSize: { width, height } }); -g.test('copy_subrect_from_ImageData') - .desc( - ` + // Use putImageData to prevent color space conversion. + imageCanvasContext.putImageData(imageData, 0, 0); + + // MAINTENANCE_TODO: Workaround for @types/offscreencanvas missing an overload of + // `createImageBitmap` that takes `ImageBitmapOptions`. + const imageBitmap = await createImageBitmap(imageCanvas, { + premultiplyAlpha: 'premultiply', + imageOrientation: orientation, + colorSpaceConversion + }); + + const dst = t.device.createTexture({ + size: { width, height }, + format: dstFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const expFormat = kTextureFormatInfo[dstFormat].baseFormat ?? dstFormat; + const flipSrcBeforeCopy = orientation === 'flipY'; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin: [0, 0], + srcSize: [width, height], + dstOrigin: [0, 0], + dstSize: [width, height], + subRectSize: [width, height], + format: expFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy: srcFlipYInCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { source: imageBitmap, origin: { x: 0, y: 0 }, flipY: srcFlipYInCopy }, + { + texture: dst, + origin: { x: 0, y: 0 }, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + { width, height, depthOrArrayLayers: 1 }, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); + +g.test('copy_subrect_from_ImageData'). +desc( + ` Test ImageBitmap generated from ImageData can be copied to WebGPU texture correctly. These imageBitmaps are highly possible living in CPU back resource. @@ -316,97 +315,97 @@ g.test('copy_subrect_from_ImageData') And the expected results are all passed. ` - ) - .params(u => - u - .combine('alpha', ['none', 'premultiply']) - .combine('orientation', ['none', 'flipY']) - .combine('colorSpaceConversion', ['none', 'default']) - .combine('srcFlipYInCopy', [true, false]) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('copySubRectInfo', kCopySubrectInfo) - ) - .fn(async t => { - const { - copySubRectInfo, - alpha, - orientation, - colorSpaceConversion, - dstPremultiplied, - srcFlipYInCopy, - } = t.params; +). +params((u) => +u. +combine('alpha', ['none', 'premultiply']). +combine('orientation', ['none', 'flipY']). +combine('colorSpaceConversion', ['none', 'default']). +combine('srcFlipYInCopy', [true, false]). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('copySubRectInfo', kCopySubrectInfo) +). +fn(async (t) => { + const { + copySubRectInfo, + alpha, + orientation, + colorSpaceConversion, + dstPremultiplied, + srcFlipYInCopy + } = t.params; - const testColors = kTestColorsAll; - const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; - const kColorFormat = 'rgba8unorm'; + const testColors = kTestColorsAll; + const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; + const kColorFormat = 'rgba8unorm'; - // Generate correct expected values - const texelViewSource = makeTestColorsTexelView({ - testColors, - format: kColorFormat, // ImageData is always in rgba8unorm format. - width: srcSize.width, - height: srcSize.height, - flipY: false, - premultiplied: false, - }); - const imageData = new ImageData(srcSize.width, srcSize.height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: srcSize.width * 4, - rowsPerImage: srcSize.height, - subrectOrigin: [0, 0], - subrectSize: srcSize, - }); - - const imageBitmap = await createImageBitmap(imageData, { - premultiplyAlpha: alpha, - imageOrientation: orientation, - colorSpaceConversion, - }); - - const dst = t.device.createTexture({ - size: dstSize, - format: kColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const flipSrcBeforeCopy = orientation === 'flipY'; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin, - srcSize, - dstOrigin, - dstSize, - subRectSize: copyExtent, - format: kColorFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy: srcFlipYInCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { source: imageBitmap, origin: srcOrigin, flipY: srcFlipYInCopy }, - { - texture: dst, - origin: dstOrigin, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - copyExtent, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate correct expected values + const texelViewSource = makeTestColorsTexelView({ + testColors, + format: kColorFormat, // ImageData is always in rgba8unorm format. + width: srcSize.width, + height: srcSize.height, + flipY: false, + premultiplied: false + }); + const imageData = new ImageData(srcSize.width, srcSize.height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: srcSize.width * 4, + rowsPerImage: srcSize.height, + subrectOrigin: [0, 0], + subrectSize: srcSize }); -g.test('copy_subrect_from_2D_Canvas') - .desc( - ` + const imageBitmap = await createImageBitmap(imageData, { + premultiplyAlpha: alpha, + imageOrientation: orientation, + colorSpaceConversion + }); + + const dst = t.device.createTexture({ + size: dstSize, + format: kColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const flipSrcBeforeCopy = orientation === 'flipY'; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin, + srcSize, + dstOrigin, + dstSize, + subRectSize: copyExtent, + format: kColorFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy: srcFlipYInCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { source: imageBitmap, origin: srcOrigin, flipY: srcFlipYInCopy }, + { + texture: dst, + origin: dstOrigin, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + copyExtent, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); + +g.test('copy_subrect_from_2D_Canvas'). +desc( + ` Test ImageBitmap generated from canvas/offscreenCanvas can be copied to WebGPU texture correctly. These imageBitmaps are highly possible living in GPU back resource. @@ -433,117 +432,112 @@ g.test('copy_subrect_from_2D_Canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('orientation', ['none', 'flipY']) - .combine('colorSpaceConversion', ['none', 'default']) - .combine('srcFlipYInCopy', [true, false]) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('copySubRectInfo', kCopySubrectInfo) - ) - .fn(async t => { - const { - copySubRectInfo, - orientation, - colorSpaceConversion, - dstPremultiplied, - srcFlipYInCopy, - } = t.params; +). +params((u) => +u. +combine('orientation', ['none', 'flipY']). +combine('colorSpaceConversion', ['none', 'default']). +combine('srcFlipYInCopy', [true, false]). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('copySubRectInfo', kCopySubrectInfo) +). +fn(async (t) => { + const { copySubRectInfo, orientation, colorSpaceConversion, dstPremultiplied, srcFlipYInCopy } = + t.params; - const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; - const kColorFormat = 'rgba8unorm'; + const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; + const kColorFormat = 'rgba8unorm'; - // CTS sometimes runs on worker threads, where document is not available. - // In this case, OffscreenCanvas can be used instead of . - // But some browsers don't support OffscreenCanvas, and some don't - // support '2d' contexts on OffscreenCanvas. - // In this situation, the case will be skipped. - let imageCanvas; - if (typeof document !== 'undefined') { - imageCanvas = document.createElement('canvas'); - imageCanvas.width = srcSize.width; - imageCanvas.height = srcSize.height; - } else if (typeof OffscreenCanvas === 'undefined') { - t.skip('OffscreenCanvas is not supported'); - return; - } else { - imageCanvas = new OffscreenCanvas(srcSize.width, srcSize.height); - } - const imageCanvasContext = imageCanvas.getContext('2d'); - if (imageCanvasContext === null) { - t.skip('OffscreenCanvas "2d" context not available'); - return; - } + // CTS sometimes runs on worker threads, where document is not available. + // In this case, OffscreenCanvas can be used instead of . + // But some browsers don't support OffscreenCanvas, and some don't + // support '2d' contexts on OffscreenCanvas. + // In this situation, the case will be skipped. + let imageCanvas; + if (typeof document !== 'undefined') { + imageCanvas = document.createElement('canvas'); + imageCanvas.width = srcSize.width; + imageCanvas.height = srcSize.height; + } else if (typeof OffscreenCanvas === 'undefined') { + t.skip('OffscreenCanvas is not supported'); + return; + } else { + imageCanvas = new OffscreenCanvas(srcSize.width, srcSize.height); + } + const imageCanvasContext = imageCanvas.getContext('2d'); + if (imageCanvasContext === null) { + t.skip('OffscreenCanvas "2d" context not available'); + return; + } - // Generate non-transparent pixel data to avoid canvas - // different opt behaviour on putImageData() - // from browsers. - const texelViewSource = makeTestColorsTexelView({ - testColors: kTestColorsOpaque, - format: 'rgba8unorm', // ImageData is always in rgba8unorm format. - width: srcSize.width, - height: srcSize.height, - flipY: false, - premultiplied: false, - }); - // Generate correct expected values - const imageData = new ImageData(srcSize.width, srcSize.height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: srcSize.width * 4, - rowsPerImage: srcSize.height, - subrectOrigin: [0, 0], - subrectSize: srcSize, - }); - - // Use putImageData to prevent color space conversion. - imageCanvasContext.putImageData(imageData, 0, 0); - - // MAINTENANCE_TODO: Workaround for @types/offscreencanvas missing an overload of - // `createImageBitmap` that takes `ImageBitmapOptions`. - const imageBitmap = await createImageBitmap(imageCanvas, { - premultiplyAlpha: 'premultiply', - imageOrientation: orientation, - colorSpaceConversion, - }); - - const dst = t.device.createTexture({ - size: dstSize, - format: kColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const flipSrcBeforeCopy = orientation === 'flipY'; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin, - srcSize, - dstOrigin, - dstSize, - subRectSize: copyExtent, - format: kColorFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy: srcFlipYInCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { source: imageBitmap, origin: srcOrigin, flipY: srcFlipYInCopy }, - { - texture: dst, - origin: dstOrigin, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - copyExtent, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate non-transparent pixel data to avoid canvas + // different opt behaviour on putImageData() + // from browsers. + const texelViewSource = makeTestColorsTexelView({ + testColors: kTestColorsOpaque, + format: 'rgba8unorm', // ImageData is always in rgba8unorm format. + width: srcSize.width, + height: srcSize.height, + flipY: false, + premultiplied: false }); + // Generate correct expected values + const imageData = new ImageData(srcSize.width, srcSize.height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: srcSize.width * 4, + rowsPerImage: srcSize.height, + subrectOrigin: [0, 0], + subrectSize: srcSize + }); + + // Use putImageData to prevent color space conversion. + imageCanvasContext.putImageData(imageData, 0, 0); + + // MAINTENANCE_TODO: Workaround for @types/offscreencanvas missing an overload of + // `createImageBitmap` that takes `ImageBitmapOptions`. + const imageBitmap = await createImageBitmap(imageCanvas, { + premultiplyAlpha: 'premultiply', + imageOrientation: orientation, + colorSpaceConversion + }); + + const dst = t.device.createTexture({ + size: dstSize, + format: kColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const flipSrcBeforeCopy = orientation === 'flipY'; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin, + srcSize, + dstOrigin, + dstSize, + subRectSize: copyExtent, + format: kColorFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy: srcFlipYInCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { source: imageBitmap, origin: srcOrigin, flipY: srcFlipYInCopy }, + { + texture: dst, + origin: dstOrigin, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + copyExtent, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageData.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageData.spec.js index fc0bbc51cf4..b285afa6cc2 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageData.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/ImageData.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyExternalImageToTexture from ImageData source. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { kTextureFormatInfo, kValidTextureFormatsForCopyE2T } from '../../format_info.js'; import { CopyToTextureUtils, kCopySubrectInfo } from '../../util/copy_to_texture.js'; @@ -11,9 +10,9 @@ import { kTestColorsAll, makeTestColorsTexelView } from './util.js'; export const g = makeTestGroup(CopyToTextureUtils); -g.test('from_ImageData') - .desc( - ` +g.test('from_ImageData'). +desc( + ` Test ImageData can be copied to WebGPU texture correctly. These imageDatas are highly possible living in CPU back resource. @@ -37,89 +36,89 @@ g.test('from_ImageData') And the expected results are all passed. ` - ) - .params(u => - u - .combine('srcDoFlipYDuringCopy', [true, false]) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15, 255, 256]) - .combine('height', [1, 2, 4, 15, 255, 256]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - }) - .fn(t => { - const { width, height, dstColorFormat, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; +). +params((u) => +u. +combine('srcDoFlipYDuringCopy', [true, false]). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15, 255, 256]). +combine('height', [1, 2, 4, 15, 255, 256]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); +}). +fn((t) => { + const { width, height, dstColorFormat, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; - const testColors = kTestColorsAll; + const testColors = kTestColorsAll; - // Generate correct expected values - const texelViewSource = makeTestColorsTexelView({ - testColors, - format: 'rgba8unorm', // ImageData is always in rgba8unorm format. - width, - height, - flipY: false, - premultiplied: false, - }); - const imageData = new ImageData(width, height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: width * 4, - rowsPerImage: height, - subrectOrigin: [0, 0], - subrectSize: { width, height }, - }); - - const dst = t.device.createTexture({ - size: { width, height }, - format: dstColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const expFormat = kTextureFormatInfo[dstColorFormat].baseFormat ?? dstColorFormat; - const flipSrcBeforeCopy = false; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin: [0, 0], - srcSize: [width, height], - dstOrigin: [0, 0], - dstSize: [width, height], - subRectSize: [width, height], - format: expFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { - source: imageData, - origin: { x: 0, y: 0 }, - flipY: srcDoFlipYDuringCopy, - }, - { - texture: dst, - origin: { x: 0, y: 0 }, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - { width, height, depthOrArrayLayers: 1 }, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate correct expected values + const texelViewSource = makeTestColorsTexelView({ + testColors, + format: 'rgba8unorm', // ImageData is always in rgba8unorm format. + width, + height, + flipY: false, + premultiplied: false + }); + const imageData = new ImageData(width, height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: width * 4, + rowsPerImage: height, + subrectOrigin: [0, 0], + subrectSize: { width, height } }); -g.test('copy_subrect_from_ImageData') - .desc( - ` + const dst = t.device.createTexture({ + size: { width, height }, + format: dstColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const expFormat = kTextureFormatInfo[dstColorFormat].baseFormat ?? dstColorFormat; + const flipSrcBeforeCopy = false; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin: [0, 0], + srcSize: [width, height], + dstOrigin: [0, 0], + dstSize: [width, height], + subRectSize: [width, height], + format: expFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { + source: imageData, + origin: { x: 0, y: 0 }, + flipY: srcDoFlipYDuringCopy + }, + { + texture: dst, + origin: { x: 0, y: 0 }, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + { width, height, depthOrArrayLayers: 1 }, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); + +g.test('copy_subrect_from_ImageData'). +desc( + ` Test ImageData can be copied to WebGPU texture correctly. These imageDatas are highly possible living in CPU back resource. @@ -145,78 +144,78 @@ g.test('copy_subrect_from_ImageData') And the expected results are all passed. ` - ) - .params(u => - u - .combine('srcDoFlipYDuringCopy', [true, false]) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('copySubRectInfo', kCopySubrectInfo) - ) - .fn(t => { - const { copySubRectInfo, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; +). +params((u) => +u. +combine('srcDoFlipYDuringCopy', [true, false]). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('copySubRectInfo', kCopySubrectInfo) +). +fn((t) => { + const { copySubRectInfo, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; - const testColors = kTestColorsAll; - const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; - const kColorFormat = 'rgba8unorm'; + const testColors = kTestColorsAll; + const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; + const kColorFormat = 'rgba8unorm'; - // Generate correct expected values - const texelViewSource = makeTestColorsTexelView({ - testColors, - format: kColorFormat, // ImageData is always in rgba8unorm format. - width: srcSize.width, - height: srcSize.height, - flipY: false, - premultiplied: false, - }); - const imageData = new ImageData(srcSize.width, srcSize.height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: srcSize.width * 4, - rowsPerImage: srcSize.height, - subrectOrigin: [0, 0], - subrectSize: srcSize, - }); - - const dst = t.device.createTexture({ - size: dstSize, - format: kColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const flipSrcBeforeCopy = false; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin, - srcSize, - dstOrigin, - dstSize, - subRectSize: copyExtent, - format: kColorFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { - source: imageData, - origin: srcOrigin, - flipY: srcDoFlipYDuringCopy, - }, - { - texture: dst, - origin: dstOrigin, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - copyExtent, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate correct expected values + const texelViewSource = makeTestColorsTexelView({ + testColors, + format: kColorFormat, // ImageData is always in rgba8unorm format. + width: srcSize.width, + height: srcSize.height, + flipY: false, + premultiplied: false }); + const imageData = new ImageData(srcSize.width, srcSize.height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: srcSize.width * 4, + rowsPerImage: srcSize.height, + subrectOrigin: [0, 0], + subrectSize: srcSize + }); + + const dst = t.device.createTexture({ + size: dstSize, + format: kColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const flipSrcBeforeCopy = false; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin, + srcSize, + dstOrigin, + dstSize, + subRectSize: copyExtent, + format: kColorFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { + source: imageData, + origin: srcOrigin, + flipY: srcDoFlipYDuringCopy + }, + { + texture: dst, + origin: dstOrigin, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + copyExtent, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/canvas.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/canvas.spec.js index c52f7af5879..a8176f0613a 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/canvas.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/canvas.spec.js @@ -1,17 +1,32 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyToTexture with HTMLCanvasElement and OffscreenCanvas sources. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { skipTestCase } from '../../../common/util/util.js'; import { kCanvasAlphaModes } from '../../capability_info.js'; -import { kTextureFormatInfo, kValidTextureFormatsForCopyE2T } from '../../format_info.js'; +import { + kTextureFormatInfo, + kValidTextureFormatsForCopyE2T } from + +'../../format_info.js'; import { CopyToTextureUtils } from '../../util/copy_to_texture.js'; import { kAllCanvasTypes, createCanvas } from '../../util/create_elements.js'; + class F extends CopyToTextureUtils { - init2DCanvasContentWithColorSpace({ width, height, colorSpace }) { + init2DCanvasContentWithColorSpace({ + width, + height, + colorSpace + + + + + }) + + + { const canvas = createCanvas(this, 'onscreen', width, height); let canvasContext = null; @@ -22,9 +37,9 @@ class F extends CopyToTextureUtils { } if ( - typeof canvasContext.getContextAttributes === 'undefined' || - typeof canvasContext.getContextAttributes().colorSpace === 'undefined' - ) { + typeof canvasContext.getContextAttributes === 'undefined' || + typeof canvasContext.getContextAttributes().colorSpace === 'undefined') + { this.skip('color space attr is not supported for canvas 2d context'); } @@ -93,12 +108,23 @@ class F extends CopyToTextureUtils { return { canvas, - expectedSourceData: this.getExpectedReadbackFor2DCanvas(canvasContext, width, height), + expectedSourceData: this.getExpectedReadbackFor2DCanvas(canvasContext, width, height) }; } // MAINTENANCE_TODO: Cache the generated canvas to avoid duplicated initialization. - init2DCanvasContent({ canvasType, width, height }) { + init2DCanvasContent({ + canvasType, + width, + height + + + + + }) + + + { const canvas = createCanvas(this, canvasType, width, height); let canvasContext = null; @@ -113,11 +139,16 @@ class F extends CopyToTextureUtils { return { canvas, - expectedSourceData: this.getExpectedReadbackFor2DCanvas(canvasContext, width, height), + expectedSourceData: this.getExpectedReadbackFor2DCanvas(canvasContext, width, height) }; } - paint2DCanvas(ctx, width, height, alphaValue) { + paint2DCanvas( + ctx, + width, + height, + alphaValue) + { const rectWidth = Math.floor(width / 2); const rectHeight = Math.floor(height / 2); @@ -136,13 +167,28 @@ class F extends CopyToTextureUtils { } // MAINTENANCE_TODO: Cache the generated canvas to avoid duplicated initialization. - initGLCanvasContent({ canvasType, contextName, width, height, premultiplied }) { + initGLCanvasContent({ + canvasType, + contextName, + width, + height, + premultiplied + + + + + + + }) + + + { const canvas = createCanvas(this, canvasType, width, height); // MAINTENANCE_TODO: Workaround for @types/offscreencanvas missing an overload of // `OffscreenCanvas.getContext` that takes `string` or a union of context types. const gl = canvas.getContext(contextName, { - premultipliedAlpha: premultiplied, + premultipliedAlpha: premultiplied }); if (gl === null) { @@ -179,11 +225,15 @@ class F extends CopyToTextureUtils { return { canvas, - expectedSourceData: this.getExpectedReadbackForWebGLCanvas(gl, width, height), + expectedSourceData: this.getExpectedReadbackForWebGLCanvas(gl, width, height) }; } - getDataToInitSourceWebGPUCanvas(width, height, alphaMode) { + getDataToInitSourceWebGPUCanvas( + width, + height, + alphaMode) + { const rectWidth = Math.floor(width / 2); const rectHeight = Math.floor(height / 2); @@ -236,7 +286,22 @@ class F extends CopyToTextureUtils { return initialData; } - initSourceWebGPUCanvas({ device, canvasType, width, height, alphaMode }) { + initSourceWebGPUCanvas({ + device, + canvasType, + width, + height, + alphaMode + + + + + + + }) + + + { const canvas = createCanvas(this, canvasType, width, height); const gpuContext = canvas.getContext('webgpu'); @@ -249,7 +314,7 @@ class F extends CopyToTextureUtils { device, format: 'bgra8unorm', usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC, - alphaMode, + alphaMode }); // BGRA8Unorm texture @@ -260,27 +325,35 @@ class F extends CopyToTextureUtils { initialData, { bytesPerRow: width * 4, - rowsPerImage: height, + rowsPerImage: height }, { width, height, - depthOrArrayLayers: 1, + depthOrArrayLayers: 1 } ); return { canvas, - expectedSourceData: this.getExpectedReadbackForWebGPUCanvas(width, height, alphaMode), + expectedSourceData: this.getExpectedReadbackForWebGPUCanvas(width, height, alphaMode) }; } - getExpectedReadbackFor2DCanvas(context, width, height) { + getExpectedReadbackFor2DCanvas( + context, + width, + height) + { // Always read back the raw data from canvas return context.getImageData(0, 0, width, height).data; } - getExpectedReadbackForWebGLCanvas(gl, width, height) { + getExpectedReadbackForWebGLCanvas( + gl, + width, + height) + { const bytesPerPixel = 4; const sourcePixels = new Uint8ClampedArray(width * height * bytesPerPixel); @@ -289,7 +362,11 @@ class F extends CopyToTextureUtils { return this.doFlipY(sourcePixels, width, height, bytesPerPixel); } - getExpectedReadbackForWebGPUCanvas(width, height, alphaMode) { + getExpectedReadbackForWebGPUCanvas( + width, + height, + alphaMode) + { const bytesPerPixel = 4; const rgbaPixels = this.getDataToInitSourceWebGPUCanvas(width, height, alphaMode); @@ -314,16 +391,27 @@ class F extends CopyToTextureUtils { return rgbaPixels; } - doCopyContentsTest(source, expectedSourceImage, p) { + doCopyContentsTest( + source, + expectedSourceImage, + p) + + + + + + + + { const dst = this.device.createTexture({ size: { width: p.width, height: p.height, - depthOrArrayLayers: 1, + depthOrArrayLayers: 1 }, format: p.dstColorFormat, usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); // Construct expected value for different dst color format @@ -344,8 +432,8 @@ class F extends CopyToTextureUtils { srcDoFlipYDuringCopy: p.srcDoFlipYDuringCopy, conversion: { srcPremultiplied: p.srcPremultiplied, - dstPremultiplied: p.dstPremultiplied, - }, + dstPremultiplied: p.dstPremultiplied + } }); this.doTestAndCheckResult( @@ -354,7 +442,7 @@ class F extends CopyToTextureUtils { texture: dst, origin: { x: 0, y: 0 }, colorSpace: 'srgb', - premultipliedAlpha: p.dstPremultiplied, + premultipliedAlpha: p.dstPremultiplied }, expectedDestinationImage, { width: p.width, height: p.height, depthOrArrayLayers: 1 }, @@ -367,9 +455,9 @@ class F extends CopyToTextureUtils { export const g = makeTestGroup(F); -g.test('copy_contents_from_2d_context_canvas') - .desc( - ` +g.test('copy_contents_from_2d_context_canvas'). +desc( + ` Test HTMLCanvasElement and OffscreenCanvas with 2d context can be copied to WebGPU texture correctly. @@ -396,39 +484,39 @@ g.test('copy_contents_from_2d_context_canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - .combine('dstAlphaMode', kCanvasAlphaModes) - .combine('srcDoFlipYDuringCopy', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15]) - .combine('height', [1, 2, 4, 15]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - }) - .fn(t => { - const { width, height, canvasType, dstAlphaMode } = t.params; +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T). +combine('dstAlphaMode', kCanvasAlphaModes). +combine('srcDoFlipYDuringCopy', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15]). +combine('height', [1, 2, 4, 15]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); +}). +fn((t) => { + const { width, height, canvasType, dstAlphaMode } = t.params; - const { canvas, expectedSourceData } = t.init2DCanvasContent({ - canvasType, - width, - height, - }); - - t.doCopyContentsTest(canvas, expectedSourceData, { - srcPremultiplied: false, - dstPremultiplied: dstAlphaMode === 'premultiplied', - ...t.params, - }); + const { canvas, expectedSourceData } = t.init2DCanvasContent({ + canvasType, + width, + height }); -g.test('copy_contents_from_gl_context_canvas') - .desc( - ` + t.doCopyContentsTest(canvas, expectedSourceData, { + srcPremultiplied: false, + dstPremultiplied: dstAlphaMode === 'premultiplied', + ...t.params + }); +}); + +g.test('copy_contents_from_gl_context_canvas'). +desc( + ` Test HTMLCanvasElement and OffscreenCanvas with webgl/webgl2 context can be copied to WebGPU texture correctly. @@ -458,42 +546,42 @@ g.test('copy_contents_from_gl_context_canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .combine('contextName', ['webgl', 'webgl2']) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - .combine('srcPremultiplied', [true, false]) - .combine('dstAlphaMode', kCanvasAlphaModes) - .combine('srcDoFlipYDuringCopy', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15]) - .combine('height', [1, 2, 4, 15]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - }) - .fn(t => { - const { width, height, canvasType, contextName, srcPremultiplied, dstAlphaMode } = t.params; +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +combine('contextName', ['webgl', 'webgl2']). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T). +combine('srcPremultiplied', [true, false]). +combine('dstAlphaMode', kCanvasAlphaModes). +combine('srcDoFlipYDuringCopy', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15]). +combine('height', [1, 2, 4, 15]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); +}). +fn((t) => { + const { width, height, canvasType, contextName, srcPremultiplied, dstAlphaMode } = t.params; - const { canvas, expectedSourceData } = t.initGLCanvasContent({ - canvasType, - contextName, - width, - height, - premultiplied: srcPremultiplied, - }); - - t.doCopyContentsTest(canvas, expectedSourceData, { - dstPremultiplied: dstAlphaMode === 'premultiplied', - ...t.params, - }); + const { canvas, expectedSourceData } = t.initGLCanvasContent({ + canvasType, + contextName, + width, + height, + premultiplied: srcPremultiplied }); -g.test('copy_contents_from_gpu_context_canvas') - .desc( - ` + t.doCopyContentsTest(canvas, expectedSourceData, { + dstPremultiplied: dstAlphaMode === 'premultiplied', + ...t.params + }); +}); + +g.test('copy_contents_from_gpu_context_canvas'). +desc( + ` Test HTMLCanvasElement and OffscreenCanvas with webgpu context can be copied to WebGPU texture correctly. @@ -526,53 +614,47 @@ g.test('copy_contents_from_gpu_context_canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .combine('srcAndDstInSameGPUDevice', [true, false]) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - // .combine('srcAlphaMode', kCanvasAlphaModes) - .combine('srcAlphaMode', ['premultiplied']) - .combine('dstAlphaMode', kCanvasAlphaModes) - .combine('srcDoFlipYDuringCopy', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15]) - .combine('height', [1, 2, 4, 15]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - t.selectMismatchedDeviceOrSkipTestCase(undefined); - }) - .fn(t => { - const { - width, - height, - canvasType, - srcAndDstInSameGPUDevice, - srcAlphaMode, - dstAlphaMode, - } = t.params; +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +combine('srcAndDstInSameGPUDevice', [true, false]). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T) +// .combine('srcAlphaMode', kCanvasAlphaModes) +.combine('srcAlphaMode', ['premultiplied']). +combine('dstAlphaMode', kCanvasAlphaModes). +combine('srcDoFlipYDuringCopy', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15]). +combine('height', [1, 2, 4, 15]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); + t.selectMismatchedDeviceOrSkipTestCase(undefined); +}). +fn((t) => { + const { width, height, canvasType, srcAndDstInSameGPUDevice, srcAlphaMode, dstAlphaMode } = + t.params; - const device = srcAndDstInSameGPUDevice ? t.device : t.mismatchedDevice; - const { canvas: source, expectedSourceData } = t.initSourceWebGPUCanvas({ - device, - canvasType, - width, - height, - alphaMode: srcAlphaMode, - }); - - t.doCopyContentsTest(source, expectedSourceData, { - srcPremultiplied: srcAlphaMode === 'premultiplied', - dstPremultiplied: dstAlphaMode === 'premultiplied', - ...t.params, - }); + const device = srcAndDstInSameGPUDevice ? t.device : t.mismatchedDevice; + const { canvas: source, expectedSourceData } = t.initSourceWebGPUCanvas({ + device, + canvasType, + width, + height, + alphaMode: srcAlphaMode }); -g.test('copy_contents_from_bitmaprenderer_context_canvas') - .desc( - ` + t.doCopyContentsTest(source, expectedSourceData, { + srcPremultiplied: srcAlphaMode === 'premultiplied', + dstPremultiplied: dstAlphaMode === 'premultiplied', + ...t.params + }); +}); + +g.test('copy_contents_from_bitmaprenderer_context_canvas'). +desc( + ` Test HTMLCanvasElement and OffscreenCanvas with ImageBitmapRenderingContext can be copied to WebGPU texture correctly. @@ -601,50 +683,50 @@ g.test('copy_contents_from_bitmaprenderer_context_canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('canvasType', kAllCanvasTypes) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - .combine('dstAlphaMode', kCanvasAlphaModes) - .combine('srcDoFlipYDuringCopy', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15]) - .combine('height', [1, 2, 4, 15]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - }) - .fn(async t => { - const { width, height, canvasType, dstAlphaMode } = t.params; +). +params((u) => +u. +combine('canvasType', kAllCanvasTypes). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T). +combine('dstAlphaMode', kCanvasAlphaModes). +combine('srcDoFlipYDuringCopy', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15]). +combine('height', [1, 2, 4, 15]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); +}). +fn(async (t) => { + const { width, height, canvasType, dstAlphaMode } = t.params; - const canvas = createCanvas(t, canvasType, width, height); + const canvas = createCanvas(t, canvasType, width, height); - const imageBitmapRenderingContext = canvas.getContext('bitmaprenderer'); + const imageBitmapRenderingContext = canvas.getContext('bitmaprenderer'); - if (!(imageBitmapRenderingContext instanceof ImageBitmapRenderingContext)) { - skipTestCase(canvasType + ' canvas imageBitmap rendering context not available'); - } + if (!(imageBitmapRenderingContext instanceof ImageBitmapRenderingContext)) { + skipTestCase(canvasType + ' canvas imageBitmap rendering context not available'); + } - const { canvas: sourceContentCanvas, expectedSourceData } = t.init2DCanvasContent({ - canvasType, - width, - height, - }); - - const imageBitmap = await createImageBitmap(sourceContentCanvas, { premultiplyAlpha: 'none' }); - imageBitmapRenderingContext.transferFromImageBitmap(imageBitmap); - - t.doCopyContentsTest(canvas, expectedSourceData, { - srcPremultiplied: false, - dstPremultiplied: dstAlphaMode === 'premultiplied', - ...t.params, - }); + const { canvas: sourceContentCanvas, expectedSourceData } = t.init2DCanvasContent({ + canvasType, + width, + height }); -g.test('color_space_conversion') - .desc( - ` + const imageBitmap = await createImageBitmap(sourceContentCanvas, { premultiplyAlpha: 'none' }); + imageBitmapRenderingContext.transferFromImageBitmap(imageBitmap); + + t.doCopyContentsTest(canvas, expectedSourceData, { + srcPremultiplied: false, + dstPremultiplied: dstAlphaMode === 'premultiplied', + ...t.params + }); +}); + +g.test('color_space_conversion'). +desc( + ` Test HTMLCanvasElement with 2d context can created with 'colorSpace' attribute. Using CopyExternalImageToTexture to copy from such type of canvas needs to do color space converting correctly. @@ -676,84 +758,84 @@ g.test('color_space_conversion') TODO: Enhance test data with colors that aren't always opaque and fully saturated. TODO: Consider refactoring src data setup with TexelView.writeTextureData. ` - ) - .params(u => - u - .combine('srcColorSpace', ['srgb', 'display-p3']) - .combine('dstColorSpace', ['srgb']) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - .combine('dstPremultiplied', [true, false]) - .combine('srcDoFlipYDuringCopy', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15, 255, 256]) - .combine('height', [1, 2, 4, 15, 255, 256]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - }) - .fn(t => { - const { - width, - height, - srcColorSpace, - dstColorSpace, - dstColorFormat, - dstPremultiplied, - srcDoFlipYDuringCopy, - } = t.params; - const { canvas, expectedSourceData } = t.init2DCanvasContentWithColorSpace({ - width, - height, - colorSpace: srcColorSpace, - }); - - const dst = t.device.createTexture({ - size: { width, height }, - format: dstColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const expectedDestinationImage = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: expectedSourceData, - srcOrigin: [0, 0], - srcSize: [width, height], - dstOrigin: [0, 0], - dstSize: [width, height], - subRectSize: [width, height], - // copyExternalImageToTexture does not perform gamma-encoding into `-srgb` formats. - format: kTextureFormatInfo[dstColorFormat].baseFormat ?? dstColorFormat, - flipSrcBeforeCopy: false, - srcDoFlipYDuringCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - srcColorSpace, - dstColorSpace, - }, - }); - - const texelCompareOptions = { - maxFractionalDiff: 0, - maxDiffULPsForNormFormat: 1, - }; - if (srcColorSpace !== dstColorSpace) { - // Color space conversion seems prone to errors up to about 0.0003 on f32, 0.0007 on f16. - texelCompareOptions.maxFractionalDiff = 0.001; - } else { - texelCompareOptions.maxDiffULPsForFloatFormat = 1; - } - - t.doTestAndCheckResult( - { source: canvas, origin: { x: 0, y: 0 }, flipY: srcDoFlipYDuringCopy }, - { - texture: dst, - origin: { x: 0, y: 0 }, - colorSpace: dstColorSpace, - premultipliedAlpha: dstPremultiplied, - }, - expectedDestinationImage, - { width, height, depthOrArrayLayers: 1 }, - texelCompareOptions - ); +). +params((u) => +u. +combine('srcColorSpace', ['srgb', 'display-p3']). +combine('dstColorSpace', ['srgb']). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T). +combine('dstPremultiplied', [true, false]). +combine('srcDoFlipYDuringCopy', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15, 255, 256]). +combine('height', [1, 2, 4, 15, 255, 256]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); +}). +fn((t) => { + const { + width, + height, + srcColorSpace, + dstColorSpace, + dstColorFormat, + dstPremultiplied, + srcDoFlipYDuringCopy + } = t.params; + const { canvas, expectedSourceData } = t.init2DCanvasContentWithColorSpace({ + width, + height, + colorSpace: srcColorSpace }); + + const dst = t.device.createTexture({ + size: { width, height }, + format: dstColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const expectedDestinationImage = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: expectedSourceData, + srcOrigin: [0, 0], + srcSize: [width, height], + dstOrigin: [0, 0], + dstSize: [width, height], + subRectSize: [width, height], + // copyExternalImageToTexture does not perform gamma-encoding into `-srgb` formats. + format: kTextureFormatInfo[dstColorFormat].baseFormat ?? dstColorFormat, + flipSrcBeforeCopy: false, + srcDoFlipYDuringCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied, + srcColorSpace, + dstColorSpace + } + }); + + const texelCompareOptions = { + maxFractionalDiff: 0, + maxDiffULPsForNormFormat: 1 + }; + if (srcColorSpace !== dstColorSpace) { + // Color space conversion seems prone to errors up to about 0.0003 on f32, 0.0007 on f16. + texelCompareOptions.maxFractionalDiff = 0.001; + } else { + texelCompareOptions.maxDiffULPsForFloatFormat = 1; + } + + t.doTestAndCheckResult( + { source: canvas, origin: { x: 0, y: 0 }, flipY: srcDoFlipYDuringCopy }, + { + texture: dst, + origin: { x: 0, y: 0 }, + colorSpace: dstColorSpace, + premultipliedAlpha: dstPremultiplied + }, + expectedDestinationImage, + { width, height, depthOrArrayLayers: 1 }, + texelCompareOptions + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/image.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/image.spec.js index 88a630a9d57..173bc9bbb70 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/image.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/image.spec.js @@ -1,9 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyExternalImageToTexture from HTMLImageElement source. -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { raceWithRejectOnTimeout } from '../../../common/util/util.js'; import { kTextureFormatInfo, kValidTextureFormatsForCopyE2T } from '../../format_info.js'; import { CopyToTextureUtils, kCopySubrectInfo } from '../../util/copy_to_texture.js'; @@ -11,8 +10,8 @@ import { CopyToTextureUtils, kCopySubrectInfo } from '../../util/copy_to_texture import { kTestColorsOpaque, makeTestColorsTexelView } from './util.js'; async function decodeImageFromCanvas(canvas) { - const blobFromCanvas = new Promise(resolve => { - canvas.toBlob(blob => resolve(blob)); + const blobFromCanvas = new Promise((resolve) => { + canvas.toBlob((blob) => resolve(blob)); }); const blob = await blobFromCanvas; const url = URL.createObjectURL(blob); @@ -24,9 +23,9 @@ async function decodeImageFromCanvas(canvas) { export const g = makeTestGroup(CopyToTextureUtils); -g.test('from_image') - .desc( - ` +g.test('from_image'). +desc( + ` Test HTMLImageElement can be copied to WebGPU texture correctly. These images are highly possible living in GPU back resource. @@ -51,105 +50,105 @@ g.test('from_image') And the expected results are all passed. ` - ) - .params(u => - u - .combine('srcDoFlipYDuringCopy', [true, false]) - .combine('dstColorFormat', kValidTextureFormatsForCopyE2T) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('width', [1, 2, 4, 15, 255, 256]) - .combine('height', [1, 2, 4, 15, 255, 256]) - ) - .beforeAllSubcases(t => { - t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); - if (typeof HTMLImageElement === 'undefined') t.skip('HTMLImageElement not available'); - }) - .fn(async t => { - const { width, height, dstColorFormat, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; +). +params((u) => +u. +combine('srcDoFlipYDuringCopy', [true, false]). +combine('dstColorFormat', kValidTextureFormatsForCopyE2T). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('width', [1, 2, 4, 15, 255, 256]). +combine('height', [1, 2, 4, 15, 255, 256]) +). +beforeAllSubcases((t) => { + t.skipIfTextureFormatNotSupported(t.params.dstColorFormat); + if (typeof HTMLImageElement === 'undefined') t.skip('HTMLImageElement not available'); +}). +fn(async (t) => { + const { width, height, dstColorFormat, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; - const imageCanvas = document.createElement('canvas'); - imageCanvas.width = width; - imageCanvas.height = height; + const imageCanvas = document.createElement('canvas'); + imageCanvas.width = width; + imageCanvas.height = height; - // Generate non-transparent pixel data to avoid canvas - // different opt behaviour on putImageData() - // from browsers. - const texelViewSource = makeTestColorsTexelView({ - testColors: kTestColorsOpaque, - format: 'rgba8unorm', // ImageData is always in rgba8unorm format. - width, - height, - flipY: false, - premultiplied: false, - }); - // Generate correct expected values - const imageData = new ImageData(width, height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: width * 4, - rowsPerImage: height, - subrectOrigin: [0, 0], - subrectSize: { width, height }, - }); - - const imageCanvasContext = imageCanvas.getContext('2d'); - if (imageCanvasContext === null) { - t.skip('canvas cannot get 2d context'); - return; - } - // Use putImageData to prevent color space conversion. - imageCanvasContext.putImageData(imageData, 0, 0); - - const image = await decodeImageFromCanvas(imageCanvas); - - const dst = t.device.createTexture({ - size: { width, height }, - format: dstColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const expFormat = kTextureFormatInfo[dstColorFormat].baseFormat ?? dstColorFormat; - const flipSrcBeforeCopy = false; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin: [0, 0], - srcSize: [width, height], - dstOrigin: [0, 0], - dstSize: [width, height], - subRectSize: [width, height], - format: expFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { - source: image, - origin: { x: 0, y: 0 }, - flipY: srcDoFlipYDuringCopy, - }, - { - texture: dst, - origin: { x: 0, y: 0 }, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - { width, height, depthOrArrayLayers: 1 }, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate non-transparent pixel data to avoid canvas + // different opt behaviour on putImageData() + // from browsers. + const texelViewSource = makeTestColorsTexelView({ + testColors: kTestColorsOpaque, + format: 'rgba8unorm', // ImageData is always in rgba8unorm format. + width, + height, + flipY: false, + premultiplied: false + }); + // Generate correct expected values + const imageData = new ImageData(width, height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: width * 4, + rowsPerImage: height, + subrectOrigin: [0, 0], + subrectSize: { width, height } }); -g.test('copy_subrect_from_2D_Canvas') - .desc( - ` + const imageCanvasContext = imageCanvas.getContext('2d'); + if (imageCanvasContext === null) { + t.skip('canvas cannot get 2d context'); + return; + } + // Use putImageData to prevent color space conversion. + imageCanvasContext.putImageData(imageData, 0, 0); + + const image = await decodeImageFromCanvas(imageCanvas); + + const dst = t.device.createTexture({ + size: { width, height }, + format: dstColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const expFormat = kTextureFormatInfo[dstColorFormat].baseFormat ?? dstColorFormat; + const flipSrcBeforeCopy = false; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin: [0, 0], + srcSize: [width, height], + dstOrigin: [0, 0], + dstSize: [width, height], + subRectSize: [width, height], + format: expFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { + source: image, + origin: { x: 0, y: 0 }, + flipY: srcDoFlipYDuringCopy + }, + { + texture: dst, + origin: { x: 0, y: 0 }, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + { width, height, depthOrArrayLayers: 1 }, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); + +g.test('copy_subrect_from_2D_Canvas'). +desc( + ` Test HTMLImageElement can be copied to WebGPU texture correctly. These images are highly possible living in GPU back resource. @@ -176,97 +175,97 @@ g.test('copy_subrect_from_2D_Canvas') And the expected results are all passed. ` - ) - .params(u => - u - .combine('srcDoFlipYDuringCopy', [true, false]) - .combine('dstPremultiplied', [true, false]) - .beginSubcases() - .combine('copySubRectInfo', kCopySubrectInfo) - ) - .beforeAllSubcases(t => { - if (typeof HTMLImageElement === 'undefined') t.skip('HTMLImageElement not available'); - }) - .fn(async t => { - const { copySubRectInfo, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; +). +params((u) => +u. +combine('srcDoFlipYDuringCopy', [true, false]). +combine('dstPremultiplied', [true, false]). +beginSubcases(). +combine('copySubRectInfo', kCopySubrectInfo) +). +beforeAllSubcases((t) => { + if (typeof HTMLImageElement === 'undefined') t.skip('HTMLImageElement not available'); +}). +fn(async (t) => { + const { copySubRectInfo, dstPremultiplied, srcDoFlipYDuringCopy } = t.params; - const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; - const kColorFormat = 'rgba8unorm'; + const { srcOrigin, dstOrigin, srcSize, dstSize, copyExtent } = copySubRectInfo; + const kColorFormat = 'rgba8unorm'; - const imageCanvas = document.createElement('canvas'); - imageCanvas.width = srcSize.width; - imageCanvas.height = srcSize.height; + const imageCanvas = document.createElement('canvas'); + imageCanvas.width = srcSize.width; + imageCanvas.height = srcSize.height; - // Generate non-transparent pixel data to avoid canvas - // different opt behaviour on putImageData() - // from browsers. - const texelViewSource = makeTestColorsTexelView({ - testColors: kTestColorsOpaque, - format: 'rgba8unorm', // ImageData is always in rgba8unorm format. - width: srcSize.width, - height: srcSize.height, - flipY: false, - premultiplied: false, - }); - // Generate correct expected values - const imageData = new ImageData(srcSize.width, srcSize.height); - texelViewSource.writeTextureData(imageData.data, { - bytesPerRow: srcSize.width * 4, - rowsPerImage: srcSize.height, - subrectOrigin: [0, 0], - subrectSize: srcSize, - }); - - const imageCanvasContext = imageCanvas.getContext('2d'); - if (imageCanvasContext === null) { - t.skip('canvas cannot get 2d context'); - return; - } - // Use putImageData to prevent color space conversion. - imageCanvasContext.putImageData(imageData, 0, 0); - - const image = await decodeImageFromCanvas(imageCanvas); - - const dst = t.device.createTexture({ - size: dstSize, - format: kColorFormat, - usage: - GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const flipSrcBeforeCopy = false; - const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ - srcPixels: imageData.data, - srcOrigin, - srcSize, - dstOrigin, - dstSize, - subRectSize: copyExtent, - format: kColorFormat, - flipSrcBeforeCopy, - srcDoFlipYDuringCopy, - conversion: { - srcPremultiplied: false, - dstPremultiplied, - }, - }); - - t.doTestAndCheckResult( - { - source: image, - origin: srcOrigin, - flipY: srcDoFlipYDuringCopy, - }, - { - texture: dst, - origin: dstOrigin, - colorSpace: 'srgb', - premultipliedAlpha: dstPremultiplied, - }, - texelViewExpected, - copyExtent, - // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but - // allow diffs of 1ULP since that's the generally-appropriate threshold. - { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } - ); + // Generate non-transparent pixel data to avoid canvas + // different opt behaviour on putImageData() + // from browsers. + const texelViewSource = makeTestColorsTexelView({ + testColors: kTestColorsOpaque, + format: 'rgba8unorm', // ImageData is always in rgba8unorm format. + width: srcSize.width, + height: srcSize.height, + flipY: false, + premultiplied: false }); + // Generate correct expected values + const imageData = new ImageData(srcSize.width, srcSize.height); + texelViewSource.writeTextureData(imageData.data, { + bytesPerRow: srcSize.width * 4, + rowsPerImage: srcSize.height, + subrectOrigin: [0, 0], + subrectSize: srcSize + }); + + const imageCanvasContext = imageCanvas.getContext('2d'); + if (imageCanvasContext === null) { + t.skip('canvas cannot get 2d context'); + return; + } + // Use putImageData to prevent color space conversion. + imageCanvasContext.putImageData(imageData, 0, 0); + + const image = await decodeImageFromCanvas(imageCanvas); + + const dst = t.device.createTexture({ + size: dstSize, + format: kColorFormat, + usage: + GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const flipSrcBeforeCopy = false; + const texelViewExpected = t.getExpectedDstPixelsFromSrcPixels({ + srcPixels: imageData.data, + srcOrigin, + srcSize, + dstOrigin, + dstSize, + subRectSize: copyExtent, + format: kColorFormat, + flipSrcBeforeCopy, + srcDoFlipYDuringCopy, + conversion: { + srcPremultiplied: false, + dstPremultiplied + } + }); + + t.doTestAndCheckResult( + { + source: image, + origin: srcOrigin, + flipY: srcDoFlipYDuringCopy + }, + { + texture: dst, + origin: dstOrigin, + colorSpace: 'srgb', + premultipliedAlpha: dstPremultiplied + }, + texelViewExpected, + copyExtent, + // 1.0 and 0.6 are representable precisely by all formats except rgb10a2unorm, but + // allow diffs of 1ULP since that's the generally-appropriate threshold. + { maxDiffULPsForFloatFormat: 1, maxDiffULPsForNormFormat: 1 } + ); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/util.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/util.js index 2471edbfa3d..d392f94d3dc 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/util.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/util.js @@ -1,6 +1,8 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { TexelView } from '../../util/texture/texel_view.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { TexelView } from '../../util/texture/texel_view.js'; + + // None of the dst texture format is 'uint' or 'sint', so we can always use float value. const kColors = { @@ -9,16 +11,16 @@ const kColors = { Blue: { R: 0.0, G: 0.0, B: 1.0, A: 1.0 }, Black: { R: 0.0, G: 0.0, B: 0.0, A: 1.0 }, White: { R: 1.0, G: 1.0, B: 1.0, A: 1.0 }, - SemitransparentWhite: { R: 1.0, G: 1.0, B: 1.0, A: 0.6 }, + SemitransparentWhite: { R: 1.0, G: 1.0, B: 1.0, A: 0.6 } }; export const kTestColorsOpaque = [ - kColors.Red, - kColors.Green, - kColors.Blue, - kColors.Black, - kColors.White, -]; +kColors.Red, +kColors.Green, +kColors.Blue, +kColors.Black, +kColors.White]; + export const kTestColorsAll = [...kTestColorsOpaque, kColors.SemitransparentWhite]; @@ -28,9 +30,16 @@ export function makeTestColorsTexelView({ width, height, premultiplied, - flipY, + flipY + + + + + + + }) { - return TexelView.fromTexelsAsColors(format, coords => { + return TexelView.fromTexelsAsColors(format, (coords) => { const y = flipY ? height - coords.y - 1 : coords.y; const pixelPos = y * width + coords.x; const currentPixel = testColors[pixelPos % testColors.length]; @@ -40,10 +49,10 @@ export function makeTestColorsTexelView({ R: currentPixel.R * currentPixel.A, G: currentPixel.G * currentPixel.A, B: currentPixel.B * currentPixel.A, - A: currentPixel.A, + A: currentPixel.A }; } else { return currentPixel; } }); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/video.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/video.spec.js index b9ee472a618..1a7b21f1fbf 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/video.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/copyToTexture/video.spec.js @@ -1,27 +1,31 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` copyToTexture with HTMLVideoElement and VideoFrame. -- videos with various encodings/formats (webm vp8, webm vp9, ogg theora, mp4), color spaces - (bt.601, bt.709, bt.2020) -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +- videos with various encodings/formats (webm vp8, webm vp9, ogg theora, mp4), video color spaces + (bt.601, bt.709, bt.2020) and dst color spaces(display-p3, srgb). + + TODO: Test video in BT.2020 color space +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { GPUTest, TextureTestMixin } from '../../gpu_test.js'; import { startPlayingAndWaitForVideo, getVideoElement, getVideoFrameFromVideoElement, - kVideoExpectations, -} from '../../web_platform/util.js'; + convertToUnorm8, + kPredefinedColorSpace, + kVideoNames, + kVideoInfo } from +'../../web_platform/util.js'; const kFormat = 'rgba8unorm'; export const g = makeTestGroup(TextureTestMixin(GPUTest)); -g.test('copy_from_video') - .desc( - ` +g.test('copy_from_video'). +desc( + ` Test HTMLVideoElement and VideoFrame can be copied to WebGPU texture correctly. It creates HTMLVideoElement with videos under Resource folder. @@ -37,84 +41,110 @@ It creates HTMLVideoElement with videos under Resource folder. - Valid 'flipY' config in 'GPUImageCopyExternalImage' (named 'srcDoFlipYDuringCopy' in cases) - TODO: partial copy tests should be added - TODO: all valid dstColorFormat tests should be added. - - TODO: dst color space tests need to be added ` - ) - .params(u => - u // - .combineWithParams(kVideoExpectations) - .combine('sourceType', ['VideoElement', 'VideoFrame']) - .combine('srcDoFlipYDuringCopy', [true, false]) - ) - .fn(async t => { - const { videoName, sourceType, srcDoFlipYDuringCopy } = t.params; +). +params((u) => +u // +.combine('videoName', kVideoNames). +combine('sourceType', ['VideoElement', 'VideoFrame']). +combine('srcDoFlipYDuringCopy', [true, false]). +combine('dstColorSpace', kPredefinedColorSpace) +). +fn(async (t) => { + const { videoName, sourceType, srcDoFlipYDuringCopy, dstColorSpace } = t.params; - if (sourceType === 'VideoFrame' && typeof VideoFrame === 'undefined') { - t.skip('WebCodec is not supported'); + if (sourceType === 'VideoFrame' && typeof VideoFrame === 'undefined') { + t.skip('WebCodec is not supported'); + } + + const videoElement = getVideoElement(t, videoName); + + await startPlayingAndWaitForVideo(videoElement, async () => { + let source, width, height; + if (sourceType === 'VideoFrame') { + source = await getVideoFrameFromVideoElement(t, videoElement); + width = source.codedWidth; + height = source.codedHeight; + } else { + source = videoElement; + width = source.videoWidth; + height = source.videoHeight; } - const videoElement = getVideoElement(t, videoName); - - await startPlayingAndWaitForVideo(videoElement, async () => { - let source, width, height; - if (sourceType === 'VideoFrame') { - source = await getVideoFrameFromVideoElement(t, videoElement); - width = source.codedWidth; - height = source.codedHeight; - } else { - source = videoElement; - width = source.videoWidth; - height = source.videoHeight; - } - - const dstTexture = t.device.createTexture({ - format: kFormat, - size: { width, height, depthOrArrayLayers: 1 }, - usage: - GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - t.queue.copyExternalImageToTexture( - { - source, - origin: { x: 0, y: 0 }, - flipY: srcDoFlipYDuringCopy, - }, - { - texture: dstTexture, - origin: { x: 0, y: 0 }, - colorSpace: 'srgb', - premultipliedAlpha: true, - }, - { width, height, depthOrArrayLayers: 1 } - ); - - if (srcDoFlipYDuringCopy) { - t.expectSinglePixelComparisonsAreOkInTexture({ texture: dstTexture }, [ - // Top-left should be blue. - { coord: { x: width * 0.25, y: height * 0.25 }, exp: t.params._blueExpectation }, - // Top-right should be green. - { coord: { x: width * 0.75, y: height * 0.25 }, exp: t.params._greenExpectation }, - // Bottom-left should be yellow. - { coord: { x: width * 0.25, y: height * 0.75 }, exp: t.params._yellowExpectation }, - // Bottom-right should be red. - { coord: { x: width * 0.75, y: height * 0.75 }, exp: t.params._redExpectation }, - ]); - } else { - t.expectSinglePixelComparisonsAreOkInTexture({ texture: dstTexture }, [ - // Top-left should be yellow. - { coord: { x: width * 0.25, y: height * 0.25 }, exp: t.params._yellowExpectation }, - // Top-right should be red. - { coord: { x: width * 0.75, y: height * 0.25 }, exp: t.params._redExpectation }, - // Bottom-left should be blue. - { coord: { x: width * 0.25, y: height * 0.75 }, exp: t.params._blueExpectation }, - // Bottom-right should be green. - { coord: { x: width * 0.75, y: height * 0.75 }, exp: t.params._greenExpectation }, - ]); - } - - if (source instanceof VideoFrame) { - source.close(); - } + const dstTexture = t.device.createTexture({ + format: kFormat, + size: { width, height, depthOrArrayLayers: 1 }, + usage: + GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT }); + + t.queue.copyExternalImageToTexture( + { + source, + origin: { x: 0, y: 0 }, + flipY: srcDoFlipYDuringCopy + }, + { + texture: dstTexture, + origin: { x: 0, y: 0 }, + colorSpace: 'srgb', + premultipliedAlpha: true + }, + { width, height, depthOrArrayLayers: 1 } + ); + + const expect = kVideoInfo[videoName].presentColors[dstColorSpace]; + + if (srcDoFlipYDuringCopy) { + t.expectSinglePixelComparisonsAreOkInTexture({ texture: dstTexture }, [ + // Flipped top-left. + { + coord: { x: width * 0.25, y: height * 0.25 }, + exp: convertToUnorm8(expect.bottomLeftColor) + }, + // Flipped top-right. + { + coord: { x: width * 0.75, y: height * 0.25 }, + exp: convertToUnorm8(expect.bottomRightColor) + }, + // Flipped bottom-left. + { + coord: { x: width * 0.25, y: height * 0.75 }, + exp: convertToUnorm8(expect.topLeftColor) + }, + // Flipped bottom-right. + { + coord: { x: width * 0.75, y: height * 0.75 }, + exp: convertToUnorm8(expect.topRightColor) + }] + ); + } else { + t.expectSinglePixelComparisonsAreOkInTexture({ texture: dstTexture }, [ + // Top-left. + { + coord: { x: width * 0.25, y: height * 0.25 }, + exp: convertToUnorm8(expect.topLeftColor) + }, + // Top-right. + { + coord: { x: width * 0.75, y: height * 0.25 }, + exp: convertToUnorm8(expect.topRightColor) + }, + // Bottom-left. + { + coord: { x: width * 0.25, y: height * 0.75 }, + exp: convertToUnorm8(expect.bottomLeftColor) + }, + // Bottom-right. + { + coord: { x: width * 0.75, y: height * 0.75 }, + exp: convertToUnorm8(expect.bottomRightColor) + }] + ); + } + + if (source instanceof VideoFrame) { + source.close(); + } }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/external_texture/video.spec.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/external_texture/video.spec.js index 53f395d1ad8..6eded52a06d 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/external_texture/video.spec.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/external_texture/video.spec.js @@ -1,22 +1,24 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/export const description = ` Tests for external textures from HTMLVideoElement (and other video-type sources?). -- videos with various encodings/formats (webm vp8, webm vp9, ogg theora, mp4), color spaces - (bt.601, bt.709, bt.2020) +- videos with various encodings/formats (webm vp8, webm vp9, ogg theora, mp4), video color spaces + (bt.601, bt.709, bt.2020) and dst color spaces(display-p3, srgb) TODO: consider whether external_texture and copyToTexture video tests should be in the same file -`; -import { makeTestGroup } from '../../../common/framework/test_group.js'; +TODO(#3193): Test video in BT.2020 color space +`;import { makeTestGroup } from '../../../common/framework/test_group.js'; import { GPUTest, TextureTestMixin } from '../../gpu_test.js'; import { startPlayingAndWaitForVideo, getVideoFrameFromVideoElement, getVideoElement, - kVideoExpectations, - kVideoRotationExpectations, -} from '../../web_platform/util.js'; + convertToUnorm8, + kPredefinedColorSpace, + kVideoNames, + kVideoInfo } from +'../../web_platform/util.js'; const kHeight = 16; const kWidth = 16; @@ -41,9 +43,9 @@ function createExternalTextureSamplingTestPipeline(t) { ); return pos[VertexIndex]; } - `, + ` }), - entryPoint: 'main', + entryPoint: 'main' }, fragment: { module: t.device.createShaderModule({ @@ -55,31 +57,33 @@ function createExternalTextureSamplingTestPipeline(t) { -> @location(0) vec4 { return textureSampleBaseClampToEdge(t, s, FragCoord.xy / vec2(16.0, 16.0)); } - `, + ` }), entryPoint: 'main', targets: [ - { - format: kFormat, - }, - ], + { + format: kFormat + }] + }, - primitive: { topology: 'triangle-list' }, + primitive: { topology: 'triangle-list' } }); return pipeline; } function createExternalTextureSamplingTestBindGroup( - t, - checkNonStandardIsZeroCopy, - source, - pipeline -) { +t, +checkNonStandardIsZeroCopy, +source, +pipeline, +dstColorSpace) +{ const linearSampler = t.device.createSampler(); const externalTexture = t.device.importExternalTexture({ - source: source, + source, + colorSpace: dstColorSpace }); if (checkNonStandardIsZeroCopy) { @@ -88,15 +92,15 @@ function createExternalTextureSamplingTestBindGroup( const bindGroup = t.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ - { - binding: 0, - resource: linearSampler, - }, - { - binding: 1, - resource: externalTexture, - }, - ], + { + binding: 0, + resource: linearSampler + }, + { + binding: 1, + resource: externalTexture + }] + }); return bindGroup; @@ -106,6 +110,7 @@ function createExternalTextureSamplingTestBindGroup( * Expect the non-standard `externalTexture.isZeroCopy` is true. */ function expectZeroCopyNonStandard(t, externalTexture) { + t.expect(externalTexture.isZeroCopy, '0-copy import failed.'); } @@ -118,313 +123,272 @@ function expectZeroCopyNonStandard(t, externalTexture) { */ function checkNonStandardIsZeroCopyIfAvailable() { if ( - typeof GPUExternalTexture !== 'undefined' && - GPUExternalTexture.prototype.hasOwnProperty('isZeroCopy') - ) { + typeof GPUExternalTexture !== 'undefined' && + + GPUExternalTexture.prototype.hasOwnProperty('isZeroCopy')) + { return [{}, { checkNonStandardIsZeroCopy: true }]; } else { return [{}]; } } -g.test('importExternalTexture,sample') - .desc( - ` +g.test('importExternalTexture,sample'). +desc( + ` Tests that we can import an HTMLVideoElement/VideoFrame into a GPUExternalTexture, sample from it -for several combinations of video format and color space. +for several combinations of video format, video color spaces and dst color spaces. ` - ) - .params(u => - u // - .combineWithParams(checkNonStandardIsZeroCopyIfAvailable()) - .combine('sourceType', ['VideoElement', 'VideoFrame']) - .combineWithParams(kVideoExpectations) - ) - .fn(async t => { - const sourceType = t.params.sourceType; - if (sourceType === 'VideoFrame' && typeof VideoFrame === 'undefined') { - t.skip('WebCodec is not supported'); - } +). +params((u) => +u // +.combineWithParams(checkNonStandardIsZeroCopyIfAvailable()). +combine('videoName', kVideoNames). +combine('sourceType', ['VideoElement', 'VideoFrame']). +combine('dstColorSpace', kPredefinedColorSpace) +). +fn(async (t) => { + const { videoName, sourceType, dstColorSpace } = t.params; - const videoElement = getVideoElement(t, t.params.videoName); + if (sourceType === 'VideoFrame' && typeof VideoFrame === 'undefined') { + t.skip('WebCodec is not supported'); + } - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; + const videoElement = getVideoElement(t, videoName); - const colorAttachment = t.device.createTexture({ - format: kFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = + sourceType === 'VideoFrame' ? + await getVideoFrameFromVideoElement(t, videoElement) : + videoElement; - const pipeline = createExternalTextureSamplingTestPipeline(t); - const bindGroup = createExternalTextureSamplingTestBindGroup( - t, - t.params.checkNonStandardIsZeroCopy, - source, - pipeline - ); - - const commandEncoder = t.device.createCommandEncoder(); - const passEncoder = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - passEncoder.setPipeline(pipeline); - passEncoder.setBindGroup(0, bindGroup); - passEncoder.draw(6); - passEncoder.end(); - t.device.queue.submit([commandEncoder.finish()]); - - // For validation, we sample a few pixels away from the edges to avoid compression - // artifacts. - t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ - // Top-left should be yellow. - { coord: { x: kWidth * 0.25, y: kHeight * 0.25 }, exp: t.params._yellowExpectation }, - // Top-right should be red. - { coord: { x: kWidth * 0.75, y: kHeight * 0.25 }, exp: t.params._redExpectation }, - // Bottom-left should be blue. - { coord: { x: kWidth * 0.25, y: kHeight * 0.75 }, exp: t.params._blueExpectation }, - // Bottom-right should be green. - { coord: { x: kWidth * 0.75, y: kHeight * 0.75 }, exp: t.params._greenExpectation }, - ]); - - if (sourceType === 'VideoFrame') source.close(); + const colorAttachment = t.device.createTexture({ + format: kFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT }); - }); -g.test('importExternalTexture,sampleWithRotationMetadata') - .desc( - ` -Tests that when importing an HTMLVideoElement/VideoFrame into a GPUExternalTexture, sampling from -it will honor rotation metadata. -` - ) - .params(u => - u // - .combineWithParams(checkNonStandardIsZeroCopyIfAvailable()) - .combine('sourceType', ['VideoElement', 'VideoFrame']) - .combineWithParams(kVideoRotationExpectations) - ) - .fn(async t => { - const sourceType = t.params.sourceType; - const videoElement = getVideoElement(t, t.params.videoName); + const pipeline = createExternalTextureSamplingTestPipeline(t); + const bindGroup = createExternalTextureSamplingTestBindGroup( + t, + t.params.checkNonStandardIsZeroCopy, + source, + pipeline, + dstColorSpace + ); - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; + const commandEncoder = t.device.createCommandEncoder(); + const passEncoder = commandEncoder.beginRenderPass({ + colorAttachments: [ + { + view: colorAttachment.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] - const colorAttachment = t.device.createTexture({ - format: kFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const pipeline = createExternalTextureSamplingTestPipeline(t); - const bindGroup = createExternalTextureSamplingTestBindGroup( - t, - t.params.checkNonStandardIsZeroCopy, - source, - pipeline - ); - - const commandEncoder = t.device.createCommandEncoder(); - const passEncoder = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - passEncoder.setPipeline(pipeline); - passEncoder.setBindGroup(0, bindGroup); - passEncoder.draw(6); - passEncoder.end(); - t.device.queue.submit([commandEncoder.finish()]); - - // For validation, we sample a few pixels away from the edges to avoid compression - // artifacts. - t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ - { coord: { x: kWidth * 0.25, y: kHeight * 0.25 }, exp: t.params._topLeftExpectation }, - { coord: { x: kWidth * 0.75, y: kHeight * 0.25 }, exp: t.params._topRightExpectation }, - { coord: { x: kWidth * 0.25, y: kHeight * 0.75 }, exp: t.params._bottomLeftExpectation }, - { coord: { x: kWidth * 0.75, y: kHeight * 0.75 }, exp: t.params._bottomRightExpectation }, - ]); - - if (sourceType === 'VideoFrame') source.close(); }); - }); + passEncoder.setPipeline(pipeline); + passEncoder.setBindGroup(0, bindGroup); + passEncoder.draw(6); + passEncoder.end(); + t.device.queue.submit([commandEncoder.finish()]); -g.test('importExternalTexture,sampleWithVideoFrameWithVisibleRectParam') - .desc( - ` + const expect = kVideoInfo[videoName].presentColors[dstColorSpace]; + + // For validation, we sample a few pixels away from the edges to avoid compression + // artifacts. + t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ + // Top-left. + { + coord: { x: kWidth * 0.25, y: kHeight * 0.25 }, + exp: convertToUnorm8(expect.topLeftColor) + }, + // Top-right. + { + coord: { x: kWidth * 0.75, y: kHeight * 0.25 }, + exp: convertToUnorm8(expect.topRightColor) + }, + // Bottom-left. + { + coord: { x: kWidth * 0.25, y: kHeight * 0.75 }, + exp: convertToUnorm8(expect.bottomLeftColor) + }, + // Bottom-right. + { + coord: { x: kWidth * 0.75, y: kHeight * 0.75 }, + exp: convertToUnorm8(expect.bottomRightColor) + }] + ); + + if (sourceType === 'VideoFrame') source.close(); + }); +}); + +g.test('importExternalTexture,sampleWithVideoFrameWithVisibleRectParam'). +desc( + ` Tests that we can import VideoFrames and sample the correct sub-rectangle when visibleRect parameters are present. ` - ) - .params(u => - u // - .combineWithParams(checkNonStandardIsZeroCopyIfAvailable()) - .combineWithParams(kVideoExpectations) - ) - .fn(async t => { - const videoElement = getVideoElement(t, t.params.videoName); +). +params((u) => +u // +.combineWithParams(checkNonStandardIsZeroCopyIfAvailable()). +combine('videoName', kVideoNames). +combine('dstColorSpace', kPredefinedColorSpace) +). +fn(async (t) => { + const { videoName, dstColorSpace } = t.params; - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = await getVideoFrameFromVideoElement(t, videoElement); + const videoElement = getVideoElement(t, videoName); - // All tested videos are derived from an image showing yellow, red, blue or green in each - // quadrant. In this test we crop the video to each quadrant and check that desired color - // is sampled from each corner of the cropped image. - const srcVideoHeight = 240; - const srcVideoWidth = 320; - const cropParams = [ - // Top left (yellow) + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = await getVideoFrameFromVideoElement(t, videoElement); + + // All tested videos are derived from an image showing yellow, red, blue or green in each + // quadrant. In this test we crop the video to each quadrant and check that desired color + // is sampled from each corner of the cropped image. + const srcVideoHeight = 240; + const srcVideoWidth = 320; + + const expect = kVideoInfo[videoName].presentColors[dstColorSpace]; + + const cropParams = [ + // Top left + { + subRect: { x: 0, y: 0, width: srcVideoWidth / 2, height: srcVideoHeight / 2 }, + color: convertToUnorm8(expect.topLeftColor) + }, + // Top right + { + subRect: { + x: srcVideoWidth / 2, + y: 0, + width: srcVideoWidth / 2, + height: srcVideoHeight / 2 + }, + color: convertToUnorm8(expect.topRightColor) + }, + // Bottom left + { + subRect: { + x: 0, + y: srcVideoHeight / 2, + width: srcVideoWidth / 2, + height: srcVideoHeight / 2 + }, + color: convertToUnorm8(expect.bottomLeftColor) + }, + // Bottom right + { + subRect: { + x: srcVideoWidth / 2, + y: srcVideoHeight / 2, + width: srcVideoWidth / 2, + height: srcVideoHeight / 2 + }, + color: convertToUnorm8(expect.bottomRightColor) + }]; + + + for (const cropParam of cropParams) { + const subRect = new VideoFrame(source, { visibleRect: cropParam.subRect }); + + const colorAttachment = t.device.createTexture({ + format: kFormat, + size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT + }); + + const pipeline = createExternalTextureSamplingTestPipeline(t); + const bindGroup = createExternalTextureSamplingTestBindGroup( + t, + t.params.checkNonStandardIsZeroCopy, + subRect, + pipeline, + dstColorSpace + ); + + const commandEncoder = t.device.createCommandEncoder(); + const passEncoder = commandEncoder.beginRenderPass({ + colorAttachments: [ { - subRect: { x: 0, y: 0, width: srcVideoWidth / 2, height: srcVideoHeight / 2 }, - color: t.params._yellowExpectation, - }, - // Top right (red) - { - subRect: { - x: srcVideoWidth / 2, - y: 0, - width: srcVideoWidth / 2, - height: srcVideoHeight / 2, - }, - color: t.params._redExpectation, - }, - // Bottom left (blue) - { - subRect: { - x: 0, - y: srcVideoHeight / 2, - width: srcVideoWidth / 2, - height: srcVideoHeight / 2, - }, - color: t.params._blueExpectation, - }, - // Bottom right (green) - { - subRect: { - x: srcVideoWidth / 2, - y: srcVideoHeight / 2, - width: srcVideoWidth / 2, - height: srcVideoHeight / 2, - }, - color: t.params._greenExpectation, - }, - ]; + view: colorAttachment.createView(), + clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] - for (const cropParam of cropParams) { - // MAINTENANCE_TODO: remove cast with TypeScript 4.9.6+. + }); + passEncoder.setPipeline(pipeline); + passEncoder.setBindGroup(0, bindGroup); + passEncoder.draw(6); + passEncoder.end(); + t.device.queue.submit([commandEncoder.finish()]); - const subRect = new VideoFrame(source, { visibleRect: cropParam.subRect }); + // For validation, we sample a few pixels away from the edges to avoid compression + // artifacts. + t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ + { coord: { x: kWidth * 0.1, y: kHeight * 0.1 }, exp: cropParam.color }, + { coord: { x: kWidth * 0.9, y: kHeight * 0.1 }, exp: cropParam.color }, + { coord: { x: kWidth * 0.1, y: kHeight * 0.9 }, exp: cropParam.color }, + { coord: { x: kWidth * 0.9, y: kHeight * 0.9 }, exp: cropParam.color }] + ); - const colorAttachment = t.device.createTexture({ - format: kFormat, - size: { width: kWidth, height: kHeight, depthOrArrayLayers: 1 }, - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT, - }); - - const pipeline = createExternalTextureSamplingTestPipeline(t); - const bindGroup = createExternalTextureSamplingTestBindGroup( - t, - t.params.checkNonStandardIsZeroCopy, - subRect, - pipeline - ); - - const commandEncoder = t.device.createCommandEncoder(); - const passEncoder = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: colorAttachment.createView(), - clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], - }); - passEncoder.setPipeline(pipeline); - passEncoder.setBindGroup(0, bindGroup); - passEncoder.draw(6); - passEncoder.end(); - t.device.queue.submit([commandEncoder.finish()]); - - // For validation, we sample a few pixels away from the edges to avoid compression - // artifacts. - t.expectSinglePixelComparisonsAreOkInTexture({ texture: colorAttachment }, [ - { coord: { x: kWidth * 0.1, y: kHeight * 0.1 }, exp: cropParam.color }, - { coord: { x: kWidth * 0.9, y: kHeight * 0.1 }, exp: cropParam.color }, - { coord: { x: kWidth * 0.1, y: kHeight * 0.9 }, exp: cropParam.color }, - { coord: { x: kWidth * 0.9, y: kHeight * 0.9 }, exp: cropParam.color }, - ]); - - subRect.close(); - } - - source.close(); - }); - }); -g.test('importExternalTexture,compute') - .desc( - ` -Tests that we can import an HTMLVideoElement/VideoFrame into a GPUExternalTexture and use it in a -compute shader, for several combinations of video format and color space. -` - ) - .params(u => - u // - .combineWithParams(checkNonStandardIsZeroCopyIfAvailable()) - .combine('sourceType', ['VideoElement', 'VideoFrame']) - .combineWithParams(kVideoExpectations) - ) - .fn(async t => { - const sourceType = t.params.sourceType; - if (sourceType === 'VideoFrame' && typeof VideoFrame === 'undefined') { - t.skip('WebCodec is not supported'); + subRect.close(); } - const videoElement = getVideoElement(t, t.params.videoName); + source.close(); + }); +}); +g.test('importExternalTexture,compute'). +desc( + ` +Tests that we can import an HTMLVideoElement/VideoFrame into a GPUExternalTexture and use it in a +compute shader, for several combinations of video format, video color spaces and dst color spaces. +` +). +params((u) => +u // +.combineWithParams(checkNonStandardIsZeroCopyIfAvailable()). +combine('videoName', kVideoNames). +combine('sourceType', ['VideoElement', 'VideoFrame']). +combine('dstColorSpace', kPredefinedColorSpace) +). +fn(async (t) => { + const { videoName, sourceType, dstColorSpace } = t.params; - await startPlayingAndWaitForVideo(videoElement, async () => { - const source = - sourceType === 'VideoFrame' - ? await getVideoFrameFromVideoElement(t, videoElement) - : videoElement; - const externalTexture = t.device.importExternalTexture({ - source: source, - }); - if (t.params.checkNonStandardIsZeroCopy) { - expectZeroCopyNonStandard(t, externalTexture); - } - const outputTexture = t.device.createTexture({ - format: 'rgba8unorm', - size: [2, 2, 1], - usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING, - }); + if (sourceType === 'VideoFrame' && typeof VideoFrame === 'undefined') { + t.skip('WebCodec is not supported'); + } - const pipeline = t.device.createComputePipeline({ - layout: 'auto', - compute: { - // Shader loads 4 pixels near each corner, and then store them in a storage texture. - module: t.device.createShaderModule({ - code: ` + const videoElement = getVideoElement(t, videoName); + + await startPlayingAndWaitForVideo(videoElement, async () => { + const source = + sourceType === 'VideoFrame' ? + await getVideoFrameFromVideoElement(t, videoElement) : + videoElement; + const externalTexture = t.device.importExternalTexture({ + source, + colorSpace: dstColorSpace + }); + if (t.params.checkNonStandardIsZeroCopy) { + expectZeroCopyNonStandard(t, externalTexture); + } + const outputTexture = t.device.createTexture({ + format: 'rgba8unorm', + size: [2, 2, 1], + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING + }); + + const pipeline = t.device.createComputePipeline({ + layout: 'auto', + compute: { + // Shader loads 4 pixels near each corner, and then store them in a storage texture. + module: t.device.createShaderModule({ + code: ` @group(0) @binding(0) var t : texture_external; @group(0) @binding(1) var outImage : texture_storage_2d; @@ -439,40 +403,41 @@ compute shader, for several combinations of video format and color space. textureStore(outImage, vec2(1, 1), green); return; } - `, - }), - entryPoint: 'main', - }, - }); - - const bg = t.device.createBindGroup({ - entries: [ - { binding: 0, resource: externalTexture }, - { binding: 1, resource: outputTexture.createView() }, - ], - - layout: pipeline.getBindGroupLayout(0), - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, bg); - pass.dispatchWorkgroups(1); - pass.end(); - t.device.queue.submit([encoder.finish()]); - - t.expectSinglePixelComparisonsAreOkInTexture({ texture: outputTexture }, [ - // Top-left should be yellow. - { coord: { x: 0, y: 0 }, exp: t.params._yellowExpectation }, - // Top-right should be red. - { coord: { x: 0, y: 1 }, exp: t.params._redExpectation }, - // Bottom-left should be blue. - { coord: { x: 1, y: 0 }, exp: t.params._blueExpectation }, - // Bottom-right should be green. - { coord: { x: 1, y: 1 }, exp: t.params._greenExpectation }, - ]); - - if (sourceType === 'VideoFrame') source.close(); + ` + }), + entryPoint: 'main' + } }); + + const bg = t.device.createBindGroup({ + entries: [ + { binding: 0, resource: externalTexture }, + { binding: 1, resource: outputTexture.createView() }], + + layout: pipeline.getBindGroupLayout(0) + }); + + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bg); + pass.dispatchWorkgroups(1); + pass.end(); + t.device.queue.submit([encoder.finish()]); + + const expect = kVideoInfo[videoName].presentColors[dstColorSpace]; + + t.expectSinglePixelComparisonsAreOkInTexture({ texture: outputTexture }, [ + // Top-left. + { coord: { x: 0, y: 0 }, exp: convertToUnorm8(expect.topLeftColor) }, + // Top-right. + { coord: { x: 0, y: 1 }, exp: convertToUnorm8(expect.topRightColor) }, + // Bottom-left. + { coord: { x: 1, y: 0 }, exp: convertToUnorm8(expect.bottomLeftColor) }, + // Bottom-right. + { coord: { x: 1, y: 1 }, exp: convertToUnorm8(expect.bottomRightColor) }] + ); + + if (sourceType === 'VideoFrame') source.close(); }); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_clear.html.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_clear.html.js index f9bb584c362..20ef1ec3a4f 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_clear.html.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_clear.html.js @@ -1,14 +1,13 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { runRefTest } from './gpu_ref_test.js'; -runRefTest(t => { +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { runRefTest } from './gpu_ref_test.js';runRefTest((t) => { function draw(canvasId, format) { const canvas = document.getElementById(canvasId); const ctx = canvas.getContext('webgpu'); ctx.configure({ device: t.device, - format, + format }); const colorAttachment = ctx.getCurrentTexture(); @@ -17,13 +16,13 @@ runRefTest(t => { const encoder = t.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ - { - view: colorAttachmentView, - clearValue: { r: 0.4, g: 1.0, b: 0.0, a: 1.0 }, - loadOp: 'clear', - storeOp: 'store', - }, - ], + { + view: colorAttachmentView, + clearValue: { r: 0.4, g: 1.0, b: 0.0, a: 1.0 }, + loadOp: 'clear', + storeOp: 'store' + }] + }); pass.end(); t.device.queue.submit([encoder.finish()]); @@ -32,4 +31,4 @@ runRefTest(t => { draw('cvs0', 'bgra8unorm'); draw('cvs1', 'rgba8unorm'); draw('cvs2', 'rgba16float'); -}); +}); \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace.html.js b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace.html.js index f4ef05b1298..7f579ae70db 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace.html.js +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace.html.js @@ -1,12 +1,11 @@ /** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { kUnitCaseParamsBuilder } from '../../../common/framework/params_builder.js'; -import { Float16Array } from '../../../external/petamoriken/float16/float16.js'; -import { kCanvasAlphaModes, kCanvasColorSpaces } from '../../capability_info.js'; +* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts +**/import { kUnitCaseParamsBuilder } from '../../../common/framework/params_builder.js';import { Float16Array } from '../../../external/petamoriken/float16/float16.js';import { kCanvasAlphaModes, kCanvasColorSpaces } from '../../capability_info.js'; import { runRefTest } from './gpu_ref_test.js'; function bgra8UnormFromRgba8Unorm(rgba8Unorm) { + // This is used only once. May need to optimize if reused. const bgra8Unorm = rgba8Unorm.slice(); for (let i = 0; i < bgra8Unorm.length; i += 4) { [bgra8Unorm[i], bgra8Unorm[i + 2]] = [bgra8Unorm[i + 2], bgra8Unorm[i]]; @@ -15,6 +14,7 @@ function bgra8UnormFromRgba8Unorm(rgba8Unorm) { } function rgba16floatFromRgba8unorm(rgba8Unorm) { + // This is used only once. May need to optimize if reused. const rgba16Float = new Float16Array(rgba8Unorm.length); for (let i = 0; i < rgba8Unorm.length; ++i) { rgba16Float[i] = rgba8Unorm[i] / 255; @@ -22,14 +22,25 @@ function rgba16floatFromRgba8unorm(rgba8Unorm) { return rgba16Float; } -function render(device, { canvas, format, alphaMode, colorSpace, textureData }) { + + + + + + + + +function render( +device, +{ canvas, format, alphaMode, colorSpace, textureData }) +{ const context = canvas.getContext('webgpu'); context.configure({ device, format, usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT, alphaMode, - colorSpace, + colorSpace }); const texture = context.getCurrentTexture(); @@ -37,26 +48,14 @@ function render(device, { canvas, format, alphaMode, colorSpace, textureData }) } export function runColorSpaceTest(format) { - runRefTest(async t => { - const kRGBA8UnormData = new Uint8Array([ - 0, - 255, - 0, - 255, - 117, - 251, - 7, - 255, - 170, - 35, - 209, - 255, - 80, - 150, - 200, - 255, - ]); + runRefTest(async (t) => { + const kRGBA8UnormData = new Uint8Array([ + 0, 255, 0, 255, + 117, 251, 7, 255, + 170, 35, 209, 255, + 80, 150, 200, 255] + ); const kBGRA8UnormData = bgra8UnormFromRgba8Unorm(kRGBA8UnormData); const kRGBA16FloatData = rgba16floatFromRgba8unorm(kRGBA8UnormData); const width = kRGBA8UnormData.length / 4; @@ -64,11 +63,16 @@ export function runColorSpaceTest(format) { const testData = { rgba8unorm: kRGBA8UnormData, bgra8unorm: kBGRA8UnormData, - rgba16float: kRGBA16FloatData, + rgba16float: kRGBA16FloatData }; const textureData = testData[format].buffer; - async function createCanvas(creation, alphaMode, format, colorSpace) { + async function createCanvas( + creation, + alphaMode, + format, + colorSpace) + { const canvas = document.createElement('canvas'); canvas.width = width; canvas.height = 1; @@ -79,15 +83,15 @@ export function runColorSpaceTest(format) { render(t.device, { canvas, format, alphaMode, colorSpace, textureData }); break; - case 'transferControlToOffscreen': { - const offscreenCanvas = canvas.transferControlToOffscreen(); - render(t.device, { canvas: offscreenCanvas, format, alphaMode, colorSpace, textureData }); - break; - } + case 'transferControlToOffscreen':{ + const offscreenCanvas = canvas.transferControlToOffscreen(); + render(t.device, { canvas: offscreenCanvas, format, alphaMode, colorSpace, textureData }); + break; + } - case 'transferControlToOffscreenWorker': { - const offscreenCanvas = canvas.transferControlToOffscreen(); - const source = ` + case 'transferControlToOffscreenWorker':{ + const offscreenCanvas = canvas.transferControlToOffscreen(); + const source = ` ${render.toString()} onmessage = async (event) => { @@ -101,36 +105,35 @@ export function runColorSpaceTest(format) { } }; `; - const blob = new Blob([source], { type: 'application/javascript' }); - const url = URL.createObjectURL(blob); - const worker = new Worker(url); - let resolve; - const promise = new Promise(_resolve => (resolve = _resolve)); - worker.onmessage = event => { - resolve(event.data); - }; - worker.postMessage( - { canvas: offscreenCanvas, format, alphaMode, colorSpace, textureData }, - [offscreenCanvas] - ); - - await promise; - break; - } + const blob = new Blob([source], { type: 'application/javascript' }); + const url = URL.createObjectURL(blob); + const worker = new Worker(url); + let resolve; + const promise = new Promise((_resolve) => resolve = _resolve); + worker.onmessage = (event) => { + resolve(event.data); + }; + worker.postMessage( + { canvas: offscreenCanvas, format, alphaMode, colorSpace, textureData }, + [offscreenCanvas] + ); + await promise; + break; + } } } - const u = kUnitCaseParamsBuilder - .combine('alphaMode', kCanvasAlphaModes) - .combine('colorSpace', kCanvasColorSpaces) - .combine('creation', [ - 'canvas', - 'transferControlToOffscreen', - 'transferControlToOffscreenWorker', - ]); + const u = kUnitCaseParamsBuilder. + combine('alphaMode', kCanvasAlphaModes). + combine('colorSpace', kCanvasColorSpaces). + combine('creation', [ + 'canvas', + 'transferControlToOffscreen', + 'transferControlToOffscreenWorker'] + ); for (const { alphaMode, colorSpace, creation } of u) { await createCanvas(creation, alphaMode, format, colorSpace); } }); -} +} \ No newline at end of file diff --git a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace_bgra8unorm.https.html b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace_bgra8unorm.https.html index c910c97b1dd..a0068dbf7af 100644 --- a/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace_bgra8unorm.https.html +++ b/tests/wpt/webgpu/tests/webgpu/webgpu/web_platform/reftests/canvas_colorspace_bgra8unorm.https.html @@ -14,6 +14,7 @@ +

    gpu{_q3xDNK$F7*e*^J-a7o(GC+ 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/round.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/round.bin new file mode 100644 index 0000000000000000000000000000000000000000..c3b30b68f0a113da6a8b01f6ec0ff44aa0ad362c GIT binary patch literal 14816 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 T6eq9i)O#h~bEuA!;^hAi%ep0Z literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/saturate.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/saturate.bin new file mode 100644 index 0000000000000000000000000000000000000000..39df7169b750d6727701e15ac9270f9b6eb5e69e GIT binary patch literal 17096 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sign.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sign.bin new file mode 100644 index 0000000000000000000000000000000000000000..2f3b2aa258b22dcee4155780650f6bddbba0aaee GIT binary patch literal 17136 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sin.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/sin.bin new file mode 100644 index 0000000000000000000000000000000000000000..d583876c518cba48505c271089ec7e34514bf2ac GIT binary patch literal 13272 zcma)>c~lfv7Ke)ll%U3_IE;vZhPXv>LuhF1lEAnj2G`(;M2R86IA~x*aY59?C5{?5 z;u=9zTyO!RXm>*wE?_*U!5Gnq5;96+m>Bmlz8doWlJFe2-z!`si zLCHJU=aq1$$L;>${G+|Wp3>gQ&YiKfVc@imdc*D!6%NkFl}2!8Rn4={95WA`eWiim zTrp(Zs~2Q}b1}asI4hRg?aSTm;25@c1Ey!wbPWDqo#qA zwdf~scHBr)w(m*<=id9@gA*4vM;Z5IHaG(ZUIeGlvbjp{p>x66)ah$*$}eOnWtkb^ z+-`gloZ2Syl+ugnMBcEYGdx52z6Cn#zbXRf&L`>0?Z|XE*Dt&FgLArYmQs;23!Lyz zbHRzLnXZi6G98@ENn5~K(>bK2Eu~CJvm_7iNPK9Wh!N>O2~p)Xyh_)9hlD(sW%EIPKng8=SN2!<93!;oy{e zMuF3QO_1U@G6PvYfRpIu z4o+OQvodaiGdO-l_w4-n%DYl;-!rZr*0JQ^^Wc;%I%7Z4=nOc=jue6u8F#=Qadkg9 ztwL9W(?4USU3Pp1&Z+4W!TC#@ckQj)#Dg<=W(RP5qdM4qqS}Mw_1m!$eqGAm<0baJ zM`3R&e&hsBrw7g@L+c&Ie0?UTA3qN9F!K6wht35Kou?n24;=co*S8-A8_ay1c#nKnVv&%=vfAb zo@1GwXK-ju0EgBCnbrkxXl((9))kr77jS5e0*BTonbs+AXsrW>);XEhJ8)>t1c%m3 znbu8kXzc}u)?Jy_UvOv*2Zz>gnbvV|XfFVV_5qpp18`_h0f+Vznf4WMXm0|C_9eM? zcm_DM$ALrpn@sy0IJ8%SL;Ivm`z1KE=Ym7~txWqaIJ9?zL;JQ&`!_h00l=aCU#1)Y z4rK{&C`ZVYC%~ah0uJR7nQ{p@lx@JFTq9Gy0f#bDfBt+?K9VUXfkRmf9LiZTD1&1;%IFx5)%C+E7HU@`s zu}t|G9Lm_>P`;KaXM;mo9URK(X3FcZj#1_Zhw{Feaz8lKJAgxdgPHmVaHt0Xhx!jQ z^&#L;F9QzsF=py#z@eT99O{S6)E9w6y%jjrSDC550*87uaHv1)M|~RXP1NgwQ{yUG zsox9XYq-Oa;Slpsa{SpRzMFpIiB`SrQOqN)dgnCDL#_I<2kjqd)o-ONy{lCpar^Eq zt$I$K_-6QBM|tDak%P^(pc>7BDzwdzULLDgFI z%Gj(+TJ=6vjjOckpO5_LyjJ~D<)uokdfc$^vs(4iirp1jb^pOFPifT`m(MEKs@F$c zJFZoaJ{omYt6pF}Xcu*dG^ZlpK07Mk&gY&-v3D_d(ro_4Gi)A^(`JM$v~Z_*^BY!= z<*6`-tBY4TMO(3+!-%P)^Gp)^I&VQ96cx2cVm{GW7}-_ zLeKH_n!HiZS+MT>Iz6Y(BP>(T8N7P?YCUIf^JXjcoaW0@m+Ltx?lnvGoT|kGmgqSl zt_K$CIhz-Feyrz6(!6$6u9LT?tFCi0 z*<07SZhTqSq5V+Tp=bO5aU{L__50qd=g@D~b?Dl49r_#UI&?2|9lEEw4$Tc+hvt~B zLvvNvp*gSX(CyN7=oxg@yBG8_LO#d4((08dJgSz9rPU9EB*Bx+H*VUIkb0o(Q_yRbklPvOZ4Cl z

    yYG8oo}5HKL?ug%gUGewa?Rs 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 K`9%7e=l>6RA4Ed{ literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/normalize.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/normalize.bin new file mode 100644 index 0000000000000000000000000000000000000000..434bbe2dd167c1dbb06074abd9e357de729a156c GIT binary patch literal 70128 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�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�ekQ(g0@>vg%emgJgy z*Lr{OAzX7p4_tFX4_tFX4_tFX4_tFX4_tFX4_tFX4_tFX4_tFX4_tFX4_tFX4_tFX z4_tFX4_tFX4_tFXkJjOzC-i9N=D$ejfoo3a(VW9Rp$D!xp$D!xp$D!xp$D!xp$D!x zp$D!xp$D!xp$D!xp$D!xp$9fLp~tTDsMqHjYdc!s_BGqO{yUk92gdgvt#8}&W7pi@ z>&c9heanoKeTy@0`yOYsd36T&O8Sg?-J*8?a6e_eYfk8aYfk8aYfk8aYfk8aYfk8a zYfk8aYfk8aYfk8aYfk9V{-}-Ufoo3q`QSckLJvA5^uRSI^uRSI^uRSI^uRSI^uRSI z^uRSI^uRSI^uRSI^uRSI^uRSI^uRSI^uRSI^uRSI^uRSI^uRSI^uRSI^uRUu9@T%O zy5>>WRM*_Q)@wDhUGr$hY}Y)RG21ndX3TcYqZzYZ^JvCw*W71}T(f1kX3KERmf@N$ z!!=umYqkv6Y#FZEGF-D|xMs_6&6eSsEyFcihHJJA*K8TC*)m+SWw>U`aLtzCnk~aM zpULhyo0@C34A*QKuGunNvt_tu%W%z>;hHVOHCu*jwhY&78LrtfT(f1kX3KERmf@N$ z!!=umYqkv6Y#FZEGF-D|xMs_6%{{B%Cuh6n(Tv%yc{F3TYaY#*?V3k3X1nImjM=Wa z�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�ekQ(g0@>-B!SmzU(4d)In@@F84tLJwSXLJwSXLJwSX zLJwSXLJwSXLJwSXLJwSXLJwSXLXXzr-zM~E=YW5c&;!?;&;!?;&;!?;&;!?;&;!?; z&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?; z(4)EEV~=`$ZnkUg@AYIx8~!I(=l}lXKj!ai?lbCji#FmoY7JgQ(bfKTCdg2cFm(1vt9FO#%$L-nlalok7mqv&7&E!U2~r?a?O_Enk~aM zTZU`44A*QKuGunNvt_tu%W%z>;hHVOHCu*jwhY&78LrtfT(f1kX3KERmf@N$!!=um zYqkv6d?vf+v$nZr%W%z>;hHVOHCu*jwhY&78LrtfT(f1kX3KERmf@N$!!=umYqkv6 zY#FZEGF-D|xMs_6&6eSsEyFcihHJJA*W9!EeR8&I9?h8TnnyEcyXMi1*{*psW43D^ z&6w?)`;7XzHq|wcx?bLepPTKP z`+Gf^QOxn_ysM){{$pHopHZ({v=PU>eks?S&;!?;&;!?;&;!?;&;!?;&;!?;&;!?; z&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;!?;&;$RF(1Q*M zJ#ftlJ#ftlJ#ftlJ#ftlJ#ftlJ#ftlJ#ftlJ#ftlJ#ftlJ#fvvNA(}6u6fio)iw97 z^;*qr*F2gr+cl47%y!MA8M9sUXvS>UJeo1vHTM}K*K8TC*)m+SWw>U`aLtzCnk~aM zTZU`44A*QKuGunNvt_tu%W%z>;hHVOHCu*jwhY&78LrtfT(f1kX3KERXR>=f z4A*QKuGunNvt_tu%W%z>;hHVOHCu*jwhY&78LrtfT(f1kX3KERmf@N$!!=umYqkv6 zY#FZEGF-D|xMs_6%{{B%Cuh6n(Tv%yc{F3TYaY#*?V3k3X1nImjM=Wa�ekQ(g0@ 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/pow.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/pow.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f23a1f3818a2a86c256a3b39a4e1d0067af9a45 GIT binary patch literal 1282944 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 LrFXvQ&;R`&9OQX4 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/quantizeToF16.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/quantizeToF16.bin new file mode 100644 index 0000000000000000000000000000000000000000..9e4308d5cd301234b2af1e7daf0dad15f87f042c GIT binary patch literal 8904 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/reflect.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/reflect.bin new file mode 100644 index 0000000000000000000000000000000000000000..6608646fd01ecaeaaa9c78c9decdaeb8e338b64b GIT binary patch literal 205288 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

    J=-tP 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 Wp5F>Cl?71QLY4o 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

    t*fI4A*P^)X^(ar_eoas1 z_rEA`+y9u)(yMF4c)H%^9oT*+&8Oko$rR`K486j&MB#d(Ujg5*WPByg@wL#a5YIMx z75EOC=ttm_l~$}5nFt(j%I53O1?KM}o4*q0=C6f*1pg4v2K7Afwb84aoAR~Mu;5=C4U73K4U_lmqrO-gwl6+Y!}j8z zs$oX`-)d%6d%|;bR9(YoZ)ykgYH8RS*m`?D(~o=H7e7zM=a0XiWEdZEccC9YUv+N$ z{kZrb+jh(YM~U0o81q?L6@LE?GUYi}CC>3NTJ>PH+5AR!ycg%T#~D7viKyjreM_w$ z@i@bW+B(a30InL}gfo0?v?|G$2HFw$5KoE^ ^8%LVf33o9m`$QO!F)_=PG;{25P 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 z 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%0D+444& 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%0D<=!uR)2W87=sPx9nh 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

(0)!R$87G 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..e9d27019a3b4ecdc829a6aadaba9b0f5174b53fe GIT binary patch literal 171072 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_remainder.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_remainder.bin new file mode 100644 index 0000000000000000000000000000000000000000..d21370aec98c04835be1fd91662f44607c685252 GIT binary patch literal 118944 zcmeHw%dTC?k=?#UYSL&J?tu-%F#HWfcMmxr3akfJKj4`l2$~7qfYi{WCKu2h89g=( z!|*ro12`xYN~NOoNg7;7WaK;6%7{a^QAL6*@bJ{m75Ru*D|halvG@6R*LD4S`TM); zSJyAE-^kzJUcb2h>H25+`wKay|Nid!m+QK_u1CRrB7d(ZkAKy_Ka;O=_`3V#dbH!$ zTXOsjIsTd)f568d|A3F*-Q(jIJ6^`%`!Az`<9d98k6%y8@n_`tb8`F@KK}SMIWGRc z-unKl|L5ZpvA1*FE{Vfd{^oi!;(AFuw({54>#1DgvXwtv52IY;vzE(|i8mUjwOo!& zMsN^IHBe^Qg?@OSv4G=0S<-W)I@L*n>E)sg~vs| z@VLYi9oIOb;~GD7T%v@J%Xt;y%X$fntE`v6@v>e*$0Z)9{!8KjkBk4&@v>e5_3Qcb z?jHLe9vA<^OuYtN+n)^*=hU{)flK|LC~-A01c!qvPs-cwGDskBk4|aq&Mo zuKtI|#s3%aKRhn}hsVYL@VL%rp#CzCf#d3bgjfH=~p@j;sGK%zt=X{g3eKe{@{^4~`fAgX6{j;CS&rIVI@x{SS^8|D)qN|A6Cqy#|kq|KV}*KRmAU52(M)Kj3(of57oF|DfaI ze^h^&e*nJBKj3(of6#I9KdN8(50C5o1L`UB4>~UXe|&=Z508ug;c@XlJTCr6$JPJn zxcVO*SO3G~;(v5p{f~~T|Iu;vKRhn}hsVYL@VNLN9asOu<2wI5#r}uK#sBkhS$X;O z?NpzX`}OTw{@~WPOSwd9U*9g}60zw%LYb$Qa#_C4EpXzFo`x`gSe% z>)W;5uW#3KzrLNym-Q_=uJL_F;yWFeIQi?TtCO zabD~}oDbzCℜ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 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_subtraction.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_subtraction.bin new file mode 100644 index 0000000000000000000000000000000000000000..97080a8ce54753d536d5f71c324fd540d85a2f7f GIT binary patch literal 169680 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 Qevgt{=Lg{TC_W_r9|@zLR{#J2 literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_addition.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_addition.bin new file mode 100644 index 0000000000000000000000000000000000000000..be7b997bd8eb768d8fcea2b508c7140dbd00a658 GIT binary patch literal 279984 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�apzE_$%t;udzPLH49{JNjslv-QbTMWOk|V570H( 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 b{P-*h_wL$YJL5p!hZBBLL+||R62|`nLX|5A literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_division.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_division.bin new file mode 100644 index 0000000000000000000000000000000000000000..f80461c21b480931a0d2694975325b23c268ea17 GIT binary patch literal 174960 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 MsaF0i)353O2Tf{;^8f$< literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_logical.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f32_logical.bin new file mode 100644 index 0000000000000000000000000000000000000000..5a6fbe92d5d21e8db004110e3791afea6e086372 GIT binary patch literal 37416 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

>u|}wwYf9Bf{ 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 V+|ss$Yc)sXCjaz!dc@%M^c%$XAPfKi literal 0 HcmV?d00001 diff --git a/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin b/tests/wpt/webgpu/tests/webgpu/resources/cache/webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin new file mode 100644 index 0000000000000000000000000000000000000000..6d5f4e1ea1fda694810c430977a2cc51b826b97f GIT binary patch literal 1521472 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%0AN#MYOwoCtppRQ9_8)xUp)BK1p#1xM; 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